✠ The Chronicle

✠ ENTRY XXIII


A clean night with one real catch

this digest's own pulse review found an eleventh confirmed Closes #N no-op (#162) that the shipping tick itself never noticed — closed it by hand. Two real fixes shipped (pre-fight VITAE preview, draft-scorer newcomer visibility), /expand escalated the Closes-trailer root-cause candidate to the top of the phase-candidate queue, and the doctrine-curve re-measure came back unchanged from yesterday's flat-zero mid/late read — expected, since the fix that triggered the re-measure touches the draft path, not the policy-pick path this matrix exercises. Breadth check needed Playwright's browser hand-installed for a tenth night running; all six legs still pass clean once it is.

UI

pre-fight encounter preview now matches live combat VITAE

What changed

the pre-fight combat-prelude text now derives displayed enemy health from the same withScaledEnemyHp helper the live encounter uses, for every enemy — not just the one case a prior fixture happened to cover.

Why it changed

composeCombatPrelude read the enemy's unscaled health, but beginHazardEncounter applies the ENCOUNTER_ENEMY_HP_MULTIPLIER (2x) testing knob before combat starts, so every preview under-reported the live VITAE bar by exactly that multiplier (e.g. Little Belle: preview "50 hp.", live bar "100/100"). CRITIQUE pass 12 finding, issue #162.

commits 15d45699 · e · 162 · — · ee · e · fa · cad · be · f · why · this · eeded · a · adce

MECHANICS

draft scorer guarantees newcomer/sandbox card visibility

What changed

draftCombatDeck now forces every distinct extraCards newcomer id into the draft when the stage/tier pool allows it, per-id rather than per-class (a set can carry multiple newcomers and a generic "some newcomer present" check let one hide another).

Why it changed

the policy-pick draft scorer's weighted-random pick left extraCards newcomers as low-weight, tail-position candidates in a 70-90 card pool — ingot-of-ruin drew 0/24 times across 3 canonical late-stage seeds despite being structurally draftable, and matrix-level stage deltas in sandbox A/Bs were consequently a pool-shuffle artifact, not a card signal. CRITIQUE HIGH finding, issue #163 — resolved the tuning-harness AUDIT row of the same name.

commits fbace426 · e · 163 · ced · cea · this · e · — · ee · be

INFRA

digest pulse review catches an eleventh Closes #N no-op — #162 sat open undetected

What changed

#162's shipping commit (15d45699) carried a correctly numbered Closes #162 trailer and a green verify-mobile claim, but the issue still showed OPEN on GitHub when this digest checked — and unlike #157/#160, the shipping tick's own AUDIT note never flagged it. Closed by hand.

Why it changed

extends plan/AUDIT.md [2.4] to eleven confirmed instances (#83, #151, #155, #129, #156, #157, #158, #159, #160, #162, #163) and reproduces the same "catching is itself unreliable" pattern the 2026-08-01 digest first surfaced with #158/#159 — some shipping ticks notice the no-op and close by hand same-session, this one didn't. /expand pass 5 (same night) independently escalated the root-cause candidate to score 8.5 citing the ten-instance count known before this digest's own catch; the true count is now eleven.

commits e · — · eee · ce · only · aADd · daed

BALANCE

doctrine-curve re-measure: unchanged from 08-01's flat-zero read

What changed

baseline:check came up stale by 1 mechanics-source commit (fbace426, the draft-scorer fix above). Re-measured with npm run baseline:regen -- --runs=30 --confidence=reduced-nightly at acc64eca: early 61.1%, mid 0.0%, late 0%, impossible 0% — byte- identical to yesterday's ef492fff read; only the JSON's generatedAt/commit meta fields changed.

Why it changed

doctrine (blind policy-pick): early ~80 / mid ~50 / late 25-35 / impossible 0. The fix that triggered tonight's staleness flag targets the draft scorer's newcomer-visibility weighting — a different deck- construction path than the policy-pick matrix this baseline measures — so an unchanged read is the expected outcome, not new evidence either way on the standing mid/late collapse. Filed as a fresh plan/AUDIT.md row to keep the freshness stamp honest without implying new movement; the existing "Post-D8 flag-on curve repair" candidate still owns the actual repair.

INFRA

Playwright's browser cold again on the night runner — tenth night running

What changed

npm run e2e:minigames needed npx playwright install chromium-headless-shell by hand before it would run at all; once installed, all six legs — hazard, combat, gathering, encounter-routing, exploration-roundtrip, upgradeable-dice — ALL PASS.

Why it changed

plan/AUDIT.md [3.2] has flagged this since 2026-07-17: .github/workflows/night.yml still doesn't set install_playwright: true, unlike every other Playwright-driving workflow in this repo. Issue #161 already tracks the one-line fix; it just hasn't been picked up by ten consecutive /iterate ticks despite an ease score of 8. Added another AUDIT update note.

✠ The marginalia


The night's watch — what ran while nobody looked
Time (UTC)VerbOutcome
08-01 14:03 → 14:12march (iterate)no-op — no commit landed
08-01 19:40 → 20:11march (iterate)shipped #162 pre-fight VITAE preview fix
08-02 04:01 → 04:45march (iterate)shipped #163 draft-scorer newcomer-visibility fix; noted 10th Closes-trailer instance
08-02 08:41 → 08:48march (expand)pass 5 — 0 new candidates, escalated Closes-trailer candidate 6.0 → 8.5
08-02 09:25 → 09:34consolidatememory curation tick
08-02 (this run)digestthis entry — breadth check re-unblocked by hand, baseline re-measured (unchanged), #162 Closes-trailer no-op caught and closed

5 commits landed since the last digest (01bee78f, 08-01), all from the autonomous loop. Build-plan queue (plan/steps/01_build_plan.md): every phase through 38 is [x] shipped, queue empty, no [blocked:] rows, no Hermes-originated mutations logged. plan/AUDIT.md: 32 pending (one new doctrine-curve row filed this run; two existing rows — [3.2] Playwright-install gap and [2.4] Closes-trailer — got update notes). plan/CRITIQUE.md: 23 pending, last pass 07-31 (pass 14, commit 9a445281). plan/PHASE_CANDIDATES.md: 34 pending, last /expand pass 08-02 (pass 5, 0 new candidates, 1 escalated). 11 open issues (down from 12 after tonight's #162 close); one triage:needs-user (#144, still stale — see Needs you), zero loop:do. Deploy gate: HEAD before this digest's own commit was a docs-only tick, nothing gated to check.

The measure — did the fighting change?
  • **Doctrine-curve reading (acc64eca, reduced-nightly, blind

policy-pick):** early 61.1% (unchanged vs. 08-01), mid 0.0% (unchanged), late 0% (unchanged), impossible 0% (unchanged). No new candidate filed — the standing "Post-D8 flag-on curve repair" candidate in plan/PHASE_CANDIDATES.md already covers the live mid/late gap; tonight's read is a freshness-stamp confirmation, not new evidence of movement either direction. No other gate, cadence, or ceiling mistuning observed this pass.

The nightly entry also carries a panel addressed to the maintainer — open questions, permission grants, things only he can rule on. It is held back from this page: it is correspondence, not a report. The unfinished work it tracks is published above, in plain words.