HANDOFF-2026-09.md 7.2 KB

Handoff — September 2026

Where the work stands after the August analysis, the September checkpoint and the 0.31.0 release round. Written for the next agent; read AGENTS.md first, then this.

1. Done

  • ANALYSIS-2026-08.md — measured analysis of the code base: boot-cost anatomy (70% of boot is initialize(), mostly the selectors × detached-roots copying in copySuperclass), the sail interpreter evaluated by running it (two defects found, a working NLR fix included), sail-as-JSON sized, engine support for setPrototypeOf on builtin roots researched. Its §8 is the roadmap (see §3 below).
  • ANALYSIS-2026-09-honest-checkpoint.md — the stated environment floor made true: ES2020 / Node 12 declared everywhere, kernel-checks names the floor and reports what an engine lacks, es6-promise and the globalThis preambles gone from amber and all seven siblings, Bower leftovers gone, SUnit timing margins that hold on Windows timers, lint scoped to hand-written code at the ES2020 level, CI running the built runner on node:12, two amberc bugs fixed (-p, and the default amber dir), sdk's lang requirement made visible. Its §6–7 list every commit. All on master, linear.
  • Release round 2026-09-09/10 — published and pushed, in dependency order: @ambers/lang 0.31.0, @ambers/sdk 0.13.0, domite 0.10.0, contrib-jquery 0.8.0, contrib-web 0.9.0, helios 0.14.0, contrib-legacy 0.11.0, silk 0.7.0, prof-stef 0.4.0, @ambers/grunt-init-amber-project 0.31.0, @ambers/cli 0.108.0. A clean install from the registry resolves the whole graph. amber master is at Working on 0.31.1; the 0.31.0 tag sits on Release version 0.31.0, two commits below, as the ritual does. Every sibling's tag is on its version commit. CI builds 218 (push) and 219 (tag) green in all three pipelines; the first CI verdicts since March 2022.
  • AGENTS.md — methodology, commit conventions, the release ritual as it really works, generated-artifact rules.

2. Left from the checkpoint (its §8, plus what the release surfaced)

  • amber-compat-* packages: mark deprecated on npm; nothing depends on them.
  • Siblings' Node test gates: six of seven do not run (DOM in Node); contrib-web's localMethods failure is the one that is not that.
  • .gitattributes with * text=auto eol=lf would end the CRLF warnings on every commit and the phantom modifications after every recompile.
  • NodeTestRunner prints only a failing test's name, not the assertion text.
  • Platform-Node.st still answers global; globalThis would match 0.30.0's intent.
  • The stable branch is at 0.22.4 locally and on the remote: merge the 0.31.0 tag into it as RELEASING.md says, or retire the branch and the step. A decision, not done.
  • RELEASING.md steps 10–13 (homepage pointer, announcements) were never scripted.

3. The main list — ANALYSIS-2026-08.md §8, with status

# step status
1 Land the two kernel-interpreter.js fixes (§6.2 this loss, §6.4 NLR) not started; the sketch is still an untracked file, deliberately, and stays so until its owner says otherwise
2 Prototype-chain insertion for detached roots (§5.1) not started; the natural next chunk: independent, measurable, biggest boot-time payoff, and §5.2 proved setPrototypeOf on builtin roots safe on the whole floor
3 Cheap hygiene: drop es6-promise, honest engines, pegjs→peggy, jshint→eslint first two done by the checkpoint (and much more hygiene with them); pegjs→peggy and jshint→eslint not done — jshint was bumped to 2.13 instead, deliberately, so the gate is honest but still jshint
4 Sail backend in the compiler + JSON package loader in base not started
5 Baseline sail→JS compiler in base (§7.4) not started
6 Debugger on the sail interpreter, retiring Compiler-Interpreter (§7.5) not started; the document calls this the strongest payoff of the direction
7 ESM for base not started
8 Raise AOT codegen to ~ES2017 when IRJSTranslator is next touched not started; the new floor makes it safe

Leave alone, per the same document: the detached-root design, brikz, the trait engine.

4. Things the next agent needs that are in neither list

Working environment on this machine (all learned the hard way):

  • Run shell work from Git Bash, not the app's PowerShell panel: sh is not on the Windows PATH there, and the execution policy blocks npm.ps1. Node 12/14/20/22/24 live under E:\.nvm\vX\node.exe and are run directly; never call nvm from a tool (it opens a dialog).
  • The seven siblings are checked out beside this repo and linked with --no-save; any npm install prunes the links, and E:\Projects\amber\rewire.bat restores them. Run it inside each sibling too. config.js is generated by walking the whole checkout, so a stale *.amd.json anywhere, siblings included, resurfaces in it.
  • package-lock.json is never committed in this project. The user's local index.html hunk and herby.js are local and stay uncommitted.
  • Timing tests: the Windows timer tick is 15.6 ms; margins follow the rule in the checkpoint (racing pairs 50/150 with a 100 ms gap), not blanket multiplication.
  • local-amberc needs a globally installed amberc, which this machine lacks; setversion.sh therefore silently skips its recompile here. Compile with cli/dist/amberc-cli.js instead.

Releasing:

  • E:\Projects\amber\release-round-2026-09.sh (outside every repo) drove the round: phases check / prepare / publish / verify / push, DRY_RUN=1. It mirrors release-worker.sh's commit sequence but publishes (the worker only echoes npm publish), skips its git clean -d -x -f, and publishes lang/sdk/scaffold from a worktree at the tag because master has already moved to -pre. Reusable for the next round after editing VER, NEXT, DATE and the package table; its header documents the pitfalls it hit. .npmrc-release beside it holds the publish token, kept there on purpose. npm now requires 2FA or a bypass-2FA token to publish.
  • CI is Drone at ci.lolg.it, self-hosted; agent web tools cannot reach it, local curl can (/api/repos/amber/amber/builds).
  • Git here talks to lolg.it through PuTTY's plink and Pageant (ssh.variant=tortoiseplink, no OpenSSH keys). On the host, port 22 is the RancherOS console's sshd, not the Gogs container's; the git user's .ssh symlinks into the Gogs volume, so StrictModes walks to /, and a 777 root silently rejects every key. That happened after the host's reboot of 2026-09-06; fixed with chmod 755 / and persisted in cloud-config runcmd. If a push ever says "Server refused our key" again, sudo namei -l /home/git/.ssh/authorized_keys on the host is the first check. ros config merge replaces lists wholesale.

Found on the lolg.it host while debugging, not fixed, not urgent:

  • Password authentication is enabled for the git account.
  • The key-18 line in the shared authorized_keys has its command= options after the key, so that key authenticates unrestricted.
  • The receive-pack advertisement answers HTTP 200 anonymously.
  • A dozen old branches on amber's remote (moka, nemo, chromeos, …) predate all of this; pruning them is the owner's call.