An independent mutation sweep applied 53 mutations; after the final fix wave, 17 still survive. The shipped code is correct in every case — these are places where a future regression would ship unnoticed because no test pins the behaviour.
Ranked by what could go wrong:
tools.ts — submit default false→true survives. browser_type would press Enter on every fill: unrequested form submissions, on the surface a prompt-injected page reaches.
cli.ts — routing close to operations.read survives. bb browser close would report success and never close, so tabs accumulate — the exact failure the reaper exists for.
cli.ts — inverting !rest.includes("--full") survives. snapshot and snapshot --full would swap outputs.
operations.ts — never removing the screenshot temp file survives. Every screenshot would leave a PNG of page content in $TMPDIR forever.
stream.ts — dropping stopped from the onFrame guard survives. A departed viewer keeps encoding into a dead controller.
reaper.ts — dropping the post-sleep if (signal.aborted) return survives. One extra sweep runs against a browser mid-teardown on shutdown.
panel-rpc.ts — .strict() is tested on view only; dropping it from input and navigate survives. That is the only guarantee the "no key smuggling" comment actually claims.
Lower consequence: cli arity and usage checks, interactive default, click .min(1), !response.ok, httpOriginOf always http, idle boundary <→<=, unboundSince.delete (self-heals next sweep).
Where the gaps cluster: cli.ts (5 tests for 8 subcommands — read, snapshot, eval, close and type-without---submit are never exercised) and browser-endpoint.ts.
Also open, from the final review:
screencast.test.ts frame-delivery assertions still flake ~2 in 21 runs under load; tick(20) budgets a real loopback round trip. Fix is a signal from the fake server, not a bigger budget.
- Three documented functional gaps in
docs/design.md: the reaper never shuts the browser down (Chromium stays resident after the last tab is reaped), no last-URL restore after a headed relaunch, and the headed exemption is not self-clearing.
session-key.ts reads .childOrigin off whatever bb.sdk.threads.get returns; a host answering null for an already-deleted thread throws out of the resolver.
🤖 Generated with Claude Code
An independent mutation sweep applied 53 mutations; after the final fix wave, 17 still survive. The shipped code is correct in every case — these are places where a future regression would ship unnoticed because no test pins the behaviour.
Ranked by what could go wrong:
tools.ts—submitdefaultfalse→truesurvives.browser_typewould press Enter on every fill: unrequested form submissions, on the surface a prompt-injected page reaches.cli.ts— routingclosetooperations.readsurvives.bb browser closewould report success and never close, so tabs accumulate — the exact failure the reaper exists for.cli.ts— inverting!rest.includes("--full")survives.snapshotandsnapshot --fullwould swap outputs.operations.ts— never removing the screenshot temp file survives. Every screenshot would leave a PNG of page content in$TMPDIRforever.stream.ts— droppingstoppedfrom the onFrame guard survives. A departed viewer keeps encoding into a dead controller.reaper.ts— dropping the post-sleepif (signal.aborted) returnsurvives. One extra sweep runs against a browser mid-teardown on shutdown.panel-rpc.ts—.strict()is tested onviewonly; dropping it frominputandnavigatesurvives. That is the only guarantee the "no key smuggling" comment actually claims.Lower consequence: cli arity and usage checks,
interactivedefault, click.min(1),!response.ok,httpOriginOfalways http, idle boundary<→<=,unboundSince.delete(self-heals next sweep).Where the gaps cluster:
cli.ts(5 tests for 8 subcommands —read,snapshot,eval,closeandtype-without---submitare never exercised) andbrowser-endpoint.ts.Also open, from the final review:
screencast.test.tsframe-delivery assertions still flake ~2 in 21 runs under load;tick(20)budgets a real loopback round trip. Fix is a signal from the fake server, not a bigger budget.docs/design.md: the reaper never shuts the browser down (Chromium stays resident after the last tab is reaped), no last-URL restore after a headed relaunch, and the headed exemption is not self-clearing.session-key.tsreads.childOriginoff whateverbb.sdk.threads.getreturns; a host answeringnullfor an already-deleted thread throws out of the resolver.🤖 Generated with Claude Code