Repository navigation
Conversation
Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # AGENTS.md
|
📁 PR Artifacts Notice This PR contains a |
Endpoint auditContract: pinned release artifact
Actionable client-only calls (0)none Actionable server-only operations (18)
Documented non-divergences (13)Client calls intentionally absent from the filtered contract (11)
Reason: Operational Agent Server endpoints intentionally excluded from the filtered public release artifact.
Reason: Client-ahead API stacked on the pending Agent Server meta-profiles implementation.
Reason: Client-ahead API stacked on the pending Agent Server pre-flight LLM validation endpoint. Server operations covered by an exposed browser URL (2)
Reason: RemoteWorkspace.startWorkspaceSession exposes these authenticated URLs for browser iframe and file requests; they are not HttpClient method calls. |
Python API breakage checks — ✅ PASSEDResult: ✅ PASSED |
REST API breakage checks (OpenAPI) — ✅ PASSEDResult: ✅ PASSED |
Coverage Report •
|
|||||||||||||||||||||||||||||||||||
AGENT:
Implemented through the multi-agent pipeline (Claude Sonnet 5.5 medium design/review/triage, OpenAI GPT-6 Luna max implementation, OpenAI GPT-6.1 Sol high audit). Terminal tests (
CI=true uv run python -m pytest --forked -p no:cacheprovider tests/tools/terminal) passed twice in a row (349 passed, 15 skipped each); nohttp.serverstarted by those runs was left, and port 8081 was not listening.make validaterc 0 in 18m24s (1104s); porcelain empty; no leftover listener from that run.Why
make validatefor sdk#73 leftpython -u -m http.server 8081listening aftersession.close(). The next cases that also bind 8081 then failed with address already in use. Two gaps: the tests share a fixed port, and teardownkillpgs only the shell's own process group, so a foreground job under job control (and a pooled tmux pane) survives.Summary
tests/tools/terminaltake a free port (socketbind 0) instead of 8081. They still assert the server serves and that Ctrl+C interrupts the foreground server.close()snapshot descendant process groups before the shell dies, then TERM and KILL those groups. Pooled tmux shutdown snapshots every pane's job groups before the shared session is killed, then reaps them once. A pool-mode regression starts a server that ignores hang-up and assertsclose()removes it.scripts/validate-env.shEXIT trap signals and reaps descendants of the sandboxed run (matched by the sandboxTMPDIR) beforerm -rf. If a process survives, the sandbox is kept.The CI job name stays
validate. The allowlist andvalidate-stepssuite list are unchanged.Issue Number
Closes #79
How to Test
CI=true uv run python -m pytest --forked -p no:cacheprovider tests/tools/terminalThen confirm no
http.serverfrom that run is still alive and nothing is listening on 8081.make validateOn this host that was rc 0 in 18m24s, with an empty
git status --porcelainand no leftover server from the run.Type
Notes
Do not deselect or skip the terminal server tests. macOS CI is in scope: no unguarded Linux
/procassumptions. The orchestrator did not print secret values.