Files
OpenShell/sdk/go/openshell/v1/mutations.go
Mrunal Patel c502be9fd7 feat(api): return typed deletion outcomes with explicit missing-target semantics (#3317)
* feat(api): return typed deletion outcomes with explicit missing-target semantics

Implement phase 2 of #3051 across the public gateway API and first-party SDKs. Preserve asynchronous sandbox deletion and observed resource identities, reserve legacy wire fields, and document the coordinated migration.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

* fix(sdk): bind deletion waits to sandbox identity

Track accepted deletions by original sandbox identity in Rust and TypeScript. Preserve name-only waits and cover replacement races and lookup failures.

Merge the phase-one cleanup fix and adapt its interceptor regressions to typed deletion outcomes.

Refs #3051.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

* test(e2e): accept asynchronous stopped sandbox deletion

Allow either completed or accepted deletion output, then continue polling for actual sandbox absence. This preserves the lifecycle assertion under the phase-two deletion contract.

Refs #3051.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

---------

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
2026-09-16 22:11:19 +00:00

28 lines
941 B
Go

// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package v1
import "github.com/NVIDIA/OpenShell/sdk/go/openshell/v1/types"
// DeletionOutcome distinguishes completion from asynchronous acceptance.
type DeletionOutcome = types.DeletionOutcome
// Known deletion outcomes. Unrecognized values do not establish completion.
const (
DeletionUnspecified = types.DeletionUnspecified
DeletionCompleted = types.DeletionCompleted
DeletionAccepted = types.DeletionAccepted
DeletionAlreadyAbsent = types.DeletionAlreadyAbsent
)
// DeletionResult describes the original target, not a same-name replacement.
type DeletionResult = types.DeletionResult
// DeleteOptions configures the missing-target contract.
type DeleteOptions = types.DeleteOptions
func allowMissing(opts []DeleteOptions) bool {
return len(opts) > 0 && opts[0].AllowMissing
}