Repository navigation
chore(release): merge v2/main into main for v2.11.0 - #2720
Merged
Merged
Conversation
… 27 (#2625) Playwright's Firefox cannot launch on Darwin 27, so smoke:web:firefox timed out every local:gate run and cut off local:storybook behind it. On those hosts the runner now executes the three engine smokes inside mcr.microsoft.com/playwright:v<pinned>-noble, with the tag read from clients/web/package-lock.json, over an export of the working tree. With no Docker daemon it skips loudly (naming #2625) and exits 0 so the rest of the gate runs. INSPECTOR_FIREFOX_SMOKE=native|container overrides. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Step 2 now cuts the feature branch into a sibling worktree instead of treating a worktree as optional, with the required real `npm install` inline; step 9 removes the worktree and local branch after merge. The AGENTS.md "When work begins" rule is updated to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
The --use-stored-auth refresh wrote back a server entry built from the snapshot read before the token grant's network round trip, so a same-server write landing meanwhile (a web OAuth flow adding an issuer slot, switching activeIssuer) was overwritten. Add updateOAuthServerEntry to oauth-persist-file: under the state-file lock it re-reads the entry fresh (store-joined) on every write attempt, applies the caller's updater, then splits and writes through the same path as writeOAuthSections. The CLI uses it to change only the refreshed slot's tokens, and never resurrects an entry or slot removed meanwhile. The rollback bookkeeping now records only fields an attempt changes, so an updater carrying forward a racing writer's secret cannot have it clobbered by a failure-path restore. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…#2602) findFreePort() closed its probe socket before startHonoServer bound the port, so under load another process could take it and the server's EADDRINUSE handler process.exit(1)'d the run. Bind :0 and read the real port back from the URL handed to the opener, which the banner builds from the bound port. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…2624) The lease lived under os.tmpdir(), which follows $TMPDIR, so a gate run as `TMPDIR=/tmp npm run local:gate` took a different lock and ran alongside a gate already holding the lease — the overlap #2339 exists to prevent. leaseDir() now returns /tmp/mcp-inspector-gate-lease-<uid> on POSIX and a directory under the account's profile (from os.userInfo(), not %TEMP%) on Windows. $XDG_RUNTIME_DIR is dropped for the same reason: a desktop session sets it and an ssh/tmux one may not. INSPECTOR_GATE_LEASE_DIR still overrides. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…Container (#2625) Addresses Copilot review on #2662: on a rootful Linux daemon the root-run install left a bind-mount tree the host could not remove, and the no-daemon skip had no automated coverage. runInContainer now takes injectable side effects, tested for the skip, exit propagation and cleanup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Bump the four lockstep-pinned typescript-sdk packages (client, core, server, server-legacy) from 2.2.0 to 2.3.1 in the root manifest and refresh the lockfile. eventsource-parser moves 3.0.6 -> 3.1.1 to meet the client's new >=3.0.8 floor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
The POSIX default is a predictable name in world-writable /tmp, and a recursive mkdir adopts whatever is already there. Require a real directory (not a symlink) owned by this uid and tighten it to 0700; otherwise take the existing unleased-with-a-warning path. Mirrors mcpdo's assertTrustedPrivateRoot. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…ow-worktree docs(pr-flow): always start work in a new git worktree
Addresses Copilot review round 3 on #2662: a typo'd override fell through to host routing and could report green for a path that never ran. It now fails closed like SMOKE_BROWSER, and a forced container run no longer claims the host cannot launch Firefox. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
A 2.9.x save strips the secretsNamespace stamp and keeps a confidential DCR client's client_id, but can only see the legacy ids, which adoption already emptied. The next 2.10 save re-adopted under a fresh namespace and purged the old one first, destroying the only copy of the client secret, so the next token exchange failed until re-authorization. Reads of an unstamped file and adoption now fall back, newest first, to the namespaces its ledger records for any field the legacy ids lack, and adoption purges the superseded namespaces only after the new stamp has committed with those values copied under it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…2-3-1 chore(deps): upgrade the MCP TypeScript SDK to 2.3.1
…ease-tmpdir fix(gate-lease): key the lock on a fixed per-user path, not TMPDIR
Copilot review on #2666: - The CLI write-back now applies the rotation only while the slot still holds the refresh token the grant spent, so a sign-out or same-issuer re-authorization made during the grant is kept. - A retry's candidate set now includes fields earlier attempts touched, and deletes count as ours only when the field existed, so a racer removing an issuer-keyed entry between attempts cannot have its secrets resurrected by a failing retry's rollback. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…pen-port-race test(web): bind the auto-open server to :0 instead of probing a free port
Addresses Copilot review round 4 on #2662: an unbounded docker info could hang the gate on a wedged or remote daemon. The probe now times out after a measured 10s (healthy: 0.07-0.12s; dead remote: 32s) and reaches the loud skip with the reason. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…h-writeback-race fix(cli): refresh write-back updates the fresh on-disk entry
…x-smoke-container fix(smoke): run the Firefox pass in the Playwright container on macOS 27
…2667) Bulk triage and board work tripped GitHub's secondary rate limit while gh api rate_limit still showed quota. Add the pacing rule to the Issue-driven Work Style section of AGENTS.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…ve-dcr-secret-on-namespace-remint fix(auth): carry stripped-namespace secrets over before purging (#2630)
…github-writes docs(agents): pace bulk GitHub writes under the secondary rate limit
…ntry (#2676) #2666 added a joinSnapshot call with three arguments; #2671 added a fourth fallbacks parameter. Each passed CI alone, so v2/main stopped typechecking once both merged. The write path always holds a resolved namespace, so there is no unstamped file to fall back from. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Under SEP-2663 task creation is server-directed: the server decides per request whether to return a task handle, so the client has no per-call choice to offer. The switch is now legacy-only, gated by a new pure offersRunAsTask(protocolEra, capabilities) helper, and the modernTasks prop is gone from ToolDetailPanel / ToolsScreen / InspectorView. No routing change is needed: on a modern connection InspectorClient.callTool already dispatches through the ext-tasks pipeline (preference "allow"), which declares the extension and follows a returned handle to completion with the same Tasks-screen events and progress as callToolStream; on v2 "allow" and "prefer" are identical on the wire and retentionMs is v1-only. mcpdo's --task flag cannot be hidden per era (its command tree is static), so its help text now says it applies to legacy servers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…js (#2523) The test-servers skill named scripts/ensure-test-servers.mjs, a path that has never existed; the helper the scripts import lives under scripts/lib/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…OXY (#2642) mcpdo's daemon connection and front-end authorization environments set only `transport`, and InspectorClient always hands the transport a defined fetch, so the transport's createProxyFetch() fallback was never reached and mcpdo connected direct even with a proxy configured. Install `fetch: createProxyFetch()` on both environments, as the one-shot CLI and TUI do, and pass it to EMA leg 1 (IdP discovery and code exchange), which runs outside InspectorClient. The --relogin clear is local-only and needs no change. Adds a daemon test through a real forwarding proxy (proxied, and direct for a NO_PROXY host), wiring tests for the authorize and EMA paths, and lists mcpdo on the proxy rows in docs/environment-variables.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
… call (#2650) pack:verify now also: - asserts skills/mcpdo/SKILL.md is in the npm pack file list; - ESM-resolves every bare import in the installed clients/mcpdo/build from inside the package (import.meta.resolve; a CJS require.resolve falsely fails @modelcontextprotocol/ext-tasks, which exports only an `import` condition); - runs `mcpdo @test tools/call echo message:=pack-verify` through the packaged daemon and checks the echoed text. The mcpdo daemon dir is shortened to a one-character name so the socket path stays well under macOS's 104-byte sun_path limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…00 probe (#2660) The web backend's /api/mcp/send flattened every upstream transport failure to `{ kind: "transport_error", error: <message> }`, and the browser rethrew it as a plain Error. The SDK's era-negotiation probe classifies a failed `server/discover` by HTTP status only when the error is an `SdkHttpError`, so a 2025-only server's 400 read as a network error and the connect failed instead of falling back to `initialize`. The relay now carries an `SdkHttpError`'s code, status, statusText and body as a typed `http` field, and RemoteClientTransport rebuilds the `SdkHttpError` from it. An unknown relayed code falls back to the code a non-OK POST throws with. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…napshot-fallbacks fix(auth): pass empty fallbacks to joinSnapshot in updateOAuthServerEntry
A single long Protocol target (a minted resource URI) widened the whole sidebar list, clipping every card's border and pushing its controls out of view. The autosize ScrollArea's content slot sizes to its min-content, and only the Network panel opted out of that; the Protocol target's non-wrapping inner ScrollArea made the list's min-content as wide as the URI. - EmbeddableScrollArea now constrains its content to the viewport whenever it is embedded, so every sidebar tab gets the rule rather than opting in. - The compact headers of ProtocolEntry, NetworkEntry and TaskCard, and the Logs meta row, wrap their controls (or a long logger name) onto a line of their own instead of squeezing badges and buttons until their labels clip at the 320px minimum sidebar width. The Protocol target keeps a minimum scroll window, and a long subscription id scrolls in place. - Storybook play tests at the narrowest sidebar width assert that no row, card, button or label overflows, for Protocol, Network, Logs, Tasks and Console. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
keyring 2 rejects on a locked or inaccessible store instead of resolving null/false, which is the contract secret-store.ts's getStrict, probe and delete paths were already written against; v1 silently erased it. commander also moves mcpdo's sucrase override, which pins sucrase's copy to the root's major so mcpdo's own import resolves the same commander. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
The per-file coverage gate only judges files that reach coverage-summary.json, and nothing checked that the report holds the files it should. Under vitest 5 web's report collapsed from 418 files to 11 and the gate stayed green (#2557). verify:coverage-scope resolves each gated client's coverage include/exclude through Vitest, expands them against the file system with Node's own glob (never Vitest's matcher), and fails naming every declared file missing from the report. It runs as the last step of `npm run coverage`, so local:gate and CI's coverage job both enforce it. A coverage client it does not list fails deny-by-default. On v2/main every client's report matched its declaration except web's pendingReauth.ts, a type-only module v8 has no row for; it joins web's existing pure-type coverage excludes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…ndant ones (#2709) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…rage-file-set-guard chore(scripts): guard the file set each coverage run measures (#2709)
…hly-dep-refresh chore(deps): October dependency refresh (#2557)
…ones (#2712) npm 11.19's `allowScripts` policy still runs a script that is neither allowed nor denied, so every v2 install ran esbuild's and fsevents' install scripts. Deny both by bare name in each install that holds them (root: fsevents; web, cli, mcpdo, tui: esbuild + fsevents) — npm reads the policy only from the installing project's own manifest. Add `verify:install-scripts` to `validate:guards`: every lockfile entry flagged `hasInstallScript` must be decided in its install's own `allowScripts`. It reads the lockfile rather than `npm install-scripts ls`, which CI's Node 22 npm 10.x does not have. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…alls (#2518) npm exports every non-default config value to lifecycle scripts as npm_config_*, whichever npmrc set it. With allow-scripts in a user's ~/.npmrc, the root install accepted it and then handed it to the install-clients postinstall as npm_config_allow_scripts; the child `npm install` read that as --allow-scripts on the command line, which npm 11.19+ rejects in a project install (EALLOWSCRIPTS), so a from-source install failed at clients/web. The child installs now run with that one variable removed. Nothing is lost: each child npm reads the same npmrc files itself, where the setting is allowed. The script's main guard compares real paths, since Node resolves symlinks for import.meta.url but not for argv[1], so the cascade cannot skip silently when the checkout is reached through a symlink. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…t a shell (#2518) The symlink case now launches the fixture through a deliberate symlink (a junction on Windows) and the plain case runs from a canonical path, so reverting the realpath guard fails on every platform rather than only where tmpdir happens to be an alias. Node is spawned without a shell, so a Windows temp path containing a space is not re-split. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…2712) npm 11.19 honours only a bare name or exact versions joined by `||` as policy keys, and matches a registry package by the name+version in the lockfile's `resolved` URL, not its node_modules folder. The guard accepted any semver range and keyed on the folder, so it could pass a policy npm ignores. Mirror npm's matcher, fail closed for a non-registry entry without an exact `resolved` key, and skip bundled dependencies, whose scripts never run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
… runner's npm (#2518) CI's Node 22 bundles npm 10, which predates the allow-scripts gate, so the real-npm cases skip or pass there whether or not the strip is wired in. A stub npm on PATH fails whenever npm_config_allow_scripts reaches it, so dropping the env wiring now fails on every runner. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
npm's allowScripts matcher returns "unreviewed" for a bundled dependency unconditionally, and 11.x still runs an unreviewed script during the bundle rebuild — so skipping them left a path no policy can decide. Report every bundled scripted entry, with a remedy that does not suggest an ineffective key. None exists in any install today. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…2712) npm 11.19 also runs `prepare` for a git/file/remote dependency, and the lockfile's `hasInstallScript` records only preinstall/install/postinstall, so a prepare-only one passed unseen. A non-registry entry now needs an exact `resolved` key whether or not it is flagged; link entries point at in-repo source and stay out of scope. No install has one today. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
--preserve-symlinks-main keeps the symlink in import.meta.url, so canonicalizing only argv[1] still skipped the cascade silently for a checkout reached through a symlink under that flag. The symlink case now runs with and without it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…y sources (#2712) A bundled entry often carries no `resolved`, so a scriptless one read as non-registry and was reported with no policy key able to clear it. Only a `resolved` source that is not a registry tarball can run `prepare`; a bundled entry never does, and one with no `resolved` is npm's own registry fallback. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…til npm 12' (#2712) npm 12.0.0 (2026-07-08) runs a dependency script only when allowScripts says `true`, so blocking is already the default there; the guard is needed because this repo installs with npm 10 and 11. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…pts reports (#2712) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…l-clients-allow-scripts fix(install): strip npm_config_allow_scripts from the per-client installs
…-install-scripts chore(deps): deny esbuild/fsevents install scripts; guard unreviewed ones
npm audit --audit-level=high reported 0 vulnerabilities in the root and all four client installs, so no audit fixes precede the bump. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…-2-11-0 chore: bump version to 2.11.0 (#2716)
There was a problem hiding this comment.
🔵 Needs a closer look
This 176-file milestone release spans every client and still requires final maintainer validation of the ledger and completed CI checks.
0 open findings
What changed in this PR
Milestone merge promoting the complete v2.11.0 development tree to the release branch.
Changes:
- Delivers coordinated fixes across core, Web, CLI, TUI, launcher, and mcpdo.
- Expands protocol compatibility, OAuth safety, task handling, list counts, and UI resilience.
- Adds extensive tests, dependency updates, release documentation, and validation safeguards.
| File | Description |
|---|---|
scripts/run-engine-smokes.mjs |
Adds containerized Firefox fallback. |
docs/environment-variables.md |
Documents mcpdo proxy support. |
docs/cli-smoke-testing.md |
Clarifies CLI argument separation. |
core/react/useManagedTools.ts |
Exposes tool-list load state. |
core/react/useManagedResources.ts |
Exposes resource-list load state. |
core/react/useManagedPrompts.ts |
Exposes prompt-list load state. |
core/mcp/types.ts |
Adds client-specific timeout remedies. |
core/mcp/state/managedListState.ts |
Tracks committed list loads. |
core/mcp/remote/types.ts |
Defines relayed HTTP errors. |
core/mcp/remote/remoteClientTransport.ts |
Reconstructs SDK HTTP errors. |
core/mcp/remote/node/server.ts |
Relays structured HTTP failures. |
core/mcp/node/config.ts |
Rejects conflicting connection options. |
core/mcp/node/authChallengeFetch.ts |
Distinguishes denials from challenges. |
core/cli/handlers/skills-verify.ts |
Adds client-specific verification hints. |
core/cli/handlers/run-method.ts |
Supports hints and required tasks. |
core/cli/handlers/method-types.ts |
Documents required-task behavior. |
core/cli/handlers/connect-timeout.ts |
Defines CLI timeout guidance. |
core/auth/oidcDiscoveryCompat.ts |
Preserves synthesized metadata identity. |
core/auth/node/oauth-namespace-ledger.ts |
Reads historical secret namespaces. |
core/auth/challenge.ts |
Ignores bare HTTP 403 denials. |
clients/web/vite.config.ts |
Strengthens coverage and test isolation. |
clients/web/src/utils/toolUtils.ts |
Gates legacy task controls. |
clients/web/src/utils/toolUtils.test.ts |
Tests task-control gating. |
clients/web/src/utils/listCount.ts |
Formats complete and partial counts. |
clients/web/src/utils/listCount.test.ts |
Tests list-count formatting. |
clients/web/src/test/scrollAreaStoryAssertions.ts |
Adds overflow assertions. |
clients/web/src/test/narrowSidebarDecorator.tsx |
Adds narrow-sidebar harness. |
clients/web/src/test/integrationStorageSetup.ts |
Isolates integration OAuth storage. |
clients/web/src/test/integration/mcp/remote/remoteClientTransport-unit.test.ts |
Tests HTTP error reconstruction. |
clients/web/src/test/integration/mcp/inspectorClient.test.ts |
Tests custom timeout remedies. |
clients/web/src/test/integration/auth/node/storage.test.ts |
Guards destructive storage tests. |
clients/web/src/test/core/react/useManagedTools.test.tsx |
Tests tool load state. |
clients/web/src/test/core/react/useManagedResources.test.tsx |
Tests resource load state. |
clients/web/src/test/core/react/useManagedPrompts.test.tsx |
Tests prompt load state. |
clients/web/src/test/core/mcp/state/managedToolsState.test.ts |
Tests managed-list lifecycle. |
clients/web/src/test/core/mcp/skillsVerification.test.ts |
Tests verification remedies. |
clients/web/src/test/core/mcp/node/config.test.ts |
Tests option conflicts. |
clients/web/src/test/core/mcp/node/authChallengeFetch.test.ts |
Tests bare-403 handling. |
clients/web/src/test/core/auth/oauth-namespace-ledger.test.ts |
Tests namespace history. |
clients/web/src/test/core/auth/challenge.test.ts |
Tests challenge classification. |
clients/web/src/hooks/useServerCommands.tsx |
Updates modern task routing. |
clients/web/src/hooks/useServerCommands.test.tsx |
Updates pagination fixtures. |
clients/web/src/hooks/usePaginatedList.ts |
Exposes active-list load state. |
clients/web/src/hooks/usePaginatedList.test.tsx |
Tests paginated load state. |
clients/web/src/hooks/useInspectorStores.ts |
Wires managed load state. |
clients/web/src/components/views/InspectorView/types.ts |
Clarifies task-control semantics. |
clients/web/src/components/views/InspectorView/InspectorView.tsx |
Removes modern task-control prop. |
clients/web/src/components/views/InspectorView/InspectorView.test.tsx |
Updates counted headings. |
clients/web/src/components/screens/ToolsScreen/ToolsScreen.tsx |
Removes modern task toggle. |
clients/web/src/components/screens/SkillsScreen/SkillsScreen.tsx |
Refreshes viewed skill files. |
clients/web/src/components/screens/SkillsScreen/SkillsScreen.test.tsx |
Tests skill-file refreshes. |
clients/web/src/components/screens/ConsoleScreen/ConsoleScreen.stories.tsx |
Covers sidebar overflow. |
clients/web/src/components/groups/ToolDetailPanel/ToolDetailPanel.test.tsx |
Removes obsolete modern-task tests. |
clients/web/src/components/groups/ToolControls/ToolControls.tsx |
Displays tool counts. |
clients/web/src/components/groups/ToolControls/ToolControls.test.tsx |
Tests tool-count states. |
clients/web/src/components/groups/TaskListPanel/TaskListPanel.stories.tsx |
Covers long task content. |
clients/web/src/components/groups/TaskCard/TaskCard.tsx |
Wraps narrow task headers. |
clients/web/src/components/groups/SchemaForm/SchemaForm.stories.tsx |
Covers object arrays. |
clients/web/src/components/groups/PromptControls/PromptControls.tsx |
Displays prompt counts. |
clients/web/src/components/groups/PromptControls/PromptControls.test.tsx |
Tests prompt-count states. |
clients/web/src/components/groups/NetworkStreamPanel/NetworkStreamPanel.stories.tsx |
Strengthens overflow coverage. |
clients/web/src/components/groups/NetworkEntry/NetworkEntry.tsx |
Wraps compact network headers. |
clients/web/src/components/groups/LogStreamPanel/LogStreamPanel.stories.tsx |
Covers long log content. |
clients/web/src/components/groups/ConnectionInfoModal/ConnectionInfoModal.tsx |
Forwards capability counts. |
clients/web/src/components/groups/ConnectionInfoModal/ConnectionInfoModal.test.tsx |
Tests count forwarding. |
clients/web/src/components/groups/ConnectionInfoContent/ConnectionInfoContent.tsx |
Displays capability counts. |
clients/web/src/components/groups/ConnectionInfoContent/ConnectionInfoContent.test.tsx |
Tests capability counts. |
clients/web/src/components/elements/LogEntry/LogEntry.tsx |
Wraps compact log metadata. |
clients/web/src/components/elements/ListPaginationControls/ListPaginationControls.tsx |
Carries list load state. |
clients/web/src/components/elements/EmbeddableScrollArea/EmbeddableScrollArea.tsx |
Constrains embedded content width. |
clients/web/src/components/elements/EmbeddableScrollArea/EmbeddableScrollArea.test.tsx |
Tests width constraints. |
clients/web/src/components/elements/CapabilityItem/CapabilityItem.tsx |
Formats partial capability counts. |
clients/web/src/components/elements/CapabilityItem/CapabilityItem.test.tsx |
Tests partial counts. |
clients/web/src/components/elements/CapabilityItem/CapabilityItem.stories.tsx |
Documents partial counts. |
clients/web/src/App.tsx |
Wires counts and task gating. |
clients/web/src/App.test.tsx |
Updates managed-list fixtures. |
clients/web/server/web-server-config.ts |
Avoids token-bearing error details. |
clients/web/server/run-web.ts |
Adds web version output. |
clients/web/package.json |
Updates install-script policy. |
clients/tui/tui.tsx |
Adds TUI version output. |
clients/tui/src/utils/keybindings.ts |
Documents filter escape behavior. |
clients/tui/src/utils/clipboard.ts |
Cleans temporary copy files. |
clients/tui/src/hooks/useCopyKeys.ts |
Announces copy-file cleanup. |
clients/tui/src/components/ToolsTab.tsx |
Reports escape ownership. |
clients/tui/src/components/SkillsTab.tsx |
Adds TUI verification guidance. |
clients/tui/src/components/ResourcesTab.tsx |
Reports escape ownership. |
clients/tui/src/components/PromptsTab.tsx |
Reports escape ownership. |
clients/tui/src/components/ListFilterBar.tsx |
Documents Escape-to-clear. |
clients/tui/README.md |
Documents temporary-file lifetime. |
clients/tui/package.json |
Updates ink-form and script policy. |
clients/tui/__tests__/useCopyKeys.test.tsx |
Updates copy status assertion. |
clients/tui/__tests__/ToolsTab.test.tsx |
Tests filter guidance. |
clients/tui/__tests__/SkillsTab.test.tsx |
Tests TUI verification hints. |
clients/tui/__tests__/ListFilterBar.test.tsx |
Tests Escape guidance. |
clients/mcpdo/src/daemon/server.ts |
Supplies mcpdo verification hints. |
clients/mcpdo/src/daemon/connections.ts |
Adds proxy and timeout wiring. |
clients/mcpdo/src/connection/mcp.ts |
Clarifies modern task behavior. |
clients/mcpdo/src/connection/ema.ts |
Proxies EMA OAuth traffic. |
clients/mcpdo/src/connection/authorize.ts |
Proxies authorization traffic. |
clients/mcpdo/src/connection/auth-helper.ts |
Preserves fresh auth locks. |
clients/mcpdo/package.json |
Updates overrides and script policy. |
clients/mcpdo/package-lock.json |
Locks updated transitive versions. |
clients/mcpdo/__tests__/ema.test.ts |
Tests EMA proxy wiring. |
clients/mcpdo/__tests__/daemon-coverage.test.ts |
Tests timeout guidance. |
clients/mcpdo/__tests__/authorize.test.ts |
Tests proxy and timeout options. |
clients/launcher/src/index.ts |
Advertises version option. |
clients/launcher/README.md |
Documents version forwarding. |
clients/cli/src/handlers/emit-result.ts |
Honors quiet output mode. |
clients/cli/src/handlers/consume-outcome.ts |
Exports broken-pipe detection. |
clients/cli/src/completion.ts |
Handles completion-pipe closure. |
clients/cli/package.json |
Adds install-script policy. |
clients/cli/package-lock.json |
Aligns Node type dependencies. |
clients/cli/__tests__/tools.test.ts |
Tests required task tools. |
clients/cli/__tests__/skills-verify-cli.test.ts |
Tests CLI budget hints. |
clients/cli/__tests__/programmatic-ergonomics.test.ts |
Tests timeout remedy output. |
clients/cli/__tests__/error-handler.test.ts |
Updates timeout classification fixture. |
clients/cli/__tests__/emit-result.test.ts |
Tests quiet file output. |
clients/cli/__tests__/completion.test.ts |
Tests completion write errors. |
.github/workflows/main.yml |
Documents coverage-scope verification. |
.claude/skills/test-servers/SKILL.md |
Corrects helper path. |
.claude/skills/release/SKILL.md |
Expands release smoke procedure. |
Files not reviewed (4)
- clients/cli/package-lock.json: Generated file
- clients/mcpdo/package-lock.json: Generated file
- clients/tui/package-lock.json: Generated file
- clients/web/package-lock.json: Generated file
🧠 Review effort: Balanced
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
Member
Author
|
Copilot review loop closed: round 1 posted 0 findings, with no inline comments and no suppressed block. Its headline ("needs a closer look") asks only for maintainer validation of the ledger and for CI to finish, which is the approval this merge is waiting on anyway. No further rounds requested. |
5 tasks
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.
Closes #2718
Milestone merge of
v2/mainintomainfor the v2.11.0 minor release, which is step 2 of thereleaseskill. Step 1 was #2716 / PR #2717.This is a pure merge
The merged tree is byte-identical to
origin/v2/mainand reads 2.11.0. The milestone payload is complete: 46 issues closed, plus #2716. The seven unfinished automation chores (#2462, #2463, #2542, #2544, #2545, #2547, #2548) were moved to v2.12.0 before the bump.Verification
Ledger: https://claude.ai/artifact/XYJcbYMQtrufXjUtcsy63y — one row per closed milestone issue, with what was run and what was observed, for maintainer review.
npm run local:gateon this tree: exit 0. Every stage passed, including all three Firefox smokes (run natively on this macOS 15 host) and Storybook (536 tests, 123 files). The Firefox smokes also passed through the smoke:web:firefox cannot launch Playwright's Firefox on macOS 27 #2625 container route (INSPECTOR_FIREFOX_SMOKE=container,playwright:v1.64.0-noble).npm run pack:verify: OK — 27 files, 5.78 MB unpacked, withskills/mcpdopresent. It drove web, CLI, TUI and mcpdo from the installed tarball.npm audit --audit-level=high: 0 vulnerabilities in all five installs (Release 2.11.0 step 1: bump version to 2.11.0 on v2/main #2716).--webprod server), the CLI and launcher, mcpdo, the TUI (in a real pty), and the repo tooling, where a probe made each guard fire. Most rows show the published 2.10.1 as the before.Findings
None blocks the release, and there are no regressions.
🤖 Generated with Claude Code