turbo-editors/turbo-jspublic Fork 0
91999d1bcbda40b76c2279c4825bdfe730de0d6e
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.

2026-09-16-first-editor.md · 37 lines · 4.9 KBmarkdown Blame HistoryRaw
📦 Turbo JS 91999d1 k33g 23h ago1# Handoff — 2026-09-16 — Turbo JS, first build
2
3## State
4
5The editor is complete and green. `make check` passes with `typescript-language-server` 6.0.0 + `typescript` 6.0.3 on PATH (the nine real-server tests skip themselves without them, and under `-short`), the quality gate passes (0/0/0, complexity 108), the documentation is complete in both languages (37 pages each), the root `README.md` is written, `demos/greeter` runs, and the tutorial has been driven through a pty and read back as SGR codes. Nothing is in flight.
6
7The working tree is **uncommitted**: the repository has no commits at all; everything is untracked on `main`. No commit, tag or push was asked for.
8
9## What was touched outside this repository
10
11Each with its own history entry and handoff, each needing its own commit:
12
13- **turbo-core** — `README.md`, `docs/{en,fr}/README.md`, `docs/{en,fr}/how-to/test-without-publishing.md`, `profile/profile.go` (comment only), `.memory/summary.md` (six editors; two new "Not yet established" bullets), `.memory/history.md`, `.memory/handoffs/2026-09-16-sixth-editor.md`. **No code change.** Its tree also carries the still-uncommitted ACP trace work of 2026-09-16 that predates this session.
14- **turbo-python**, **turbo-moonbit**`docs/{en,fr}/explanation/architecture.md`: "all five editors" → six.
15- **turbo-golo** — the same two pages plus `docs/fr/explanation/design-decisions.md`.
16- **The kit**: `kits/dev-toolkit/files/home/.claude/skills/turbo-new-editor/SKILL.md` and its installed copy `~/.claude/skills/turbo-new-editor/SKILL.md` (kept byte-identical), with this cycle's lessons.
17- **`agent-memory/`** was copied back into the live `~/.claude/projects/…/memory/`, which had lost twelve of its thirteen entries.
18
19## Next steps
20
211. **Review the decisions** in `summary.md` — none was approved by the user: the name `Turbo JS`, the `~J~avaScript` menu, `typescript-language-server` + `typescript@6` rather than TypeScript 7's own server, `package.json` as the only root marker, the seven starter tools, replacing turbo-core's JavaScript scanner, registering JSON here.
222. **Commit** — this repository (everything), then turbo-core, turbo-python, turbo-moonbit, turbo-golo, then the kit.
233. **Add a `LICENSE`** if wanted; the siblings are MIT, `Copyright (c) 2026 turbo-editors`. The root README says the file is the owner's to add.
244. **Tag `v0.1.0`** when ready: `release.env` already says so; `01-release.tag.sh` runs `make check` and refuses a live `replace`. Create `turbo-js.token.env` first (gitignored by `*.env`).
255. **Open an agent window from this editor once**, on the Mac — `Alt-A` ▸ Create agents file, point it at `mini-me` or `docker agent`, and check a ```js fence in an answer comes out coloured. Nobody has.
266. **Two turbo-core cycles this editor exposed**, when wanted: `languageId` from the profile in `lsp.Client.DidOpen`, and pull diagnostics (`textDocument/diagnostic`) — which would let this editor run on TypeScript 7's server from one `npm install -g typescript`. `internal/jslang/editor_test.go` is the harness: point `ServerCommand` at a `node_modules/.bin/tsc` with `--lsp --stdio` and the diagnostics test is the one that fails.
27
28## Watch out for
29
30- **`typescript@6`, never bare `typescript`.** The current `typescript` is 7 and has no `tsserver.js`; the server then fails at `initialize`, after `--version` succeeded. The hint, the installer, the tutorial and the docs all pin `@6`; `profile_test.go` holds the hint to it.
31- **`Language` is `syntax.LanguageJavaScript`, on purpose.** A private constant would register a second JavaScript beside the library's instead of replacing it, and `.js` files would then be claimed by whichever registration sorts last. `TestRegisterReplacesTheLibrarysOwnJavaScriptScanner` and `TestTheEditorColoursJavaScriptItOpens` both prove the override by finding a coloured regex.
32- **`Enter` repeats the previous line's indentation** in turbo-core's editor. Any driver that types an indented listing must type only the change, or the buffer doubles its indents. `/tmp/tj/tut_script.json` does it right; the tutorial says so.
33- **`docs/*/reference/languages.md` is read by `reference_test.go`**; changing a JavaScript or JSON row means changing the test, and the FR page by hand.
34- **The pty drivers live in `/tmp/tj/`** (`pty_run.py`, `screen.py`, `tut_script.json`, `FACTS.md`, the `.raw` captures) and will not survive the sandbox. `screen.py` replays a whole capture per query, so a 3 MB capture takes ~10 s per frame — batch the queries.
35- **The sandbox is Linux, the user is on macOS**: `/tmp/tj/turbo-js` is an ELF outside the tree; `bin/` is empty and must stay so.
36- **`cp` on this sandbox has produced NUL-filled files before**; every copy this session was done from Python with a byte comparison afterwards.
37- **`npm install -g` in the sandbox writes to `/usr/local/share/npm-global`**; the user's Mac will have it elsewhere — the editor searches nvm, npm-prefix, pnpm, Volta, `/usr/local/bin` and `/opt/homebrew/bin`, and the docs list them.