|
Some checks failed
ci / check (push) Has been cancelled
The three-armed enum could not express a configuration carrying two
modules. It does now: --variant h1 expands to problem_stress.flat_any_open
AND attack_relief.self_soothe_ge4, and scoped_plus_attack_soothe plays.
Legacy names alias forever via serde(alias="variant") plus a
scalar-or-map deserialiser. serde(default) alone would have been a silent
migration bug -- every H1/H2 recording would have come back as baseline.
All 26 scenarios pass unchanged; none pins a state hash.
Three things shipped broken first, all caught by gates rather than by
reading:
1. `profile` was in the state hash. with_config(select("ground-darvo-r0"))
sets profile=Some("baseline") where setup alone leaves None, so two
states at THE SAME POINT IN ASPECT SPACE hashed differently and a
replay bundle stopped reproducing its own initial state. Now
serde(skip): a hash covers what determines play. This was the open
judgement from T01 and it did not survive contact with the replay path.
2. A YAML parse inside the event loop. rules() -> resolve() -> catalog()
re-parsed catalog.yaml per rule check; AM-6 fell to 9,345 events/s
against a 100,000 target. OnceLock, and aspect validation moved to
where a configuration is BUILT.
Then I nearly optimised a phantom: 470k still looked like a 3x
regression against the "~1.7M on bnt-lap001" reference in the gate's
own message. Making rules() free measured 491k -- this machine's
ceiling. Before optimising against a reference, measure the ceiling
with the suspect code removed.
3. The refusal did not fire on the path a player takes.
`--module problem_deal.pressure_deck` played a full baseline game and
reported success, because with_config is a builder and fell back to
the printed rules -- the silent no-op ADR-0022 exists to refuse. Every
unit test of resolve() passed. The helper was tested and the driver
was not, which is CB-WP-0033's finding verbatim. The new test asserts
refusal BY NAME and that no game was played.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| CB-WP-0001-inner-loop.md | ||
| CB-WP-0002-cost-accounting.md | ||
| CB-WP-0003-loop-hardening.md | ||
| CB-WP-0004-mechanical-work.md | ||
| CB-WP-0005-assertion-coverage.md | ||
| CB-WP-0006-instrument-the-table.md | ||
| CB-WP-0007-session-shape.md | ||
| CB-WP-0008-ship-stage-0.md | ||
| CB-WP-0009-adaptive-gates.md | ||
| CB-WP-0010-consolidation.md | ||
| CB-WP-0011-inspectable-table.md | ||
| CB-WP-0012-render-port.md | ||
| CB-WP-0013-instrument-corrections.md | ||
| CB-WP-0014-execute-the-javascript.md | ||
| CB-WP-0015-the-inert-clauses.md | ||
| CB-WP-0016-the-drop-target.md | ||
| CB-WP-0017-legible-interaction.md | ||
| CB-WP-0018-the-browser-is-a-client.md | ||
| CB-WP-0019-the-am4-family.md | ||
| CB-WP-0020-the-table-you-can-read.md | ||
| CB-WP-0021-import-the-edition.md | ||
| CB-WP-0022-the-design-instrument.md | ||
| CB-WP-0023-solve-legality.md | ||
| CB-WP-0024-the-table-you-can-watch.md | ||
| CB-WP-0025-could-we-have-won.md | ||
| CB-WP-0026-collect-the-rulings.md | ||
| CB-WP-0027-the-commentary-track.md | ||
| CB-WP-0028-the-table-you-sit-at.md | ||
| CB-WP-0029-the-tokens-on-the-table.md | ||
| CB-WP-0030-a-number-that-does-not-move.md | ||
| CB-WP-0031-the-comment-box-outlives-the-game.md | ||
| CB-WP-0032-the-comments-in-the-account.md | ||
| CB-WP-0033-a-game-is-the-unit.md | ||
| CB-WP-0034-who-you-are-bonding-with.md | ||
| CB-WP-0035-a-session-that-answers-nothing.md | ||
| CB-WP-0036-interactive-mode.md | ||
| CB-WP-0037-the-fourteen-unread-files.md | ||
| CB-WP-0038-h1-variant.md | ||
| CB-WP-0039-a-seat-that-does-not-regulate.md | ||
| CB-WP-0040-what-a-statement-is-about.md | ||
| CB-WP-0041-the-extensive-form-foundation.md | ||
| CB-WP-0042-h2-scoped-problem-stress.md | ||
| CB-WP-0043-a-problem-sits-where-its-stress-lands.md | ||
| CB-WP-0044-the-page-says-which-rules-it-plays.md | ||
| CB-WP-0045-the-table-names-what-it-shows.md | ||
| CB-WP-0046-the-rule-the-placement-encodes.md | ||
| CB-WP-0047-all-four-boards-and-all-three-modes.md | ||
| CB-WP-0048-a-configuration-not-a-variant.md | ||
| CB-WP-0049-a-seat-that-plays-its-own-objective.md | ||