Skip to content

Release 0.22.2 - #441

Merged
nissa-seru merged 3 commits into
anima-research:mainfrom
nissa-seru:release/0.22.2
Oct 17, 2026
Merged

nissa-seru merged 3 commits into
anima-research:mainfrom
nissa-seru:release/0.22.2

Conversation

@nissa-seru

Copy link
Copy Markdown
Contributor

This is the 0.22.2 release commit, cut with npm version patch from main at 7125cb86, which is 0.22.1 plus the 24 changes merged since, through #377. Among its fixes are the ways a stdio MCPL server could end its host or leave stop() waiting for ever: a child ended by a signal the transport didn't send, such as an OOM kill (#331), a command that can't be spawned (#336), and an error on the child's stdin or stdout. Context maintenance now fails one agent at a time and holds still while an operator surgery or switchBranch moves the store, and stop() waits for an operator's operation that is already running.

Anarchid's review of #372 asked for any further 0.22.x patch to go out before #372 merges, and this is that patch.

What this branch is

It's cut from 7125cb86, so changes merged after that commit aren't in it. #372 and #400 are among the open pull requests that carry breaking entries, and once one of them merges, npm version refuses another 0.22.x from main. Merged back, this PR gives main the version and the folded changelog. It changes only CHANGELOG.md, package.json's version and the 22 fragments it deletes.

Why a patch, and all of main

  • None of the 22 fragments is breaking: three are added, two changed and seventeen fixed. npm version's check for a pending breaking entry (build(release): while a breaking entry is pending, a new version must open a line no release has reached #348) passed, so the release is a patch, which ^0.22.1 takes. connectome-host 0.10.2 declares ^0.22.1, so an npm install of the host resolves to this release, while a checkout keeps the 0.22.1 its lockfiles name until they move.
  • 7125cb86 is the tree that was tested together:
    • CI passed on main at that commit.
    • A cross-package run built agent-framework at that tree with the main branches of its dependencies and of connectome-host, context-manager's 0.15.0 among them, ran connectome-host's 1,826 tests and two boots against it, and loaded stores written by connectome-host 0.3.1 through 0.10.2.
    • The full suite passed on this release's code, with context-manager 0.14.1, membrane 0.5.87 and chronicle 0.4.0 from npm, as an install of this release resolves them: 2,434 of 2,434 tests on Node 20 and on Node 24, each file run on its own. Under npm test's --test-force-exit, Node 24 ran 2,424 of them, since the flag ends four files before their last tests (npm test's --test-force-exit can end a test file before its tests report, so a short run still passes #294).
  • 0.21.3, npm's release-0.21, requires context-manager ^0.15.0, while this release still requires ^0.14.1, so a host moving from it to 0.22.2 takes context-manager back to 0.14. In a probe, a store the published 0.21.3 wrote on context-manager 0.15.0 opened under this release's code on 0.14.1: an autobiographical resident's messages, L1 summaries and summary-id counter came through, and turns and maintenance ran. It opened again back on 0.21.3. Not tried: merged levels, a store whose load repair 0.15 changed, kv-unified, or connectome-host.

Going back

A probe installed the packed candidate on its own, with the published 0.22.1 beside it, both on context-manager 0.14.1, and walked stores from the candidate to 0.22.1 and back. Going back is safe for a store 0.22.2 wrote, with one exception, which the operator section names with its remedy: 0.22.1 refuses to create the framework when an agent's persisted runtime setting is one that 0.22.2 keeps set but unapplied. Resetting that setting under 0.22.2 first let 0.22.1 start. 0.22.1 keeps #290's new contextBudgetReachedTokens key in the persisted settings, and 0.22.2 trusts it only when it equals the stored budget. The operator section also says what the probe didn't cover.

Checks

— Ada-1017 (Claude Opus 5.5). Hilda-2681 read the notes against the code at v0.22.1 and at this tree, and each entry's "before" wherever an earlier merge in this release could have touched the same code. Gladys-2413 planned going back, ran its probe and drafted the operator section.

Ada-1017 and others added 3 commits October 17, 2026 08:01
…since 0.22.1

The pending fragments describe each change against main as it stood when
it merged. Three of them now describe a main that no release had:

- anima-research#344's fragment said a failed write to a stdio child's stdin reaches the
  transport's 'error' listener or is dropped, and anima-research#384, which merged
  before this release, changed that: an error on the child's stdin or
  stdout now ends the child. anima-research#384's fragment said such an error "used to
  reach only the transport's 'error' listener", which was main between the
  two, not 0.22.1, where it was thrown as an uncaught exception. One bullet
  now says what 0.22.1 did and what 0.22.2 does, and anima-research#344's bullet goes.
- The anima-research#331 entry said stop() failed when its teardown timeout ran out.
  stop() has no default teardown timeout, so with the default it never
  returned (the maintainer's review of anima-research#344, R1-2).
- The spawn entry quoted the refusal as Node words it. The refusal carries
  the runtime's own spawn error, which reads differently elsewhere (the
  same review, R1-4). anima-research#384's description promised both corrections in the
  release commit.
- The TypeScript 7 entry counted the .js.map files that change as measured
  when anima-research#274 merged. Built from this release's source with 7.0.2 and with
  5.9.3, 115 change and 111 of them move only columns, so the entry now
  says "all but four", which held then and holds now. The rest of the entry
  holds as written: the JavaScript is byte-identical, the same seven
  declaration files differ only in their quotes, and 56 .d.ts.map files
  change, 49 and 7 as it says.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… back

An operator section at the top of the release, as 0.22.1's has, for two
things the entries don't put where someone deciding to upgrade or to go
back would see them:

- Going back to 0.22.1 refuses to create the framework when an agent's
  persisted runtime setting can't be applied, such as a budget no longer
  above the recipe's maxTokens, or a budget below the recipe's on a
  strategy that can't prepare a smaller window (the default passthrough).
  0.22.2 boots such a store, keeps the setting set but unapplied and logs
  it. Resetting the setting under 0.22.2 first lets 0.22.1 boot. A probe
  that installed the packed candidate and the published 0.22.1 side by
  side, both on context-manager 0.14.1, showed both: 0.22.1's create
  failed on the kept setting, and booted once it had been reset.
- On a workspace mount over 5000 files, the first passes after the
  upgrade catch up on what 0.22.1's walks never reached, and with
  wakeOnChange admitting a kind, each pass's event of that kind is one
  message to the agent listing its paths (anima-research#272's fifth sub-bullet).

The rest says what 0.22.1 does again on going back (anima-research#266's 1 MiB refusal,
anima-research#272's walks and their place), and what the probe didn't cover.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5 Tier: apex

[Low impact] This release-only PR appears safe to merge.

Summary

Prepares the 0.22.2 release without changing runtime code.

  • The package and changelog now identify release 0.22.2.

Reviews (1) · Last reviewed commit: "0.22.2" · Reviewed by Greptile

nissa-seru pushed a commit to nissa-seru/agent-framework that referenced this pull request Oct 17, 2026
The 0.22.2 release (anima-research#441) is cut from main without this change, and it
folds typescript-7.changed.md as main has it, which is true of 0.22.2:
its `files` still packs dist, so dist/tsconfig.tsbuildinfo and the test
build ship, and its source-map counts take in dist/test's. Once that
release merges back, main has no fragment for this change to correct,
so editing it would only meet a modify/delete conflict and put the
TypeScript 7 build's notes into the next release's. This change no
longer touches it, and changelog.d/package-files.fixed.md is its whole
note.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nissa-seru
nissa-seru merged commit 3adbdb8 into anima-research:main Oct 17, 2026
11 checks passed
@nissa-seru
nissa-seru deleted the release/0.22.2 branch October 17, 2026 13:01
nissa-seru pushed a commit to nissa-seru/agent-framework that referenced this pull request Oct 17, 2026
…ma-research#352's body-aware removals and surgery maintenance waits carried into this branch's marks

Main merged 21 pull requests since cd036e0, 0.22.2's release (anima-research#441)
among them. The merge conflicted in eight files, each resolved from
both sides' intent:

- changelog.d/stop-waits-for-operator-operations.fixed.md and
  switch-branch.added.md: 0.22.2 folded them into CHANGELOG.md, so their
  deletion stands (Ada-1017, room-203 #127725). What this branch changed
  in them is described against 0.22.2's published entries. A switch's
  marks, and the delivery a branch switch or an undo started, are in
  surgery-marks-one-shot.changed.md and surgery-marks-opt-in.breaking.md
  already, and the awareness barrier's stop-time behaviour went with the
  barrier (one-shot: delivery no longer holds MCPL traffic). The one
  change no fragment carried, a delivery pass that claims nothing more
  once stop() has begun, is the new
  surgery-marks-delivery-at-stop.changed.md.
- src/api/server.ts: main (anima-research#352) reads the store's branch whenever it
  reports one, through a getter, and its branch.switch announces its own
  move, since switchBranch can now move the store after the call
  returns. This branch removed startDiscordAwarenessDelivery() and said
  a switch adds or removes no marks. The switch's comment says both, and
  undo and redo neither set the branch by hand nor start a delivery.
- src/framework.ts:
  - imports: McplRequestError beside main's stderrTailOf, withStderr and
    McplConnectionCloseInfo.
  - main moved the surgery read helpers (SurgeryReadableCm,
    locateMessageIndex, locateMessageIndices, bodyGroupRun) to
    stored-removal.ts. This branch's copies were the base's unchanged,
    so they go, and its marks helpers (marksScope, checkedMarks,
    describeMarksChoice) stay.
  - host/command hide: main's refusal while a surgery holds the store,
    and its body-aware runs (every copy of the message, each body whole,
    removeStoredMessages per run, the hidden count and capped ids), with
    this branch's marks choice, now scheduled for every message the runs
    remove, and its operator-log fields (marks, markers).
  - rollbackToMessage and suppressMessages: main's wait for running
    maintenance before the switch or fork, then this branch's
    prepareMarkerBatch.
  - switchBranch's doc: with main's maintenance wait, the store can move
    after the call returns, and the doc (main's too) still said it had
    moved by then. It now says when it moves.
  Auto-merged, and read: resumePreparedDiscordSuppressions removes each
  interval through removeStoredMessages, as main's does, inside this
  branch's completeSuppression path; switchBranch has main's maintenance
  wait and this branch's no-marks rule.
- src/mcpl/server-connection.ts: the event doc has main's (anima-research#399)
  stderrTail payloads and this branch's reconnect sentence.
- src/recovery/offline-branch.ts: both sides' imports. Auto-merged, and
  read: main's removeStoredInterval loop runs inside this branch's try,
  after branchAt; main's continuesBody boundary checks and range ends sit
  beside this branch's carriers.
- test/discord-awareness-outbox.test.ts: main's two tests of a resumed
  suppression (a one-shard body removed as a range; an interval that
  committed before the crash skipped, and one only partly present
  refused) are carried over to this branch's journal: storeHarness, a
  scope, and a start that retires a surgery's batch where main's
  activated it. Main's stub fields for a surgery's maintenance wait and
  provider-gate wake (maintenancePass, overBudgetDrains, providerGates)
  go into hostCommandFramework, which replaced the stub main added them
  to, and the wait's two fields into this branch's stub for a switch onto
  a pending suppression's target, since switchBranch now waits too.
- test/offline-recovery-branch.test.ts: both sides' new tests. Main's
  four that read result.refs to name what a recovery removed, the three
  in the conflict and "a suppressed range takes every copy of both its
  messages" beside it, choose marks: { scope: 'all' }, as this branch did
  for the base's own tests, since refs now lists only the refs a
  recovery marks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant