Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1541 commits
Select commit Hold shift + click to select a range
787a890
fix(studio): load the app module by computed specifier in the law-4 arm
KnockOutEZ Aug 23, 2026
f2466b5
Merge pull request #441 from KnockOutEZ/sd-96-fix-studio-three-adopt-…
KnockOutEZ Aug 23, 2026
cb50120
test(studio): pin the rail badge's positive render byte-for-byte
KnockOutEZ Aug 23, 2026
7c12ed0
test: retitle the auto-deny fanout row to what it now pins
KnockOutEZ Aug 23, 2026
7204483
fix(studio): let a graceful quit land its terminal appends before exi…
KnockOutEZ Aug 23, 2026
96c1f89
fix(daemon): bound the SSE drain wait and end replay on an empty page
KnockOutEZ Aug 23, 2026
9533a4c
fix(daemon): refuse an empty spaceId or client string on run create
KnockOutEZ Aug 23, 2026
1c79367
perf(studio): cache prepared statements per connection on the run-sto…
KnockOutEZ Aug 23, 2026
5f59be6
fix(daemon): document the blank-string bounds the runs router enforces
KnockOutEZ Aug 23, 2026
8c82997
Merge pull request #442 from KnockOutEZ/sd-106-test-studio-pin-the-ra…
KnockOutEZ Aug 23, 2026
a10d819
docs(daemon): correct two stale phrases in the runs.ts drain comments
KnockOutEZ Aug 23, 2026
d28556a
fix(studio): raise the graceful-quit bound to 10s, measured rather th…
KnockOutEZ Aug 23, 2026
3cd1398
Merge pull request #445 from KnockOutEZ/sd-102-perf-studio-cache-prep…
KnockOutEZ Aug 23, 2026
8afb2fa
Merge pull request #444 from KnockOutEZ/sd-97-fix-daemon-sse-drain-wa…
KnockOutEZ Aug 23, 2026
de1b232
Merge pull request #443 from KnockOutEZ/sd-98-fix-studio-a-graceful-q…
KnockOutEZ Aug 23, 2026
f273c32
perf(studio): index studio_runs for the list read; drop the dead stat…
KnockOutEZ Aug 23, 2026
f5b06b2
perf(studio): bound the filtered list scan's projection cost
KnockOutEZ Aug 23, 2026
a56644a
perf(daemon): charge the hydration char budget when the read happens
KnockOutEZ Aug 23, 2026
cce2d9c
fix(studio): one decision.resolved per card, never dropped, never pas…
KnockOutEZ Aug 23, 2026
48c2dc8
docs(daemon): correct the stale clause in the boot-cap doc block
KnockOutEZ Aug 23, 2026
4a107f0
test: record 018 in the merged-migration union
KnockOutEZ Aug 23, 2026
de1f109
Merge pull request #446 from KnockOutEZ/sd-105-perf-daemon-charge-the…
KnockOutEZ Aug 23, 2026
5e6d1de
Merge pull request #447 from KnockOutEZ/sd-104-perf-studio-bound-the-…
KnockOutEZ Aug 23, 2026
9c39f7d
Merge pull request #448 from KnockOutEZ/sd-100-fix-studio-decision-mi…
KnockOutEZ Aug 23, 2026
38c8499
fix(studio): put detach and endRun on the per-tab queue attach alread…
KnockOutEZ Aug 23, 2026
dfc91ae
test(studio): guard the parked-append predicate against an optional p…
KnockOutEZ Aug 23, 2026
5a10f35
Merge pull request #449 from KnockOutEZ/sd-99-fix-studio-detachtab-an…
KnockOutEZ Aug 23, 2026
3bdb58a
fix(studio): store only the origin of an attach url in the run log
KnockOutEZ Aug 23, 2026
68defb6
Merge pull request #450 from KnockOutEZ/sd-101-fix-studio-studio-open…
KnockOutEZ Aug 23, 2026
b02f5f0
perf(studio): keep a condensed live run condensed, and index tab owne…
KnockOutEZ Aug 23, 2026
f139587
test(studio): fail on the paged read before the seq it started from
KnockOutEZ Aug 23, 2026
4a379d4
Merge pull request #451 from KnockOutEZ/sd-103-perf-studio-a-condense…
KnockOutEZ Aug 23, 2026
c0a8da2
perf(studio): clear a run's tabs by what it owns, not by every tab
KnockOutEZ Aug 23, 2026
81f3b52
perf(daemon): build an SSE frame once per event, not once per subscriber
KnockOutEZ Aug 23, 2026
247e4ae
docs(daemon): record the retention the shared SSE frame trades for
KnockOutEZ Aug 23, 2026
06a0f1a
Merge pull request #452 from KnockOutEZ/sd-107-perf-studio-indextabs-…
KnockOutEZ Aug 23, 2026
25278f3
Merge pull request #453 from KnockOutEZ/sd-109-perf-daemon-sse-fan-ou…
KnockOutEZ Aug 23, 2026
a4a72a9
perf(studio): push the live runs, not every run ever hydrated
KnockOutEZ Aug 23, 2026
ec31c61
Merge pull request #454 from KnockOutEZ/sd-108-perf-studio-the-ipc-st…
KnockOutEZ Aug 23, 2026
79c7a95
test(studio): pin StudioSessionView.runId in the studio_list view
KnockOutEZ Aug 23, 2026
84d5ef6
fix(studio): end the run a refused studio_open created
KnockOutEZ Aug 24, 2026
f417e0f
fix(daemon): gate the SSE heal on busy and clamp a resume past the tail
KnockOutEZ Aug 24, 2026
ac925e4
Merge pull request #455 from KnockOutEZ/sd-116-test-studio-pin-studio…
KnockOutEZ Aug 24, 2026
2a81423
Merge pull request #456 from KnockOutEZ/sd-110-fix-studio-a-failed-st…
KnockOutEZ Aug 24, 2026
2ae0d52
Merge pull request #458 from KnockOutEZ/sd-113-fix-daemon-sse-tail-ga…
KnockOutEZ Aug 24, 2026
f3d50b8
fix(studio): heal an envelope that races an unknown-run adoption, iso…
KnockOutEZ Aug 24, 2026
a71c73b
fix(fetch): a hidden <main> must not survive the visibility pre-pass
KnockOutEZ Aug 23, 2026
25187cd
test(studio): move the tray-lifetime negative control to where the ou…
KnockOutEZ Aug 24, 2026
77d2536
perf(studio): take the per-event jsonl append off the shared loop
KnockOutEZ Aug 24, 2026
96ae119
Merge pull request #457 from KnockOutEZ/sd-115-fix-fetch-a-hidden-mai…
KnockOutEZ Aug 24, 2026
2e593b8
Merge pull request #459 from KnockOutEZ/sd-111-fix-studio-harden-the-…
KnockOutEZ Aug 24, 2026
f42def7
test(studio): pin the crash boundary the queued jsonl projection draws
KnockOutEZ Aug 24, 2026
b02fb72
perf(studio): carry the boot hydration allowance across pages instead…
KnockOutEZ Aug 24, 2026
ce0200c
test(studio): pin what a whole hydration retains, not what one page r…
KnockOutEZ Aug 24, 2026
bcad043
Merge pull request #460 from KnockOutEZ/sd-118-perf-studio-take-the-p…
KnockOutEZ Aug 24, 2026
78b7474
Merge pull request #461 from KnockOutEZ/sd-117-perf-studio-carry-the-…
KnockOutEZ Aug 24, 2026
9536d71
fix(studio): decide a decision's resolution on the lane the terminal …
KnockOutEZ Aug 24, 2026
718f8e4
test(studio): pin that an auto-deny cannot outrun the run's terminal …
KnockOutEZ Aug 24, 2026
20d1936
fix(studio): refuse a decision card raised past the run's terminal event
KnockOutEZ Aug 24, 2026
a802289
Merge pull request #462 from KnockOutEZ/sd-112-fix-studio-decision-re…
KnockOutEZ Aug 24, 2026
9f6140e
fix(studio): studio_list must not return a tab the human already closed
KnockOutEZ Aug 24, 2026
177459d
test(studio): pin the whole listing, not just the dead id's absence
KnockOutEZ Aug 24, 2026
65aa812
Merge pull request #463 from KnockOutEZ/sd-114-fix-studio-studio-list…
KnockOutEZ Aug 24, 2026
9d139b0
perf(studio): end sessions concurrently so a quit at any session cap …
KnockOutEZ Aug 24, 2026
95ae722
docs(studio): correct the graceful-quit calibration against a real me…
KnockOutEZ Aug 24, 2026
dcf834b
Merge pull request #464 from KnockOutEZ/sd-119-perf-studio-graceful-q…
KnockOutEZ Aug 24, 2026
0e407fd
fix(fetch): hoist the hidden-<main> body walk out of the candidate loop
KnockOutEZ Aug 24, 2026
72202ed
fix(fetch): walk the shell discriminator iteratively — deep nesting f…
KnockOutEZ Aug 24, 2026
fe973da
Merge pull request #465 from KnockOutEZ/sd-120-fix-fetch-hoist-the-hi…
KnockOutEZ Aug 24, 2026
02328b9
test(daemon): pin the SSE heal gate where goLive does not fill the hole
KnockOutEZ Aug 24, 2026
8237030
test(daemon): say why the queue behind the heal gate is unpinnable, i…
KnockOutEZ Aug 24, 2026
1f2a703
Merge pull request #466 from KnockOutEZ/sd-121-test-daemon-pin-the-ss…
KnockOutEZ Aug 24, 2026
3f06f71
chore(daemon): keep the shadowed heal re-dispatch, and name what shad…
KnockOutEZ Aug 24, 2026
7f38c2f
perf(studio): make the append path's pending-decision check an existe…
KnockOutEZ Aug 24, 2026
c6d8d0e
fix(studio): retry a run adoption the store refused
KnockOutEZ Aug 24, 2026
a98370c
Merge pull request #467 from KnockOutEZ/sd-122-chore-daemon-the-sse-p…
KnockOutEZ Aug 24, 2026
14eddb9
Merge pull request #468 from KnockOutEZ/sd-124-fix-studio-a-failed-ru…
KnockOutEZ Aug 24, 2026
6c412f8
Merge pull request #469 from KnockOutEZ/sd-123-perf-studio-pending-de…
KnockOutEZ Aug 24, 2026
47cc76f
fix(extraction): stop rescanning hidden subtrees the pass has already…
KnockOutEZ Aug 24, 2026
4383f7a
fix(studio): charge boot hydration by what the store read, not what i…
KnockOutEZ Aug 24, 2026
07d58d1
Merge pull request #470 from KnockOutEZ/sd-126-fix-studio-boot-hydrat…
KnockOutEZ Aug 24, 2026
eeaf559
Merge pull request #471 from KnockOutEZ/sd-125-fix-extraction-striphi…
KnockOutEZ Aug 24, 2026
589d45a
fix(studio): charge the boot page for the size probe it ran
KnockOutEZ Aug 24, 2026
de081c6
test(studio): pin the boot that is answered from the size probe alone
KnockOutEZ Aug 24, 2026
e0698b3
Merge pull request #474 from KnockOutEZ/sd-127-fix-studio-boot-page-i…
KnockOutEZ Aug 24, 2026
2aac244
fix(studio): stop the broker by closing its stdin, not by signalling it
KnockOutEZ Aug 24, 2026
3c2a978
test(studio): clean the forced-race data dir from afterAll, not the s…
KnockOutEZ Aug 24, 2026
b3c4eb1
test(studio): pin the stop budget and the door the escalation is not
KnockOutEZ Aug 24, 2026
83c3c29
Merge pull request #475 from KnockOutEZ/sd-128-fix-studio-broker-stop…
KnockOutEZ Aug 24, 2026
622ef0f
perf(studio): re-condense a live run at the shipped retention bound
KnockOutEZ Aug 24, 2026
f2c18eb
docs(studio): retainedEventCount is zero for a live run past the boun…
KnockOutEZ Aug 24, 2026
6fcfdf1
Merge pull request #476 from KnockOutEZ/sd-129-perf-studio-a-live-run…
KnockOutEZ Aug 24, 2026
1f8802c
fix(extraction): resolve inline-style strings and comments in one lin…
KnockOutEZ Aug 24, 2026
8ad4256
perf(studio): fold a condensed run's envelopes in place instead of re…
KnockOutEZ Aug 24, 2026
e45467f
docs(studio): rewrap the fold-in-place docstring to the file's column
KnockOutEZ Aug 24, 2026
4e6927f
Merge pull request #477 from KnockOutEZ/sd-130-fix-extraction-visibil…
KnockOutEZ Aug 24, 2026
57749f8
Merge pull request #478 from KnockOutEZ/sd-131-perf-studio-a-live-run…
KnockOutEZ Aug 24, 2026
8e0c09e
perf(studio): accumulate broker frames linearly instead of quadratically
KnockOutEZ Aug 24, 2026
0bc63db
perf(studio): bound a runEventsSince page in characters, not only in …
KnockOutEZ Aug 24, 2026
7a3b935
refactor(studio): export DEFAULT_MAX_FRAME_CHARS so the child's page …
KnockOutEZ Aug 24, 2026
f62b324
test(studio): time only the carry, not the 32M-character parse that e…
KnockOutEZ Aug 24, 2026
4424805
fix(studio): keep the frame bound reachable from a program that has n…
KnockOutEZ Aug 24, 2026
cb1ea94
Merge pull request #479 from KnockOutEZ/sd-132-perf-studio-broker-fra…
KnockOutEZ Aug 24, 2026
4737e2c
fix(extraction): recover from a bad string or bad url where the brows…
KnockOutEZ Aug 24, 2026
18f27ba
Merge pull request #480 from KnockOutEZ/sd-133-fix-extraction-visibil…
KnockOutEZ Aug 26, 2026
5880147
perf(studio): fold held tabs in the Set that already carries their order
KnockOutEZ Aug 26, 2026
d292aa3
test(studio): pin the consent window absolutely, not through its own …
KnockOutEZ Aug 26, 2026
7485906
fix(extraction): resolve CSS escapes in the visibility pre-pass
KnockOutEZ Aug 26, 2026
055dc11
fix(daemon): charge and cap the boot page's condensed projections
KnockOutEZ Aug 26, 2026
dca98aa
fix(extraction): recognise an escaped `url(` as the url token it is
KnockOutEZ Aug 26, 2026
33dd5bd
fix(studio): refuse a tab attach past a run's terminal event
KnockOutEZ Aug 26, 2026
5be481d
fix(studio): unwind an open() that resumes into a closed host
KnockOutEZ Aug 26, 2026
61d26c0
Merge pull request #482 from KnockOutEZ/sd-138-perf-studio-projectrun…
KnockOutEZ Aug 26, 2026
05d43cc
fix(daemon): never cut a condensed projection's held-tab list
KnockOutEZ Aug 26, 2026
fc34c94
Merge origin/studio-handoff into sd-139
KnockOutEZ Aug 26, 2026
5bf73c1
chore(cache): add the missing .sql grep-mirrors for 009 and 018
KnockOutEZ Aug 26, 2026
04fc42a
test(cache): pin the grep-mirror promise as a class, not on 017 alone
KnockOutEZ Aug 26, 2026
e0a53f2
Merge pull request #483 from KnockOutEZ/sd-134-fix-extraction-visibil…
KnockOutEZ Aug 26, 2026
37e6b0a
Merge pull request #485 from KnockOutEZ/sd-140-chore-cache-migration-…
KnockOutEZ Aug 26, 2026
9d76e71
Merge pull request #484 from KnockOutEZ/sd-139-fix-daemon-runlistlogs…
KnockOutEZ Aug 26, 2026
e17eba1
Merge origin/studio-handoff into sd-135
KnockOutEZ Aug 26, 2026
216fc59
Merge pull request #486 from KnockOutEZ/sd-135-fix-studio-tab-attache…
KnockOutEZ Aug 26, 2026
afdc17a
fix(studio): record a human approval durably before releasing the action
KnockOutEZ Aug 26, 2026
65cedb1
test(studio): force the broker down at an approval's append
KnockOutEZ Aug 26, 2026
14b0347
fix(studio): do not resurface a card onto a window a quit already des…
KnockOutEZ Aug 26, 2026
c120920
docs(studio): correct what the approval retry bound is load-bearing for
KnockOutEZ Aug 26, 2026
438ab43
fix(studio): probe the log before re-appending a resolution, not only…
KnockOutEZ Aug 26, 2026
43a85bd
Merge pull request #487 from KnockOutEZ/sd-136-fix-studio-a-human-app…
KnockOutEZ Aug 26, 2026
4c20141
perf(studio): bound the projection host's lifetime retention
KnockOutEZ Aug 26, 2026
9aa56cb
test(studio): pin the projection host's retention, walk, adoption and…
KnockOutEZ Aug 26, 2026
07e2b12
fix(studio): evict by the run's birth, and make the fake store list n…
KnockOutEZ Aug 26, 2026
2e4f0c9
Merge pull request #488 from KnockOutEZ/sd-137-perf-studio-bound-the-…
KnockOutEZ Aug 26, 2026
fc58b43
perf(studio): meter what a run listing's projection actually reads
KnockOutEZ Aug 27, 2026
bc7bdb8
perf(studio): bound the projection host's never-terminal runs and its…
KnockOutEZ Aug 27, 2026
4c3f8f8
test(studio): pin the exported bounds to their literal values
KnockOutEZ Aug 27, 2026
234563b
docs(studio): name MAX_HYDRATION_PAGES as the spin guard it now is
KnockOutEZ Aug 27, 2026
ecbb76b
test(studio): drain the live-adoption corpus in one turn, not one tim…
KnockOutEZ Aug 27, 2026
63d77d9
docs(studio): put the fourth stale retention claim into the past tense
KnockOutEZ Aug 27, 2026
d5457b1
Merge pull request #489 from KnockOutEZ/sd-141-fix-studio-the-project…
KnockOutEZ Aug 27, 2026
a9b77fa
fix(studio): a boot projection the store reports as short is re-read,…
KnockOutEZ Aug 27, 2026
d45b74c
chore(studio): extension the two relative imports the root projects n…
KnockOutEZ Aug 27, 2026
f8ea24b
test(extraction): pin a CSS comment as a token boundary, not an erasure
KnockOutEZ Aug 27, 2026
ea8db54
fix(extraction): resolve a CSS comment to a space, so it cannot weld …
KnockOutEZ Aug 27, 2026
b0c907d
Revert "chore(studio): extension the two relative imports the root pr…
KnockOutEZ Aug 27, 2026
f19b7c4
Merge pull request #491 from KnockOutEZ/sd-145-fix-extraction-comment…
KnockOutEZ Aug 27, 2026
d054101
test(studio): pin the host's half where it can run, and the store's h…
KnockOutEZ Aug 27, 2026
95d8fc0
Merge pull request #490 from KnockOutEZ/sd-143-fix-studio-projectiono…
KnockOutEZ Aug 27, 2026
ea5f600
fix(daemon): charge the SSE hold buffer in retained bytes, not wire b…
KnockOutEZ Aug 27, 2026
10e028f
docs(daemon): drop three comment references to the deleted json field
KnockOutEZ Aug 27, 2026
8328d27
Merge pull request #492 from KnockOutEZ/sd-144-fix-daemon-the-sse-hol…
KnockOutEZ Aug 27, 2026
3e25431
feat(build): dependency enablers for the studio repo split
KnockOutEZ Aug 27, 2026
52e9336
fix(budget): read npm pack's JSON off a stdout the prepare hook also …
KnockOutEZ Aug 27, 2026
74670b5
fix(budget): npm cannot be spawned on Windows without a shell
KnockOutEZ Aug 27, 2026
b0e7542
Merge pull request #493 from KnockOutEZ/sd-156-feat-split-studio-hand…
KnockOutEZ Aug 27, 2026
df7d371
refactor(studio): retire the dev-checkout launch rung
KnockOutEZ Aug 27, 2026
4bb8135
feat(split): excise the private studio set and retarget CI at studio-…
KnockOutEZ Aug 27, 2026
1c5c8f2
Merge pull request #494 from KnockOutEZ/sd-156-feat-split-excise-priv…
KnockOutEZ Aug 27, 2026
2cf1326
feat(build): exports subpaths for run-store and config
KnockOutEZ Aug 27, 2026
f272944
Merge pull request #496 from KnockOutEZ/sd-157-core-exports-subpaths
KnockOutEZ Aug 27, 2026
fc499b2
docs: retire the four tracked references to the deleted studio-handof…
KnockOutEZ Aug 27, 2026
1eb329a
Merge pull request #497 from KnockOutEZ/sd-159-chore-split-end-to-end…
KnockOutEZ Aug 27, 2026
7524c2c
test(studio): pin the decline-path stall — a launcher that declines m…
KnockOutEZ Aug 27, 2026
ce4167d
fix(cli): launch the acquired substrate from `wigolo studio`
KnockOutEZ Aug 27, 2026
970e26a
fix(studio): return the auto-launch decline so the caller skips the h…
KnockOutEZ Aug 27, 2026
2e4e9e5
test(studio): cover defaultLaunch directly — decline, spawn target, h…
KnockOutEZ Aug 27, 2026
ab5d349
Merge pull request #499 from KnockOutEZ/sd-165-fix-studio-auto-launch…
KnockOutEZ Aug 27, 2026
6bd05a7
Merge pull request #498 from KnockOutEZ/sd-164-fix-cli-runstudio-stil…
KnockOutEZ Aug 27, 2026
0c589b5
chore(build): opt out of the prepare hook's build in CI legs that bui…
KnockOutEZ Aug 27, 2026
daad6ec
test(build): cover both prepare-build arms, the opt-out, and its CI w…
KnockOutEZ Aug 27, 2026
01a3ca8
test(build): serialise the dist/-rebuilding tarball gate and assert t…
KnockOutEZ Aug 27, 2026
aafdab3
test(ci): pin the push trigger branches and the gate job's --ignore-s…
KnockOutEZ Aug 27, 2026
958cb44
test(build): probe the exports map against the built dist/
KnockOutEZ Aug 27, 2026
d057b9a
fix(test): separate naming a build command from handing one to a chil…
KnockOutEZ Aug 27, 2026
1e9c066
Merge pull request #500 from KnockOutEZ/sd-166-chore-build-prepare-ho…
KnockOutEZ Aug 27, 2026
c12d7ae
test(studio): prove an async spawn error escapes defaultLaunch uncaught
KnockOutEZ Aug 27, 2026
67f7e12
fix(studio): attach the spawn error listener the unattended launcher …
KnockOutEZ Aug 27, 2026
4346688
test(cli): restore the 1,474 lines of studio host pins ce4167da deleted
KnockOutEZ Aug 27, 2026
bc32a70
fix(studio): confine a substrate record to the substrate root
KnockOutEZ Aug 27, 2026
686619d
test(cli): plant the studio record where the acquirer actually installs
KnockOutEZ Aug 27, 2026
3e1b09d
test(cli): pin the malformed-profile fail-closed refusal (PIN-B3)
KnockOutEZ Aug 27, 2026
334d332
Merge pull request #501 from KnockOutEZ/sd-168-test-cli-ce4167da-sile…
KnockOutEZ Aug 27, 2026
c36a00a
test(studio): make the absolute-executable arm platform-neutral
KnockOutEZ Aug 27, 2026
3bd0175
Merge studio-handoff-core into sd-167
KnockOutEZ Aug 27, 2026
c9bcf29
Merge pull request #502 from KnockOutEZ/sd-167-fix-studio-defaultlaun…
KnockOutEZ Aug 27, 2026
4d73a23
chore(ci): opt out of the prepare hook in every root install leg
KnockOutEZ Aug 27, 2026
e1f442a
Merge pull request #503 from KnockOutEZ/sd-169-chore-ci-prepare-hook-…
KnockOutEZ Aug 27, 2026
883d94a
fix(studio): copy substrate symlinks verbatim so .app bundles survive…
KnockOutEZ Aug 27, 2026
9004954
Merge pull request #504 from KnockOutEZ/sd-170-fix-studio-substrate-i…
KnockOutEZ Aug 27, 2026
6d86400
fix(ci): opt the release publish step out of the prepare hook
KnockOutEZ Aug 27, 2026
7ed4bc6
Merge pull request #505 from KnockOutEZ/sd-171-fix-ci-release-publish…
KnockOutEZ Aug 27, 2026
5e0d4c0
test(studio): plant escaping symlinks the string-only containment che…
KnockOutEZ Aug 27, 2026
d985907
fix(studio): resolve containment on the filesystem instead of on the …
KnockOutEZ Aug 27, 2026
d294cab
test(studio): give the absolute-link rule its own kill
KnockOutEZ Aug 27, 2026
f67e9f1
Merge pull request #506 from KnockOutEZ/sd-173-fix-studio-verbatim-sy…
KnockOutEZ Aug 27, 2026
bcc9707
test(studio): pin runStudio's spawn error listener against an unatten…
KnockOutEZ Aug 28, 2026
47eb97c
test(studio): pin '.' and '..' as versions, the two that feed rmSync …
KnockOutEZ Aug 28, 2026
035b377
test(studio): pin that findEscapingLink terminates on a contained lin…
KnockOutEZ Aug 28, 2026
f714540
Merge pull request #507 from KnockOutEZ/sd-175-test-studio-pin-three-…
KnockOutEZ Aug 28, 2026
e936ada
fix(cli): strip WIGOLO_STUDIO_HIDDEN case-insensitively in runStudio
KnockOutEZ Aug 28, 2026
79e92f6
test(daemon): re-arm the broker page and boot bounds core-side after …
KnockOutEZ Aug 28, 2026
93b3bf5
fix(test): serialise the dist/-spawning broker tests and guard the re…
KnockOutEZ Aug 28, 2026
310ec53
fix(test): de-flake the SIGKILL drain bound and pin the zero-drain sc…
KnockOutEZ Aug 28, 2026
308a204
Merge pull request #508 from KnockOutEZ/sd-179-fix-cli-the-wigolo-stu…
KnockOutEZ Aug 28, 2026
b9b1091
fix(test): replace the serial lane's removed singleFork option with m…
KnockOutEZ Aug 28, 2026
28494b5
docs(test): attribute the dist/-window measurement to the PX0 exit re…
KnockOutEZ Aug 28, 2026
818b2bf
Merge pull request #509 from KnockOutEZ/sd-177-test-daemon-broker-pag…
KnockOutEZ Aug 28, 2026
7c7c706
Merge pull request #510 from KnockOutEZ/sd-176-fix-test-dist-spawning…
KnockOutEZ Aug 28, 2026
fa668ef
test(studio): construct the linked prefix the anti-false-decline arm …
KnockOutEZ Aug 28, 2026
c7c18d6
Merge pull request #511 from KnockOutEZ/sd-178-test-studio-the-anti-f…
KnockOutEZ Aug 28, 2026
44b17e6
test(build): pin the prepare hook's reachability at every Dockerfile …
KnockOutEZ Aug 28, 2026
5b3a1be
fix(build): copy the prepare script into every layer that runs npm ci
KnockOutEZ Aug 28, 2026
913fe2b
fix(build): copy all of scripts/ — postinstall fails before prepare does
KnockOutEZ Aug 28, 2026
a79c33c
fix(build): bake the browser libraries with a CLI that survives --omi…
KnockOutEZ Aug 28, 2026
acc539b
Merge pull request #512 from KnockOutEZ/sd-180-fix-build-docker-build…
KnockOutEZ Aug 28, 2026
f062a5a
test(studio): pin acquireSubstrate's never-throws contract and symlin…
KnockOutEZ Aug 28, 2026
8f465f6
fix(studio): hold acquireSubstrate's never-throws contract and refuse…
KnockOutEZ Aug 28, 2026
6d40ca4
test(studio): import SubstrateManifest as a type so the debt ratchet …
KnockOutEZ Aug 28, 2026
0d70398
Merge pull request #513 from KnockOutEZ/sd-182-fix-studio-acquiresubs…
KnockOutEZ Aug 28, 2026
c534e7e
fix(studio): break the auto-launch poll on a spawn that already died
KnockOutEZ Aug 28, 2026
43fffa8
fix(studio): remember a launch that produced no handle for 60s
KnockOutEZ Aug 28, 2026
27e480a
Merge branch 'studio-handoff-core' into sd-183-fix-studio-auto-launch…
KnockOutEZ Aug 28, 2026
2cdc4e9
Merge pull request #514 from KnockOutEZ/sd-183-fix-studio-auto-launch…
KnockOutEZ Aug 28, 2026
7fb80ff
test(studio): pin the auto-launch memo exit-4 shapes
KnockOutEZ Aug 28, 2026
925e9b2
fix(studio): memoize only a launch that was actually attempted
KnockOutEZ Aug 28, 2026
89f423b
Merge pull request #515 from KnockOutEZ/sd-185-fix-studio-auto-launch…
KnockOutEZ Aug 28, 2026
0d8b8df
test(studio): pin auto-launch's failed-probe and hidden-flag seam con…
KnockOutEZ Aug 28, 2026
f11ffb2
fix(studio): auto-launch honours its own seam contracts
KnockOutEZ Aug 28, 2026
62e6699
Merge pull request #516 from KnockOutEZ/sd-187-fix-studio-auto-launch…
KnockOutEZ Aug 28, 2026
7b0b94c
test(studio): pin the injected-source seam's never-throws and record …
KnockOutEZ Aug 28, 2026
d920d20
fix(studio): acquireSubstrate's pre-flight guards answer from inside …
KnockOutEZ Aug 28, 2026
06a9469
Merge pull request #517 from KnockOutEZ/sd-188-fix-studio-acquiresubs…
KnockOutEZ Aug 28, 2026
f905489
test(studio): pin the plant's containment and the off switch's value …
KnockOutEZ Aug 28, 2026
0a287cd
fix(studio): confine the substrate plant, and read the off switch cas…
KnockOutEZ Aug 28, 2026
11b58f3
Merge pull request #518 from KnockOutEZ/sd-189-fix-studio-auto-launch…
KnockOutEZ Aug 28, 2026
816b99e
test(studio): pin auto-launch's never-throws, launcher-answer and mem…
KnockOutEZ Aug 28, 2026
719952e
fix(studio): auto-launch keeps its never-throws, launcher-answer and …
KnockOutEZ Aug 28, 2026
00c0b49
Merge pull request #519 from KnockOutEZ/sd-191-fix-studio-auto-launch…
KnockOutEZ Aug 28, 2026
81fc602
test(build): pin the prepare hook's off-value spellings
KnockOutEZ Aug 29, 2026
4ad94c7
fix(build): WIGOLO_SKIP_PREPARE honours 0/false/off instead of skippi…
KnockOutEZ Aug 29, 2026
d19c427
Merge pull request #520 from KnockOutEZ/sd-192-fix-build-wigolo-skip-…
KnockOutEZ Aug 29, 2026
a9111be
test(build): pin that the install-register classifier sees an un-supp…
KnockOutEZ Aug 29, 2026
7f87cc3
fix(ci): the install-register classifier and its enumeration cover np…
KnockOutEZ Aug 29, 2026
019f160
Merge pull request #522 from KnockOutEZ/sd-195-fix-ci-the-npm-publish…
KnockOutEZ Aug 29, 2026
8454f00
test(studio): pin the symlinked root and the non-version path as cont…
KnockOutEZ Aug 29, 2026
96d1841
fix(studio): refuse a linked substrate root and a record path that is…
KnockOutEZ Aug 29, 2026
f28a050
test(studio): make the root/<version> equality the thing that kills t…
KnockOutEZ Aug 29, 2026
d80863d
test(studio): gate the containment arms on a measured link capability…
KnockOutEZ Aug 29, 2026
5fc9287
Merge pull request #523 from KnockOutEZ/sd-197-fix-studio-substrate-c…
KnockOutEZ Aug 29, 2026
8d1bd93
fix(test): match the substrate refusal separator-agnostically on win32
KnockOutEZ Aug 29, 2026
6c33d69
Merge pull request #524 from KnockOutEZ/sd-199-fix-test-win32-path-se…
KnockOutEZ Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 7 additions & 3 deletions .github/workflows/agent-benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,18 @@ jobs:
timeout-minutes: 45

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- uses: actions/setup-node@v4
- uses: actions/setup-node@v7
with:
node-version: '20'
node-version: '22'
cache: 'npm'

# The explicit build below is the only build this job needs; without the opt-out the
# root `prepare` hook builds again during `npm ci`.
- run: npm ci
env:
WIGOLO_SKIP_PREPARE: '1'

- run: npm run build

Expand Down
121 changes: 121 additions & 0 deletions .github/workflows/base-guard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
name: Base Guard

# Almost nothing in this repo should land directly on `main`. Feature and slice
# work targets the program branch. PR #309 was opened against `main` with an
# explicit `--base main` on the same command line as the slice head branch: it
# carried 100 commits, CI was green and `mergeable` reported MERGEABLE, so the
# only thing standing between that PR and the entire program branch landing on
# `main` was a human noticing the commit count was absurd. This workflow turns
# that into a red check.
on:
pull_request:
branches: [main]
# Every entry here is load-bearing.
#
# `labeled` / `unlabeled`: without them a PR that legitimately targets
# `main` would add the label and the check would stay stuck on its last
# (red) run, with no way to re-evaluate short of an empty push. A guard that
# cannot be satisfied is a guard people learn to bypass.
#
# `edited`: retargeting a PR emits `edited` (carrying
# `changes.base.ref.from`) — NOT `synchronize`, which only fires on a push.
# Without `edited`, a PR opened against the program branch and then
# retargeted with `gh pr edit --base main` would fire no event in this list
# and the guard would never run — the exact bypass it exists to prevent.
#
# KNOWN GAP, deliberately left: `edited` does not clear the converse case.
# The branch filter below is evaluated against the branch the PR targets at
# event time, and the `edited` payload already carries the NEW base. So
# retargeting AWAY from `main` (i.e. following remedy 1 below) fails the
# filter, no run is triggered, and the earlier red check-run stays on the
# head SHA. It is cosmetic rather than blocking — this check is only ever
# required on `main`, and a PR that has moved off `main` is no longer
# gated by it. Closing it properly means dropping the branch filter and
# making the JOB conditional on the base ref, which costs an extra check
# line on every PR in the repo; that trade has not been made yet.
types: [opened, reopened, synchronize, edited, labeled, unlabeled]

# `pull_request`, deliberately NOT `pull_request_target`: this job checks out no
# code, runs nothing from the PR, and needs no secrets. `pull_request_target`
# would hand a fork's PR a privileged context for zero benefit.
permissions:
contents: read

jobs:
guard-main-base:
# Stable name so this can be made a required status check.
name: base guard (main)
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Require the release-to-main label
env:
# Read from the event payload rather than calling `gh`: the payload is
# already delivered with the full, current label set for every trigger
# type above (including the labeled/unlabeled events themselves), so an
# API round trip would add a token requirement and a rate-limit
# dependency to learn something we were already handed.
#
# `labels.*.name` yields an ARRAY, and `contains(array, item)` matches
# array elements exactly. That matters: against a plain string
# `contains` is a substring test, and a stray label such as
# `no-release-to-main` would satisfy it.
HAS_LABEL: ${{ contains(github.event.pull_request.labels.*.name, 'release-to-main') }}
# PR-author-controlled values are passed through env, never
# interpolated into the script body.
PR_NUMBER: ${{ github.event.pull_request.number }}
HEAD_REF: ${{ github.event.pull_request.head.ref }}
BASE_REF: ${{ github.event.pull_request.base.ref }}
COMMIT_COUNT: ${{ github.event.pull_request.commits }}
run: |
set -euo pipefail

if [ "$HAS_LABEL" = "true" ]; then
echo "PR #${PR_NUMBER} targets '${BASE_REF}' and carries the 'release-to-main' label."
echo "Release to main is intentional. Allowing."
exit 0
fi

{
echo "### Base guard failed"
echo
echo "PR #${PR_NUMBER} targets \`${BASE_REF}\` without the \`release-to-main\` label."
echo
echo "| | |"
echo "|---|---|"
echo "| head | \`${HEAD_REF}\` |"
echo "| base | \`${BASE_REF}\` |"
echo "| commits | ${COMMIT_COUNT} |"
} >> "$GITHUB_STEP_SUMMARY"

echo "::error title=PR targets main without the release-to-main label::PR #${PR_NUMBER} (${HEAD_REF} -> ${BASE_REF}, ${COMMIT_COUNT} commits) must carry the 'release-to-main' label, or change its base off main."

cat <<EOF

Refusing this PR: it targets '${BASE_REF}' without the 'release-to-main' label.

head: ${HEAD_REF}
base: ${BASE_REF}
commits: ${COMMIT_COUNT}

Feature and slice work in this repo belongs on the program branch, not on
'main'. A PR based on 'main' by mistake will still show green CI and still
report MERGEABLE, because nothing else checks what it is based on.

Pick one:

1. You did NOT mean to target 'main' -- this is the usual case, and a
large commit count above is the tell. Change the base, then read the
value back rather than trusting the flag:

gh pr edit ${PR_NUMBER} --base <program-branch>
gh pr view ${PR_NUMBER} --json baseRefName

2. This really is a release to 'main'. Add the label; this check re-runs
on label changes and will go green without a new push:

gh pr edit ${PR_NUMBER} --add-label release-to-main

EOF

exit 1
8 changes: 6 additions & 2 deletions .github/workflows/binary-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,18 @@ jobs:
node_modules/@img/sharp-win32-x64/**/*

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- uses: actions/setup-node@v4
- uses: actions/setup-node@v7
with:
node-version: '22'

# Opt out of the root `prepare` hook's build: the next step builds explicitly, and this
# is a 5-target matrix, so the duplicate install-time build is paid five times.
- name: Install dependencies
run: npm ci
env:
WIGOLO_SKIP_PREPARE: '1'

- name: Build dist + CJS bundle
run: |
Expand Down
Loading
Loading