turbo-editors/turbo-pythonpublic Fork 0
v1.0.2
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-python.git
git clone ssh://git@rickub.com/turbo-editors/turbo-python.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

📦 Turbo Python 6fc62ea · on v1.0.2 · k33g · 11h ago
history.md · 104 lines · 18.4 KBmarkdown
Blame HistoryOpen raw

History

One dated entry per session, appended. Never rewritten.

2026-09-03 — Turbo Python built, from an empty repository to a complete editor

  • Goal: /turbo-new-editor Python ./turbo-python — a third editor in the family, on turbo-core v0.4.0, without forking anything.
  • Shape: Python has no Go lexer worth using, so this followed turbo-rust/internal/rustlang — a hand-written scanner against syntax.LineScanner, a line at a time, rather than turbo-go's byte-offset conversion.
  • Decisions put to the user: the menu label ~P~ython over P~y~thon/Py~t~hon; pylsp over pyright and ruff-lsp; pyproject.toml then setup.py then setup.cfg as root markers; and the six starter commands, all through uv.
  • Changes: main.go; internal/pythonlang/ (profile, scan.go, literals.go, words.go, three embedded .tmpl starter files); Makefile, scripts/install.sh, scripts/check-version.sh and the four numbered release scripts; 33 documentation pages in each of EN and FR; a root README.md.
  • Scanner decisions: a name wholly in capitals is a constant, any other capitalised name a type — Turbo Rust has only the second rule and documents SCREAMING_SNAKE_CASE as a known wrong answer, and PEP 8 separates the conventions well enough that the wrong answer was worth removing rather than inheriting. A capitalised name is a type even when it is called, which is the one rule the two editors deliberately order differently. self and cls are builtins although the language does not name them. An f-string is one span, braces included.
  • The [all] in the install hint is not cosmetic: installed bare, pylsp starts, completes and jumps, and publishes an empty diagnostics list for a file that does not parse, because the linters that produce them are extras. A gutter blank for want of a linter and a gutter blank for want of a bug look identical.
  • Four server directories besides PATH — the active virtualenv, ~/.local/bin, pyenv's shims, and every ~/Library/Python/<version>/bin that exists. Profile() is a function rather than a variable because of the first: a variable would freeze whatever VIRTUAL_ENV said at link time.
  • Tests: 129, including one entry per line, spans in order and non-overlapping, broken source still colouring, one per construct and one per thing the scanner deliberately refuses; the templates' formatting contract counted and filled; and five that drive a real pylsp end to end — completion typed into the buffer rather than read off disk, references, the file's symbols, diagnostics on a file that does not parse, and an assertion that pylsp answers neither implementations nor project-wide symbols.
  • Quality: PASS 0/0/0, total complexity 91. One smell in the first run, gone in the second.
  • The documentation was adapted from Turbo Rust's, and adapting is not substituting. A mechanical pass left, invisibly to every test: a package diagram still labelled internal/rustlang and "the Rust scanner" with host="turbo-rust"; a tutorial that had the reader type Rust code into a Python file and claimed Rust's colours for it; crate/caisse in five pages; golangci-lint and go vet in the tools how-to and in the French tools explanation, whose English twin had been rewritten properly; switch and if err != nil in the snippets explanation; and — the mirror image of the defect the skill warns about — the English menus reference saying project menus appear "between Go and Help" while the French one said Python. All fixed in both languages.
  • Three claims were stale because the library moved, not because of the copy: the menu bar listing omitted the Code menu in both languages and in the tutorial, and the tutorial's "press → four times to reach Options" was one press short for the same reason.
  • Two commands in the docs did not exist: uv update and uv init --bin. Replaced with uv lock --upgrade and uv init --app, checked against uv 0.9.26.
  • The tutorial was rewritten and then run, verbatim, in a pty against a real uv init project: every colour claim read back off the terminal as an SGR code, every key count re-counted, uv run main.py's real first-run output pasted in, and a new paragraph explaining the ! the language server puts in the gutter for E305.
  • A Python-specific fact the copied text hid: Enter copies the current line's indentation and does not add a level after a colon. In a language whose blocks are indentation, that is worth a sentence in the tutorial and a rewritten paragraph in the snippets explanation, where re-indenting is a correctness matter rather than a nicety.
  • diagram_test.go is new, and holds the drawio to go list: the boxes are exactly the packages the module imports, every arrow out of our two packages is a real import, the host attribute names this project, and no label names another editor's language. All four falsified against the four ways the copied diagram was wrong.
  • Verified in a real pty, beyond the tests: the Python menu under Alt-P with Create tools file at 30;42 and Open tools file greyed at 90;47; the About box reading "A Turbo C-style editor for Python"; a triple-quoted f-string carried across a line break; Ctrl-Y deleting a line; the theme dialog opening on the current theme; the server found in ~/.local/bin with PATH stripped, and the install hint on the status bar when it is not findable at all. And a file that does not parse, opened by a relative path, showing × in the gutter and ⚠ invalid syntax on the status bar — the failure mode Turbo Go shipped with for months.
  • Registered in the family: turbo-core's README.md, docs/{en,fr}/README.md, profile/profile.go's package comment, how-to/release-the-library.md, how-to/test-without-publishing.md, how-to/write-the-starter-files.md, explanation/architecture.md and .memory/summary.md; plus the "both editors" claims in turbo-go's and turbo-rust's architecture explanations. History in those repositories was left alone: "wrong the moment there were two editors" is a true sentence about the past.
  • turbo-core's .go strings were swept for hardcoded language names. Every hit was a false positive (Go to definition), a doc-comment example of the seam, or a true statement about the implementation (written in Go.). Nothing to fix — the About box's language had already been moved into the profile.
  • The adaptation found defects in the editor it was adapted from. turbo-rust's English reference/menus.md said project menus appear "between Go and Help", twice; both siblings' tutorials listed a menu bar without the Code menu and told the reader to press four times to reach Options, which has been five since that menu shipped; turbo-go's listing was missing Snippets and its own Go menu as well. All fixed in both languages, in both repositories, each with its own history entry and handoff.
  • Left for the user: nothing is committed, here or in the three repositories beside it. This tree is untracked on main at efb533c.

2026-09-03 (later) — released as v0.1.0, and re-verified against turbo-core v0.4.1

  • The user committed, tagged and pushed all four repositories between sessions: turbo-python v0.1.0 (bccbb0b), turbo-core v0.4.1 (4f93fb0), turbo-go v0.4.2, turbo-rust v0.4.2. Everything written in the entry above is in those tags.
  • turbo-core v0.4.1 changes one .go file and it is a commentprofile/profile.go's package doc, which counted the editors. No behaviour change, so nothing in this editor's documentation is affected by the bump.
  • Re-verified at the new HEAD: go.mod now requires v0.4.1 with no active replace; gofmt -l clean, go build ./... clean, go test ./... green in both packages against the freshly downloaded module.
  • .memory/summary.md corrected in place: the pinned version, and the two claims that had become false — "nothing is committed" and "no release". The handoff was left alone, because a handoff records what was true when it was written.

2026-09-09 — a documentation defect a fourth editor exposed

  • Goal: none of its own. This repository was the worked example for turbo-moonbit, and adapting it surfaced a defect here.
  • Changes: Alt-TAlt-P in ten files across both languages — reference/python-tools.md, reference/menus.md, reference/keyboard.md and how-to/run-uv-commands.md. The Python menu is ~P~ython and answers to Alt-P; Alt-T is Turbo Rust's, from Rus~t~, and it survived the mechanical substitution that produced these pages because it is not an identifier. A sentence about custom-menu hot keys ("Format gets Alt-M") was wrong for the same reason and was rewritten. "all three editors" → "all four" in the architecture explanation, both languages.
  • Decisions: fixed here rather than left, because it is a two-line-per-file correction in somebody else's repository — exactly the kind of change that is invisible afterwards if it is not written down.
  • Tests: none added here. turbo-moonbit gained TestTheToolsReferenceMatchesTheStarterFile, which reads the tools table out of its own reference pages and holds it to the file the editor writes, hot key included. Copying that test across is the way to stop this recurring, and it is perhaps twenty minutes.
  • Not done: nothing else in this repository was touched, and its suite was not re-run.

2026-09-09 (later) — the theme list gained three entries

  • Goal: none of its own. turbo-core gained monochrome-light, darcula and intellij-light, and renamed monochrome to monochrome-dark; this repository's documentation had to follow. Eleven themes ship now.
  • Changes: docs/{en,fr}/reference/themes.md — the embedded list, three new table rows, and a new "a name a theme used to answer to" section saying monochrome still loads; docs/{en,fr}/how-to/write-a-theme.md — the inherit-from advice and the shipped-theme count; README.md's themes bullet. No code change.
  • History was left alone: "comments were the dimmest colour in six of the eight shipped themes" in write-a-theme.md is a true sentence about when that rule was written.
  • Not yet true of the binary. This repository pins turbo-core v0.4.2, which ships eight themes. The documentation is ahead until turbo-core is tagged and the go.mod here is bumped — see turbo-core's handoff of the same date.

2026-09-14 — the family count moved from four to five

  • Asked: nothing of this repository. Turbo Golo was built beside it, and docs/{en,fr}/explanation/architecture.md said the library's packages are used unchanged by "all four editors".
  • Changes: that one sentence, in both languages — four → five. No code touched; no tests run.

2026-09-15 — ACP agent windows, ported from turbo-go

  • Goal: carry the Agent Client Protocol support to this editor. The feature itself is turbo-core's — the protocol client, the conversation model, the window widget, the Agent menu and the permission dialog all live there. See turbo-core's history for the same date.
  • Changes: internal/*/acp.toml.tmpl, embedded in templates.go and wired into profile.Templates.Agents. That is the entire code change — one file and one line. Plus six documentation pages (EN + FR: how-to, reference, explanation) and their index entries.
  • Decisions: the example agent is docker agent, as in every other editor, because the protocol is the point and the agent is the user's choice; the one sentence in the starter file that is about this editor names its own fence, and a test holds it to that — a starter file copied from another editor and left naming that editor's language is the obvious way to get this port wrong.
  • Tests: 5 new in internal/*: both blanks filled with no %! marker, the file loads back as exactly one agent, it explains its keys, it names this editor's own language, and creating it twice leaves the first alone.
  • Quality: PASS 0/0/0.
  • Docs: adapted rather than copied — the slug, the language, the fence, the build command and the language server all differ from turbo-go's, and each was replaced.
  • Not committed.

2026-09-15 (night) — slash commands and @ mentions, documented

  • Documentation and the starter file only in this repository; the code is turbo-core's (see its .memory/ of the same date). The user asked for the ACP changes that let an agent's commands be discovered the way Zed discovers them, then for @ as a file selector.
  • Changes: docs/{en,fr}/reference/acp.md — seven key rows for the list, a Commands and mentions section, the session/prompt and available_commands_update rows, the Limits bullet; docs/{en,fr}/how-to/talk-to-an-agent.md — "Use the agent's own commands" and "Point the agent at a file"; docs/{en,fr}/explanation/agent-windows.md — the "left out" bullet narrowed to images, two sections appended; the embedded acp.toml.tmpl — two key lines. Applied by one script across the five editors with an exactly-once anchor check.
  • Tests: go test ./... green (the template change is a comment; the tests that read the created file still pass).
  • Ahead of the binary: this repository pins turbo-core v0.7.0, which has none of this. The pages are true once turbo-core is tagged and the pin moved.
  • Not committed.

2026-09-16 — the trace variable and a troubleshooting bullet, documented

  • turbo-core gained TURBO_ACP_TRACE=<file> and an "update this editor could not read" line in Agent status, because the user saw no / commands from their own agent and nothing on screen could say why. Documented here EN + FR: a bullet in the how-to's Variants, a section in reference/acp.md. Docs only; not committed.
  • Later on 2026-09-16: .turbo-python/acp.toml (and agent.yaml, docker agent's config copied from turbo-go) now hold two agents — Bob (llama.cpp) via docker agent serve acp, and the user's mini-me (llama.cpp) (mm -acp, AGENT_CONFIG env) — placed where this repository's demo project already keeps its settings. Verified to load as two agents with this editor's own Profile(); not opened, mm and docker are on the user's Mac. Working files for trying the / picker, not part of the feature.

2026-09-16 — family count: a sixth editor, Turbo JS

  • Asked: nothing of this repository directly. Turbo JS was built beside it, and the sentences here that count the family went false the moment it existed.
  • Changes: docs/en/explanation/architecture.md, docs/fr/explanation/architecture.md — "five editors" → six. Nothing else touched; history left as it was.
  • Tests: none affected — documentation only.

2026-09-17 — documentation: terminal windows and tools on Windows

  • Asked: nothing of this repository directly. turbo-core gained pseudo-console (ConPTY) terminal windows and a per-platform tools shell (cmd.exe on Windows); the pages here that said "Linux and macOS" or /bin/sh -c went false the moment that landed.
  • Changes (EN + FR): README.md (terminal windows: Linux, macOS and Windows), docs/*/reference/terminal.md (shell row, controlling-terminal row, platform table, error row), docs/*/explanation/terminal-windows.md (the Windows section rewritten: a pseudo-console and why it is a file of its own, built and vetted but not yet run), docs/*/how-to/use-a-terminal.md (%COMSPEC%, the five things to try first on Windows), docs/*/reference/python-tools.md (shell row, cmd.exe's globs and ;, error row), docs/*/explanation/python-tools.md (cmd.exe /S /C). Applied by one script across the six editors, one anchor per file.
  • Not changed: code, go.mod. The documentation is ahead of the binary until turbo-core is tagged (v0.9.0) and re-pinned here; the feature has never been run on Windows by anyone.
  • Tests: none affected — documentation only.

2026-09-18 — the "Untitled window has no LSP" fix: docs variant added, fix is turbo-core's

  • Asked: propagate to every editor the fix made in turbo-core the same day — saving now announces a document the server does not know (a window that started Untitled gets LSP from its first save), and Save As under a new name closes the old document. See turbo-core's .memory/history.md of 2026-09-18 for the defect and the fix.
  • Changes here: docs/{en,fr}/how-to/enable-completion.md gain one variant — completion in a window that started without a name works from its first save, no relaunch needed. No code in this repository is involved.
  • Quality: gate not re-run — a Markdown-only change; the gate measures the Go code.
  • Docs ahead of the binary: the behaviour arrives only when turbo-core is tagged and this editor re-pinned. Not committed.

2026-09-19 — moved to Rickub: turbo-core v1.0.0 re-pinned, releases published by a workflow

  • Asked: the same migration turbo-go received the same day, for all five remaining editors — turbo-core moved to rickub.com and was published as v1.0.0 with a Release workflow.
  • Changes, module: codeberg.org/turbo-editorsrickub.com/turbo-editors in go.mod, every .go file, Makefile, scripts/install.sh, README.md, docs/{en,fr}, .memory/summary.md (turbo-core deep links also from Codeberg's src/branch/main/ to blob/main/). require rickub.com/turbo-editors/turbo-core v1.0.0; go mod tidy with GOWORK=off rewrote go.sum from the proxy.
  • Changes, release tooling: .github/workflows/release.yml (new), 01-release.tag.sh (rewritten), 03-build-releases.sh02-build-releases.sh (tag from $1, validation, replace check, fresh release/${TAG}/, go install line in the README, no hand-off to 04), 02-release.publish.sh and 04-release.upload-binaries.sh deleted, release.env rewritten (TAG="v1.0.0", ABOUT="Turbo Python"). All generated from turbo-go's final files with the names substituted; the README paragraph naming this editor's language server and the example file (main.py) kept from the old 03. Docs: the release section and the wrong-commit variant of docs/{en,fr}/how-to/make-a-release.md rewritten.
  • Tests: release_test.go regenerated from turbo-go's — see summary.md. The file-writing helper is writeTestFile because turbo-python's main_test.go owns writeFile, and the command helper runOrFail because main.go owns run.
  • Not done: nothing committed or pushed — no commit exists yet and origin is unreachable from the sandbox. The workflow has not run on Rickub for this editor; turbo-go's identical one has, and published.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
# History

One dated entry per session, appended. Never rewritten.

## 2026-09-03 — Turbo Python built, from an empty repository to a complete editor

- **Goal**: `/turbo-new-editor Python ./turbo-python` — a third editor in the family, on turbo-core v0.4.0, without forking anything.
- **Shape**: Python has no Go lexer worth using, so this followed `turbo-rust/internal/rustlang` — a hand-written scanner against `syntax.LineScanner`, a line at a time, rather than turbo-go's byte-offset conversion.
- **Decisions put to the user**: the menu label `~P~ython` over `P~y~thon`/`Py~t~hon`; `pylsp` over pyright and ruff-lsp; `pyproject.toml` then `setup.py` then `setup.cfg` as root markers; and the six starter commands, all through `uv`.
- **Changes**: `main.go`; `internal/pythonlang/` (profile, `scan.go`, `literals.go`, `words.go`, three embedded `.tmpl` starter files); `Makefile`, `scripts/install.sh`, `scripts/check-version.sh` and the four numbered release scripts; 33 documentation pages in each of EN and FR; a root `README.md`.
- **Scanner decisions**: a name wholly in capitals is a **constant**, any other capitalised name a **type** — Turbo Rust has only the second rule and documents `SCREAMING_SNAKE_CASE` as a known wrong answer, and PEP 8 separates the conventions well enough that the wrong answer was worth removing rather than inheriting. A capitalised name is a type **even when it is called**, which is the one rule the two editors deliberately order differently. `self` and `cls` are builtins although the language does not name them. An f-string is **one span**, braces included.
- **The `[all]` in the install hint is not cosmetic**: installed bare, pylsp starts, completes and jumps, and publishes an *empty* diagnostics list for a file that does not parse, because the linters that produce them are extras. A gutter blank for want of a linter and a gutter blank for want of a bug look identical.
- **Four server directories besides `PATH`** — the active virtualenv, `~/.local/bin`, pyenv's shims, and every `~/Library/Python/<version>/bin` that exists. `Profile()` is a function rather than a variable because of the first: a variable would freeze whatever `VIRTUAL_ENV` said at link time.
- **Tests**: 129, including one entry per line, spans in order and non-overlapping, broken source still colouring, one per construct and one per thing the scanner deliberately refuses; the templates' formatting contract counted and filled; and five that drive a **real pylsp** end to end — completion typed into the buffer rather than read off disk, references, the file's symbols, diagnostics on a file that does not parse, and an assertion that pylsp answers neither implementations nor project-wide symbols.
- **Quality**: PASS 0/0/0, total complexity 91. One smell in the first run, gone in the second.
- **The documentation was adapted from Turbo Rust's, and adapting is not substituting.** A mechanical pass left, invisibly to every test: a package diagram still labelled `internal/rustlang` and "the Rust scanner" with `host="turbo-rust"`; a tutorial that had the reader type **Rust code** into a Python file and claimed Rust's colours for it; `crate`/`caisse` in five pages; `golangci-lint` and `go vet` in the tools how-to and in the *French* tools explanation, whose English twin had been rewritten properly; `switch` and `if err != nil` in the snippets explanation; and — the mirror image of the defect the skill warns about — the **English** menus reference saying project menus appear "between Go and Help" while the French one said Python. All fixed in both languages.
- **Three claims were stale because the library moved**, not because of the copy: the menu bar listing omitted the **Code** menu in both languages and in the tutorial, and the tutorial's "press → four times to reach Options" was one press short for the same reason.
- **Two commands in the docs did not exist**: `uv update` and `uv init --bin`. Replaced with `uv lock --upgrade` and `uv init --app`, checked against `uv 0.9.26`.
- **The tutorial was rewritten and then run**, verbatim, in a pty against a real `uv init` project: every colour claim read back off the terminal as an SGR code, every key count re-counted, `uv run main.py`'s real first-run output pasted in, and a new paragraph explaining the `!` the language server puts in the gutter for `E305`.
- **A Python-specific fact the copied text hid**: `Enter` copies the current line's indentation and does **not** add a level after a colon. In a language whose blocks *are* indentation, that is worth a sentence in the tutorial and a rewritten paragraph in the snippets explanation, where re-indenting is a correctness matter rather than a nicety.
- **`diagram_test.go` is new**, and holds the drawio to `go list`: the boxes are exactly the packages the module imports, every arrow out of our two packages is a real import, the `host` attribute names this project, and no label names another editor's language. All four falsified against the four ways the copied diagram was wrong.
- **Verified in a real pty**, beyond the tests: the Python menu under `Alt-P` with `Create tools file` at `30;42` and `Open tools file` greyed at `90;47`; the About box reading "A Turbo C-style editor for **Python**"; a triple-quoted f-string carried across a line break; `Ctrl-Y` deleting a line; the theme dialog opening on the current theme; the server found in `~/.local/bin` with `PATH` stripped, and the install hint on the status bar when it is not findable at all. And **a file that does not parse, opened by a relative path**, showing `×` in the gutter and `⚠ invalid syntax` on the status bar — the failure mode Turbo Go shipped with for months.
- **Registered in the family**: turbo-core's `README.md`, `docs/{en,fr}/README.md`, `profile/profile.go`'s package comment, `how-to/release-the-library.md`, `how-to/test-without-publishing.md`, `how-to/write-the-starter-files.md`, `explanation/architecture.md` and `.memory/summary.md`; plus the "both editors" claims in turbo-go's and turbo-rust's architecture explanations. History in those repositories was left alone: "wrong the moment there were two editors" is a true sentence about the past.
- **turbo-core's `.go` strings were swept** for hardcoded language names. Every hit was a false positive (`Go to definition`), a doc-comment example of the seam, or a true statement about the implementation (`written in Go.`). Nothing to fix — the About box's language had already been moved into the profile.
- **The adaptation found defects in the editor it was adapted from.** turbo-rust's English `reference/menus.md` said project menus appear "between **Go** and Help", twice; both siblings' tutorials listed a menu bar without the Code menu and told the reader to press `→` four times to reach Options, which has been five since that menu shipped; turbo-go's listing was missing Snippets and its own Go menu as well. All fixed in both languages, in both repositories, each with its own history entry and handoff.
- **Left for the user**: nothing is committed, here or in the three repositories beside it. This tree is untracked on `main` at `efb533c`.

## 2026-09-03 (later) — released as v0.1.0, and re-verified against turbo-core v0.4.1

- The user committed, tagged and pushed all four repositories between sessions: turbo-python **v0.1.0** (`bccbb0b`), turbo-core **v0.4.1** (`4f93fb0`), turbo-go **v0.4.2**, turbo-rust **v0.4.2**. Everything written in the entry above is in those tags.
- **turbo-core v0.4.1 changes one `.go` file and it is a comment** — `profile/profile.go`'s package doc, which counted the editors. No behaviour change, so nothing in this editor's documentation is affected by the bump.
- **Re-verified at the new HEAD**: `go.mod` now requires `v0.4.1` with no active `replace`; `gofmt -l` clean, `go build ./...` clean, `go test ./...` green in both packages against the freshly downloaded module.
- `.memory/summary.md` corrected in place: the pinned version, and the two claims that had become false — "nothing is committed" and "no release". The handoff was left alone, because a handoff records what was true when it was written.

## 2026-09-09 — a documentation defect a fourth editor exposed

- **Goal**: none of its own. This repository was the worked example for turbo-moonbit, and adapting it surfaced a defect here.
- **Changes**: `Alt-T``Alt-P` in ten files across both languages — `reference/python-tools.md`, `reference/menus.md`, `reference/keyboard.md` and `how-to/run-uv-commands.md`. The Python menu is `~P~ython` and answers to `Alt-P`; `Alt-T` is Turbo Rust's, from `Rus~t~`, and it survived the mechanical substitution that produced these pages because it is not an identifier. A sentence about custom-menu hot keys ("`Format` gets `Alt-M`") was wrong for the same reason and was rewritten. "all three editors" → "all four" in the architecture explanation, both languages.
- **Decisions**: fixed here rather than left, because it is a two-line-per-file correction in somebody else's repository — exactly the kind of change that is invisible afterwards if it is not written down.
- **Tests**: none added here. turbo-moonbit gained `TestTheToolsReferenceMatchesTheStarterFile`, which reads the tools table out of its own reference pages and holds it to the file the editor writes, hot key included. **Copying that test across is the way to stop this recurring**, and it is perhaps twenty minutes.
- **Not done**: nothing else in this repository was touched, and its suite was not re-run.

## 2026-09-09 (later) — the theme list gained three entries

- **Goal**: none of its own. turbo-core gained `monochrome-light`, `darcula` and `intellij-light`, and renamed `monochrome` to `monochrome-dark`; this repository's documentation had to follow. Eleven themes ship now.
- **Changes**: `docs/{en,fr}/reference/themes.md` — the embedded list, three new table rows, and a new "a name a theme used to answer to" section saying `monochrome` still loads; `docs/{en,fr}/how-to/write-a-theme.md` — the inherit-from advice and the shipped-theme count; `README.md`'s themes bullet. No code change.
- **History was left alone**: "comments were the dimmest colour in six of the eight shipped themes" in `write-a-theme.md` is a true sentence about when that rule was written.
- **Not yet true of the binary.** This repository pins turbo-core v0.4.2, which ships eight themes. The documentation is ahead until turbo-core is tagged and the `go.mod` here is bumped — see turbo-core's handoff of the same date.

## 2026-09-14 — the family count moved from four to five

- **Asked**: nothing of this repository. Turbo Golo was built beside it, and `docs/{en,fr}/explanation/architecture.md` said the library's packages are used unchanged by "all four editors".
- **Changes**: that one sentence, in both languages — four → five. No code touched; no tests run.

## 2026-09-15 — ACP agent windows, ported from turbo-go

- **Goal**: carry the Agent Client Protocol support to this editor. The feature itself is turbo-core's — the protocol client, the conversation model, the window widget, the `Agent` menu and the permission dialog all live there. See turbo-core's history for the same date.
- **Changes**: `internal/*/acp.toml.tmpl`, embedded in `templates.go` and wired into `profile.Templates.Agents`. That is the entire code change — one file and one line. Plus six documentation pages (EN + FR: how-to, reference, explanation) and their index entries.
- **Decisions**: the example agent is `docker agent`, as in every other editor, because the protocol is the point and the agent is the user's choice; the one sentence in the starter file that is about **this** editor names its own fence, and a test holds it to that — a starter file copied from another editor and left naming that editor's language is the obvious way to get this port wrong.
- **Tests**: 5 new in `internal/*`: both blanks filled with no `%!` marker, the file loads back as exactly one agent, it explains its keys, it names this editor's own language, and creating it twice leaves the first alone.
- **Quality**: PASS 0/0/0.
- **Docs**: adapted rather than copied — the slug, the language, the fence, the build command and the language server all differ from turbo-go's, and each was replaced.
- Not committed.

## 2026-09-15 (night) — slash commands and `@` mentions, documented

- **Documentation and the starter file only in this repository**; the code is turbo-core's (see its `.memory/` of the same date). The user asked for the ACP changes that let an agent's commands be discovered the way Zed discovers them, then for `@` as a file selector.
- **Changes**: `docs/{en,fr}/reference/acp.md` — seven key rows for the list, a **Commands and mentions** section, the `session/prompt` and `available_commands_update` rows, the Limits bullet; `docs/{en,fr}/how-to/talk-to-an-agent.md` — "Use the agent's own commands" and "Point the agent at a file"; `docs/{en,fr}/explanation/agent-windows.md` — the "left out" bullet narrowed to images, two sections appended; the embedded `acp.toml.tmpl` — two key lines. Applied by one script across the five editors with an exactly-once anchor check.
- **Tests**: `go test ./...` green (the template change is a comment; the tests that read the created file still pass).
- **Ahead of the binary**: this repository pins turbo-core v0.7.0, which has none of this. The pages are true once turbo-core is tagged and the pin moved.
- Not committed.

## 2026-09-16 — the trace variable and a troubleshooting bullet, documented

- turbo-core gained `TURBO_ACP_TRACE=<file>` and an "update this editor could not read" line in Agent status, because the user saw no `/` commands from their own agent and nothing on screen could say why. Documented here EN + FR: a bullet in the how-to's Variants, a section in `reference/acp.md`. Docs only; not committed.
- **Later on 2026-09-16**: `.turbo-python/acp.toml` (and `agent.yaml`, docker agent's config copied from turbo-go) now hold two agents — **Bob (llama.cpp)** via `docker agent serve acp`, and the user's **mini-me (llama.cpp)** (`mm -acp`, `AGENT_CONFIG` env) — placed where this repository's demo project already keeps its settings. Verified to load as two agents with this editor's own `Profile()`; not opened, `mm` and `docker` are on the user's Mac. Working files for trying the `/` picker, not part of the feature.

## 2026-09-16 — family count: a sixth editor, Turbo JS

- **Asked**: nothing of this repository directly. Turbo JS was built beside it, and the sentences here that count the family went false the moment it existed.
- **Changes**: `docs/en/explanation/architecture.md`, `docs/fr/explanation/architecture.md` — "five editors" → six. Nothing else touched; history left as it was.
- **Tests**: none affected — documentation only.

## 2026-09-17 — documentation: terminal windows and tools on Windows

- **Asked**: nothing of this repository directly. turbo-core gained pseudo-console (ConPTY) terminal windows and a per-platform tools shell (cmd.exe on Windows); the pages here that said "Linux and macOS" or `/bin/sh -c` went false the moment that landed.
- **Changes** (EN + FR): `README.md` (terminal windows: Linux, macOS and Windows), `docs/*/reference/terminal.md` (shell row, controlling-terminal row, platform table, error row), `docs/*/explanation/terminal-windows.md` (the Windows section rewritten: a pseudo-console and why it is a file of its own, built and vetted but not yet run), `docs/*/how-to/use-a-terminal.md` (`%COMSPEC%`, the five things to try first on Windows), `docs/*/reference/python-tools.md` (shell row, cmd.exe's globs and `;`, error row), `docs/*/explanation/python-tools.md` (`cmd.exe /S /C`). Applied by one script across the six editors, one anchor per file.
- **Not changed**: code, `go.mod`. **The documentation is ahead of the binary** until turbo-core is tagged (v0.9.0) and re-pinned here; the feature has never been run on Windows by anyone.
- **Tests**: none affected — documentation only.

## 2026-09-18 — the "Untitled window has no LSP" fix: docs variant added, fix is turbo-core's

- **Asked**: propagate to every editor the fix made in turbo-core the same day — saving now announces a document the server does not know (a window that started Untitled gets LSP from its first save), and Save As under a new name closes the old document. See turbo-core's `.memory/history.md` of 2026-09-18 for the defect and the fix.
- **Changes here**: `docs/{en,fr}/how-to/enable-completion.md` gain one variant — completion in a window that started without a name works from its first save, no relaunch needed. No code in this repository is involved.
- **Quality**: gate not re-run — a Markdown-only change; the gate measures the Go code.
- **Docs ahead of the binary**: the behaviour arrives only when turbo-core is tagged and this editor re-pinned. Not committed.

## 2026-09-19 — moved to Rickub: turbo-core v1.0.0 re-pinned, releases published by a workflow

- **Asked**: the same migration turbo-go received the same day, for all five remaining editors — turbo-core moved to `rickub.com` and was published as v1.0.0 with a Release workflow.
- **Changes, module**: `codeberg.org/turbo-editors``rickub.com/turbo-editors` in `go.mod`, every `.go` file, `Makefile`, `scripts/install.sh`, `README.md`, `docs/{en,fr}`, `.memory/summary.md` (turbo-core deep links also from Codeberg's `src/branch/main/` to `blob/main/`). `require rickub.com/turbo-editors/turbo-core v1.0.0`; `go mod tidy` with `GOWORK=off` rewrote `go.sum` from the proxy.
- **Changes, release tooling**: `.github/workflows/release.yml` (new), `01-release.tag.sh` (rewritten), `03-build-releases.sh``02-build-releases.sh` (tag from `$1`, validation, `replace` check, fresh `release/${TAG}/`, `go install` line in the README, no hand-off to 04), `02-release.publish.sh` and `04-release.upload-binaries.sh` deleted, `release.env` rewritten (`TAG="v1.0.0"`, `ABOUT="Turbo Python"`). All generated from turbo-go's final files with the names substituted; the README paragraph naming this editor's language server and the example file (`main.py`) kept from the old 03. Docs: the release section and the wrong-commit variant of `docs/{en,fr}/how-to/make-a-release.md` rewritten.
- **Tests**: `release_test.go` regenerated from turbo-go's — see `summary.md`. The file-writing helper is `writeTestFile` because turbo-python's `main_test.go` owns `writeFile`, and the command helper `runOrFail` because `main.go` owns `run`.
- **Not done**: nothing committed or pushed — no commit exists yet and `origin` is unreachable from the sandbox. The workflow has not run on Rickub for this editor; turbo-go's identical one has, and published.