| 📦 Turbo Go 3d7798b k33g 12h ago | 1 | # Handoff — 2026-09-15 — ACP agent windows |
| 2 | |
| 3 | ## State |
| 4 | |
| 5 | **Done and working.** Branch `feature/acp`, created locally, **not committed and not pushed**. The companion branch of the same name in **turbo-core** holds the actual feature; read that repository's handoff of the same date first — it has the traps. |
| 6 | |
| 7 | `make test` is green here **for the first time since 2026-09-03**: four assertions in `internal/golang/templates_test.go` had been describing a starter tools file that changed under them, and fixing them was step zero of this cycle. |
| 8 | |
| 9 | The feature was driven against the user's own stack (`docker agent` v1.139.0 → llama.cpp → JetBrains Mellum2) by running `./bin/turbo-go` in a pty. Seen working: `Alt-A`, the menu built from `.turbo-go/acp.toml`, the window, a streamed reply, a shell tool call with its permission dialog, and Go code in a fence coloured by this editor's own scanner. |
| 10 | |
| 11 | ## In flight |
| 12 | |
| 13 | Nothing. |
| 14 | |
| 15 | ## Next steps |
| 16 | |
| 17 | 1. Read the diff here — it is small: one template, one profile field, six doc pages. |
| 18 | 2. **turbo-core has to be released first.** This repository cannot build against an unreleased library from a clean clone. Order: tag and release turbo-core → `go get codeberg.org/turbo-editors/turbo-core@vX.Y.Z` here → **`GOWORK=off make check`** → tag and release this. |
| 19 | 3. Try it by hand. Nothing below has been touched by a person. |
| 20 | |
| 21 | ## Watch out for |
| 22 | |
| 23 | - **`go.work` is what makes the two repositories build together**, and it is gitignored, so nothing can be forgotten before committing. `GOWORK=off` is the only way to see what a clean clone sees — run it before calling anything finished. Do **not** run `go mod tidy` here while the workspace is active: it can write unpublished versions into `go.mod`. |
| 24 | - **The sandbox's filesystem corrupts `cp` for some recently-written inodes** — the file is right through `cat`, `git`, `gofmt` and `go build`, and comes out of `cp` as pure NUL bytes at the correct length. It bit `turbo-core`'s `release_test.go`, which copies the module with `cp -r`. Recreating the file at a fresh inode fixes it. Git stores the correct bytes; verified. |
| 25 | - **The template takes two blanks, not one** — `%[1]s` the project directory and `%[2]s` the user-level path — and `fmt.Sprintf` writes `%!s(MISSING)` into the output rather than failing. `TestTheCreatedAgentsFileFillsBothOfItsBlanks` is what catches a miscount. |
| 26 | - **`.turbo-go/acp.toml` and `.turbo-go/agent.yaml` were written into this repository while testing.** They are working files, not part of the feature — decide whether to keep them or delete them before committing. |
| 27 | - **A doc page written before the code is a design document.** Three claims in these pages were wrong by the time the code existed. They were corrected against the running binary, but the lesson is the ordering: re-read every such page line by line against the code before treating it as documentation. |
| 28 | |
| 29 | ## Never touched by a human |
| 30 | |
| 31 | The mouse in an agent window; `Tab` between the panes on a real keyboard; resizing during a turn; two agents tiled side by side; a conversation long enough for the per-frame re-wrap to matter. |
| 32 | |
| 33 | ## Open questions |
| 34 | |
| 35 | - Keep `.turbo-go/acp.toml` and `.turbo-go/agent.yaml` in the repository as a worked example, or delete them? |
| 36 | - The other six editors each need one `acp.toml.tmpl` and one `profile.Templates.Agents` line. Do them all at once, or as each is next touched? |