2026-07-06
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.
March/night ticks stop swallowing auth failures
What _claude-skill.yml now fails the job when the Claude turn itself reports is_error, instead of letting GitHub Actions call it green.
Why 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.
b1267aae 82acf0ca 82b7b9cd
Removed the claude-pr-review workflow
What Deleted claude-pr-review.yml and its README entry.
Why "automated PR review is overkill for this repo" — owner call.
30a7a173
Fate Engine P1 — the dice get a second read
What 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 owner call to lock in genuinely good cards first and give every keeper a real dice interaction from day one (spec 31 §9).
6b16ad16
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.
New base enemy library: 52 art-driven enemies
What 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 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.
b5c6d714
Temp art placed across the game
What 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 first real visual pass on the curated card pool and new enemy roster landing the same day.
2bf0c94d
Fixed staged-card drag lag
What 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 the new per-card art pass made drag stutter newly visible — same commit as the art drop.
2bf0c94d
Ruined-city battlefield backdrop
What 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 first attempt at moving combat's backdrop off pure procedural SVG.
21211938
The digest run that lost its own output
What 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 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.
While you were out
| Tick | Verb | Outcome |
|---|---|---|
| hourly, 2026-07-04 21:56 → 2026-07-06 16:32 | march | reported success, but every sampled run silently hit 401 Invalid bearer token — zero real dispatcher work done |
| 2026-07-06 17:09 | march | first tick to fail loud, same auth error — the new check working as designed |
| 2026-07-06 ~14:16–17:09 | manual (night/march debug runs) | T diagnosing and fixing the auth-swallowing bug directly |
| ongoing | 4 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.
Needs you
CLAUDE_CODE_OAUTH_TOKENis confirmed healthy — the 17:17 run authenticated, spent real turns (66) and real cost (~$2.47), the thing it was never able to do since 2026-07-04 21:56. Nothing further to check there.- Watch the next scheduled
march/nighttick: with the digest gate now required to run synchronously, confirm it actually reachesgit commit/git pushand doesn't time out against the job'stimeout_minutesceiling on a slownpm run verify. - Once a tick lands cleanly, the build-plan queue (Phase 14, then Phase 1) should finally start draining — it's been fully stalled since 2026-07-03 despite ~24 "successful" ticks/day.
Tuning proposals
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.