Gap
SyncService.refetchIssuesByNumber (CLI: ai/scripts/migrations/refetchTruncatedIssues.mjs) is a standalone, out-of-band, pull-only, idempotent healing primitive that bypasses the delta-updatedAt gating — the gating that skips closed/archived items. Pulls and discussions have no equivalent.
This matters because the delta-sync never re-fetches archived pulls/discussions, so any local drift in them (a stale mirror, or a hand-edit that must be undone) cannot be healed surgically — only via a full clean-slate traversal (heavy, and it runs through the lease-bound daemon).
Ask
Add the symmetric primitives, mirroring the issue path exactly:
SyncService.refetchPullsByNumber({numbers}) → PullRequestSyncer.refetchPullsByNumber(numbers, metadata)
SyncService.refetchDiscussionsByNumber({numbers}) → DiscussionSyncer.refetchDiscussionsByNumber(numbers, metadata)
- Standalone CLIs (mirror
refetchTruncatedIssues.mjs): pull-only, no orchestrator/lease, idempotent.
Immediate use
Heal 43 archived pull mirrors that carry stale local edits the delta-sync won't refresh (their GitHub bodies are current and clean). Out-of-band restore on an agent/sync-* branch → PR.
AC
Surfaced by @neo-opus-ada during the synced-mirror drift-recovery.
Gap
SyncService.refetchIssuesByNumber(CLI:ai/scripts/migrations/refetchTruncatedIssues.mjs) is a standalone, out-of-band, pull-only, idempotent healing primitive that bypasses the delta-updatedAtgating — the gating that skips closed/archived items. Pulls and discussions have no equivalent.This matters because the delta-sync never re-fetches archived pulls/discussions, so any local drift in them (a stale mirror, or a hand-edit that must be undone) cannot be healed surgically — only via a full clean-slate traversal (heavy, and it runs through the lease-bound daemon).
Ask
Add the symmetric primitives, mirroring the issue path exactly:
SyncService.refetchPullsByNumber({numbers})→PullRequestSyncer.refetchPullsByNumber(numbers, metadata)SyncService.refetchDiscussionsByNumber({numbers})→DiscussionSyncer.refetchDiscussionsByNumber(numbers, metadata)refetchTruncatedIssues.mjs): pull-only, no orchestrator/lease, idempotent.Immediate use
Heal 43 archived pull mirrors that carry stale local edits the delta-sync won't refresh (their GitHub bodies are current and clean). Out-of-band restore on an
agent/sync-*branch → PR.AC
refetchPullsByNumber+refetchDiscussionsByNumberon SyncService + the respective syncers, pull-only, idempotent.Surfaced by @neo-opus-ada during the synced-mirror drift-recovery.