LearnNewsExamplesServices
Frontmatter
id12194
titlegh-workflow syncer: one-time re-bucket migration to clear the existing v8.1.0 pile-up (sealed-chunk-pinned)
stateClosed
labels
bugaiarchitecture
assigneesneo-opus-ada
createdAtMay 30, 2026, 8:16 AM
updatedAtMay 30, 2026, 3:06 PM
githubUrlhttps://github.com/neomjs/neo/issues/12194
authorneo-opus-ada
commentsCount0
parentIssue12186
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMay 30, 2026, 3:06 PM

gh-workflow syncer: one-time re-bucket migration to clear the existing v8.1.0 pile-up (sealed-chunk-pinned)

Closed v13.0.0/archive-v13-0-0-chunk-14 bugaiarchitecture
neo-opus-ada
neo-opus-ada commented on May 30, 2026, 8:16 AM

Context

Sub of #12186. The bucketing logic fixes — #12188 (fetch-all-releases) + #12184 (milestone semver-guard), merged via #12192 — are forward-only: they correct how new closures bucket, but do not move the existing pile-up.

The Problem (verified)

IssueSyncer.mjs:586-606 (sealed-chunk enforcement) forces any already-archived issue whose recomputed bucket differs from its current path to stay put:

} else if (wasArchived && targetPath !== oldAbsolutePath) {
    logger.warn(`[SEALED CHUNK ENFORCEMENT] ... Forcing retention at ${oldAbsolutePath}.`);
    targetPath = oldAbsolutePath;
}

A clean-slate re-sync (lastSync === null) still seeds from existing metadata.issues (:562 {...metadata.issues}), so oldIssue exists → sealed. Result: a re-sync will NOT move the existing 4,133 v8.1.0 issues (56.9% of the archive). The portal tickets-view stays garbage until a deliberate one-time migration runs. (The epic's "after re-sync, no v8.1.0 catch-all" AC silently assumed a re-sync clears it — it doesn't.)

Approaches

  • A — Regenerate (ADR-canonical): clear metadata.issues + delete resources/content/archive/{issues,pulls,discussions}/ → clean-slate re-sync re-fetches + buckets fresh (no sealed conflict). Matches ADR-0004's regeneratable-cache model. Destructive (deletes committed content) + heavy full GitHub re-fetch (now rate-limit-hardened by #12193).
  • B — Non-destructive migration: a one-time sealed-chunk override that re-buckets the existing archive into correct folders, ideally metadata-driven (local file moves using the new bucketing logic + full sortedReleases; no full GitHub re-fetch). No delete; controlled + reviewable; more code than A.

Operational notes

  • sync_all runs on dev only.
  • Either approach produces a large content diff (4,133+ files move buckets).
  • The follow-on portal regen needs a concurrency cap first — the un-capped SSR fan-out melted the host at load 117 on 18 cores (middleware-v2 build.mjs).

Status

Deferred (operator 2026-05-30: finish #12191 first; schedule this migration deliberately for the large diff + regen).

Acceptance Criteria

  • After the migration, resources/content/archive/issues/ has no v8.1.0 catch-all; the 4,133 mis-bucketed issues distribute to their true historical releases.
  • No data loss — issue content preserved; only bucket paths change.
  • Portal News → Tickets shows clean release groups.
  • _index.json + tickets.json regenerated consistently.

Related

  • #12186 (epic), #12188 / #12184 (forward-only logic fixes), #12193 (rate-limit hardening — de-risks approach A's re-fetch).

Retrieval Hint: grep SEALED CHUNK in ai/services/github-workflow/sync/IssueSyncer.mjs.

tobiu referenced in commit b9e2d48 - "feat(github-workflow): one-time non-destructive archive re-bucket migration (#12194) (#12196) on May 30, 2026, 3:06 PM
tobiu closed this issue on May 30, 2026, 3:06 PM
tobiu referenced in commit e20c9b5 - "fix(github-workflow): re-bucket 4144 archived issues to correct release folders (#12194) (#12201) on May 30, 2026, 5:22 PM