📝 Journal: gremlins MVP built and reviewed

This commit is contained in:
2026-10-17 00:01:48 +02:00
parent b8affd82e7
commit 6d5ea32acb
@@ -234,6 +234,23 @@
- User: the MVP box list is good. Asked whether to use the current prototype to help implement it. Warned that "small / happy path first / delete what isn't needed" can backfire. Recorded the safer framing options in the brainstorm (trace to boxes, a size estimate to justify against, happy path as sequencing, unrequested surface as a finding for the user to decide).
- User decided: build the MVP by **dogfooding** the prototype's happy path. Train a base on prototype + verdict + MVP spec, spawn one gremlin per module, fall back to a plain agent if the tool misbehaves, and don't fix the prototype. Dispatched in parallel: an MVP spec writer (opus, 20 min, ≤150 lines, the module structure fixed, the safer framing) → plans/2026-10-17-00-gremlins-mvp-spec.md; the TaskStop/claude.exe check (sonnet, 10 min).
- TaskStop check (sonnet-5-5): TaskStop kills claude.exe and its bash wrappers. An in-flight grandchild command (sleep.exe) survives as an orphan and runs to completion. MVP decision: no kill command; document the orphan behaviour; a sweep is an open item. Sent to the spec writer.
- MVP spec back (claude-opus-5-5, 140 lines), committed b8affd8 (local main).
- Modules: store ~70, launch ~110, stream ~170, call ~60, cli ~200 = ~610 lines + ~300 lines of tests. Commands: init, train, spawn, rebase, status. No locks needed (single writer per file).
- Risks: B7 rebase session id may change; a hard kill can leave a job "running"; cache depends on env, cwd and the system prompt staying stable.
- 23:12 — Dispatched the MVP build orchestrator (general-purpose, opus, 90 min): new worktree branch gremlins-mvp from main; the prototype as tool and reference; one base, gremlins per module in waves (4 parallel ×2 → cli/entry → tests); a live smoke of the MVP incl. a cache hit and a parallel run; fallback to writing the code itself without fixing the prototype; a metrics report on the branch.
- 23:45 — **MVP built by gremlins in ~21 min (23:13–23:34), ~$7.22 notional.**
- One base ($1.97, 408 s) and 8 forks, all cache hits, no fallback needed.
- Branch gremlins-mvp (aff29d6..0493f03, pushed); main pushed (b8affd8 + journal).
- 972 lines of code (spec estimate 610, reasons in the gremlins' notes) + 493 lines of tests + a 54-line SKILL.md. 24 unit tests green.
- Live smoke: train → spawn with a cache hit, two ledger lines, status warm. A parallel run of two spawns via run_in_background worked.
- Not live-tested: TaskStop on an MVP spawn, rebase, the non-Windows gate.
- **This is the first real trial of the user's original model (a trained base, forked per module): it worked first time.** Contrast: the prototype took ~9 active hours for 4,155 lines.
- MVP review (claude-opus-5-5[1m], cfeb1bf, 82 lines):
- B1, B2, B3, B5, B6 ticked; B4 (live TaskStop), B7 (live rebase) and B8 (non-Windows run) only partly, since they were not verified live.
- 30 unrequested items, 15 justified by the build report. Listed, not deleted: the user decides.
- Line gap mostly form: 248 of the 362 extra lines are blanks, docstrings, comments and imports; logic is 724 vs 610.
- No real bug; `init` validates twice.
- Open items for the user: the three live checks (TaskStop, rebase, WSL/Linux), and the decision on the 15 unjustified items.
## Adepts
@@ -252,6 +269,7 @@
- Probe design (user-endorsed direction) → goal or grotto design document when document prep is done.
- The user's original Athanor model (learns plans, not code; train one implementer, fork it per subsection) is now expressible via headless forks. Not decided.
- The spawning reference (spawning-claude-code.md:56-64) has rows that today's research answers; edited on the headless-forks branch only.
- **gremlins-mvp branch** (pushed incl. review cfeb1bf): 972 lines of code, 24 tests, built by gremlins in 21 min. Open: live checks for B4 (TaskStop on an MVP spawn), B7 (rebase), B8 (WSL/Linux/mac); the user's call on the 15 unjustified unrequested items (review report §2); then Spire integration (athanor.md/implementation text) and a version decision. Not merged.
- **headless-forks branch** (pushed, ab1d945): a prototype, 4,155 + 4,235 lines, Phase 3 unreviewed, 3.8 unfinished, version bumped to 0.3.0 in WIP. Don't merge. Next step: decide between a minimal rewrite (a few hundred lines: train/spawn/wait/usage over blocking or `run_in_background` Bash calls) and the Rust app.
- **Process lessons to accrete** into Spire (not done yet; the user ended the session):
- briefs carry time and token budgets;