Repository navigation
Conversation
…n Security CI (grpc-js, MCP SDK OAuth confused-deputy, proxy-addr) main's .github/workflows/security.yml npm-audit + audit-deps-aggregate jobs have been failing on every push for 5+ commits: @grpc/grpc-js (high, GHSA-m9gg-hp2v-232j), @modelcontextprotocol/sdk (high, GHSA-6qxp-vccf-f47h, MCP OAuth confused-deputy), and proxy-addr (critical, GHSA-jqcg-44mw-7w3h, IP spoofing), reachable via packages/agntcy and packages/arc-agi-3-chatgpt. The sdk was exact-pinned (no caret), which blocked npm audit fix's automatic non-major remediation path for that one package. Widened to ^1.32.1 and let grpc-js/proxy-addr resolve within their already-permissive parent ranges via npm audit fix (no --force). npm audit --omit=dev --audit-level=high now passes; harness audit agrees. Added 2 regression tests asserting the resolved sdk/proxy-addr versions stay at/above each GHSA's patched floor, confirmed to fail non-vacuously against the pre-fix dependency tree. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Puqy2g9eQuTWpeHrhan75M
|
CI: That job fails at the "Install wasm-pack (Windows)" step. This PR's base commit is Since I have direct same-commit evidence rather than a flake signature, I'm not spending the one re-run on it — a re-run wouldn't change a reproducible base-branch failure. Every other CI job on this PR (including Generated by Claude Code |
main's npm-audit CI check is failing independently of this PR's own diff (3 pre-existing production advisories: @grpc/grpc-js high, @modelcontextprotocol/sdk high/GHSA-6qxp-vccf-f47h, proxy-addr critical/GHSA-jqcg-44mw-7w3h, all reachable via packages/arc-agi-3-chatgpt). A fix already exists on the unmerged dream/2026-10-08-security-adversarial branch (#381) — porting the same change here so this PR's CI goes green without waiting on that PR to merge first. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Pv2ERiZrcJHuX6sasWcwX

Closes #380.
Hypothesis
Given
main's existing.github/workflows/security.ymlnpm-audit+audit-deps-aggregategate (already fail-on-high+, already wired, already running on every push), when@modelcontextprotocol/sdk's exact pin inpackages/arc-agi-3-chatgpt/package.jsonis widened to a caret range at the already-available non-major patched version, and@grpc/grpc-js/proxy-addrare allowed to resolve within their existing parent ranges, thennpm audit --omit=dev --audit-level=highshould report 0 advisories and both previously-failing CI jobs should pass on this commit — subject to: zero behavioral change to any passing test, zero new direct dependency, zero other importer of the touched packages regressed, and a regression test that fails pre-fix/passes post-fix for each of the two directly-reachable advisories.Candidate
Two-line functional change, one conceptual fix:
packages/arc-agi-3-chatgpt/package.json:"@modelcontextprotocol/sdk": "1.26.0"(exact pin) →"^1.32.1"(caret, non-major pernpm audit fix's ownfixAvailablemetadata).package-lock.jsonregenerated vianpm install+npm audit fix(no--force), which also moved@grpc/grpc-js1.14.4→1.14.5 (viapackages/agntcy'sagntcy-dir/spiffe) andproxy-addr2.0.7→2.0.8 (via the sdk's ownexpressdependency) within their already-permissive parent ranges — no otherpackage.jsontouched for those two.packages/arc-agi-3-chatgpt/__tests__/security.test.ts: newdependency advisory floorsdescribe block (2 tests) asserting the resolved sdk/proxy-addr versions stay at/above each GHSA's patched floor.Evaluation Receipt
evaluated: accepted.git checkoutof the pre-fix files +npm install):npm audit --omit=dev --audit-level=high→ FAIL, exactly 3 advisories (@grpc/grpc-jshigh,@modelcontextprotocol/sdkhigh,proxy-addrcritical); the 2 new tests fail non-vacuously with the exact predictedexpected true, got false.harness auditagrees (0 at high+; 6 remaining devDependency-only advisories, all behind avitest@5.0.3major bump, disclosed and correctly left alone).packages/arc-agi-3-chatgptfull suite: 67→69/69 (+2, 0 regressions),tsc --noEmitclean.packages/agntcyfull suite: 82 passed / 2 pre-existing skips (0 regressions) after the transitive grpc-js bump.packages/create-agent-harnessaudit-cmd.test.ts: 6/6 unaffected (file untouched).npm run build: clean (JS-only — wasm/NAPI unavailable in this sandbox,wasm-packnot installed; recorded degradation, not a stop condition).Baseline Comparison
npm audit --omit=dev --audit-level=high.github/workflows/security.ymlnpm-auditjob.github/workflows/security.ymlaudit-deps-aggregatejob@modelcontextprotocol/sdkresolved version@grpc/grpc-jsresolved versionproxy-addrresolved versionarc-agi-3-chatgptsuiteagntcysuiteDarwin Lineage
DARWIN=not_applicable— a dependency-version pin is not one of the seven ADR-071-approved mutation surfaces (routing weight, topology, prompt/memory policy, tool selection, tier policy, context policy, genome parameter). Same reasoning as #243/#373's precedent for this bug class.Flywheel Evidence
FLYWHEEL=not_applicable— a repo-dependency-hygiene fix, not a harness-runtime promotion candidate. Durable evidence is this PR + issue #380 +docs/dream-cycle/2026-10-08-gist.md+ the ledger row.Reward Hack Check
No benchmark/evaluator exists for this candidate class to game; no test weakened (both new tests are net-new, nothing pre-existing touched); no gold data to leak. The new regression-test helper (
resolvedVersion/atLeastinsecurity.test.ts) was independently pressure-tested by the adversarial critic below for a silent-pass-on-exception failure mode — none found (it throws loudly on resolution failure, andatLeastfails safe on a malformed version).Security Review
This PR is tonight's security review (DEEP=security-adversarial, SCAN=sbom,policy). Concretely: an MCP OAuth confused-deputy credential-exfiltration bug (GHSA-6qxp-vccf-f47h) and a critical IP-spoofing bug via trust-proxy mishandling (GHSA-jqcg-44mw-7w3h) were live in
main's production dependency tree, with a CI gate the repo already built for exactly this purpose sitting red and unactioned. Full 2025-2026 sourced research (OWASP Agentic Top 10 ASI04, the MCP-OAuth bug class recurring 3x industry-wide in 2026, the Nx supply-chain compromise, Cursor MCPoison/CurXecute, CrewAI's fail-open Docker fallback) in the gist. Scan (sbom): confirmed nodependabot.yml/renovate.jsonexists — disclosed as a follow-up, not fixed tonight. Scan (policy): no new ADR-022-relevant finding; its default-deny model is unaffected by this change.Regression Analysis
0 regressions:
arc-agi-3-chatgpt69/69,agntcy82/84 (2 pre-existing skips),tscclean, full monorepo build clean. Blast radius:packages/arc-agi-3-chatgptis the onlypackage.jsonin the repo depending on@modelcontextprotocol/sdk; zero other importers of either touched package (confirmed by direct grep, independently re-confirmed by the critic).ADR
None filed — a dependency-version correctness fix, not an architectural decision (matches #243's precedent: no ADR for a CLI/dependency-hygiene bug fix). No existing ADR covers dependency/supply-chain vulnerability remediation policy (checked
docs/adrs/INDEX.md); that gap itself is disclosed as a recommended follow-up in the gist, not filed as its own ADR tonight.Adversarial Critique
Independent fresh-subagent critic, cold-read, own reproduction: ran
npm audit --omit=dev --audit-level=high --jsonon the patched tree (clean), thengit stash -u+npm installto independently revert to the pre-fix dependency tree and confirmed the exact same 3 advisories reappear, thengit stash popto restore the patched state. Verified^1.32.1is consistent with this repo's own convention (caret ranges are the norm for third-party deps; exact pins are reserved for internal@metaharness/*siblings — the prior exact pin was the outlier). Read the new test block in full and tried to break it (an exception path, a false-positive match) — found none; it fails safe and loudly. Confirmed blast radius independently (zero other importers). Ran both packages' full suites independently and got matching pass counts. Verdict: ACCEPT, no caveats.Research Gist
docs/dream-cycle/2026-10-08-gist.md—GIST=LOCAL(no gist-creation tool in this session's toolset, same as every Dream Cycle night since 2026-09-09's #299).Issue
#380
Witness
Merge Policy
Human review required. Do not self-merge. Do not autonomously promote Flywheel state.
Recommendation: ACCEPT — small (2 functional lines + a lockfile regen + 2 new tests), independently critiqued with zero caveats, non-vacuously proven both ways, zero regressions, zero downstream blast radius, and it closes a real red CI gate on
mainbehind which sat a real, currently-unpatched CVE class (MCP OAuth confused-deputy). Separately: a 10-PR Dream Cycle backlog has formed since 2026-09-27 (#360 through #379), oldest 11 days old, not yet past the 14-day STALE threshold — noted once per STEP 1.1's duplicate-rejection precedent rather than escalated.Mid-session housekeeping, disclosed for transparency: this container's local
mainref had gone stale (8 commits behindorigin/main, all docs-only README/visual-walkthrough commits, zero file overlap with this candidate) from state left over by a prior session. Corrected viagit stash+ fast-forward merge +git stash popbefore branching, so this PR is built on and targets the true currentmain— verified by re-running the full evaluation after the correction.🤖 Generated with Claude Code
https://claude.ai/code/session_01Puqy2g9eQuTWpeHrhan75M
Generated by Claude Code