phase10: P10-T1 — control records, baseline revalidation, negatives reconciliation, partitions
- Phase10_PLAN.md status DRAFT -> APPROVED (Goal A, 475 bodies, 70-80% ctx cap)
- phase-ends/CURRENT_PHASE.md: Phase 10 control record
- config/near_match_negatives.tsv: drop 6 rows that were already registered
(index header says every row is UNREGISTERED); index 145 -> 139 rows, 0 registered.
Worklist regenerates byte-identically after the fix.
- Baseline revalidated at 25bf4a3: make check exit 0, regions=409 disagreements=0
AGREE, c_regions=409 differing_bytes=0 MATCH, 229 tests OK, SHA-1 stable.
- Worklist regen: listed=1343, excluded_already_registered=409 (= registry size).
- 3-way partitions in .run/p10 (448/448/447, pairwise intersection 0, union == worklist).
- Roster deviation recorded and developer-approved: 3 workers, not the plan's 2.
This commit is contained in:
@@ -24,7 +24,6 @@
|
||||
0x8002515C - near-match -
|
||||
0x80025C08 - near-match -
|
||||
0x8002622C - near-match -
|
||||
0x800263A8 - near-match -
|
||||
0x800266A8 68 near-match byte-replication alloc (first sll register; fresh-context re-spelling 3B; named-locals regresses)
|
||||
0x8002D014 - near-match -
|
||||
0x8002D060 72 near-match -
|
||||
@@ -137,15 +136,10 @@
|
||||
0x8006F95C - near-match -
|
||||
0x800FC280 - near-match -
|
||||
0x800259DC - near-match -
|
||||
0x8005789C - near-match -
|
||||
0x800179E0 - near-match -
|
||||
0x800C1E54 - near-match -
|
||||
0x800AA01C - near-match -
|
||||
0x800AAC44 - near-match -
|
||||
0x8003EB18 - near-match -
|
||||
0x80012834 - near-match -
|
||||
0x8007A114 - near-match -
|
||||
0x800A8AEC - near-match -
|
||||
0x80057950 - near-match -
|
||||
0x80057A40 - near-match -
|
||||
0x80057B30 - near-match -
|
||||
|
||||
|
@@ -0,0 +1,107 @@
|
||||
# CURRENT_PHASE — Phase 10: Matching the Remaining Pool (Goal A — tail squeeze)
|
||||
|
||||
**Status:** ACTIVE (P10-T1 complete; P10-T2 ready to dispatch)
|
||||
**Created:** 2026-09-24 (coordinating session `01a0d302-0201`, after developer approval)
|
||||
**Plan:** `phase-ends/Phase10_PLAN.md` — approved 2026-09-24, **Goal A: 475 distinct
|
||||
matched bodies** from the Phase 9 close state of **400** (i.e. **+75 new bodies**),
|
||||
measured as bodies on the coordinator's clean whole-binary gate.
|
||||
|
||||
## Sessions
|
||||
|
||||
| Role | Short id | Alias | State |
|
||||
|---|---|---|---|
|
||||
| **Coordinator** | `01a0d302-0201` | subagent-chat-01a0d302-0201-72d6 | this session |
|
||||
| Worker A | `01a0d302-18e3` | subagent-chat-01a0d302-18e3-76ec | probed, recruited |
|
||||
| Worker B | `01a0d302-8a6f` | subagent-chat-01a0d302-8a6f-747c | probed, recruited |
|
||||
| Worker C | `01a0d302-fad3` | subagent-chat-01a0d302-fad3-758e | probed, recruited |
|
||||
|
||||
All three answered the capability probe (cwd `/media/christopherwilliams/Data/Projects/decomp/Syphon_Filter_3`,
|
||||
git head `25bf4a3`, worklist 1343 rows, shell yes, `sf3_match`/`sf3_diff`/`sf3_triage`/`sf3_merge`
|
||||
all executable, ghidra MCP available). None had read `PROJECT_CONTEXT.md`, the digest, the Phase 10
|
||||
plan, `PHASE9_PROTOCOL.md` or `MATCHING_COOKBOOK.md` at probe time; `AGENTS.md` was present in each
|
||||
session only via harness project-instruction injection. Charters are therefore self-contained, per
|
||||
the Phase 8 protocol.
|
||||
|
||||
## Rulings made this phase (coordinator decisions)
|
||||
|
||||
1. **Roster deviation from the approved plan — developer-approved.** The plan's section 5 specifies
|
||||
"one coordinator + two workers", but the developer started **three** fresh sessions in this
|
||||
repository. Asked and answered at P10-T1: **use all three as workers** (Phase 9's proven
|
||||
three-worker configuration). The deviation and its approval are recorded here and in the ledger.
|
||||
|
||||
## Baseline revalidation (P10-T1)
|
||||
|
||||
Revalidated at head `25bf4a3` (the Phase 9 closure commit), before any Phase 10 change:
|
||||
|
||||
| Check | Result |
|
||||
|---|---|
|
||||
| `make check` (test + extents-verify + gate) | exit 0; `regions=409 disagreements=0 result=AGREE`; `c_regions=409 differing_bytes=0 result=MATCH` |
|
||||
| Rebuilt/original SHA-1 | `e173426c157384ebf1b6caf8c6fea18a85a14af9` (both) |
|
||||
| Synthetic suite | 229 tests, `OK` |
|
||||
| Registry | **409 regions / 400 distinct bodies** / 392 symbols |
|
||||
| Firewall | 0 tracked paths under any prohibited root (506 tracked files) |
|
||||
|
||||
## Worklist state (regenerated at P10-T1)
|
||||
|
||||
```
|
||||
listed=1343
|
||||
tier_0=0 tier_1=190 tier_2=1151 tier_3=2
|
||||
shape: frame=1152 leaf=191 duplicate rows in worklist=0
|
||||
excluded_already_registered=409 excluded_bad_extent_start=8
|
||||
excluded_degenerate_body=252 excluded_delay_slot_start=5
|
||||
excluded_header_entry=0 excluded_low_confidence_grade=90
|
||||
excluded_named_exclusion=8 excluded_no_extent=0
|
||||
excluded_recorded_negative=115 excluded_trapping_arith=54
|
||||
```
|
||||
|
||||
`excluded_already_registered` equals the registry size (409) — closing-checklist item 5 holds.
|
||||
The regenerated `config/match_worklist.tsv` is **byte-identical** to the tracked file (no drift).
|
||||
The named-exclusion count moved 3 → 8 during the Phase 9 close (the primitive-init family
|
||||
`0x80012A10`/`0x80012AE0`/`0x80012CFC`/`0x80012B20` and the maspsx-blocker row `0x8008A198`),
|
||||
which explains `listed=1343` against Phase 9's recorded 1342.
|
||||
|
||||
## Negatives index reconciliation (P10-T1)
|
||||
|
||||
Found and fixed one hygiene defect: **6 rows in `config/near_match_negatives.tsv` were already
|
||||
registered** (`0x800263A8`, `0x8005789C`, `0x800AA01C`, `0x80057950`, `0x80057A40`, `0x80057B30`),
|
||||
contradicting the index's own header ("Every row is an UNREGISTERED candidate"). Dropped them;
|
||||
the index now holds **139 rows, 0 registered**. The worklist regenerates byte-identically after
|
||||
the fix (the `already_registered` exclusion took precedence either way, so this is record hygiene,
|
||||
not a behaviour change).
|
||||
|
||||
The exclusion arithmetic now reconciles exactly. Of the 139 unregistered negatives:
|
||||
`recorded_negative=115` + `named_exclusion=7` + `trapping_arith=8` + `bad_extent_start=2` +
|
||||
`delay_slot_start=1` + 6 with no derived extent (never candidates) = 139, and **0 survive into
|
||||
the worklist**.
|
||||
|
||||
## Partitions (P10-T1)
|
||||
|
||||
3-way, generated by interleaving worklist ranks (tier mix preserved by construction). Files under
|
||||
`.run/p10/` (ignored).
|
||||
|
||||
| Partition | Rows | Disjointness |
|
||||
|---|---|---|
|
||||
| `.run/p10/worklist-a.tsv` | 448 | pairwise ∩ = 0, 0, 0 |
|
||||
| `.run/p10/worklist-b.tsv` | 448 | union == the 1343-row worklist |
|
||||
| `.run/p10/worklist-c.tsv` | 447 | (proved at generation) |
|
||||
|
||||
## Cumulative progress ledger
|
||||
|
||||
| Cycle | New bodies | Total bodies | New regions | Total regions | Result |
|
||||
|---|---|---|---|---|---|
|
||||
| (baseline) | — | 400 | — | 409 | green, head `25bf4a3` |
|
||||
|
||||
## Open protocol notes
|
||||
|
||||
- Every negative in the tracked index is absent from the worklist, so the per-partition
|
||||
"known negatives" list is **empty by construction** this phase — the queue fix is doing its job.
|
||||
Charters instead carry the *class* exclusions and the named-exclusion addresses.
|
||||
- Carried rules in force for every charter: `git ls-files --error-unmatch` before any `rm` under
|
||||
`src/`; the dependent-claim rule; exact symbol-name spelling (the gp marker is name-keyed);
|
||||
compute-don't-eyeball (lui high halves, gp offsets, two-piece constants); the leading-indicator
|
||||
rule (a per-batch cluster of sub-8-byte residuals with no new mechanism = band exhaustion);
|
||||
the three-encoding-trap habit (count right + 1–8 byte residual → diff the ENCODING, not the
|
||||
mnemonic).
|
||||
- Budget discipline is measured, not felt: a worker re-flags budget only on two consecutive
|
||||
zero-match cycles with attempts-per-match quoted, or by quoting its context figure from
|
||||
`intercom list`. The coordinator holds below the 70–80% cap to protect the gate/merge role.
|
||||
+52
-25
@@ -1,8 +1,24 @@
|
||||
# Phase 10 Plan — Matching the Remaining Pool and Closing the Library Boundary
|
||||
|
||||
**Status:** DRAFT — requires explicit developer approval before activation. Do not
|
||||
begin any task until the developer approves this plan.
|
||||
**Status:** **APPROVED** (2026-09-24) — Goal A with a 475-body milestone and a
|
||||
70–80% context budget cap. The developer will start fresh sessions for Phase 10;
|
||||
do not begin Phase 10 execution in the Phase 9 session.
|
||||
**Prepared:** 2026-09-24, immediately after Phase 9 closure (400/500 bodies).
|
||||
**Approved decisions (developer, 2026-09-24):**
|
||||
|
||||
1. **Goal:** A — tail squeeze. Milestone: **475 distinct bodies** (from 400).
|
||||
2. **Budget cap:** sessions run to **70–80% context**, then stop matching and
|
||||
hand off cleanly (measured, quoted from `intercom list`). The coordinator
|
||||
stays within the same cap for its gate/merge/ledger role.
|
||||
3. **Sessions:** the developer starts new sessions for Phase 10; the protocol's
|
||||
capability probe is run before any charter, and recruited ids are recorded
|
||||
in the Phase 10 ledger.
|
||||
4. **Structural work:** deferred (Goal B is not active); the blocked classes
|
||||
remain excluded. Harness-limitation decisions stay developer-owned if a
|
||||
worker hits them.
|
||||
|
||||
The milestone is stated precisely and measured: **475 bodies on the clean
|
||||
whole-binary gate**, never "keep matching".
|
||||
**Carried forward from Phase 9:** the tier-2 pivot, the family-set lever, the
|
||||
class exclusions, the hardened merge flow, the three-encoding-trap habit, and
|
||||
the honest pool analysis below.
|
||||
@@ -34,21 +50,19 @@ out of scope and recording why.
|
||||
|
||||
## 1. Goal
|
||||
|
||||
Either (developer chooses):
|
||||
**Goal A — tail squeeze, approved.** Reach **475 distinct matched bodies** from
|
||||
the Phase 9 close state of 400 (i.e. **+75 new bodies**) by matching the
|
||||
remaining non-blocked pool, concentrating on the tier-2 frame band, the
|
||||
family-set lever against registered callee targets, and the fresh low-size
|
||||
tier-1 leaves that carry named levers. The milestone is measured as bodies on
|
||||
the coordinator's clean whole-binary gate, never as "keep matching".
|
||||
|
||||
- **Goal A (tail squeeze):** reach **450–475 distinct bodies** by matching the
|
||||
non-blocked remainder at the measured tier-2/leaf boundary, concentrating on
|
||||
the family-set lever and the fresh-band volume; or
|
||||
- **Goal B (library boundary):** close the **trapping-arithmetic class** and the
|
||||
**rare-epilogue class** by identifying the actual compiler/source story for
|
||||
them (the plausible candidates are Sony/SN toolchain or a different PsyQ
|
||||
build), which — if confirmed — re-opens hundreds of rows at once; or
|
||||
- **Goal C (hybrid):** A as the primary throughput, B as the bounded
|
||||
investigation (Phase 9's P9-T5 style), with the explicit understanding that
|
||||
B's success is the only route past ~475 under the current toolchain.
|
||||
|
||||
The milestone is stated precisely and measured (bodies on the clean whole-
|
||||
binary gate), never as "keep matching".
|
||||
Goals B (the library-boundary investigation) and C (hybrid) are **deferred, not
|
||||
cancelled**: the blocked classes (trapping arithmetic, rare-epilogue,
|
||||
primitive-init) stay excluded under the current toolchain, and the harness
|
||||
limitations (`0x8008A198` maspsx load-delay, the maspsx/`move` mutual exclusion)
|
||||
stay developer-owned. A future phase may pick up Goal B; Phase 10 is the tail
|
||||
squeeze only.
|
||||
|
||||
## 2. The carried machinery (do not re-derive; verify before relying)
|
||||
|
||||
@@ -98,11 +112,16 @@ binary gate), never as "keep matching".
|
||||
| `0x8008A198` maspsx load-delay | blocked, excluded | newer pinned maspsx or a tracked post-pass — developer-owned |
|
||||
| GTE loader allocation (`0x80102FE4` family) | load-use-nop, allocation-pinning untried | register-binding lever named but failed on the counter case; pointer-live-range variant untried |
|
||||
|
||||
## 5. Structure — coordinator + workers, scaled down or up
|
||||
## 5. Structure — coordinator + workers, fresh sessions
|
||||
|
||||
- **Session count:** depends on Goal. A/C hybrid wants one coordinator + two
|
||||
workers (fresh context beats exhausted context — Phase 9's strongest lesson);
|
||||
a pure B investigation needs only the coordinator + one investigator.
|
||||
- **Session count (approved Goal A):** one coordinator + **two workers**, all
|
||||
fresh sessions started by the developer. Fresh context beats exhausted
|
||||
context — Phase 9's strongest lesson.
|
||||
- **Budget cap (approved):** every session — workers AND the coordinator —
|
||||
stops matching at **70–80% context** and hands off cleanly, measured and
|
||||
quoted from `intercom list`, never felt. The coordinator's gate/merge/ledger
|
||||
role is the one that cannot be delegated, so the coordinator holds below the
|
||||
cap and absorbs only until its own budget is at risk.
|
||||
- The Phase 8/9 protocol applies verbatim (roles, hard rules, staging formats,
|
||||
merge workflow, per-cycle verification). Phase 9's additions — 3-way
|
||||
partition regeneration per merge, the negatives import, the request-file
|
||||
@@ -121,12 +140,20 @@ binary gate), never as "keep matching".
|
||||
| Every 3rd merge | `make clean && make all`, cmp, SHA-1, registry audit, `git status --short src/`, firewall count |
|
||||
| Phase close | full clean gates, worklist regen with `excluded_already_registered` = registry size, negatives metadata extracted, milestone confirmation requested |
|
||||
|
||||
## 7. Explicit decisions needed from the developer before activation
|
||||
## 7. Decisions — RESOLVED by the developer (2026-09-24)
|
||||
|
||||
1. **Goal choice (A / B / C)** and the milestone number (450 / 475 / class-closed
|
||||
definitions).
|
||||
2. **The harness-limitation questions** if Goal B is chosen: whether a per-region
|
||||
transform (post-pass emitting the trapping encodings, or suppressing
|
||||
1. **Goal: A (tail squeeze). Milestone: 475 distinct bodies** (from 400).
|
||||
2. **Harness-limitation questions: not active.** Goal B is deferred; the
|
||||
trapping/rare-epilogue/primitive-init classes stay excluded under the
|
||||
current toolchain, and a worker that independently hits a harness
|
||||
limitation reports it rather than working around it — any per-region
|
||||
transform remains a developer decision.
|
||||
3. **Session budget: fresh sessions, 70–80% context cap** for workers and the
|
||||
coordinator alike; the protocol's capability probe runs before any charter
|
||||
and recruited ids go in the Phase 10 ledger.
|
||||
4. **Scoring honesty: confirmed.** The milestone is bodies on the clean
|
||||
whole-binary gate; a classified-but-not-matched residual counts as a
|
||||
recorded negative, not progress.
|
||||
maspsx's jump-slot nop) is acceptable as a documented convention, or whether
|
||||
the classes stay excluded as "different-compiler evidence" — this is the
|
||||
Phase 8-era inline-asm-style decision, and it is the developer's call, not
|
||||
|
||||
Reference in New Issue
Block a user