Run on 2026-09-30 on Windows 11 with Node 24.12.0, npm 11.6.2 and Git for Windows 2.52.0, from Windows PowerShell 5.1 (step 9 from Git Bash). Every command below is what was run; paste them in order. Folder names contain spaces on purpose.
What was tested. A fresh git clone of the committed HEAD (c5a041b), then the uncommitted branding changes applied to it as one patch. The results therefore describe HEAD plus that patch, not a published release.
The patch holds every change in the working tree except this file: 30 files (AGENTS.md, README.md, demo/sample-files.mjs, eb.mjs, package.json, scripts/leak-scan.mjs, skills/sourcecompass/SKILL.md, src/{cards,init,query,snippets,ua-projection}.mjs, src/viewer/client.js, docs/{PUBLICATION-DELTA,RENAME-INVENTORY,commands,measurement,safety,traceability}.md, docs/{index,demo/index}.html, the three files in docs/img/, and six under test/: brain, foundation, foundation4, foundation5 and foundation7 test files plus fixtures/snippets-c5a041b.mjs). It was created and applied with:
git -C $src diff HEAD --binary --output="$root\changes.patch" -- . ':!docs/SETUP-VERIFICATION.md'
git -C $tk apply --whitespace=nowarn "$root\changes.patch"git status --short in the clone then listed 28 paths, because Git shows the three new screenshots as one folder.
$src is your local checkout of the toolkit (the folder that holds eb.mjs).
$src = '<path to your local checkout of this repository>'
$root = Join-Path $env:TEMP 'sc verify 3'
New-Item -ItemType Directory $root | Out-Null
$tk = "$root\sc test"
# 1. clone HEAD into a path with a space, then apply the patch shown above
git clone -q $src $tk
git -C $src diff HEAD --binary --output="$root\changes.patch" -- . ':!docs/SETUP-VERIFICATION.md'
git -C $tk apply --whitespace=nowarn "$root\changes.patch"
Set-Location $tk
# 2. install and build the built-in demo
npm install --no-audit --no-fund
node eb.mjs demo
# 3. create the throwaway repository "my app" (a copy of the demo's own synthetic repo, which is a Git repo)
Copy-Item -Recurse "$tk\.cache\demo-repo" "$root\my app"
# 4. map it
node eb.mjs init --repo "$root\my app" --name trial --build
# 5. open, without and with --in (EB_NO_LAUNCH stops it starting a browser)
$env:EB_NO_LAUNCH = '1'
node eb.mjs open
node eb.mjs open --in trial
# 6. ask about it (status and q are separate commands)
node eb.mjs status --in trial --repo "$root\my app"
node eb.mjs q "reports" --in trial --repo "$root\my app"
node eb.mjs show "W.route:/jobs#ctl:archive-first-job" --in trial --repo "$root\my app"
# 7. agent-setup on a file that holds two unrelated lines
New-Item -ItemType Directory "$root\notes dir" | Out-Null
Set-Content -Encoding ascii "$root\notes dir\AGENTS.md" @('my rule one', 'my rule two')
$f = "$root\notes dir\AGENTS.md"
node eb.mjs agent-setup --in trial --for codex --file $f --dry-run
node eb.mjs agent-setup --in trial --for codex --file $f
node eb.mjs agent-setup --in trial --for codex --file $f
node eb.mjs agent-setup --in trial --for codex --file $f --remove
# 8. upgrade path: build with the old code (a second clone of HEAD, no patch), read with the new code
git clone -q $src "$root\old head"
Set-Location "$root\old head"; npm install --no-audit --no-fund
node eb.mjs init --repo "$root\my app" --name oldtrial --build
Set-Location $tk
Copy-Item -Recurse "$root\old head\instances\oldtrial" "$tk\instances\oldtrial"
node eb.mjs status --in oldtrial --repo "$root\my app"
node eb.mjs build --in oldtrial --repo "$root\my app"
node eb.mjs status --in oldtrial --repo "$root\my app"
# 9. Git Bash: the same tool, run from inside the throwaway repository
& "$env:ProgramFiles\Git\bin\bash.exe" -c "cd '$($root -replace '\\','/')/my app' && node '$($tk -replace '\\','/')/eb.mjs' context --in trial | head -3"
# 10. clean up
Set-Location $env:TEMP
Remove-Item -Recurse -Force $root| Step | Result |
|---|---|
| 1 | Clone at c5a041b. Patch of 30 files created and applied without errors |
| 2 | added 1 package (typescript). Demo: built demo @6d24fda6 … {"office":9,"field":5} destinations, 1 dead links, 4 tables; freshness FRESH |
| 3 | The copy is a Git repository at 6d24fda6 with 35 files |
| 4 | init printed screens: web (web app) …, data folders: packages/shared/src/jobs/, packages/shared/src/notes/ and a note that a reducer-driven phone app is not detected and where to read about it (docs/commands.md, section "Adapting the config"). Then built trial @6d24fda6 … {"web":9} destinations, 1 dead links, 3 tables; freshness FRESH |
5, open with no --in |
Refused, exit 1: eb: refused: this folder is in a different repository (…/sc verify 3/sc test) than the default instance "trial". Pass --in <instance> to choose a map explicitly, or --repo <checkout>; a default instance is never applied across repositories. The folder you run it in is the toolkit, not the mapped repository, so a default instance is never applied. This is why every documented sequence uses open --in <name> |
5, open --in trial |
Exit 0: EB_NO_LAUNCH is set: not launching …\instances\trial\brain.html |
| 6 | status printed "state": "FRESH" with committedChanges 0 and dirtyPaths 0. q "reports" found W.route:/reports — Reports [web (web app)] (the surface letter is W for a surface named web, so ids differ from the demo's O.route:…). show printed the chain to ▣ jobs (write) … (not a proven save) |
| 7 | The dry run printed would add and the block, and the file hash was unchanged. Apply printed added, with exactly one engineering-brain:begin marker. The rerun printed no change needed and the file was byte-identical. --remove printed removed the block … and the file's bytes equalled the original two lines |
| 8 | The old-code instance read with the new code: "state": "STALE (toolkit code changed since the build; rebuild)", which is the intended response to changed toolkit code. After build it printed built oldtrial … freshness FRESH and status gave FRESH |
| 9 | Git Bash printed "instance": "trial" and the index sha |
- macOS and Linux.
- A clean user profile (a machine that never had Node, Git or a Claude/Codex setup).
- Whether Claude Code or Codex follows the instructions once installed; only the file writing was checked.
- The Claude skill-file variant of
agent-setup(--for claude) by hand; the automated tests cover it (test/foundation7.test.mjs). - That no global state is left behind (no
ebshim on the npm global path, no globalcore.hooksPath): checked in an earlier pass, not repeated here. - The opt-in pre-push hook (
git config core.hooksPath .githooks).