✠ The Chronicle

✠ ENTRY XX


The loop went dark for five and a half days on a GitHub Actions billing hold

every scheduled march and night run from 2026-07-24 03:51 through 2026-07-29 09:18 UTC failed before a job even started. No digest landed for 07-24 through 07-29 as a result; this entry catches up everything since the last one (07-23). Once billing cleared, the loop shipped CI hygiene, a Hermes-provenance queue-change log for issue #129, and a fourth confirmed instance of the Closes #N-doesn't-fire bug. Tonight's own re-measurement is the headline: the stale combat-deck baseline came back under the CLI's new Upgradeable-Dice default for the first time, and mid-stage combat reads 4.7% against a ~50% doctrine target — a known cliff (the standing "Post-D8 flag-on curve repair" candidate), now visible by default instead of only behind a flag. Breadth check: Playwright's browser was missing on the runner yet again, installed by hand, all six e2e legs pass clean.

INFRA

GitHub Actions billing hold blacked out the loop for 5.5 days

What changed

every scheduled march run from 2026-07-24 03:51 to 2026-07-29 09:18 UTC (21 runs) and every scheduled night run from 2026-07-24 through 2026-07-29 (5 runs) failed instantly with "recent account payments have failed or your spending limit needs to be increased" — the job never started, so there's no code-level failure to fix. march resumed successfully at 07-29 14:37; this is the first night run to succeed since 07-23.

Why it changed

external billing state, not a repo or loop defect. Flagging here because it explains the six-day gap in the DevLog ledger (no DIGEST_2026-07-24 through DIGEST_2026-07-29 exist) and because a human should confirm the account stays current — see Needs you.

BALANCE

First default-Upgradeable-Dice doctrine read: mid combat craters to 4.7%

What changed

npm run baseline:check came up stale (4 mechanics-source commits since the 2026-07-21 baseline), so this digest re-measured with npm run baseline:regen -- --runs=30 --confidence=reduced-nightly. The new numbers: early 59.9% (was 77.4%), mid 4.7% (was 22.9%), late 0% (unchanged), impossible 0% (unchanged) — against doctrine early ~80 / mid ~50 / late 25-35 / impossible 0.

Why it changed

the drop isn't fresh regression — afd26600 (2026-07-23) flipped combat-playtest's default dice model from legacy to spec-33 Upgradeable Dice, so this is the first reduced-nightly baseline measured under the model the shipped app actually boots. The direction matches the already-known D8 flag-on gate rerun ("mid is a cliff for 8/10 preset decks"); it's the same cliff, now the default read instead of an explicit-flag comparison. Filed as a HIGH plan/AUDIT.md row (measure-and-report only — the fix is /deck-tuning's, via the existing "Post-D8 flag-on curve repair" phase candidate).

commits aa21018b · eaed · on)

MECHANICS

Persistent header no longer freezes mid-combat; blacksmith node regated dev-only

What changed

the exploration screen's always-on VITAE header now unmounts while the encounter modal is showing instead of displaying a stale pre-fight snapshot through the whole battle; separately, the first-map blacksmith MapEvent node was pulled back to dev-menu-only (fv-16 reverts to a plain encounter) per an owner ruling that the blacksmith isn't the confirmed dice-upgrade surface yet.

Why it changed

plan/CRITIQUE.md [MED] pass 12 — the frozen header contradicted the live in-combat HUD reading right beside it, with no shared store to bind the two. The blacksmith regate closes plan/AUDIT.md's standing "wrong surface, rethink" finding (owner call via /oversight 2026-07-18) — the re-home design thread hasn't landed yet.

commits 09048b8e · 48f88600 · 20af943f · ec04a1c0

INFRA

CI hygiene: verify-runner consolidation + browser-evidence routed by subsystem

What changed

two hand-shipped CI restructuring passes — one consolidates duplicated verify-runner logic across verify-mechanics.yml / verify-mobile.yml / check-lexicon.yml (plus a new pre-commit hook and a smoke-bundler test), the other adds scripts/ci-e2e-scope.mjs to route browser/e2e evidence collection by which subsystem's paths actually changed instead of running everything on every push.

Why it changed

filed as issues #153/#154, triaged to needs-user (workflow YAML changes need human review before landing), then reviewed and shipped directly — not a /march tick.

commits c565339c · 153 · 7d873f50 · 154

INFRA

Hermes-provenance queue-change log ships for #129; fourth Closes-trailer no-op confirmed

What changed

plan/steps/01_build_plan.md gains an append-only "Queue change log" section — every future Hermes-directed mutation of the phase queue (add/remove/reorder/block/etc.) must now record who asked, what changed, and why, in the same commit as the mutation. Separately, this fix's own Closes #129 trailer on a clean direct push didn't auto-close the issue — closed by hand, the fourth confirmed case of a present, correctly-numbered trailer just not firing (#83, #151, #155, #129).

Why it changed

plan/AUDIT.md [user-issue #129] (HIGH, filed via Hermes 2026-07-19) — the build plan had no provenance trail for Hermes- originated queue mutations at all.

commits 4284562a · 129 · fc7b3a91 · aa21018b

INFRA

ship-a-phase gets a hard rule against backgrounding blocking research

What changed

skills/ship-a-phase.md now carries the same "no backgrounded blocking work past a turn boundary" rule digest.md already had for verify/deploy, extended to research sub-agents.

Why it changed

plan/AUDIT.md [3.6] — two consecutive 2026-07-16 /march ticks both dispatched to Phase 32 Part 1b, both spawned a background Explore agent, both ended the turn deferring to it. Each tick is a fresh session with no later turn to resume into, so both agents' findings were discarded on teardown — two ticks, zero commits, research repeated from scratch each time.

commits 5bb4e48a · 155 · 883a01fb

✠ The marginalia


The night's watch — what ran while nobody looked
Time (UTC)VerbOutcome
07-23 14:58marchblacksmith map-node regated dev-only; #151 closed
07-23 20:09marchpersistent header freeze fixed; #152 closed
07-23 20:38 → 20:54marchcard-text/keyword-contract fixes landed
07-24 18:07 → 18:08ops (out-of-band, human)one-shot secret-transfer workflow added then removed same session
07-24 03:51 → 07-29 09:18march / night (scheduled)21 + 5 runs failed instantly — GitHub Actions billing hold, job never started
07-29 14:37 → 20:16march (resumed)expand pass 3 (no candidates) → triage (#153 → needs-user) → ship-a-phase hard rule → third Closes-trailer note
07-29 16:45 / 19:26ci (out-of-band, human)verify-runner consolidation (#153), browser-evidence routing (#154)
07-30 09:27 → 09:30marchHermes-provenance queue-change log ships (#129); fourth Closes-trailer note
07-30 (this run)digestthis entry — baseline re-measured (stale → fresh), breadth check re-run and unblocked by hand, doctrine-curve confirmation filed

19 commits landed since the last digest (a862ab16, 07-23). Build-plan queue (plan/steps/01_build_plan.md): every phase through 38 is [x] shipped, queue empty — no phase in flight, all recent ticks were housekeeping (triage/ci/docs/audit). plan/AUDIT.md: 29 pending (one new row filed this run — the doctrine-curve confirmation). plan/CRITIQUE.md: 28 pending, last pass 2026-07-17 (pass 13) — 13 days stale now. plan/PHASE_CANDIDATES.md: 33 pending, last /expand pass 07-29 (pass 3, no new candidates). One open triage:needs-user issue (#144). No loop:do issues. Deploy gate: HEAD is a docs/plan-only tick, no gated verify-* workflow triggered — nothing to check. Breadth check (npm --workspace axiomancer-mobile run e2e:minigames): Playwright's Chromium headless-shell binary was missing yet again, installed by hand, then hazard, combat, gathering, encounter-routing, exploration-roundtrip, and upgradeable-dice all ALL PASS.

The measure — did the fighting change?
  • Doctrine-curve confirmation (see the [balance] card above):

early down 17.4pts to 59.9% (doctrine ~80), mid down 18.2pts to 4.7% (doctrine ~50, a near-total collapse), late unchanged at 0% (doctrine 25-35, still a flat violation), impossible unchanged at 0% (in band). Filed to plan/AUDIT.md as a HIGH row, not a new phase candidate — the standing "Post-D8 flag-on curve repair" candidate in plan/PHASE_CANDIDATES.md already covers this exact gap and is now more urgent since flag-on is the default nightly measurement. Card/deck fixes stay with /deck-tuning; no 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.