Excluded from #155 deliberately, to keep a 54-file PR from growing.
spacepilot/generate_music_templates.py still does REPO_ROOT / "outputs" / "music" derived from __file__, bypassing spacepilot.paths.outputs_dir().
#155 established the rule that no SpacePilot path resolves inside the installed package tree — web/ became package data, and outputs_dir, CONFIG_FILE and STUDIO_TOKEN_FILE all now resolve through spacepilot/paths.py (checkout when running from one, per-user data dir otherwise). This file is a live counterexample sitting next to the AGENTS.md paragraph that PR wrote.
Repo-only today, so nothing user-facing breaks: it is a template generator, not something an installed copy runs. But it is exactly the shape of the bug #155 fixed, and it will read as precedent to the next person who needs an output path.
Fix is to call paths.outputs_dir() like everything else.
Provenance
2026-09-22 train, found by the lane on #155 and named in that PR's body as deliberately out of scope.
Excluded from #155 deliberately, to keep a 54-file PR from growing.
spacepilot/generate_music_templates.pystill doesREPO_ROOT / "outputs" / "music"derived from__file__, bypassingspacepilot.paths.outputs_dir().#155 established the rule that no SpacePilot path resolves inside the installed package tree —
web/became package data, andoutputs_dir,CONFIG_FILEandSTUDIO_TOKEN_FILEall now resolve throughspacepilot/paths.py(checkout when running from one, per-user data dir otherwise). This file is a live counterexample sitting next to the AGENTS.md paragraph that PR wrote.Repo-only today, so nothing user-facing breaks: it is a template generator, not something an installed copy runs. But it is exactly the shape of the bug #155 fixed, and it will read as precedent to the next person who needs an output path.
Fix is to call
paths.outputs_dir()like everything else.Provenance
2026-09-22 train, found by the lane on #155 and named in that PR's body as deliberately out of scope.