✠ The Chronicle

✠ ENTRY XXX


The pivot day. T voided three doctrines and queued a 26-phase Dark…

The pivot day. T voided three doctrines and queued a 26-phase Dark Fantasy rebuild in the morning; by tonight five of those phases had already shipped — a 927-line campaign bible, a full card-library rework, a new objective function to replace the win-rate doctrine this loop measured against for weeks, a first-map audit that closed every soft-lock on the starting continent, and the rename machinery for the new vocabulary. Tonight's breadth check caught one real regression the pivot's own churn likely introduced (FLEE re-opens the encounter modal), and one march tick outran its own 90-minute job ceiling for the first time. The stale deck-matrix baseline is re-stamped — for the first time carrying the new Combat Quality Index instead of the win-rate doctrine that just got retired.

BALANCE

THE UNSHACKLING — three doctrines voided, 26 phases queued

What changed

an attended /oversight session voided the philosophy-only naming law, the status-dominance objective function, and the "no direct damage" strike doctrine, then ratified the replacement direction: "a Dark Fantasy deckbuilding RPG campaign," WHOLE PRODUCT — framed as "looser, not that different from what we already have." 26 phases (42 through 44i and beyond) were queued off that ruling.

Why it changed

the prior philosophy-only theme had painted the card library into a corner (see the residue commit's own words: "the current card library is transitional") and the status-dominance doctrine had been confirmed flat-violated for six consecutive nightly baselines with no fix in sight. Rather than keep tuning cards against a rule the owner no longer wanted, T reset the rule.

commits ad934542 · e · ruling) · 3cb3c3d4 · / · 463a3bc2 · ede · + · daed · rows)

CONTENT

THE PROFANE CANON — full dark-fantasy card + enemy rework

What changed

rebuilt the player card library and the enemy library end-to-end under the new theme (57 shipped card names became the naming-law's own evidence base for the campaign bible below).

Why it changed

the unshackling voided the old naming law same-day; this is the first artifact built under the new one, and every downstream rename phase (44a-44i) treats its output as ground truth rather than inventing a rival fiction.

commit 84ef85bd

CONTENT

Spec 34 — the Dark Fantasy Campaign Bible (phase 42)

What changed

a 927-line design charter (specs/34-dark-fantasy-campaign.md) codifying the Profane Canon's naming grammar into NL-1 through NL-19 (including a collision law: no name may be or begin with a keyword, card type, rank, stance, or locked-system word), a 15-rename map over a 42-row glossary + 8 system terms, and morality re-skins (spec 10 to GRACE, spec 14 to THE OATHS). Conviction, the Surge meter, and the Dice system are ruled the only three mechanics granted in-world metaphysics — explicitly so no future retheme can orphan them.

Why it changed

phase 42 is a design phase; its job is to decide, not implement, so phases 44a-44i have one ratified vocabulary to execute against instead of relitigating names phase by phase.

commit 46b5a5df

MECHANICS

Objective function v2 — the Combat Quality Index (phase 43)

What changed

a new combatQualityIndex (0-1 = 0.40·spine + 0.25·arc + 0.20·width + 0.15·identity) computed and reported beside the old statusEngagement metric, guarded by assertLockedMechanicsFirstClass so no future tune can zero-weight Conviction/Surge/Dice or smuggle a fourth term.

Why it changed

statusEngagement graded adherence to the status-dominance doctrine the unshackling just voided — /deck-tuning and /combat-playtest had been optimizing a rule the game no longer has. CQI grades how a fight played (does the deck's own engine run turn over turn) instead of whether the doctrine curve says it should win.

Phase 43 deliberately left the baseline unstamped (a mid-batch stamp would name a commit that didn't contain what it measured) — tonight's digest closed that gap; see Tuning proposals below.

commit 46b5a5df

CONTENT

First-map audit closes the soft-lock class and revives the quest chain (#186)

What changed

an exhaustive 260-route search over the fishing-village gauntlet found 8 nodes that could strand a player with zero legal moves; both coastal maps are re-layered into column-layered forward gauntlets (auditMapTraversal now proves no gauntlet map can strand). Also: wired advanceKillObjectives so the boss kill actually advances starting-quest (live hazard combat never called the legacy endCombat, so the quest chain was dead on arrival), made the breakwater boss and the quest-board node reachable in the same life (previously mutually exclusive across all 260 routes), and moved the start node's authored content onto an arrival cutscene so it's no longer dead. Gathering and the quest board each got a real push-your-luck decision (hidden eruption temper + omens; two-bone destination picks replacing roll-and-move).

Why it changed

the map was unfinishable in several independent ways — players could reach a legal dead end, or beat the boss and have nothing advance, or never see the start node's own content.

commit 61ea5513

INFRA

Rename infrastructure + keyword registry retheme (phases 44a/44b)

What changed

44a shipped the rename-infrastructure map, a codemod (scripts/apply-retheme-map.mjs), and a naming-law lint (check-lexicon.mjs, now scanning 236 live files). 44b executed the first live rename batch under it: 7 keywords (PREMISE→CHARGE, CONCEDE→CONDEMN, SWAY→PLEA, and four more), 1 die-face, 2 system terms, and 2 effect ids — regenerating the DevLog catalog and the keyword-atlas doc from the live registry in the same commit.

Why it changed

spec 34 ratified the vocabulary; 44a/44b are the first two of the phases that actually apply it, glyph-scoped so ordinary English prose elsewhere doesn't get false-flagged by the lint.

commits 29649a0a · 44a · de0b23a9 · 04c75d22 · 44b · ce · 188

INFRA

Closes #N auto-close root-caused and replaced (phase 48)

What changed

compared two issues end-to-end (#174 closed correctly, #175 leaked 11 hours) and found the only working close path was a best-effort step gated behind CI going green — any turn that ends while CI is amber skips it silently and forever. Replaced it with a close-trailers sweep that scans every commit in a pushed range (not just the tip) on every push to main, backed by 36 hermetic tests mutation-tested against 5 injected regressions.

Why it changed

the 2026-07-20 fix for the same symptom didn't hold, and its "resolved" claim stood five days on no witness at all.

commit 46b5a5df

✠ The marginalia


Also shipped today
  • Deck-removal primitive (phase 52a) — the engine's first card-removal

primitive, floor of 12 cards, linear 15/25/35/45 provisional pricing.

  • First-class inn (phase 52b) — shelter: 'camp' | 'inn' replaces the

healFraction >= 1.0 heuristic that was silently healing three wilderness rest nodes like paid shelter.

  • Theme-aware post-combat card draft, rendered on real card faces

(#184).

  • The Woodcut Codex — an 8-version visual-redesign plan plus an icon

canon, queued from the Potential Assets library (#179).

  • Phase 41 (constraint demolition) and its brief, landed the morning

before the unshackling.

The night's watch — what ran while nobody looked
Tick (UTC)VerbOutcome
08-08 ~20:xx (attended)/oversightTHE UNSHACKLING — voided 3 doctrines, queued 26 phases (#178)
08-08 (batched)/ship-a-phase ×5phases 42/43/48/52a/52b shipped in one push (#185)
08-08 20:40/ship-a-phasefirst-map audit — soft-locks, quest chain, minigame decisions (#186)
08-09 02:33 → 02:51/march/ship-a-phaseshipped — phase 44a rename infrastructure
08-09 07:28 → 08:58/march/ship-a-phaseshipped phase 44b, then cancelled — hit the 90-min job ceiling ~6 min after its last push
  • plan/AUDIT.md: 3 new Pending rows filed this cycle (the FLEE/tab-bar

regression, the march timeout, and skills/digest.md's own now-stale §3b doctrine-curve instruction); 1 row resolved (the CQI-baseline stamp gap Phase 43 flagged). Two [needs-user-call] rows from 2026-08-08 remain open and unblocking: the product name under the pivot, and which maps outside the fishing village should read as inns.

  • plan/PHASE_CANDIDATES.md: 1 new candidate filed this cycle (raise

or split around the march job ceiling); 43 pending, last /expand pass 2026-08-06.

  • plan/CRITIQUE.md: pass 20 (commit dc1270ca) already on record —

one fresh MED finding (desktop node-legend truncation), nothing new from tonight's pass.

  • triage:needs-user / loop:do issues: 0 open. No open PRs.
  • Deploy: nothing to check — HEAD (f96f0584) is a docs/plan-only

tick, no gated verify-* workflow triggered for its paths.

  • Breadth check (npm --workspace axiomancer-mobile run e2e:minigames):

RED. Hazard, combat, gathering, and encounter-routing all ALL PASS; the exploration↔combat-prelude round trip failed — FLEE closes the encounter modal but the tab bar stays hidden. Filed as a [contract] plan/AUDIT.md row with a traced likely mechanism (probable interaction with 44a's new start-node arrival effect); not fixed here per the standing rail (breadth failures become findings, the dispatcher fixes them tomorrow).

  • Deck-matrix baseline was stale by 7 mechanics-source commits —

re-measured this cycle. See Tuning proposals.

The measure — did the fighting change?

baseline:check opened this cycle stale by 7 mechanics-source commits (04c75d22 back through 08745441 — essentially the whole pivot day) — re-measured with the reduced-nightly pass (npm run baseline:regen -- --runs=30 --confidence=reduced-nightly), now committed at f96f0584.

This is the first regen to run since Phase 43 shipped combatQuality Index, so it's the first standard baseline stamp to carry CQI rather than just win rate: early 0.746, mid 0.739, late 0.814, impossible 0.820 (spine/arc/width/identity, 0.40/0.25/0.20/0.15). statusEngagement is still reported alongside (0.210 / 0.190 / 0.205 / 0.218) but per Phase 43's own ruling grades a doctrine that no longer exists.

Deliberately not filed as a doctrine-curve violation. Win rate this cycle reads early 54.5% / mid 8.3% / late 0% / impossible 0% — against the old 80/50/25-35/0 curve that would be a fresh, sharp violation (early down another 4.6pts from 08-08's 59.3%, worth a row under the old rules). But 46b5a5df ("Win rate is not a term at all… a 0%-win cell scoring well is pinned as correct") retired that curve as a grading concept the same day this loop last measured against it. Filing a violation row against a law the owner already voided would be exactly the "loop votes on its own constraints" failure mode the digest's rails exist to prevent — so this cycle reads CQI instead, and files a plan/AUDIT.md row flagging that skills/digest.md §3b still tells the next digest to do the win-rate reading regardless (see the new [docs] row). No CQI band exists yet to grade "moved" or "violates" against — that's a design ruling for whoever writes the skill's replacement instruction, not a metric this digest can pick on its own authority.

Today's intent

A pivot this large landing clean in one day, verified and green at every step, is the headline. The two things that went sideways are both small and both legible: one breadth check caught a real tab-bar/modal regression with a traceable likely cause (filed, not fixed — that's tomorrow's dispatcher), and one march tick outran its own job ceiling for the first time after chaining two phases into a single run (filed as evidence + a phase candidate, not touched directly — that's an /oversight call). Everything else the pulse found tonight was either already resolved by the day's own work (the CQI-baseline gap) or was this digest keeping its own instructions from grading a law that no longer exists.

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.