Commit History
-
feat: front-door menu, Tester/Full modes, How to Play, menu music + ritual
- Two-view Gradio layout: menu_view (Direction C painted backdrop) and game_view. - mode-driven PACING config in memory.py (tester fast arc, full longer arc). - How to Play stone overlay. - Synthesized menu loop + chime->greeting ritual on mode-select/restart. - Docs (CLAUDE.md, AGENTS.md) and tests updated; 231 passing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>8c9619e
-
tune: ending gate 70/claimed-2, redemption needs tone>=20 (verified)
pacing_sim found the 80 gate barely reachable in natural play (warm stalled at 78). Lowered to 70 for demo pacing AND to make the loop reachable. Redemption threshold raised to tone>=20 so it must be earned with real warmth — ordinary transactional play lands in the Visitor Loop (the default predator ending). Verified: warm->good msg 10 (tone~27), factual->loop msg 12 (tone~13), cruel->bad msg 6. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>1a04c35
-
feat: retune ending pacing (bad msg 6, good msg 12, neutral msg 12)
Measured with tools/pacing_sim.py against the real model. Recall at 45 with 2-turn cooldown; generous affinity scale; tone 0 for warmth-free sharing (politeness no longer heats the tone); good gate 80/2 claimed, neutral ceiling 65 (coldness caps the bond), bad at tone -30 / turn 5; hostile band -22; fast seeds fire on message 2. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>328f82b -
feat: screamer flicker + gothic Fear & Hunger framing
Verified against the running app via headless screenshots. Flashes: - the capture flash now hard-cuts through ALL four faces (terror/almost/end/ base) in a ~0.55s steps() flicker — too fast to read, the portrait seems to convulse through what it could become - the full-screen echo is now a real screamer: face stabs the whole screen for a few frames at 0.5 opacity, gone in ~0.5s Gothic framing (medieval, F&H): - the child sits behind a pointed lancet arch (cathedral window): the scene is SVG-masked to the arch, a stone frame with bronze keystone + base blocks traces it - reusable --goth-frame border-image (double stone line, thickened corner brackets, bone studs) applied to the treasure reliquary, the visitor bubble and the send rune - treasure restructured: frame on the panel, fade mask moved to an inner scroller so the mask no longer eats the border-image - bone/bronze palette for visibility against the void Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>9b82354
-
fix: child visible early, stains render in real app, flash survives reduced-motion
Verified against the running app (headless Chrome screenshot), not just the harness: 1. Materialization curve front-loaded: full sharpness by bond 45 (was 60), blur 10->0, opacity 0.35->1. Bond 20 now reads as a recognizable child silhouette, not a smudge. Confirmed in real app. 2. Dried-blood stains moved to .gradio-container::after (own fixed layer above the vignette) — the body background-image was being darkened to nothing by the corner vignette. Confirmed visible in real app. 3. reduced-motion no longer forces .entity-flash/.entity-ghost to opacity:0 — that media query was killing the terror flash entirely when Windows animation effects are off. Opacity fades are not motion; only sway, fog drift and the glitch translate stay disabled. Flash lengthened to 2.5s (3s strong) with a longer opacity plateau. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>915fdd8 -
feat: visibility pass verified by headless screenshots
- full materialization by bond 60 (player must SEE him at Too Human) - stains brightened to visible-but-subtle (verified on capture) - terror flash cuts through the fog: 0.35x blur, 0.85 opacity floor - ghost echo raised to 0.18 peak (verified frozen-frame capture) - tools/visual_check.py: harness rendering real components + styles.css to standalone pages for headless Chrome screenshots Verified end-to-end: extraction captures memories via local qwen3:8b and emits flash markup; Gradio 6 HTML component replaces DOM nodes on change, so one-shot animations always restart (alternating names kept as belt and suspenders). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>af463a4