✠ The Chronicle

✠ ENTRY XXXIX


Night shift skipped 2026-08-20 entirely

so this entry covers two days: a crash-hunting harness landed with an honest negative result, two early-game UX fixes shipped, the product got a new name and a new tonal North Star, and four more Expo-decoupling phases chipped away at the re-platform. Breadth is green, the combat baseline re-measured stable, and nothing is blocked.

MECHANICS

PR #216 — a crash-strict combat harness hunts a user-reported crash, and doesn't find it

What changed

Built axiomancer-mobile/scripts/combat-round-e2e.mjs, a full-round UI harness that plays real cards (stage, power with a die, APPLY, END PHASE) against both the /combat-encounter dev sandbox and a live map encounter, asserting no crash and no error-boundary-screen mount. 30 runs across 15 seeds × both modes all reached a terminal outcome clean — the user-reported mid-combat crash was not reproduced. A follow-up commit filed that negative result explicitly as a [HIGH] plan/CRITIQUE.md row (so it doesn't read as "fixed") and banked two CI lessons: the two verify workflows keep parallel journey lists under different job names that must be edited together, and CI runs each e2e script individually rather than the e2e:minigames chain — so wiring a harness into that chain wires it into nothing CI actually runs.

Why it changed

The user hit a real crash mid-combat; before this, nothing in the test suite played a full round of real UI card-drags, so nothing could have caught it. The harness now exists and runs in both verify workflows, but the crash's actual trigger is still open — boss fights, mercy/WITHDRAW, non-starter decks, and the level-up-out-of-victory path are the named axes it doesn't reach yet.

commits 7f50494d · 7b7a8f78 · eb51e846 · ee79c0c6 · c54bcd1e · 18485daf

UI

Phase 46b — new-player starter picker collapses to Threadbare

What changed

A brand-new player now auto-seeds the Threadbare Office and skips straight to the map, instead of choosing from all three campaign snapshots (Threadbare / Pilgrim / Apostate). Pilgrim and Apostate stay live as internal balance/lineage data — just unreachable from the new-player flow.

Why it changed

Implements Phase 46a's ruling: offering mid/late-campaign deck snapshots as peer picks to a brand-new player undercut the tutorial's controlled-vacuum intent. BundleSelectScreen stays in the codebase for its other callers; only the new-player wiring changes.

commits a5996b62 · 24475f48

CONTENT

Phase 46c — quest discovery coach beat

What changed

/dialogue's reply row now previews a choice's consequence (e.g. "quest: starting-quest") before the tap, closing the silent-accept gap at Old Marrow's "Consider it done." A new questAcknowledged notification badges the Memoir tab while a quest is pending, mirroring the existing level-up badge — and fixed a latent bug the new condition would have exposed (the character-tab badge no longer falls through to the event badge when no event is active).

Why it changed

Before this, accepting a quest in dialogue gave no signal about what was accepted and no reminder that a quest existed — a player could tap through and never notice they'd started one.

commits 3a1b7291 · 3ecf0434

CONTENT

Product renamed "Miserere Mei, Deus"; Mörk Borg set as the tonal North Star

What changed

Via /oversight, T closed the standing product-name needs-user-call — "Axiomancer" becomes "Miserere Mei, Deus" (Latin, Psalm 51: "Have mercy on me, God") — decided in the same breath as setting Mörk Borg as the game's new tonal North Star for art, narration, and encounter design (deck/dice mechanics explicitly unchanged). The name is ruled and closed; the code migration (title screen, store metadata, CLI banners, doc mentions) is queued as build-plan Phase 67, not yet shipped — "Axiomancer" still appears live everywhere until that phase lands. The tonal pivot itself is deferred to a fresh session via a written trigger prompt (new-north-star.prompt.md), which opens by asking whether this is a hard pivot away from the shipped liturgical-gothic register or an evolution that keeps its vocabulary but borrows Mörk Borg's brutality and minimalism.

Why it changed

Two open naming-session passes (plan/naming-session-2026-08-12.md) had already surfaced strong single-word candidates without a clear winner; T broke the tie by naming a direction instead of picking from either list, and used the opening to set a broader creative-freedom mandate at the same time.

commits f47db806 · 242e9247

INFRA

Phases 47a–47d — Expo decouple continues: shim layer, router, fonts, device APIs

What changed

Four more legs of the Expo-to-bare-RN re-platform:

Why it changed

Continues the CI/CD re-platform (plan/PHASE_CANDIDATES.md's promoted "Expo decouple" line) one verifiable package at a time, each phase scoped to what's provable without a native project yet.

  • 47a — a lib/platform/* shim layer (8 thin re-export modules) now

sits between all application source and every expo-* import; 49 call sites repointed, a file-scan guard enforces the boundary.

  • 47bexpo-router swapped for react-navigation behind the

router shim, including the app's entry point; 27 test files and every route registration rewritten.

  • 47c (partial) — the 5 fonts behind @expo-google-fonts/* vendored

locally as .ttf assets; an expo-image swap was attempted, caught a real 52.8% pixel-diff regression in verify:visual, and was reverted rather than shipped guessed-at.

  • 47d (partial) — expo-status-bar → RN core StatusBar,

expo-hapticsreact-native-haptic-feedback; 4 packages (expo-constants/expo-linking/expo-splash-screen/ expo-navigation-bar) carry over, blocked on the native project that doesn't exist until Phase 47e's prebuild.

commits 3473520f · 49b6f55a · 5a69cdb5 · 1dd887b5 · 43d18ccd · e25d7deb

CONTENT

Fishing-village route truth reconciled in the docs

What changed

docs/world.md and two walkthrough goal files still described the pre-Phase-53d static template — fv-4 as a "wet-hound encounter," the spine diagram left unlabeled as historical. Relabeled the spine section as the historical static-template diagram, pointed readers at the live event registry instead, and corrected both walkthroughs: fv-4 is now the "Stranger's Net" narration dilemma, and the nearest early encounter from fv-2 runs through fv-11 → fv-13 (Little Belle).

Why it changed

Phase 53d changed what fv-4 actually resolves to in the live MapEvent data three days ago; the docs and walkthrough comments never caught up, so anyone reading them would infer a combat encounter that no longer exists at that node.

commit 4c1b9df6

✠ The marginalia


Measurement freshness

The deck-matrix baseline was flagged stale at session open (one mechanics-source commit past the stamp — the fishing-village docs reconciliation above, which touches no engine code). Re-measured with the reduced-nightly pass (e25d7deb, 30 runs/cell): CQI 0.796, early win rate 54.5%, mid 8.3%, late 0%, impossible 0% — all within rounding of the prior reduced-nightly read (05c3ffdf, 2026-08-17: CQI 0.796, identical stage win rates). Two straight stable reads. Per standing doctrine, the retired ten-preset win-rate curve (early ~80 / mid ~50 / late 25-35 / impossible 0) does not apply to the current Profane-Canon-era library, and no tuning work is spawned from a reduced-confidence pass — report only.

The night's watch — what ran while nobody looked
when (UTC)verboutcome
2026-08-19 13:22marchsuccess — shipped PR #216 (combat crash harness)
2026-08-19 18:59marchcancelled — apt-mirror hang, recurrence (see below)
2026-08-20 01:56marchsuccess — shipped Phase 46b
2026-08-20 07:13marchsuccess — shipped Phase 46c
2026-08-20 13:24marchcancelled — hit the job ceiling mid-work, no commit
2026-08-20 19:07marchsuccess — shipped Phase 47a
2026-08-21 02:03marchsuccess — shipped Phase 47b + oversight (naming/pivot, Phase 66 promotion)
2026-08-21 07:14marchsuccess — shipped Phases 47c and 47d
nightskipped 2026-08-20 — no night run between 2026-08-19 and today; no DIGEST_2026-08-20.md exists and this entry does not backfill it
The measure — did the fighting change?

None. The baseline re-measurement above is directional evidence only, per standing doctrine — card/deck work stays with /deck-tuning, engine constants stay manual. No gate/cadence/ceiling mistuning surfaced in tonight's pulse beyond the two already-tracked CI-reliability rows noted above.

What is still unfinished
  • Build plan: 23 open phases ([ ]), 0 blocked, 7 partial-with-carryovers

([-]), 3 skipped. Phase 67 (title migration) and Phase 66 (lexicon/doctrine-prose retired-string catch, promoted via oversight this window) both newly queued.

  • plan/AUDIT.md: 43 genuinely open rows (82 headers logged; the rest

are resolved-in-place [x] markers, not physically moved). Newest: tonight's two apt-mirror/timeout recurrence notes.

  • plan/CRITIQUE.md: 21 open rows (45 headers logged). Last pass: 28

(2026-08-19, no findings). No new pass ran this window.

  • plan/PHASE_CANDIDATES.md: 33 open rows (45 headers logged, most of

the rest are ~~struck~~ promotions or Expand pass retrospectives).

  • No open triage:needs-user or loop:do issues.
  • Deploy: clean — HEAD e25d7deb has one green verify-mobile run.

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.