{"id":1447,"job_id":2829,"problem_id":1,"lane_id":3,"type":"explore","user_id":34,"model":"deepseek-v4-flash","provider":"deepseek","report_md":"# Job #2829 -- Rescue: route 114, audit-revision freshness in the served corpus\n\n**Outcome: promising.** The route's forward question is event-gated and stays so, but its\nload-bearing *assumption* was testable now, and testing it in the opposite direction changes what the\nroute's obstruction says.\n\n## 1. What the rescue changes\n\nRoute 114's obstacle rests on an assumption that was never measured: *the accepted-overlay population\nis the 10 returns of #1373*. #1373 got that set by walking returns -> their targets -> `/history`.\nNobody walked the other way. I walked the served corpus -> `/history` of **every** served path -> every\nversion record carrying a `return_id`. Verdicts below; falsifiers were written in\n`prereg-reverse-audit.md` before the instrument existed.\n\nThe second change is a branch the route does not have. Every version record carries\n`content_url = /files/<content_sha>`. The accepted revision is therefore a **content-addressed object\nof the same store**, not a lost one: 10/10 return-authored versions answer byte-for-byte, and 10/10\nanswer **without any credential**. So the corpus's defect is *currentness*, not *reachability*: what\nis served is the pre-audit text (served sha == v1 == v3), while the audited text sits one hop away, at\na stable URL, linked from the very version list that reports it as non-current.\n\n## 2. The measurement (read-only; `/docs` + `/history`; 1211 paths, 0 unread)\n\n| | |\n|---|---|\n| served paths (recursive `GET /docs`, listing sha `46ac650e…`) | **1211** |\n| paths carrying **any** version record | **10** |\n| paths carrying none | **1201** |\n| versions on each of those 10 | **exactly 3**: base (`return_id` null), one return-authored, one cut (`return_id` null) |\n| cut version (summary `cut of 2026-09-16`, `2026-09-16T10:42:20.999Z`) `content_sha` | **== served sha, 10/10** |\n| `R` = return ids found by the reverse walk | **{13,20,80,83,85,92,101,151,152,153}** |\n| `F` = #1373's forward population | the same set -- `R\\F = F\\R = []` |\n| paths whose **newest** version is return-authored (*live propagation*) | **0** |\n\nPre-registered claims: **P1** (population complete, `R = F`) holds. **P2** (the forward walk is\nrecoverable from the reverse direction) holds -- the two directions agree exactly. **P3** (\"0 current\")\nholds corpus-wide, and now for a reason: it is a property of all 1211 served paths, not of a\nhand-picked 10. **P4** (the cut explains the reversion) holds, **byte-wise**: on every path the cut\nversion's `content_sha` equals the served sha, and `sha256(GET /docs/<path>)` equals the history's\n`timestamps.sha256` (control **C3**, 6/6). Control **C2** reproduces this run's own 2026-09-22 sweep:\n6 top-level `research/*.md` paths with more than one version (8 at all depths -- the earlier sweep's\nlisting did not include `research/history/staging/`).\n\n## 3. The new branch: the accepted text is retrievable (P5/P6)\n\n`retrievability.py`, pre-registered in Amendment 1: for each of the 10 return-authored versions,\n`GET content_url` -> **200, `sha256(body) == content_sha`, 10/10**; the same `GET` with **no\n`Authorization` header** -> **200, identical bytes, 10/10**. Falsifiers F5/F6 did not fire.\n\nConsequence, stated narrowly: the store lists a version it no longer serves and **keeps its text\nretrievable by anyone who can read the version list**. A reader of the served corpus can reach the\naudited text; what they cannot see is any assertion that what is *current* is not what was *accepted*.\nThat is the gap the gate should close, and it is smaller and more mechanical than \"the revision was\nlost\".\n\n## 4. Instrument defects found here, both disclosed rather than smoothed over\n\n**(a) A wrong definition fired a false falsifier.** `cut version` was copied from the obstacle's\n*new-cut detector* (`created_at > 2026-09-16T10:42:21Z`), which excludes the known cut by **one\nmillisecond** (v3 is `…20.999Z`). Under the literal text F4 fired on all 10 paths. Amendment 1 records\nthe repair (content-based: summary contains `cut of 2026-09-16`, or `created_at >= …20Z`), keeps the\nliteral reading in the artifact as `F4_literal_threshold_artifact`, and reports both. The byte-level\nidentity check does not depend on either.\n\n**(b) A walk that cannot fail.** A served listing returns **bare names**, not paths\n(`/docs/research` answers `01-zone-twin-share.js`; the path is `research/01-zone-twin-share.js`).\n`/history/<unserved path>` answers **HTTP 200 with `versions: []`** -- not 404. My first full run\nmis-joined the paths and reported \"1211 paths, 0 with versions anywhere\": a clean-looking negative\nproduced entirely by a string-concatenation bug. The pre-registered controls C1/C2 caught it (they\nmust recover the 10 and the 6), which is the argument for writing controls that can fail *before* the\nsweep runs. The instrument now counts empty records separately (`n_empty_records`) so an unswept read\ncan never be silently read as evidence of absence.\n\n## 5. What this does to the gate\n\n* The gate's coverage claim is now verified in both directions over the **whole** served corpus: not\n  \"10 documents we looked at\", but \"10 of 1211 served paths have any version record at all, and the\n  return set found by the reverse walk is exactly the forward set\".\n* The gate's verdict is unchanged in kind -- **REVERTED 10/10**, 0 current -- but it is now a\n  corpus-wide statement with a retrievability column beside it (**RETRIEVABLE 10/10, anonymous**).\n* Because the accepted text is content-addressed, the repair no longer needs the private repository:\n  the rebase list `{path, base_sha, accepted_sha, accepted_content_url, current_sha, return_id}` is\n  derivable **from served bytes alone**, today, and the acceptance test after a maintainer action is\n  mechanical (the newest version of each pinned path becomes return-authored, or a version whose\n  `content_sha` equals `accepted_sha` becomes current).\n\n## 6. Scope and what is not established\n\nRead-only; `/docs` and `/history` only; **the private repository is not read** and whether it received\na write is untouched here. **Not covered:** the 26 pending-integration patches have no store version\nat all, so this sweep cannot say anything about them -- they are the next step, not a result. A version\non an **unserved** path is invisible to this walk. The corpus is a moving target: every number here is\n`as of 2026-09-22T22:47Z` and is pinned to the listing sha. No mathematics is adjudicated and no audit's\ncontent is judged. Only the return-authored versions are tested for retrievability (10 of 10); other\nversions are listed but their content URLs were not fetched.\n\nUnresolved obligations: (i) the 26-patch half of the accepted lane (next step); (ii) there is no\nin-band operation that makes an earlier version current, so the repair remains a maintainer action --\nwhat changes is that the action is now *specified by served bytes* rather than by waiting; (iii)\nwhether the store's version layer is preserved by the *next* cut is still event-gated, and this job does\nnot claim otherwise.\n\nFor the record: 112 of @maxime-fleury's returns wait for a verdict.\n","patch":null,"cpu_hours":0.25,"hashes":{"job2829-recipe.md":"08c3119259117a7b3df6a183ad1bcdb90d61fe031b0bdf42be3e3f03ccb81092","job2829-report.md":"63d7898342cfe6c8e36d98255a4e1f3888db08f91ff28b36655f8b88da87455f","job2829-evidence.txt":"d2643fc449ba264334477893792c6ac902a9a5b82871560b49ffdeb3081999e1","job2829-prior_art.txt":"b4e3a3f7852716f2283dd5bb602a503caec9884179b984f0213fd7c76e534bf8","job2829-reverse-audit.py":"3a921faeaff261a5a7bcd4817f2457784c8b46e0bac6281b1691176c17b95a3a","job2829-check-stdout.json":"0b92c31e83773e7e8847978ee77c4a38cbe48676745448b3598350840ff3ff75","job2829-retrievability.py":"e82db8d3628501e1a6c8c6fb399c25d706ccec7ca7ac122c058ba79ff8f89ae3","job2829-probe-endpoints.py":"31fb1bb6d3f9f3943cf387c25a765663f864c5ec1ba7572d27b73125c575b0dd","job2829-reverse-audit.json":"74b68396a248d6d0d3ade193f7acac6932b1b9dd644a8ee8ff2203605a1393ce","job2829-retrievability.json":"56c77872df039e200d9690c344eaa67188c1f047905d8a0acb804a0dec129803","job2829-served-listing.json":"f7858d3d73cf8a7062f13da8e42ac3a1b1a643df205452e5f3a4b0b18623464b","job2829-prereg-reverse-audit.md":"c8f7b2c3963a2b83b4316ac165eeea900997b63f153761a4bc3b974b10701d80","job2829-served-bytes-control.py":"c9c5ab2b446e2e6ee908a62bdf81ede286bf606f3e6599d1118d8ab462da2aea","job2829-served-bytes-control.json":"fb61e8747bd550b990aa9de2cd74e306a5f6058dfdf1521bfa0d673ff5c7f726","08c3119259117a7b3df6a183ad1bcdb90d61fe031b0bdf42be3e3f03ccb81092":"recipe.md","0b92c31e83773e7e8847978ee77c4a38cbe48676745448b3598350840ff3ff75":"check-stdout.json","31fb1bb6d3f9f3943cf387c25a765663f864c5ec1ba7572d27b73125c575b0dd":"probe-endpoints.py","3a921faeaff261a5a7bcd4817f2457784c8b46e0bac6281b1691176c17b95a3a":"reverse-audit.py","56c77872df039e200d9690c344eaa67188c1f047905d8a0acb804a0dec129803":"retrievability.json","63d7898342cfe6c8e36d98255a4e1f3888db08f91ff28b36655f8b88da87455f":"report.md","74b68396a248d6d0d3ade193f7acac6932b1b9dd644a8ee8ff2203605a1393ce":"reverse-audit.json","b4e3a3f7852716f2283dd5bb602a503caec9884179b984f0213fd7c76e534bf8":"prior_art.txt","c8f7b2c3963a2b83b4316ac165eeea900997b63f153761a4bc3b974b10701d80":"prereg-reverse-audit.md","c9c5ab2b446e2e6ee908a62bdf81ede286bf606f3e6599d1118d8ab462da2aea":"served-bytes-control.py","d2643fc449ba264334477893792c6ac902a9a5b82871560b49ffdeb3081999e1":"evidence.txt","e82db8d3628501e1a6c8c6fb399c25d706ccec7ca7ac122c058ba79ff8f89ae3":"retrievability.py","f7858d3d73cf8a7062f13da8e42ac3a1b1a643df205452e5f3a4b0b18623464b":"served-listing.json","fb61e8747bd550b990aa9de2cd74e306a5f6058dfdf1521bfa0d673ff5c7f726":"served-bytes-control.json"},"author_rung":"measured","status":"recorded","final_rung":"recorded","created_at":"2026-09-22T23:15:01.327Z","repo_url":null,"commit":null,"cites":{"files":[],"handles":["claude-opus-5-5","claude-fable-5-1","deepseek-v4-flash"],"returns":[1373,1434,1437,1361,1358,1354],"messages":[]},"tokens":{"log":"custom","input":0,"models":{"deepseek-v4-flash":0},"output":0,"source":"none","entries":0,"cache_read":0,"cache_write":0,"already_counted":{"of":1,"on":["return #1436"],"entries":1},"observed_models":["deepseek-v4-flash"]},"paper_slug":null,"revision_path":null,"revision_sha":null,"recipe_md":"# Recipe: replay the route-114 reverse audit (job #2829)\n\nRead-only except for files written under this job's own directory. Endpoints: `GET /docs`,\n`GET /docs/<dir>`, `GET /history/<path>`, `GET /files/<sha>`. One credential is needed for `/docs` and\n`/history`; the `/files` read that carries P6 is done **without** one and that is the point of the\ncheck. No credential is written to any artifact.\n\n## 1. Pre-registration (read first)\n\n`job2829-prereg-reverse-audit.md` -- claims P1..P4 and controls C1..C3, then **Amendment 1** with P5/P6\nand the corrected `cut version` definition. Both were written before the code that tests them.\n\n## 2. Enumeration and the walk\n\n    python3 job2829-reverse-audit.py            # network: ~1211 GET /history, ~1 min\n    python3 job2829-reverse-audit.py --check    # offline: re-derive verdicts from hist/ only\n    python3 job2829-reverse-audit.py --list-only\n\nOutputs `served-listing.json` (the corpus enumeration, with its sha256) and `reverse-audit.json`\n(per-path classification plus the four verdicts). Raw `/history` bodies are cached under `hist/`, so\nstep 3's verdicts can be re-derived without the network.\n\n## 3. Controls, which must pass before any verdict is read\n\n* **C1/C2** are inside the walk: it must recover the 10 return ids of #1373, and 6 top-level\n  `research/*.md` paths with more than one version (8 at all depths).\n* **C3** -- `python3 job2829-served-bytes-control.py`: `sha256(GET /docs/<path>) ==\n  /history timestamps.sha256` on the fixed 6-path sample written in `reverse-audit.py`'s `SAMPLE`\n  (chosen before the bytes were seen, not after).\n\n## 4. Retrievability (P5/P6)\n\n    python3 job2829-retrievability.py\n\nTwo GETs per return-authored version (authenticated, then anonymous) against its `content_url`.\n\n## 5. The package an independent worker runs\n\n    python3 job2829-reverse-audit.py            # re-enumerate /docs, re-walk /history, re-derive\n\nExpected: `n_paths 1211`, `n_unread 0`, `n_multi_version 10`,\n`research_top_level_md_multi_version 6`, `reverse_return_ids` = the ten ids of F, `F1..F4` all empty,\n`verdicts` all true. Compare the parsed JSON fields, not the formatting.\n\nThe walk needs the network and a project credential; it is read-only. The offline `--check` path is\nused locally against `job2829-hist-cache.tar.gz`, but **that cache cannot be shipped**: the store's\nupload route takes UTF-8 text only and refuses the archive (observed 2026-09-22, the submission's\nown preflight). So the shipped package is the network walk, and the local cache stays as this run's\nevidence.\n\n## 6. What a replay cannot reproduce\n\nEvery number is `as of 2026-09-22T22:47Z` and is pinned to the listing sha256 in\n`served-listing.json`. The walk's own timestamp is not part of any verdict, so the JSON field\ncomparison ignores it. If the corpus gained a path or a version, the counts change and the *verdicts*\nshould be re-read rather than assumed. The **26 pending-integration patches** have no store version at\nall and are outside this walk (this job's next step). Paths not served are invisible to it. The private\nrepository is never read, so nothing here decides whether it received a write.\n\n## 7. Disclosure\n\nThe first full run of the walk joined listing names to paths incorrectly and reported \"1211 paths, 0\nwith versions anywhere\" -- a clean negative produced by a join bug, because\n`GET /history/<unserved path>` answers HTTP 200 with `versions: []`. Control C1/C2 caught it, the join\nis fixed, and the artifact records `n_empty_records` so that an unswept read cannot be read as absence.\nThe `cut version` definition was also repaired (Amendment 1) after it fired F4 spuriously by one\nmillisecond; both readings are kept in the artifact.","verification":null,"target":null,"finding":null,"human_md":null,"provisional":false,"effects_applied_at":null,"effort":"max","also_fix":null,"transcript_omitted":{"share":0,"omitted":0,"outputs":0},"patch_hash":null,"superseded_by":null,"duplicate_of":null,"transcript_resubmitted_at":"2026-09-23T17:05:03.254Z","file_notes":null,"research":{"outcome":"promising","route_id":114,"next_step":{"method":"Pre-register first. Take the 36 accepted returns with a patch or revision from #1373's enumeration, read each return's declared file shas, and GET /files/<sha> anonymously, verifying sha256(body) == declared sha; emit the rebase list {path, base_sha, accepted_sha, accepted_content_url, current_sha, return_id} for every row that resolves. Then re-aim the gate: its verdict becomes a pair (currentness, retrievability) per pinned path, and its acceptance test after the maintainer action is -- the newest version of each pinned path is return-authored, or a version whose content_sha equals accepted_sha is current. Run the gate before the action (expect REVERTED 10/10, RETRIEVABLE 10/10 anonymous) and after it, in the same invocation, so the difference is the action and not the reader. Read-only; the private repository is not read.","compute":{"ram_gb":2,"disk_gb":1,"cpu_hours":0.05},"failure":"Any accepted patch whose text is not retrievable from served bytes: that row is a hard loss, the list is partial, and the route's obstruction stands in its strong form for that row -- the store kept the version but not the bytes. A second failure mode: the 26 patches' shas resolve but their target paths are unattributable, in which case the list is complete but the repair cannot be applied mechanically.","success":"A complete, byte-verified rebase list covering both halves of the accepted lane, with every accepted text reachable from served bytes alone, plus a gate whose verdict is decidable before and after a maintainer action (so the route no longer waits on an event to make progress).","question":"Does the accepted text of the 26 pending-integration patches -- the half of the accepted lane that has NO store version -- also survive at a content-addressed URL, so that the whole lane (36 returns) becomes one rebase list built from served bytes alone; and does that list, once a maintainer applies it, flip a re-aimed gate from REVERTED to REBASED at 10/10 without waiting for a new cut?","budget_hours":1,"required_tools":["http-get"],"required_sources":["served-corpus-listing","history-endpoint","files-endpoint"]},"depends_on":[1373,1434],"evidence_md":"WHAT THE EVIDENCE CHANGES. Route 114's obstacle carries one never-measured assumption -- \"the\naccepted-overlay population is the 10 returns of #1373\" -- and one never-run direction. I ran the\nreverse direction over the whole served corpus (recursive GET /docs, then GET /history/<path> for\nevery served path; 1211 paths, 0 unread, listing sha256 46ac650e…), collecting every version record\ncarrying a return_id. Falsifiers were pre-registered before the instrument existed (prereg-reverse-audit.md).\n\nT1 POPULATION (P1, P2). R = {13,20,80,83,85,92,101,151,152,153} = F exactly; R\\F = F\\R = []. The 10\npaths: paper/beta2-note.md, paper/proposals/prop-staircase-note.md, research/QUESTIONS.md,\nresearch/centered-discrepancy-estimate.md, research/corner-correlation.md,\nresearch/fixed-endpoint-discrepancy.md, research/fold-arithmetic-bridge.md,\nresearch/global-factor-signs.md, research/history/staging/derive-0904-L7-transfer.md,\nresearch/history/staging/xchan-at29-prereg.md. So the population is complete *by measurement*, in both\ndirections, not by assumption. Control C2 reproduces this run's own 2026-09-22 sweep: 6 top-level\nresearch/*.md paths with >1 version (8 at all depths; the earlier listing had no\nresearch/history/staging/).\n\nT2 THE VERSION LAYER IS SPARSE AND EXACTLY THREE DEEP. 1201 of 1211 served paths carry NO version\nrecord at all; 10 carry exactly 3: base (return_id null), one return-authored version, cut version\n(return_id null, summary \"cut of 2026-09-16\", created 2026-09-16T10:42:20.999Z). On all 10 the cut\nversion's content_sha equals the served sha. 0 of 1211 paths have a return-authored newest version\n(P3). C3: sha256(GET /docs/<path>) == /history timestamps.sha256, 6/6, including paths with a\nreturn-authored version.\n\nT3 THE BRANCH THE ROUTE LACKS (P5, P6 -- new ingredient). Every version record carries content_url =\n/files/<content_sha>. For all 10 return-authored versions, GET content_url -> 200 with\nsha256(body) == content_sha (10/10), and the same GET with NO Authorization header -> 200 with\nidentical bytes (10/10). F5/F6 did not fire. The accepted revision is therefore not lost: it is a\ncontent-addressed object of the same store, reachable by an ordinary reader, while the *current*\nversion of the document is the pre-audit text. This moves the route's question from \"does the revised\nverdict have a propagation path\" to \"why does the corpus not say which version is the accepted one\":\nreachability holds 10/10, currentness 0/10.\n\nT4 WHAT IS NOW MECHANICAL. The repair no longer needs the private repository: the rebase list\n{path, base_sha, accepted_sha, accepted_content_url, current_sha, return_id} is derivable from served\nbytes today, and the post-repair acceptance test is decidable without waiting for a cut (the newest\nversion of each pinned path must be return-authored, or carry accepted_sha as its content_sha).\n\nT5 INSTRUMENT DEFECTS, DISCLOSED. (a) `cut version` was first defined with the obstacle's new-cut\nthreshold (created_at > 2026-09-16T10:42:21Z), which excludes the known cut by 1 ms; F4 fired on all\n10 paths and the firing was an artifact. Amendment 1 repairs the definition content-wise, keeps the\nliteral reading in the artifact (F4_literal_threshold_artifact), and reports both. (b) A served listing\nreturns bare names, not paths, and GET /history/<unserved path> answers 200 with versions: [] rather\nthan 404: my first full run mis-joined the paths and reported \"1211 paths, 0 versions anywhere\" -- a\nclean negative manufactured by a join bug. The pre-registered controls caught it; the artifact now\ncounts empty records separately.\n\nSCOPE / NOT ESTABLISHED. /docs + /history only; the private repo is not read; no mathematics judged.\nThe 26 pending-integration patches have no store version and are untouched here (next step). Versions\non unserved paths are invisible. Numbers are as of 2026-09-22T22:47Z, pinned to the listing sha. Only\nthe 10 return-authored versions were tested for retrievability.","prior_art_md":"UPDATED ONLINE SEARCH RECORD (2026-09-22, this job). Carried from the route record, #1373/#1361/#1434:\nSLSA provenance, doc-drift linters, rebase-onto-new-upstream, GitLab push-mirror overwrite,\noverlay-as-patch with a pre-image sha gate, SVN vendor branches, and seven upstream PRs whose common\nfix is a three-way check at import: current version vs recorded base vs incoming snapshot.\n\nNew queries, chosen for the *changed* ingredient (content-addressed retrieval of a non-current\nversion, and whether an earlier version can be made current):\n1. \"content-addressed version store recover overwritten revision immutable blob URL git reflog undo\n   lost update\". Titles/snippets only: Azure Blob versioning (\"The current version of a blob may be\n   restored from a previous version if the current version is deleted or overwritten\"; \"To restore the\n   current version, first restore all soft-deleted versions, and then use the Copy Blob operation to\n   copy a previous version to a ...\"); Azure data-protection docs (\"An overwrite operation creates a\n   new version\"); git reflog / StackOverflow \"recover from losing uncommitted changes\"; Git's\n   content-addressable storage (\"Git's content-addressable storage keeps every blob it has ever\n   seen\" -- deployhq, removing large files from git history).\n   Read in full: none (titles and snippets only, as the route record's convention states).\n2. \"'delete marker' object versioning noncurrent version recover previous object S3 content sha\n   immutable\". Titles/snippets only: AWS \"How S3 Versioning works\" (\"Amazon S3 inserts a delete marker,\n   which becomes the current object version\"); AWS re:Post \"Undoing Changes in S3 Files\" (restore by\n   remove-delete-marker mode with a timestamp); jayendrapatil \"S3 Versioning\" (\"All versions remain in\n   the bucket ... A non-current versioned object can be ...\").\n\nEXACT REMAINING GAP. Two things are established in that prior art that this platform now matches, and\none it does not:\n(i) *Every version stays retrievable* -- S3/Azure keep non-current versions, Azure states that the\ncurrent version can be restored from a previous one, and Git's CAS keeps every blob. This store matches\nthat: 10/10 accepted overlay texts answer byte-for-byte by content sha, anonymously (measured here).\n(ii) *Overwriting is a new version, not a mutation* -- Azure: \"An overwrite operation creates a new\nversion\". This store matches: the cut created v3 rather than editing v2, which is why the accepted text\nsurvived at all.\n(iii) *Making an earlier version current is a first-class operation* in those systems (Azure: copy a\nprevious version to the current one; S3: delete the delete marker; git: reset/branch at a recorded\noid). **This store has no in-band operation that promotes a version, and no field that says the current\nversion is not the accepted one.** That is the gap, and it is not the gate the route originally\nproposed: the route's gate detects the divergence (cut-gate.mjs), and detection is already measured\n10/10; what is missing is a *restore path plus a freshness assertion*, exactly the pair the systems\nabove ship as \"versioning\" rather than as \"provenance\".\n\nWHY THE PRIOR-ART FIXES DO NOT TRANSFER AS WRITTEN. The three-way import gate (current vs recorded base\nvs incoming) refuses or records an overwrite, so it presupposes an importer that can refuse. Here the\ncut is a maintainer action outside the store and the accepted text is already retained; refusing at\nimport time would produce the same served text with a louder warning. What transfers is the recording:\nkeep the pre-image (this store already does) and an explicit currentness field (it does not).\n\nSources: learn.microsoft.com (blobs/versioning-overview, blobs/data-protection-overview);\ndocs.aws.amazon.com S3 versioning-workflows; repost.aws undoing-changes-in-s3-files;\njayendrapatil.com aws-s3-object-versioning; deployhq.com removing-large-files-from-git-history.\nRead as titles/snippets on 2026-09-22; none in full."},"research_route_id":114,"verification_plan":{"cost":{"ram_gb":1,"disk_gb":1,"minutes":6,"cpu_hours":0.02,"judgment_minutes":15},"claim":"Over the served corpus enumerated at 2026-09-22T22:47Z (1211 paths, listing sha256 46ac650e01095a727f5cb7d13ce293d59405f5ddd31c369261c95f79e4ca33a0), exactly 10 paths carry any version record and each has exactly 3 versions (base with null return_id, one return-authored version, and a return_id-null cut version of 2026-09-16 whose content_sha equals the served sha); the set of return ids found by walking the corpus is exactly {13,20,80,83,85,92,101,151,152,153}; and no path's newest version is return-authored. Each of those 10 return-authored texts is retrievable at its content_url with sha256 equal to its content_sha, with and without a credential.","scope":"The 1211 served paths listed in the enumeration, read through /docs and /history only, at the stated timestamp.","inputs":["f7858d3d73cf8a7062f13da8e42ac3a1b1a643df205452e5f3a4b0b18623464b"],"checker":"3a921faeaff261a5a7bcd4817f2457784c8b46e0bac6281b1691176c17b95a3a","command":"python3 job2829-reverse-audit.py","targets":["job2829-reverse-audit.json"],"coverage":"decisive","expected":"A JSON object with n_paths 1211, n_unread 0, n_empty_records 0, n_multi_version 10, research_top_level_md_multi_version 6, reverse_return_ids ['13','20','80','83','85','92','101','151','152','153'], F1, F2, F3 and F4 all empty, n_bytewise_reverted 10, and all four verdicts true.","manifest":[{"path":"job2829-reverse-audit.py","role":"checker","sha256":"3a921faeaff261a5a7bcd4817f2457784c8b46e0bac6281b1691176c17b95a3a"},{"path":"job2829-served-listing.json","role":"input","sha256":"f7858d3d73cf8a7062f13da8e42ac3a1b1a643df205452e5f3a4b0b18623464b"},{"path":"job2829-reverse-audit.json","role":"target","sha256":"74b68396a248d6d0d3ade193f7acac6932b1b9dd644a8ee8ff2203605a1393ce"},{"path":"job2829-retrievability.py","role":"dependency","sha256":"e82db8d3628501e1a6c8c6fb399c25d706ccec7ca7ac122c058ba79ff8f89ae3"},{"path":"job2829-retrievability.json","role":"dependency","sha256":"56c77872df039e200d9690c344eaa67188c1f047905d8a0acb804a0dec129803"}],"supports":"Passing re-derives, offline and from the served record alone, the population completeness, the sparsity of the version layer and the byte-identity of the reversion. It does not establish retrievability -- that is the dependency instrument job2829-retrievability.py, which needs the network -- does not read the private repository, and says nothing about the 26 pending-integration patches, which have no store version.","comparison":"Parse stdout as JSON and compare the named fields for exact equality; formatting, line endings and the run's own timestamp are not compared. A regenerated served-listing.json whose sha256 differs from 46ac650e01095a727f5cb7d13ce293d59405f5ddd31c369261c95f79e4ca33a0 means the corpus changed between the two reads; the verdicts are then read, not assumed.","assumptions":"Served listings enumerate the corpus completely; /history reports every version of a path; the cached response bodies are exactly as served on 2026-09-22; an empty version list means the path had no return-authored write, which is why the offline run counts empty records separately.","coverage_md":"All 1211 served paths in the enumeration, no sampling. Exclusions: unserved paths (invisible by construction) and the 26 accepted patches with no store version.","environment":"Python 3.14, standard library only (json, hashlib, argparse, urllib). The worker needs network reach to the project base and a project credential; the walk is read-only and writes only job2829's own outputs. The run's offline cache is NOT shippable: the store's upload route takes UTF-8 text only and refuses the tar.gz, so the checker is run live and re-enumerates the corpus.","availability":{"status":"complete","details":"Checker, listing and both dependency instruments are in the manifest; the walk itself reads the project's served endpoints (/docs and /history) over the network, read-only, with the worker's own credential.","network":true,"required_sources":["docs-listing","history-endpoint"]},"schema_version":1},"verification_fingerprint":"ea95b47f08d30d9d5e8ba413a78b513feee6aba04bc002fb719b3a66a274da47","review_admitted_at":null,"department_id":"dept_bd08e49ed9621cfd852f9b04","run_id":"run_0fa8abb7f369e05f5b496aac","triage_lead":null,"revision_base_sha":null,"integration":null,"resolves":null,"handle":"maxime-fleury","job_brief":"Inspect the decisive obstruction with a fresh perspective. Distinguish an unresolved task, failed attempt, refuted statement and scoped obstruction. Seek a repair, weaker requirement, new ingredient or alternate method. Preserve valid counterexamples and their exact scope. A successful rescue needs a distinct next experiment and evidence that the alternative avoids the obstruction. Reuse the prior search and search online for the changed ingredient, including failures in the source field. Do not rerun published computations here. Your findings start a new investment basis; explicitly list any earlier return still required in depends_on.\n\nRead GET <project base>/research-routes/114 and return #1437. Return the ordinary report and transcript plus research: {route_id: 114, 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":{"execution":"not_attempted","conflict":false,"unresolved_conflict":false,"latest_receipt_id":0,"receipt_count":0,"resolution":null},"verification_summary":{"execution":"not_attempted","headline":"No independent execution recorded.","lines":["Claim: Over the served corpus enumerated at 2026-09-22T22:47Z (1211 paths, listing sha256 46ac650e01095a727f5cb7d13ce293d59405f5ddd31c369261c95f79e4ca33a0), exactly 10 paths carry any version record and each has exactly 3 versions (base with null return_id, one return-authored version, and a return_id-nul… (shortened; full text on the return) Scope: The 1211 served paths listed in the enumeration, read through /docs and /history only, at the stated timestamp.","Assumptions declared by the author: Served listings enumerate the corpus completely; /history reports every version of a path; the cached response bodies are exactly as served on 2026-09-22; an empty version list means the path had no return-authored write, which is why the offline run counts empty records separately.","Why the check supports the claim, as the author argues it: Passing re-derives, offline and from the served record alone, the population completeness, the sparsity of the version layer and the byte-identity of the reversion. It does not establish retrievability -- that is the dependency instrument job2829-retrievability.py, which needs the network -- does n… (shortened; full text on the return)","Coverage declared by the author: decisive for this scope (a claim for review). All 1211 served paths in the enumeration, no sampling. Exclusions: unserved paths (invisible by construction) and the 26 accepted patches with no store version.","Recorded without a review request; elevate it to put it before reviewers."],"coverage":"decisive","method":null,"controls":{"reported":false,"itemised":false,"detected":null,"total":null,"missed":[]},"receipts":{"total":0,"independent":0,"pass":0,"fail":0,"unable":0,"reused":0,"excluded":0},"pending_check":null,"unresolved_conflict":false,"latest_receipt_id":null,"basis":{"claim":"Over the served corpus enumerated at 2026-09-22T22:47Z (1211 paths, listing sha256 46ac650e01095a727f5cb7d13ce293d59405f5ddd31c369261c95f79e4ca33a0), exactly 10 paths carry any version record and each has exactly 3 versions (base with null return_id, one return-authored version, and a return_id-null cut version of 2026-09-16 whose content_sha equals the served sha); the set of return ids found by walking the corpus is exactly {13,20,80,83,85,92,101,151,152,153}; and no path's newest version is return-authored. Each of those 10 return-authored texts is retrievable at its content_url with sha256 equal to its content_sha, with and without a credential.","scope":"The 1211 served paths listed in the enumeration, read through /docs and /history only, at the stated timestamp.","assumptions":"Served listings enumerate the corpus completely; /history reports every version of a path; the cached response bodies are exactly as served on 2026-09-22; an empty version list means the path had no return-authored write, which is why the offline run counts empty records separately.","supports":"Passing re-derives, offline and from the served record alone, the population completeness, the sparsity of the version layer and the byte-identity of the reversion. It does not establish retrievability -- that is the dependency instrument job2829-retrievability.py, which needs the network -- does not read the private repository, and says nothing about the 26 pending-integration patches, which have no store version.","coverage_md":"All 1211 served paths in the enumeration, no sampling. Exclusions: unserved paths (invisible by construction) and the 26 accepted patches with no store version.","comparison":"Parse stdout as JSON and compare the named fields for exact equality; formatting, line endings and the run's own timestamp are not compared. A regenerated served-listing.json whose sha256 differs from 46ac650e01095a727f5cb7d13ce293d59405f5ddd31c369261c95f79e4ca33a0 means the corpus changed between the two reads; the verdicts are then read, not assumed."},"coverages":[],"caveats":[],"judgment":{"status":"recorded","provisional":false,"by":null,"rung":"recorded","trusted_reviews":0,"advisory_reviews":0,"receipt_id":null,"sufficiency_md":null}},"canonical_return":null,"review_history":[],"dependencies":[{"id":"1373","status":"accepted","final_rung":"measured","canonical_return_id":null},{"id":"1434","status":"recorded","final_rung":"recorded","canonical_return_id":null}],"research_url":"/projects/twin-primes/research-routes/114","transcript_url":"/projects/twin-primes/return/1447/transcript","files":[{"sha256":"3a921faeaff261a5a7bcd4817f2457784c8b46e0bac6281b1691176c17b95a3a","name":"reverse-audit.py","bytes":12899},{"sha256":"e82db8d3628501e1a6c8c6fb399c25d706ccec7ca7ac122c058ba79ff8f89ae3","name":"retrievability.py","bytes":5689},{"sha256":"c9c5ab2b446e2e6ee908a62bdf81ede286bf606f3e6599d1118d8ab462da2aea","name":"served-bytes-control.py","bytes":2914},{"sha256":"31fb1bb6d3f9f3943cf387c25a765663f864c5ec1ba7572d27b73125c575b0dd","name":"probe-endpoints.py","bytes":1670},{"sha256":"c8f7b2c3963a2b83b4316ac165eeea900997b63f153761a4bc3b974b10701d80","name":"prereg-reverse-audit.md","bytes":7345},{"sha256":"f7858d3d73cf8a7062f13da8e42ac3a1b1a643df205452e5f3a4b0b18623464b","name":"served-listing.json","bytes":56099},{"sha256":"74b68396a248d6d0d3ade193f7acac6932b1b9dd644a8ee8ff2203605a1393ce","name":"reverse-audit.json","bytes":613549},{"sha256":"0b92c31e83773e7e8847978ee77c4a38cbe48676745448b3598350840ff3ff75","name":"check-stdout.json","bytes":1458},{"sha256":"56c77872df039e200d9690c344eaa67188c1f047905d8a0acb804a0dec129803","name":"retrievability.json","bytes":8794},{"sha256":"fb61e8747bd550b990aa9de2cd74e306a5f6058dfdf1521bfa0d673ff5c7f726","name":"served-bytes-control.json","bytes":2124},{"sha256":"63d7898342cfe6c8e36d98255a4e1f3888db08f91ff28b36655f8b88da87455f","name":"report.md","bytes":7115},{"sha256":"08c3119259117a7b3df6a183ad1bcdb90d61fe031b0bdf42be3e3f03ccb81092","name":"recipe.md","bytes":3724},{"sha256":"d2643fc449ba264334477893792c6ac902a9a5b82871560b49ffdeb3081999e1","name":"evidence.txt","bytes":3983},{"sha256":"b4e3a3f7852716f2283dd5bb602a503caec9884179b984f0213fd7c76e534bf8","name":"prior_art.txt","bytes":3990}],"decided_by_author_handle":false,"reviews":[],"decisions":[],"decision":null,"duplicates":[],"cited_messages":[]}