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.
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.@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.amber-compat-* packages: mark deprecated on npm; nothing depends on them.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.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.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.
Working environment on this machine (all learned the hard way):
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).--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.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.lolg.it, self-hosted; agent web tools cannot reach it, local curl
can (/api/repos/amber/amber/builds).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:
git account.key-18 line in the shared authorized_keys has its command= options after the
key, so that key authenticates unrestricted.moka, nemo, chromeos, …) predate all of
this; pruning them is the owner's call.