Rung C sharpened to the tie-set claim; re-resolver agent added to the crew
This commit is contained in:
parent
1824dae2f5
commit
62b738d27a
2 changed files with 9 additions and 4 deletions
|
|
@ -52,10 +52,13 @@ So the rungs are:
|
|||
replays the AI's (and human's) orders captured from a real turn, and the output must match that
|
||||
turn's autosave byte-for-byte. This is what "the engine is the game" means when the game's own
|
||||
decision layer is not reproducible from a save. Lane AI1's fallback becomes the primary path.
|
||||
- **Rung C — a `game/ai` that is behaviourally equivalent.** Reproduces the AI's *choice class*
|
||||
(same task list, same priorities, same candidates), verified against the distribution of the
|
||||
original's choices across runs rather than one run's bytes. Ties may resolve differently; that is
|
||||
the original's own behaviour.
|
||||
- **Rung C — a deterministic `game/ai` whose choice is provably inside the original's tie set.**
|
||||
Our engine need not inherit the original's tiebreak. If the variation is a tie broken per-process
|
||||
(the leading hypothesis), the original's possible outcomes are a small enumerable set; we pick
|
||||
canonically and verify that **our choice is one of exactly k outcomes the original can produce,
|
||||
we can name all k, and every observed original run lands inside that set.** That is stronger
|
||||
than behavioural equivalence and keeps the byte-match live on every run where the tiebreaks
|
||||
agree. (User's framing, 2026-09-08: make the AI deterministic and the old approach still pays.)
|
||||
|
||||
Mechanism, stated as inference: only **one** of three AI players varies, which looks like a tie
|
||||
broken by something per-process — most likely iteration order over a pointer-keyed container under
|
||||
|
|
|
|||
|
|
@ -329,3 +329,5 @@ Status flow: `backlog → in-progress → mapped → verified` (or `blocked`).
|
|||
| BANKRUPTCY factor measured, not assumed | objects | verified | high | 100% | 2026-09-08 | = 3.29999995 = (float)3.3. **Its file image is ZERO - the loader fills it at run time** - so lane PL had read the operand width and been forced to ASSUME the value. Now measured on the running game: the assumption was right and the narrowing is real. **No static reading could have produced this** |
|
||||
| L5 kept `verified` at 0, and defended it | meta | verified | high | 100% | 2026-09-08 | The column has read 0 all campaign and L5 held it there ON PURPOSE. Every phase its compare touches is `Partial` for reasons UPSTREAM of the compare: P01's repair demand is taken as 0, P02 needs the AI's research orders, T31's BnkPr needs an unwired tuning constant. **None is fixable by a VM.** Promoting one because part of it was checked is exactly the drift app_test_catalog asserts against - the ladder's two conditions, COMPLETE and COMPARED, are blocked by different things and the column measures the conjunction. Catalog notes now carry the live evidence and its coverage instead of the older call counts. Also two predictions of its own falsified and recorded: the difficulty record is a HEAP POINTER at ServerPlayer+0x36c not an inline record (correcting the hook's standing "not reachable" note; the fitted pair stays a hypothesis, deliberately not dereferenced), and it predicted 2 divergences and got 1,359 because it counted players where the harness counts calls |
|
||||
| DECISION: determinism qualified, Rung B restated, reference pair swapped | meta | verified | high | 100% | 2026-09-08 | Adopted after lane L5's finding. (1) The oracle HOLDS where no AI must choose a target and FAILS where one must - never wrong, measured on the idle turn. (2) This is NOT a contradiction of lockstep MP but the reason for its shape: the AI is a StrategyClient deciding ONCE and relaying commands; the sim is deterministic given the stream. (3) **Canonical reference pair is now turn2-state -> turn3-state** (deterministic, oracle-hashed); turn1 -> turn2 is secondary with its four non-deterministic leaves masked. (4) **Rung B = byte-match given a recorded command stream (--turn-commands)**; a behaviourally-equivalent game/ai is **Rung C**, verified against the distribution of the original's choices. (5) Mechanism inferred, not proved: one-of-three varying suggests a pointer-ordered tie under ASLR rather than a time seed (which would move all three); probe routed to L1. Documented in backlog.md 2 and determinism-oracle.md |
|
||||
| new crew member: re-resolver (Fable) | meta | verified | high | 100% | 2026-09-08 | `~/.claude/agents/re-resolver.md`. Invoked when a lane reports a SURPRISE - a falsified prediction, two lanes contradicting, a closed finding a new measurement qualifies, a number that does not add up, a possibly-perturbing instrument. It does NOT measure: it exonerates-or-indicts the instrument first, lists every standing claim touched (survives / qualified-with-scope / overturned), names the ONE probe that separates the live hypotheses, and sets the course - lane redirects, milestone restatement, a draft rule. Writes findings/resolutions/<date>-<slug>.md and PROPOSES board/backlog text rather than editing them. Runs on the planning model. Calibrated on today's five resolutions (ModCount, non-deterministic reference pair, hook perturbation, widened literals, stale build) |
|
||||
| Rung C sharpened: the TIE-SET claim | meta | verified | high | 100% | 2026-09-08 | User's framing adopted: if the AI's variation is a per-process TIE, our engine picks canonically and the verification is "our choice is one of exactly k outcomes the original can produce, we can name all k, and every observed run lands in the set" - stronger than behavioural equivalence, and it keeps the byte-match alive wherever the tiebreaks agree. Lane L4 briefed to capture the varying empire's CANDIDATE SET and arrival order; lane L1 to read the AI client's generator seed across two processes. Between them the mechanism gets named |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue