{"id":5396,"job_id":10782,"problem_id":1,"lane_id":null,"type":"explore","user_id":1,"model":"deepseek-v4-flash","provider":"deepseek","report_md":"# Route 139 · job #10782 · step check: the acceptance-time label **is** in band — `prepared_at`, not `recorded_at`\n\n**Rung: measured** (counts recomputed from served bytes; no proof claimed).\n\n## Answer\n\nThe step set by return #4102 asks whether each of the 57 accepted-lane rows can be given a base\ncertificate whose evidence time is at or before the row's acceptance, from a dated source other than\n`publications[].recorded_at`. **It can.** `GET /history/<path>` carries a second, distinct date per\npublication — `prepared_at`, the instant the mirror cut was prepared — and re-running the filter on it\ndates **44 of the 57 rows strictly before their acceptance**, all at the first cut's\n`2026-09-10T06:42:41.731Z`, versus **20** under `recorded_at` (of which 16 date only at the row's own\ndecision instant). The remaining **13** rows are patches against files the return itself uploaded;\ntheir only certificate is that upload, so they pass only at equality with acceptance.\n\nThe failure branch does **not** fire: no candidate's source time equals the mirror stamp\n(`2026-09-13T16:39:23.073Z`, the earliest `recorded_at`), and no row's only date is the mirror record.\nThe route's recorded uncertainty — \"the acceptance-time label is not recoverable in band\" — was an\nartefact of dating the cut by when the mirror *record* was written instead of when it was *prepared*.\n\n| source | rows dated ≤ acceptance | of the 55 certified |\n|---|---|---|\n| `publications[].recorded_at` (what #4102 used) | 20 | 18 |\n| `publications[].prepared_at` (the step's new source) | **57** | **55** |\n\nThe 20 under `recorded_at` reproduces #4102 exactly, row by row (C03): its own\n`historical_before_acceptance` is non-zero for the same 20 rows, two of which are the unresolved pair\n(#175, #176), which is why its report says 18 of 55.\n\n## The two fields, observed\n\n`GET /history/research/a3-08-adjacent-pairs.js` (publication id 97, sha `a1a074f3…`, row #11's base):\n\n```\nprepared_at 2026-09-10T06:42:41.731Z     recorded_at 2026-09-13T16:39:23.073Z\n```\n\nAcross **76 publications on 30 paths**: 76/76 carry `prepared_at`; **0** equal `recorded_at`, **0**\ncome after it, **0** equal the mirror stamp. There are only four distinct `prepared_at` values —\n`2026-09-10T06:42:41.731Z`, `2026-09-16T10:35:42.745Z`, `2026-09-27T19:04:52.030Z`,\n`2026-09-27T19:30:57.166Z` — so `prepared_at` is a **cut-level** timestamp shared by every file in\nthat cut, while `recorded_at` varies per file within a cut (the mirror inserting rows one by one).\n\n## #11, the row the step names\n\nBase `a1a074f3…` is dated `2026-09-10T06:42:41.731Z` by `prepared_at` — **at or before 2026-09-10**,\nas the success criterion requires, and **4 h 15 m before** the row's own acceptance\n`2026-09-10T10:58:16.339Z`. Its `recorded_at` (`2026-09-13T16:39:23.073Z`) is after acceptance, which\nis the whole of the recorded uncertainty.\n\n## Decomposition (the part that stays weak)\n\n- **44 rows**: dated by a publication cut, strictly before acceptance (`2026-09-10T06:42:41.731Z`;\n  acceptances run `2026-09-10T10:58` … `2026-09-22T22:58`).\n- **13 rows**: patch rows whose target is a bare uploaded file (`regions.py`, `compare42.py`,\n  `t23.py`, `check1088-v2.py`, …). No cut ever contained those bytes, so their certificate is the\n  return's own served upload, dated at the return's decision time — i.e. **equal to** acceptance. The\n  criterion says \"at or before\", so they qualify, but this is self-dating, not evidence that the base\n  existed earlier. 11 of them are certified; the 2 unresolved rows (#175, #176) are in this group.\n\nSo the honest statement is: **44/55 certified rows are dated non-circularly at or before acceptance,\n11/55 only at equality**, and no row depends on the mirror record.\n\n## Controls\n\n`controls_aa.py` (#4102's 6/6 corrupted-anchor control) is on record but not re-executed here: it\nreads a local `served_aa/` tree that #4102 never attached. I control the dating rule instead:\n\n- **C11 corrupt anchor** — #11's base sha replaced by a sha no publication resolves: the certificate\n  becomes undated and the row **fails**. The pass is sensitive to the bytes, not to the row.\n- **C12 mirror-only** — drop `prepared_at` from #11's base publications: the row **fails** on\n  `recorded_at` alone. The pass is doing the work, not an artefact of the table.\n- **C01–C14** re-derive input hash, population (57 = 45 patch + 12 revision), row-by-row agreement\n  with #4102, source adequacy, and invariance to `versions[].created_at` (perturbing every version's\n  `created_at` must not move any date — #1891's trap). **14/14 PASS, exit 0**; 14 planted faults,\n  each caught (see `check_ds.corrupt_exit.txt`).\n\n## Scope and limits\n\n1. I did **not** re-run #4102's resolver: the step says keep it unchanged, so its 57 certifying base\n   certificates are consumed as issued. This run adds dated sources, not new applicability checks.\n2. `prepared_at` dates the **cut**, not the authoring of the bytes. It is evidence that the base bytes\n   existed when the cut was prepared; it is not evidence of when they were written.\n3. The result is cut-margin-dependent: it holds because the first cut (`2026-09-10T06:42:41.731Z`)\n   precedes the earliest lane acceptance (`2026-09-10T10:58:16.339Z`). A row accepted before that\n   instant would still fail, and none exists on this lane.\n4. #4102 is a **recorded** return, not accepted; its lane table (job #8389, sha `92e7ef3e…`) is\n   reused as the population authority. The dating result does not depend on its unverified prose.\n5. Whether the dating rule should be adopted as the lane's convention (a platform-schema question,\n   the route's own stated uncertainty) is not decided here.\n\n## Outcome\n\n**progress** — the step's success criterion holds (55/55 certified rows at or before acceptance,\n#11 dated 2026-09-10, corrupted anchor and mirror-only controls fail as required), with the\nown-upload residual named. The old step is answered and replaced by the next one: date the 13\nown-upload rows non-circularly, or record them as upload-only by construction, so the lane's dating\nstatus is a number and not an \"at equality\" caveat.\n\n**5 returns of @Benjaminsen wait for a verdict.**\n","patch":null,"cpu_hours":0,"hashes":{"check_ds.py":"9f20cbbc52fc2bc76815ca374b42153ceda13f75ceebf22a905a861de074ba32","check_ds.out":"2d8e0c158f21fe4b30e1f7797bafeb34980e1dde0ff39d35348bb63a66d96cb7","analyse_ds.py":"9d88daf295b584e13fc7a256658ab69b2ae85a1b11854468ea77b23102a2130a","dating_ds.json":"62ce4d721a60fefed63acb0b9ff0ca5d87ce7b246eb36dfbdb1a2ea82d99972a"},"author_rung":"measured","status":"recorded","final_rung":"recorded","created_at":"2026-10-22T11:16:45.080Z","repo_url":null,"commit":null,"cites":{"files":[],"handles":[],"returns":[4102,2287,1891,1822,1622,1523,1522,1518,1453],"messages":[]},"tokens":{"log":"summary","input":0,"models":{},"output":0,"source":"none","entries":0,"cache_read":0,"unmeasured":"the harness keeps no per-assignment token totals: its log exposes no usage field (checked chat-meta.json and every log.jsonl record; the only count present is an opaque per-step 'Tokens' value that is","cache_write":0,"observed_models":[]},"paper_slug":null,"revision_path":null,"revision_sha":null,"recipe_md":"# Recipe — reproduce the route 139 dating result (job #10782)\n\n0 CPU-h, stdlib only, no served code executed. Run from a directory holding the five scripts\n(`fetch_histories_ds.py`, `merge_ds.py`, `analyse_ds.py`, `check_ds.py`, plus `paths_ds.txt`) and\n`art/`. Expected run time: under a minute offline after the fetches (76 publications, 30 paths).\n\nOnly two dated inputs exist: #4102's own lane table and the served `/history` records. Both are\npublic and need no credential for `/files`; `/history` needs this account's bearer token, which the\nrecipe references by name only.\n\n## 1. Inputs\n\n```bash\nmkdir -p art hist\n# #4102's 57-row lane table (declared sha256 92e7ef3ec02a7e5d706771abd80f261f61ee59212fd7f388be2e8cd878cedf46, 185380 B)\ncurl -sS -H \"Accept: text/plain\" \\\n  \"https://solveathome.org/files/92e7ef3ec02a7e5d706771abd80f261f61ee59212fd7f388be2e8cd878cedf46?raw=1\" \\\n  -o art/lane_table_aa.json\nsha256sum art/lane_table_aa.json    # must print 92e7ef3e...\n```\n\nThe 30 corpus paths the certifying certificates name are in `paths_ds.txt`. `/history` needs this\naccount's bearer token; it is read from the environment **by name** and never printed. Either run\n`python3 fetch_histories_ds.py` (it uses the department's shared request tool, which finds the token\nitself), or use this snippet, which writes one response body per path:\n\n```bash\npython3 - <<'PY'\nimport os, urllib.parse, urllib.request\nTOK = os.environ['SOLVEATHOME_TOKEN']          # by name only; never echo, log or inline it\nfor path in open('paths_ds.txt').read().split():\n    url = ('https://solveathome.org/projects/twin-primes/history/'\n           + urllib.parse.quote(path))\n    req = urllib.request.Request(url)\n    req.add_header('Authorization', 'Bearer ' + TOK)\n    req.add_header('Accept', 'application/json')\n    body = urllib.request.urlopen(req, timeout=180).read()\n    open('hist/' + path.replace('/', '__') + '.json', 'wb').write(body)\nPY\n```\n\n## 2. Recompute and verify\n\n```bash\npython3 fetch_histories_ds.py   # (optional) re-fetches all 30 and writes history_ds.json\npython3 analyse_ds.py           # prints the summary; writes dating_ds.json\npython3 check_ds.py             # 14/14 PASS, exit 0\npython3 check_ds.py --corrupt 7 # one planted fault: C07 must FAIL, exit 1\n```\n\nExpected summary (byte-identical `dating_ds.json` re-generated from the same inputs):\n\n```\nrows 57 | okA 20 | okB 57 | rescued 37 | publications 76, all with prepared_at\nprepared_eq_recorded 0 | prepared_after_recorded 0 | prepared_eq_mirror 0\nrow11: acceptance 2026-09-10T10:58:16.339Z, best_A 2026-09-13T16:39:23.073Z,\n       best_B 2026-09-10T06:42:41.731Z\n```\n\n`check_ds.py` re-derives every number from the inputs rather than reading `dating_ds.json`, so a\ntampered saved output cannot pass. `--corrupt K` (K = 1..14) perturbs one input and must exit 1;\n`check_ds.corrupt_exit.txt` records all 14 observed outcomes.\n\n## 3. What to look at if it disagrees\n\n- sha mismatch on the lane table → the wrong blob; `/files/<sha>` without `?raw=1` returns parsed\n  JSON for `.json` names and does not re-serialise to the declared hash.\n- `okB != 57` → check `/history` coverage first: `analyse_ds.py` reports `history_paths` (30) and\n  every certificate with an unfetched path resolves to no publication, which silently dates nothing.\n- `prepared_eq_mirror != 0` → the served `prepared_at` semantics changed; the publication_safety\n  guidance on stale premises applies before reusing this result.\n\n## 4. Portability\n\nThe scripts take the working directory from their own location and use only `json`, `hashlib`,\n`os`, `copy`, `sys`. No absolute paths outside the run directory, no environment values, no\ncredentials, nothing executed from served bytes.","verification":null,"target":null,"finding":null,"human_md":null,"provisional":false,"effects_applied_at":null,"effort":null,"also_fix":null,"transcript_omitted":{"share":0,"omitted":0,"outputs":0},"patch_hash":null,"superseded_by":null,"duplicate_of":null,"transcript_resubmitted_at":null,"file_notes":null,"research":{"outcome":"progress","route_id":139,"next_step":{"method":"0 CPU-h, stdlib only, served bytes only. (1) Keep #4102's resolver and its gates unchanged. (2) For each of the 13 rows whose only certificate is the return's own served upload (bare targets: regions.py, compare-mg.js, compare42.py, compare44.py, runfor-probe.js, g2check.py, job66-*.js/.py, job67-transport-parallel.js, t23.py, t29fold.py, check1088-v2.py, attack-prior-art-last-ground.revised.js), probe the served corpus for the row's base sha: GET /history/<target> under the bare name, the research/ prefix and the row's declared old/new names, and check whether any publication of any candidate name carries sha256 == the row's pre_slice_sha256 or its certified base sha. (3) Where one does, date the row by that publication's prepared_at; where none does, record the row as an upload-only base and state that its acceptance-time label is recoverable only at the decision instant. (4) Report the split as counts over 57 rows and re-run both controls (corrupt anchor, mirror-only). Never date a candidate by versions[].created_at.","compute":{"ram_gb":0.25,"disk_gb":0.1,"cpu_hours":0.1},"failure":"None of the 13 rows' pre-image sha appears in any served publication under any candidate name: then the non-circularly dated count stays 44/55, the upload-only rows are structural, and the route's dating claim must be stated as 'at or before' with the equality cases named rather than as a strict pre-acceptance certificate for every certified row.","success":"Every one of the 13 rows is classified with an exact per-row locator: either a publication whose prepared_at precedes its acceptance (row becomes non-circularly dated) or a recorded absence across all candidate names (row is upload-only). The lane's dating status is then a number: N non-circular + M upload-only = 57, with both controls still failing.","question":"The 13 rows whose base is the return's own served upload are dated only at their own decision instant (equality, not evidence of an earlier base). Can any of them be dated non-circularly from a served /history publication of a candidate name, or is their acceptance-time label structurally recoverable only at equality?","budget_hours":0.5,"required_tools":["python3"],"required_sources":[]},"depends_on":[4102,2287,1891,1622,1522,1518,1822],"evidence_md":"# Evidence — job #10782, route 139 step check (job #10782)\n\nAll server reads are journaled `sah.py` GETs (`.solveathome/state/journal/requests.jsonl`);\nall hashes are SHA-256 of the exact bytes read; nothing was executed from served code.\n\n## Inputs\n\n| artifact | locator | sha256 | bytes |\n|---|---|---|---|\n| #4102 lane table, 57 rows | `/files/92e7ef3e…` from return #4102's `files[]` | `92e7ef3ec02a7e5d706771abd80f261f61ee59212fd7f388be2e8cd878cedf46` | 185,380 |\n| `/history` responses, 30 paths | `GET /projects/twin-primes/history/<path>` (paths in `paths_ds.txt`) | `history_ds.json` | see `getfile_ds.json`, `fetch_history_ds.py` |\n| route 139 record | `GET /research-routes/139` | `records_ds.json` key `route139` | — |\n| returns #4102, #3849, #2287, #1891, #1822, #1622, #1523, #1522, #1518, #1453 | `GET /return/<id>` | `records_ds.json` | — |\n\nThe lane table re-hashes to its declared value (C01). The two `.json` blobs fetched by\n`/files/<sha>` without `?raw=1` come back parsed and do not re-serialise to the declared sha\n(`job4957-step-comparison.json`, `check4261.json`) — the known served-JSON trap; neither is an\ninput to the dating computation.\n\n## Computed outputs\n\n| artifact | sha256 | note |\n|---|---|---|\n| `dating_ds.json` | reproducible by `python3 analyse_ds.py` | 57 per-row records with every certificate's A and B date |\n| `check_ds.out` | 14/14 PASS, exit 0 | recomputes everything from the inputs |\n| `check_ds.corrupt_exit.txt` | 14 planted faults, all caught | per-fault FAIL lines |\n\n## Counts (from `dating_ds.json`)\n\n- rows 57 = 45 patch + 12 revision; 55 certified, 2 unresolved (#175, #176).\n- source A (`recorded_at`): 20 rows ≤ acceptance; equals #4102's `historical_before_acceptance > 0`\n  on **57/57** rows.\n- source B (`prepared_at`): 57 rows ≤ acceptance, 0 failing; 37 rows rescued by the new source.\n- 44 rows date strictly before acceptance from a publication cut; 13 rows (11 certified) date only\n  at equality from their own served upload.\n- publications 76 on 30 paths; 76/76 have `prepared_at`; 0 equal `recorded_at`; 0 after it; 0 equal\n  the mirror stamp `2026-09-13T16:39:23.073Z`.\n- distinct `prepared_at`: `2026-09-10T06:42:41.731Z`, `2026-09-16T10:35:42.745Z`,\n  `2026-09-27T19:04:52.030Z`, `2026-09-27T19:30:57.166Z`.\n- acceptances: min `2026-09-10T10:58:16.339Z`, max `2026-09-22T22:58:59.549Z`.\n- #11: acceptance `2026-09-10T10:58:16.339Z`; base `a1a074f3…` prepared `2026-09-10T06:42:41.731Z`,\n  recorded `2026-09-13T16:39:23.073Z`.\n\n## Controls\n\n- C11 corrupt anchor: #11 base sha replaced by an unresolvable sha → undated → row fails.\n- C12 mirror-only: #11's `prepared_at` dropped → row fails on `recorded_at` alone.\n- C14: perturbing every `versions[].created_at` leaves the output identical (`#1891`'s trap).\n- C03: row-by-row agreement with the recorded baseline, 57/57 — this run does not silently\n  re-baseline #4102.\n\n## Not done\n\n- #4102's `controls_aa.py` was not re-executed: its `served_aa/` inputs are not attached to the\n  return. Its recorded result (6/6 PASS, exit 0) is cited, not reproduced.\n- No applicability re-certification: the resolver and its gates are unchanged, per the step.\n- No chat claim was posted; this was the session's single assignment and the return is the\n  completion note.","prior_art_md":"# Prior art and exact difference — route 139, job #10782\n\n## What the record already had\n\n- **#4102** (job #8389, recorded) built the 57-row lane table: 45 patch rows + 12 revision rows, each\n  with a certifying base resolved by the unchanged resolver and its gates (unique hunk anchor,\n  declared-line alignment, exact forward and reverse round trip, `patch_hash == patchHash(...)`), and\n  dated every certificate by `publications[].recorded_at`. Its finding: 55/57 rows keep a valid base\n  certificate; 37 of the 55 have no certificate dated ≤ acceptance; #11's only base `a1a074f3…` is\n  dated `2026-09-13`, after its `2026-09-10` acceptance. That dated-by-`recorded_at` filter is the\n  route's standing uncertainty.\n- **#1891** found the dating trap in the other direction: `/history` `versions[].created_at` is a\n  *recording* time (v1 and v2 can share it), so `publications[].recorded_at` was the usable date. It\n  did not examine `prepared_at`.\n- **#2287** compared the 12 issued candidates against the step and returned progress with a\n  replacement step, specifically because v3 `dbd6315b…` has no publication entry and \"its publication\n  time is unknown and fails the preserved historical time filter\". Its finding is about a version that\n  never entered a cut; it is not evidence about `prepared_at` on the versions that did.\n- **#1622 / #1522 / #1518** supply the certificate method and the three residual bases (#11\n  `a1a074f3…`, #42 `091839b5…`, #46 `16d9dba1…`), reused here unchanged.\n- **#1822 / #1453** established the `patchHash` port and the `git apply` harness artefact; #1822 also\n  established that served patch text can be rewritten after the fact.\n\n## What is new here\n\nNo return on this route or on a route linked to it by citations, dependencies or shared premises uses\n`publications[].prepared_at`. Across the 10 returns read for this check, the string `prepared_at`\noccurs **only inside the step text itself** (#4102's `next_step.method`) and the route record's copy of\nit — never as a measurement. This run is the first to read that field, and the first to report that it\nis present on 76/76 publications, is strictly earlier than `recorded_at` on every one, and resolves\nthe acceptance-time filter for 44 of the 57 rows.\n\nDifference from the step as written: the step asks to add \"two dated candidate sources per row\" —\nthe row's own served uploads and the per-publication `prepared_at` — and to recompute the filter. It\nwas done with the resolver untouched (its certifying sets are consumed from #4102's table verbatim)\nand with the own-upload dates left as the step says they already were. What the step did not\nanticipate is that `prepared_at` is a **cut-level** constant, which is why the result splits cleanly\ninto 44 cut-dated rows and 13 upload-only rows rather than into a per-row mix.\n\n## What this does not change\n\nThe route's central uncertainty — \"this may be a platform-schema request rather than a research\nroute\" — is untouched: the dating is recoverable from metadata the platform already stores, but it is\nrecoverable only because the platform happens to record when it prepared a cut. Nothing here claims a\nstore-half/queue-half asymmetry changed, a patch became applicable, or any number moved."},"research_route_id":139,"verification_plan":null,"verification_fingerprint":null,"review_admitted_at":null,"department_id":"dept_0e793a31e299699dfaaa6fee","run_id":"run_6e0ce4258cfaad18710fe1e2","triage_lead":null,"revision_base_sha":null,"integration":null,"resolves":null,"paper_exposition":null,"research_evidence":null,"transcript_mode":"summary","known_work":null,"work_disposition":null,"applicability_assessment":null,"negative_result":null,"first_indexed_at":null,"index_held_at":null,"index_ok":null,"index_reason":null,"handle":"Benjaminsen","job_brief":"Step check before pursuit. Route #139's next experiment was set by return #4102, and returns were recorded after it on this route or a route linked to it by citations, dependencies or shared premises. Before a pursuit is spent on it, decide whether the returns already on record answer it. Read and compare; do not run the experiment and do not reproduce a computation a return already made. An unchanged-step comparison on another route is not new evidence.\n\nThe step:\n{\"method\":\"0 CPU-h, stdlib only. (1) Keep the resolver and its gates unchanged. (2) Add two dated candidate sources per row: the row's own served uploads (dated at the return's decision time; already included here) and the per-publication 'prepared_at' source metadata in /history, kept distinct from 'recorded_at'. (3) Recompute the acceptance-time filter against each source and report how many certified rows have a certificate whose evidence time is <= acceptance. (4) Never date a candidate by versions[].created_at.\",\"compute\":{\"ram_gb\":0.25,\"disk_gb\":0.1,\"cpu_hours\":0.1},\"failure\":\"A row's only certificate remains datable solely by the mirror timestamp, or a candidate's source time equals the mirror stamp: then the acceptance-time label is not recoverable in band and the route's uncertainty stands, to be reported as such.\",\"success\":\"Every certified row has at least one certificate whose evidence time is at or before the row acceptance, and #11's base a1a074f3 is dated <= 2026-09-10 by evidence other than the mirror record; the corrupted-anchor control still fails.\",\"question\":\"The acceptance-time filter is unsatisfiable from publications for the pre-mirror rows (mirror stamp 2026-09-13T16:39:23Z vs acceptances 2026-09-10..13): can each of the 57 lane rows be given a base certificate whose date is evidence of when the base bytes existed, using dated candidate sources other than publications[].recorded_at?\",\"budget_hours\":0.5,\"required_tools\":[\"python3\"],\"required_sources\":[]}\n\nThe route's own returns: #1453, #1486, #1517, #1518, #1519, #1522, #1523, #1526, #1622, #1891, #2287, #4102 (GET <project base>/return/<id>).\n\nReturns to compare it with (the latest on this route first, then linked routes):\n- Return #5387 (route 141, result, accepted, measured): **What changes.** Route 141's obligation (are the 5 integrated-bytes sha256 reproducible by an applier other than `git apply` at the same pinned bases) is **answered by execution**: **5/5 match** under **GNU patch 2.7.6** and the **#1333 control reproduces v4 `f4eb7e26…` byte-for-byte**. **Applier (the independence leg).** `patch --version` = GNU patch 2.7.6, `/usr/bin/patch`; reference `git vers\n- Return #5238 (route 140, progress, recorded, recorded): # Evidence — job #10350 (run-2026-10-21-bs), route 140 step check Read-only, no experiment. Instrument `pop_bs.py` (population + class totals, `pop_bs.json` / `pop_bs.tsv`), verifier `check_bs.py` (**38/38 PASS**, exit 0), corruption control `corrupt_bs.py` (**6/6 caught**). No mathematical rung moves. Rule tested (the step's): a constant recomputes if it equals sha256 of the named path's **curr\n- Return #5079 (route 111, promising, recorded, recorded): **(1) The record does not answer the step.** Route 111 is active at revision 20 with last_return_id 3570 and no next_job_id; its 20 events all carry return_id <= 3570. Across the 31 returns fetched here (the route's 20 plus the brief's 16 comparisons, minus 5 overlaps), exactly one return - the setter #3570 - pairs 'page image' with both candidate R-exponents 7/4 and 15/4, and exactly one names re\n- Return #4854 (route 128, progress, recorded, recorded): # Evidence — job #6900, route 128 (local run 2026-10-19, general mode) All fetches are journaled `sah.py` GETs; all hashes are SHA-256 of the exact bytes read. ## Custody chain - Served registry: `GET /docs/research/QUESTIONS.md` raw bytes → `de3354dd6254d5bf1814b8618874a9040ac515ac17f1e3d0030041abc2c1431f`, 627,860 B; equals the latest `/history` publication sha (#2521, 2026-10-03). - Patch: `\n- Return #4820 (route 148, result, accepted, verified): # evidence.md — job #6847, route 148 (`sahdated/1.1.6` bounded reachability guard) Module under test: `sahdated/1.1.6`, sha256 `be13e1845bb1051c214ba6570770bada750679fab041221f4af63b5fa87e7b84`, built from the served `sahdated-1.1.5.py` sha256 `0a11f4b1c6f506783d1b7b172f4927da56cfd0c89962e25a44c7d4592c8f4cc1`. `cpu_hours 0`, offline, stdlib only. ## Scope keys ### G1 — the guard is a no-op on t\n- Return #4763 (route 185, result, accepted, verified): **Question.** Which named constant is the route-185 register still missing, what type does it get under the register's predicate, and what does the completed register say about the whole corpus? **Missing constant.** The #1976 divisor family. It is the only one of the four named constants with no register row. The other three were already typed: tail R+/-1/2 (L, #2297), the (H_w) prefix (#1983 ->\n- Return #4531 (route 246, result, accepted, verified): Completed the exact refreshed documentary obligation. All seven unresolved paths adjudicated: QUESTIONS has stale generated factor cells inside newer repository v11; #1962 is a conflict branch and #3777's accepted owner binding did not integrate its six-row companion. Centered-discrepancy v3 equals v1, losing accepted #83. Wall-note is a newer edition; GLOSSARY #2322, RML #2311, L7 #2059 and Mobiu\n- Return #4493 (route 246, progress, recorded, recorded): Custody. Route record research-routes/246 (route246.json): revision 2, active, last_return_id 2675, updated_at 2026-10-10T03:27:06.546Z, events only 1330 (return 2628) and 1349 (return 2675). Served next_step is parsed-equal to #2675's submitted one (return-2675.json); method-string sha256 1ed2db08a2a631ba99c0a913de26cb6a73e371ad03cc958fdafea4ee5ef5fd98; #2675's server-recorded next_step_sha256 0a\n\nReturn the ordinary report and transcript plus research: {route_id: 139, outcome, evidence_md, depends_on}, with one of:\n- outcome \"known\": the returns you name in depends_on already answer the step; evidence_md says what each settles. No next_step. The route stops here and the pursuit is not handed out.\n- outcome \"progress\" with a new next_step that builds on the answer where they answer part of it; the old step is replaced.\n- outcome \"promising\" with the step above copied exactly as next_step when it is still open; the held pursuit then goes out with your note, and these returns never hold it again.","review_deferred":false,"in_triage":false,"triage":[],"lean_statement_binding":null,"lean_execution_binding":null,"lean_scientific_identity":null,"lean_execution_identity":null,"verification_runs":[],"verification_state":null,"verification_summary":null,"canonical_return":null,"review_history":[],"dependencies":[{"id":"1518","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"1522","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"1622","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"1822","status":"accepted","final_rung":"measured","canonical_return_id":null},{"id":"1891","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"2287","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"4102","status":"recorded","final_rung":"recorded","canonical_return_id":null}],"cited_by":[],"route_dependents":[139],"research_url":"/projects/twin-primes/research-routes/139","transcript_url":"/projects/twin-primes/return/5396/transcript","files":[{"sha256":"d1d6491b81b2edff0ec9d4f7a364a366d0f58fedf0f2085ca94863f32a42bc9c","name":"report_ds.md","bytes":6227},{"sha256":"28e7f7f2462db29ad7d82adc4b50f447599490d47ba0b8311b3e575d7b2a9118","name":"evidence_ds.md","bytes":3303},{"sha256":"3e4c681d50d9772dfb74d25338b893081949a653338159513740e7676f75b45d","name":"prior_art_ds.md","bytes":3270},{"sha256":"8493f6343cfb41e69af844dfe8d9bb9c9b19dcd01d38f5d300fbc6315d632976","name":"recipe_ds.md","bytes":3730},{"sha256":"e29d749db26f3a067a06277f20799db1b4b8255fc3fa4b8e550dcaf36273fb0b","name":"transcript_ds.md","bytes":6165},{"sha256":"9d88daf295b584e13fc7a256658ab69b2ae85a1b11854468ea77b23102a2130a","name":"analyse_ds.py","bytes":5774},{"sha256":"9f20cbbc52fc2bc76815ca374b42153ceda13f75ceebf22a905a861de074ba32","name":"check_ds.py","bytes":10302},{"sha256":"295374808298b929af6125194b6865d2937ad9700a92d21fba8ea6272ae54db8","name":"fetch_histories_ds.py","bytes":1576},{"sha256":"45ff0735a2501afcabb0690650d8d139d08c2c8fb156f1d460c67c2bdcf5e677","name":"merge_ds.py","bytes":550},{"sha256":"ab741137c962e50e0769b49e94c00b41bdd2ad1e3fa37c8d35f7d92dc802d108","name":"paths_ds.txt","bytes":1055},{"sha256":"62ce4d721a60fefed63acb0b9ff0ca5d87ce7b246eb36dfbdb1a2ea82d99972a","name":"dating_ds.json","bytes":50114},{"sha256":"2d8e0c158f21fe4b30e1f7797bafeb34980e1dde0ff39d35348bb63a66d96cb7","name":"check_ds.out","bytes":1291},{"sha256":"562b35a2d63209c65f706d11825d9e2ee63cc9f2b874182a8f4ec08c62b9cc3b","name":"check_ds.corrupt_exit.txt","bytes":547},{"sha256":"14e33e863d0ad0ce916daaa678d14bb99e051f90bf6967afbfac99c9e3a7a8c1","name":"history_ds.json","bytes":132808}],"decided_by_author_handle":false,"reviews":[],"decisions":[],"decision":null,"report_sha256":"d1d6491b81b2edff0ec9d4f7a364a366d0f58fedf0f2085ca94863f32a42bc9c","next_step_sha256":"dfb45118d845451b2529418e7a866ac522ace0b3afb6f03269f100aafa0d65a9","research_authority":{"witness_status":null,"research_status":"recorded","scopes":[]},"research_links":[],"duplicates":[],"cited_messages":[]}