phase12: credit-outage recovery (10 bodies recovered, 635/644) and the negatives re-dispatch

This commit is contained in:
Christopher Williams
2026-09-24 18:16:47 -04:00
parent 6da840f3ab
commit e074d947fb
+73
View File
@@ -551,3 +551,76 @@ invariant is a *diagnostic*, not a gate. **To be reconciled at the phase close**
census is available and the negatives-index reconciliation is done anyway — the two are probably the
same question, since the divergence appeared on the first merge whose additions were all
negatives-index rows that no earlier merge had registered.
---
## THE CREDIT OUTAGE AND THE RECOVERY (2026-09-24 ~21:45)
**All four workers stopped mid-flight when the account ran out of credit.** The developer re-upped
and instructed me to continue. The workers did **not** die — all four came back **idle** — so this
was a resumption, not a roster rebuild, and §4.0's "spawn fresh" rule did not apply.
### The recovery: 10 verified bodies out of staging that no report had yet announced
| | count |
|---|---|
| `src/` files produced this phase and still untracked | 11 |
| distinct addresses claimed in ANY staging file | **29** |
| `src/` files claimed by **nothing** (true orphans) | **0** |
| claims whose source file is missing | **0** |
**All 29 claimed rows were re-verified by me from fresh `--work` directories with `--symbols` (and
`--cc1 gcc-2.8.1-psx/cc1` for the four `cc1bin` rows) BEFORE merging: 29 of 29
`differing_bytes=0 result=MATCH`, exit 0.** One combined `apply --skip-registered`: 19 skipped as
already merged, **10 added**, 0 rejected.
```
sf3_match gate c_regions=644 differing_bytes=0 result=MATCH
sha1 e173426c157384ebf1b6caf8c6fea18a85a14af9 (unchanged)
make check exit 0 extents-verify regions=644 disagreements=0 AGREE
registry audit 644 rows, 635 distinct bodies, 0 missing, 4 carry cc1bin
```
**A defect in my own audit, recorded because it manufactured a false alarm.** My first orphan check
globbed `.run/p12/w-*/claims.tsv` and reported `src/func_801008DC.c` as unclaimed. It is claimed —
in `claims-altcc1.tsv`, a **deliberately separate pool** because those rows need the `cc1bin`
override. **The audit was wrong, not the worker.** A `src/`-against-claims audit must glob *every*
claims file the charter defines, not the default one, or it invents orphans and the next worker
investigates a phantom.
### Position: **602 → 635 bodies = +33, past the cycle-1 checkpoint (+30)**
| worker | bodies | the signal |
|---|---|---|
| D | **13** | 5 fresh-band + 4 Goal-B + 2 twins + 2 GTE |
| C | **9** | 4 default + 3 `cc1bin` + 2 GTE |
| B | **6** | 5 in ONE translation unit + 1 adjacency |
| A | **5** | **adjacency, 3-for-3 across three bands** + 2 |
### The re-dispatch: all four workers onto the negatives (developer's decision)
The developer chose **"keep 750, re-dispatch to the negatives"**. The rationale is entirely measured:
| source | cost per body |
|---|---|
| worker B's fresh band | **4.2 attempts per match** (and it hit the leading indicator twice) |
| worker A's fresh band | 4-13 spellings, bimodal; **all three failures were allocation/block-order** |
| worker D's **classified negatives** | **4 bodies from 4 attempts at ONE SPELLING each** |
| worker C's negatives | **15 rows → 9 matched, 0 abandoned without a mechanism** |
**The mechanism is already named in those rows, so the per-row reading cost is pre-paid** — which is
exactly what worker A asked for when it requested a cheap key away from the allocation/block-order
class and noted that finding 116 records the naive proxy failing. The negatives index *is* that key.
New pools, split by `crc32(address) % 4` so membership cannot move:
| worker | pool | rows | prio 1 (named mechanism) | prio 2 (`cc1bin`) | prio 3 (no mechanism) |
|---|---|---|---|---|---|
| A | `negatives-a-pool.tsv` | 47 | 19 | 0 | 28 |
| B | `negatives-b-pool.tsv` | 45 | 23 | 2 | 20 |
| C | `negatives-c-pool.tsv` | 43 | 31 | 1 | 11 |
| D | `negatives-d-pool.tsv` | 41 | 19 | 1 | 21 |
**176 unregistered negatives rows; 92 carry a named mechanism; 8 are in the multi-exit `cc1bin`
class.** D was told to take its **three in-flight `wip` twins first** (`0x800161E0`, `0x80016224`,
`0x8008F478`) before the pool, because twins have closed at one spelling all phase.