Repository navigation
Wave 1 rollup: integrated 1579-wave-1 branch + integration verification #1600
Copy link
Copy link
Closed
Description
Wave 1 rollup — integration branch 1579-wave-1
This issue is the rollup / integration point for Wave 1 of the #1579 decomposition. Rather than merging each Wave-1 PR individually into v2/main, they are integrated onto a single branch 1579-wave-1 (base: v2/main), verified together, and reviewed as a unit. v2/main is NOT touched until the rollup is approved.
What's on 1579-wave-1
Original Wave 1 (10):
- core: add AppInfo + extractAppInfo() to core/mcp/apps.ts #1556 core
AppInfo/extractAppInfo(PR feat(core): add AppInfo + extractAppInfo() to core/mcp/apps.ts #1584) - test-servers: mcp_app_demo preset + _meta support on tool/resource definitions #1557 test-servers
mcp_app_demo+_meta(PR feat(test-servers): mcp_app_demo preset + _meta on tool/resource defs #1587) - web: sandbox CSP builder library (lib/sandbox-csp.ts) #1558 web sandbox CSP builder (PR feat(web): add sandbox CSP builder library (closes #1558) #1588)
- web: extract hostContext utilities for the Apps host (AppRenderer/hostContext.ts) #1559 web hostContext utilities (PR feat(web): extract hostContext utilities for the Apps host #1591)
- web: downloadFile.ts enhancements (downloadBlob, fileNameFromUri, isHttpUrl) #1560 web
downloadFileenhancements (PR feat(web): downloadFile.ts enhancements (downloadBlob, fileNameFromUri, isHttpUrl) #1586) - core: redact sensitive headers in the fetch log #1561 core redact fetch-log headers (PR feat(core): redact sensitive headers in the fetch log #1585)
- auth hardening: generateOAuthState requires WebCrypto; OAuth callback rejects unparseable state #1562 auth
generateOAuthState+ callback state reject (PR auth hardening: generateOAuthState requires WebCrypto; OAuth callback rejects unparseable state #1589) - core: honor HTTPS_PROXY/HTTP_PROXY/NO_PROXY in the Node transport #1563 core
HTTPS_PROXY/HTTP_PROXY/NO_PROXY(PR feat(core): honor HTTPS_PROXY/HTTP_PROXY/NO_PROXY in the Node transport #1590) - cli: exit-code map + structured JSON error envelopes #1564 cli exit-code map + JSON error envelopes (PR feat(cli): exit-code map + structured JSON error envelopes #1583)
- Web: migrate auth store to shared /store API (RemoteOAuthStorage parity with TUI/CLI) #1548 web
RemoteOAuthStorageparity + async hydration (PR Web: migrate auth store to shared /store API (RemoteOAuthStorage parity with TUI/CLI) #1592)
Wave 1 follow-ups (surfaced during review/smoke):
- test-stability: eliminate timeout flakiness in the web test suite (zero-flake requirement) #1596 test-stability: eliminate web-suite timeout flakiness (PR test(web): eliminate timeout flakiness in the web test suite #1597)
- core: redact sensitive fields in fetch-log request/response bodies + URL query strings #1593 core: redact fetch-log bodies + URL query strings (PR feat(core): redact sensitive fields in fetch-log bodies + URL query strings #1598)
- test-infra: gate clients/web/src/lib/** under the vitest coverage include globs #1594 test-infra: gate
clients/web/src/lib/**under coverage (PR test(web): gate src/lib/** under the vitest coverage include globs #1599)
Verification posted here
Each PR above already went through: exhaustive @claude review to clean + an individual smoke-test/AGENTS.md audit on its own issue. This rollup issue additionally receives the integrated verification run against 1579-wave-1:
- root
validate(all clients) + webtest:integration(e2e) on the merged branch; - every individual issue's smoke test replayed against
1579-wave-1, proving the features work together.
Refs: tracking #1579.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
v2Issues and PRs for v2Issues and PRs for v2
Activity
cliffhall commentedon Jul 2, 2026
Integration verification —
1579-wave-1Final finalization of the Wave-1 rollup: the last two PRs are merged into
1579-wave-1, the integrated branch was re-validated, and every individual Wave-1 issue's smoke test was replayed against the merged checkout.v2/mainwas not touched.Merge confirmation
Both remaining PRs merged cleanly (
--no-ff, disjoint file sets, zero conflicts, no conflict markers):merge: #1598 redact bodies+URL query (#1593)src/lib/**under the coverage include globs (issue test-infra: gate clients/web/src/lib/** under the vitest coverage include globs #1594) —merge: #1599 gate src/lib coverage (#1594)Pushed to
origin/1579-wave-1.origin/v2/mainverified unchanged at066676a2before and after.git diff origin/v2/main HEAD --stat→ 66 files changed, 4370 insertions(+), 451 deletions(-)validate / e2e / coverage on the integrated branch
npm run validate(root)clients/webnpm run test:integrationclients/webnpm run test:coveragefetchTracking.tschanges and #1599's broadenedsrc/lib/**includePer-issue smoke-replay
Every Wave-1 issue's custom smoke script was extracted from its audit comment's
<details>block and re-run against this integrated checkout (imports adapted to resolve; test-servers + CLI built where required).extractAppInfo()— MCP-App tool/resource_metamerge + URI normalization + throw on non-ui://mcp_app_demopreset — real MCP client over stdio,_metaon tools/list + resources/read + tools/callsandbox-csp— CSP source allow-list, policy build, HTML wrap, attr escaping, breakout rejectionhostContext— host-context snapshot (DOM path) + SSR/non-DOM guarddownloadFile—fileNameFromUri/isHttpUrlpure helpersredactSensitiveHeaders+ fetch-tracker entry path (#1585)generateOAuthState/parseOAuthStatehardeningcore/auth/utils.tssource confirmed still matchingtransport.ts—readProxyEnvprecedence +withProxyDispatcherlazy singleton injectionEnvHttpProxyAgent)RemoteOAuthStorageround-trip + pre-hydration-clear no-clobber guardsrc/libtest:coverage(broadened include, gate green)No scripts were skipped. All 11 runnable smoke scripts were extracted and executed green; the three special cases are covered/N-A as noted.
Verdict
✅ PASS — validate, e2e integration, and the ≥90 per-file coverage gate are all green on the integrated
1579-wave-1, and every replayed per-issue smoke test passed. Notably #1561 (headers), #1593 (bodies + URL query), and #1548 (remote OAuth storage) — the changes most likely to interact — all pass together, and the coverage gate holds with both #1598'sfetchTracking.tsgrowth and #1599's broadenedsrc/libinclude.Replay harness notes
gh api repos/modelcontextprotocol/inspector/issues/<N>/commentsfiltering on theSmoke test & AGENTS.md auditcomment, then the fenced block inside each<details>was extracted.tsxbinary:clients/tui/node_modules/.bin/tsx. Node runtime: v25.9.0 (native TS type-stripping).core/...,clients/web/src/lib/...) rewritten to./-prefixed paths and run from repo root.../../core/...scripts (core: add AppInfo + extractAppInfo() to core/mcp/apps.ts #1556, core: redact sensitive headers in the fetch log #1561) placed inclients/web/and run with tsx so../../reaches repocore/and the SDK resolves fromclients/web/node_modules.<repo>placeholder in core: honor HTTPS_PROXY/HTTP_PROXY/NO_PROXY in the Node transport #1563 substituted with the absolute repo path.process.argv[2]= repo root for test-servers: mcp_app_demo preset + _meta support on tool/resource definitions #1557 and cli: exit-code map + structured JSON error envelopes #1564.test-servers/build(stdio server for test-servers: mcp_app_demo preset + _meta support on tool/resource definitions #1557/Web: migrate auth store to shared /store API (RemoteOAuthStorage parity with TUI/CLI) #1548/cli: exit-code map + structured JSON error envelopes #1564) andclients/cli/build(for cli: exit-code map + structured JSON error envelopes #1564).npx vitest run --project <unit|integration> <path>; both removed afterward.cliffhall commentedon Jul 2, 2026
➕ Folded into the rollup after the fact: #1550 (PR #1603) — ci: enforce the ≥90% per-file coverage gate in CI. Now merged into
1579-wave-1. Reviewed to clean (@claude LGTM) + smoke-audited (gate proven load-bearing: an injected coverage drop makesnpm run coverageexit 1; verified green CI run). This adds the.github/workflows/main.ymlcoverage step + AGENTS.md flips to the rollup — so when this rollup lands inv2/main, CI will fail any PR that drops a file below 90 on any of the four dimensions. (No runtime code; the #1600 integration verification is unaffected.)cliffhall commentedon Jul 2, 2026
✂️ Update — CONTRIBUTORS docs pulled out of this rollup. #1517/#1537 (and its follow-up #1595) are unrelated to the #1510 Wave-1 decomposition, so they were removed from
1579-wave-1and now land on their own standalone PR #1604 →v2/main(clean history). The rollup diff is now 64 files, +4263/−465 (down from 66; onlyCONTRIBUTORS.md+.github/pull_request_template.mdleft, and the AGENTS.md## Contributingsection removed — coverage-gate edits retained). Integration verification is unaffected (docs-only removal). New rollup tip859911d5.Merge pull request #1601 from modelcontextprotocol/1579-wave-1
cliffhall commentedon Jul 9, 2026
Closed via merge of #1601 into v2/main (auto-close doesn't fire on non-default base).