| 🛟 Updated. 28d5985 k33g 11h ago | 1 | # Handoff — 2026-09-01 — Tool parameters and release tooling |
| 2 | |
| 3 | ## State |
| 4 | |
| 5 | Both halves are done and green. |
| 6 | |
| 7 | **Tool parameters**: a `{{label}}` in a tools command opens a box before the command runs, one field per label, values shell-quoted unless the label ends in `...`, remembered per tool for the session. Verified in a real pty against Turbo Go. |
| 8 | |
| 9 | **Release tooling**: `01-release.tag.sh` publishes the library, `02-release.publish.sh` creates the Codeberg release page for a tag already pushed. |
| 10 | |
| 11 | **Everything is committed and released.** turbo-core v0.1.0 (`f1f0375`), turbo-go v0.2.2 (`d64410c`), turbo-rust v0.1.0 (`2d5dbec`) — the last two exactly at their HEADs, all three trees clean on `main`. Both editors depend on the published library with no active `replace`. |
| 12 | |
| 13 | Whole suite green in all three repositories; quality gate PASS at 0/0/0 everywhere. |
| 14 | |
| 15 | ## In flight |
| 16 | |
| 17 | Nothing. |
| 18 | |
| 19 | ## Next steps |
| 20 | |
| 21 | 1. **Nobody has used a parameterised tool for real work yet.** That is the next thing worth doing, and the first hour of it will find something. |
| 22 | 2. **turbo-core's next tag should pick up `bc4a464`** — the publish script and the release how-to are on `main` but not in v0.1.0. |
| 23 | 3. **Two lines of tidying in the editors' `go.mod`**, whenever something else takes you there: the commented-out replace block, whose text is now false, and the missing trailing newline. |
| 24 | |
| 25 | ## Open questions / blockers |
| 26 | |
| 27 | None. |
| 28 | |
| 29 | ## Watch out for |
| 30 | |
| 31 | - **turbo-core v0.1.0 does not contain `02-release.publish.sh`.** The tag was cut one commit earlier. Do not move it — consumers pin it and the proxy caches what it fetched; the release script refuses for that reason. Fold it into the next version. |
| 32 | - **The editors carry a commented-out `replace` whose comment is now wrong.** It says "drop it once the version above is tagged and published"; it is. Harmless, but it costs the next reader a minute. |
| 33 | |
| 34 | - **A checksum mismatch after dropping the replaces is probably a poisoned module cache, not an attack.** An earlier verification here built a hand-made `file://` proxy zip for v0.1.0, and its hash went into `$GOMODCACHE`. `rm -rf "$(go env GOMODCACHE)"/{,cache/download/}codeberg.org/turbo-editors` and re-fetch before concluding anything. |
| 35 | |
| 36 | - **`TURBO_CORE_RELEASING` is load-bearing.** The release script exports it before `make check`, and the two end-to-end tests in `release_test.go` skip themselves when they see it. Remove the export and a real release recurses until something runs out — which is how it was found, by hanging. |
| 37 | - **`release.env` holds a live Codeberg token.** `.gitignore` covers `*.env`, and `copyModuleInto` in `release_test.go` skips `*.env` so no test carries it into a temporary directory. Keep both. |
| 38 | - **Double braces are not a style choice.** A falsification run with single braces turned `awk '{print $1}'` into `awk ''''`. `TestSingleBracesAreNotPlaceholders` is what holds it. |
| 39 | - **`Fill` re-scans the command rather than using what `Placeholders` returned.** That is deliberate: a label written `{{x}}` in one place and `{{x...}}` in another is asked for once and substituted according to each occurrence's own braces. |
| 40 | - **The popup's title is the filled command**, because `tools.Start` records what it was given. If you change `runCaptured` back to `tool.Command`, the title will lie about what ran and two tests will say so. |
| 41 | - **`MaxParameterFields` is computed from the screen, not a constant.** A test pins the value for a 24-row terminal; if you change `parameterChrome`, that number changes with it. |