docs(migrate): v9 corpus backfill — run report + verified evidence (PR C) - #163
Conversation
Executed migrate-v9 on a fresh copy of ~/griff_data (never in place) and verified the result. Live corpus untouched; production cutover is a separate authorized step. Evidence (all independently recomputed): - 9907 standalone chunks + 2 manifests (curated 220 + ingest 9687) migrated, zero refusals — every source.filename resolved uniquely. - sha256 coverage 100% (9907/9907; 220/220; 9687/9687); track_index 0% (never guessed); each digest equals the SHA-256 of the resolved tab. - structural diff: stripping the added sha256 reproduces every record exactly; the only manifest change is schema_version 8→9. - census before/after: v9 sha256 coverage 0→9907; input_digest and manifests changed; every other census block identical. - file-level holdout smoke: v8 FAILS CLOSED (9907 keyless) → v9 PASSES (399 source files, deterministic 20% holdout, zero source-file leakage). - incidental: 400 filenames → 399 digests (two byte-identical Underoath spellings) — a latent same-recording signal for future song_id work. Adds the v9 census artifact; leaves the #158 v8 baseline untouched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012T7SRMiXmZe5v1imtrKMPi
|
Warning Review limit reached
Next review available in: 44 seconds Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughAdds a migration run report and a JSON health artifact for the v8-to-v9 corpus backfill, covering source hashing, reconciliation, coverage, readiness, integrity, duplicate detection, and reproducibility details. Changesv9 Corpus Audit
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 68adfecec3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
docs/audit/2026-07-v9-corpus-backfill.md (1)
74-77: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueAdd a language to the fenced block (MD040).
markdownlint flags this fence.
textsuffices for digest output.♻️ Proposed fix
-``` +```text before: c004d5225b51563137d538495f076e6e4f1086f407a1de2c8372fbcd3d186194 after : 810421840463560b78233ebe79e89d05101b3ca14a0ee29a7774dc500cafd790</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@docs/audit/2026-07-v9-corpus-backfill.mdaround lines 74 - 77, Add the
textlanguage identifier to the fenced digest-output block so it satisfies
markdownlint rule MD040, preserving the block’s existing contents.</details> <!-- cr-comment:v1:93428e29ded48a9de346a5b4 --> _Source: Linters/SAST tools_ </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.Inline comments:
In@docs/audit/2026-07-v9-corpus-backfill.md:
- Around line 122-123: Adjust the wrapped sentence around the Underoath
filenames so the hyphenated phrase does not split across lines with a leading
space; keep the wording and meaning unchanged while ensuring Markdown renders
“differently-spelled” correctly.
Nitpick comments:
In@docs/audit/2026-07-v9-corpus-backfill.md:
- Around line 74-77: Add the
textlanguage identifier to the fenced
digest-output block so it satisfies markdownlint rule MD040, preserving the
block’s existing contents.</details> <details> <summary>🪄 Autofix (Beta)</summary> Fix all unresolved CodeRabbit comments on this PR: - [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended) - [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes </details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro Plus **Run ID**: `356f55ae-22b3-4e7e-ba35-234213b122e6` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 36965e538fde8d3ed591a50499bfee2c64dadcba and 68adfecec3032f05fed877b1e8040ddcc2d8aa78. </details> <details> <summary>📒 Files selected for processing (2)</summary> * `docs/audit/2026-07-v9-corpus-backfill.md` * `docs/audit/2026-07-v9-corpus-health.json` </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
… layout Close the arbiter's REQUEST CHANGES on the reproduction contract (the migration was fine; the notarization was not). 1. Directory layout documented. The tabs root is <copy>/tabs with the 410 tab files nested in <copy>/tabs/tabs/, so census records each identity with a `tabs/` path component — which is what the committed input_digest is computed over. Re-running census with this exact root reproduces e2b72750… bit-for-bit (verified on a fresh copy; committed v9 census JSON is byte-identical to fresh output). 2. Committed deterministic verifier. migrate/verify-v9-backfill.py reproduces and checks every independent claim — sha256 coverage, per-record digest correctness, the structural diff, both record-tree digests, and the file-level holdout partition — with the exact algorithms (tab resolution, tree-digest formula, holdout bucket) fixed in its docstring. Reproduce section now drives it; record-tree digests updated to the verifier's canonical values. Clean-room check on a fresh ~/griff_data copy: verifier ALL CHECKS PASS (9907/9907 coverage, 0 track_index, 77/1792 holdout vs 322/8115, 0 leakage), census input_digest reproduces. Cosmetics: fixed the "differently-spelled" line wrap; digest fences tagged `text`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012T7SRMiXmZe5v1imtrKMPi
REQUEST CHANGES addressed — reproduction contract now holdsNew head 1. Census tabs-root / layout. The gap was documentation, not the digest. The copy's tabs are nested: the tabs root is 2. Committed deterministic verifier. Clean-room proof (fresh
Cosmetics fixed: The #158 v8 baseline ( |
Close the arbiter's remaining notary defect: ALL CHECKS PASS proved "some correctly-migrated 9907-record corpus", not THIS snapshot. The verifier now require()s the exact evidence fingerprint: before/after record-tree digests, 399 distinct sources, and the 77/1792 · 322/8115 holdout split against committed constants — a different corpus (even one this tool migrated correctly) now fails instead of printing ALL CHECKS PASS. Proven with two negative runs (swapped census files; after=v8 corpus) that exit 1. Given the two census JSON outputs, the verifier also asserts they are byte-identical to census/corpus-health.json and the committed v9 artifact — so "byte-identical to fresh output" is machine-checked, not eyeballed. The Reproduce section now runs census first and passes both JSONs to the verifier. Clean-room on a fresh ~/griff_data copy: fully-bound verifier exits 0 (coverage, correctness, structural diff, pinned tree digests, pinned holdout counts, census byte-identity). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012T7SRMiXmZe5v1imtrKMPi
REQUEST CHANGES addressed — evidence now bound to this snapshotNew head 1. A different corpus — even one this same tool migrated correctly — now fails instead of printing 2. Census artifacts are machine-checked, not eyeballed. Given the two census JSON outputs, the verifier asserts them byte-identical to 3. Stale Codex tabs-root thread — replied and resolved; the current text (nested Clean-room proof (fresh No live corpus touched; #158 v8 baseline untouched; no production cutover. Awaiting GO. |
What
PR C of the corpus-modernization arc: executed
migrate-v9(#162) on a fresh copy of~/griff_dataand verified the result. Docs/evidence only — the live corpus is untouched, and a production cutover is a separate, separately-authorized step.Arc: A (census #158) → B (migration contract + tool #162) → C (run + verify, this) → D (v10
song_id, blocked on ADR-0031).Verified results (all independently recomputed)
sha256coveragetrack_indexsha256== SHA-256 of the resolved tabsha256reproduces every record exactly; only manifest change isschema_version 8→9input_digest+manifestschanged; every other census block identical (counts, reconciliation, ensemble, duplicates, …)Incidental finding: 400 referenced filenames → 399 distinct digests — two differently-spelled Underoath filenames are byte-identical (the migrator's duplicate-bytes-are-unique rule handled it), a latent same-recording signal for the future
song_idwork.Deliverables
docs/audit/2026-07-v9-corpus-backfill.md— full report with commands, digests, and reproduce steps.docs/audit/2026-07-v9-corpus-health.json— the v9 census artifact. The feat(census): read-only real-corpus health census (PR A) #158 v8 baseline (census/corpus-health.json) is left untouched.Notes
_inventory/artifacts are not its output — a cutover carries them over verbatim.track_indexrecovery (separate work). No v10 (blocked on ADR-0031).🤖 Generated with Claude Code
https://claude.ai/code/session_012T7SRMiXmZe5v1imtrKMPi
Summary by CodeRabbit