Repository navigation
Conversation
7cd039d to
b69cdc1
Compare
ebe76ec to
5660716
Compare
5660716 to
697020d
Compare
|
|
ebaec87 to
2891cbb
Compare
2768536 to
0d69f5d
Compare
0d69f5d to
b463e46
Compare
35606b8 to
8fce68b
Compare
marckong
left a comment
There was a problem hiding this comment.
Review: comment (don't merge as-is). The sync itself is correct and consistent with hosting 614aed52, and it keeps the durable-approvals operations intact. The generated contract change does expose two places where the hand-written SDK code no longer matches it (inline). Checked by reading the diff and the SDK source at this head; I did not run generation or tests locally. CI note: Quality Gate and Mutation Gate failed once on _durable_engine mutation and passed on rerun, which looks like a flake. Not checked: SDK-side validation of the widened timeout_seconds ranges.
| minimum: 30 | ||
| maximum: 28800 | ||
| description: Inherits the template TTL when omitted (3600 seconds for a new template). | ||
| idle_timeout_seconds: |
There was a problem hiding this comment.
[P1] The SDK still sends idle_timeout_seconds, which the contract removes here.
CreateSandboxSessionRequest has additionalProperties: false upstream, and hosting #1743 removed the idle-timeout fields from the API and SDK bindings. Sandboxes.create in src/volcano_sdk/sandboxes.py:68 still loops over ("max_duration_seconds", "idle_timeout_seconds"), and SandboxCreateOptions still declares the field (sandbox_models.py:31).
Callers who pass it will have the request rejected by schema validation (exact status not confirmed). The bot's "Deleted Endpoints: None" report doesn't surface removed properties. Remove the option and the loop entry, and add a test, in a companion change landed with or before this PR.
| memory_mb: int | ||
| created_at: datetime.datetime | ||
| expires_at: datetime.datetime | ||
| expires_at: datetime.datetime | None |
There was a problem hiding this comment.
[P2] expires_at is now nullable, but session decoding rejects null.
SandboxSession in sandbox_session.py:89 and _update at :166 apply timestamp() from _sandbox.py to expires_at. timestamp() is built to require an aware timestamp, so I expect it to raise on None. I only read its start, so this is inferred. The public property is typed datetime (:113).
Local mode with unlimited lifetime returns null, so creating, getting or refreshing such a session would fail. Cloud always returns an expiry, so it isn't affected. sandbox_id is also nullable now, but the SDK doesn't read it.
Hosting #1743 notes that published-client decoding wasn't validated. Make expires_at datetime | None and add a test.
91b486d to
ae0ea59
Compare
ae0ea59 to
22f5e73
Compare
Summary
API change report
Public API
New Endpoints: 3
GET /projects/{id}/autofix-runs
GET /projects/{id}/autofix-runs/{runId}
POST /projects/{id}/issues/{issueId}/autofix-runs
Deleted Endpoints: None
Modified Endpoints: 39
POST /auth/forgot-password
POST /auth/logout
POST /auth/oauth/exchange
GET /auth/password-policy
POST /auth/refresh
POST /auth/reset-password
POST /auth/signin
or account banned/deleted
' to 'Unauthorized - Invalid credentials, invalid/tampered/revoked anon key,
or account banned/deleted; or invalid auth proxy metadata
'
POST /auth/signup
' to 'Unauthorized - Invalid, tampered, revoked, or wrong-project anon key.
Also returned for invalid, repeated, or under-scoped auth proxy metadata
(
invalid auth proxy metadata).'
POST /auth/signup-anonymous
POST /functions/{functionId}/invoke
visibilitydecides which credentialsmay call it, and the function does not run for any other. A
privatefunction answers every credential but a service key exactly as a
missing one, with 404, so its name and id cannot be discovered; an anon
key on an
authenticatedfunction gets 403. An SDK calling by nameresolves it first through
GET /functions/resolve, which answers thatanon key with 404 instead.
With Service Key (admin/background operations, every visibility):
With Auth User Token (user-facing,
authenticatedorpublicfunctions):__volcano_authcontext:With Anon Key (
publicfunctions only):functions.invokevisibility: public__volcano_auth)Transport and CORS:
POST
{payload: ...}contract, including for functions whose DNS ingress isconfigured in HTTP mode.
invoke_url. It is on adifferent domain from this API, so it cannot be derived from the API host.
/. HTTP-mode DNS ingress accepts GET,HEAD, POST, PUT, PATCH, and DELETE at
/and nested paths.POST, OPTIONS. HTTP-mode DNSpreflight advertises
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS.http_auth_mode: noneapplies only to public HTTP-mode DNS ingress; thisdirect operation always requires a Volcano credential.
Durable functions are not invocable here. A durable function's id
answers 404, whatever its visibility, because a synchronous call would
run it with no execution record, no idempotency and no concurrency
accounting. Start one with
POST /durable-functions/{functionId}/executions.' to 'Invoke a function. The function's
visibilitydecides which credentialsmay call it, and the function does not run for any other. A
privatefunction answers every credential but a service key exactly as a
missing one, with 404, so its name and id cannot be discovered; an anon
key on an
authenticatedfunction gets 403. An SDK calling by nameresolves it first through
GET /functions/resolve, which answers thatanon key with 404 instead.
With Service Key (admin/background operations, every visibility):
With Auth User Token (user-facing,
authenticatedorpublicfunctions):__volcano_authcontext:With Anon Key (
publicfunctions only):functions.invokevisibility: public__volcano_auth)Reserved payload keys: the top-level
__volcano_authand__volcano_httpkeys are reserved. Volcano removes caller-suppliedvalues for both before the function runs; only an auth user token adds
a server-built
__volcano_auth, and only HTTP-mode ingress sets__volcano_http: true.Transport and CORS:
POST
{payload: ...}contract, including for functions whose DNS ingress isconfigured in HTTP mode.
invoke_url. It is on adifferent domain from this API, so it cannot be derived from the API host.
/. HTTP-mode DNS ingress accepts GET,HEAD, POST, PUT, PATCH, and DELETE at
/and nested paths.POST, OPTIONS. HTTP-mode DNSpreflight advertises
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS.http_auth_mode: noneapplies only to public HTTP-mode DNS ingress; thisdirect operation always requires a Volcano credential.
Durable functions are not invocable here. A durable function's id
answers 404, whatever its visibility, because a synchronous call would
run it with no execution record, no idempotency and no concurrency
accounting. Start one with
POST /durable-functions/{functionId}/executions.'
If invoked with auth user token, Volcano automatically injects
__volcano_authcontext:' to 'Payload to send to the function.
If invoked with auth user token, Volcano automatically injects
__volcano_authcontext:The top-level
__volcano_authand__volcano_httpkeys are reserved;Volcano removes caller-supplied values for both.
'
GET /projects
POST /projects
GET /projects/{id}
PATCH /projects/{id}
GET /projects/{id}/health
deployed resources. The endpoint does not run live provider probes.
A successful request returns 200 even when the project status is
unhealthy; transport and authorization failures use HTTP errors.' to 'Returns a fast control-plane health snapshot for the project and its
deployed resources. The endpoint does not run live provider probes.
A successful request returns 200 even when the project status is
degradedorcritical; transport and authorization failures use HTTPerrors.
'
DELETE /projects/{id}/logo
POST /projects/{id}/logo
POST /projects/{id}/sandbox-executions
GET /projects/{id}/sandbox-sessions
POST /projects/{id}/sandbox-sessions
GET /projects/{id}/sandboxes
POST /projects/{id}/sandboxes
DELETE /projects/{id}/sandboxes/{sandboxId}
GET /projects/{id}/sandboxes/{sandboxId}
PATCH /projects/{id}/sandboxes/{sandboxId}
GET /projects/{id}/sandboxes/{sandboxId}/deployments
POST /projects/{id}/sandboxes/{sandboxId}/deployments
GET /projects/{id}/sandboxes/{sandboxId}/deployments/{deploymentId}
GET /projects/{id}/sandboxes/{sandboxId}/deployments/{deploymentId}/logs
GET /projects/{id}/sandboxes/{sandboxId}/deployments/{deploymentId}/source
POST /projects/{id}/service-keys
containing only blank strings, the key is granted full access ([""])
for backward compatibility. Provide an explicit list (e.g.
["functions.invoke", "locks.manage"]) to restrict the key; ""
grants everything. Scope enforcement applies to function invocation,
storage object operations, and project locks.
' to 'Optional least-privilege scope for the key. When omitted, empty, or
containing only blank strings, the key is granted full access ([""])
for backward compatibility. Provide an explicit list (e.g.
["functions.invoke", "locks.manage"]) to restrict the key; ""
grants everything. Scope enforcement applies to function invocation,
storage object operations, project locks, and server-side auth proxy
metadata (auth.signin, auth.signup, auth.refresh, auth.logout,
auth.password_reset).
'
DELETE /projects/{id}/storage/buckets/{bucketName}/policies/{policyId}
DELETE /sandbox-sessions/{sessionId}
GET /sandbox-sessions/{sessionId}
POST /sandbox-sessions/{sessionId}/exec
POST /sandbox-sessions/{sessionId}/files/read
POST /sandbox-sessions/{sessionId}/files/write
POST /sandbox-sessions/{sessionId}/resume
POST /sandbox-sessions/{sessionId}/suspend
Validation