Issue 18799 — evidence capture, 2026-10-21 UTC BASE: 70e5e384dab96a1d1e4a253ee5a9415ed5d8ce30 REQUESTED INITIAL HEAD: 47c49b60d9271020bf21323767045d788b9955e6 VERIFIED UPDATED HEAD: c64f3d8d473f5e4da1b7cc6848eda69d06a4b93d The lead advanced HEAD during capture to fix the decode return type. Final green and runtime runs use c64f3d8d47. No claim that 47c49b60d9 typechecks. ENVIRONMENT: Linux 6.1.102 x86_64 GNU/Linux; Node v24.21.0; V8 13.6.233.17-node.53; effect 4.0.5; vite-plus 1.3.0; vite 8.3.4; vitest 5.0.5. Checkout: /home/ubuntu/wt/issue-18799. Installed dependencies reused; no installation, browser or application server started. All inputs synthetic. No credentials, real conversation data, or environment variable dumps included. ISOLATED RED SETUP (baseline watched checkout was not modified) mkdir -p /tmp/18799-evidence/red-checkout git archive 70e5e384da packages/effect-acp | tar -x -C /tmp/18799-evidence/red-checkout git show 3b501089f7:packages/effect-acp/src/protocol.test.ts > /tmp/18799-evidence/red-source.test.ts cp /tmp/18799-evidence/red-source.test.ts /tmp/18799-evidence/red-checkout/packages/effect-acp/src/protocol.test.ts ln -s /home/ubuntu/wt/issue-18799/node_modules /tmp/18799-evidence/red-checkout/node_modules ln -s /home/ubuntu/wt/issue-18799/packages/effect-acp/node_modules /tmp/18799-evidence/red-checkout/packages/effect-acp/node_modules cp /home/ubuntu/wt/issue-18799/tsconfig.base.json /tmp/18799-evidence/red-checkout/tsconfig.base.json Temporary package.json: {"type":"module"} Temporary vite.config.ts: import { defineConfig } from "vite-plus"; export default defineConfig({test:{environment:"node",testTimeout:60000}}); Test source SHA: 3b501089f74715eca77086bdc613e5b9a168c1e9. Byte-identical to final head protocol.test.ts. Test file SHA256: a266c288354a8e021fe4ea7b15e8c355e1fb1456255b34b568cd84ac9f4598e1 Initial isolated run failed before collection because tsconfig.base.json was absent; fixed setup above, then reproduced the assertion below. COMMAND (cwd /tmp/18799-evidence/red-checkout): node_modules/.bin/vp test run --config vite.config.ts packages/effect-acp/src/protocol.test.ts -t 'bounds the bytes' EXIT: 1 (expected regression assertion) RUN v5.0.5 /tmp/18799-evidence/red-checkout stdout | packages/effect-acp/src/protocol.test.ts > effect-acp protocol > bounds the bytes held for unread notifications without dropping live ones [22:55:12.688] ERROR (#10): Error [AssertionError]: 32 unread notifications held: expected 33555127 to be at most 16777216 at /tmp/18799-evidence/red-checkout/packages/effect-acp/src/protocol.test.ts:856:14 { actual: 33555127, expected: 16777216, showDiff: true, operator: 'strictEqual', [cause]: undefined } ❯ packages/effect-acp/src/protocol.test.ts (22 tests | 1 failed | 21 skipped) 383ms ❯ effect-acp protocol (22) × bounds the bytes held for unread notifications without dropping live ones 371ms ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ FAIL packages/effect-acp/src/protocol.test.ts > effect-acp protocol > bounds the bytes held for unread notifications without dropping live ones AssertionError: 32 unread notifications held: expected 33555127 to be at most 16777216 - Expected + Received - 16777216 + 33555127 ❯ packages/effect-acp/src/protocol.test.ts:856:14 854| 0, 855| ); 856| assert.isAtMost(backlogBytes, 16 * MIB, `${backlog.length} unrea… | ^ 857| 858| yield* send(33, "live"); ❯ ~effect/Effect/successCont ../../../home/ubuntu/wt/issue-18799/node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:1422:28 ❯ ~effect/Effect/evaluate ../../../home/ubuntu/wt/issue-18799/node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/core.ts:585:30 ❯ ~effect/Effect/evaluate ../../../home/ubuntu/wt/issue-18799/node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/Queue.ts:2548:86 ❯ FiberImpl.runLoop ../../../home/ubuntu/wt/issue-18799/node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:654:41 ❯ FiberImpl.evaluate ../../../home/ubuntu/wt/issue-18799/node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:595:23 ❯ FiberImpl.evaluate ../../../home/ubuntu/wt/issue-18799/node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:589:27 ❯ Object.resume ../../../home/ubuntu/wt/issue-18799/node_modules/.pnpm/effect@4.0.5/node_modules/effect/src/internal/effect.ts:1159:17 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed (1) Tests 1 failed | 21 skipped (22) Start at 22:55:11 Duration 1.64s (transform 38%, import 35%, tests 26%) COMMAND (cwd /home/ubuntu/wt/issue-18799, HEAD c64f3d8d47): node_modules/.bin/vp test run packages/effect-acp/src/protocol.test.ts packages/effect-acp/src/client.test.ts packages/effect-acp/src/agent.test.ts EXIT: 0 note: You are running `vp test` as a Vite+ built-in command. If you meant to run the test npm script, use `vpr test` instead. RUN v5.0.5 /home/ubuntu/wt/issue-18799 Test Files 3 passed (3) Tests 54 passed (54) Start at 22:56:24 Duration 25.25s (tests 41%, transform 38%, setup 16%, import 6%) COMMAND (cwd /home/ubuntu/wt/issue-18799/packages/effect-acp, HEAD c64f3d8d47): ../../node_modules/.bin/tsc-rs --noEmit EXIT: 0 (suggestions only, actual output follows) src/agent.test.ts(40,10): suggestion TS377036: This `Schema.Struct` includes a `_tag` field. `Schema.TaggedStruct` is the tagged-struct form for this pattern and makes the tag optional in the constructor. effect(schemaStructWithTag) src/agent.test.ts(42,25): suggestion TS377036: This `Schema.Struct` includes a `_tag` field. `Schema.TaggedStruct` is the tagged-struct form for this pattern and makes the tag optional in the constructor. effect(schemaStructWithTag) src/agent.ts(422,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleInitialize")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(427,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleAuthenticate")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(432,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleLogout")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(437,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleCreateSession")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(442,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleLoadSession")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(447,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleListSessions")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(452,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleForkSession")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(457,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleResumeSession")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(462,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleCloseSession")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(467,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleDeleteSession")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(472,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleListProviders")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(477,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleSetProvider")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(482,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleDisableProvider")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(487,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleSetSessionConfigOption")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(492,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handlePrompt")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(497,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleCancel")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(502,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleUnknownExtRequest")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(507,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleUnknownExtNotification")((handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(512,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleExtRequest")((method, payload, handler) => { ... })`. effect(effectFnOpportunity) src/agent.ts(517,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpAgent.handleExtNotification")((method, payload, handler) => { ... })`. effect(effectFnOpportunity) src/client.test.ts(56,10): suggestion TS377036: This `Schema.Struct` includes a `_tag` field. `Schema.TaggedStruct` is the tagged-struct form for this pattern and makes the tag optional in the constructor. effect(schemaStructWithTag) src/client.test.ts(58,25): suggestion TS377036: This `Schema.Struct` includes a `_tag` field. `Schema.TaggedStruct` is the tagged-struct form for this pattern and makes the tag optional in the constructor. effect(schemaStructWithTag) src/client.test.ts(1071,18): suggestion TS377113: `Effect.forEach` expresses this effectful array mapping more directly than `Effect.all` over `Array#map`. effect(allOfMapToForEach) src/client.ts(1244,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleRequestPermission")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1249,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleElicitation")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1254,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleMcpConnect")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1258,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleMcpMessage")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1262,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleMcpDisconnect")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1266,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleMcpNotification")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1275,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleReadTextFile")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1279,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleWriteTextFile")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1283,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleCreateTerminal")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1287,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleTerminalOutput")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1291,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleTerminalWaitForExit")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1295,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleTerminalKill")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1299,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleTerminalRelease")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1303,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleSessionUpdate")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1308,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleElicitationComplete")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1313,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleUnknownExtRequest")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1318,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleUnknownExtNotification")((handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1323,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleExtRequest")((method, payload, handler) => { ... })`. effect(effectFnOpportunity) src/client.ts(1328,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("AcpClient.handleExtNotification")((method, payload, handler) => { ... })`. effect(effectFnOpportunity) src/protocol.test.ts(500,38): suggestion TS377112: This input is already assignable to the schema's Encoded type. Use `decodeEffect` to preserve compile-time type checking instead of discarding the input type through `decodeUnknownEffect`. effect(preferTypedSchemaDecoder) src/protocol.ts(903,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("RpcClient.Protocol.run")((_clientId, f) => { ... })`. effect(effectFnOpportunity) src/protocol.ts(908,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("RpcClient.Protocol.send")((_clientId, request) => { ... })`. effect(effectFnOpportunity) src/protocol.ts(926,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("RpcServer.Protocol.run")((f) => { ... })`. effect(effectFnOpportunity) src/protocol.ts(932,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("RpcServer.Protocol.send")((_clientId, response) => { ... })`. effect(effectFnOpportunity) src/protocol.ts(941,5): suggestion TS377047: This expression can be rewritten in the reusable function form `Effect.fn("RpcServer.Protocol.end")((_clientId) => { ... })`. effect(effectFnOpportunity) INTERPRETATION Red confirms 32 unread notifications retain 33,555,127 reserialized params characters against a 16,777,216 threshold. The existing test says "bytes", but counts JavaScript string length; the implementation budgets complete decoded wire-line UTF-16 code units, excluding newline. It is not an exact heap-byte cap. Green: three scoped files, 54 tests passed. The same regression source ran on base and final head. No new committed tests or implementation edits made by evidence capture. FRICTION The lead changed HEAD during capture; final evidence pins c64f3d8d47. The first isolated red attempt needed the root tsconfig. No repo-wide checks were run. No browser/server or visual captures; visual matrix is empty. No PR created or forge write performed.