`demo/README.md`, `demo/go.mod`, `demo/index.html`, `demo/index.js`, `demo/main.go` are deleted in the working tree (`git status` shows `D`), and an untracked `demo-golang` binary (6.9 MB) sits at the module root. No test or script here deletes `demo/` (grep of `*.sh`, `Makefile`, `*_test.go`), the reflog shows no git operation, and the folder is kDrive-synced — most likely something done on the host. Not restored by this session; `git checkout -- demo` brings the files back if that was not intended. Note `demo/go.mod` is also what a root `go.work` must list to run `go` inside `demo/`.
22
22
23
+## Also
24
+
25
+`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.
26
+
27
+## Update, end of session
28
+
29
+turbo-core v1.0.3 is published and `go.mod` pins it (done from the host, with a commit, during the session). Step 1 of "Next steps" is done; the two release-script tests are expected green again — see the history entry for the run that confirmed it.
30
+
@@ -20,3 +20,11 @@
20
20
21
`demo/README.md`, `demo/go.mod`, `demo/index.html`, `demo/index.js`, `demo/main.go` are deleted in the working tree (`git status` shows `D`), and an untracked `demo-golang` binary (6.9 MB) sits at the module root. No test or script here deletes `demo/` (grep of `*.sh`, `Makefile`, `*_test.go`), the reflog shows no git operation, and the folder is kDrive-synced — most likely something done on the host. Not restored by this session; `git checkout -- demo` brings the files back if that was not intended. Note `demo/go.mod` is also what a root `go.work` must list to run `go` inside `demo/`.
21
`demo/README.md`, `demo/go.mod`, `demo/index.html`, `demo/index.js`, `demo/main.go` are deleted in the working tree (`git status` shows `D`), and an untracked `demo-golang` binary (6.9 MB) sits at the module root. No test or script here deletes `demo/` (grep of `*.sh`, `Makefile`, `*_test.go`), the reflog shows no git operation, and the folder is kDrive-synced — most likely something done on the host. Not restored by this session; `git checkout -- demo` brings the files back if that was not intended. Note `demo/go.mod` is also what a root `go.work` must list to run `go` inside `demo/`.
22
22
23
+## Also
24
+
25
+`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.
26
+
27
+## Update, end of session
28
+
29
+turbo-core v1.0.3 is published and `go.mod` pins it (done from the host, with a commit, during the session). Step 1 of "Next steps" is done; the two release-script tests are expected green again — see the history entry for the run that confirmed it.
30
+
modified.memory/history.md+2-0
@@ -523,4 +523,6 @@
523
523
- **Depends on turbo-core v1.0.3**, not yet tagged: `go.mod` still pins v1.0.2, so this builds only under the umbrella `go.work` (`turbo-editors/README.md` explains) until `go get rickub.com/turbo-editors/turbo-core@v1.0.3 && go mod tidy`. Verified with `make check` under that workspace.
524
524
- **Not done**: not committed; go.mod not re-pinned; not run against a real terminal.
525
525
- **Correction, same session**: under the workspace everything passes **except `TestTheTagScriptTagsAndPushesForReal` and `TestTheTagScriptRefusesATagItAlreadyPublished`** — they copy the module elsewhere and run `make check` there, outside the workspace, where turbo-core v1.0.2 from the proxy has no `configrepo`. They go green the moment `go.mod` is re-pinned to v1.0.3. The package diagram (`docs/diagrams/packages.drawio`, where the module has one) gained a `configrepo` box and a `main → configrepo` arrow, which its own test demanded.
526
+- **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.
527
+- **End of session**: turbo-core v1.0.3 having been published and `go.mod` re-pinned to it from the host, `GOWORK=off go test ./... -count=1` is entirely green here, the two release-script tests included.
526
528
@@ -523,4 +523,6 @@
523
- **Depends on turbo-core v1.0.3**, not yet tagged: `go.mod` still pins v1.0.2, so this builds only under the umbrella `go.work` (`turbo-editors/README.md` explains) until `go get rickub.com/turbo-editors/turbo-core@v1.0.3 && go mod tidy`. Verified with `make check` under that workspace.
523
- **Depends on turbo-core v1.0.3**, not yet tagged: `go.mod` still pins v1.0.2, so this builds only under the umbrella `go.work` (`turbo-editors/README.md` explains) until `go get rickub.com/turbo-editors/turbo-core@v1.0.3 && go mod tidy`. Verified with `make check` under that workspace.
524
- **Not done**: not committed; go.mod not re-pinned; not run against a real terminal.
524
- **Not done**: not committed; go.mod not re-pinned; not run against a real terminal.
525
- **Correction, same session**: under the workspace everything passes **except `TestTheTagScriptTagsAndPushesForReal` and `TestTheTagScriptRefusesATagItAlreadyPublished`** — they copy the module elsewhere and run `make check` there, outside the workspace, where turbo-core v1.0.2 from the proxy has no `configrepo`. They go green the moment `go.mod` is re-pinned to v1.0.3. The package diagram (`docs/diagrams/packages.drawio`, where the module has one) gained a `configrepo` box and a `main → configrepo` arrow, which its own test demanded.
525
- **Correction, same session**: under the workspace everything passes **except `TestTheTagScriptTagsAndPushesForReal` and `TestTheTagScriptRefusesATagItAlreadyPublished`** — they copy the module elsewhere and run `make check` there, outside the workspace, where turbo-core v1.0.2 from the proxy has no `configrepo`. They go green the moment `go.mod` is re-pinned to v1.0.3. The package diagram (`docs/diagrams/packages.drawio`, where the module has one) gained a `configrepo` box and a `main → configrepo` arrow, which its own test demanded.
526
+- **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.
527
+- **End of session**: turbo-core v1.0.3 having been published and `go.mod` re-pinned to it from the host, `GOWORK=off go test ./... -count=1` is entirely green here, the two release-script tests included.
526
528
modified.memory/summary.md+2-2
@@ -186,7 +186,7 @@ Reports land in `.quality/`; exit code 0 = pass.
186
186
187
187
## Release tooling
188
188
189
-`01-release.tag.sh` and `02-build-releases.sh` in the repository root, plus `.github/workflows/release.yml`, modelled on turbo-core's. `release.env` carries `TAG` and `ABOUT` and is gitignored (`*.env`); there is no token file any more.
189
+`01-release.tag.sh` and `02-build-releases.sh` in the repository root, plus `.github/workflows/release.yml`, modelled on turbo-core's. `release.env` carries `TAG` and `ABOUT` and is **committed** (`!release.env` under `*.env` in `.gitignore`, since 2026-09-20); there is no token file any more.
190
190
191
191
`01` tags; the tag push starts the workflow. It exports `TURBO_GO_RELEASING=1` before `make check` so the tests that run `01` against a throwaway clone do not recurse; the workflow sets the same variable for its `go test` step. `02-build-releases.sh` cross-compiles for the platforms in its own `PLATFORMS` array and writes `release/${TAG}/` (binaries, `SHA256SUMS`, `README.md`); adding a target is one line and the checksums and README follow. It takes the tag as its first argument (what CI does, having no `release.env`), validates it as `vX.Y.Z[-pre]`, refuses a `replace` in `go.mod`, and starts from an empty `release/${TAG}/`. The workflow attaches `turbo-go-*`, `SHA256SUMS` and `README.md` with `softprops/action-gh-release@v2`, `fail_on_unmatched_files: true`, and writes release notes from the tag's message with the docs linked at that tag. Rickub's release API takes only the job's `GITHUB_TOKEN` (a personal token is refused), and its dispatch API fires every dispatchable workflow of a ref — hence `contents: write`, no `secrets.`, and no `workflow_dispatch`.
192
192
@@ -210,5 +210,5 @@ Reports land in `.quality/`; exit code 0 = pass.
210
210
211
211
## State as of 2026-09-20
212
212
213
-- **`-load-config <url>` is wired** (`main.go`: `loadConfig`, `describeLoad`), on top of turbo-core's `configrepo`. It needs **turbo-core v1.0.3**, which is not tagged yet; `go.mod` pins v1.0.2, so the editor builds only under the umbrella `go.work` until re-pinned. A project with a `.turbo-go` already is refused, not overwritten.
213
+- **`-load-config <url>` is wired** (`main.go`: `loadConfig`, `describeLoad`), on top of turbo-core's `configrepo`. `go.mod` pins **turbo-core v1.0.3**, which is published (re-pinned from the host on 2026-09-20), so it builds on its own again. A project with a `.turbo-go` already is refused, not overwritten.
214
214
@@ -186,7 +186,7 @@ Reports land in `.quality/`; exit code 0 = pass.
186
186
187
## Release tooling
187
## Release tooling
188
188
189
-`01-release.tag.sh` and `02-build-releases.sh` in the repository root, plus `.github/workflows/release.yml`, modelled on turbo-core's. `release.env` carries `TAG` and `ABOUT` and is gitignored (`*.env`); there is no token file any more.
189
+`01-release.tag.sh` and `02-build-releases.sh` in the repository root, plus `.github/workflows/release.yml`, modelled on turbo-core's. `release.env` carries `TAG` and `ABOUT` and is **committed** (`!release.env` under `*.env` in `.gitignore`, since 2026-09-20); there is no token file any more.
190
190
191
`01` tags; the tag push starts the workflow. It exports `TURBO_GO_RELEASING=1` before `make check` so the tests that run `01` against a throwaway clone do not recurse; the workflow sets the same variable for its `go test` step. `02-build-releases.sh` cross-compiles for the platforms in its own `PLATFORMS` array and writes `release/${TAG}/` (binaries, `SHA256SUMS`, `README.md`); adding a target is one line and the checksums and README follow. It takes the tag as its first argument (what CI does, having no `release.env`), validates it as `vX.Y.Z[-pre]`, refuses a `replace` in `go.mod`, and starts from an empty `release/${TAG}/`. The workflow attaches `turbo-go-*`, `SHA256SUMS` and `README.md` with `softprops/action-gh-release@v2`, `fail_on_unmatched_files: true`, and writes release notes from the tag's message with the docs linked at that tag. Rickub's release API takes only the job's `GITHUB_TOKEN` (a personal token is refused), and its dispatch API fires every dispatchable workflow of a ref — hence `contents: write`, no `secrets.`, and no `workflow_dispatch`.
191
`01` tags; the tag push starts the workflow. It exports `TURBO_GO_RELEASING=1` before `make check` so the tests that run `01` against a throwaway clone do not recurse; the workflow sets the same variable for its `go test` step. `02-build-releases.sh` cross-compiles for the platforms in its own `PLATFORMS` array and writes `release/${TAG}/` (binaries, `SHA256SUMS`, `README.md`); adding a target is one line and the checksums and README follow. It takes the tag as its first argument (what CI does, having no `release.env`), validates it as `vX.Y.Z[-pre]`, refuses a `replace` in `go.mod`, and starts from an empty `release/${TAG}/`. The workflow attaches `turbo-go-*`, `SHA256SUMS` and `README.md` with `softprops/action-gh-release@v2`, `fail_on_unmatched_files: true`, and writes release notes from the tag's message with the docs linked at that tag. Rickub's release API takes only the job's `GITHUB_TOKEN` (a personal token is refused), and its dispatch API fires every dispatchable workflow of a ref — hence `contents: write`, no `secrets.`, and no `workflow_dispatch`.
192
192
@@ -210,5 +210,5 @@ Reports land in `.quality/`; exit code 0 = pass.
210
210
211
## State as of 2026-09-20
211
## State as of 2026-09-20
212
212
213
-- **`-load-config <url>` is wired** (`main.go`: `loadConfig`, `describeLoad`), on top of turbo-core's `configrepo`. It needs **turbo-core v1.0.3**, which is not tagged yet; `go.mod` pins v1.0.2, so the editor builds only under the umbrella `go.work` until re-pinned. A project with a `.turbo-go` already is refused, not overwritten.
213
+- **`-load-config <url>` is wired** (`main.go`: `loadConfig`, `describeLoad`), on top of turbo-core's `configrepo`. `go.mod` pins **turbo-core v1.0.3**, which is published (re-pinned from the host on 2026-09-20), so it builds on its own again. A project with a `.turbo-go` already is refused, not overwritten.
214
214
modified02-build-releases.sh+5-4
@@ -23,10 +23,11 @@ COMMENT
23
23
set -euo pipefail
24
24
25
25
# release.env carries TAG ("v1.0.0") and ABOUT (the one-line description). It
26
-# is git-ignored (*.env), so a CI job does not have it: there the tag comes
27
-# from the command line and ABOUT from the environment, or defaults to the
28
-# tag. A tag given on the command line always wins, so a test build never
29
-# edits the file.
26
+# is committed — the one .env that is — so a CI job has it too and reads ABOUT
27
+# from it; there the tag still comes from the command line, the tag that was
28
+# pushed, so the file cannot make a build disagree with the tag it is on. With
29
+# no ABOUT anywhere it defaults to the tag. A tag given on the command line
30
+# always wins, so a test build never edits the file.
30
31
if[ -f release.env ];then
31
32
# shellcheck source=/dev/null
32
33
source release.env
@@ -23,10 +23,11 @@ COMMENT
23
set -euo pipefail
23
set -euo pipefail
24
24
25
# release.env carries TAG ("v1.0.0") and ABOUT (the one-line description). It
25
# release.env carries TAG ("v1.0.0") and ABOUT (the one-line description). It
26
-# is git-ignored (*.env), so a CI job does not have it: there the tag comes
26
+# is committed — the one .env that is — so a CI job has it too and reads ABOUT
27
-# from the command line and ABOUT from the environment, or defaults to the
27
+# from it; there the tag still comes from the command line, the tag that was
28
-# tag. A tag given on the command line always wins, so a test build never
28
+# pushed, so the file cannot make a build disagree with the tag it is on. With
29
-# edits the file.
29
+# no ABOUT anywhere it defaults to the tag. A tag given on the command line
30
+# always wins, so a test build never edits the file.
30
if[ -f release.env ];then
31
if[ -f release.env ];then
31
# shellcheck source=/dev/null
32
# shellcheck source=/dev/null
32
source release.env
33
source release.env
modifieddocs/en/how-to/make-a-release.md+1-1
@@ -53,7 +53,7 @@ Theme: Turbo Classic
53
53
54
54
## Or use the scripts and let the workflow publish
55
55
56
-That is the way a release is actually cut. Put the version and its one-line description in `release.env` — it is gitignored, so CI never sees it:
56
+That is the way a release is actually cut. Put the version and its one-line description in `release.env` — it is committed with the release, and CI takes the tag from the push rather than from it:
57
57
58
58
```sh
59
59
TAG="v1.0.0"
@@ -53,7 +53,7 @@ Theme: Turbo Classic
53
53
54
## Or use the scripts and let the workflow publish
54
## Or use the scripts and let the workflow publish
55
55
56
-That is the way a release is actually cut. Put the version and its one-line description in `release.env` — it is gitignored, so CI never sees it:
56
+That is the way a release is actually cut. Put the version and its one-line description in `release.env` — it is committed with the release, and CI takes the tag from the push rather than from it:
57
57
58
```sh
58
```sh
59
TAG="v1.0.0"
59
TAG="v1.0.0"
modifieddocs/fr/how-to/make-a-release.md+1-1
@@ -53,7 +53,7 @@ Theme: Turbo Classic
53
53
54
54
## Ou utiliser les scripts et laisser le workflow publier
55
55
56
-C'est ainsi qu'une release est réellement faite. Mettez la version et sa description d'une ligne dans `release.env` — il est ignoré par git, donc la CI ne le voit jamais :
56
+C'est ainsi qu'une release est réellement faite. Mettez la version et sa description d'une ligne dans `release.env` — il est versionné avec la release, et la CI prend le tag du push plutôt que dans ce fichier :
57
57
58
58
```sh
59
59
TAG="v1.0.0"
@@ -53,7 +53,7 @@ Theme: Turbo Classic
53
53
54
## Ou utiliser les scripts et laisser le workflow publier
54
## Ou utiliser les scripts et laisser le workflow publier
55
55
56
-C'est ainsi qu'une release est réellement faite. Mettez la version et sa description d'une ligne dans `release.env` — il est ignoré par git, donc la CI ne le voit jamais :
56
+C'est ainsi qu'une release est réellement faite. Mettez la version et sa description d'une ligne dans `release.env` — il est versionné avec la release, et la CI prend le tag du push plutôt que dans ce fichier :
57
57
58
```sh
58
```sh
59
TAG="v1.0.0"
59
TAG="v1.0.0"
addedrelease.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 builds the
4
+# binaries with ./02-build-releases.sh and publishes the release with them —
5
+# no personal token is needed, and nothing else has to be run)
6
+#
7
+# ./02-build-releases.sh v1.0.0 to build the binaries by hand and see what
8
+# the CI will publish, without publishing anything
9
+TAG="v1.0.3"
10
+ABOUT="Turbo Go"
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 builds the
4
+# binaries with ./02-build-releases.sh and publishes the release with them —
5
+# no personal token is needed, and nothing else has to be run)
6
+#
7
+# ./02-build-releases.sh v1.0.0 to build the binaries by hand and see what
8
+# the CI will publish, without publishing anything