✠ The Chronicle

✠ ENTRY II


Quiet on the loop's own dial

loud everywhere else: the autonomous march tick has been silently no-oping on almost every run for the past day and a half — a stale OAuth token masked as green — while four merged PRs shipped the Fate Engine dice layer, a 52-enemy art-driven roster rewrite, a first arena backdrop, and an art + drag-perf pass.

INFRA

March/night ticks stop swallowing auth failures

What changed

_claude-skill.yml now fails the job when the Claude turn itself reports is_error, instead of letting GitHub Actions call it green.

Why it changed

every march run sampled across the last day and a half — 2026-07-04 21:56, 2026-07-05 00:15 / 04:26, 2026-07-06 09:13 / 11:28 / 13:01 / 16:32 UTC — came back "is_error": true, "Failed to authenticate. API Error: 401 Invalid bearer token", yet the workflow reported success the whole time. The loop looked healthy while doing nothing; the first tick after this fix landed (17:09:27) is the first one to actually show red.

commits b1267aae · 82acf0ca · 82b7b9cd

INFRA

Removed the claude-pr-review workflow

What changed

Deleted claude-pr-review.yml and its README entry.

Why it changed

"automated PR review is overkill for this repo" — owner call.

commit 30a7a173

MECHANICS

Fate Engine P1 — the dice get a second read

What changed

Curated the card library 88→49 keepers and shipped the Fate Engine dice layer: Resonance tallies, Reserve/Ripening banking, Fate/X taps, Omen scouting, color-match turn extension, and a rebuilt combo registry.

Why it changed

owner call to lock in genuinely good cards first and give every keeper a real dice interaction from day one (spec 31 §9).

Known-broken and flagged loudly in the commit itself: the curated pool + dice layer collapsed the challenge gradient (measured win ≈1.00 across every stage). Already filed as the URGENT candidate in plan/PHASE_CANDIDATES.md — a real /combat-tuning + /deck-tuning pass, not a constant nudge.

commit 6b16ad16

CONTENT

New base enemy library: 52 art-driven enemies

What changed

Replaced the enemy roster wholesale — one enemy per painting (52 total), spread across fishing-village/northern-forest level bands in all five difficulty tiers, each with an authored escalating threat sequence.

Why it changed

ties every enemy to real art (1:1 portraitAsset key, no more random art pools) and gives long fights a per-phase damage ramp that compounds with the engine's escalation clock — solve it fast or it out-scales you.

commit b5c6d714

CONTENT

Temp art placed across the game

What changed

Dropped a processed art pass (cards, enemies, player portraits, treasure) across combat, the character sheet, and the Reliquary — replacing procedural SVG placeholders with painted assets, alpha-matted to float on any dark surface.

Why it changed

first real visual pass on the curated card pool and new enemy roster landing the same day.

commit 2bf0c94d

UI

Fixed staged-card drag lag

What changed

Traced combat-board drag lag to full-size card art being decoded/repainted every frame; switched to pre-downscaled art, a non-remounting drag ghost, and identity-stable CombatBoard memo props.

Why it changed

the new per-card art pass made drag stutter newly visible — same commit as the art drop.

commit 2bf0c94d

UI

Ruined-city battlefield backdrop

What changed

Added a full-bleed raster arena backdrop behind the enemy figure on the combat board, with an opt-in hideBackdrop prop so procedural scene atmosphere doesn't fight the raster art.

Why it changed

first attempt at moving combat's backdrop off pure procedural SVG.

commit 21211938

INFRA

The digest run that lost its own output

What changed

This entry never actually shipped on its own. The night run that wrote it (17:17–17:35 UTC, CLAUDE_CODE_OAUTH_TOKEN freshly rotated) drafted this file, built the HTML, kicked off npm run verify in the background, and called ScheduleWakeup to resume and commit once verify finished — but a GitHub Actions claude-code-action invocation is one turn, one job, no resume: the runner tore down when the step ended, and the draft was lost with it. Recovered by hand from the run's own show_full_output log and landed here directly.

Why it changed

skills/digest.md never said the gate has to run synchronously in-turn; backgrounding a long command and deferring past the turn boundary is a normal pattern in an interactive session, just not a safe one in a single-shot headless run. Fixed in the same commit as this entry: the skill now says so explicitly.

✠ The marginalia


The night's watch — what ran while nobody looked
TickVerbOutcome
hourly, 2026-07-04 21:56 → 2026-07-06 16:32marchreported success, but every sampled run silently hit 401 Invalid bearer token — zero real dispatcher work done
2026-07-06 17:09marchfirst tick to fail loud, same auth error — the new check working as designed
2026-07-06 ~14:16–17:09manual (night/march debug runs)T diagnosing and fixing the auth-swallowing bug directly
ongoing4 merged PRs (#11–#14)Fate Engine P1, enemy roster rewrite, backdrop, art + drag-perf — all shipped via manual Claude Code sessions, not the autonomous loop

Build-plan queue (plan/steps/01_build_plan.md): still 0/14 phases shipped since nexus adoption on 2026-07-03 — consistent with the loop having done no real work in that window. plan/AUDIT.md (6 pending), plan/CRITIQUE.md (3 pending), plan/PHASE_CANDIDATES.md (7 pending) are all unchanged from their 2026-07-03 seed. No open triage:needs-user or loop:do issues.

Breadth check: npm run e2e:minigames (hazard, combat, gathering, encounter-routing — full runs, not sampled) — all four suites passed clean.

The measure — did the fighting change?

None filed today — the one live proposal (Combat challenge-gradient retune, URGENT) was already filed by the shipping commit itself (plan/PHASE_CANDIDATES.md), not by this digest.

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.