✠ The Chronicle

✠ ENTRY XXI


A quiet, healthy night: five loop ticks, all green, zero code…

A quiet, healthy night: five loop ticks, all green, zero code regressions. The one real story is the meta-loop finally acting on its own recurring symptom — the Closes #N-doesn't-fire bug hit its fifth confirmed instance and /expand promoted root-causing it to a phase candidate instead of letting it accumulate as noise forever. The stale combat-deck baseline turned out to be a false alarm: the one mechanics-source commit that tripped it was a pure PROVISIONAL-to-ratified comment rename, and the re-measured doctrine numbers came back byte-identical to last night's read. Breadth check needed Playwright's browser hand-installed yet again — the eighth night running into the same missing install_playwright: true.

BALANCE

Baseline re-measured after a comment-only trip — numbers confirmed unchanged

What changed

npm run baseline:check came up stale by one mechanics-source commit (50cda5da). Re-measured with npm run baseline:regen -- --runs=30 --confidence=reduced-nightly; the new baseline is byte-identical to the prior read on every stage cell — early 59.9%, mid 4.7%, late 0%, impossible 0% (doctrine early ~80 / mid ~50 / late 25-35 / impossible 0), only generatedAt/commit metadata changed.

Why it changed

50cda5da ("docs(combat): reconcile ratified dice and preset truth") turned out to be exactly what its title says — it swaps PROVISIONAL wording for ratified in three comments (combat.upgradeable-dice.ts, combat.engine.ts, combat.encounter.types.ts) and touches no runtime logic, so the seeded sim reproduced last night's numbers exactly. The standing plan/AUDIT.md "doctrine-curve confirmation" row (filed 2026-07-30) still describes the live doctrine gap accurately — no new row needed, this just confirms it wasn't stale data.

commits 50cda5da · eaed · on · 202d721c · baee · a

INFRA

Closes #N no-op hits its fifth confirmed instance — /expand promotes root-causing it

What changed

/iterate drained the "session doc-residue" CRITIQUE row (two doc additions to AGENTS.md files), then found its own shipping commit's Closes #156 trailer failed to auto-close the issue — identical to four prior cases (#83, #151, #155, #129). This time /expand pass 4 looked at the pattern (5 confirmed instances, 3 of the last 15 commits were re-filings of the same bug) and filed it as a [score 6.0] phase candidate: root-cause why a correctly-numbered Closes #N trailer silently no-ops on a direct-to-main push.

Why it changed

this is the loop's meta-rail working as designed — a symptom that kept recurring as one-line AUDIT notes finally crossed the threshold into "worth a dedicated phase," filed as a proposal (not applied) per the digest/expand contract; /oversight decides whether to promote it.

commits 7c20b4fd · 156 · dc · add · 44b289fa · 9a445281 · fface · e · 202d721c · ead · a · 4 · caddae

UI

Critique pass 14: exploration hub doubles its own level label

What changed

the unattended critique:drive pass reconfirmed the MORALE and title-wordmark fixes still hold, then found one new MED: the exploration-hub StatusCard subtitle reads "LEVEL · LVL 1 PILGRIM" — the static "LEVEL" section label and the value string's own "LVL {n}" say the same thing back to back.

Why it changed

same shape as the earlier header MORALE "v of x" placeholder bug (RESOLVED 2026-07-18) — a label colliding with its own value. Filed to plan/CRITIQUE.md for /iterate to drain; not fixed here.

commit 1549af7b

INFRA

Breadth check needs Playwright's browser hand-installed — eighth night running

What changed

npm --workspace axiomancer-mobile run e2e:minigames aborted immediately on hazard-e2e.mjs with "Executable doesn't exist at .../chromium_headless_shell-1228/..."; installed by hand (npx playwright install chromium-headless-shell), then all six e2e 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 on its _claude-skill.yml call, unlike every other Playwright-driving workflow in this repo. Added an update note to the existing row — this is a one-line fix that keeps not landing.

✠ The marginalia


The night's watch — what ran while nobody looked
Time (UTC)VerbOutcome
07-30 09:27 → 09:30march (audit)Hermes-provenance queue-change log ships (#129); fourth Closes-trailer note
07-30 11:17digestyesterday's entry — baseline re-measured, doctrine-curve confirmation filed
07-30 16:03ops (out-of-band, human)docs(combat): PROVISIONAL → ratified comment rename (no behavior change)
07-30 20:10 → 20:13march (iterate)doc-residue drained (#156); fifth Closes-trailer instance noted
07-31 03:58 → 04:14march (critique)pass 14 — 1 new MED finding (exploration-hub subtitle doubling)
07-31 09:22 → 09:29march (expand)pass 4 — Closes-#N bug promoted to a phase candidate
07-31 (this run)digestthis entry — baseline confirmed unchanged, breadth check re-unblocked by hand, Playwright-gap AUDIT row updated

6 commits landed since the last digest (2646fe1c, 07-30), one of them (50cda5da) out-of-band from a human/non-bot author. Build-plan queue (plan/steps/01_build_plan.md): every phase through 38 is [x] shipped, queue empty, no Hermes-originated mutations logged. plan/AUDIT.md: 43 pending (one row updated this run — the Playwright-install gap). plan/CRITIQUE.md: 39 pending, last pass today (pass 14, 07-31, commit 1549af7b). plan/PHASE_CANDIDATES.md: 43 pending, last /expand pass 07-31 (pass 4, 1 candidate filed). One open triage:needs-user issue (#144, still stale — see Needs you). No loop:do issues. Deploy gate: HEAD (202d721c) is a docs/plan-only tick, nothing to check; the one gated commit in this window (50cda5da) triggered verify-mechanics, which passed clean.

The measure — did the fighting change?
  • None new from this digest. The baseline re-measure confirmed the

existing 2026-07-30 doctrine-curve reading rather than producing a fresh one (see the [balance] card above) — the standing "Post-D8 flag-on curve repair" candidate in plan/PHASE_CANDIDATES.md still covers the live mid-stage gap; no gate, cadence, or ceiling mistuning observed this pass beyond what's already filed (the Closes #N candidate, filed by /expand this window, not by this digest).

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.