Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
243 commits
Select commit Hold shift + click to select a range
b042485
fix(gate): keep a gate.json that won't load, and reload gate files by…
Oct 15, 2026
ae67efc
fix(gate): keep a copy no more readable than gate.json
Oct 15, 2026
b4a874b
fix(gate): give the copy gate.json's group under Bun, and log a gate.…
Oct 16, 2026
b6be0f0
feat: closestNames and isNearMiss, for refusals that name what was pr…
Oct 17, 2026
5bbde6f
fix(gate): name every problem a wake rule has, and read gate.json's a…
Oct 15, 2026
3aa56d8
fix(gate): keep the copy of a linked gate.json owner-only
Oct 17, 2026
cf5253d
Merge branch 'fix/unreadable-gate-files' into fix/strict-gate-validation
Oct 17, 2026
80503be
fix(gate): clear the state a write leaves stale, and say all a refusa…
Oct 17, 2026
13c1594
fix(gate): read a name holding a field's whole name as that field whe…
Oct 17, 2026
f97f8fb
fix(gate): a batch a write or reload can't deliver is logged, not thrown
Oct 17, 2026
a8fbc68
Merge branch 'main' into fix/unreadable-gate-files
Oct 18, 2026
9dd035c
fix(gate): keep the copy owner-only, and answer a change as made when…
Oct 18, 2026
e21b3ad
Merge branch 'fix/unreadable-gate-files' into fix/strict-gate-validation
Oct 18, 2026
dce014e
fix(gate): load what earlier releases loaded, and keep a batch's loss…
Oct 18, 2026
85e616d
fix(gate): run the starting rules a gate.json with no rule list lacks
Oct 18, 2026
065a6f8
fix(gate): say what a start beside a gate.json with no rule list runs
Oct 18, 2026
d6af7ad
fix(gate): keep what's said and listed true beside the starting rules
Oct 18, 2026
5fe50b2
fix(gate): start as without gate.json where starting rules can't run …
Oct 18, 2026
f01b68e
test(gate): pin a gate.json with a list beside starting rules refused…
Oct 18, 2026
5bc9e52
fix(gate): start as without gate.json when it has no rules of its own
Oct 18, 2026
b7f5026
fix(gate): count every starting rule a start can't put in force
Oct 18, 2026
5009d96
test(gate): pin quiet and combined cases of a start without gate.json
Oct 18, 2026
7ff3cce
feat(workspace): a read says what the text is, cuts a long line, and …
Oct 17, 2026
57aff86
feat(workspace): grep matches and shows a CRLF file's lines as read s…
Oct 17, 2026
d62d07a
feat(workspace): a read settles its path against disk first, as a lis…
Oct 17, 2026
b33517e
fix(workspace): a read's cut last line is named in its note, readBina…
Oct 17, 2026
c00b269
docs(workspace): grep follows ripgrep's --crlf in matching a CRLF lin…
Oct 17, 2026
0a4303a
fix(workspace): a read whose disk check gives up says the check didn'…
Oct 18, 2026
83aae28
fix(workspace): the page that ends a file names its cut last line's rest
Oct 18, 2026
cd7f83b
fix(workspace): a read made in process pages by its line limit alone,…
Oct 18, 2026
eec5781
fix(workspace): a read's own disk check names its path, as a file too…
Oct 18, 2026
fd7a44b
docs(framework): executeToolCall's doc names the caller it has
Oct 18, 2026
3727bb2
Merge feat/workspace-edit-planner into feat/workspace-read
Oct 18, 2026
22becb5
fix(workspace): a line page is the longest page that fits its result …
Oct 18, 2026
4bb31cf
fix(workspace): a character page that holds all it was asked for name…
Oct 18, 2026
fb0f764
fix(workspace): a read says disk's copy was taken in only where its t…
Oct 18, 2026
62d223d
test(workspace): the read tests an internal review found missing
Oct 18, 2026
0f02d3e
docs(changelog): grep shows each matched line whole
Oct 18, 2026
db840ca
fix(workspace): a read's conflict note on a read-only mount names onl…
Oct 18, 2026
966ae54
test(workspace): a continued line page ends where its note says
Oct 18, 2026
3481086
docs(workspace): the page bound's figures, and comments a review misread
Oct 18, 2026
60e1748
Merge feat/workspace-edit-planner into feat/workspace-read
Oct 18, 2026
c7cdbbd
fix(workspace): a line whose own text ends in a CR shows its line end…
Oct 19, 2026
8b28652
fix(workspace): a cut line's note gives the limitChars that reads its…
Oct 19, 2026
93216a7
fix(workspace): a read whose disk check gave up says to read again
Oct 19, 2026
94138a9
test(workspace): a first line cut to fit, read from a later offset
Oct 19, 2026
7235800
docs: comments and a tool description an internal review found out of…
Oct 19, 2026
b5e97c5
fix(workspace): a stopped character page gives the limitChars left of…
Oct 19, 2026
eea460b
fix(workspace): a first line cut to fit is the longest cut that fits,…
Oct 19, 2026
bf37981
test(workspace): a script's line page cuts a long line too
Oct 19, 2026
b31b27e
Merge main (67aabff2) into fix/unreadable-gate-files
Oct 19, 2026
686d86e
test(gate): a gate.json saved with a BOM takes a change with no copy
Oct 19, 2026
60f0e03
Merge fix/unreadable-gate-files (686d86e9), which merges main
Oct 19, 2026
7933803
fix(gate): parse gate.json's kept text through parseGateJson too
Oct 19, 2026
694421a
Merge feat/workspace-edit-planner into feat/workspace-read
Oct 19, 2026
ac741bf
docs(workspace): read and grep say a CR CR LF line keeps its end's CR…
Oct 19, 2026
c9c3903
docs(framework): the utils comments name the callers that reach execu…
Oct 19, 2026
dcb7968
test(workspace): pin a mixed file's kept-CR note, a bare LF line's co…
Oct 19, 2026
1961412
fix(workspace): read and grep keep main's tool descriptions, and the …
Oct 19, 2026
b7a5a1d
feat(workspace): grep says why a pattern for a CR can't find a CRLF e…
Oct 19, 2026
813c60d
fix(workspace): grep's CR note takes the usual escapes for a CR, not …
Oct 19, 2026
456e5db
fix(workspace): grep's note names the workspace's copy, takes a backs…
Oct 19, 2026
8db5820
docs(workspace): the utils comment says a module is trusted, and four…
Oct 19, 2026
7d02af8
fix(workspace): grep's U+FEFF note names only a BOM the workspace's c…
Oct 19, 2026
ac6f05d
docs(framework): the utils comment says an unidentified caller is unr…
Oct 19, 2026
4c6171c
Merge main into feat/workspace-read: a direct mount's read and grep s…
Oct 20, 2026
e62ea55
test(workspace): a direct mount's read and grep give a 'chronicle' mo…
Oct 20, 2026
ac535df
docs(changelog): a direct mount's read and grep show text as a store-…
Oct 20, 2026
2a2b02e
fix(workspace): grep's CR and BOM notes name disk's file on a host wi…
Oct 20, 2026
2226bf1
test(workspace): the direct read test holds every page with a result …
Oct 20, 2026
677715d
docs(workspace): MountConfig.backend says a read takes disk's change …
Oct 20, 2026
24b507d
refactor(workspace): the tools' descriptions and grep's notes ask one…
Oct 20, 2026
766f9fa
docs(workspace): the 'chronicle' backend's doc and the changelog say …
Oct 20, 2026
a40712e
test(workspace): grep's notes on a host with both kinds of mount, and…
Oct 20, 2026
5f89cc8
fix(workspace): grep's note on a pattern for a CR or U+FEFF names the…
Oct 21, 2026
1142d08
docs(changelog): how a grep for \r or ^\uFEFF finds the files it sear…
Oct 21, 2026
786cdc1
test(workspace): grep's notes on a conflict per note, on a recorded d…
Oct 21, 2026
deac513
docs(workspace): grep keeps a conflict's disk version per note, and o…
Oct 21, 2026
dd1dcd6
Merge main (code_execution in the isolate) into the workspace read br…
Oct 21, 2026
754b17f
docs(workspace): a read's limit is what reaches its caller whole, a s…
Oct 21, 2026
107406a
Merge main (a pass that decided nothing, and the round's share of a r…
Oct 22, 2026
4060c27
docs(workspace): a read's limit is the most that can reach its caller…
Oct 22, 2026
8b46eac
refactor(workspace): read decides that its pass decided nothing as th…
Oct 22, 2026
ea5d8d7
feat(host-mode): name the agents holding a turn
Oct 22, 2026
6ac5c46
fix(gate): a registered-form channel pattern matches every event in i…
Oct 22, 2026
27cb142
docs(gate): say which pushes a registered-form pattern meets, in comp…
Oct 22, 2026
771b142
fix(tool-results): a spill notice survives while the turn at its leas…
Oct 22, 2026
dc23baf
fix(injection): a message the render gives null goes in as stored
Oct 22, 2026
1459477
test(gate): pin the route resolver's part in channel matching and keying
Oct 22, 2026
bf2e740
fix(injection): name a reset head window as the other null, and drop …
Oct 22, 2026
f21ceae
test(tool-results): a fitting turn a save no longer marks, and pages …
Oct 22, 2026
74d7bb4
docs(gate): lead the changelog entry with what to check; trim the cha…
Oct 22, 2026
6c4048e
fix(mcpl): tell two servers' channels with one id apart
Oct 22, 2026
17ae1d7
fix(turns): a turn is alive while its continuation is on its way
Oct 22, 2026
781e7ec
feat(workspace): a direct mount can be written, and a head move away …
Oct 22, 2026
2e91515
chore(deps): context-manager ^0.19.0, membrane ^0.6.1
antra-tess Oct 22, 2026
5143b30
chore(release): 0.25.0
antra-tess Oct 22, 2026
87871d9
fix(injection): say where as-stored still differs, and pin order, pla…
Oct 22, 2026
9bfe7f2
Merge main (0.25.0, #705) into fix/inject-render-null-as-stored
Oct 22, 2026
7d10708
docs(changelog): say the line came in 0.24.1, true on both release lines
Oct 22, 2026
ae627bf
test(clock-rows): the mid-turn message needs no beat, and `during` is…
Oct 23, 2026
fd4b22a
docs(injection): the null branch's comment names the sharded body too
Oct 23, 2026
73b987b
Merge pull request #709 from nissa-seru/hilda/f423-notices
nissa-seru Oct 23, 2026
7217103
fix(turns): a pass lets go of an agent's requests as it takes it up; …
Oct 23, 2026
e7f2ef6
fix(coalescing): a retry after a failed receipt write is answered fro…
Oct 23, 2026
e92d41b
chore(deps): membrane ^0.7.1, context-manager ^0.20.0
antra-tess Oct 23, 2026
f1f6b30
chore(release): 0.26.0
antra-tess Oct 23, 2026
1fcf388
fix(turns): bill a restart's rounds even when its cancel throws; say …
Oct 23, 2026
fbe393b
docs(changelog): activeTurnAgents lists a turn whose continuation is …
Oct 23, 2026
96df4be
fix(channels): a coalesced message admitted without its receipt fails…
Oct 23, 2026
68b68af
Merge main (f1f6b306) into fix/coalesced-retry-after-failed-receipt-w…
Oct 23, 2026
ccf8987
test(turns): pin the frame-end flush after a drop, and a dropped cont…
Oct 23, 2026
f000c51
fix(workspace): a mount configured direct takes no writes while it ru…
Oct 23, 2026
86e4cfd
fix(workspace): a partway edit_many answer's head is bounded, and the…
Oct 23, 2026
ba991f5
docs(changelog): say what a dropped continuation's turn end releases,…
Oct 23, 2026
dea86ef
test(turns): an abandoned continuation's turn writes the abandon's in…
Oct 23, 2026
6cd0aa4
fix(coalescing): a receipt's record written by a retry keeps a batch …
Oct 23, 2026
c804f61
fix(coalescing): the review's round: a stopping retry, an evicted bir…
Oct 23, 2026
cc0387e
fix(turns): a restart whose cancel throws takes its continuation back…
Oct 23, 2026
ee73912
Merge main (0.26.0) into feat/writable-direct-mounts
Oct 23, 2026
cd239ef
fix(coalescing): a receipt record whose write failed leaves the host'…
Oct 23, 2026
88bc43e
Merge pull request #710 from nissa-seru/humphrey/f163-channel-ref
nissa-seru Oct 23, 2026
1d9e245
Merge main into cuthbert/f418-pending-continuations
Oct 23, 2026
ec218b2
Merge pull request #719 from nissa-seru/feat/writable-direct-mounts
nissa-seru Oct 23, 2026
6b1420f
Merge pull request #724 from nissa-seru/fix/coalesced-retry-after-fai…
nissa-seru Oct 23, 2026
ea03c9a
fix(deferral): look a write found later up where it landed
Oct 23, 2026
9fdc3a6
Merge pull request #722 from nissa-seru/cuthbert/f418-pending-continu…
nissa-seru Oct 23, 2026
52a6f83
fix(deferral): the automated review's round
Oct 23, 2026
307e0be
fix(gate): a batched wake writes its line only when it says something
antra-tess Oct 23, 2026
d6488d1
feat(retry): the framework is the one retry layer for its turns
antra-tess Oct 23, 2026
aef98cc
fix(retry): review of #728 — stated waits to the framework's cap, tur…
antra-tess Oct 23, 2026
b61d4e5
Merge main (mount-prefixed glob patterns, direct mounts that take wri…
Oct 23, 2026
f4bcb1d
Merge pull request #728 from anima-research/feat/af-owns-turn-retries
antra-tess Oct 23, 2026
7e707a5
fix(gate): review of #727 — a turn alive by turnAlive(); tests for ev…
antra-tess Oct 23, 2026
76ab4c4
fix(workspace): grep's glob filter matches a file's name at any depth…
Oct 23, 2026
8843507
Merge pull request #727 from anima-research/fix/gate-wake-line-only-w…
antra-tess Oct 23, 2026
2aed834
ci: cut a run's wall time — superseded runs cancelled, test files run…
antra-tess Oct 23, 2026
44ddd72
test(workspace): glob finds the file with the pattern its refusal nam…
Oct 23, 2026
4c0bdd4
feat(prose): autoContinue — continue a turn the model ends itself unt…
antra-tess Oct 23, 2026
52f93c3
ci: a pull request takes one macOS Build & Test leg; the core count, …
antra-tess Oct 23, 2026
900fc6d
fix(prose): review of #744 — notice at the continuation's start, its …
antra-tess Oct 23, 2026
25d5d1a
fix(code-execution): a module's blocks reach a script with RFC-005's …
Oct 23, 2026
89a8413
fix(prose): review of #744 — refusal names the kind, never the value;…
antra-tess Oct 23, 2026
a676cf8
fix(prose): review of #744 — a silent tick doesn't restart a run; ref…
antra-tess Oct 23, 2026
17119e6
ci: Bun's macOS legs run for any source change; the test concurrency …
antra-tess Oct 23, 2026
41f5e52
ci: the pin test follows files loaded by path and any npm test spelli…
antra-tess Oct 23, 2026
be1ecee
fix(prose): nissa-seru review of #744 — row at the stream's start, na…
antra-tess Oct 23, 2026
76c5e7c
Merge pull request #743 from anima-research/ci/faster-runs
anima-connectome-github[bot] Oct 23, 2026
e05a311
fix(prose): review of #744 — a bounced close is the bounce's; the sha…
antra-tess Oct 23, 2026
bb8f29e
Merge pull request #744 from anima-research/feat/continue-after-prose
anima-connectome-github[bot] Oct 23, 2026
042ac96
fix(tool-presentation): read a presentation or defaults file saved wi…
tonydzi Oct 23, 2026
dfc80e8
test(tool-presentation): an edit of a BOM file writes it back without…
tonydzi Oct 23, 2026
eea6b6c
Merge pull request #755 from nissa-seru/fix/script-lane-references
nissa-seru Oct 23, 2026
d35c79c
Merge main into alfred/702-gate-channel-ids
Oct 23, 2026
4dd8064
fix(gate): a batched wake's line is decided when its turn starts, not…
Oct 23, 2026
0369a13
fix(mcpl): refuse inference/request when no routing policy names a model
Oct 23, 2026
06e567b
fix(gate): only the delivery agent's start places a handed line; a wr…
Oct 23, 2026
31e2652
docs(gate): placeWakeLines says what a co-resident's request can show
Oct 23, 2026
97f5a99
docs(changelog): say what a byte order mark did to a defaults file
Oct 23, 2026
f7bf787
fix(mcpl): trace a refused inference/request, and log each feature se…
Oct 23, 2026
0a0c71f
fix(calibration): the sample carries the request's system prompt and …
Anarchid Oct 23, 2026
2d5f16d
Merge pull request #759 from nissa-seru/imogen/727-line-at-turn-start
nissa-seru Oct 23, 2026
091fa49
Merge pull request #761 from nissa-seru/fix/inference-routing-no-policy
nissa-seru Oct 23, 2026
37ee035
test(calibration): pin the injected system prompt and the cache-write…
Oct 23, 2026
cfda701
Merge pull request #2 from nissa-seru/esther/af763-house-fixes
Anarchid Oct 23, 2026
29afb43
Merge main (091fa493) into fix/unreadable-gate-files
Oct 23, 2026
898dd2f
Merge fix/unreadable-gate-files (29afb436), which merges main
Oct 23, 2026
bb90461
Refuse a change over a gate.json that isn't JSON; drop the copy
Oct 23, 2026
7b4738b
Merge pull request #763 from Anarchid/fix/calibration-request-overhead
Anarchid Oct 23, 2026
1ee671b
Refuse a change it cannot edit first; say what a failed write left
Oct 23, 2026
74eb735
Refuse a change leaving an unused gate.json no rules in force
Oct 23, 2026
debce5a
fix(wakes): a write the agent heard mid-turn starts no turn of its ow…
Oct 23, 2026
c45f043
Offer a removal only where it leaves rules; say what a reload does
Oct 23, 2026
d0a4536
Say a fix to refused starting rules waits for the next start
Oct 23, 2026
71d8c58
test(code-execution): the idempotence test of a module's script resul…
Oct 23, 2026
a163469
fix(code-execution): what's nested in an MCPL peer's structured block…
Oct 23, 2026
f59afed
test(code-execution): each nested shape on an MCPL peer's script lane…
Oct 23, 2026
9b094dd
test(code-execution): the nested pass on an MCPL peer's structured fa…
Oct 23, 2026
e66bdae
Merge pull request #767 from nissa-seru/fix/script-lane-nested-refere…
nissa-seru Oct 23, 2026
19c87e4
feat(agent): thinkingBinding.dropBlock asks the provider to drop thin…
Oct 19, 2026
e6a5922
fix(agent): no calibration sample from a stream once a call dropped t…
Oct 19, 2026
4d26eeb
Merge pull request #707 from nissa-seru/alfred/702-gate-channel-ids
nissa-seru Oct 23, 2026
4fe56f8
test(deferral): drop a repeated test and lines no code reads
Oct 23, 2026
6f1dce5
Merge pull request #740 from nissa-seru/fix/grep-glob-by-name
nissa-seru Oct 23, 2026
7e7cd2f
Merge pull request #760 from tonydzi/fix/758-presentation-bom
nissa-seru Oct 23, 2026
1092851
Merge pull request #726 from nissa-seru/fix/deferral-found-later
nissa-seru Oct 23, 2026
1d86fe6
Merge branch 'main' into fix/heard-mid-turn-wake
Oct 23, 2026
8f39763
Merge pull request #371 from nissa-seru/fix/unreadable-gate-files
nissa-seru Oct 23, 2026
45a272d
Merge pull request #452 from nissa-seru/fix/strict-gate-validation
nissa-seru Oct 23, 2026
24c9272
test(agent): drop_block's skip is one stream's, and an always-on mode…
Oct 23, 2026
95c0704
Merge pull request #768 from nissa-seru/feat/thinking-binding-drop-block
nissa-seru Oct 23, 2026
46a045e
docs(agent): dropBlock's fold case holds where the strategy still sen…
Oct 23, 2026
86300c9
docs(changelog): drop_block's fragment names the fold case
Oct 23, 2026
2acaf93
chore(changelog): add 0.26.1's section to main and remove the fragmen…
Oct 23, 2026
acb8569
fix(scheduler): a turn a provider hold keeps for its retry is alive
Oct 23, 2026
993f7a0
Merge pull request #465 from nissa-seru/feat/workspace-read
nissa-seru Oct 23, 2026
9d03a3b
test(workspace): count a crowded refusal's line-feed searches, not it…
Oct 23, 2026
0ce0f0b
test(workspace): pin 200 edits' counts within one budget, not their C…
Oct 23, 2026
56a285c
test(workspace): pin the closest region's tie, and leave its cost unp…
Oct 23, 2026
8660b58
test(workspace): count the clash walk's Set lookups, not its CPU time
Oct 23, 2026
032c153
test(workspace): count a read form's searches and code units, not its…
Oct 23, 2026
1b0ed5f
test(workspace): pin 200 edits' other reading stopping at 21 in the p…
Oct 23, 2026
e35d5aa
Merge pull request #770 from nissa-seru/test/thinking-binding-drop-bl…
nissa-seru Oct 23, 2026
9a66f0a
Merge pull request #771 from nissa-seru/ada/changelog-0.26.1
nissa-seru Oct 23, 2026
f8f39e0
fix(code-execution): an MCPL peer's blocks too deep for JSON reach a …
Oct 23, 2026
557871e
Merge pull request #723 from nissa-seru/fix/heard-mid-turn-wake
nissa-seru Oct 23, 2026
2260ac0
feat(framework): getRequestCompileStats gives a preview's dry-compile…
Oct 23, 2026
dae3714
test(code-execution): pin the failing deep peer answer's terminal and…
Oct 23, 2026
a120c09
test(fixtures): a command file's line counts once its newline is written
Oct 23, 2026
8bcbae5
test(workspace): check each refusal edit_many shows for 200 edits is …
Oct 23, 2026
0f372ac
test(workspace): give the clash walk's lookup floor room, and say wha…
Oct 23, 2026
1d463e3
test: pin countingCalls' ceiling boundary, and its restore when run o…
Oct 23, 2026
a4bcd52
test(workspace): pin the closest region's per-line reset by its itera…
Oct 23, 2026
9c34b41
test(framework): pin what a preview's compile stats count, and skip b…
Oct 23, 2026
9672918
test(workspace): answer the internal review of the count-based tests
Oct 23, 2026
9b9f686
test(fixtures): answer the review of the command-file fix
Oct 23, 2026
87a3b06
Merge pull request #777 from nissa-seru/fix/fixture-command-lines
nissa-seru Oct 23, 2026
73aa0e4
Merge pull request #776 from nissa-seru/feat/request-compile-stats
nissa-seru Oct 23, 2026
38dece0
test(workspace): say why the closest region's step count runs in a child
Oct 23, 2026
fe0c065
feat(workspace)!: read, grep, edit and edit_many answer as the text t…
Oct 23, 2026
c76fffa
test(workspace): a receipt's region of many short lines keeps to its cap
Oct 23, 2026
b9a5b00
fix(workspace): answer the first internal review of the text form
Oct 23, 2026
a4e547c
test(workspace): grep's matched lines without context are quoted too
Oct 23, 2026
621f312
test(workspace): answer the second internal review of the text form
Oct 23, 2026
ebd88eb
test(code-execution): order the routing tests' runs and waits by even…
Oct 23, 2026
c3218ab
fix(workspace): quote a shown value that starts with a quote
Oct 23, 2026
1fd9368
Merge pull request #773 from nissa-seru/fix/script-peer-round-trip-guard
nissa-seru Oct 23, 2026
6146ea7
Merge pull request #775 from nissa-seru/cuthbert/f450-cpu-bounds
nissa-seru Oct 23, 2026
9c8480f
test(code-execution): keep the call guard out of the runner's frame l…
Oct 23, 2026
14f34a7
fix(scheduler): wakes merged into a held turn's start survive a stop
Oct 23, 2026
b816ba1
fix(code-execution): the script lane's round trip catches only a Rang…
Oct 23, 2026
138b991
test(code-execution): pin that a RangeError other than the overflow r…
Oct 24, 2026
86917e9
Merge pull request #778 from nissa-seru/cedric/f55-workspace-text
nissa-seru Oct 24, 2026
a51c849
Merge pull request #774 from nissa-seru/hilda/held-retry-alive
nissa-seru Oct 24, 2026
eec90de
Merge pull request #779 from nissa-seru/imogen/f452-code-execution-te…
nissa-seru Oct 24, 2026
a4a74b4
Merge pull request #781 from nissa-seru/fix/script-peer-round-trip-ra…
nissa-seru Oct 24, 2026
649b3b9
Merge main (a4a74b48) into fix/inject-render-null-as-stored
Oct 24, 2026
61a8e60
chore(changelog): add 0.26.2's section to main and remove the fragmen…
Oct 24, 2026
66c8079
Merge pull request #720 from nissa-seru/fix/inject-render-null-as-stored
nissa-seru Oct 24, 2026
8ec1de5
Merge pull request #786 from nissa-seru/ada/changelog-0.26.2
nissa-seru Oct 24, 2026
a40c660
Merge main (a4a74b48) into feat/dendrite: #710's server-qualified cha…
Oct 24, 2026
cba4d05
feat(dendrite): a fork's home is a channel with its server
Oct 24, 2026
219bda5
Merge main (8ec1de5a) into feat/dendrite: 0.26.2's changelog and #720
Oct 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 81 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,64 @@ on:
permissions:
contents: read

# A newer push to a pull request supersedes the run still going on its older
# commit: that run's result says nothing about the code now under review, and
# it holds runners, macOS's above all, which the organization gets few of at
# once, so other pull requests' macOS jobs queue behind it (up to ten minutes
# in October 2026). Pushes to main are never cancelled: each gets its run.
concurrency:
group: ci-${{ github.event_name == 'pull_request' && format('pr-{0}', github.event.pull_request.number) || github.sha }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
# Which macOS legs a run takes. macOS runners are what queue (the
# organization gets few at once, shared by every repository), so a pull
# request takes the ones that test it: Build & Test's macOS leg at the
# engines floor only, and code_execution's Bun macOS legs only when it
# touches what they run: any source (the tests import the framework, not
# only code_execution), tsconfig.json, package.json, their own tests and
# helpers, or this workflow. ci-workflow-pins.test.ts checks every file
# those tests import falls inside the filter. The diff is base...head, as
# changelog.yml takes it, not the merge commit, which can carry main's
# newer commits. Pushes to main take every leg.
changes:
name: What the change touches
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
bun-os: ${{ steps.decide.outputs.bun-os }}
build-exclude: ${{ steps.decide.outputs.build-exclude }}
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
with:
persist-credentials: false
fetch-depth: 0

- name: Decide
id: decide
env:
EVENT: ${{ github.event_name }}
BASE: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
both='["ubuntu-latest","macos-latest"]'
if [ "$EVENT" != "pull_request" ]; then
echo "bun-os=$both" >> "$GITHUB_OUTPUT"
echo 'build-exclude=[{"os":"macos-latest","node":24}]' >> "$GITHUB_OUTPUT"
exit 0
fi
echo 'build-exclude=[{"os":"macos-latest","node":24},{"os":"macos-latest","node":"latest"}]' >> "$GITHUB_OUTPUT"
changed=$(git diff --name-only "$BASE"..."$HEAD_SHA")
echo "$changed"
if echo "$changed" | grep -qE '^(src/|test/code-execution|test/helpers/|tsconfig\.json$|package\.json$|\.github/workflows/ci\.yml$)'; then
echo "bun-os=$both" >> "$GITHUB_OUTPUT"
else
echo "bun-os=[\"ubuntu-latest\"]" >> "$GITHUB_OUTPUT"
fi

build-and-test:
name: Build & Test (${{ matrix.os }}, node ${{ matrix.node }})
needs: changes
runs-on: ${{ matrix.os }}
# Without a limit, a step that hangs leaves the check pending until
# GitHub's six-hour limit. Passing runs take under seven minutes. A
Expand All @@ -28,13 +83,13 @@ jobs:
# admits; and, between them, every maintained major line (24), as
# membrane and context-manager test theirs. stdio flushing semantics
# around process exit differ between versions and platforms. macOS runs
# the two ends only.
# the two ends on a push to main, and the floor alone on a pull request
# (`changes`): its runners queue, and the ends rarely part on one
# platform without the other's ubuntu leg showing it.
matrix:
os: [ubuntu-latest, macos-latest]
node: ['22.12.0', 24, latest]
exclude:
- os: macos-latest
node: 24
exclude: ${{ fromJSON(needs.changes.outputs.build-exclude) }}

steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
Expand All @@ -60,8 +115,20 @@ jobs:

# Tests run on both platforms: process/stdio behaviour differs (pipes
# are asynchronous on macOS), and ubuntu-only runs have missed that.
#
# As many test files at once as the runner has cores, said here rather
# than left to Node's default of one fewer. macOS runners come with 3
# cores or 5, and on 3 the default ran two files at once: 582 s, where
# a 5-core runner took 290 s for the same tests. At the core count,
# those took 444 s and 236 s, and ubuntu's 4-core runs went from about
# 380 s to 300 s. Most files wait on timers and child processes, not
# the CPU.
- name: Test
run: npm test
run: |
AF_TEST_CONCURRENCY=$(node -p "require('node:os').cpus().length")
echo "cores: $AF_TEST_CONCURRENCY (Node's availableParallelism: $(node -p "require('node:os').availableParallelism()")); test files at once: $AF_TEST_CONCURRENCY"
export AF_TEST_CONCURRENCY
npm test

# npm test runs with --test-force-exit, which hides async work a test
# leaves running, such as a late arrival after stop() ("Queue is
Expand Down Expand Up @@ -146,14 +213,22 @@ jobs:
# are where runtimes and platforms differ. code_execution needs Bun 1.4.0 or
# later (create() refuses it on an older one), so they run under 1.4.0, the
# oldest release it admits, and under 1.4.3.
#
# On a pull request that touches no source, none of these tests or the
# test helpers, and not tsconfig.json, package.json or this workflow (a
# change to other tests or the docs), the macOS legs are left out
# (`changes`): they take two of the few macOS runners the organization gets
# at once, and nothing they run has changed. Every push to main runs both
# platforms.
code-execution-bun:
name: code_execution under Bun (${{ matrix.os }}, bun ${{ matrix.bun }})
needs: changes
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
os: ${{ fromJSON(needs.changes.outputs.bun-os) }}
bun: [1.4.0, 1.4.3]

steps:
Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,15 @@ jobs:
- name: Build
run: npm run build

# As many test files at once as the runner has cores, as ci.yml's
# Build & Test runs them, so a release's gate runs the suite as a pull
# request's did.
- name: Test
run: npm test
run: |
AF_TEST_CONCURRENCY=$(node -p "require('node:os').cpus().length")
echo "cores: $AF_TEST_CONCURRENCY (Node's availableParallelism: $(node -p "require('node:os').availableParallelism()")); test files at once: $AF_TEST_CONCURRENCY"
export AF_TEST_CONCURRENCY
npm test

# The tarball npm publish makes from this tree, installed alone into an
# empty directory with its dependencies from npm (linked, so each package
Expand Down
Loading
Loading