Bullet Heaven — Housekeeping Backlog
Bullet Heaven — Housekeeping Backlog
Section titled “Bullet Heaven — Housekeeping Backlog”Standing backlog for infra/tooling debt discovered mid-session that’s worth doing but shouldn’t block whatever the current task is. Check this before starting significant new work — pick off anything cheap/important first. Not for gameplay/content tasks (those live in the roadmap memory + git log); this is specifically for “we noticed this is broken/awkward, fix it sometime.”
Convention per entry: date discovered, one-line description, why it matters, rough effort.
Mark DONE (commit X) in place rather than deleting, until the next prune.
- ✅ DONE (2026-07-04) —
scripts/check-test-count.shcan’t complete on this machine: godot’s headless run SIGABRTs (exit 134) at teardown even when the suite is fully green. Cause is RID leaks at exit (“N RIDs of type CanvasItem were leaked” / “RID allocations … leaked at exit”), not a test failure — the suite prints1518 passing / 0 failingfirst, then godot aborts on the way out. The guard’sset -euo pipefailcatches that 134 on theout=$(godot …)line and aborts BEFORE printing its Scripts-count check, so a fully-passing run looks like the guard itself broke. (Thebh-dev-chunkskill documentsset -eaborting on a failing test; this fires on a CLEAN exit too — a distinct trigger.) Workaround used this session: verified the count manually —ls tests/test_*.gd | wc -lvs the suite’s^Scriptsline (204/204). Fix (~15 min): make the guard tolerant of godot’s exit code — captureoutwith|| true(orset +earound just that one call) and decide from the parsedScripts/Failinglines, not godot’s exit status. Why it matters: the count guard is the anti-silent-drop safety net; if it can’t run, that protection is effectively off. Fixed 2026-07-04: the guard no longer wraps the godot run inset -e— it captures the output with|| trueand judges purely by parsing GUT’s summary (Scripts count + a derivedTests − Passing − Riskyfailure count, since GUT omits a “Failing” line when zero fail). So godot’s exit-134 teardown can’t abort it, and it still fails loud on a count mismatch OR a real test failure. Verified: exits 0 with204/204 test scripts ran, 0 failingon the green suite.
Done (kept for reference until next prune)
Section titled “Done (kept for reference until next prune)”-
2026-07-04 — DONE: folded the tvOS Godot project into this repo at
platform/tvos/, via SYMLINKS (the old separate~/Claude/bullet-heaven-tvosrepo is archived aside at~/Claude/_archive/bullet-heaven-tvos-old/). The open symlink-vs-copy question was resolved empirically: an isolated probe proved Godot imports + boots + runs the full 203-script suite cleanly through symlinks, so symlinks won (zero duplication, and the concurrent-clobber problem is eliminated not just made recoverable — there’s only one copy).platform/tvos/holds realproject.godot(Metal),export_presets.cfg(now TRACKED — force-included past the global ignore, fixing the old “gitignored, re-add if missing” landmine),icon.png, and the gitignoredbuild/+build-ios/Xcode shells; the 3 hand-edited non-regenerable files (dummy.mm+ two Info.plist) are tracked inplatform/tvos/patches/.bh-deploy/bh-dev-chunk/bh-live-debug-deploy/bh-appstore-releaseskills all re-pathed + the sync step removed. ⚠️ Import/boot/full-suite are green through the symlinks, but the actual on-device export→xcodebuild→devicectl was NOT re-run this session (needs the Godot fork + Xcode-beta) — the next real deploy is the final proof; the Xcode build shells were moved intact so it should behave identically. -
2026-07-05 — minor: Godot’s editor auto-generates stray
.importcache files fordocs-site/’s binary/vector assets (e.g.docs-site/public/favicon.svg.import,docs-site/src/assets/houston.webp.import) whenever the project is opened in the editor, since Godot scans the whole repo tree by default anddocs-site/isn’t excluded. These are harmless (regeneratable, don’t affect the Astro build) but show up as untracked noise ingit status. A targeteddocs-site/**/*.importgitignore rule would fix it — NOT a blanket*.importrule, since ~97.importfiles (audio assets etc.) are intentionally tracked elsewhere in the repo.