Repository navigation
Conversation
Python API breakage checks — ✅ PASSEDResult: ✅ PASSED |
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. |
|
📁 PR Artifacts Notice This PR contains a |
REST API breakage checks (OpenAPI) — ✅ PASSEDResult: ✅ PASSED |
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). On this host, with dummy sentinel files only:
make validaterc 0 in 19m39s (dummy auth/secrets/config/persistence checksums unchanged, host sensitive-path checksums unchanged, sentinel absent from the log,git status --porcelainempty); the samemake validatefrom a fresh clone with no.venvrc 0 in 17m39s (under 31 min, porcelain empty, dummy and host checksums unchanged).sdk_validatewithCLAUDE_CODE_OAUTH_TOKENandCLAUDE_AUTH_CODEunset: 2550 passed, 13 deselected.Why
sdk#75 unset a fixed denylist (
VALIDATE_UNSET_ENV) beforemake validate. VERIFY for sdk#73 still inheritedOPENHANDS_SESSION_API_KEY, which is outside that list, andtest_terminal_does_not_expose_session_api_key_via_env_commandfailed on the substring. A denylist misses the next injected name.make validatenow starts from a clean allowlist instead.Summary
scripts/validate-env.shruns the validation steps withenv -i. The child receivesPATH,LANG/LC_*,CI=true,UV_CACHE_DIR/UV_PYTHON_INSTALL_DIR/PRE_COMMIT_HOME(host cache locations, so a cold run stays within the time limit), and a throwawayHOME/TMPDIRthat the script removes on exit. ParentOPENHANDS_*,OH_*,CLAUDE_*,OPENAI_*,CODEX_*,CURSOR_*,GH_TOKEN/GITHUB_*, andCLOUD_AGENT_*are not passed through.make validatecalls that wrapper and then the same suites, pyright, pre-commit, and diff checks as before.VALIDATE_UNSET_ENVis gone. The Actions job name staysvalidate..aidw/validation.jsonis unchanged (make validateonly).tests/conftest.pydenylist strip is removed so the two approaches are not stacked. Directuv run pytestis not isolated; tests that need a variable still set it withmonkeypatch.tests/sdk/test_env_isolation.pychecks the allowlist, the throwaway home, and the Makefile wiring, including a parent dummyOPENHANDS_SESSION_API_KEY.Issue Number
Closes #77
How to Test
Export dummy
OPENHANDS_SESSION_API_KEYplus representativeOPENHANDS_*,OH_*,CLAUDE_*,OPENAI_*,CODEX_*,CURSOR_*,GH_TOKEN,GITHUB_TOKEN, andCLOUD_AGENT_*values (fake strings or paths under a temp dir you create). Then:make validateOn this host that was rc 0 in 19m39s. sha256 of the dummy files and of the host sensitive paths matched before and after, the sentinel string was absent from the log, and porcelain was empty. A fresh clone of this branch with no
.venv, same dummy env, finished in 17m39s with porcelain empty.sdk_validatewith the two OAuth variables unset passed (2550 passed, 13 deselected).Type
Notes
Direct pytest isolation is not claimed. The allowlist lives only in
scripts/validate-env.sh. Dummy variables were never pointed at/home/box/.codexor the runtime state dir. Host checksums covered Codex auth, OpenHands secrets and settings, profile json, and the runtime provider-credentials secrets file.