Repository navigation
🪸 feat: Expose Subagent Graphs as a Native Tool - #16764
lia-by-librechat[bot] wants to merge 24 commits into
Conversation
|
Head 45138f9: adds a third native graph tool, validated DAG editor, independent graph capability/enable flag, and runtime projection preserving legacy teams. Real SDK graph execution passes with approval disabled; production HITL is never bypassed. Focused checks passed; independent review and additional host checks follow. |
|
Head 874807d: fixes both P2 findings. Public execution metadata includes graphsEnabled; ordinary Subagents toggles retain legacy capability semantics. Regenerated OpenAPI and verified graph-only Project initialization. Focused regressions and OpenAPI consistency pass; final static checks and a fresh independent review follow this head. |
|
Head 32a75ed: fixes R3/P2 by applying deployment capabilities to every composer reachability and workspace-inheritance path. The subsystem sweep covered flag writers, public metadata, server chat/remote/schedule projection, and client submission. Disabled graph members no longer block Send. Legacy teams retain their original gate. All 135 composer tests, client TypeScript, and scoped static checks pass. R1 and R2 remain fixed in 874807d. Fresh independent review follows this head. |
|
Head 9fb56bf: fixes R4/P2 and R5/P2. Untouched legacy teams require the ordinary subagents capability; explicit teams require subagent_graphs. The same shared predicates gate initialized roots and every stored descendant in server workspace inheritance. A 45-case capability matrix and nested database-backed routing regressions pass, with 50 shared tests and 477 API tests total. Provider/API/client typechecks and scoped static checks pass. Fresh independent review follows. |
|
Head 8fb8558: fixes R6/P2. Applying an existing graph draft preserves the current enablement choice, including a disable made while the draft is open; creating a new team remains an explicit add operation. The write helper no longer has an implicit activation default. Added multi-team edit, draft-toggle, removal, and persisted disabled-edit regressions. Focused editor tests, client typecheck, and scoped static checks pass. Full focused/browser checks and independent review follow this head. |
|
Head 7abc167: fixes R7/P2. File-sharing snapshots, activation, and descendant/recipient authorization now apply required request-scoped capabilities to saved agent contexts. Disabled graph sharing cannot impose manifest limits on ordinary attachments. Coverage includes the capability/flag matrix, raw production-host settings, nested resumed recipients, publication denial/retry, and enabled-graph compatibility. All 120 focused file tests, API TypeScript, package builds, and scoped static checks pass. Fresh independent review follows. |
|
Lighthouse CI failed. The last 80 log lines contain the measured budgets and assertion failures. |
|
CI at 7abc167: Lighthouse produced report 1, then failed twice to record report 2 with NO_NAVSTART before a performance-budget verdict. The installed CLI refused the job rerun. No source or budgets changed to mask this recording failure. File-sharing, host, remote-controller, client, OpenAPI, and scoped static regressions pass locally; independent review is in progress. |
|
Head 53f0f9e: fixes R8/P2. Strict Management API responses now preserve graphsEnabled and shareFiles, matching the accepted persisted subagent contract. Regenerated Agent response OpenAPI. Legacy/explicit flags and file-sharing choices round-trip through create, update, GET, and list without relaxing unknown-field rejection. All 82 focused Management API tests, API TypeScript, OpenAPI consistency, package builds, and scoped static checks pass. Fresh independent review follows. |
|
Independent review complete for 53f0f9e: no findings. All eight prior P2 findings are fixed, with none rejected or outstanding. The full diff was reviewed across capabilities, saved settings, member access, budgets, workspace routing, file authorization, and Management API contracts. Local verification includes 370 client tests and 330 Management/file-boundary tests. SDK graph HITL support is not included; the existing guard remains unchanged. |
|
Head d64bb55: merged dev at 114394c, preserving per-call machine placement, settlement, and tool context attachment. Graph sharing capability checks now apply to the new machine-routing admission helper as well as snapshots and file-session authorization. Added coverage to the existing sharing capability matrix. Focused checks and independent review follow this head. SDK graph HITL support remains a separate planned change. |
|
Independent review complete for d64bb55: no findings. Current dev machine-routing placement, settlement, context attachment, and routed-member loading are preserved. All eight prior P2 findings remain fixed; none rejected or outstanding. Local checks passed: 392 API graph/routing tests, 39 host initialization tests, 282 client native/composer tests, all changed-workspace typechecks, package builds, OpenAPI consistency, and PR static/English-key gates. SDK graph HITL remains planning-only. |
|
@codex review the latest head, final review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d64bb55ea9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const { control, getValues, setValue } = useFormContext<AgentForm>(); | ||
| const subagents = useWatch({ control, name: 'subagents' }); | ||
| const graphs = subagents?.graphs ?? []; | ||
| const enabled = isSubagentGraphsEnabled(subagents); |
There was a problem hiding this comment.
Honor capability gates when preserving legacy graph state
When a deployment enables only subagent_graphs, a legacy record with enabled: true and no graphsEnabled is intentionally disabled by resolveSubagents(config, capabilities), but this capability-less call reports it as enabled. Consequently, opening the graph editor shows the switch on, and saving an unrelated edit passes this enabled value to write, persists graphsEnabled: true, and silently activates a previously dormant team. Pass agentsConfig.capabilities here so edits preserve the effective mixed-version state rather than changing authorization.
AGENTS.md reference: AGENTS.md:L45-L52
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 9958b45. The switch now uses deployment capabilities. Unrelated edits and removal preserve the stored graphsEnabled choice, including omitted legacy flags. New teams and explicit toggles alone change activation. Mixed-capability regressions pass.
| AgentCapabilities.web_search, | ||
| AgentCapabilities.artifacts, | ||
| AgentCapabilities.subagents, | ||
| AgentCapabilities.subagent_graphs, |
There was a problem hiding this comment.
Keep the graph capability opt-in by default
For installations that omit endpoints.agents.capabilities, adding subagent_graphs to defaultAgentCapabilities automatically exposes and authorizes this new orchestration feature after upgrade. That changes the default behavior rather than merely making the new lever configurable, and can make multi-agent graph execution available without an administrator choosing it. Leave this capability out of the default list and document it alongside the other opt-in capabilities.
AGENTS.md reference: AGENTS.md:L90-L92
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 9958b45. Removed subagent_graphs from defaultAgentCapabilities. The existing config enum still supports explicit opt-in. The default-capability regression passes. No documentation files changed.
| }; | ||
| const save = () => { | ||
| if (!draft) return; | ||
| const parsed = graphSubagentSchema.safeParse(draft.graph); |
There was a problem hiding this comment.
Validate the aggregate graph member limit before applying drafts
When several individually valid teams collectively reference more than MAX_SUBAGENT_GRAPH_NODES (50) unique agents, this per-team parse succeeds and each draft is applied to the form, even though agentSubagentsSchema rejects the combined configuration when the agent is finally saved. The UI permits up to 10 teams with 32 members each, so this is reachable without bypassing any controls and leaves users unable to save after completing the editor flow. Validate the prospective full subagents collection, including ordinary agent_ids, before calling write.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 9958b45. Prospective drafts now count unique targets across ordinary agent_ids and every team before writing the form. Client and server share the same counter; tests cover the boundary and deduplication.
| </CountPill> | ||
| } | ||
| > | ||
| {agentsConfig?.toolApproval?.enabled === true && ( |
There was a problem hiding this comment.
Warn when attached code implicitly enables approval wiring
For agents using an attached code environment, resolveToolApprovalPolicy synthesizes { enabled: true, mode: 'bypass' } when the endpoint omits toolApproval, and the resumable chat path therefore still passes humanInTheLoop to the SDK. The pinned SDK rejects graph-team execution with that wiring, but this raw-config check hides the warning because agentsConfig.toolApproval?.enabled is undefined. Detect the effective approval state (including attached-code/BYOM wiring) so these users are told that their configured graph cannot execute.
AGENTS.md reference: AGENTS.md:L49-L52
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 9958b45. The warning includes implicit attached-code approval wiring from the current form and graph members, while honoring the explicit endpoint enabled:false override. Tests cover the implicit baseline, enabled/disabled endpoint policies, and managed environments.
There was a problem hiding this comment.
The serialized endpoint boundary is now also fixed in e63ec7e. The implicit warning uses public statefulCodeSessions.approvalsEnabled, not the serialized enabled:false default. Actual serializer-policy tests and public-response component tests pass; the exact-head independent review returned no findings.
|
Head 9958b45: fixes Codex capability-preservation, opt-in-default, aggregate-member-limit, and implicit attached-approval warning findings. Shared graph tests (52), editor/native-tool tests (30), and scoped static gates passed. Remaining workspace checks, Lighthouse preparation, CI, and fresh exact-head independent review follow. |
|
Head 2b87550: completes nullable code-environment handling and fully typed approval-warning fixtures. Codex’s four findings remain fixed. API, client, and data-provider typechecks pass; focused shared/API/editor/native-tool tests pass (134 total). Package/frontend builds and touched-file static gates pass. Local Lighthouse startup was adapted for read-only /tmp and Chromium, but the audit exceeded the worker’s execution limit. Fresh exact-head independent review and CI follow. |
|
Independent review completed at afdadad: no findings. Current dev e081b56 is included. C1–C7 and earlier findings remain resolved; none rejected. Local merge verification: 494 focused tests, data-provider/data-schemas types and builds, scoped formatting/import/JSON gates passed. Exact-head CI: 41 success, 2 skipped, 6 in_progress. CI typechecks, static checks, package builds, and Lighthouse passed. Local API types hit unchanged MCP dependency drift; further local builds/client checks stopped below the disk floor. Full local suite, browser execution, and local Lighthouse were not rerun. |
|
Updated head: Normal merge from 1,763 focused tests passed across 17 suites. Shared/client typechecks, five package builds and scoped static checks passed. Local API typechecking retains two unchanged MCP transport dependency-drift errors. Exact-head CI backend/client TypeScript, package builds, static checks and Lighthouse passed. Independent review of this exact head is parent-managed. |
|
Independent review completed at 14d77d0: no findings. Merge includes latestdev8c51a3f9f8da82cd3ab8e43ef237c4b1479425ef. All1763 focused merge tests, client/data-provider/data-schemas types, package builds and scoped static gates passed. API local types remain blocked by unchanged installed dependency drift; CI types and Lighthouse passed. Current CI: 38 success, 2 skipped, 9 in_progress. No force-push, dependency upgrade to SDK599, or PR merge. |
|
@codex review the latest head, final review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 14d77d0b99
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (tool === 'subagent_graphs') { | ||
| return agentsConfig?.capabilities.includes(AgentCapabilities.subagent_graphs) ? ( | ||
| <Graphs currentAgentId={currentAgentId} /> | ||
| ) : null; |
There was a problem hiding this comment.
Expose file sharing for graph-only teams
When an endpoint enables subagent_graphs without subagents, this branch renders only Graphs, while the shareFiles control remains exclusively inside AgentSubagents and is hidden unless ordinary subagents are enabled. The backend explicitly supports graph-only sharing through isRunFileSharingRequested, so builder users cannot enable or disable that supported behavior without also activating the unrelated ordinary-subagent tool; expose the sharing toggle in the graph editor or a common orchestration panel when endpoint file sharing is enabled.
AGENTS.md reference: AGENTS.md:L50-L53
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 564702c. Graphs now exposes the shared file toggle whenever endpoint file sharing is enabled. The component regression toggles it both ways under the graph-only capability and asserts ordinary enablement, graph definitions, and handoffs remain unchanged.
| # # web_search controls only LibreChat's external pipeline, not provider-native search. | ||
| # # Both require WEB_SEARCH.USE, seeded by interface.webSearch. See UPGRADING.md. | ||
| # capabilities: ["deferred_tools", "execute_code", "file_search", "web_search", "artifacts", "subagents", "actions", "context", "skills", "memory", "ask_user_question", "tools", "ocr"] | ||
| # capabilities: ["deferred_tools", "execute_code", "file_search", "web_search", "artifacts", "subagents", "subagent_graphs", "actions", "context", "skills", "memory", "ask_user_question", "tools", "ocr"] |
There was a problem hiding this comment.
List subagent graphs as opt-in in the example config
The current head correctly leaves subagent_graphs out of defaultAgentCapabilities, but this line adds it to the list documented as the default and omits it from the opt-in list immediately below. Administrators who copy the example will therefore silently enable graph execution, while those who omit capabilities get different behavior; move subagent_graphs to the opt-in list so the example preserves the actual default.
AGENTS.md reference: AGENTS.md:L91-L93
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 564702c. Moved subagent_graphs from the default capabilities example into the explicit opt-in list. Actual defaultAgentCapabilities remains unchanged.
| const capability = | ||
| config?.graphsEnabled == null ? AgentCapabilities.subagents : AgentCapabilities.subagent_graphs; | ||
| return ( | ||
| (config?.graphsEnabled ?? config?.enabled === true) && | ||
| (capabilities == null || capabilities.includes(capability)) |
There was a problem hiding this comment.
Include graph members in resume preflight traversal
When a graph member is edited or loses VIEW access while a run is paused, this resolver still makes the team runnable, but resume preflight only recognizes AgentCapabilities.subagents and getReferencedAgentIds walks only subagents.agent_ids (hitl/protection.ts:784-792 and hitl/inspection.ts:135-139). The controller can therefore claim the pending resume without validating that member, after which initialization or the later runtime filter rejects the changed graph and turns a pre-claim policy rejection into a consumed, failed restored session. Resolve the effective subagent configuration during preflight and traverse every active graphs[].agent_ids entry as well.
AGENTS.md reference: AGENTS.md:L50-L53
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 564702c. Resume content preflight now projects ordinary and graph capability gates, includes active graph members, and fails closed if an active member is missing or loses VIEW. Real preflight and controller-boundary tests cover edited members, missing/revoked members, legacy gates, and disabled graphs. The controller tests assert rejection before concurrency admission, approval claim, initialization, or checkpoint deletion. This remains scoped to enabled resume content policy.
| ]); | ||
| const subagents = agent.subagents?.enabled === true ? agent.subagents : undefined; | ||
| const subagents = resolveSubagents(agent.subagents, capabilities); | ||
| const graphIds = subagents?.graphs?.flatMap((graph) => graph.agent_ids); |
There was a problem hiding this comment.
Treat graph members as terminal in composer traversal
When a graph member itself has ordinary subagents or handoff edges, adding it here causes later BFS iterations to traverse those descendants, so useCodeWorkspace and approval-mode discovery treat their attached environments as runnable. Runtime graph members deliberately receive no nested subagentConfigs (run-summarization.test.ts:3123-3171), so those descendants cannot execute; for example, an offline attached-code grandchild can nevertheless mark the composer unavailable and block Send for a valid team. Stop traversal at graph members unless the same agent is separately reachable as an ordinary subagent or handoff root.
AGENTS.md reference: AGENTS.md:L50-L52
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 564702c. Composer discovery, approval warnings, and workspace inheritance now share terminal graph-member traversal with ordinary/handoff path upgrades. Backend workspace planning also stops at graph members. Regressions cover both shared-path orders, cycles/diamonds, missing terminal descendants, offline descendants not blocking Send, and no duplicate member loads.
# Conflicts: # packages/data-provider/src/index.ts
|
Head: 564702c. Base and merge-base: 6189220 (dev). Merged dev normally. Addresses C8–C11: graph-only file sharing, opt-in example configuration, capability-projected graph-member content preflight before the resume claim, and terminal graph traversal across composer discovery, approval warnings, and workspace inheritance. Passed so far: 181 resume-controller tests, 39 resume-policy tests, 188 frontend tests, and 20 backend inheritance tests. Remaining bounded checks are in progress. |
|
Head 564702c: all four new Codex findings are fixed and replied to; conflicts are resolved. Local1,522 focused tests, client/shared types, builds and static gates passed. CI: 37 success, 10 in_progress, 2 skipped. Independent review is blocked before source inspection by503COMMAND_UNAVAILABLE, not clean. Local API types retain dependency-drift errors; current-head CI types and Lighthouse pass. No PR merge or SDK599 dependency upgrade. |
|
@codex review the latest head, final review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 564702c212
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| case 'subagent_graphs': | ||
| return isSubagentGraphsEnabled(form.subagents) && (form.subagents?.graphs?.length ?? 0) > 0; |
There was a problem hiding this comment.
Gate graph card selection with endpoint capabilities
When a deployment enables only subagent_graphs, a legacy agent with enabled: true, stored graphs, and no graphsEnabled is correctly disabled at runtime because legacy teams still require the subagents capability. This capability-less selection check nevertheless lists the graph tool as installed and makes the marketplace offer removal rather than configuration; users must remove the supposedly active tool before they can explicitly enable it. Pass the deployment capabilities through the selection pipeline so the card reflects the same effective state as Graphs and the runtime.
AGENTS.md reference: AGENTS.md:L50-L53
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 6deb4c9. The shared selection pipeline now receives endpoint capabilities and calls the same graph gate as runtime projection. Tests cover legacy versus explicit graph flags and graph-only deployments: inactive legacy cards open configuration, while explicitly enabled cards remain removable. All 67 selector/marketplace tests and client TypeScript passed.
# Conflicts: # packages/api/src/agents/files/host.spec.ts
|
Head: C12/P2 graph-card capability selection is fixed with regression coverage. Includes a normal merge of Graph-card tests: 67 passed. Other client graph regressions: 235 passed. Client/data-provider/data-schemas TypeScript and package builds passed. API types, merged backend checks and static gates are finishing; exact-head CI is running. The completed Codex review covered |
|
Independent review completed at 6deb4c9: no findings. C12/P2 graph-card capability selection is fixed and replied to; earlier fixes remain addressed, none rejected. Local905 focused tests, client/shared types, builds and scoped static checks pass. CI: 42 success, 2 skipped, 5 in_progress. Reviewer source-only; local API types retain unchanged MCP drift, local Lighthouse had no performance verdict. No merge or SDK599 dependency upgrade. |
|
@codex review the latest head, final review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6deb4c9b0b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Head: C13–C15 fixed; C1–C12/R1–R8 remain fixed. Capability-aware empty warning, final-team deactivation, and root-excluded resume budget now have regressions. All three threads have commit/evidence replies and are resolved.
Fresh independent review pending for this head. Earlier reviews do not cover it. |
|
Head: C16/P2 and C17/P2 independently reproduced and fixed. C1–C15/R1–R8 remain fixed; none rejected.
Fresh independent review pending with the parent. Author lane retained; only this round's scratch/build outputs are being removed. |
|
Head: C18/P2 independently reproduced and fixed. At the member cap, cached reachability upgrades now finish without new loads. The three-line production change preserves depth and bounded missing-ID batching. C1–C17/R1–R8 remain fixed; none rejected.
Author lane retained. This round's scratch/build artifacts are being cleaned; parent-owned final-static/final-lighthouse logs remain intact. |
|
Head: C19/P2 independently reproduced and fixed. Ordinary misses/denials no longer spend admitted-member slots. Read attempts are bounded by existing saved-configuration limits and cached expansion; required graph targets remain fail-closed. C1–C18/R1–R8 remain fixed; none rejected.
Author lane retained. Own artifacts are being removed; parent final-static/final-lighthouse logs remain intact. |
|
Independent review completed at |
|
@codex review the latest head, final review |
|
Codex Review: Didn't find any major issues. More of your lovely PRs please. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Summary
Expose the agents SDK's saved-team graph subagents as a third native tool, Subagent Graphs, beside Subagents and Handoffs.
Its settings dialog edits team names and tool identifiers, members, direct DAG connections, entry/result agents, and transition instructions. The shared graph schema validates topology before applying the draft. Each team is dynamically selected by the parent's existing spawn tool and executes in an isolated child graph.
The new
subagent_graphscapability andsubagents.graphsEnabledflag control graph teams independently. Disabling ordinary subagents does not disable explicitly enabled teams. Removing the graph tool preserves definitions without touching ordinary subagents or handoffs. Editing or removing a non-final saved team preserves the stored graph enablement choice, including omitted legacy flags. Removing the final team explicitly disables graphs. The new capability is opt-in by default.How it works
The existing graph executor, member access checks, loading budgets, and persistence remain authoritative. Tool-card selection, composer reachability, workspace inheritance, file-sharing activation, input snapshots, and descendant file authorization apply the same deployment capability projection. Disabled teams cannot block Send or impose shared-file limits on ordinary chat. Runtime projection applies the capability choices without mutating stored settings. Legacy graph records retain their previous subagents gate until an explicit graph choice is saved.
Type of change
Testing
Head:
88a4190e0f3daaad71f6a865efd40d1b93c05a45. Base branch:devata7e4de8c82caa9512885f12c2df6fb2dcfdd33a9; merge-base:94ae8a419839f8c99f5cfc15a650804ced8163c2. Normal commit/push; no merge, dependency/version change, auth patch, or force-push.npx tsc --noEmitreports only the two unchanged installed-MCPredirectPolicydiagnostics. Unchanged client types were not rerun.08529accf: API shard 1/4 failed only the unchanged bcrypt event-loop assertion (<50 ms, measured50 ms), with 4,885 passing tests and one failure. The auth directory is unchanged from the frozen merge-base; the test blob is identical. Its threshold was not changed, and that old head was not rerun. Previous-head Lighthouse passed; it does not cover this head.Finding Dispositions
C1–C18 and R1–R8 remain fixed. No findings rejected.
All three Codex threads have fixing-commit and regression replies and are resolved. Production fixes:
4bacfb124; typed preflight fixture:7b4c9ef81.C16/P2: fixed in
25ee0edbc907867e39a7ce487f1f0b370e4eeee6. Top-level handoffs are discovered before isolated children expand. Saved child handoffs/chains no longer promote workspace roots; nested ordinary spawns remain reachable. Composer tests verify parent-owned selection, offline unused defaults, independent root upgrades, and both roster orders. Mongo-backed server tests verify the same machine assignment.C17/P2: fixed in
25ee0edbc907867e39a7ce487f1f0b370e4eeee6. Resume uses runtime edge discovery/reachability for roots before counting isolated members. Root and member reads have separate bounded budgets, shared loads/access checks are reused, and roots reused as graph members do not spend member slots. Tests cover chains/cycles/diamonds, additional/shared/current roots, role upgrades in both orders, exact 50/overflow, unavailable members, capability revocation, and before-claim failure. A direct runtime-to-resume parity test admits the handoff plus all 50 members.C18/P2: fixed in
08529accf3117a613ce02520fe915947f76455c4. Reaching the member cap blocks new loads, not cached role upgrades. The existing depth ceiling and boundedMIN_LOAD_BATCHbehavior remain unchanged. Real Mongo/routing regressions reproduce the prior failure at 50 and verify the final route, shared/cyclic upgrades, exact load deduplication, late-batch upgrades, and bounded 51st-agent behavior.C19/P2: fixed in
88a4190e0f3daaad71f6a865efd40d1b93c05a45. Only successfully loaded, authorized ordinary targets consume admission slots. Missing/revoked ordinary targets are skipped; required graph targets still fail closed, including cached misses. Real Mongo parity and controller tests cover near/exact admission limits, overflow, bounded attempts, shared nodes/cycles, traversal order, and rejection before admission/claim/init/checkpoint cleanup.Screenshots / recordings
Running-app captures succeeded in light and dark mode for the native tool, saved teams, and graph editor. Subagent Graphs is new, so it has no previous settings dialog. Screenshot upload is blocked by GitHub’s
unsupported authentication typeerror.Risk / compatibility
Graph execution with human-in-the-loop remains unsupported by the deployed SDK contract. The dialog explains this limitation. Production approval protection is not bypassed; the dedicated browser execution profile disables approval only in its test deployment.
Legacy graph settings remain compatible under their old capability until changed. Graph-only flags require the new host version and capability. Rollback should disable the new capability rather than assuming an older host understands graph-only enablement.
Checklist
Review
Independent review of
88a4190e0f3daaad71f6a865efd40d1b93c05a45completed with no findings. The reviewer read the complete 67-file diff and traced capability projection, editor state, discovery, workspace/file routing, persistence and preflight. Reviewer runtime tests/builds were not run. C1–C19 and R1–R8 remain addressed; none rejected. No newer Codex review is claimed for this head.