Work notes, 2026-10-13 evening to 2026-10-14 morning
Matthew and Claude, written at 2026-10-14 09:11 MDT before Matthew shut the laptop down to move it. What was done, where things are, and what is next. The tickets are on the dashboard (#N); "issue NNN" is the performance analysis series.
Where things stand at shutdown
- No current ticket; nothing running; every repository committed and pushed (kids-choice-games, hazel-performance-analysis, matthewhammer.github.io, hazel-work-notes, and the #2597 and #2635 worktrees).
- Local servers stop with the shutdown; restart them when wanted: 8000 (this dashboard), 8131 (the series preview), 8133 (Messed Up Dress Up's local copy), 8311 (#2597, rebuilt at
c4e411f9c2), 8341 (#2635; its bundle predates9fb2bdf067, which changes the app: rebuild before trying it). - The dashboard's publishing cron resumes on boot (below).
The dashboard publishes within a minute of a change
Matthew found the public copy stale (I had closed tickets without the by-hand publish the protocol asked for). Now cron runs dashboard/publish.py every minute: it publishes when data.json changed since the last publish, and on the quarter hour for what comes from GitHub; a lock keeps runs from overlapping (afe0286, ded5555; in VERSIONS.md under Unreleased).
^ticket(4): #2597's CI, red since 2026-10-11; green again
- Quick job, out of node's 4 GB heap:
Statics.mkand MakeTerm's three memos kept the last 1000 programs each, so the test process kept every test's programs; the Dress Up slides made each one big. Proof: IncrSlides alone, live heap after full GCs 456/811/1279/1647 MB as it was, flat near 450–590 with the memos bounded. - Full job, out of time: the recovering parser on the big slides in the corpus tests (MenhirCorpus etc.): 452 s for
full-body.hzalone on the laptop. - Pushed to #2597 (
684a75cb2f..c4e411f9c2):5d576cc479Statics.mk keeps 16 programs and MakeTerm's memos 8, as #2469 does;8798d64213programs over 25 KB get the recovering-parser checks only in the weekly Extended run (as #2469 already does for "Mega" slides);c4e411f9c2the big slides' Unproject cases in the full tests only. CI: quick 8.5 min, full 53 min, green. - Pushed to #2635 (
..41897ec3a5): the last two only (#2469 had already bounded its memos). Its jobs now finish, red only for its 8 known failures (DefStaticsParity, Editing.TableDecorations, LabelBench, ModRoot ×4, TypeDeps). - Calibration for estimating CI from the laptop: quick about 1.25×, full about 1.9× (the green commit's suite, timed on both).
- A correction made on the way: I first posted "full 36 min with the fix alone"; that run had a 30 KB gate. Without the gate the full suite runs past 90 min.
^ticket(7) and ^report(13): the release's request
- Measured in node: a release's request cost most in building
EvalInfo's projection (it walked both statics maps, 13–14 ms per release on Full Body), not in hashing (1–4 ms). - Pushed to #2635 (
..9fb2bdf067):043508921bDefStatics records the keys it touched andEvalInfoupdates at those keys;9fb2bdf067DefStatics keeps an item's patched spine root when nothing it is made from changed. CI: the same 8 known failures. ^report(13), "Telling the Request What Changed", published (link), with a dated note in^report(1). Key finding: the projection now takes under 1 ms on every slide; what is left grows with how far down the program the slider sits (every item above the edit has a spine root carrying the whole program below it). Linked from #2609 (finding 30), #2635, #2597 and #2469 (a progress note, no @-mention, offering the ports).- Tried and dropped: keeping
EvalInfoentries equal by content (fewer entries re-added, but the request got slower). - Still open in
^ticket(7): the commit's redraw.
Local-only branches (committed, not pushed)
| Where | Branch | What |
|---|---|---|
~/hazel-port-2469 | port-2469-t7 | The three steps carried to #2469's head c1e4aeee4a: 128f3f303d, cdb799a376, 474b1e050e. Its quick tests pass whole. Offered on #2469; push only if wanted. |
~/hazel-ci-heap | ci-heap-4, ci-heap-4-gate, ci-heap-4-gate-slow, ci-heap-4-bounds, ci-heap-4-pick | ^ticket(4)'s experiments; ci-heap-4-pick is what was pushed to #2597. |
~/hazel-ci-heap | memo-growth-experiment (62aaaa28e4) | ^ticket(45)'s node experiment: about 82 MB kept per edit of Full Body with 1000-entry memos. |
~/hazel-ci-heap | parser-get-base-memo (0825830190) | ^ticket(46)'s try: Form.Molds.get_base remembered, about 15% faster recovering parse. |
~/hazel-ci-heap-2635 | request-hash-probe (4f0e261652), data-2635-* | ^ticket(7)'s and ^report(13)'s probes. |
~/hazel-ci-green | detached at 5286ba3b10 | The last green #2597, for calibration; can be removed. |
Tickets
- Closed:
^ticket(4)(done),^ticket(5)(superseded, revised first),^ticket(47)(^report(13)published),^ticket(48)(Messed Up Dress Up 0.0.20). - Opened:
^ticket(45)(the editor's statics memo kept about 82 MB per edit on #2597, in node; #2469's bounds, now pushed to #2597, should fix it; the browser check is still open),^ticket(46)(the recovering parser on the playground slides),^ticket(47),^ticket(48).
Messed Up Dress Up 0.0.20 (side quest, ended)
Live at matthewhammer.org/kids-choice-games/dress-up (9cfa091, tag dress-up-0.0.20): music by kind (eight kinds, a row of kinds then its tunes); three classic beats of our own, about three minutes each, every player in front in turn; ➖ | 🎵 interval | ➕ under the transpose slider and on each pitched channel of the mixing board. Tested at volume 0 only: the mix and the feel are for Matthew's ears.
Next
- The critical path: user-defined livelits (#2597, #2635), per Cyrus.
- Performance:
^ticket(45)(confirm in the browser on #2635 too),^ticket(46),^ticket(7)'s redraw half;^report(13)'s What next (a spine root need not carry the whole program for the request). - After the move: restart the local servers wanted; rebuild 8341's bundle.