feat(api): extend mutation replay through gateway interceptors - #3323
Conversation
Add typed durable replay receipts for 24 ordinary unary mutations, protect sensitive payload fingerprints, and revalidate intercepted retries without repeating post-commit observation. Part of #3051 (phase 3b). Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
E2E Test AttestationLocal Docker-backed E2E passed against the contents committed as Commands: OPENSHELL_AUDITABLE=1 OPENSHELL_E2E_DOCKER_TEST=workspace_lifecycle mise run --shell 'env RUSTC_WRAPPER= bash -c -o errexit -o pipefail' e2e:docker
OPENSHELL_AUDITABLE=1 E2E_PARALLEL=0 PYTEST_ADDOPTS="-k 'test_sandbox_api or test_workspace_api' -v" mise run --shell 'env RUSTC_WRAPPER= bash -c -o errexit -o pipefail' e2e:pythonBoth commands created isolated standalone gateways with the Docker compute driver, current gateway/CLI binaries, and a freshly built static supervisor. The auditable supervisor build mode and task shell avoid a local sccache execution error; no repository checks were disabled. The initial Docker attempt stopped during supervisor staging before tests started. Both final commands passed, and their gateways, sandboxes, and temporary networks were removed. Results
Tests Executed
The new replay regression verifies create/stop/start/config/delete results and server replay metadata across actual sandbox reconciliation, then recreates the same name and proves delete replay preserves the replacement. |
|
🌿 Preview your docs: https://nvidia-preview-pr-3323.docs.buildwithfern.com/openshell |
johntmyers
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
This accepted issue-backed phase is project-valid, and the full initial code review found no blocking defects. The user-visible replay contract is documented; required current-head testing must now be dispatched before pipeline monitoring begins.
Blocking findings:
- No blocking findings remain
Carried findings:
- None
Non-blocking suggestions:
- None
Gator metadata
- Validation: Implements accepted issue #3051 phase 3b on its reviewed stacked base #3321.
- Docs: Replay behavior and API errors are updated in architecture/gateway.md and docs/reference/api-errors.mdx; navigation changes are not needed for the existing reference page.
- Checks: Current-head Branch Checks and Helm Lint have not run yet; DCO, vouch, Trivy, docs preview, and available synthetic gates are green.
- E2E: test:e2e is required for sandbox lifecycle, gateway/interceptor, policy/config, and provider-flow changes and is being dispatched.
- Head SHA:
80415d1604988cf4fcfcfef8f13660fbe57232be - Base SHA:
5dc3c72940b13ca0da55a0b62ec792d71e50cf17 - Merge base SHA:
5dc3c72940b13ca0da55a0b62ec792d71e50cf17 - Patch ID:
132f907ff26a660e8d851f936f50f356109b090a - Gator payload:
9 - Review mode:
initial - Previous reviewed SHA: none
- Review budget exhausted: no
- Maintainer decision required: no
- Next state:
gator:in-review
|
Label |
|
/ok to test 80415d1 |
59a6077
into
feat/3051-mutation-replay/mrunalp
Monitoring CompleteMonitoring is complete because this PR has merged. Final status: The PR reached I removed the active Gator metadata
|
Add typed durable replay receipts for 24 ordinary unary mutations, protect sensitive payload fingerprints, and revalidate intercepted retries without repeating post-commit observation. Part of #3051 (phase 3b). Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
…A#3321) * feat(api): add durable workspace mutation admission and replay Part of NVIDIA#3051 (phase 3a). Preserve unresolved admissions, reauthorize replay, and protect same-name replacements. Signed-off-by: Mrunal Patel <mrunalp@gmail.com> * feat(api): extend mutation replay through gateway interceptors (NVIDIA#3323) Add typed durable replay receipts for 24 ordinary unary mutations, protect sensitive payload fingerprints, and revalidate intercepted retries without repeating post-commit observation. Part of NVIDIA#3051 (phase 3b). Signed-off-by: Mrunal Patel <mrunalp@gmail.com> * fix(api): scope workspace request IDs by target Include the requested workspace name in create/delete admission keys while leaving workspace UUID guards unset. Cover cross-target UUID reuse, replay, and missing targets with server and live gateway regressions. Merge the latest phase-two SDK fixes and preserve the approved interceptor replay changes. Refs NVIDIA#3051. Signed-off-by: Mrunal Patel <mrunalp@gmail.com> --------- Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
Summary
Extend durable request admission and replay to the remaining 24 ordinary user-callable unary mutations. Typed receipts preserve operation outcomes without storing credential-bearing request or response snapshots, and intercepted retries remain subject to current validation.
Related Issue
Part of #3051, phase 3b. Stacked on #3321 (
feat/3051-mutation-replay/mrunalp). This PR does not close the issue: credential capabilities, exec/streaming semantics, curated SDK request-ID helpers, and the final mutation audit remain phase 4.Changes
architecture/gateway.mdanddocs/reference/api-errors.mdxwith the supported RPCs, replay projections, key-material requirements, and remaining exclusions.Deviations from Plan
No scope expansion. The reviewed phase-3b design uses method-specific receipts and existing private gateway material rather than generic response persistence or new deployment configuration.
Testing
mise run pre-commitpasses.mise run ci: 1,546 server unit tests passed (9 existing ignored); repository tests and Go SDK CI passed; Python 247 passed, TypeScript 108 passed.Local Rust verification disables an unusable sccache wrapper via a task-shell override. Docker supervisor staging uses its supported
OPENSHELL_AUDITABLE=1build mode, which removes the wrapper after nested mise setup. No checks are skipped and repository tool configuration is unchanged. Disposable E2E gateways, sandboxes, networks, and PostgreSQL test resources were removed.Checklist