Files
reliquary/docs/workpad/reports/2026-10-17-01-gremlins-post-merge-checks.md
T

4.4 KiB

Gremlins post-merge live checks (B7, B4, B8)

Date: Sat 2026-10-17 00:58-01:05 (local). Run by claude-sonnet-5-5. Gremlin model: claude-haiku-5-5 (effort low). Binary 2.1.299, Windows 10 Git Bash. main @ e6843ca (Spire 0.3.0). Scratch: throwaway git repo + run log in the session scratchpad pm/. G = uv run --script plugins/spire/skills/gremlins/gremlins.py.

1. B7 rebase live

Commands: G init --run run.md --model claude-haiku-5-5 --effort low --cwd repo; G train --base b1; commit add sub in repo (4a14b1b -> 93e419d); G rebase --base b1 --brief rebase.md; G spawn --job s1, then --job s2.

Call status session cache cost cumulative delta
b1-train ok 57dde9a1 - 0.003195 0.003195 0.003195
b1-rebase1 ok 57dde9a1 (unchanged) hit 0.000816 0.004011 0.000816
s1 (fork of rebased b1) ok c7997b70 hit 0.001339 0.005350 0.001339
s2 (fork of rebased b1) ok 6eb566c4 hit 0.001437 0.005448 0.001437
  • The plain resume keeps the same session id; bases/b1.json got commit 93e419d, one rebases[] entry (from_commit 4a14b1b), cost_cumulative_usd 0.00401097.
  • The rebase answered from the new calc.py (saw sub and the commit): the delta header worked.
  • Cost delta adds up: 0.003195 + 0.000816 = 0.004011 = the base's stored cumulative (0.00401097, the sum of its modelUsage costUSD), so the basis after a plain resume is right (open assumption closed). Forks use the base's 0.004011 as their basis (s2 is not added on top of s1), as designed.
  • Cost: $0.0068. Verdict B7: ticked.

2. B4 orphan case (long single child)

  • First try (job long, brief python -c "import time; time.sleep(300)"): ended ok in 10 s, gremlin's shell has no python (exit 127, python: command not found). Not usable.
  • Retry with the absolute interpreter (.../uv/python/cpython-3.13.1-windows-x86_64-none/python.exe -c "import time; time.sleep(300)"), job long2 then long3, each run_in_background: true. Process table (Win32_Process) snapshotted before the spawn and at ~35 s; the tree below is from long3, the live sleeper is the leaf. TaskStop at 01:02:19 returned "Successfully stopped". long2 was stopped the same way; its ~5 s reading was lost to a scripting error of mine (only ~35 s read: all gone).
PID name role ~5 s after stop ~30 s after stop
6168 / 12152 / 37052 bash.exe harness wrappers of the spawn call gone gone
31532 uv.exe uv run --script gone gone
38504 -> 38140 python.exe x2 gremlins.py gone gone
37772 claude.exe gremlin (= child_pid) gone gone
7216 -> 12540 -> 28456 bash.exe x3 gremlin's Bash tool wrappers gone gone
12920 conhost.exe console of the Bash tool gone gone
38816 python.exe the 300 s sleeper (in flight) gone gone
  • No process survived; no kill issued by me. The sleeper was alive at ~35 s after spawn and gone 5 s after the stop.
  • State after the stop: jobs/long3.json status: running, ended: null; ledger has no line for long2 or long3 (5 lines: train, rebase1, s1, s2, long). Matches SKILL.md "Stopping a gremlin".
  • The spec §7 "orphan can survive" case did not occur on Windows Git Bash: SKILL.md's "known leftover" sentence is not reproduced here (still possible on other platforms).
  • Cost: ~$0.0045 (long 0.001506; long2/long3 unrecorded, est. <= 0.0015 each). Verdict B4: ticked (Windows Git Bash; the in-flight child dies with the tree).

3. B8 non-Windows

  • wsl -l -v: Ubuntu-20.04 (WSL2, Python 3.10.12, uv present, git present); no claude binary and no ~/.claude in it.
  • cd plugins/spire/skills/gremlins && uv run --no-project --python 3.12 python -m unittest discover -s tests in WSL (uname: Linux 6.18 x86_64): 24 tests, OK, 5.6 s (same count as the Windows gate). git status clean afterwards (PYTHONDONTWRITEBYTECODE=1).
  • Live train + spawn in WSL: not run. Claude Code is not installed or signed in inside WSL; installing it is setup, which the brief forbade. Running the Windows claude.exe via interop would not test Linux.
  • Cost: $0. Verdict B8: partly (unit tests on Linux pass; the live Linux run is still open: needs claude installed and logged in inside WSL).

Totals

Spend about $0.011 (limit $1). Repo untouched except this report. Scratch repo and run state left in the scratchpad pm/. No processes of mine left running.