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

47 lines
4.4 KiB
Markdown

# 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.