turbo-editors/turbo-corepublic Fork 0
b1c5e36
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-core.git
git clone ssh://git@rickub.com/turbo-editors/turbo-core.git

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

🛟 Updated.

k33g committed 2026-09-20T09:39:37+02:00 Browse files
b1c5e36 parent: fe23288
modified .github/workflows/release.yml +3 -2
@@ -59,8 +59,9 @@ jobs:
5959 run: go test ./... -count=1
6060
6161 - name: Stage the release
62- # release.env is git-ignored, so the tag is passed explicitly and the
63- # script falls back to "Turbo Core <tag>" for the description.
62+ # The tag is passed explicitly — the one just pushed — so release.env, which
63+ # is committed, cannot make the build disagree with it. ABOUT is still read
64+ # from the file for the description, "Turbo Core <tag>" being the fallback.
6465 run: bash ./02-build-releases.sh "${GITHUB_REF_NAME}"
6566
6667 - name: Release notes
@@ -59,8 +59,9 @@ jobs:
59 run: go test ./... -count=159 run: go test ./... -count=1
60 60
61 - name: Stage the release61 - name: Stage the release
62- # release.env is git-ignored, so the tag is passed explicitly and the62+ # The tag is passed explicitly — the one just pushed — so release.env, which
63- # script falls back to "Turbo Core <tag>" for the description.63+ # is committed, cannot make the build disagree with it. ABOUT is still read
64+ # from the file for the description, "Turbo Core <tag>" being the fallback.
64 run: bash ./02-build-releases.sh "${GITHUB_REF_NAME}"65 run: bash ./02-build-releases.sh "${GITHUB_REF_NAME}"
65 66
66 - name: Release notes67 - name: Release notes
modified .gitignore +4 -0
@@ -1,6 +1,10 @@
11 bin/
22 kits
33 *.env
4+# release.env is the one .env that is committed: it carries the version being
5+# published and its one-line description, which are part of the project's
6+# record. Token files (*.token.env) stay under the rule above.
7+!release.env
48 release
59
610 # A go.work pointing at the checkout beside this one is how you build against an
@@ -1,6 +1,10 @@
1 bin/1 bin/
2 kits2 kits
3 *.env3 *.env
4+# release.env is the one .env that is committed: it carries the version being
5+# published and its one-line description, which are part of the project's
6+# record. Token files (*.token.env) stay under the rule above.
7+!release.env
4 release8 release
5 9
6 # A go.work pointing at the checkout beside this one is how you build against an10 # A go.work pointing at the checkout beside this one is how you build against an
modified .memory/handoffs/2026-09-20-reload-on-disk-change.md +8 -0
@@ -49,3 +49,11 @@ The umbrella `turbo-editors/README.md` (one directory up, its own git repository
4949 - **Note on the workspace**: turbo-go already carries its own `go.work` (`.` + `../turbo-core`, dated 2026-09-19, gitignored), so it builds against this checkout on its own; the root workspace is only needed for the five others. Final verification was done that way: root `go.work` over `turbo-core` and the five, removed afterwards.
5050 - **Observed, not caused by this session as far as can be told**: during the last test passes the tracked files `turbo-go/demo/{README.md,go.mod,index.html,index.js,main.go}` disappeared from the working tree (git shows `D`; dotfiles in `demo/` survived; no git operation in the reflog; the tree is a kDrive-synced folder on which the user was active — tickets changed at the same time). A 6.9 MB `turbo-go/demo-golang` binary appeared at the same moment. **Nothing was restored**: `git checkout -- demo` in turbo-go puts the files back if the deletion was not deliberate.
5151
52+## Also
53+
54+`release.env` is committed from now on (`!release.env` in `.gitignore`). `01-release.tag.sh` does `git add .`, so the next release commits it by itself.
55+
56+## Update, end of session
57+
58+turbo-core **v1.0.3 is tagged and published** (commit `fe23288`; the proxy served it to turbo-go), and every editor's `go.mod` now pins it — all done from the host during the session. Steps 1–2 of "Next steps" above are therefore done. What is left uncommitted is the `release.env` un-ignoring and `release.env` itself; `01-release.tag.sh` will commit them with the next release, or commit them by hand.
59+
@@ -49,3 +49,11 @@ The umbrella `turbo-editors/README.md` (one directory up, its own git repository
49 - **Note on the workspace**: turbo-go already carries its own `go.work` (`.` + `../turbo-core`, dated 2026-09-19, gitignored), so it builds against this checkout on its own; the root workspace is only needed for the five others. Final verification was done that way: root `go.work` over `turbo-core` and the five, removed afterwards.49 - **Note on the workspace**: turbo-go already carries its own `go.work` (`.` + `../turbo-core`, dated 2026-09-19, gitignored), so it builds against this checkout on its own; the root workspace is only needed for the five others. Final verification was done that way: root `go.work` over `turbo-core` and the five, removed afterwards.
50 - **Observed, not caused by this session as far as can be told**: during the last test passes the tracked files `turbo-go/demo/{README.md,go.mod,index.html,index.js,main.go}` disappeared from the working tree (git shows `D`; dotfiles in `demo/` survived; no git operation in the reflog; the tree is a kDrive-synced folder on which the user was active — tickets changed at the same time). A 6.9 MB `turbo-go/demo-golang` binary appeared at the same moment. **Nothing was restored**: `git checkout -- demo` in turbo-go puts the files back if the deletion was not deliberate.50 - **Observed, not caused by this session as far as can be told**: during the last test passes the tracked files `turbo-go/demo/{README.md,go.mod,index.html,index.js,main.go}` disappeared from the working tree (git shows `D`; dotfiles in `demo/` survived; no git operation in the reflog; the tree is a kDrive-synced folder on which the user was active — tickets changed at the same time). A 6.9 MB `turbo-go/demo-golang` binary appeared at the same moment. **Nothing was restored**: `git checkout -- demo` in turbo-go puts the files back if the deletion was not deliberate.
51 51
52+## Also
53+
54+`release.env` is committed from now on (`!release.env` in `.gitignore`). `01-release.tag.sh` does `git add .`, so the next release commits it by itself.
55+
56+## Update, end of session
57+
58+turbo-core **v1.0.3 is tagged and published** (commit `fe23288`; the proxy served it to turbo-go), and every editor's `go.mod` now pins it — all done from the host during the session. Steps 1–2 of "Next steps" above are therefore done. What is left uncommitted is the `release.env` un-ignoring and `release.env` itself; `01-release.tag.sh` will commit them with the next release, or commit them by hand.
59+
modified .memory/history.md +2 -0
@@ -303,4 +303,6 @@
303303 - **Later again, same session — ticket #28, pastes into the agent window**: asked to implement `.tickets/issues/28.yaml` (a long paste becomes `[Pasted #1 · 6 lines · 700 chars]` in the box; the model gets the text). Found bracketed paste was never enabled anywhere — a terminal paste arrived as keystrokes, so each newline *sent* a prompt — and the agent view had no way to read the editor's clipboard. Added `acp/paste.go` (+ `Paste` type, `View.Paste`, `OnPaste`, token editing, `expandPastes`), `Session.PromptWith` with `pending.pastes`, `drawInputRow`, `app/paste.go` (`handlePaste`, `pastedText`), `screen.EnablePaste()` in `New`, `handleKey` collecting during a paste, `App.Paste` routing to the agent box, `view.OnPaste = a.clipboard.Text`. Tests: 16 in `acp/paste_test.go`, 5 in `app/paste_test.go`; two of mine had the trace's length wrong (151, not 140) and were corrected. `make check` green, race green, quality #33 FAIL (file complexity of `app/app.go` at 50) → paste handling moved to `app/paste.go` → #34 PASS, 0 smells. Docs: `acp/README.md`, `app/README.md`. Ticket left `open` for the user to close after trying it. Still not committed.
304304 - **Correction to the #28 entry above**: bracketed paste *was* enabled — by each editor's own `newScreen` (`screen.EnablePaste()` in `main.go`) — but `app.handle` ignored the `EventPaste` marks, so the keys still streamed through and every Enter sent. What was missing was the handling, not the enabling; `app.New` now enables it too so the library needs nothing from the command.
305305 - **Later again, same session — ticket #25, `-load-config <url>`**: the user created `rickub.com/turbo-editors/configs` (directories `golang-init`, `golang-init-with-agents`, each with a `.turbo-go`) and asked that `turbo-go --load-config <tree URL>` copy that `.turbo-go` into the working directory, `.turbo-rust` for turbo-rust, etc.; mid-way, that the URL may be GitHub, GitLab or Codeberg too. Probed rickub from the sandbox: `raw/<ref>/<path>` works, `/api/v1/…/contents` is 401 without a token, no archive endpoint, git smart HTTP on `git.rickub.com` only. Chose git. New `configrepo` package (`configrepo.go`, `git.go`, `copy.go`, README), 15 tests incl. a gated network one that passed. Wired into all six editors by one script (main.go flag + `loadConfig`/`describeLoad`, 3 tests each, `cli.md` EN/FR rows + example + files + errors, `configure-a-project.md` EN/FR new section, each `.memory` history/handoff/summary). Docs here: `README.md`, `docs/{en,fr}/reference/packages.md` (nineteen packages), summary table. Ticket #25 set to `closed` with a "Done" note in its body. Editors verified with `make check` under a root `go.work` listing the six editors and `turbo-go/demo`, `turbo-go/bin` (nested modules); the workspace was removed afterwards. Still nothing committed anywhere.
306+- **Later, same session**: the header comments of `release.env` in all seven repositories (this one and the six editors) were translated from French to English, at the user's request — they had asked for `01-release.tag.sh`, whose comments were already English; the French was in the file beside it. `TAG`/`ABOUT` untouched. These files are gitignored (`*.env`), so this changes nothing in any repository's history.
307+- **Later, same session**: `release.env` is now **committed** — `.gitignore` gained `!release.env` under `*.env`, with a comment; `*.token.env` files stay ignored (verified with `git check-ignore` in every repository). The comments that said it was ignored were reworded to match: `02-build-releases.sh`, `.github/workflows/release.yml`, the release how-to (EN+FR), and this summary. Asked by the user so the version and its description travel with the repository.
306308
@@ -303,4 +303,6 @@
303 - **Later again, same session — ticket #28, pastes into the agent window**: asked to implement `.tickets/issues/28.yaml` (a long paste becomes `[Pasted #1 · 6 lines · 700 chars]` in the box; the model gets the text). Found bracketed paste was never enabled anywhere — a terminal paste arrived as keystrokes, so each newline *sent* a prompt — and the agent view had no way to read the editor's clipboard. Added `acp/paste.go` (+ `Paste` type, `View.Paste`, `OnPaste`, token editing, `expandPastes`), `Session.PromptWith` with `pending.pastes`, `drawInputRow`, `app/paste.go` (`handlePaste`, `pastedText`), `screen.EnablePaste()` in `New`, `handleKey` collecting during a paste, `App.Paste` routing to the agent box, `view.OnPaste = a.clipboard.Text`. Tests: 16 in `acp/paste_test.go`, 5 in `app/paste_test.go`; two of mine had the trace's length wrong (151, not 140) and were corrected. `make check` green, race green, quality #33 FAIL (file complexity of `app/app.go` at 50) → paste handling moved to `app/paste.go` → #34 PASS, 0 smells. Docs: `acp/README.md`, `app/README.md`. Ticket left `open` for the user to close after trying it. Still not committed.303 - **Later again, same session — ticket #28, pastes into the agent window**: asked to implement `.tickets/issues/28.yaml` (a long paste becomes `[Pasted #1 · 6 lines · 700 chars]` in the box; the model gets the text). Found bracketed paste was never enabled anywhere — a terminal paste arrived as keystrokes, so each newline *sent* a prompt — and the agent view had no way to read the editor's clipboard. Added `acp/paste.go` (+ `Paste` type, `View.Paste`, `OnPaste`, token editing, `expandPastes`), `Session.PromptWith` with `pending.pastes`, `drawInputRow`, `app/paste.go` (`handlePaste`, `pastedText`), `screen.EnablePaste()` in `New`, `handleKey` collecting during a paste, `App.Paste` routing to the agent box, `view.OnPaste = a.clipboard.Text`. Tests: 16 in `acp/paste_test.go`, 5 in `app/paste_test.go`; two of mine had the trace's length wrong (151, not 140) and were corrected. `make check` green, race green, quality #33 FAIL (file complexity of `app/app.go` at 50) → paste handling moved to `app/paste.go` → #34 PASS, 0 smells. Docs: `acp/README.md`, `app/README.md`. Ticket left `open` for the user to close after trying it. Still not committed.
304 - **Correction to the #28 entry above**: bracketed paste *was* enabled — by each editor's own `newScreen` (`screen.EnablePaste()` in `main.go`) — but `app.handle` ignored the `EventPaste` marks, so the keys still streamed through and every Enter sent. What was missing was the handling, not the enabling; `app.New` now enables it too so the library needs nothing from the command.304 - **Correction to the #28 entry above**: bracketed paste *was* enabled — by each editor's own `newScreen` (`screen.EnablePaste()` in `main.go`) — but `app.handle` ignored the `EventPaste` marks, so the keys still streamed through and every Enter sent. What was missing was the handling, not the enabling; `app.New` now enables it too so the library needs nothing from the command.
305 - **Later again, same session — ticket #25, `-load-config <url>`**: the user created `rickub.com/turbo-editors/configs` (directories `golang-init`, `golang-init-with-agents`, each with a `.turbo-go`) and asked that `turbo-go --load-config <tree URL>` copy that `.turbo-go` into the working directory, `.turbo-rust` for turbo-rust, etc.; mid-way, that the URL may be GitHub, GitLab or Codeberg too. Probed rickub from the sandbox: `raw/<ref>/<path>` works, `/api/v1/…/contents` is 401 without a token, no archive endpoint, git smart HTTP on `git.rickub.com` only. Chose git. New `configrepo` package (`configrepo.go`, `git.go`, `copy.go`, README), 15 tests incl. a gated network one that passed. Wired into all six editors by one script (main.go flag + `loadConfig`/`describeLoad`, 3 tests each, `cli.md` EN/FR rows + example + files + errors, `configure-a-project.md` EN/FR new section, each `.memory` history/handoff/summary). Docs here: `README.md`, `docs/{en,fr}/reference/packages.md` (nineteen packages), summary table. Ticket #25 set to `closed` with a "Done" note in its body. Editors verified with `make check` under a root `go.work` listing the six editors and `turbo-go/demo`, `turbo-go/bin` (nested modules); the workspace was removed afterwards. Still nothing committed anywhere.305 - **Later again, same session — ticket #25, `-load-config <url>`**: the user created `rickub.com/turbo-editors/configs` (directories `golang-init`, `golang-init-with-agents`, each with a `.turbo-go`) and asked that `turbo-go --load-config <tree URL>` copy that `.turbo-go` into the working directory, `.turbo-rust` for turbo-rust, etc.; mid-way, that the URL may be GitHub, GitLab or Codeberg too. Probed rickub from the sandbox: `raw/<ref>/<path>` works, `/api/v1/…/contents` is 401 without a token, no archive endpoint, git smart HTTP on `git.rickub.com` only. Chose git. New `configrepo` package (`configrepo.go`, `git.go`, `copy.go`, README), 15 tests incl. a gated network one that passed. Wired into all six editors by one script (main.go flag + `loadConfig`/`describeLoad`, 3 tests each, `cli.md` EN/FR rows + example + files + errors, `configure-a-project.md` EN/FR new section, each `.memory` history/handoff/summary). Docs here: `README.md`, `docs/{en,fr}/reference/packages.md` (nineteen packages), summary table. Ticket #25 set to `closed` with a "Done" note in its body. Editors verified with `make check` under a root `go.work` listing the six editors and `turbo-go/demo`, `turbo-go/bin` (nested modules); the workspace was removed afterwards. Still nothing committed anywhere.
306+- **Later, same session**: the header comments of `release.env` in all seven repositories (this one and the six editors) were translated from French to English, at the user's request — they had asked for `01-release.tag.sh`, whose comments were already English; the French was in the file beside it. `TAG`/`ABOUT` untouched. These files are gitignored (`*.env`), so this changes nothing in any repository's history.
307+- **Later, same session**: `release.env` is now **committed** — `.gitignore` gained `!release.env` under `*.env`, with a comment; `*.token.env` files stay ignored (verified with `git check-ignore` in every repository). The comments that said it was ignored were reworded to match: `02-build-releases.sh`, `.github/workflows/release.yml`, the release how-to (EN+FR), and this summary. Asked by the user so the version and its description travel with the repository.
306 308
modified .memory/summary.md +2 -2
@@ -161,7 +161,7 @@ python3 ~/.claude/skills/quality/scripts/quality_report.py --workspace .
161161 - **Tool parameters implemented.** A `{{label}}` in a tools command opens a box before the command runs. `tools/placeholder.go` parses and fills; `app`'s `ParametersDialog` asks. Verified in a real pty against both editors.
162162 - **v0.1.0 is released.** The tag is on `main` at `f1f0375`, the release page is at `https://rickub.com/turbo-editors/turbo-core/releases/tag/v0.1.0`, and `go get rickub.com/turbo-editors/turbo-core@v0.1.0` works from the module proxy. Both editors `require` it with **no active `replace`**, verified by running their suites against the real published module.
163163 - **HEAD is one commit past the tag.** `bc4a464` holds `02-release.publish.sh`, its eight tests, and the release how-to's rewrite — so **none of that is in v0.1.0**. It changes no API, so nothing depending on the library is affected; the only visible consequence is that the v0.1.0 release page's documentation links, which are pinned to the tag, show the how-to as it was before the publish script existed. Fold it into the next tag rather than moving v0.1.0.
164-- **Two release scripts.** `01-release.tag.sh` runs `make check`, refuses a tag taken locally or on origin, refuses a `go.mod` with a `replace`, and tags only after pushing. `02-release.publish.sh` creates the Rickub release page for a tag that is already there, building its JSON with jq, telling the HTTP statuses apart, and taking `--dry-run`. There is deliberately no 03 or 04: those build and attach binaries, and a library has none. `release.env` and `turbo-core.token.env` are gitignored by `*.env`.
164+- **Two release scripts.** `01-release.tag.sh` runs `make check`, refuses a tag taken locally or on origin, refuses a `go.mod` with a `replace`, and tags only after pushing. `02-release.publish.sh` creates the Rickub release page for a tag that is already there, building its JSON with jq, telling the HTTP statuses apart, and taking `--dry-run`. There is deliberately no 03 or 04: those build and attach binaries, and a library has none. `turbo-core.token.env` is gitignored by `*.env`; `release.env` is **committed** (`!release.env`, since 2026-09-20), so the version and its description travel with the repository.
165165 - **Extracted and green.** Sixteen packages, whole suite passing, and passing under `-race`.
166166 - **Eight languages are coloured.** YAML, XML and Dockerfiles were added on 2026-09-01, and `Definition` grew a `Filenames` field so a file with no extension and no shebang — a `Dockerfile` — can be recognised. `LanguageOf` now looks at the extension, then the name, then the first line.
167167 - **Quality gate: PASS.** 0 errors, 0 warnings, 0 smells, total complexity 2306 (run 29, 2026-09-17).
@@ -178,7 +178,7 @@ python3 ~/.claude/skills/quality/scripts/quality_report.py --workspace .
178178
179179 ## State as of 2026-09-20
180180
181-- **v1.0.3 is ready to tag** (`release.env` says so): files changed on disk reload into their open windows, the agent window's box wraps, a long paste into it is kept aside as a token (ticket #28), and `configrepo` fetches a shared configuration from a forge URL (ticket #25) — all above. **All six editors already carry `-load-config`** against this checkout; each still pins v1.0.2 and builds only under the umbrella `go.work` until re-pinned. `make check` green, `go test -race ./acp ./app` green, quality gate run #34 PASS with zero smells (run #33 failed on `app/app.go` file complexity; moving the paste handling into `app/paste.go` cleared it). **Not committed, not tagged.** Every editor should re-pin to pick both up; their user docs do not yet mention either behaviour (the agent-window docs — turbo-go's `reference/acp.md`, `how-to/talk-to-an-agent.md` — list the box's keys and could say it wraps and that `↑↓` move by row).
181+- **v1.0.3 is tagged** (commit `fe23288`, tag present locally, and the module proxy served it to turbo-go on 2026-09-20 — so it is pushed and published): files changed on disk reload into their open windows, the agent window's box wraps, a long paste into it is kept aside as a token (ticket #28), and `configrepo` fetches a shared configuration from a forge URL (ticket #25). **All six editors pin v1.0.3** and carry `-load-config`. The commit and tag were made from the host, not from the sandbox session. Uncommitted here as of the end of that session: only the `release.env` un-ignoring (`.gitignore`, comments in `02-build-releases.sh` and the workflow, the release how-to, this memory) and `release.env` itself.
182182
183183 ## Not yet established
184184
@@ -161,7 +161,7 @@ python3 ~/.claude/skills/quality/scripts/quality_report.py --workspace .
161 - **Tool parameters implemented.** A `{{label}}` in a tools command opens a box before the command runs. `tools/placeholder.go` parses and fills; `app`'s `ParametersDialog` asks. Verified in a real pty against both editors.161 - **Tool parameters implemented.** A `{{label}}` in a tools command opens a box before the command runs. `tools/placeholder.go` parses and fills; `app`'s `ParametersDialog` asks. Verified in a real pty against both editors.
162 - **v0.1.0 is released.** The tag is on `main` at `f1f0375`, the release page is at `https://rickub.com/turbo-editors/turbo-core/releases/tag/v0.1.0`, and `go get rickub.com/turbo-editors/turbo-core@v0.1.0` works from the module proxy. Both editors `require` it with **no active `replace`**, verified by running their suites against the real published module.162 - **v0.1.0 is released.** The tag is on `main` at `f1f0375`, the release page is at `https://rickub.com/turbo-editors/turbo-core/releases/tag/v0.1.0`, and `go get rickub.com/turbo-editors/turbo-core@v0.1.0` works from the module proxy. Both editors `require` it with **no active `replace`**, verified by running their suites against the real published module.
163 - **HEAD is one commit past the tag.** `bc4a464` holds `02-release.publish.sh`, its eight tests, and the release how-to's rewrite — so **none of that is in v0.1.0**. It changes no API, so nothing depending on the library is affected; the only visible consequence is that the v0.1.0 release page's documentation links, which are pinned to the tag, show the how-to as it was before the publish script existed. Fold it into the next tag rather than moving v0.1.0.163 - **HEAD is one commit past the tag.** `bc4a464` holds `02-release.publish.sh`, its eight tests, and the release how-to's rewrite — so **none of that is in v0.1.0**. It changes no API, so nothing depending on the library is affected; the only visible consequence is that the v0.1.0 release page's documentation links, which are pinned to the tag, show the how-to as it was before the publish script existed. Fold it into the next tag rather than moving v0.1.0.
164-- **Two release scripts.** `01-release.tag.sh` runs `make check`, refuses a tag taken locally or on origin, refuses a `go.mod` with a `replace`, and tags only after pushing. `02-release.publish.sh` creates the Rickub release page for a tag that is already there, building its JSON with jq, telling the HTTP statuses apart, and taking `--dry-run`. There is deliberately no 03 or 04: those build and attach binaries, and a library has none. `release.env` and `turbo-core.token.env` are gitignored by `*.env`.164+- **Two release scripts.** `01-release.tag.sh` runs `make check`, refuses a tag taken locally or on origin, refuses a `go.mod` with a `replace`, and tags only after pushing. `02-release.publish.sh` creates the Rickub release page for a tag that is already there, building its JSON with jq, telling the HTTP statuses apart, and taking `--dry-run`. There is deliberately no 03 or 04: those build and attach binaries, and a library has none. `turbo-core.token.env` is gitignored by `*.env`; `release.env` is **committed** (`!release.env`, since 2026-09-20), so the version and its description travel with the repository.
165 - **Extracted and green.** Sixteen packages, whole suite passing, and passing under `-race`.165 - **Extracted and green.** Sixteen packages, whole suite passing, and passing under `-race`.
166 - **Eight languages are coloured.** YAML, XML and Dockerfiles were added on 2026-09-01, and `Definition` grew a `Filenames` field so a file with no extension and no shebang — a `Dockerfile` — can be recognised. `LanguageOf` now looks at the extension, then the name, then the first line.166 - **Eight languages are coloured.** YAML, XML and Dockerfiles were added on 2026-09-01, and `Definition` grew a `Filenames` field so a file with no extension and no shebang — a `Dockerfile` — can be recognised. `LanguageOf` now looks at the extension, then the name, then the first line.
167 - **Quality gate: PASS.** 0 errors, 0 warnings, 0 smells, total complexity 2306 (run 29, 2026-09-17).167 - **Quality gate: PASS.** 0 errors, 0 warnings, 0 smells, total complexity 2306 (run 29, 2026-09-17).
@@ -178,7 +178,7 @@ python3 ~/.claude/skills/quality/scripts/quality_report.py --workspace .
178 178
179 ## State as of 2026-09-20179 ## State as of 2026-09-20
180 180
181-- **v1.0.3 is ready to tag** (`release.env` says so): files changed on disk reload into their open windows, the agent window's box wraps, a long paste into it is kept aside as a token (ticket #28), and `configrepo` fetches a shared configuration from a forge URL (ticket #25) — all above. **All six editors already carry `-load-config`** against this checkout; each still pins v1.0.2 and builds only under the umbrella `go.work` until re-pinned. `make check` green, `go test -race ./acp ./app` green, quality gate run #34 PASS with zero smells (run #33 failed on `app/app.go` file complexity; moving the paste handling into `app/paste.go` cleared it). **Not committed, not tagged.** Every editor should re-pin to pick both up; their user docs do not yet mention either behaviour (the agent-window docs — turbo-go's `reference/acp.md`, `how-to/talk-to-an-agent.md` — list the box's keys and could say it wraps and that `↑↓` move by row).181+- **v1.0.3 is tagged** (commit `fe23288`, tag present locally, and the module proxy served it to turbo-go on 2026-09-20 — so it is pushed and published): files changed on disk reload into their open windows, the agent window's box wraps, a long paste into it is kept aside as a token (ticket #28), and `configrepo` fetches a shared configuration from a forge URL (ticket #25). **All six editors pin v1.0.3** and carry `-load-config`. The commit and tag were made from the host, not from the sandbox session. Uncommitted here as of the end of that session: only the `release.env` un-ignoring (`.gitignore`, comments in `02-build-releases.sh` and the workflow, the release how-to, this memory) and `release.env` itself.
182 182
183 ## Not yet established183 ## Not yet established
184 184
modified 02-build-releases.sh +5 -4
@@ -25,10 +25,11 @@ COMMENT
2525 set -euo pipefail
2626
2727 # release.env carries TAG ("v0.2.0") and ABOUT (the one-line description). It
28-# is git-ignored (*.env), so a CI job does not have it: there the tag comes
29-# from the command line and ABOUT from the environment, or defaults to the
30-# tag. A tag given on the command line always wins, so a test build never
31-# edits the file.
28+# is committed — the one .env that is — so a CI job has it too and reads ABOUT
29+# from it; there the tag still comes from the command line, the tag that was
30+# pushed, so the file cannot make a build disagree with the tag it is on. With
31+# no ABOUT anywhere it defaults to the tag. A tag given on the command line
32+# always wins, so a test build never edits the file.
3233 if [ -f release.env ]; then
3334 # shellcheck source=/dev/null
3435 source release.env
@@ -25,10 +25,11 @@ COMMENT
25 set -euo pipefail25 set -euo pipefail
26 26
27 # release.env carries TAG ("v0.2.0") and ABOUT (the one-line description). It27 # release.env carries TAG ("v0.2.0") and ABOUT (the one-line description). It
28-# is git-ignored (*.env), so a CI job does not have it: there the tag comes28+# is committed — the one .env that is — so a CI job has it too and reads ABOUT
29-# from the command line and ABOUT from the environment, or defaults to the29+# from it; there the tag still comes from the command line, the tag that was
30-# tag. A tag given on the command line always wins, so a test build never30+# pushed, so the file cannot make a build disagree with the tag it is on. With
31-# edits the file.31+# no ABOUT anywhere it defaults to the tag. A tag given on the command line
32+# always wins, so a test build never edits the file.
32 if [ -f release.env ]; then33 if [ -f release.env ]; then
33 # shellcheck source=/dev/null34 # shellcheck source=/dev/null
34 source release.env35 source release.env
modified docs/en/how-to/release-the-library.md +1 -1
@@ -8,7 +8,7 @@ turbo-core is a Go module with no binary: publishing it is tagging it, and the m
88
99 ### 1. Say which version
1010
11-Create `release.env` — it is gitignored, so CI never sees it:
11+Create or edit `release.env` — it is committed with the release, and CI takes the tag from the push rather than from it:
1212
1313 ```sh
1414 TAG="v0.1.0"
@@ -8,7 +8,7 @@ turbo-core is a Go module with no binary: publishing it is tagging it, and the m
8 8
9 ### 1. Say which version9 ### 1. Say which version
10 10
11-Create `release.env` — it is gitignored, so CI never sees it:11+Create or edit `release.env` — it is committed with the release, and CI takes the tag from the push rather than from it:
12 12
13 ```sh13 ```sh
14 TAG="v0.1.0"14 TAG="v0.1.0"
modified docs/fr/how-to/release-the-library.md +1 -1
@@ -8,7 +8,7 @@ turbo-core est un module Go sans binaire : le publier, c'est le taguer, et le pr
88
99 ### 1. Dire quelle version
1010
11-Créez `release.env` — il est ignoré par git, la CI ne le voit donc jamais :
11+Créez ou modifiez `release.env` — il est versionné avec la release, et la CI prend le tag du push plutôt que dans ce fichier :
1212
1313 ```sh
1414 TAG="v0.1.0"
@@ -8,7 +8,7 @@ turbo-core est un module Go sans binaire : le publier, c'est le taguer, et le pr
8 8
9 ### 1. Dire quelle version9 ### 1. Dire quelle version
10 10
11-Créez `release.env` — il est ignoré par git, la CI ne le voit donc jamais :11+Créez ou modifiez `release.env` — il est versionné avec la release, et la CI prend le tag du push plutôt que dans ce fichier :
12 12
13 ```sh13 ```sh
14 TAG="v0.1.0"14 TAG="v0.1.0"
added release.env +10 -0
new file mode 100644
@@ -0,0 +1,10 @@
1+# Edited before every release, then:
2+# ./01-release.tag.sh make check, commit, push, tag, push the tag
3+# (pushing the tag starts .github/workflows/release.yml, which stages the
4+# archive with ./02-build-releases.sh and publishes the release with it —
5+# no personal token is needed, and nothing else has to be run)
6+#
7+# ./02-build-releases.sh v1.0.3 to see what the CI will stage, without
8+# publishing anything
9+TAG="v1.0.3"
10+ABOUT="Turbo Core — files rewritten outside reload into their windows; the agent window wraps what you type and keeps a long paste aside as a token (#28); configrepo fetches a shared .turbo-<slug> from a forge URL (#25)"
new file mode 100644
@@ -0,0 +1,10 @@
1+# Edited before every release, then:
2+# ./01-release.tag.sh make check, commit, push, tag, push the tag
3+# (pushing the tag starts .github/workflows/release.yml, which stages the
4+# archive with ./02-build-releases.sh and publishes the release with it —
5+# no personal token is needed, and nothing else has to be run)
6+#
7+# ./02-build-releases.sh v1.0.3 to see what the CI will stage, without
8+# publishing anything
9+TAG="v1.0.3"
10+ABOUT="Turbo Core — files rewritten outside reload into their windows; the agent window wraps what you type and keeps a long paste aside as a token (#28); configrepo fetches a shared .turbo-<slug> from a forge URL (#25)"