| 📦 Turbo Rust 713ea5c k33g 14h ago | 1 | # Handoff — 2026-09-01 — Turbo Rust, first build |
| 2 | |
| 3 | ## State |
| 4 | |
| 5 | The editor exists and works. Whole suite green, quality gate PASS at 0/0/0 with complexity 98, binary builds and runs, and completion has been driven against a real rust-analyzer. |
| 6 | |
| 7 | Documentation is 33 pages × EN + FR, with a drawio diagram generated from `go list`. |
| 8 | |
| 9 | Everything is **uncommitted**, on `main`. |
| 10 | |
| 11 | ## In flight |
| 12 | |
| 13 | Nothing. |
| 14 | |
| 15 | ## Next steps |
| 16 | |
| 17 | 1. **Commit turbo-core first**, then this repository. Turbo Rust does not build without the library beside it. |
| 18 | 2. **Once turbo-core is tagged**, drop the `replace` directive from `go.mod` and run `make test`. |
| 19 | 3. **Use it for an afternoon.** Nobody has. Everything here is verified by tests and scripted pty runs; the first hour of real editing will find something. |
| 20 | 4. **Point the scanner at a large real crate.** It has met one demo file and a broad sweep in a test. |
| 21 | 5. Ticket 0001 in `turbo-editors/.tickets` is the user's to close. |
| 22 | |
| 23 | ## Open questions / blockers |
| 24 | |
| 25 | None. |
| 26 | |
| 27 | ## Watch out for |
| 28 | |
| 29 | - **rustup's shim is not rust-analyzer.** `~/.cargo/bin/rust-analyzer` exists on every machine that has rustup and fails with `Unknown binary 'rust-analyzer' in official toolchain` only when run. Anything that checks for the server must execute it, not stat it — the end-to-end test lost thirty seconds to this before it was understood. |
| 30 | - **rust-analyzer answers an empty list until it has loaded the workspace**, and says so with a `$/progress` notification this client does not read. The end-to-end test asks again on a loop for up to ninety seconds. Do not "simplify" that into a single request. |
| 31 | - **Two of the scanner's dispatch cases must come before the generic ones.** `:` is an operator rune and `.` is a punctuation rune, so `::` and `..` are claimed explicitly first. Moving them down the switch silently changes their colour. |
| 32 | - **A lifetime must be emitted as one span.** It was two — the name, then the quote before it — and the editor draws spans in order and assumes they do not overlap, so it painted wrongly rather than failing. `TestSpansOnALineAreOrderedAndDoNotOverlap` is what caught it. |
| 33 | - **`reference_test.go` holds the documentation to the code.** If you change what the scanner colours, that test tells you which sentence in `docs/*/reference/languages.md` you have just made false. The `MAX_SIZE` case documents a *limitation* on purpose — do not "fix" it without also fixing the sentence. |
| 34 | - **The templates are tested here, not in the library.** turbo-core tests that `Create` writes the profile's template; that Build runs `cargo build` and that no template still says `turbo-go` is this repository's test. |
| 35 | - **`02-release.publish.sh` and `04-release.upload-binaries.sh` have never been run**, here or in turbo-go. They publish to Codeberg. `02` also still has no `set -e`, and must not simply be given one: its `read -r -d '' DATA` idiom always exits non-zero by design. |