turbo-editors/turbo-jspublic Fork 0
main
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-js.git
git clone ssh://git@rickub.com/turbo-editors/turbo-js.git

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

📦 Turbo JS 91999d1 · on main · k33g · 10h ago
history.md · 40 lines · 10.3 KBmarkdown
Blame HistoryOpen raw

turbo-js — history

Append-only. One dated entry per session. Never rewritten.

2026-09-16 — Turbo JS, first build

  • Goal: /turbo-new-editor nodes et javascript dans ./turbo-js — a Turbo editor for JavaScript on Node.js, built on turbo-core v0.8.0 in the empty repository the user had created and cloned (main, no commits, remote ssh://git@codeberg.org/turbo-editors/turbo-js.git).
  • Method note: the user was not watching the session, so the plan-approval and per-step gates methodical-dev asks for were not held; the scope was taken as stated and the decisions in summary.md are the ones to review. Documentation review and translation were delegated to nine subagents working from a fact sheet (/tmp/tj/FACTS.md); two of them wrote into this file and the handoff before being told not to, and their entries were folded into this one. A third flagged two slips in explanation/architecture.md — "nine letters" listing ten, and "the diagram below" where the diagram is linked — fixed in both languages.
  • Decisions put to the user in the skill and taken here instead: name Turbo JS, slug turbo-js, language "JavaScript"; menu ~J~avaScript on Alt-J; server typescript-language-server --stdio with the hint npm install -g typescript-language-server typescript@6; root marker package.json; starter tools Install / Format / Lint / Test / Run / Start (+ Echo in Tools). Two decisions the skill did not anticipate: the editor's JavaScript scanner replaces turbo-core's built-in under the same name, and a JSON scanner is registered beside it for package.json.
  • Changes: go.mod (turbo-core v0.8.0, no replace, the commented-out one kept), main.go, internal/jslang/{jslang,scan,literals,words,json,templates}.go, the four .toml.tmpl starter files, Makefile, scripts/{install,check-version}.sh, 0104-release*.sh, release.env, git.sh and new.*.sh, .vscode/, .gitignore, demos/greeter/, docs/ (37 pages × EN + FR, docs/README.md, docs/diagrams/packages.drawio), README.md, .qlty/qlty.toml (written by qlty init), .quality/.
  • The language server was measured, not chosen. npm install -g typescript-language-server typescript installed TypeScript 7.0.2, and every end-to-end test then failed at initialize: TypeScript 7 (the native port) ships no tsserver.js. With typescript@6 (6.0.3) all nine tests pass in ~0.4 s each. TypeScript 7's own server (tsc --lsp --stdio, "typescript-go 7.0.2") was then run against the same tests by pointing the profile at it: eight pass, four times faster; the diagnostics test never receives a publishDiagnostics, because that server offers pull diagnostics (textDocument/diagnostic) which turbo-core does not request. Decision: the mature pair, @6 pinned, the measurement written into jslang.go, the docs and turbo-core's memory.
  • Rejected: keeping the library's JavaScript scanner (no regexes, no Node globals — the one editor in the family without a scanner of its own); TypeScript colouring (a different language; the server serves .ts anyway); a Build tool (no compile step); Alt-N/"Node" as the menu (N is Snippets', and the menu holds a project's whole toolchain); colouring ${…} inside templates (a nesting depth to carry for one short expression).
  • Tests: 154 top-level (106 in internal/jslang, 48 in the root package) across internal/jslang, main_test.go, diagram_test.go, install_test.go, release_test.go, version_check_test.go; nine against the real server (completion of a buffer-only declaration, definition, references, implementations, type definition, hover, document symbols, workspace symbols, diagnostics); reference_test.go holds every JavaScript and JSON row of reference/languages.md. Falsified by mutation — fourteen mutations scripted, three tests found vacuous and tightened (0xE+1 without spaces for the hexadecimal guard, the snippets header comment rather than the whole file, an explicit Register() call in main.go).
  • Quality: run #1 FAIL (one return-statements smell, classOfWord with eight returns → split into classByPosition, knownWordClass, classBySpelling); run #2 PASS, 0 errors, 0 warnings, 0 smells, complexity 108; run #3, after the test-only changes of the mutation pass, PASS at 109.
  • Docs: 26 pages per language adapted mechanically from turbo-golo and read whole by six subagents (EN/FR × how-to/reference/explanation) against the fact sheet — 85 surviving Golo lines plus the "no manifest / no formatter / strings cross lines / four of nine questions unanswered" paragraphs rewritten, .turbo-jslo/ substitution artefacts fixed, an Agent section added to reference/menus.md; 11 pages written from scratch in English (tutorial, languages, colouring-and-completion, architecture, the three tools pages, enable-completion, install-node, the two READMEs) and translated to French by three subagents. The tutorial was driven through a pty (/tmp/tj/pty_run.py, screen.py) and every claim in it — bar, arrow counts, menu items, the Run box, the terminal output, ⚠ ')' expected., the Symbol box, the F12 jump, the theme list, every colour as an SGR code — read back off the wire. One editor fact found that way: Enter repeats the previous line's indentation, so a listing typed verbatim doubles its indents; the tutorial now says to type only the change.
  • Phase E: turbo-core (README.md, docs/{en,fr}/README.md, docs/{en,fr}/how-to/test-without-publishing.md, profile/profile.go comment, .memory/summary.md, a history entry and handoffs/2026-09-16-sixth-editor.md), turbo-python, turbo-moonbit and turbo-golo (architecture pages EN + FR, golo's FR design-decisions; each with a history entry and handoffs/2026-09-16-family-count.md). turbo-core's .go strings swept for hardcoded language names: every hit innocent; no library change. Two library-level findings recorded there rather than fixed: lsp.Client.DidOpen sends languageId: "go" for every editor, and the client does not pull diagnostics.
  • Also: the turbo-new-editor skill updated in the kit source and the installed copy (overriding a built-in language, measuring pushed diagnostics and pinned versions, the indentation trap in tutorials, delegating the adapted-docs read-through with a fact sheet, slug-fragment greps, the family-count grep patterns, scripted mutation passes); the live agent memory restored from agent-memory/ (it held one of thirteen entries).
  • Not committed. Nothing tagged.

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/javascript-tools.md (shell row, cmd.exe's globs and ;, error row), docs/*/explanation/javascript-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 JS"). 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.js) 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
# turbo-js — history

Append-only. One dated entry per session. Never rewritten.

## 2026-09-16 — Turbo JS, first build

- **Goal**: `/turbo-new-editor nodes et javascript dans ./turbo-js` — a Turbo editor for JavaScript on Node.js, built on turbo-core v0.8.0 in the empty repository the user had created and cloned (`main`, no commits, remote `ssh://git@codeberg.org/turbo-editors/turbo-js.git`).
- **Method note**: the user was not watching the session, so the plan-approval and per-step gates `methodical-dev` asks for were not held; the scope was taken as stated and the decisions in `summary.md` are the ones to review. Documentation review and translation were delegated to nine subagents working from a fact sheet (`/tmp/tj/FACTS.md`); two of them wrote into this file and the handoff before being told not to, and their entries were folded into this one. A third flagged two slips in `explanation/architecture.md` — "nine letters" listing ten, and "the diagram below" where the diagram is linked — fixed in both languages.
- **Decisions put to the user in the skill and taken here instead**: name `Turbo JS`, slug `turbo-js`, language "JavaScript"; menu `~J~avaScript` on `Alt-J`; server `typescript-language-server --stdio` with the hint `npm install -g typescript-language-server typescript@6`; root marker `package.json`; starter tools Install / Format / Lint / Test / Run / Start (+ Echo in `Tools`). Two decisions the skill did not anticipate: the editor's JavaScript scanner **replaces** turbo-core's built-in under the same name, and a **JSON** scanner is registered beside it for `package.json`.
- **Changes**: `go.mod` (turbo-core v0.8.0, no replace, the commented-out one kept), `main.go`, `internal/jslang/{jslang,scan,literals,words,json,templates}.go`, the four `.toml.tmpl` starter files, `Makefile`, `scripts/{install,check-version}.sh`, `01``04-release*.sh`, `release.env`, `git.sh` and `new.*.sh`, `.vscode/`, `.gitignore`, `demos/greeter/`, `docs/` (37 pages × EN + FR, `docs/README.md`, `docs/diagrams/packages.drawio`), `README.md`, `.qlty/qlty.toml` (written by `qlty init`), `.quality/`.
- **The language server was measured, not chosen.** `npm install -g typescript-language-server typescript` installed TypeScript **7.0.2**, and every end-to-end test then failed at `initialize`: TypeScript 7 (the native port) ships no `tsserver.js`. With `typescript@6` (6.0.3) all nine tests pass in ~0.4 s each. TypeScript 7's own server (`tsc --lsp --stdio`, "typescript-go 7.0.2") was then run against the same tests by pointing the profile at it: eight pass, four times faster; the diagnostics test never receives a `publishDiagnostics`, because that server offers pull diagnostics (`textDocument/diagnostic`) which turbo-core does not request. Decision: the mature pair, `@6` pinned, the measurement written into `jslang.go`, the docs and turbo-core's memory.
- **Rejected**: keeping the library's JavaScript scanner (no regexes, no Node globals — the one editor in the family without a scanner of its own); TypeScript colouring (a different language; the server serves `.ts` anyway); a Build tool (no compile step); `Alt-N`/"Node" as the menu (N is Snippets', and the menu holds a project's whole toolchain); colouring `${…}` inside templates (a nesting depth to carry for one short expression).
- **Tests**: 154 top-level (106 in `internal/jslang`, 48 in the root package) across `internal/jslang`, `main_test.go`, `diagram_test.go`, `install_test.go`, `release_test.go`, `version_check_test.go`; nine against the real server (completion of a buffer-only declaration, definition, references, implementations, type definition, hover, document symbols, workspace symbols, diagnostics); `reference_test.go` holds every JavaScript and JSON row of `reference/languages.md`. **Falsified by mutation** — fourteen mutations scripted, three tests found vacuous and tightened (`0xE+1` without spaces for the hexadecimal guard, the snippets header comment rather than the whole file, an explicit `Register()` call in `main.go`).
- **Quality**: run #1 FAIL (one `return-statements` smell, `classOfWord` with eight returns → split into `classByPosition`, `knownWordClass`, `classBySpelling`); run #2 **PASS**, 0 errors, 0 warnings, 0 smells, complexity 108; run #3, after the test-only changes of the mutation pass, PASS at 109.
- **Docs**: 26 pages per language adapted mechanically from turbo-golo and read whole by six subagents (EN/FR × how-to/reference/explanation) against the fact sheet — 85 surviving Golo lines plus the "no manifest / no formatter / strings cross lines / four of nine questions unanswered" paragraphs rewritten, `.turbo-jslo/` substitution artefacts fixed, an **Agent** section added to `reference/menus.md`; 11 pages written from scratch in English (tutorial, languages, colouring-and-completion, architecture, the three tools pages, enable-completion, install-node, the two READMEs) and translated to French by three subagents. The tutorial was driven through a pty (`/tmp/tj/pty_run.py`, `screen.py`) and every claim in it — bar, arrow counts, menu items, the Run box, the terminal output, `⚠ ')' expected.`, the **Symbol** box, the `F12` jump, the theme list, every colour as an SGR code — read back off the wire. One editor fact found that way: **`Enter` repeats the previous line's indentation**, so a listing typed verbatim doubles its indents; the tutorial now says to type only the change.
- **Phase E**: turbo-core (`README.md`, `docs/{en,fr}/README.md`, `docs/{en,fr}/how-to/test-without-publishing.md`, `profile/profile.go` comment, `.memory/summary.md`, a history entry and `handoffs/2026-09-16-sixth-editor.md`), turbo-python, turbo-moonbit and turbo-golo (architecture pages EN + FR, golo's FR design-decisions; each with a history entry and `handoffs/2026-09-16-family-count.md`). turbo-core's `.go` strings swept for hardcoded language names: every hit innocent; **no library change**. Two library-level findings recorded there rather than fixed: `lsp.Client.DidOpen` sends `languageId: "go"` for every editor, and the client does not pull diagnostics.
- **Also**: the `turbo-new-editor` skill updated in the kit source and the installed copy (overriding a built-in language, measuring pushed diagnostics and pinned versions, the indentation trap in tutorials, delegating the adapted-docs read-through with a fact sheet, slug-fragment greps, the family-count grep patterns, scripted mutation passes); the live agent memory restored from `agent-memory/` (it held one of thirteen entries).
- Not committed. Nothing tagged.

## 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/javascript-tools.md` (shell row, cmd.exe's globs and `;`, error row), `docs/*/explanation/javascript-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 JS"`). 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.js`) 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.