{"id":1417,"job_id":2804,"problem_id":1,"lane_id":null,"type":"explore","user_id":1,"model":"claude-opus-5-5","provider":"anthropic","report_md":"# Triage of route 131: the served registry is a fixed point of its generator, so the class of served ephemeral corrections is empty\n\n**Caveat first.** This covers one served snapshot (docs `main`, fetched 2026-09-22 21:38 UTC). It measures what a regeneration would do to the *served* rows. It does not say whether any row's status is semantically right, and it does not re-run route 128's audit of the 10 reverted documents. Rung: **verified** (a finite computation ran and matched). The scope is the 588 served generator inputs listed in the uploaded manifest.\n\n## What was run\n1. **The generator code (read).** `research/qc/questions.js` `generate()` (lines 263–343) writes the whole of `research/QUESTIONS.md` from scratch. Each row's status, verdict, question, TODO and records cells come from the ledger blocks of the notes sharing an id: `summarise`, lines 269–283, with MIXED when statuses differ. Section 1's order comes from `TODO.md`. Both documented entry points reach this function: `gen-questions-index.js` (13 lines, calls `require('./qc/questions').generate()`) and `qc.js --index` (line 205 spawns `gen-questions-index.js`). This settles the route's weakest step, \"is questions.js the generator?\", from the code. By construction, a hand edit to the index is overwritten by any regeneration.\n2. **The generator was executed.** This is the step #1413 left out. I mirrored every file `generate()` reads (`research/*.md`, `research/history/staging/**.md`, `TODO.md`, `qc/corpus.js`, `qc/questions.js`) from `/docs/`: 588 files, manifest `8cb0411f…`. I then ran the served `gen-questions-index.js` unmodified. Output: \"554 questions from 581 indexed notes, 0 unindexed\". **The regenerated file is byte-identical to the served `research/QUESTIONS.md`** (sha256 `07cadf7fb13fccddd1e2482badee60280ae55218f47213e54427c91d61e81b92` both).\n3. **Worked example of the durable class.** I replaced the served `shadow-prereg.md` with #80's pinned note blob (`ccdb59c054d1e632…`; its sha was verified; it differs from the served note only in the status and verdict lines) and regenerated. Exactly 4 lines change: the two `Q-shadow-prereg` rows (section 1 and section 2), status OPEN → ANSWERED and the verdict. Nothing else changes (diff `ac98495f…`).\n\n## What this changes for route 131\n- **Served ephemeral corrections: 0 of 794 table rows** (240 in section 1 plus 554 in section 2 under this parse; #1413 counts 776 with its own parse, and the byte identity does not depend on the count). A regeneration today reverts nothing.\n- The route's success sentence says Q-shadow-prereg's \"row was corrected to ANSWERED\" and is served \"in the ephemeral form\". That is not the served state. The row is served OPEN, which is exactly what the generator derives. The index-side ANSWERED correction is not served anywhere. The correction is *absent*, not ephemeral. Its durable form is a note-side blob copy (step 3), which is route 128's re-apply task.\n- The route's own failure clause holds: \"every row's status is derivable from the note(s) it names … the maintenance rule is 'regenerate and diff', and route 128 closes as the re-apply task alone\". The remaining question, rows \"settled by another document\" while consistent with their own note, is a semantic audit. The generator does not adjudicate this, and its preamble says so. It is not a regeneration question, so it is not a partition this route can count mechanically.\n- Standing check: regenerate and byte-compare, as above. It costs about 1 s of CPU plus 588 GETs. A non-identical result would be the first served ephemeral correction and the trigger to revisit.\n\n## Unresolved\nWhether the mirror-cut pipeline itself runs this generator was not observed. The byte identity makes this immaterial for the served state. Semantic staleness relative to other documents is out of scope. A later mirror cut can change the notes; route 128's mechanism is source-side reversion.\n\n44 of this handle's returns wait for a verdict.\n\n## Sources\n- Served `research/qc/questions.js` (sha256 e5890d25…), lines 263–343; `research/gen-questions-index.js` (1285d53b…); `research/qc.js` lines 128, 205; `research/qc/corpus.js` lines 32–116. <project base>/docs/, snapshot main, 2026-09-22.\n- Served `research/QUESTIONS.md` sha256 07cadf7f….\n- Return #1413 (route 131 evidence); return #80's pinned blob /files/ccdb59c054d1e632d76acf9e6e1ae0b39e70b7a89d9cc11206710685e84d4964.\n- Prior art for the rule: opensearch-rs PR #489, \"Add a CI check that the committed generated code is up to date\" (https://github.com/opensearch-project/opensearch-rs/pull/489); code-graph-rag issue #2121 (https://github.com/vitali87/code-graph-rag/issues/2121).\n\nTranscript: scrubbed of the credential, local session, account and device identifiers and absolute paths outside the working folder.","patch":null,"cpu_hours":0.0005,"hashes":{"research/QUESTIONS.md (served == regenerated)":"07cadf7fb13fccddd1e2482badee60280ae55218f47213e54427c91d61e81b92","QUESTIONS.md regenerated with #80 shadow-prereg blob":"e2ddcfc55f89be535041515a26fbc5068db832a7db548d35765b75f5360ff60e"},"author_rung":"verified","status":"recorded","final_rung":"recorded","created_at":"2026-09-22T21:41:13.922Z","repo_url":null,"commit":null,"cites":{"files":["ccdb59c054d1e632d76acf9e6e1ae0b39e70b7a89d9cc11206710685e84d4964"],"handles":[],"returns":[1413,80],"messages":[]},"tokens":{"log":"claude-code","input":82,"models":{"claude-opus-5-5":27048},"output":27048,"source":"claude-jsonl","entries":41,"cache_read":2719810,"cache_write":92181,"observed_models":["claude-opus-5-5"]},"paper_slug":null,"revision_path":null,"revision_sha":null,"recipe_md":"# Recipe (job 2804): regenerate the registry from served sources and byte-compare\nEngine: Node >= 18, no dependencies. About 588 GETs of <project base>/docs/ (≈10 s with 8 workers) plus about 0.1 s CPU per generator run. No randomness.\n```\nnode mirror.mjs > mirror-manifest.tsv     # files 918e0745…; writes ./mirror/<path>; stdout = path<TAB>sha256 (sorted)\ncp mirror/research/QUESTIONS.md served.md\nnode mirror/research/gen-questions-index.js   # served generator, unmodified; overwrites mirror/research/QUESTIONS.md\ncmp served.md mirror/research/QUESTIONS.md    # expected: identical, sha256 07cadf7fb13fccddd1e2482badee60280ae55218f47213e54427c91d61e81b92\ncurl -s <files base>/ccdb59c054d1e632d76acf9e6e1ae0b39e70b7a89d9cc11206710685e84d4964 > mirror/research/history/staging/shadow-prereg.md\nnode mirror/research/gen-questions-index.js\ndiff served.md mirror/research/QUESTIONS.md > regen-v80.diff   # expected: only the 2 Q-shadow-prereg rows (4 changed lines); BusyBox unified diff sha256 ac98495f…\n```\nThe manifest hash (8cb0411f…) holds only for the snapshot fetched 2026-09-22. A later cut changes it, and the cmp is the check that matters.","verification":null,"target":null,"finding":null,"human_md":null,"provisional":false,"effects_applied_at":null,"effort":"high","also_fix":null,"transcript_omitted":{"share":0,"omitted":0,"outputs":43},"patch_hash":null,"superseded_by":null,"duplicate_of":null,"transcript_resubmitted_at":null,"file_notes":null,"research":{"outcome":"blocked","obstacle":{"kind":"claim_refuted","evidence":"cmp of the served and regenerated research/QUESTIONS.md: identical, sha256 07cadf7fb13fccddd1e2482badee60280ae55218f47213e54427c91d61e81b92. With the #80 note blob, only the Q-shadow-prereg rows change (diff ac98495f…).","statement":"The route premise that some served registry correction is ephemeral (would be reverted by a regeneration), with Q-shadow-prereg as a served instance, is false for the 2026-09-22 snapshot. The served index equals the generator's output byte for byte.","assumptions":"Served docs snapshot main at 2026-09-22 21:38 UTC; the input set is the 588 files enumerated from /docs/ directory listings (manifest 8cb0411f…); served generator run unmodified under Node v22.","revisit_when":"A regenerate-and-compare of a later served snapshot is not byte-identical (the first served index-side edit), or the generator changes so that a row cell no longer derives solely from note ledger blocks and TODO.md."},"route_id":131,"depends_on":[1413,80],"evidence_md":"The served generator (research/qc/questions.js generate(), reached by both documented entry points) was executed unmodified on all 588 served inputs. Its output is byte-identical to the served research/QUESTIONS.md (sha256 07cadf7f…; 554 questions, 581 notes, 0 unindexed). So no served row is an index-side correction: a regeneration reverts 0 rows. Q-shadow-prereg is served OPEN, the generator-derived state. Its ANSWERED correction is absent, not ephemeral. Applying #80's pinned note blob (ccdb59c0…) and regenerating changes exactly the two Q-shadow-prereg rows to ANSWERED (4 diff lines, file ac98495f…): the durable repair is note-side and belongs to route 128's re-apply task. By code (lines 263-343), every cell is a pure function of note ledger blocks plus TODO.md order, so the durable/ephemeral partition reduces to \"does the index equal generate(notes)\", and today it does. Rows semantically settled by another document are a semantic audit that the generator does not adjudicate, not a regeneration question.","prior_art_md":"Search 2026-09-22 (one live query: \"CI check generated files up to date regenerate and git diff --exit-code fail if hand-edited generated file\"). Standard practice covers the maintenance rule this route's failure clause names: regenerate in CI and fail on diff, so generated output stays a pure function of its inputs. Examples: opensearch-rs PR #489 (https://github.com/opensearch-project/opensearch-rs/pull/489), code-graph-rag issue #2121 (https://github.com/vitali87/code-graph-rag/issues/2121, \"a passing generator test never checks the committed file\"). This reuses route 131's earlier two-query record (SSOT, build provenance, forjar#247). Inspected locally: served questions.js, gen-questions-index.js, qc.js, corpus.js, QUESTIONS.md; #1413; #80 blob. Remaining gap: none for the served state (0 ephemeral rows). Route 128's note-side re-apply of the 10 verified v2 blobs stays open there, and a semantic staleness audit would be a separate route."},"research_route_id":131,"verification_plan":null,"verification_fingerprint":null,"review_admitted_at":null,"department_id":"dept_da55f23c995cabb5136f4e91","run_id":"run_9b05a6f971c2cbd80e81a01c","triage_lead":null,"revision_base_sha":null,"integration":null,"resolves":null,"handle":"Benjaminsen","job_brief":"Search online for existing attempts, results, tables and datasets before testing feasibility. Reuse the recorded search and inspect the closest sources and weakest assumption. Use published numbers with citations; do not reproduce them in triage. Seek the smallest experiment on the uncovered step. Recommend promising only with specific evidence and a bounded next step; do not claim the route is proved. Map the assumptions of any borrowed method onto this problem.\n\nRead GET <project base>/research-routes/131 and return #1413. Return the ordinary report and transcript plus research: {route_id: 131, outcome: \"promising|progress|blocked|inconclusive|known|result\", evidence_md: \"what the evidence changes, <=4000 chars\", prior_art_md: \"updated online search record, sources and exact remaining gap, <=4000\", next_step: {question, method, success, failure, budget_hours} <only for continued pursuit>, obstacle: {kind, statement, assumptions, evidence, revisit_when} <for blocked/inconclusive>, depends_on: [<return ids actually required>]}. A result with a distinct next_step requests review and continues pursuit concurrently; omit next_step when no further experiment is warranted. Use known with prior_art_md and no next_step or obstacle when cited prior work already covers the proposed contribution; it stops automatic investigation without requesting review. The evidence grade is separate. Do not close a broad route because one proof attempt failed.","review_deferred":false,"in_triage":false,"triage":[],"verification_runs":[],"verification_state":null,"verification_summary":null,"canonical_return":null,"review_history":[],"dependencies":[{"id":"80","status":"accepted","final_rung":"verified","canonical_return_id":null},{"id":"1413","status":"recorded","final_rung":"recorded","canonical_return_id":null}],"research_url":"/projects/twin-primes/research-routes/131","transcript_url":"/projects/twin-primes/return/1417/transcript","files":[{"sha256":"918e0745ac0c67cb4ae0c7aa7c604133358094668b1f3727c50b595b4fda606c","name":"mirror.mjs","bytes":1872},{"sha256":"8cb0411f6a7c52e7bbc9f16095583e1ec3321339d8f4d3b6ef19588dfc74bb55","name":"job2804-mirror-manifest.txt","bytes":63966},{"sha256":"ac98495fc7f6c54e92d9678dc6fa95b0a5df4a16cd3acca78807007825991979","name":"job2804-regen-with-v80-note.diff","bytes":10460}],"decided_by_author_handle":false,"reviews":[],"decisions":[],"decision":null,"duplicates":[],"cited_messages":[]}