@@ -20,26 +20,29 @@ published section (it happened to #170).
2020 v0.16.0. They now wait for the write, and every event logged before the relay starts
2121 joins the queue #228 added for the relay's own. The ` PINS-READ-ERROR ` exit waits
2222 too: it logs nothing itself, but it could exit ahead of an ` orig-hash-mismatch ` warn
23- queued just before it (lost in 1 of 20 runs on 0.42.2). ` SECRET-MISSING ` has the
24- same shape and gets the same wait. (#229 )
23+ queued just before it (a race the review saw lose the event in 1 of 20 runs on
24+ 0.42.2). ` SECRET-MISSING ` has the same shape and gets the same wait. (#229 )
2525
2626- ** A ` tools/call ` whose argument was nested deep in arrays stopped
2727 ` mcpm guard inspect ` mid-run, and the relay crashed or blocked on it.**
2828 ` stringArgLeaves ` (` tool-call-args-walk.ts ` ), the argument walk behind the
2929 shell-metacharacter and query-control detectors (v0.31.0) and the CLI-flag
3030 detector (v0.32.0), recursed once per array level with no bound: its depth cap
3131 counts objects only, so that batch-style arguments stay covered (TODOS #50 ).
32- Under Node 24.20.0 it overflowed at 2,610 array levels, where ` JSON.stringify `
33- holds to ~ 6,200. ` guard inspect --json ` printed the verdicts before that frame,
32+ Under Node 24.20.0 it overflowed at ~ 2,400–2,600 array levels (2,610 for the
33+ reproduction with a string at the bottom), where the relay's ` JSON.stringify `
34+ holds to ~ 6,000. ` guard inspect --json ` printed the verdicts before that frame,
3435 then ` Maximum call stack size exceeded ` , exit 1, and nothing after it; human
3536 output printed no verdicts at all. On the relay it is the MCP client's own
3637 request: v0.31.0 through v0.42.0 crashed the guard (reproduced on 0.42.0 at
3738 4,000 levels: exit 1, no responses), and v0.42.1–v0.42.2 blocked it as
3839 ` inspect-rejected ` through #226 's try/catch in ` relay.ts ` , refusing calls that
3940 would forward fine. The walk is now iterative, one cursor per container, and
4041 yields what the recursive walk did (a property test runs the old walk as the
41- oracle); 4,000 levels now forwards, and past ~ 6,200 the relay blocks it as
42- ` forward-serialize-failed ` , as in v0.42.2. ` guard inspect ` also now reports a
42+ oracle); a 4,000-level call is now inspected like any other frame and forwards
43+ when clean, and past ~ 6,000 levels (5,968 on Node 24.20.0) the relay blocks it
44+ as ` forward-serialize-failed ` , v0.42.2's guard for frames too deep to
45+ re-serialize. ` guard inspect ` also now reports a
4346 frame whose inspection throws as ` {"action":"error"} ` , counted like a parse
4447 error, and carries on. Not fixed here: the relay's drift hash (` hashLeaf ` in
4548 ` pins.ts ` ) recurses too, so a ` tools/list ` input schema or ` initialize `
0 commit comments