clay-borg/HANDOFF.md
tegwick 18c57f2e9d
Some checks failed
ci / check (push) Failing after 4s
HANDOFF.md: what a generated brief cannot say
Every workplan is done and nothing is in flight -- the session stopped at
a boundary, not mid-change -- so the risk on pick-up is not lost context
but MISREAD context.

Records the three findings most likely to be misread (attack_relief is
unreachable-then-real, not null; H1's rejection covers half of H1; the
scope module is inert in round one), what is waiting on ground-game
versus what is ours, the conventions a new session trips over (hub is a
read model; workplan status is active not in_progress; make vendor;
replays/ is gitignored), and the two habits that paid for themselves
repeatedly -- mutate every control, and test the path a player takes.

Linked from the README above the gates, since it should be read before
design — the finding register

  QUEUE (open findings)
    repro  F17  degenerate       raised       6d  ground-game
    repro  F18  inert            raised       6d  clay-borg
    repro  F24  inert            raised       5d  clay-borg
    repro  F25  inert            raised       4d  clay-borg
    repro  F26  inert            ruled        4d  ground-game
    repro  F27  unplayed         reported     4d  clay-borg
    repro  F31  unplayed         reported     4d  clay-borg
    repro  F30  degenerate       ruled        4d  ground-game

  NOTES (not reportable — GameDesign §3.1)
           F12  degenerate         11d
           F15  underdetermined     7d
           F21  degenerate          6d

  findings                       28   (+3 note(s))
  with a resolving reproduction  19/28 = 67%   target 100%
  open, lacking a reproduction   0   target 0
  reproductions green while open 0   target 0
  notes past 30 days             0   target 0
  closed (log)                   20   [U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, F11, F13, F14, F16, F19, F20, F23, F22, F29, F28].

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 00:00:50 +02:00

5.3 KiB
Raw Permalink Blame History

Handoff — 2026-08-09

Written at the end of the session that landed CB-WP-0043 through CB-WP-0050. .custodian-brief.md is generated; this is not. It says what a generated index cannot: what is true, what is merely reported, and what would be a mistake to assume.

Start with make all (expect green), then make design for the finding queue and make panels for the current measurements.


1. Where the work stands

Nothing is in flight. Every workplan is done; no task is todo. That is deliberate — the session was stopped at a boundary, not mid-change.

The last four passes built one capability, in this order, and each depends on the one before it:

pass what it made possible
CB-WP-0047 all four Scenarios and all three Modes are selectable
CB-WP-0048 a configuration is a point in aspect space, not a package name
CB-WP-0049 policies that can see an objective and a module
CB-WP-0050 a panel that sweeps configurations and says what it could not measure

Before this, the engine dealt SCN_01 and only SCN_01, and Variant was a three-armed enum that could not name a two-module configuration.


2. The three things most likely to be misread

(a) attack_relief.self_soothe_ge4 is not "measured, no effect". It is unreachable in the printed game — peak Stress never exceeds 2 and the gate is at 4 — and real once a problem_stress module supplies pressure (F31). Its panel row carries ← never fired: UNMEASURED for exactly this reason. Do not read that row's numbers as a verdict on it.

(b) H1's rejection covers half of H1. CB-EV-0030 measured H1 with bots that never attacked, so H1-B had no opportunity in any of those games. The rejection stands on flat pressure alone. Corrected to ground-game as GROUND-RPT-0007.

(c) problem_stress.scoped is inert in round one. Only the Surface Problem is face up, so there is never a choice between two Problems for scope to decide. Any read of that module weighted toward early rounds is measuring a mechanism that has not started.


3. What is waiting on ground-game

Not ours to move, and worth not pre-empting:

  • F17 — ATTACK's degeneracy; a design judgement, open longest.
  • F26, F30ruled, tracked on their side (GROUND-WP-0008).
  • Unanswered asks: the two in GROUND-RPT-0006 §5 and the reachability question in GROUND-RPT-0007 §4.

Reports are written into ../ground-game/reports/ and left uncommitted — their maintainer commits them. That is the established pattern, not an oversight.


4. What is ours

Blocked on capability, not effort

F27 — no policy models a rival playing their objective. This is the whole of what keeps F27 open. The competitive modes are measured by seats that never anticipate an opponent, and no amount of additional measurement fixes that. Opponent modelling is the largest single item on the board.

Debt, small and dull

  • F18 / F24 / F25 — the "engine hardcodes what the edition states" family. F25 shrank when the threshold moved to the Scenario card (CB-WP-0047); F24 is the Solution deck as a Rust literal.
  • 62 untagged literals in make facts-check — reported, not failing.
  • 11 trial notes read unrecorded. Permanent by choice: they predate CB-WP-0046's marker stamp, and inventing provenance is the defect that pass existed to avoid.

Named in workplans, never started

  • A second game. clay-borg claims to be a general engine and has exercised exactly one. Everything built this week assumed that claim without testing it. My recommendation for what to do first.
  • Mode × module is unswept. module-panel runs SHARED GROUND only, and CB-EV-0033 showed the modes move who wins.
  • Per-round effect is unreported, which is where scoped lives.

5. Conventions a new session will trip over

  • The State Hub is a read model. Never create_workplan or create_task by hand: write the file, commit, run fix-consistency (its C-06 check registers it and writes the ids back).
  • Workplan status is active | done | paused. in_progress is a task status; using it on a workplan 422s on every sync.
  • make vendor re-syncs the edition mirror from ../ground-game and regenerates the digest block by walking editions/. Upstream changes several times a day; a red edition-check usually means run this.
  • replays/ is gitignored — a build artifact, not a fixture.
  • Reports to ground-game are GROUND-RPT-####, written into their reports/, with a clay-borg evidence/CB-EV-#### as the upstream.

6. Two habits this session paid for repeatedly

Mutate every control before trusting it. Three separate controls in this session were vacuous and said so only under mutation: a peek detector whose variation was invariant under what a violator reads; a "module-aware seat is ordinary under the baseline" check that swept positions where no ranking term could change the answer; and a panel that printed real-looking numbers for a module that had never fired. Each looked correct and proved nothing.

Test the path a player takes, not the helper. --module problem_deal.pressure_deck played a full baseline game and reported success while every unit test of resolve() passed. CB-WP-0033 found the same shape and said it plainly: only the integration test proves the driver.