Skip to content

Field fixes: the state dir that hid the audio, and four acts tuned to the notes - #37

Merged
rossry merged 4 commits into
mainfrom
claude/luminary-fieldfixes-e512rh
Aug 28, 2026
Merged

rossry merged 4 commits into
mainfrom
claude/luminary-fieldfixes-e512rh

Conversation

@rossry

@rossry rossry commented Aug 28, 2026 •

Copy link
Copy Markdown
Owner

The (0/7 here) root cause

runtime_state_dir returned a bare relative Path("var") — CWD-dependent — while the pattern registry anchors to the repo by __file__. A service unit with no WorkingDirectory= (systemd defaults to /) therefore read and silently populated /var/audio, /var/stage/queue.json, … while patterns kept loading fine, which is why nothing else ever looked wrong. Both audio sightings ("wants ♪ apollo.mp3" with the file present; "per chapter (0/7 here)" after update) are this one bug.

  • Fix: the default state root is now anchored to the checkout exactly like the registry (luminary/statedir.py); explicit --store still wins verbatim. The resolver test proves CWD-independence.
  • Diagnosability: /api/audio now returns {dir, files} — the resolved directory the stage actually reads; the page's empty-inventory state names that directory right in the selector; AudioPlayer logs it at startup.
  • Operator note: if your unit ran without WorkingDirectory=, live state sits under the old CWD (likely /var/stage/queue.json) — copy it into the checkout's var/ to keep the queue, or requeue.

nocturne/embers: growing net faster than it's blown out

Gain climbs 0.40 → 1.35 by 2:30 and keeps rising to 1.50 underneath the scars — each gust knocks the fire down and it comes back stronger; mortality eased so the bed stays full. Strong to 3:42; the last gust and the dying fall share the final half minute. Verified: mean 0.057 → 0.111 through the first two gusts, holds 0.08–0.10 to 3:38, 0.008 at 4:08.

nocturne/veils: purples

New VEILS_NIGHT palette — violet-blue dark sky, green curtains, high fringes turning through blue into a real violet band — plus AuroraVeils.hot_hue so the burnt-through cores burn purple-white here (green-white stays the default for small_planet and promises). At the crest ~17% of lit lights read purple against the green.

nocturne/candles: uneven, unpredictable, subtly different fates

A flame now catches — a ~2 s take with a flare-and-settle overshoot (ignite_flare) instead of a 15 s fade-in — and the sculpture's bones light unevenly across the first ~10 s in hash order (anchor_spread), each seat nudged off its exact vertex (anchor_jitter_deg), strays held back a beat then interleaving. No two flames alike (vary): brighter and dimmer, wide and small pools, each guttering on its own weather with a few near-extinctions that recover; a die_frac quietly go out early and stay out; the snuff wave's edge is ragged. All defaults off — Köln's part-iib candles untouched.

nocturne/starfall: any direction, their own colors, one swell, then blackout

  • Each star streaks away at its own hash-chosen heading — any direction — and burns out mid-sky; no more meridian rain.
  • The streak (and the pre-fall flare) keeps the star's own color: gold ones fall gold, blue ones blue.
  • The shower is one single swell: median gaps 3.0 s → 0.9 s → 0.27 s, no keepers, the last star falls at the end of the span while the sky's airglow drains to nothing beneath the final falls (end_black_at) — it falls on true black.
  • The black then holds as its own chapter, nocturne/blackout: a new Blackout primitive, a 20 s silent closing movement, skippable like any chapter. eluvium.mp3 times the starfall chapter and fades at the cut.
  • The duty audit exempts blackout by name and no longer polices endings (movement bodies still carry the never-dead law).

Full suite green; mypy clean; black clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_01N97HVk3sAr5jRGYodXcDoC

claude added 4 commits August 28, 2026 09:36
The field bug behind "per chapter (0/7 here)" with the files sitting in
var/audio: runtime_state_dir returned a bare relative Path("var"), so a
service unit with no WorkingDirectory= (systemd defaults to /) silently
read and populated /var — while the pattern registry, anchored by
__file__, kept working, which is exactly why nothing else looked wrong.
The default is now anchored to the repo the same way the registry is;
an explicit --store still wins verbatim, and the resolver test now
proves the default is CWD-independent.

Diagnosability so the next mismatch names itself: /api/audio returns
{dir, files} — the resolved directory the stage actually reads — the
page's empty-inventory state shows that directory in the selector, and
AudioPlayer logs it at startup.

Operators whose service ran without a WorkingDirectory have live state
under <old CWD>/var (e.g. /var/stage/queue.json); copy it into the
checkout's var/ to keep the queue, or just requeue.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N97HVk3sAr5jRGYodXcDoC
embers: net growth through the first two and a half minutes — the gain
climbs 0.40 to 1.35 by 2:30 and keeps rising to 1.50 underneath the
scars, so every gust knocks the fire down and it comes back stronger;
mortality eased to 0.06 so the bed stays full; strong to 3:42, then the
last gust and the dying fall share the final half minute (verified:
mean climbs 0.057 -> 0.111 through two gusts, holds 0.08-0.10 to 3:38,
0.008 at 4:08).

veils: a VEILS_NIGHT palette — violet-blue dark sky, green curtains,
high fringes turning through blue into a real violet band — and a new
AuroraVeils.hot_hue so the burnt-through cores burn purple-white here
(green-white stays the default elsewhere). At the crest ~17% of lit
lights read purple against the green; calm keeps a trace.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N97HVk3sAr5jRGYodXcDoC
The opening was a diagram: every seat igniting at once, each flame
fading in over ~15 s on the wide seniority edge, all of them identical.
Now a flame CATCHES — a 2 s take with a flare-and-settle overshoot
(ignite_flare rides the ignition edge, so it needs no extra state) —
and the sculpture's bones light unevenly across the first ~10 s in
hash order (anchor_spread), each seat nudged off its exact vertex
(anchor_jitter_deg), with the stray candles held back a beat and then
interleaving.

And no two flames alike (vary): some burn brighter, pools differ in
size, each candle gutters on its own weather — rare irregular deep
dips, a few near-extinctions that recover — a die_frac of them quietly
go out early and stay out, and the snuff wave's edge is ragged, some
flames leaning a beat longer than others. All parameters default off;
the koln part-iib candles are untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N97HVk3sAr5jRGYodXcDoC
then nocturne/blackout

Falls are no longer meridian-bound: each star streaks away at its own
hash-chosen heading — any direction — and burns out mid-sky rather
than needing an edge to exit by. The streak wears the star's own
color: gold ones fall gold, blue ones blue (the pre-fall flare keeps
its tint too, and the fixed white-gold overlay is gone).

The shower is now one single swell: every stretch denser than the
last (median gaps 3.0 s -> 0.9 s -> 0.27 s across the act) with no
keepers — the LAST star falls at the end of the span while the sky's
own airglow floor drains to nothing beneath the final falls
(end_black_at), so it falls on true black. Then the black holds as
its own chapter, nocturne/blackout: a new Blackout primitive and a
20 s closing movement — silent, trackless, skippable like any chapter.
The duty audit exempts blackout by name and no longer polices endings
(bodies still carry the never-dead law); eluvium.mp3 now times the
starfall chapter itself, fading at the cut.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N97HVk3sAr5jRGYodXcDoC
@rossry rossry changed the title Field fixes: the state dir that made audio invisible; embers outgrow the wind; purple veils Field fixes: the state dir that hid the audio, and four acts tuned to the notes Aug 28, 2026
@rossry
rossry merged commit 6a7b608 into main Aug 28, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants