| 💾 Saved. d722711 k33g 7h ago | 1 | # Handoff — 2026-09-15 — `/new` slash command |
| 2 | |
| 3 | ## State |
| 4 | |
| 5 | `/new` works in both front ends and is documented in EN and FR. `go build`, `go vet` and every test pass except one pre-existing failure (below). The quality gate is configured (`.qlty/qlty.toml`, exclusions `kits/**` and `tmp/**`) and FAILS on pre-existing debt only. `.memory/` was created by this session. Nothing is committed: all of `internal/`, `main.go`, `go.mod`, `docs/`, `.qlty/`, `.quality/`, `.memory/` are untracked (only `README.md`, `git.sh`, `.tickets/*.yaml`, `.vscode/` are tracked). |
| 6 | |
| 7 | ## In flight |
| 8 | |
| 9 | Nothing on the `/new` feature itself. Agent "riker" was writing `docs/` at the same time; the pages this session edited in place (`docs/{en,fr}/reference/slash-commands.md`, `acp.md`, both `README.md`, both `explanation/architecture.md`) may be rewritten by riker — check that the `/new` rows, the "ACP mode" paragraph, the "Available commands" section and the `packages.drawio` link survived. |
| 10 | |
| 11 | ## Next steps |
| 12 | |
| 13 | 1. Decide the pre-existing test: `internal/skills/skills_test.go` `TestShippedSkillsHaveDescriptions` looks for `../../../demo/skills`; this repo has `./skills`. Changing the path to `../../skills` is a one-line fix, left to the user. |
| 14 | 2. Decide the quality debt: bump `go.mod` `go 1.25.0` → `1.26` (clears 47 of 55 osv findings), `go get -u` the indirect deps flagged (`jsonparser`, `otel`, `x/sys`), fix the 12 `errcheck` sites, and refactor `agent.Run` (complexity 121) — the last one needs tests around the REPL first. |
| 15 | 3. Verify in a real Zed that the slash menu shows `/new` (the notification is sent before the `session/new` response). |
| 16 | 4. Commit: propose one commit for code + tests + docs + `.qlty/` + `.quality/` + `.memory/` (see history entry). Not done — the skill forbids committing without an explicit request. |
| 17 | |
| 18 | ## Open questions / blockers |
| 19 | |
| 20 | - Should `/compact` also be exposed over ACP? Not asked; the code deliberately advertises only what `session/prompt` intercepts. |
| 21 | - Should `/new` over ACP also drop "allow always" grants? This session chose to keep them (same session id, same promise to the user). |
| 22 | |
| 23 | ## Watch out for |
| 24 | |
| 25 | - `qlty init` only looks at git-tracked files: it detected no Go here and enabled no Go plugin. The Go plugins were added by hand in `.qlty/qlty.toml`; do not re-run `qlty init`. |
| 26 | - qlty's default `exclude_patterns` contains `**/config/**`, which would silently hide `internal/config`. It was removed from the list; do not paste the defaults back. |
| 27 | - Inside `internal/acp`, `mm/internal/session` is imported as `history` because the package has its own `session` struct. |
| 28 | - Piped stdin to the REPL loses lines after the first (the `bufio.Reader` is re-created per iteration). Use the scripted JSON-RPC client approach (python `subprocess`, one JSON object per line) to smoke-test ACP, and expect only the first line of a piped REPL session to be read. |
| 29 | - Run Go through `bash -l -c "..."` when `go` is not on `PATH`. |
| 30 | |
| 31 | ## Addendum (same day, orchestrator) — step 3 done, root cause found |
| 32 | |
| 33 | The user tried it in Zed: "Available commands for mini-me: none". Cause: the notification went out before the `session/new` response, and Zed drops updates for a session id it does not know yet. Fixed by a `responseWriter` wrapper around the SDK's output that fires the notification after the response line is written (see `internal/acp/acp.go`, history entry of the same day). Verified on the wire with the real binary and with a pipe-driven test; still to be confirmed by the user inside Zed. If Zed still shows no commands, the next suspect is the `initialize` exchange (Zed may require `protocolVersion` ≥ 1 and reads `agentCapabilities`), not the ordering. |
| 34 | |
| 35 | ## Addendum 2 (same day, orchestrator) — `/compact` and `/abort` over ACP |
| 36 | |
| 37 | User confirmed `/new` appears in Zed after the ordering fix. `/compact` and `/abort` were added the same way (history entry of the same day). Left for the user to confirm in Zed: the two new menu entries, and `/abort` while a generation runs — Zed may not send a prompt during a running turn, in which case `/abort` will only ever say "No generation in progress" and the stop button remains the way to cancel. If so, the honest move is to drop `/abort` from `availableCommands()` rather than advertise a no-op. |
| 38 | |
| 39 | ## Addendum 3 — trap: sandbox builds clobber the Mac binary |
| 40 | |
| 41 | `go build -o mm .` in the sandbox writes a linux/arm64 ELF at the repo's `./mm`, the same path the user's `install.sh` builds and copies from. Do not run `install.sh` from the sandbox, and tell the user to rebuild natively after sandbox builds. Separately, `install.sh` copies over the installed binary in place; on Apple Silicon that can yield `Killed: 9` until the target is removed first — fix pending the user's go-ahead. |