Working notes: 2026-10-23, the Scripting panel's tiles
Claude, one session all day with Matthew, and from 20:20 MDT on its own ("bedtime -- AFK-- do your best"). Every browser test of the game ran in the app's own pane or on GitHub; the laptop ran typechecks and seconds-long node checks only.
Where things are
- Servers: 8000 (dashboard, 0.0.4 since 15:00), 8131 (reports' sources, with ^report(32)'s DRAFT at
/032/, committed locally as ace00d0, not pushed), 8566 (the game'sscript-boxes-566). - The game,
script-boxes-566(kids-choice-games, worktree~/kcg-566, head 370f532), also playable atmatthewhammer.org/hazel/mudu-preview/script-boxes-566/. Today it gained: โถ max size (the outline of every box at the left, types then functions in each box's own order, Hazel's inferred types, case counts and kinds), syntax colours, โ๏ธ settings (size, font, colours, tiles or text, line numbers, wrap 77), line breaking to the box, a draggable divider, ๐ for scripts everywhere, Hazel's name as a tile, and Fumola rules with Motoko-style type annotations from Hazel's types. - ^ticket(578), Hazel's tiles in each box: Hazel's branch
embed-editable(worktree~/hazel-embed-selectable), built at hazel.org/build/embed-editable/. Each box shows its own module in tiles, preloaded one at a time, with the page's theme (dark and high contrast when the page is dark), font, size and line numbers, and edits going back to the boxes. Pushed tonight: line numbers drawn (the view needed~lines), indentation written (a read text loses its leading spaces), the theme's background below the code, a goto's caret told to the page, a module body's members at its own level, and the right-click menu opening down with the frame grown to it (0da790fb20, publishing at 20:26). - ^ticket(586), goto definition across boxes: done for names, dotted names, types and constructors; a type opens the whole program's tiles at it.
- ^report(32), a draft: the Scripting tab's speed run with JS, Fumola and Hazel as the default; the game calling into a script; as the code grows (Hazel overflows its stack at 8x Common, Fumola stays flat at about 125 ms an edit); the pit room's rule three ways, now coloured; and a new section, The same answers, three ways: the CI's checks hold Hazel (32,761 comparisons) and Fumola (20,649) to the game's own JS on every push.
- hazelgrove/hazel#2711: a ๐ค comment on taking modular editors' outline as a dependency (copy
OutlineTree.renow, ^ticket(587)).
Found
- Every outline item does what it should, clicked one by one in the pane: Hazel in tiles 40/40, Hazel as text 40/40, JS 18/18, Fumola 47/47. The first run failed four types because the whole program's tiles started only on a first paint; they now start on a timer too.
- Hazel writes indentation as spaces now, not at layout, so a frame that drops leading spaces must write them again (
Perform.reindent_zipper); and its rule after a module member's;assumes braces, which a body shown alone does not have. - A pane that is not painting has no animation frames, and Hazel's frames then report nothing: a test there must check for frames first.
Waiting on Matthew
- Confirming the tiles work for him (^ticket(578)); then ^ticket(568), the overhead tool.
- Publishing ^report(32) (a draft at localhost:8131/032/).
- Whether the ๐งช speed test gets a scripting line (his ๐งช run at 20:1x measures drawing only).
- A PR for
script-boxes-566.
Queued for the night
- Check tonight's frame fixes once hazel.org has them.
- ^ticket(590) ๐: Fumola's parse information for every form (for ^ticket(589)'s
vm_defsthrough the wasm API).
After 20:26
- Frame fixes seen live (Hazel 0da790fb20, published 20:41): a module body's members at its own level, and line numbers, at the pane's own size (its size emulation hides them). The right-click menu's fix is not yet seen: the pane stopped painting.
- ^ticket(590), done on a branch:
defs-parse-590(Adapton/fumola, 13d1b2a, pushed, no PR). Fumola's Core now keeps type declarations (in a namespace of their own, with name, type parameters, type, visibility and source), alet's binder with its annotation, and type parameters, which the parser had read and dropped ("to do -- produce AST"). Five new tests; the whole suite 280 passed. - ^ticket(589), the API:
wasm-defs-589(dc8f3a9, on top of 590).fumola_defs(id)gives every context's types and members, in source order, with exact sources: a test selects exactlySideandflip2by their byte offsets. The wasm suite 106 passed. The game can use it once the branches reach Fumola'smain(Pages builds the wasm there). - ^ticket(591), the library's tests:
js-library-591(hazelgrove/hazel 9900d80ae8, off #2711's branch, which is untouched).Test_HazelLibGame.reruns the game's shipped program through the library and calls each room with 144 cases, compared with the game's JS. It is generated by the game'stools/hazel_cases591.mjs(2e76bcf), and all 144 were checked in node first. - ^ticket(587), Hazel's outline from Hazel:
lib-outline-587(e12596e1ba, offjs-library-embed).Hazel.outlineProgram(spec)gives the start's types (kind, cases) and each module's members with the type Hazel infers, sums folded back to their names. On the game's program:(Side, Side) -> Cmd, about 0.9 s in node. The game (4cdfd6d) uses it when the library has it; against the old probe, 18 of 21 types are the same, andpits_openis now right. - Times corrected: four progress notes on the dashboard carried guessed times (21:05 and so on, when it was 20:5x); each now carries its commit's time.
Waiting on Matthew (added tonight)
- PRs on Adapton/fumola for
defs-parse-590andwasm-defs-589. - Merging
js-library-591into #2711; whether the game loadslib-outline-587's build. - Closing ^ticket(567) (the three-way CI step is in place and green).