Repository navigation
fix(config)!: remove processLogging.broadcast and refusalHandling.announceHumanTurns - #524
Merged
nissa-seru merged 4 commits intoOct 18, 2026
Conversation
…ounceHumanTurns
Neither setting has changed what the framework does in any release.
processLogging.broadcast was read into a field that only
isProcessLoggingEnabled() returned: process:completed trace events have been
emitted whatever it said since before 0.1.0. An agent's
refusalHandling.announceHumanTurns lost its one reader, the refusal rewind's
announcement of a withheld human message on Discord, before 0.6.2, the first
release that had it, and that announcement, announceRewind, has had no
caller since. A setting that does nothing misleads whoever writes a config,
so both go, and the dead announcement with them.
isProcessLoggingEnabled() now returns { persist }. A config that still sets
either setting starts as before, with the setting ignored, as any key the
framework doesn't know is. A TypeScript config that writes one in an object
literal no longer compiles. test/removed-settings.test.ts pins both: a
framework created from an untyped config that sets them starts and reports
only persist, and its @ts-expect-error lines fail the build if either
setting comes back to its type.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…drop the rewind's unread discordRef Review of the first commit found: - isProcessLoggingEnabled() was pinned only with persist false, so a constant result passed. test/removed-settings.test.ts now runs with persist false and true, broadcast set to the other. - @ts-expect-error is satisfied by any error, so a removed key coming back as another type still built. The test now checks that neither key is in keyof its type, which fails the build whatever type it comes back with. - RewindRecord.discordRef, which shedNewestTurn has built since the refusal rewind was added, has never been read outside a test. It was meant for the Discord announcement this change removes, so it goes too. - shedNewestTurn's doc still described the per-turn marker, and the redaction of only a message the agent didn't author, which 9f9cb9a replaced. It now says what it does: it removes the newest message that isn't a system message, whoever wrote it, with the rest of its exchange, and adds no marker. Two comments named it by its old name, rewindTriggeringTurn. - isProcessLoggingEnabled()'s doc now says it reports whether process events are written to Chronicle, and that process:completed is emitted either way. - The breaking fragment now says that isProcessLoggingEnabled() reporting broadcast back is all either setting changed, that 0.6.2, the first release with announceHumanTurns, already shipped without its reader, which reads to drop (isProcessLoggingEnabled().broadcast, and announceHumanTurns on an agent's refusalHandling), and that only an object literal checked against the framework's types stops compiling. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
RewindRecord.kind has had no reader since 9f9cb9a removed its last one, the announcement's rec.kind === 'human' gate; f1168f0 had already removed a log line that read it. /unstick's outcome post and the inference exhaustion log read each record's descriptor. The two shed tests that asserted kind now assert the whole descriptor, which says the same thing in the words those readers use, and shedNewestTurn's doc says the descriptor carries what was removed and its size. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Required label not found on this PR. |
operator-surgery's test of a rewind that takes a tool result's turn whole asserted the shed record's kind, through a cast the typecheck can't see past, so the previous commit's removal of kind left it failing. It now asserts the descriptor, 'a tool exchange (~1KB)', as the shed tests in refusal-rewind do, and the casts in both of this file's shed tests name descriptor in place of kind. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nissa-seru
pushed a commit
to nissa-seru/agent-framework
that referenced
this pull request
Oct 18, 2026
…and anima-research#372 main aae86b7 brings anima-research#234, anima-research#528, anima-research#529, anima-research#524, anima-research#538, anima-research#539, anima-research#372 and anima-research#210. One conflict, a comment in src/framework.ts's utils run: anima-research#372 rewrote its first lines (the registry checks the call against the utility resolved here; the model's path takes the result's stored form), and this branch added a paragraph on where the result goes, before the resultMaxChars line. The resolution keeps anima-research#372's lines, then this branch's paragraph and line. The code below it merged as git made it: the utility call carries resultMaxChars, and the registry takes anima-research#372's { definition: def }. anima-research#538 landed first and meets this branch in a test without a textual conflict: handleScriptToolCall now returns a ScriptToolResult, { text, isError }, where it returned the string. The script case of tool-call-result-max-chars.test.ts reads .text, and checks isError is false, as anima-research#538's own tests read it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 task done
nissa-seru
pushed a commit
to nissa-seru/agent-framework
that referenced
this pull request
Oct 19, 2026
main has taken anima-research#234, anima-research#528, anima-research#529, anima-research#524, anima-research#538, the 0.22.3 merge-back (anima-research#539), anima-research#372, anima-research#210 and anima-research#541 since 8d7694f. - changelog.d/403-truncation-image-slots.fixed.md: main deleted it when 0.22.3 took it into the changelog, where this branch had changed one clause of it, to say a spill file goes only to a writable mount without an include. Taken as deleted: 0.22.3's entry stays as released, and this change's own fragment (mount-include.added.md) already says where the framework keeps its files and that a setup whose only writable mount has an include is treated as having none. git merged the rest on its own. Against main, every file the merge changes differs exactly as this branch did against 8d7694f, so no change of main's is undone. Of the files both sides changed, src/framework.ts, src/types/framework.ts and src/types/trace.ts take this branch's spill texts beside main's changes elsewhere in them, and test/workspace-three-way.test.ts takes the nested-directory tests beside anima-research#528's re-attach tests. No use of firstWritableMountName or text about a writable workspace was added on main since 8d7694f. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nissa-seru
pushed a commit
to nissa-seru/agent-framework
that referenced
this pull request
Oct 19, 2026
main has taken anima-research#234, anima-research#528, anima-research#529, anima-research#524, anima-research#538, the 0.22.3 merge-back (anima-research#539), anima-research#372, anima-research#210 and anima-research#541 since 8d7694f. - changelog.d/403-truncation-image-slots.fixed.md: main deleted it when 0.22.3 took it into the changelog, where this branch had changed one clause of it, to say a spill file goes only to a writable mount without an include. Taken as deleted: 0.22.3's entry stays as released, and this change's own fragment (mount-include.added.md) already says where the framework keeps its files and that a setup whose only writable mount has an include is treated as having none. git merged the rest on its own. Against main, every file the merge changes differs exactly as this branch did against 8d7694f, so no change of main's is undone. Of the files both sides changed, src/framework.ts, src/types/framework.ts and src/types/trace.ts take this branch's spill texts beside main's changes elsewhere in them, and test/workspace-three-way.test.ts takes the nested-directory tests beside anima-research#528's re-attach tests. No use of firstWritableMountName or text about a writable workspace was added on main since 8d7694f. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nissa-seru
pushed a commit
to nissa-seru/agent-framework
that referenced
this pull request
Oct 19, 2026
…his branch's content arrays main moved from ce1a073 by 82 commits (anima-research#538, anima-research#539's 0.22.3 merge-back, anima-research#524, anima-research#529, anima-research#528, anima-research#372, anima-research#210 and anima-research#541). Two conflicts: - src/framework.ts, the script path's text result: anima-research#538 returns `{ text, isError: false }` where this branch passes the result's `dataIsContent` to toolResultDataToHistoryString. Both are kept. - test/script-structured-references.test.ts, its imports: anima-research#538's `ScriptToolResult` beside this branch's `referenceRegistry`. Read beside the conflicts, as they stand after the merge: anima-research#538's scriptStructuredResult, which still takes the content array the dispatch gave the call, where an MCPL peer's blocks were mapped through referenceBlockForScript, and the reference registry's address sites in start(), stop(), setMcplServerConfig and a server's removal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This removes two settings that haven't changed what the framework does in any release, beyond
isProcessLoggingEnabled()reporting one of them back:processLogging.broadcastand an agent'srefusalHandling.announceHumanTurns. It also removes the Discord announcement that the second one gated, which has had no caller since, and two fields of the rewind's record that nothing insrcreads: one built for that announcement, and one whose last reader was the announcement's check.isProcessLoggingEnabled()now returns{ persist }. It's a breaking change for TypeScript code that names either setting in an object literal checked against the framework's types, or that reads either one back. That code no longer compiles.Problem
On
main(61a6997):processLogging.broadcastis documented as "Broadcast process:completed trace events (default: false)" (src/types/framework.ts:27-28).create()reads it into a field (src/framework.ts:2546) that onlyisProcessLoggingEnabled()returns (:6639-6644). The framework emitsprocess:completedwhatever it says (:10685-10686, "Always emit trace for observability"). The check that gated that emit was removed ine9a79d7a, before 0.1.0.refusalHandling.announceHumanTurnsis documented as announcing on Discord, "Default true", when a refusal rewind sets aside a human message (src/types/agent.ts:175-180). Its one reader, the call toannounceRewind, was removed in9f9cb9a5. That commit and1bbff412, which added the setting, both first shipped in 0.6.2, so no release has read it.announceRewind(src/framework.ts:8102-8129) has had no caller since. Nothing insrchas ever readRewindRecord.discordRef(:1507), a Discord message reference thatshedNewestTurnbuilds (:8046-8048) and that came in with the announcement in1bbff412.RewindRecord.kind(:1501) has had no reader insrcsince9f9cb9a5removed its last one, the announcement'srec.kind === 'human'check.A setting that does nothing misleads whoever writes a config, and each of these misleads at its documented default.
broadcastdefaults tofalse, yet the framework emitsprocess:completedto its trace, and the API server sends it on to its WebSocket clients (src/api/server.ts:331-340).announceHumanTurnsdefaults totrue, yet no release has posted the notice.Changes
ProcessLoggingConfig.broadcastandAgentConfig.refusalHandling.announceHumanTurnsare removed, with their docs.create()no longer readsbroadcast, and the framework no longer stores it.isProcessLoggingEnabled()returns{ persist }, and its doc now says that this reports whether process events are written to Chronicle, whileprocess:completedis emitted either way.announceRewindis removed, withRewindRecord.discordRefandRewindRecord.kind. The shed tests that assertedkindordiscordRefassert the wholedescriptorinstead, which/unstick's outcome post and the inference-exhaustion log read.shedNewestTurn's doc still described the marker it stopped adding in9f9cb9a5, and now says what it does.changelog.d/fix-remove-no-op-settings.breaking.md.Who needs to act
create(), no longer compiles while it names either one. A JSON config, or a host that passes on a config object of its own, still starts.isProcessLoggingEnabled().broadcastorannounceHumanTurnson an agent'srefusalHandling(src/agent.ts:150). In TypeScript, neither read compiles. In plain JavaScript,.broadcastreadsundefined, whilerefusalHandling.announceHumanTurnsstill reads what the config set, since the agent keeps the object as given (:281). In this repository only tests callisProcessLoggingEnabled(): two read.persist(test/config-switches.test.ts:160,:189), and the new one compares its whole result. A GitHub code search of anima-research and antra-tess finds no other caller, though it isn't proof, since GitHub doesn't index a file as large assrc/framework.ts.maind555ff0) has noprocessLogging. ItsRecipetype declaresrefusalHandling.announceHumanTurns(src/recipe.ts:381), two example recipes set it (docs/AGENT-ONBOARDING.md:284,docs/claude-code-ingest.md:364), and a composition test passes it through (test/framework-fkm-composition.test.ts:52,:84).src/framework-agent-config.ts:134hands the recipe'srefusalHandlingobject to the framework whole, not as an object literal. fix(recipe): stop suggesting refusalHandling.announceHumanTurns, which no agent-framework release reads connectome-host#325, open, takes the key out of those two example recipes and marks it@deprecatedin theRecipetype. The two pull requests merge safely in either order, since neither needs the other.What each part is for
isProcessLoggingEnabled()returning{ persist }. The method returned the storedbroadcast, and keeping abroadcastfield in its result would keep the setting in the API. The method itself stays, sincepersistwrites each process event to Chronicle.announceRewind,discordRefandkind. Nothing calls the announcement, and its doc describes a notice that's never sent. Nothing insrcreads the reference built for it, and nothing there has readkindsince the announcement's check was removed.@deprecatedand ignoring them would keep a TypeScript host's build green. But both would stay in the public types, where each still reads as a setting a host can turn, and taking them out later would break the same builds then. Removing them now breaks those builds once, in the minor release that carries breaking changes, with an entry saying what to delete.test/removed-settings.test.ts. Its runtime case runs withpersistfalse and true, and pins that such a config starts and thatisProcessLoggingEnabled()reportspersistand nothing else. Its two type-level lines fail the build if either key comes back to its type, with any type.Tests
On Linux with Node 24.22.0, at the second commit,
d56e479, unless a bullet names another:test/removed-settings.test.ts1,test/config-switches.test.ts8,test/refusal-rewind.test.ts6 andtest/state-registration-errors.test.ts25. So dotest/workspace-read-image.test.ts15,test/state-scaling-e2e.test.ts1,test/refusals-are-error-results.test.ts4,test/inference-exhaustion-rewind.test.ts13 andtest/tool-result-guard.test.ts146, which setprocessLoggingor reach the refusal rewind.main's three changed source files under the second commit's tests, the build fails at the new test's two type-level lines (TS2322,test/removed-settings.test.ts:19,:20). With those lines also taken out, the build passes, and the test fails becauseisProcessLoggingEnabled()returns{ persist: false, broadcast: true }.broadcastinProcessLoggingConfigat:19, and so doesbroadcastas astring, whileannounceHumanTurnsinrefusalHandlingfails it at:20. A constant{ persist: false }fromisProcessLoggingEnabled()fails the runtime case'spersist: truerun.announceRewind,discordRefandkindhave no test of their own, since nothing insrcread them.a4f1aa1, the third commit, which dropskind, the build is clean, andtest/refusal-rewind.test.ts6,test/inference-exhaustion-rewind.test.ts13,test/refusals-are-error-results.test.ts4,test/removed-settings.test.ts1 andtest/config-switches.test.ts8 pass. Rewording either descriptor that the shed tests now assert fails its test.3c1b520, the fourth commit: CI ata4f1aa1failedtest/operator-surgery.test.ts's shed test, which still assertedkindthrough a cast that the typecheck can't see past, and the fourth commit makes it assert thedescriptor. At3c1b520the build is clean, andtest/operator-surgery.test.ts27,test/refusal-rewind.test.ts6,test/inference-exhaustion-rewind.test.ts13,test/inference-failure-bounds.test.ts30,test/refusals-are-error-results.test.ts4,test/removed-settings.test.ts1,test/config-switches.test.ts8 andtest/state-registration-errors.test.ts25 pass. Rewording the tool descriptor fails the shed tests in bothoperator-surgeryandrefusal-rewind.24e5546, and the second and third commits answer it. The fourth answers CI.Not verified
srchandsrefusalHandlingon as a value of its own type, which sharesautoRewindandmaxRewindswith the framework's, and TypeScript rejects unknown properties only in an object literal. Itstsconfig.jsonincludes onlysrc, so the object literals in its test aren't typechecked.Related
3c1b520with each of the other 62 open pull requests at 13:11Z found no conflict thatmaindoesn't already have with it, and it merges cleanly ontomainat8a32054. None of them adds or removes a use of either setting,announceRewindorisProcessLoggingEnabled().broadcast, and feat(framework): gated operator body changes with journaled recovery (stacked on #250; merge after it) #255 is the one that adds a use ofkindordiscordRef.shedNewestTurnso thatplanShedExchangebuilds the record,kindanddiscordRefincluded (src/framework.ts:5601-5628at its head), and the shed passes them on (:5548). In a trial merge,:5622-5628fall in the conflict feat(framework): gated operator body changes with journaled recovery (stacked on #250; merge after it) #255 already has withmainat that return, and:5548merges cleanly.:5601'slet kindand its three assignments (:5604,:5614,:5618) merge out, since this change removes the lines they came from. By reading, with both in,kindanddiscordRefcome out of both places, sinceplanShedExchangereturns aRewindRecordwith ananchor.changelog.d/fix-remove-no-op-settings.breaking.mdWritten by Effie-2756 (Claude Opus 5.5), on Ada-1017's calls. Myrtle-2415 (Claude Opus 5.5) reviewed the change.
Description checked and posted by Fiona-2757 (Claude Opus 5.5).
🤖 Written using Anthropic's Claude Opus 5.5 through the Rookery's Pi tooling, and posted from the shared
nissa-seruaccount.