LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-ada
stateMerged
createdAtMay 30, 2026, 5:15 PM
updatedAtMay 30, 2026, 5:22 PM
closedAtMay 30, 2026, 5:22 PM
mergedAtMay 30, 2026, 5:22 PM
branchesdevchore/rebucket-archive-content-12194
urlhttps://github.com/neomjs/neo/pull/12201
Merged
neo-opus-ada
neo-opus-ada commented on May 30, 2026, 5:15 PM

Authored by Opus 4.8 (Claude Code). Session 94a91ebc.

Related: #12194 Related: #12196 Related: #12186

Executes the #12196 re-bucket migration tool against the live archive — the deferred, operator-gated content step #12196 set up. The merged bucketing fixes (#12188/#12184) are forward-only (sealed-chunk + oldVersion precedence pin existing items), so the tickets-view pile-up needed this one-time migration to clear.

What ran: node ai/scripts/migrations/rebucketArchive.mjs on the latest dev archive (a fresh branch off dev, including the hourly syncs).

Result:

  • 4144 mis-bucketed closed issues relocated out of the v8.1.0 catch-all into their correct release folders (resolved from the full release history, oldVersion ignored).
  • v8.1.0: 4133 → 24 (its true count). Largest resulting bucket: v12.0.0 = 413. No catch-all remains.
  • 4628 issues unchanged. Distribution spans v1.0.x → v12.x (838 distinct target buckets).
  • Git detected all 4144 moves as renames (content byte-preserved); .sync-metadata.json paths + issues _index.json updated to match.

FAIR-band: over-target — sole active implementer on an operator-directed lane (epic #12186; operator chose approach B and directed execution).

Evidence: L1 — dry-run on this exact dev state previewed 4144 move / 4628 unchanged / max-bucket v12.0.0=413 / v8.1.0→24, identical to the real run's summary. L2 — real run exit 0; v8.1.0 dir verified at 24 .md on disk; 4144 git-renames staged with 0 raw add/delete (content preserved). Residual: portal regen + deploy verification (operator, post-merge).

Deltas from ticket (if any)

  • Run executed on a fresh branch off latest dev (includes hourly archive syncs), not the #12196 feat branch — the dry-run was re-verified on that exact state before the real run.
  • Cosmetic follow-up (not blocking): the migration logs a per-move [ARCHIVE ANOMALY] ... Dry-run review required WARN (IssueSyncer.mjs:399) on the real run too — the wording is hardcoded (#planBuckets has no dryRun param), so 4110 lines printed here. Worth gating on !ignoreOldVersion.

Test Evidence

  • Dry-run (this exact dev state): Would move: 4144 · unchanged: 4628; 5 largest buckets v12.0.0=413, v11.0.0=388, v12.1.0=213, v11.18.0=177, v11.23.0=153; v8.1.0=24.
  • Real run: exit 0, [REBUCKET] moved 4144 issue(s), 4628 unchanged; v8.1.0 on disk = 24 .md (was 4133).
  • Staged: 4144 renames (all content-preserving), 2 modified (_index.json, .sync-metadata.json), 0 added, 0 deleted.
  • The migration tool ships with 3 unit tests merged in #12196 (212 green).

Post-Merge Validation

  • Regenerate the portal tickets index + run the concurrency-capped SSR regen + deploy.
  • Confirm the tickets-view shows the corrected per-release buckets (no v8.1.0 catch-all).
  • Close #12194.

🤖 Generated with Claude Code