Handoff — 2026-09-09 — Turbo MoonBit, first build
State
The editor is complete and green. make check passes, the quality gate passes, the documentation is written in both languages, and the binary has been driven through a pty. Nothing is in flight.
The working tree is uncommitted. Everything described here exists on disk on main, at a1558e2 (the initial commit), and has not been staged. That was deliberate — no commit was asked for.
Added after the first pass
demos/ — three MoonBit projects (hello, shapes, syntax-tour) with a README. All three moon check clean, are unchanged by moon fmt, and run; shapes has five tests. Building them is what found three things the Go suite could not: derive(Show) and the functional loop form are both deprecated (the starter snippets file used both — fixed), and typealias is not accepted at top level by this compiler although the grammar lists it as a keyword.
Opening syntax-tour/tour.mbt in a pty also found a scanner boundary the docs had described too loosely: a string nested inside an interpolation ends the outer literal. The reference and the explanation now state it exactly, a test pins it, and the demo keeps the offending line with a comment.
What was touched outside this repository
Two sibling repositories were edited, and both need their own commit:
- turbo-core —
README.md,docs/{en,fr}/README.md,docs/{en,fr}/how-to/test-without-publishing.md,profile/profile.go's package comment, and.memory/summary.md: all now count four editors. Its.gostrings were swept for hardcoded language names and no code change was needed, which is the strongest evidence yet that the seam holds. - turbo-python — a real defect, found because this editor was adapted from it. Its docs claimed the Python menu answers to
Alt-T; it answers toAlt-P.Alt-Tis Turbo Rust's, inherited through a mechanical substitution that only looked at identifiers. Fixed in eight places across both languages, along with "all three editors" → four in its architecture explanation. That repository's.memory/has not been updated, and should get a history entry saying so.
Next steps
- Commit. This repository, turbo-core and turbo-python each want one.
- Tag a release.
release.envcurrently saysTAG="v0.1.1", copied from turbo-python; the first tag here should bev0.1.0.01-release.tag.shrunsmake checkand refuses a livereplace, so it should go through as it stands. - Read the two boundaries in
summary.mdbefore promising anything about diagnostics or about labels inturbo-classic.
Open questions / blockers
- Should turbo-core send
workspace/didChangeWatchedFiles? It is the fix for "moon-lsp never diagnoses a file created after it started", it would help every editor in the family, and it is a library change with its own/methodical-devcycle. Not started. - Should
turbo-classicgivesyntax.attributeits own colour? It is currently the same yellow assyntax.identifier, so a MoonBit label or attribute is invisible as such in that one theme — and Turbo Rust's#[derive]has the same problem. Also turbo-core's decision. - Nothing here has run on macOS or Windows. The user's machine is macOS; the binary built in this sandbox is an ELF they cannot run.
Watch out for
- Do not use a shell
cp file /tmp/x; …; cp /tmp/x fileround trip to back a file up before mutating it. Doing that during mutation testing silently left three source files NUL-padded, and the symptom wasunexpected NUL in inputfrom the compiler rather than anything pointing at the backup. Mutate in-process instead: read the file into a Python string, write the mutation, write the original string back./tmp/falsify*.pydo it that way and are safe to re-run. gofmtrewrites a bare run of three apostrophes in a doc comment into typographic quotes.templates.gosays "three apostrophes" in words for that reason; do not helpfully replace it with the characters.moon-lspwith no argument prints its usage and exits. The--stdioinServerArgs()is load-bearing, and dropping it looks like a server that died at start-up.- A fixture project for the language-server tests must compile.
brokenProjectexists as a second fixture rather than as an extra file in the first, because a package holding an error makes every other answer from the server worthless — the completion test would then be measuring a broken build. - The
-shortflag skips every moon-lsp test. A greengo test -short ./...proves nothing about the server. - The demos are not checked by anything automatic. They were built, run and formatted by hand. A future MoonBit release could deprecate something in them and nothing would say so — re-run
moon checkin each before a release, or wire it intomake checkif the toolchain can be assumed present. docs/*/reference/languages.mdis read by a test.TestEveryKeywordTheReferenceListsIsAKeywordparses the keyword row out of the English page, so reformatting that table breaks the test rather than the docs.
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 41 42 |
|