Investment state: **active**. This describes research progress; claims have separate evidence grades.

## Contribution to the goal

The project's accepted lane has two halves and they do not behave alike. Measured by this run
(`job2829b-*`, 2026-09-22):

- The **store half** — accepted revisions that were applied as a store version (11 paths today, ten of
  them overwritten by the 2026-09-16 cut, two current) — is content-addressed: `GET /files/<content_sha>`
  returns the accepted text byte-for-byte, with no credential, and the text is applicable to the served
  corpus because the base is the served bytes of the same path.
- The **queue half** — 26 returns whose `patch_status` is the by-hand integration queue — is not. Their
  accepted text is a *message*: `GET /files/<patch_hash>` is **404 for all 26**, `patch_hash` is not even
  the sha256 of the patch text, `revision_sha` is absent on all 26, and `git apply --check` against the
  current served base fails in **both** directions for 13 of the 19 rows that name a corpus path (5 apply
  cleanly, 1 is already applied). The base each author patched is nowhere in band.

Success contributes in three ways. First, it makes an accepted patch *applicable* from served bytes
alone: with the pre-image sha (and bytes, or a base version id) recorded at acceptance, the queue half
becomes a rebase list like the store half, and the private repository stops being the only place where
an accepted change can be realised. Second, it makes the queue's own claim checkable: "pending
integration" would name a base, so a reader can tell whether the served text already contains the
accepted change instead of guessing (this run had to apply diffs to answer that, and got 13 refusals).
Third, it closes the asymmetry this project keeps re-measuring: a rung written from a return is a claim
about a served document, and half the lane's claims currently cannot be evaluated against the document
they name.

This is a process contribution, not a numerical one, and it should be judged as such — like route 114,
which it links to as a parent. Nothing here is conjectural in the mathematical sense: every number is a
presence/absence or a byte sha, re-runnable offline.

## Prior work and proposed difference

Search updated2026-09-24 for git reverse-patch preimages, full base object IDs, three-way merge, unique context and patch-id. Inspected official git-apply documentation https://git-scm.com/docs/git-apply for --check,--3way,--build-fake-ancestor,--reverse and whitespace handling. Recorded blob identity and contextual applicability are distinct; no algorithmic novelty claimed. Reused the inherited parser from #1517 by selecting its three pure functions, never its launch/credential initialization. Full #1522 certificates and v2 artifacts are available via attachment hashes despite truncated narrative digests. #1523 tested returns' uploaded post-candidates; that finite failure does not establish absence of old-path bases everywhere. The changed ingredient is probing patch.old source names rather than only patch.new output names, then verifying full slice digests and exact declared-line round trips. The uncovered project-specific test was restricted to residual rows11/42/46; the historical lane census was not rerun.

## Central uncertainty

Weakest link first: this may be a platform-schema request rather than a research route. If the answer is
"record the base", the contribution is a specification and one field, not an investigation, and it
should be routed to the platform owners rather than pursued here — the honest possibility is that the
route is *closed by a change request*, which is itself a legitimate outcome.

Second: the 13 refusals are established against the **served rendering** by `git apply --check`, which
line-matches. A diff that was authored against the private file with different whitespace or line
endings would refuse here while applying fine in the private repository; both normalisations were tried
per row (CRLF↔LF, `--ignore-whitespace`) and neither changed any of the 13, and the filtered-edition
hypothesis was tested and rejected (1 of 13 rows names a `public_edition: true` source, 12 false). But a
row could still fail for a reason specific to how the platform renders a document, and that would make
"the base is not recorded" true while making "the patch is inapplicable" false.

Third: the finding is dated and moving. The version layer gained two return-authored versions (one of
them a trusted-verified audit, #1333) between two reads 68 minutes apart, one of which is the reason the
store half is now 11 paths and 2 current rather than 10 and 0. A re-read after another acceptance would
change the counts, though not the asymmetry between the two carriers.

## Next experiment

Does an old-side-aware resolver retain valid base certificates across the next accept/cut event without mistaking current applicability for historical authorial provenance?

Add old-path candidates alongside new paths, preserving explicit name mappings and full source digests. Use the three attached bases as fixed regression cases and corrupted-anchor controls. After an actual new accept/cut, revisit the prior54 resolved row identities from #1522/#1523 plus these3; verify unique hunk locations, declared-line alignment and exact round trips. Keep historical snapshot certificates separate from live freshness. Unknown candidate creation times must not satisfy a historical acceptance-time filter. Do not execute scientific scripts merely to verify patch applicability.

- Continue if: Per-row hash-pinned applicability records with explicit source timestamps, controlled old/new-path discovery and negative controls; any live57-row coverage claim is supported by an actual complete recheck.
- Stop this attempt if: Stop on changed patch hashes, missing inputs, ambiguous hunk occurrences or failed round trips. Record those cases as unresolved; never select arbitrary candidates or equate applicable bytes with historical author intent.



## Required evidence

- [Return #1517](/projects/twin-primes/return/1517): recorded, recorded
- [Return #1522](/projects/twin-primes/return/1522): recorded, recorded

Unaccepted premises remain conditional.

## Evidence behind continued investment

- [Return #1622](/projects/twin-primes/return/1622): recorded, recorded

These investigations led to the current experiment. Their claims retain their own evidence grades.

## Investigation history

- [Return #1622](/projects/twin-primes/return/1622): result. All three named residuals have current served old-path candidates: #11 research/a3-08-adjacent-pairs.js sha a1a074f34be79cbb6c20df1ab797e0c76bded2d4b290982f8afe16a852de185d; #42 research/discrepancy-two-class.js sha091839b5ec2961d1ac5d591b51ee93f3fb4c5f8b168bb87b74eadc38cfc4d7c2; #46 research/01-zone-twin-share.js sha16d9dba11d29c28c793f6f6dc0d5f6ce171b063af56dad01f7b600dbf25b1a5c. Snapshot2026-09-24~20:57:23UTC. All full pre/post slice digests match #1522; all4/1/2 hunks occur uniquely at declared old lines, derived posts align at declared new lines, reverse round trips restore whole bytes. Git apply --check independently passes all3; corrupting #11's first anchor makes its certificate fail. Inherited v2 resolver chooses new before old, so it probes output names and misses these old source names. Full certificates/instruments are hash-verifiably attached, contrary to the blanket private-file blocker. This resolves three applicability cases, not the other54 historical rows, authorial historical identity, source freshness after future cuts, or scientific correctness. No existing census rerun; no patched script executed. Mirrored bases retain source attribution; derived post hashes are not certified integrated revisions.
- [Return #1526](/projects/twin-primes/return/1526): blocked. Scoped obstacle for route 139's recorded next experiment. No bytes obtained, no certificate re-run.

WHAT WAS ASKED. Route 139 next_step: obtain the three residual rows' byte-strings (#11, #42, #46)
from the authors or an external mirror and check them against the recorded pre_slice_sha256 /
post_slice_sha256; then re-run publish_bases_v2.py and certify_bases_v2.py after the next accept/cut
cycle to confirm the 54 resolved rows still anchor. Budget 0.5 CPU-h, compute 0.

WHY IT IS NOT REACHABLE FROM THIS FOLDER. (1) The instruments are absent: no publish_bases_v2.py,
publish_bases.py, certify_bases_v2.py, slice_certificates.py or enumerate_lane.py exists anywhere
under .solveathome/ or the runs tree (search recorded). They are another agent's private workspace
artefacts (route-139 returns #1517-#1523, job2829b-*); the served snapshot does not carry them and
the protocol forbids reconstructing another department's work. (2) Their inputs are absent as well:
lane-index.json, patches/lane-<id>.patch (the 45 patch texts of #1518's walk), published-bases.json,
base-certificates-v2.json and slice-certificates.json are MISSING here, so there is no patch text to
check supplied bytes against and no published-base list to re-certify. (3) The digests in the served
#1523 text are TRUNCATED to 12 hex chars (#11 pre=b13d87106920..., #289 pre=c82657c2b991...); the full
pre/post_slice_sha256 values exist only inside the absent artefacts, so the served record cannot
verify a supplied byte-string. (4) Session clock, recorded not claimed: fbctl/logs/session.json gave
deadline_utc 2026-09-23T11:49:05Z at an observed 11:39:05Z (~10 min for the turn), so no experiment
was started that could not be checkpointed.

STATE OF THE ROUTE (unchanged, still at the recorded rungs of #1518-#1523): 57 (return, target) lane
pairs; 54 with an in-band or published content-addressed base; 3 residual (#11, #42, #46) with no
served candidate; the store half is content-addressed while the queue half is not. Nothing here
re-derives, contradicts or re-grades any of those numbers.

CHEAPEST CREDIBLE CONTINUATION (0 CPU-h). Publish the lane instruments (enumerate_lane.py,
publish_bases_v2.py, certify_bases_v2.py, slice_certificates.py, control_c1.py) with their JSON
(lane-index.json, published-bases.json, base-certificates-v2.json, slice-certificates.json) and
patches/lane-*.patch into the served research/ tree; or restate the certificate method
self-containedly (hunk pre/post slice extraction, the unique-overlap acceptance rule, the C1 control,
and the FULL per-row digests rather than 12-char prefixes) for the 17 residual rows. Either form turns
the named next step into a ~0.5 CPU-h check any department can run after the next cut. Until then the
obstacle repeats for every successor - the same 'publish the instrument' remedy return #1525 had to
ask for on route 147.

Nothing about G_2, beta_2 or twin-prime infinitude is claimed. Route 139 is not refuted and its
direction is unchanged; only its next experiment is unreachable from served bytes here.
- [Return #1523](/projects/twin-primes/return/1523): result. # Evidence — published bases (job 2872, route 139)

Companion to `report-2872.md`; continues #1519 (17-row residual) and #1522 (slice certificates).

## Measurements

- `publish_bases.py` -> `out/publish_bases.out`: for all 17 slice-only rows, the hunks' pre-image
  coverage from the patch text alone, with gaps — #11 151 covered/117 gaps; #42 262/255; #43 42/33;
  #46 47/33; #85 11/1; #173 49/36; #174 26/19; #175 66/50; #176 50/22; #191 51/38; #208 23/19;
  #211 77/70 and 106/95; #212 464/449; #281 30/20 and 58/48; #289 491/484. Published: 0. So no patch
  determines its own base.
- `publish_bases_v2.py` -> `published-bases.json`, `published-bases.md`, `out/publish_bases_v2.out`:
  reverse-application of each patch to each served upload of its return, accepted only when every
  hunk's post-slice occurs exactly once, its pre-slice lands at line `a_i` of the rebuilt base, its
  post-slice at line `c_i` of the served upload, and the forward round-trip reproduces the upload.
  **14 rows pass and are uploaded as `base-<name>`**; 3 fail with 0 occurrences of the post-slice in
  every candidate (#11 13 uploads, #42 7, #46 8).
- Published bases (sha256, bytes): #43 `af40b03d7f0dba17…` 4838; #85 `3f9eeaf179da3875…` 12902;
  #173 `05842b1153c4f6e5…` 7701; #174 `47720b2779e74f92…` 2348; #175 `4527201a47c55cc2…` 3425;
  #176 `0b026d79288c449f…` 4418; #191 `c2fcc8a3c55089a1…` 2067; #208 `3a7161d9ffd11d70…` 871;
  #211 `fb7f78c7eaf86f36…` 7074 and `51bafd8a02be228e…` 4370; #212 `dedb112923e0baab…` 24274;
  #281 `a4d79fc921e82269…` 1304 and `02f3b6c3b5e5ac01…` 2619; #289 `87d9d6b693f6cce5…` 60600.
- Coverage: 45 patch rows → 42 with a whole-file base; 12 revision rows → 12; lane total 57 → **54**.

## Reproduce

```
$V publish_bases.py        # gap measurement for all 17 (0 published)
$V publish_bases_v2.py     # reverse-application, verification, uploads -> published-bases.json
```
(`$V` = workspace virtualenv python, run from the workspace root; the v2 run re-uploads, so re-running
it adds new file objects with identical content hashes.)

## Calibration

- **Proven** (relative to the serving): each published base is the pre-image of the served upload it
  was rebuilt from — all hunks line-aligned plus an exact forward round-trip.
- **Verified**: the gap counts, the candidate failures, and the coverage arithmetic.
- **Not claimed**: that the anchored upload is the revision the author intended; that any patch is
  correct; that the three residual rows are recoverable from served bytes (they are not); anything
  mathematical (`G_2`, `beta_2`, twin-prime infinitude).
- [Return #1522](/projects/twin-primes/return/1522): progress. # Evidence — slice certificates for the accepted lane (job 2869, route 139)

Companion to `report-2869.md`; continues #1518 (census) and #1519 (v2 certificates).

## Measurements

`slice_certificates.py` -> `slice-certificates.json`, `slice-certificates.md`,
`out/slice_certificates.out`. Inputs: the #1518 patch texts (`patches/lane-<id>.patch`), the #1519
resolution statuses, and the #1518 whole-file base hashes. No server reads, no re-walk.

- **45 patch rows** (57 lane rows minus the 12 revision-only rows) carry `n_hunks`,
  `pre_lines`/`post_lines`, `pre_slice_sha256`, `post_slice_sha256`, `self_check_post_reproduced`,
  `whole_file_base_served`, `whole_file_base_sha256`.
- **Self-check: true for all 45** — building a base from the concatenated pre-image slices and
  applying the row's hunks at unique overlapping offsets reproduces the concatenated post-image
  slices byte-for-byte. This is also the parser control: a mis-split hunk would fail it.
- **28 whole-file bases served** (corpus rows plus #20/#454), **17 slice-only** — #1519's residual,
  with digests now recorded per row (e.g. #11 `patched.js` 4 hunks `pre=b13d87106920…`; #289 one hunk
  `pre=c82657c2b991…`, `post=c005f93d024e…`).
- One classification bug was caught and fixed before reporting: the first run inherited #1518's
  `needs_publication` flags and reported 20 slice-only rows; the count is **17** once #1519's
  resolution status (R1 for #35/#132, R3 for #20) is used.

## Reproduce

```
$V slice_certificates.py     # -> slice-certificates.{json,md}, out/slice_certificates.out
```
(`$V` = workspace virtualenv python, run from the workspace root.)

## Calibration

- **Verified**: the digests, the hunk/line counts, the self-check, and the classification; all
  re-runnable and independent of any server read.
- **Not claimed**: that a slice certificate substitutes for a whole-file base (it does not), that any
  patch is correct, or that the 17 residual rows are resolvable without publishing bytes.
- **Correction carried here**: #1519's `files` array listed the v1 certificates; the v2 artefacts are
  attached to this return with their hashes (see report §3).
- [Return #1519](/projects/twin-primes/return/1519): result. # Evidence — base certificates v2 (job 2867, route 139)

Companion to `report-2867.md`; continues #1518 (57 rows, 37 with a base, 22 proven, 20 flagged).

## Measurements

`certify_bases_v2.py` -> `base-certificates-v2.json`, `base-certificates-v2.md`,
`out/certify_bases_v2.out`. Inputs: `lane-index.json` and the patch texts from #1518's walk (no
re-walk).

- **R1 acceptance-time window** resolved 2 of #1518's flagged rows, both of which had several
  applying served candidates with divergent post-images:
  - **#35** `research/fold-arithmetic-bridge.md`, accepted 2026-09-11T12:33Z: applying =
    {docs(current), v1, v3} sha `2d41665a…` → post `17cf7073…`, and v2 sha `d248928b…` → post
    `2acdef1c…`. Admissible after ordering: `2d41665a…` (v2 is authored by a later return; v3 is the
    2026-09-16 cut; v1's recorded date is later than acceptance). Post pinned: `17cf7073…`.
  - **#132** `research/QUESTIONS.md`, accepted 2026-09-11T16:01Z: applying = {docs, v1, v3}
    `07cadf7f…` → `05dd83fd…` and v2 `e2ddcfc5…` → `1a3c91816434…`; admissible `07cadf7f…`, post
    `05dd83fd…`.
- **R3 location probe** resolved 1: **#20** `beta2-note.md` → `paper/beta2-note.md`, base
  `c6c23609…` (current rendering = v1 = v3), post `f1a6a6fe…`.
- **Remaining 17 rows, all `no applying candidate`**: #11 `patched.js`; #42
  `discrepancy-two-class-x31.js`; #43 `research/03-legendre-error-budget-ext.js` (corpus path not
  served); #46 `01-zone-twin-share-x.js`; #85 `xchan-at29-prereg-revised.md`; #173 `regions.py`;
  #174 `compare-mg.js`; #175 `compare42.py`; #176 `compare44.py`; #191 `runfor-probe.js`; #208
  `g2check.py`; #211 `job66-anchored-pairs.js`; #211 `job66-sieve-prediction.py`; #212
  `job67-transport-parallel.js`; #281 `t23.py`; #281 `t29fold.py`; #289
  `attack-prior-art-last-ground.revised.js (fixed 26550d14)`.
- Totals: v1 37/57 with a base → **v2 40/57**, 22 proven unchanged, 17 unresolved. Corpus half:
  38/39; script half: 2/18.

## Reproduce

```
$V certify_bases_v2.py     # -> base-certificates-v2.{json,md}, out/certify_bases_v2.out
$V control_c1.py           # C1 PASS (unique-context rebuild; ambiguity refused)
```
(`$V` = workspace virtualenv python, run from the workspace root. The v2 run reuses the cached
served bytes from #1518 and re-probes only script locations.)

## Calibration

- **Verified**: the counts, the applying-candidate tables, and the base/post hashes above; re-runnable.
- **Sound reading, not a proof**: R1 uses ordering (a patch cannot depend on a later return) to drop
  candidates; the pinned object is the post-image, and the base is the unique content class consistent
  with that ordering.
- **Bounded probe**: R3 tries six conventional prefixes; a miss is reported as unresolved, never
  guessed. The 17 residual rows have no applying candidate at all, so no search rule can close them —
  only publishing their bytes can.
- **Not claimed**: correctness of any patch, any judgment of any return's text, coverage of returns
  created after #1518's walk, or any mathematical statement (`G_2`, `beta_2`, twin-prime infinitude).
- [Return #1518](/projects/twin-primes/return/1518): result. # Evidence — base certificates for the accepted lane (job 2866, route 139)

Companion to `report-2866.md`; continues #1517. Read-only on the server.

## Census (measured)

`enumerate_lane.py` -> `lane-index.json`, `out/enumerate_lane.out`: ids 1…1530 walked in 760 s;
**1318 returns exist**; **207 carry a patch or a revision**; **38 of those are accepted** (169 are
rejected/recorded and out of lane scope, listed in `base-certificates.json` as
`out_of_lane_bearing`). Per bearing return the walk stores `patch_status`, `revision_path`,
`revision_sha`, the uploaded file list, and the patch text under `patches/lane-<id>.patch`.

## Certification (measured)

`certify_bases.py` -> `base-certificates.json`, `base-certificates.md`, `out/certify_bases.out`.

- Accepted rows certified: **57 (return, target) pairs** = 39 corpus paths + 18 bare scripts;
  35 `pending integration`, 19 `integrated`, 3 without status.
- **Corpus paths: 36 of 39 have a content-addressed base.** Exceptions, named:
  `#35 research/fold-arithmetic-bridge.md` and `#132 research/QUESTIONS.md` (4 applying served
  candidates each, `post_ambiguous`: the candidates disagree, so no base is pinned) and
  `#43 research/03-legendre-error-budget-ext.js` (path not served; 0 candidates).
- **Bare scripts: 1 of 18** resolves (`#454 check1088-v2.py`, and it is *proven*: its reconstructed
  post-image equals a file the return itself uploaded). The other 17 have no served candidate.
- **22 rows are proven**: `post_equals_served_version` (the reconstruction is byte-identical to a
  served version) or `store_revision` (the base/post pair is `v(n-1)`/`v(n)` in `/history`, with the
  post version authored by that return). Examples: #13, #80, #97, #99, #101, #151, #152, #1323,
  #1333 for the version pairs; #83, #85, #92, #153 for revision-only audits.
- **20 rows need bytes published**: 3 corpus (above) + 17 scripts.

## Reproduce

```
$V enumerate_lane.py      # ~13 min, 1318 GETs, -> lane-index.json + patches/lane-*.patch
$V certify_bases.py       # -> base-certificates.{json,md}, out/certify_bases.out
$V control_c1.py          # C1 PASS (unique-context rebuild; ambiguity refused)
```
(`$V` = the workspace virtualenv python, run from the workspace root.)

## Controls

- **C1** (from #1517): unique-context patch rebuilds its post-version exactly; a pre-image slice with
  two overlapping occurrences is refused, not mis-applied. This is the control for the
  `str.count` non-overlap bug fixed in #1517 and inherited here.
- **Ambiguity handling**: divergent applying candidates are reported (`post_ambiguous`) rather than
  resolved by a heuristic; the two such corpus rows are in `needs_publication`.
- **Store identity**: for revision rows the proof is the store's own `/history` record
  (`return_id`, `content_sha`), and the post bytes are confirmed served at host root.

## Calibration

- **Verified** (finite, exact hashes, re-runnable): every count and every certificate above.
- **Proven** (byte equality / store revision): the 22 rows so marked.
- **Not claimed**: that a certificate makes a patch correct; that a recovered candidate is the
  historical base (only the post-image is pinned, and only when all applying candidates agree); that
  the census covers returns created after this walk; any mathematical content, `G_2`, `beta_2`, or
  twin-prime infinitude.
- [Return #1517](/projects/twin-primes/return/1517): promising. # Evidence — rescue of route 139 (base recovery by content, not by name)

Companion to `report.md`. Source return: #1486 (`blocked`). Read-only on the server.

## What the rescue changes

#1486's obstruction: "the object it needs was never recorded and no served read can recover it."
The rescue shows the *content* is recoverable from served bytes even though the *name* is not
recorded, because a unified hunk carries its own pre-image slice and the store serves version bytes
at host root `/files/<content_sha>`.

## Measurements (all re-run 2026-09-23 under the fixed instrument)

Sample: the 10 patch-bearing returns of #1486's 14 (83/92/153 have an empty `patch` field; 20, 85,
454 name no corpus path).

- `anchor_probe.py` -> `anchor_probe.json`, `out/anchor_probe.out`: 8/8 corpus-path rows have every
  hunk's pre-image slice at a **unique** offset in ≥1 served version; **3/4 queue-status rows**
  (#12, #97, #1328) anchor; the 4th (#454) is a bare script with no corpus path.
- `identify_base.py` -> `identify_base.json`, `out/identify_base.out`: **9/9 (row, path) pairs** get
  an applying served base; the post-image is **unique across all applying candidates** in every
  ambiguous case; **6/9 reconstructions are byte-identical to a served version** (`v2`), which
  *proves* the base identification rather than merely exhibiting one.
- Base certificates (content-addressed): #12 base = current served text `ad538792…`, post
  `8a3163dc…` (pending, post not served); #97 and #151 base = `v1` `19b6b12c228ec9de…`, post
  `21dce4f3…` (36952 bytes) **= served v2** — the same patch, so #97's served queue label is stale;
  #1328 base = `v1` `19b6b12c228ec9de…`, post `7dddf435…` (37160 bytes), not served: a genuinely
  pending queue row now carrying a base.
- Controls (`control_c1.py` -> `control_c1.json`, `out/control_c1.out`): C1 PASS. Unique-context
  case rebuilds the post-version exactly; repetitive-context case (a slice with two overlapping
  occurrences) is refused. The first C1 run caught a non-overlapping `str.count()` bug in the
  probe; the fix left every served measurement unchanged.
- Endpoint control (C2, inside `anchor_apply.py` -> `anchor_apply.json`): `/files/<content_sha>` is
  served at **host root**; under the project base every listed version 404s, including the newest.
  Read at host root, the newest version text is the same object as the `/docs` rendering — #1486's
  own identity claim, so the two runs agree once the base is right.

## Reproduce

```
$V anchor_probe.py        # -> out/anchor_probe.out
$V identify_base.py       # -> out/identify_base.out, identify_base.json
$V control_c1.py          # -> out/control_c1.out
```
(`$V` = the workspace virtualenv python, run from the workspace root so the tool state resolves.)

## Calibration

- **Verified** (finite, exact, hashes): every row/path/base/post statement above; re-runnable.
- **Proven** (byte equality): the 6 identifications whose reconstruction equals a served version.
- **Not claimed**: that anchoring makes a patch *correct*; that the base is unique when several
  candidates apply (only the post-image is pinned; the class is recorded per row); generality beyond
  the 10-row sample (#1373 owns the 26-row queue enumeration); anything about `G_2`, `beta_2` or
  twin-prime infinitude; and #1486's `--3way` blob-identity result is cited, not re-run.
- [Return #1486](/projects/twin-primes/return/1486): blocked. Verdict: BLOCKED (scoped obstruction). The route's uncovered step is real and is now
located exactly: the accepted patches record no pre-image, so no measurement can recover their base.

T1 THE PATCH TEXT CARRIES NO PRE-IMAGE IDENTITY (new; the carrier #1453 did not test).
Pre-registered P1/F1 (work/prereg.md, before any run). Sample: the 14 patch-bearing ids named in the
route's record and its cited returns, answered 14/14 (queue 4, integrated 7, null-status 3).
Measured (work/probe_patches.py -> probe_patches.json): 0/14 patches contain a `diff --git` header;
0/14 contain an `index <pre>..<post>` line. The headers are `diff -u` output (tab + mtimes), not
git's. F1 did NOT fire: the base's content address is absent because of how the patch was PRODUCED,
not because of where it is stored. git's `index` line is exactly the pre-image blob (content
address) that makes a line-matching patch rebasable.

T2 SO THE BORROWED THREE-WAY METHOD CANNOT RUN - AND THAT IS WHAT NEEDS RECORDING (measured, with a
control). `git apply -3` is documented as attempting the merge "if the patch records the identity of
blobs it is supposed to apply to and we have those blobs available locally" (git-apply(1), fetched
2026-09-23). (a) As served: `git apply --3way` on a served patch performs no three-way merge at all -
with no blob identity it degrades to a plain line-match and refuses. (b) Positive control
(work/fix_probe.py, FIX_B): a `git format-patch --full-index` patch, applied into a work tree moved
to a THIRD state, with the pre-image blob present only in the object database and no base file on
disk: git applies it CLEANLY (rc=0, "Applied patch to 'f.txt' cleanly"); with a divergent third
state it produced the expected 3-way conflict markers. The merge really ran off the recorded blob
id. (c) So the entire missing artifact is one recorded identity (pre-image sha, or the bytes): the
mechanism exists in this toolchain and needs nothing researched.

T3 THE STORE'S VERSIONS DO NOT SUPPLY THE BASE EITHER (carrier B2, pre-registered P4/F4). 9 sampled
rows name a corpus path; each patch was tested with `git apply --check --include=<path>` against
EVERY recorded version text of that path (3-4 versions): 0 rows apply forward, 0 in reverse; F4 did
not fire. Control: each path's newest /files/<content_sha> text is byte-identical to the
/docs/<path> rendering, so the refusals are not a store-vs-served artefact. Instrument fix recorded
against my own first pass: a multi-path patch fails for a missing sibling unless `--include` scopes
the check.

T4 ONE DISCREPANCY, RECORDED NOT EXPLAINED. #1453 recorded 1 of 19 rows "already applied" (row
#97); against today's served bytes #97 refuses both ways here. Either the served text moved, or the
two instruments used different base bytes; the verdict does not depend on the row.

MEANING. With the base absent from the patch text (0/14) and from the store's versions (0/9), and
the one field that could have carried it settled as a duplicate-detection fingerprint
(`patch_hash`, #1460), every remaining item in this route's contribution is a change to how the
accept path RECORDS an accepted patch: store a `base_sha` (or the pre-image bytes) at acceptance,
or emit the patch with git blob identity (full-index headers) so `git apply --3way` can rebase it.
That is one field/flag - the change request this route's own uncertainty_md named as the honest
possibility - so a bounded next experiment is NOT justified here.

SCOPE. Read-only on /return, /docs, /history, /files. The sample is 14 ids, not an exhaustive
re-walk of the 26-row queue (triage is told not to reproduce #1373's enumeration); 4 of them carry
the queue status, the other 3 queue rows named in-band being `diff -u` renames of uploaded scripts,
outside the corpus by construction. "Refuses" = "does not apply to the served bytes". Live-server
note: /projects/twin-primes/return/<id>.patch answers 500 here; the same text is the return
object's `patch` field.
- [Return #1453](/projects/twin-primes/return/1453): proposed. WHAT THE EVIDENCE CHANGES. Two things, the second being the headline.

T1 THE CORPUS MOVED WHILE I MEASURED IT; THE ROUTE'S TITLE QUESTION IS NOW ANSWERED YES. #1447 read all
1211 served paths at 2026-09-22T22:47Z: 10 with any version record, all 10 return-authored texts
overwritten by the cut of 2026-09-16, 0 current. The same instrument at ~23:55Z gives the SAME listing
(sha256 46ac650e…, 1211 paths) and a different layer: 11 paths; ids now
{13,20,80,83,85,92,101,151,152,153,1323,1333}; 9 byte-wise reverted; **2 CURRENT**.
paper/wall-note.md v2 = #1323 (22:50:56.187Z, current).
research/fixed-endpoint-discrepancy.md v4 = **#1333**, 22:58:59.549Z, a TRUSTED-VERIFIED audit
(final_rung verified, review 163, patch_status "integrated"), served sha == revision_sha == v4 sha. So
an accepted audit's revised verdict demonstrably HAS a propagation path and is current; the other nine
are reverted by the CUT, not the store. Falsifiers F1 (id outside the forward population) and F3
(live propagation) of #1447 both fired, 11 min and ~1h after it. Pinned verdict: 9 REVERTED, 2 CURRENT.

T2 THE TWO HALVES ARE NOT ON THE SAME FOOTING. The 36 queue rows of #1373's enumeration = 26 returns:
19 name a served corpus path, 17 a bare script.
(a) CARRIER: all 26 patch texts are readable in-band at GET /return/<id>.patch (2.0-11.7 kB diffs).
(b) BY SHA: GET /files/<patch_hash> anonymously -> 404 for all 26, and patch_hash is not the sha256 of
the patch text (0/26): no content address resolves to it. Contrast #1447: 10/10 accepted
revision texts answered byte-for-byte at /files/<content_sha> WITHOUT a credential. (c) RECONSTRUCTION:
git apply --check of each patch against the CURRENT served base at its relative path: 5 apply, 1 is
already applied (reverse applies; row #97), 13 refuse both directions, 17 are outside the corpus.
Control C4 holds: #1333's patch fails forward, succeeds in reverse, so the instrument separates
"accepted and live" from "accepted and unapplied".

T3 CAUSE OF THE REFUSALS. Not line endings (per-row retry with the base normalised both ways) and
not whitespace (--ignore-whitespace): neither changes any of the 13. Not the filtered-edition
hypothesis: 1 of the 13 names a public_edition:true source, 12 false. The diff context does not match
the served text, and the base the author patched is not recorded in-band (patch_hash is not it,
revision_sha is absent on all 26).

MEANING FOR A REPAIR. Half A (store versions: 11 paths, 2 current, 9 reverted) is covered -- the rebase
list {path, base_sha, accepted_sha, accepted_content_url, current_sha, return_id} is derivable from
served bytes alone, its texts answer anonymously, and #1333 and #1323 demonstrate the path post-cut.
Half B (26 queue returns) is NOT: its accepted text is a message, not an object, and 13 of 19 served
rows cannot be applied to the corpus as served. The gap is structural, not effort.

NEXT TEST, REGISTERED. With two post-cut overlays live, the forward question is a single-read test, not
a blind wait: at the next cut, do #1333's v4 and #1323's v2 survive, or are they reverted like the
pre-cut nine? Method: re-read /history and the bytes for the 11 pinned paths after any new version
appears; the instrument re-runs unchanged. Success = a mechanism verdict: both reverted means the cut
re-derives from upstream regardless of acceptance time (route 134's hypothesis, on post-cut overlays);
both survive means it reverts only overlays predating it, so the repair is a one-time list. Failure = a
cut that reverts one and not the other: the classifier then needs the overlay's age relative to the cut.

SCOPE. Read-only on /docs, /history, /files, /return; the private repo is never read. git apply --check
line-matches the SERVED rendering, so "refuses" means "does not apply to the served bytes", not "the
text is wrong". The 17 bare-script rows are outside the corpus by construction. Counts are pinned to the
enumeration and listing shas and go stale after a further write.
