| 🛟 Updated. 28d5985 k33g 13h ago | 1 | # Handoff — 2026-09-01 — tickets 9 to 14 |
| 2 | |
| 3 | ## State |
| 4 | |
| 5 | All six tickets are done and verified, on the branch `feature/menu-theme-and-settings` in all three repositories. Nothing is committed. |
| 6 | |
| 7 | Four land in turbo-core: |
| 8 | |
| 9 | | Ticket | What changed | |
| 10 | | --- | --- | |
| 11 | | 12 | `reapplySettings` in `app/project.go`, run from a new `afterSave` shared by both save paths. Saving `settings.toml` applies it at once. | |
| 12 | | 11, 13, 14 | `projectFile` + `openProjectFile`/`hasProjectFile`/`not`. Six menu items: create greyed once the file exists, open greyed until it does. New API: `OpenTools`, `OpenSnippets`, `HasProjectTools`, `HasProjectSnippets`. | |
| 13 | | 10 | `syntax.comment` raised past 4.5:1 WCAG in the six themes we author, plus `TestEveryThemeWeAuthorKeepsItsCommentsReadable`. | |
| 14 | |
| 15 | Suite green (16 packages), quality gate **PASS 0/0/0** at complexity 1724. Documentation complete in EN and FR, including a new `docs/*/how-to/test-without-publishing.md`. |
| 16 | |
| 17 | ## In flight |
| 18 | |
| 19 | Nothing half-done. |
| 20 | |
| 21 | ## Next steps |
| 22 | |
| 23 | 1. Review and commit on `feature/menu-theme-and-settings`, merge to `main`. |
| 24 | 2. **Release v0.3.0** — `OpenTools`, `OpenSnippets`, `HasProjectTools` and `HasProjectSnippets` are new public API, so it is a minor bump: |
| 25 | ```sh |
| 26 | TAG=v0.3.0 ./01-release.tag.sh |
| 27 | TAG=v0.3.0 ./02-release.publish.sh |
| 28 | ``` |
| 29 | 3. In each editor: `go get codeberg.org/turbo-editors/turbo-core@v0.3.0 && go mod tidy && make check`. Until then the editors keep requiring v0.2.0, which builds — the five library-side tickets simply are not visible in them yet. This is deliberate, and different from the last two releases: nothing is left unbuildable. |
| 30 | |
| 31 | ## Open questions / blockers |
| 32 | |
| 33 | - None. |
| 34 | |
| 35 | ## Watch out for |
| 36 | |
| 37 | - **`reapplySettings` matches on the path, not on `a.settingsPath`.** A project that had no settings file has nothing remembered, so a remembered handle cannot see the file being *created*. There is a test named for that case. |
| 38 | - **It runs from `afterSave`, which both save paths share.** Anything added to one save path and not the other goes missing silently; that is what this function exists to prevent. Do not re-inline it. |
| 39 | - **The status message ordering is deliberate**: `Saved …` is emitted first so that re-reading the settings can replace it. A settings file that no longer parses must win the status bar over "saved". |
| 40 | - **The two contrast measures are not interchangeable.** `channelDistance` for anything the eye must merely distinguish; `contrastRatio` for anything read. The bug in ticket 10 sailed through the first at 128 against a floor of 64. |
| 41 | - **Do not widen the WCAG rule to every key.** It was measured: 84 of 432 theme/key pairings across the shipped themes are under 4.5, most of them Catppuccin's published palette. A blanket floor would either fail honestly-correct themes or have to be lowered until it means nothing. |
| 42 | - **The Catppuccin exemption is guarded.** `TestTheThemesWeDoNotOwnAreStillNamedThemesWeShip` fails if the list ever names a theme that is not shipped, so the exemption cannot quietly outlive its reason. |
| 43 | - **`Already there` and "this project has no …" are now unreachable from the menus** but still reachable from the API, and still tested. Do not delete them as dead code. |
| 44 | - `release.env` and `turbo-core.token.env` hold live Codeberg tokens and are covered by `*.env`. Keep it that way. |