✠ The Chronicle

✠ ENTRY XLI


Seven phases across eight ticks and zero no-ops

a card-text grammar pass, a real reward bug fixed in live hazard combat, dice-valve levers re-verified as already shipped, the DevLog stopped auto-publishing to Cloudflare, authored map-event prose finally reaches players, rest collapsed to a clean two-offer choice, and the anvil got its own map node. Breadth is green, the combat baseline was stale and got refreshed — flat, byte-identical to the last read. One fresh finding from an attended roundtable: the axio-query MCP can silently return an empty corpus after a checkout that deletes its snapshot files.

CONTENT

Phase 40 — card-text grammar + full copy pass

What changed

Rewrote 31 of 57 card paidSummary/persistentEffect strings and 17 mobile keyword-glossary entries against the ruled templating grammar (no em dash, no semicolon, "the foe" not "the enemy", comma- joined duration/trigger notes) — a superset of the phase's six named examples so the new lint doesn't leave the rest permanently failing it. Tightened paidSummary's length budget from 200 to 130 chars and added durable em-dash/semicolon/"the enemy"/raw-decimal guards on both the mechanics and mobile sides.

Why it changed

Ruled 2026-07-18, re-scoped against the PAID-sentence move to the inspect overlay and the completed 44a-44i retheme; a lint that only covered the six worked examples would leave every other authored string free to drift back out of grammar.

commits 36cf0698 · 0048e3ea · 869ca9ab

MECHANICS

Phase 54 — live hazard combat now routes through the engine's endCombat reducer

What changed

beginHazardEncounter now stages state.currentEncounter via the existing (dormant) startCombat bridge instead of discarding it, so combat exit calls a real endCombat(...). XP, loot, quest-kill advancement, and quest-completion rewards now flow through the engine instead of a hand-rolled partial write-back; mercy/capitulate/concede outcomes now activate authored friendshipReward payloads (flags, codex unlocks, alignment shifts, faction deltas) in live play for the first time. Autosave and the combat:ended event, previously silently absent, now fire too.

Why it changed

Live hazard combat had been silently skipping authored friendship rewards, autosave, and the combat:ended event since the bridge existed but was never wired to the exit path — judged a correctness fix activating already-shipped content, not a balance nerf.

commits 4502ead5 · 556ec152 · 55bf273b

INFRA

Phase 56 — dice-valve levers re-verified as already shipped

What changed

Investigated T's 2026-08-15 ruling (starter Press Fate grant + dice-valve preset promotion) before writing any code, and found both levers already shipped by earlier commits the ruling's own evidence chain predates (Phase 19 + the Profane Canon rework). Re-ran the D7 gates: in-suite canaries green, Press Fate now fires live (0.050/round, was 0.000), CQI flat and healthy (~79-80%) across stages.

Why it changed

Writing a second grant/promotion would either no-op against the existing mechanism or violate the laws it already enforces — a verify-and-document phase, same precedent as Phase 7.

commits 8100fdf4 · 962dc05a

INFRA

Phase 57 — DevLog stops publishing to Cloudflare Pages

What changed

Untracked the generated DevLog HTML, data JSON, and catalog art (118 files; 63 source files stay tracked — entries, dated screenshots, tuning-lab reports, README). Removed the workflow step that committed generated output to main; artifact upload and local npm run site:build remain the reachable paths. Added scripts/check-devlog-not-served.mjs as a guard, wired into the pre-commit hook and a new weekly backstop workflow.

Why it changed

The private DevLog was inadvertently reaching a public Cloudflare Pages deploy through the committed generated output; this closes the in-repo half of that exposure (the Cloudflare dashboard config is a separate, out-of-scope follow-up, tracked in plan/AUDIT.md).

commits b647fc65 · cb788468 · ce65dd41

CONTENT

Phase 58 — authored map-event descriptions reach the player

What changed

ResolvedEvent now carries an optional authored description on every kind but cutscene (already has lines) and none (nothing to say); every MapEvents handler threads it through as a pure pass- through. Mobile's event body text now prefers the authored description over the generic per-kind placeholder for interaction and village events, falling back to the placeholder when a node left it unauthored.

Why it changed

World-builders had been authoring per-node descriptions with no surface that ever rendered them to a player; this closes that gap for the two event kinds that reach the modal, with encounter/minigame launch screens filed as separate follow-ups (different presenter surfaces, own fallback logic).

commits 17caecaa · 426912a9 · 2c468bd6

BALANCE

Phase 59 — rest collapses to two offers: flat 25% heal, or cut a card

What changed

Dropped the anvil offer and anvil-pick phase from RestChoice entirely. Every shelter now heals a flat 25% of max VITAE (previously 20% at camp, full-to-cap at an inn) — the inn's heal-to-cap special case is gone. The cut-a-card offer keeps its escalating price. Rest now threads its Phase 58 authored one-liner instead of a placeholder intro when a node has one.

Why it changed

Simplifies the rest decision to two legible, always-present options; shipped intentionally ahead of Phase 60 so the anvil offer's removal doesn't leave a dead blacksmith hand-off dangling — Phase 60's standalone map-node interceptor was already built and is the road forward.

commits 7741beed · 94b85569 · 1cea0eb7

CONTENT

Phase 60 — the anvil gets its own map node

What changed

Placed the blacksmith MapEventKind on fishing-village node fv-21 — a single fixed placement, not a cadence, mirroring the D6c precedent. fv-21 was a generic filler encounter with no flag/economy dependency; its position is post-boss and past every loot-cache/quest reward (funded) and pre-terminal (the upgrade gets used). The map-tap interceptor needed no changes — it was already kind-agnostic.

Why it changed

Closes the standalone blacksmith surface Phase 59 assumed would exist once the rest→blacksmith hand-off was deleted; resurrects the map-interception test dropped when D6c's original node was pulled.

commits cfc57097 · 68977b93 · af6482ea

✠ The marginalia


Measurement freshness

The deck-matrix baseline was flagged stale at session open — four mechanics-source commits past the stamp (Phases 58, 59, 60, and the earlier Phase-40 copy pass). Re-measured with the reduced-nightly pass (af6482ea, 30 runs/cell): CQI and win rate unchanged, early 54.5%, mid 8.3%, late 0%, impossible 0% — byte-identical to the prior stamp (935b7758, 2026-08-23). None of the four source commits touch the combat-playtest matrix path (grammar text, a mobile-only reward call-site fix, a docs-only verify, and world/map content), so this reconfirms rather than moves the picture. Report only, per standing doctrine — no tuning work spawned from a reduced-confidence pass.

The night's watch — what ran while nobody looked
when (UTC)verboutcome
2026-08-23 13:07marchsuccess — briefed Phase 57
2026-08-23 18:53marchsuccess — shipped Phase 40 (card-text grammar)
2026-08-24 02:03marchsuccess — briefed + shipped Phase 54 (endCombat routing fix)
2026-08-24 07:33marchsuccess — verified Phase 56 (dice valves already shipped)
2026-08-24 13:27marchsuccess — shipped Phase 57 (DevLog untracked)
2026-08-24 ~14:10oversight (attended)roundtable filed axio-query snapshot-invalidation finding
2026-08-24 19:07marchsuccess — briefed + shipped Phase 58 (map-event descriptions)
2026-08-25 01:57marchsuccess — briefed + shipped Phase 59 (rest is two offers)
2026-08-25 07:16marchsuccess — briefed + shipped Phase 60 (anvil re-homed)
The measure — did the fighting change?

None. The baseline re-measurement above reconfirms the prior read byte-for-byte; no gate/cadence/ceiling mistuning surfaced in this window's pulse.

What is still unfinished
  • Build plan: 21 open phases ([ ]), 8 partial-with-carryovers ([-]),

3 skipped, 98 shipped — 7 more shipped than the last digest read (Phases 40, 54, 56, 57, 58, 59, 60).

  • plan/AUDIT.md: roughly 53 open rows (one freshly filed this window,

the axio-query finding above).

  • plan/CRITIQUE.md: 21 open rows; last pass 2026-08-22 (pass 29, no

new findings), now 3 days old.

  • plan/PHASE_CANDIDATES.md: 34 open rows, unchanged since the last

/expand pass (2026-08-15).

  • No open triage:needs-user or loop:do issues.
  • Deploy: clean — HEAD af6482ea is a plan-only commit touching no

gated path, nothing for the CI gate to check.

  • Nightly breadth (e2e:minigames): ALL PASS — hazard (both

routes), combat-encounter, gathering (both stances), encounter routing, exploration/combat round trip, upgradeable-dice flag-on, and the 10-run sandbox+live combat-round suite all completed clean.

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.