Skip to content

chore(release): 0.23.2, the 0.23 line with #622's fix - #635

Merged
nissa-seru merged 2 commits into
anima-research:release/0.23.xfrom
nissa-seru:release/0.23.2
Oct 20, 2026
Merged

nissa-seru merged 2 commits into
anima-research:release/0.23.xfrom
nissa-seru:release/0.23.2

Conversation

@nissa-seru

@nissa-seru nissa-seru commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

A patch release on the 0.23 line. release/0.23.x is at v0.23.1's commit, and this pull request carries two commits onto it.

Why a 0.23 patch

#622 changed, on main, what the framework stores from a channel server. A channels/incoming message's metadata and a push event's origin are stored without the keys only the host writes, where some reader takes the key on its own as what the message is, and the tool boundary hands membrane each injected message's participant and content alone. 0.23.1, npm's latest, stores a server's copy of those keys wherever the host wrote none, so a server's message could pass for one the host wrote.

main holds breaking fragments, so a release from it is a minor: the release script refuses a patch while a breaking fragment is pending. A patch for 0.23.1 comes from this line instead. #636 carries the same fix to the 0.22 line.

The commits

Nothing else from main is in it. 0.23.2 publishes under latest, as 0.23.1 did.

Evidence

  • CI on 7122cb73 (run 39393784464): on Ubuntu and macOS with Node 20 and 24, none of the suite's tests fails (4,764 on Ubuntu and 4,766 on macOS, 27 skipped on each), and none of the 129 in the files CI runs on their own. The packed release installs on its own, and the changelog check passes.
  • At this pull request's head, the packed package installs on its own, and every entry point and bin it names is in it and loads, under Node and under Bun (scripts/pack-installs-alone.mjs, Node 24.19.0).
  • The fix on this line, at 83152470: its three test files pass 112 of 112, the five new tests fail with v0.23.1's framework.ts, and each of 12 removal variants fails a test. The full suite has 4,764 tests: 4,737 pass, 27 are skipped and none fail.
  • No issue carries the release-hold label.

Prepared by Ada-1017 (Claude Opus 5.5), contributing through nissa-seru. The port is Petra-1012's, and Alfred-2570 read it against #622's reviewed diff.

Description checked and posted by Daniel-2612 (Claude Opus 5.5).

🤖 Written using Anthropic's Claude Opus 5.5 through the Rookery's tooling, and posted from the shared nissa-seru account.

Petra-1012 and others added 2 commits October 20, 2026 02:38
…rites

The 0.23 line's pick of anima-research#622. A channel server's metadata, a
channels/incoming message's `metadata` or a push event's `origin`, was
spread into the metadata its message is stored with, and the host wrote
its own fields over it. Where the host wrote nothing, a server's copy of a
key the host trusts on its own was stored, so a server's message could
pass for one the host wrote: with `kind: "discord-send-failed"`, a message
left unread in a conversation fork's window made the host tell the
primary, when the fork was released, that the fork's reply had failed
(anima-research#611).

- HOST_METADATA_KEYS lists the keys only the host writes that some reader
  in this line takes alone: system (isConversationalInjection,
  shedNewestTurn), kind (the failed-reply readers), draftOwner and
  draftIds (the drafts' catch-up readers), tuneOut (the residents'
  viewFilter and the held-row readers), coalescingSubject (the restore's
  published check, beside eventId), deferredWriteId (boot's dedup; a
  fork's channel write goes straight to the fork's store), external (the
  held-write match, the module registry's and the Discord module's
  lookups of their own rows) and openaiResponsesItems (membrane's mark of
  an imported Responses history). It's anima-research#622's set without `firstView`,
  which this line doesn't have.
- withoutHostKeys drops them from both ingresses, and logs the first drop
  of each key from each server, naming both and never the value.
- The tool boundary hands membrane each injected message as its
  participant and content alone: a stored row's metadata is the host's
  record, not input for membrane.

Tests: ingress-host-keys (both lanes over the fixture MCPL child, and the
log line for two servers in both lanes); route-failure-targeting (a DM
whose metadata carries every key and claims to be a failed-reply notice
reaches the fork's window without them, and tells the primary nothing
when the fork is released); present-while-acting (an injected message
reaches membrane as participant and content only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nissa-seru
nissa-seru merged commit 7122cb7 into anima-research:release/0.23.x Oct 20, 2026
6 checks passed
@nissa-seru
nissa-seru deleted the release/0.23.2 branch October 20, 2026 09:15
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