| 📦 Turbo Golo d710c1b k33g 21h ago | 1 | # Handoff — 2026-09-14 — Turbo Golo, first build |
| 2 | |
| 3 | ## State |
| 4 | |
| 5 | The editor is complete and green. `make check` passes (250 tests, 0 skipped with `golo` on PATH), the quality gate passes, the documentation is complete in both languages, the root `README.md` is written, and the tutorial has been driven through a pty. Nothing is in flight. |
| 6 | |
| 7 | The working tree is **uncommitted**: everything sits untracked on `main` at `7069d2c`, the initial commit. No commit was asked for. |
| 8 | |
| 9 | ## How this got here |
| 10 | |
| 11 | Two sessions on the same day. The first built everything and **ended before writing `.memory/`** — its only record was `/tmp/tg/FACTS.md` (its fact sheet for the docs), the pty dumps `/tmp/tg/*.raw`, and the drivers `/tmp/tg/pty_run.py` / `screen.py` / `wire.py`. The second session found the state from disk, wrote the missing French tutorial, the README and this memory, and registered the editor in the family. `/tmp` will not survive the sandbox; everything worth keeping from `FACTS.md` is now in `summary.md`. |
| 12 | |
| 13 | ## What was touched outside this repository |
| 14 | |
| 15 | Three sibling repositories were edited, each with its own history entry and handoff, and each needs its own commit: |
| 16 | |
| 17 | - **turbo-core** — `README.md`, `docs/{en,fr}/README.md`, `docs/{en,fr}/how-to/test-without-publishing.md`, `profile/profile.go` (comment only), `.memory/summary.md`. Five editors now. Its `.go` strings were swept; **no code change**. |
| 18 | - **turbo-python** — `docs/{en,fr}/explanation/architecture.md`, "all four editors" → five. |
| 19 | - **turbo-moonbit** — the same sentence. **Its tree also carries the user's own uncommitted change** to `demos/hello/.turbo-moonbit/settings.toml`, which predates this work. |
| 20 | |
| 21 | ## Next steps |
| 22 | |
| 23 | 1. **Commit** — this repository, turbo-core, turbo-python, turbo-moonbit. |
| 24 | 2. **Run a mutation pass over the tests before tagging.** No record says the first session did; every sibling's first session did. The scanner, the templates, the diagram test and the LSP tests are the four suites to break on purpose. `/tmp/falsify*.py` from turbo-moonbit's session show the in-process pattern (never a shell `cp` round trip — see that repository's handoff). |
| 25 | 3. **Tag `v0.1.0`.** `release.env` already says so. `01-release.tag.sh` runs `make check` and refuses a live `replace`; it should go through as it stands. |
| 26 | |
| 27 | ## Watch out for |
| 28 | |
| 29 | - **`golo` must be on PATH for the suite to mean anything.** The `golo lsp` tests skip themselves without it, and under `-short`. A green `go test -short ./...` proves nothing about the server. Here it is `/home/agent/bin/golo`, v0.1.1. |
| 30 | - **`golo` with no argument is the REPL**, reading stdin as Golo. The `lsp` in `ServerArgs()` is load-bearing; dropping it looks like a server that never answers and never dies. |
| 31 | - **`docs/*/reference/languages.md` is read by `reference_test.go`.** Reformatting that table breaks the test rather than the docs. |
| 32 | - **The builtins table is held to the real server's list.** A newer GoloScript that adds a builtin fails that test on purpose; update the table, do not loosen the test. |
| 33 | - **"Golo" is the language, "GoloScript" the implementation.** The docs keep the distinction everywhere; a mechanical edit that writes "GoloScript file" is wrong. |
| 34 | - **The Golo menu's `Run` asks which script to run** — there is no manifest, so nothing else could know. Six of the eight tools ask for something; that is the design, not an omission. |
| 35 | - **The user is on macOS; this sandbox is Linux.** `/tmp/tg/turbo-golo` is an ELF built for the pty run and lives outside the tree on purpose. Never leave a binary in `bin/`. |
| 36 | - **`cp` onto an existing file under `~/.claude/skills/` produced a file made entirely of NUL bytes, twice** — once over the old file and once after `rm`. Writing the bytes from Python (`open(dst,'wb').write(open(src,'rb').read())`) worked; verify with `cmp` afterwards. turbo-moonbit's handoff records the same filesystem doing this to Go sources during a `cp` round trip. Do not trust a `cp` on this sandbox without a `cmp`. |