✠ The Chronicle

✠ ENTRY LII


A quiet, green window: 24 of 24 `march` ticks succeeded, a…

A quiet, green window: 24 of 24 march ticks succeeded, a stacking-context bug that let the signature column swallow dice taps got fixed twice before it actually held, the content-lifecycle rotation ran eleven more passes (one real fix, the rest zero-diff), and the deck-matrix baseline re-measured fresh with its numbers byte-identical to two digests ago.

MECHANICS

A die became untouchable — fixed once, then fixed for real

What changed

CI caught a die that couldn't be dragged: a tap aimed at it hit a signature rune button instead, silently casting a signature and spending Conviction. dd1c1c32 ranked the dice tray's zIndex (31) above the signature column's (30) and shipped inside PR #306. The same failure recurred in the very next verify-mobile run — zIndex only resolves within a shared stacking context, and react-native-web's default position: relative; z-index: 0 on the tray's parent View trapped the 31 inside its own context while the column floated as a sibling at the root level with an explicit 30, so the column always won regardless of the tray's internal ranking. c15f4119 moved SignatureColumn to render as the tray layer's own sibling inside content, making the 31-vs-30 comparison real in any browser's stacking-context resolution.

Why it changed

player-facing — the same frame is reachable in a real fight, where the cost is a mis-tap that silently spends Conviction. /fix-ci (run 34781667060) diagnosed and landed the real fix after the first attempt's reasoning turned out to be correct about the symptom but wrong about the mechanism.

commits dd1c1c32 · c15f4119

UI

Intro fade, equipment detail modal, threat accordion, card border + shadow

What changed

PR #306 added a title-screen intro fade, a new EquipmentDetailModal (288 lines) reachable from the inventory dock, a threat-accordion treatment on the combat reveal screen, and gave cards a border plus a drop shadow that carries the active stance's colour.

Why it changed

mined from the PR title; no linked audit/critique row — reads as scheduled UI polish work landing as a human-authored PR alongside the loop's own cadence.

commits 267234fe · 31cc5cd5 · d4468c21 · (PR · 306

CONTENT

Six Northern-Forest dialogue trees retimed to the house voice

What changed

adjust-npcs pass 8 rewrote all six Northern-Forest dialogue trees (Shrine Keeper, the Chronicler, the Wandering Philosopher, Forest Ranger, Hermit Sage, Lost Trader) into the register set by STYLE_CONSTITUTION.md / VOICE_REGISTERS.md / LEXICON.md — same node ids, choices, and effects, only prose rewritten to cut the "wordier interiority" filler ("touches my heart deeply", generic ancient/transcendent adjectives) that a standing plan/PHASE_CANDIDATES.md row had flagged since pass 1 (2026-07-05... filed 2026-09-05).

Why it changed

closed a standing content-debt row instead of re-citing it an eighth time; KB research turned up zero prior art for dialogue-voice tuning (corpus is card/mechanics-centric), so the pass proceeded ungrounded per its own skill's anticipated-miss clause and filed game-knowledge-base#80 to flag the corpus gap.

commit abb3da01

CONTENT

Shop-effect duplication resolved: two teas, one price problem

What changed

/iterate (score 4.0, drained from a critique pass 37 finding) split Philosopher's Tea and Void Essence off the shared buff_critical_damage_up effect id — both consumables printed the identical "ADVANTAGE ON BODY / MIND / HEART, 3 ROUNDS" line at Glen Market despite different prices. Now buff_liars_gambit (mind-aligned) and buff_abyssal_presence (heart-aligned) grant single-stance advantage via the engine's existing generic payload — no engine change needed.

Why it changed

addressed plan/AUDIT.md finding [4.0]; a regression test now guards the two consumables from re-converging on one effect id.

commits f19afd0d · bedb9ed2 · — · ce · 307

CONTENT

Docs: stale hazard/route ids in cli.md and the fishing-village walkthrough

What changed

/iterate fixed cli.md and the fishing-village walkthrough, which still named hazard/route ids retired earlier in the build.

Why it changed

addressed plan/AUDIT.md finding [5.6].

commits 541e4ad4 · 593650a1

MECHANICS

Work-audit fixes: rest heal copy, Android back lock, one arrears threshold

What changed

Three medium findings from a 2026-09-12 work audit landed via a PR (#305, merged 09-13): the REST offer now shares its arithmetic with the engine instead of restating the heal fraction without its missing-VITAE cap (a pilgrim at 170/175 previously read "Restores 44 VITAE" and healed 5); Android hardware back now locks while a paced event (/cutscene, /dialogue, /village, /event) is pending instead of popping the route out from under it; both grace-track arrears tics now derive from AXIS_LOW_THRESHOLD instead of a hard-coded 2/10 that had drifted from /memoir's own IN ARREARS ≤ -34 rule.

Why it changed

all three are correctness bugs a player could hit directly, not tuning calls.

commit a74d946f

CONTENT

Lifecycle rotation — eleven passes, one wiring fix, mostly zero-diff

What changed

adjust-cards passes 9-11, adjust-equipment passes 9-10, adjust-enemies passes 9-10, and adjust-keywords pass 9-10 all returned zero-diff re-audits. adjust-keywords pass 8 shipped the one real fix: mechanicText's switch had no case for conjure_card, so it silently fell to default: return null — a paid clause vanishing from auto-generated card text, and a raw conjure_card id leaking into npm run catalog's output. Added the missing case (renders the conjured card's real name) plus a hermetic regression guard so the next silently-dropped mechanic kind fails loud instead of quiet.

Why it changed

standing rotation cadence; ten zero-diff passes plus one real wiring fix is itself a signal the content pools are holding steady.

commits 37dacef1 · 4b1b6a64 · 22ce276c · 304608c1 · 0afbfe89 · 24cebc11 · 1242bd60 · 2d65f87b · 55eec31d · 9d357e2b · e6709572 · b26bca91

INFRA

Critique passes 37-38 and expand passes 15-16

What changed

Critique pass 37 played 11 screens x 2 viewports and filed two mediums (the mobile hand-fan overlap that hides card names, and a village stall pricing two wares with byte-identical effect lines — the latter shipped this window, see the shop-effect card above); pass 38 played the same route and found nothing. expand passes 15 and 16 both reviewed the standing signal set and filed no new phase candidates — reality hasn't outpaced the plan this window.

Why it changed

the routine breadth legs; both passes ran green, no gate action needed.

commits 54550f57 · f96f9902 · 38f54205 · e3f65406

BALANCE

Baseline re-measured fresh — numbers unchanged again

What changed

Session start flagged the standing baseline (a2ea15ff, reduced-nightly, measured 2026-09-13) stale by 7 mechanics-source commits. Re-measured via the reduced-nightly pass (30 runs/cell) at commit b123cdba. The regenerated JSON differs from the prior baseline in only its meta block (timestamp + commit) — the report body is byte-identical, confirming none of the 7 intervening commits (docs, two zero-diff content ledgers, one real dialogue retheme, one keyword wiring fix, one work-audit fix bundle) touched anything the deck matrix reads.

Why it changed

this digest's own freshness gate exists so a balance question never gets answered against a stale engine; a second consecutive byte-identical re-measure is itself evidence the mechanics-source diff-vs-drift heuristic is tracking real risk, not noise.

commits b123cdba · baee · ee · this · c

✠ The marginalia


The night's watch — what ran while nobody looked
when (UTC)verboutcome
09-13 10:31–10:34marchsuccess, no-op
09-13 12:35–13:14march → adjust-keywordssuccess — pass 8, one UPDATE (conjure_card wiring fix)
09-13 14:26–15:11march → adjust-npcssuccess — pass 8, retheme six dialogue trees
09-13 16:28–16:57march → adjust-cardssuccess — pass 9, zero-diff
09-13 18:30–18:48marchsuccess, no-op
09-13 20:27–20:48march → adjust-enemiessuccess — pass 9, zero-diff
09-13 22:27–22:55march → adjust-keywordssuccess — pass 9, zero-diff
09-14 01:08–01:30march → adjust-npcssuccess — pass 9, zero-diff
09-14 02:41–02:54march → critiquesuccess — pass 37, 2 medium findings
09-14 04:36–04:52march → adjust-cardssuccess — pass 10, zero-diff
09-14 06:55–07:07marchsuccess, no-op
09-14 08:40–09:01march → adjust-equipmentsuccess — pass 10, zero-diff
09-14 10:30–10:40march → expandsuccess — pass 15, no candidates filed
09-14 12:41–13:34march → iteratesuccess — shipped shop-effect differentiation
09-14 14:32–14:41march → expandsuccess — pass 16, no candidates filed
09-14 16:30–16:50march → adjust-enemiessuccess — pass 10, zero-diff
09-14 18:33–18:58march → iteratesuccess — shipped stale-id docs fix
09-14 20:27–20:34marchsuccess, no-op
09-14 22:28–22:53march → adjust-keywordssuccess — pass 10, zero-diff
09-15 01:03–01:24march → adjust-npcssuccess — pass 10, zero-diff
09-15 02:37–02:44marchsuccess, no-op
09-15 04:33–04:40marchsuccess, no-op
09-15 06:45–06:58march → critiquesuccess — pass 38, no findings
09-15 08:38–09:00march → adjust-cardssuccess — pass 11, zero-diff

24 of 24 march runs succeeded this window. Two /fix-ci dispatches ran outside the cadence: one at 09-13 20:57 landed c15f4119 (the real dice-tray stacking-context fix, see the [mechanics] card above). A work-audit PR (#305, three fixes) and a UI PR (#306, four features) also merged outside march entirely — both covered by their own cards above.

The measure — did the fighting change?

None from this digest's own meta-loop rail this window — 24 of 24 march ticks succeeded, the content-lifecycle rotation stayed clean across all four rotating categories, and the nightly breadth check ran green. No gate/cadence/ceiling mistuning observed.

What is still unfinished
  • Build plan (plan/steps/01_build_plan.md): 0 open phases ([ ]),

0 blocked, 125 shipped (the 2 standing-blocked rows from the last digest cleared this window).

  • plan/AUDIT.md: ~44 rows pending (headers under "Pending" minus

resolved-but-unmoved [x] bookkeeping rows).

  • plan/CRITIQUE.md: ~23 rows pending (headers minus [x] bookkeeping

rows); 3 standing [HIGH] — see Needs You above.

  • plan/PHASE_CANDIDATES.md: ~46 rows pending (headers minus struck-

through/promoted rows).

  • No open triage:needs-user or loop:do issues.
  • Deploy: clean — HEAD is a content/docs tick, no gated workflow

triggered yet (grace window).

  • Nightly breadth (e2e:minigames): GREEN — 10/10 sandbox+live

runs, no crashes.

  • Measurement: was STALE at session start (baseline a2ea15ff, 7

mechanics-source commits behind); re-measured this tick via npm run baseline:regen -- --runs=30 --confidence=reduced-nightly → now FRESH at b123cdba, numbers unchanged. See the [balance] card above.

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.