refactor(runtime)!: enforce durable SDK protocol v3 boundaries - #112
Conversation
7bd412a to
443c669
Compare
443c669 to
84ccdd9
Compare
84ccdd9 to
a152882
Compare
c73abd4 to
19bbfcf
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 96 out of 368 changed files in this pull request and generated 1 comment.
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
src/protocol/events/runtime-event-validation.ts:366
error.detailsacceptsNaNand infinities here because every JavaScript number passes this check. These values are not JSON-serializable under the protocol's ownisJsonValuerules (src/protocol/json.ts:21-26) and are silently converted tonullduring transport, so validation can mutate the reported detail value instead of rejecting it at ingress. Require finite numbers before returning the details record.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 96 out of 368 changed files in this pull request and generated no new comments.
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
src/protocol/start.ts:21
driverGenerationis propagated into provider startup even though the boot schema accepts any nonnegative integer, including values aboveNumber.MAX_SAFE_INTEGER. OpenAI then rejects such a parsed payload inassertOpenAiRuntimeIdentity, while ACP and Claude accept the same boot payload, so validation depends on the selected runtime and occurs after the trust boundary. Make the boot schema require a safe integer before constructingDriverStartInput.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 96 out of 368 changed files in this pull request and generated 1 comment.
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
README.md:228
- This now incorrectly says release publication is gated only by the provider-free MCP test. The release workflow runs
vp run test:live:artifactimmediately afterward (.github/workflows/release.yml:114-127), and that command executes the complete OpenAI, Claude, and OpenCode matrix. Keep this documentation aligned with the actual fail-closed release gate.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 95 out of 366 changed files in this pull request and generated no new comments.
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
src/core/driver-command-dispatcher.ts:1103
- This directly awaits cleanup supplied by an
AgentDriverMcpPortwith no deadline. The publicAgentDriverMcpExecutioncontract requiresexecuteto be bounded but imposes no such requirement on disposal, so a custom host port can leave the command active indefinitely, suppress its terminal update, and eventually make run-terminal/shutdown joining time out. Bound disposal at this dispatcher boundary (and log a timeout as the existing cleanup diagnostic), rather than relying only on the built-in remote executor to implement its own timeout.
BREAKING CHANGE: contract consumers must use protocol version 3.
|
Checkpoint 3439bed is green. GitHub Validate PR title and Check passed. The Check job includes repository validation, image build, and image-environment verification. Local validation remains 1,666 passed, 40 explicit skips, 0 failed, and 6,765 assertions. |
Summary
Breaking contract
Validation
Merge order
This Driver PR is independently testable and may merge before the Mosoo PR after its own CI is green.
The downstream Draft still pins 5e66125 and must repin 3439bed and revalidate protocol version 3 before it can merge.
If the Driver merge strategy rewrites the commit SHA, Mosoo must pin the resulting durable commit.
The separate Cloudflare backup-capture blocker continues to keep the Mosoo PR in Draft.
Related work