Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
230 commits
Select commit Hold shift + click to select a range
2326188
test(infrastructure): add deterministic component harnesses
kvinwang Jul 31, 2026
9e0d0e6
test(plan): define core component acceptance coverage
kvinwang Jul 31, 2026
6c6a1cd
test(results): promote verified component coverage
kvinwang Jul 31, 2026
c0c8a90
docs(testing): account for split product commits
kvinwang Jul 31, 2026
60ebf11
docs(testing): record product PR split audit
kvinwang Jul 31, 2026
7fdeb17
docs(testing): account for simulator PR split
kvinwang Jul 31, 2026
eb4064c
docs(testing): retain merged PRs in split inventory
kvinwang Jul 31, 2026
4fe62eb
test(simulator): enforce configured TPM node ownership
kvinwang Jul 31, 2026
1c97c69
docs(testing): account for TPM ownership correction
kvinwang Jul 31, 2026
37edf98
Revert "test(simulator): enforce configured TPM node ownership"
kvinwang Jul 31, 2026
c222acc
docs(testing): reject TPM node race tolerance
kvinwang Jul 31, 2026
4ba60a4
docs(testing): add simulator retest watchlist
kvinwang Jul 31, 2026
1cc9875
test(gateway): use existing health and dashboard routes
kvinwang Aug 3, 2026
764dae6
test(verifier): assert simulator trust-root isolation
kvinwang Aug 4, 2026
c8fbbc4
test(verifier): validate embedded cache versions
kvinwang Aug 4, 2026
8b1e858
docs(testing): align rewritten PR accounting
kvinwang Aug 4, 2026
d88f8bc
test(guest): validate normal swap boot lifecycle
kvinwang Aug 4, 2026
9096fc2
docs(testing): record closed supervisor socket PR
kvinwang Aug 4, 2026
ea769e8
test(supervisor): validate UDS auto-start lifecycle
kvinwang Aug 4, 2026
b69318e
test(util): validate certificate outputs independently
kvinwang Aug 4, 2026
9999dfb
test(supervisor): separate client lifecycle coverage
kvinwang Aug 4, 2026
d5c1fb9
test(gateway): drop DNS credential encryption assumptions
kvinwang Aug 4, 2026
6b241d3
test(gateway): cover app-address DNS failover
kvinwang Aug 5, 2026
6cfbcfd
test(guest): pin wg-checker timing to a uniform 10s clock
kvinwang Aug 5, 2026
c25e487
test(vmm): cover filesystem-only CID reload
kvinwang Aug 5, 2026
1a4632b
test(gateway): register upgrade domain through admin API
kvinwang Aug 5, 2026
baface0
test(gateway): provision upgrade domain through certbot
kvinwang Aug 5, 2026
79b6ae9
test(vmm): preserve stopped VM CID on reload
kvinwang Aug 5, 2026
a4441c3
test(guest): retarget tc-gos-observabil-003 at the gateway checker
kvinwang Aug 5, 2026
abf2bc0
test(gateway): cover ACME credential rotation
kvinwang Aug 5, 2026
275d398
test(kms): cover CA persistence and renewal
kvinwang Aug 5, 2026
10504f9
test(vmm): retarget tc-vmm-serial-006 at log rotation
kvinwang Aug 6, 2026
e144743
test(vmm): cover libvirt network filter lifecycle
kvinwang Aug 6, 2026
1833382
test(vmm): wait for restarted netd listener
kvinwang Aug 6, 2026
b9c6f74
test(vmm): avoid destructive netd readiness probe
kvinwang Aug 6, 2026
8b8c8f1
test(vmm): read generated NIC MACs from launch plan
kvinwang Aug 6, 2026
88e74e6
test(vmm): isolate secondary host API port
kvinwang Aug 6, 2026
99961a3
test(vmm): inject spoof traffic on the host interface
kvinwang Aug 6, 2026
11b11d2
test(vmm): preserve failure evidence and force cleanup
kvinwang Aug 6, 2026
c117ba8
test(vmm): verify filtered network survives QEMU restart
kvinwang Aug 6, 2026
b23d036
test: follow current guest and VMM configuration
kvinwang Aug 7, 2026
c34fc85
test(runner): retain sweep failure diagnostics
kvinwang Aug 7, 2026
103727e
test(tdxlab): prepare deterministic run prerequisites
kvinwang Aug 7, 2026
372b041
test(tdxlab): provision pinned Foundry tools
kvinwang Aug 7, 2026
e1647ee
test(kms): resolve prepared startup binary
kvinwang Aug 7, 2026
3971c2a
test(tdxlab): resolve user toolchain paths
kvinwang Aug 7, 2026
5a4dfb3
test(kms): accept canonical empty Finish response
kvinwang Aug 7, 2026
d09166d
test(tdxlab): document prepared execution path
kvinwang Aug 7, 2026
79802ea
test(runner): fail sweeps with nonpassing cases
kvinwang Aug 7, 2026
27d0e38
test(gateway): follow current debug config
kvinwang Aug 7, 2026
f81bad7
test(attestation): prepare legacy TDX image verification
kvinwang Aug 7, 2026
c18111a
test(attestation): refresh NitroTPM replay fixture
kvinwang Aug 7, 2026
08d38c5
test(guest): retain gateway checker failure context
kvinwang Aug 7, 2026
e4da946
test(tdxlab): build candidate guest prerequisites
kvinwang Aug 7, 2026
8d038fa
test(tdxlab): build images from a clean worktree
kvinwang Aug 7, 2026
3d563ff
test(tdxlab): discover flavor-specific mkosi outputs
kvinwang Aug 7, 2026
8d6ebd2
test(gateway): follow current public RPC route
kvinwang Aug 7, 2026
b86423c
test(tdxlab): prepare current GCP TPM replay
kvinwang Aug 7, 2026
670baf8
test(guest): capture gateway checker exit codes safely
kvinwang Aug 7, 2026
bbbb29e
test(mkosi): prepare ephemeral OpenSSH host keys
kvinwang Aug 7, 2026
7c45976
test(guest): use deterministic quote output fault
kvinwang Aug 7, 2026
bef278b
test(guest): use deterministic app-key output fault
kvinwang Aug 7, 2026
11f04b5
test(guest): follow atomic random output replacement
kvinwang Aug 7, 2026
0b3c220
test(guest): use deterministic attestation output fault
kvinwang Aug 7, 2026
1bc237c
test(guest): use deterministic get-keys output fault
kvinwang Aug 7, 2026
8f520bb
test(simulator): prepare platform replay fixtures
kvinwang Aug 7, 2026
df5575b
test(gateway): follow current RPC response contracts
kvinwang Aug 7, 2026
0029901
test(kms): accept current Empty JSON encoding
kvinwang Aug 7, 2026
48c3226
test(kms): follow cloned shutdown handle
kvinwang Aug 7, 2026
ff6cbb3
test(verifier): follow certificate profile validation
kvinwang Aug 7, 2026
f10a360
test(verifier): use a valid oneshot config port
kvinwang Aug 7, 2026
939fb19
test(vmm): follow missing log response contract
kvinwang Aug 7, 2026
57369a4
test(vmm): materialize mutable image fixtures
kvinwang Aug 7, 2026
3e1262b
test(kms): follow current root-key handover
kvinwang Aug 7, 2026
7a9b7d5
test(gateway): isolate fixture WireGuard subnets
kvinwang Aug 7, 2026
b5ba666
test(gateway): follow current public info route
kvinwang Aug 7, 2026
e877384
test(gateway): accept current Empty exit response
kvinwang Aug 7, 2026
b6578fe
test(gateway): verify malformed Empty framing
kvinwang Aug 7, 2026
55b470b
test(gateway): follow current debug configuration
kvinwang Aug 7, 2026
902d43d
test(gateway): follow on-demand TLS key generation
kvinwang Aug 7, 2026
2601f2b
test(gateway): edit prepared TLS paths by section
kvinwang Aug 7, 2026
aac99c1
test(gateway): accept current DNS Empty responses
kvinwang Aug 7, 2026
11d3ec6
test(gateway): follow current certificate store suite
kvinwang Aug 7, 2026
a95a10b
test(vmm): follow private CID state contract
kvinwang Aug 7, 2026
3a4c6fa
test(vmm): stage reload fixtures across filesystems
kvinwang Aug 7, 2026
74dcf93
test(vmm): prepare management port for config checks
kvinwang Aug 7, 2026
21d60c8
test(vmm): follow current UI RPC diagnostics
kvinwang Aug 7, 2026
c4c30f8
test(vmm): follow current internal source matrices
kvinwang Aug 7, 2026
ab00cfb
test(guest): prepare a shell-capable log fixture image
kvinwang Aug 7, 2026
3ea9f52
test(guest): capture log fixture preparation diagnostics
kvinwang Aug 7, 2026
bfc02ff
test(tdxlab): prepare dashboard log workload image
kvinwang Aug 7, 2026
47ae300
test(tdxlab): bind dashboard preparation to case identity
kvinwang Aug 7, 2026
46c7c8b
test(kms): prepare finalized Ethereum head
kvinwang Aug 7, 2026
d8d420a
test(integration): follow current gateway admin contract
kvinwang Aug 7, 2026
8fa48d1
test(tdxlab): preserve guest image integrity
kvinwang Aug 7, 2026
ba364a7
test(integration): bound gateway DNS fixture waits
kvinwang Aug 7, 2026
8f4ec27
test(integration): accept compatible Exit request evolution
kvinwang Aug 7, 2026
337e996
style(test): format integration matrix
kvinwang Aug 7, 2026
7c0de10
test(integration): use mock DNS listener port
kvinwang Aug 7, 2026
36c5af6
test(fixtures): bind cleanup to prepared state root
kvinwang Aug 7, 2026
dd635e1
test(integration): pin mock DNS zone
kvinwang Aug 7, 2026
2012013
test(tdxlab): preflight Docker daemon
kvinwang Aug 7, 2026
f99d2c2
test(integration): model Cloudflare zone discovery
kvinwang Aug 7, 2026
75abf4e
test(tdxlab): prepare user namespaces
kvinwang Aug 7, 2026
e164886
test(integration): bridge legacy Gateway contracts
kvinwang Aug 7, 2026
780f520
test: fix mixed-version gateway failover harness
kvinwang Aug 8, 2026
3e41abd
test: select live KMS for failover preparation
kvinwang Aug 8, 2026
61f9f81
test: prepare identity matrix alternate image
kvinwang Aug 8, 2026
38ceb71
test: remove unused collateral prerequisite
kvinwang Aug 8, 2026
18c195e
test: update KMS compatibility certificate config
kvinwang Aug 8, 2026
8e53fec
test: follow split VMM restart policy tests
kvinwang Aug 8, 2026
50fbc22
test: resolve Cargo for gateway refresh harness
kvinwang Aug 8, 2026
4f1eb49
test: align VMM QEMU platform matrix
kvinwang Aug 8, 2026
fd75484
test: follow current VMM networking contract
kvinwang Aug 8, 2026
2c0a2f6
test: shorten VMM networking runtime paths
kvinwang Aug 8, 2026
0853609
test: start bridge VM before launch inspection
kvinwang Aug 8, 2026
2e535cf
test: prepare VMM hugepage prerequisites
kvinwang Aug 8, 2026
71eb9aa
test: exercise VMM hugepage lifecycle
kvinwang Aug 8, 2026
c74bf4e
test: explicitly start user network VM
kvinwang Aug 8, 2026
d2d9b44
test: detach networking case supervisor
kvinwang Aug 8, 2026
40e1d63
test: preserve VMM placement command evidence
kvinwang Aug 8, 2026
6c5d581
test: inspect supervised QEMU launch spec
kvinwang Aug 8, 2026
5be7fb7
test: follow attestation suite growth
kvinwang Aug 8, 2026
f209b36
test: follow current mock attestation CLI
kvinwang Aug 8, 2026
a1ce601
test: require both cloud quote matrices
kvinwang Aug 8, 2026
4f6a041
test: replace removed verifier matrix selectors
kvinwang Aug 8, 2026
1dc6f98
test: align verifier coverage with current suites
kvinwang Aug 8, 2026
f1590f6
test: prepare isolated Docker subnet pool
kvinwang Aug 8, 2026
cc536bb
test: preserve CAA concurrency diagnostics
kvinwang Aug 8, 2026
69e8746
test: follow Gateway CAA operation locking
kvinwang Aug 8, 2026
e7aa5ee
test: restore current Certbot and auth regressions
kvinwang Aug 8, 2026
6b9522b
test: follow current Gateway unit matrices
kvinwang Aug 8, 2026
30dfb49
test: follow current Gateway port-policy matrix
kvinwang Aug 8, 2026
6f573f0
test: make Gateway DNS routing fixture deterministic
kvinwang Aug 8, 2026
73f3cb8
test: follow removed KMS certificate-log surface
kvinwang Aug 8, 2026
1c8a51e
test: execute current KMS binary test target
kvinwang Aug 8, 2026
d9eba99
test: prepare seed-matched guest compatibility evidence
kvinwang Aug 8, 2026
f13afca
test: cover KMS signatures and injected Gateway outages
kvinwang Aug 8, 2026
219d4e2
test: select prepared TDX simulator explicitly
kvinwang Aug 8, 2026
9e0c8f5
test: run compatibility evidence without hardware TDX
kvinwang Aug 8, 2026
4d0878d
test: follow verifier certificate profile ownership
kvinwang Aug 8, 2026
b014a8e
test: prepare lease-owned attestation VMM
kvinwang Aug 8, 2026
796d7f9
test: separate physical and simulator collateral
kvinwang Aug 8, 2026
9464f37
test: observe app identity during Gateway outage
kvinwang Aug 8, 2026
76116cc
test: separate Gateway boot and registration probes
kvinwang Aug 8, 2026
3dc9caf
test: exercise Gateway identity fallback
kvinwang Aug 8, 2026
125224a
test: decouple identity probe from Gateway cache
kvinwang Aug 8, 2026
c1356d0
test: allow clients without Gateway endpoints
kvinwang Aug 8, 2026
1aeb806
test: run guest compatibility on physical TDX
kvinwang Aug 8, 2026
0f1ae3b
test: prepare physical compatibility collateral
kvinwang Aug 8, 2026
70f1f54
test(verifier): avoid fixed cc-eventlog test count
kvinwang Aug 8, 2026
b92b371
test: prepare simulator collateral before guest boot
kvinwang Aug 8, 2026
9a04956
test: prepare simulated identity image variant
kvinwang Aug 8, 2026
c89e9ac
test(simulator): restore SEV-SNP ABI regression coverage
kvinwang Aug 8, 2026
e7d4914
test(kms): prepare nested contract dependencies
kvinwang Aug 8, 2026
3d89bf6
test(kms): probe event audit contract fixtures
kvinwang Aug 8, 2026
ab69ad4
test(kms): probe runtime contract fixtures
kvinwang Aug 8, 2026
d2fca54
test(guest): wait for bind conflict cleanup
kvinwang Aug 9, 2026
1c12db4
test(gateway): synchronize concurrent renewal requests
kvinwang Aug 9, 2026
ae85d80
test(guest): cancel bind conflict restart jobs
kvinwang Aug 9, 2026
5caef51
test(gateway): prepare allocation wireguard fixture
kvinwang Aug 9, 2026
f018980
test(gateway): establish distributed renewal contention
kvinwang Aug 9, 2026
1b18f47
test(gateway): isolate allocation recycle phase
kvinwang Aug 9, 2026
c8928de
test(integration): retry rolling KMS metadata probes
kvinwang Aug 9, 2026
b8ee502
test(platform): wait for sealing provider recovery
kvinwang Aug 9, 2026
7e77418
test(harness): probe lifecycle readiness deterministically
kvinwang Aug 9, 2026
2462422
test(gateway): align allocation and renewal invariants
kvinwang Aug 9, 2026
533542b
test(integration): await bounded KMS boot failure
kvinwang Aug 10, 2026
0091c06
test(gateway): recheck distributed renewal freshness
kvinwang Aug 10, 2026
41705fd
test(provider): retry transient sealing startup
kvinwang Aug 10, 2026
55c1e40
test(harness): harden runtime readiness probes
kvinwang Aug 10, 2026
818ba2d
test(vmm): probe the browser endpoint directly
kvinwang Aug 10, 2026
9acf610
test(plan): cover post-baseline merged regressions
kvinwang Aug 14, 2026
b5e124a
test(plan): refresh post-merge harness expectations
kvinwang Aug 14, 2026
ce3db0e
test(plan): align ACPI measurement matrix
kvinwang Aug 14, 2026
ffc1afb
test(plan): harden dependency-backed harnesses
kvinwang Aug 14, 2026
7fd4db6
test(plan): run prepared Playwright offline
kvinwang Aug 14, 2026
04b5772
test(plan): make UI browser execution deterministic
kvinwang Aug 14, 2026
76f9cb0
test(plan): preserve expected stargz failures
kvinwang Aug 14, 2026
813664b
test(plan): unmount stale stargz snapshots
kvinwang Aug 14, 2026
c9fc951
test(plan): use persistent stargz storage
kvinwang Aug 14, 2026
815edf8
test(plan): wait for stargz unmounts
kvinwang Aug 14, 2026
fb53bc1
test(plan): preserve concurrent pull failures
kvinwang Aug 14, 2026
f95fb24
test(plan): deterministically corrupt stargz layer
kvinwang Aug 14, 2026
22de436
test(plan): accept truncated stargz diagnostics
kvinwang Aug 14, 2026
ba2c939
test(plan): assert corrupt stargz rejection by status
kvinwang Aug 14, 2026
5ac6451
test(plan): assert stargz outages by status
kvinwang Aug 14, 2026
de21d59
test(plan): force remote stargz corruption path
kvinwang Aug 14, 2026
1e59b48
test(plan): zero corrupt stargz layer
kvinwang Aug 14, 2026
be53f63
test(plan): clear stargz cache before corruption
kvinwang Aug 14, 2026
3963359
test(plan): restart registry after layer corruption
kvinwang Aug 14, 2026
ccf6181
test(gateway): cover multi-cluster CVM registration
kvinwang Aug 17, 2026
70f6ac6
test(gateway): align native multi-cluster rows
kvinwang Aug 17, 2026
3fb9842
test(gateway): verify multi-cluster proxy data paths
kvinwang Aug 17, 2026
cebb389
test(gateway): harden multi-cluster proxy acceptance
kvinwang Aug 17, 2026
154fb57
test(vmm): document macvtap connectivity acceptance
kvinwang Aug 17, 2026
22bddd0
test(plan): gate tdxlab sweeps on preflight
kvinwang Aug 18, 2026
5bccac6
refactor(test): colocate core component suite
kvinwang Aug 18, 2026
8f18d8e
fix(test): align image provenance with builder metadata
kvinwang Aug 18, 2026
dc783ac
test: harden core component coverage
kvinwang Aug 18, 2026
90e837a
fix(test): preserve current source fixtures
kvinwang Aug 18, 2026
d5dace4
test: pin Bun for tdxlab runs
kvinwang Aug 18, 2026
eb1729e
fix(test): preserve Bun path operations
kvinwang Aug 18, 2026
0d8a1fa
refactor(test): externalize hardware host configuration
kvinwang Aug 18, 2026
f6198a3
fix(test): resolve configured Docker runner lazily
kvinwang Aug 18, 2026
977a44b
fix(test): retain guest port reservations for active leases
kvinwang Aug 18, 2026
4c34395
fix(test): wait for guest API before Gateway startup
kvinwang Aug 18, 2026
5fe98ad
fix(test): retry bounded Sysbox recovery
kvinwang Aug 18, 2026
260f59d
fix(test): make version cleanup independent of caller env
kvinwang Aug 18, 2026
4c87c0c
fix(test): execute gated Cloudflare client tests
kvinwang Aug 18, 2026
66a1513
test(plan): cover changes since PR 841 baseline
kvinwang Aug 25, 2026
2058161
fix(test): align frozen guest RPC coverage
kvinwang Aug 25, 2026
ed54fe2
fix(test): record removed RPC evidence schema
kvinwang Aug 25, 2026
92ed219
fix(test): align component matrices with next
kvinwang Aug 25, 2026
83097d3
fix(test): cover declarative OVMF selection
kvinwang Aug 25, 2026
7984e2c
fix(test): ignore legacy image version metadata
kvinwang Aug 25, 2026
fe03bcd
fix(test): accept explicit gateway fallback rejection
kvinwang Aug 26, 2026
e02f6dc
fix(test): tolerate absent gateway recovery samples
kvinwang Aug 26, 2026
9204834
test(gateway): cover certbot and gateway changes on next
kvinwang Sep 17, 2026
d0bfb89
test(vmm): cover netd, networking, and GPU proxy changes on next
kvinwang Sep 17, 2026
1bc7d80
test(os): cover guest kernel and image changes on next
kvinwang Sep 17, 2026
393c2fd
test(verifier): cover setup-header normalization and cmdline suffix
kvinwang Sep 17, 2026
8a92c1e
test(guest): cover GPU telemetry, discard, and v1 attestation
kvinwang Sep 17, 2026
1ccef3f
docs(testing): record next rebase coverage (2026-09-17)
kvinwang Sep 17, 2026
219cabd
fix(test): run vitest 4 on Node 20 and wait for the shared ACME lock
kvinwang Sep 17, 2026
e794038
fix(test): mirror certbot fixture images into the upgrade registry
kvinwang Sep 17, 2026
118dba1
fix(test): align fixture DNS auth, vitest output, and verifier suite …
kvinwang Sep 17, 2026
0c3fcd9
test(verifier): cover the canonical setup-header layout
kvinwang Sep 18, 2026
74f733b
test(vmm): let a run pin the QEMU the VMM launches
kvinwang Sep 18, 2026
9ad6f02
test(verifier): cover the shipped canonical setup header
kvinwang Sep 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
26 changes: 26 additions & 0 deletions REUSE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -267,3 +267,29 @@ SPDX-License-Identifier = "CC0-1.0"
path = "dstack/crates/qemu-acpi/fixtures/*.bin"
SPDX-FileCopyrightText = "NONE"
SPDX-License-Identifier = "CC0-1.0"

[[annotations]]
path = "test-suites/catalog/source-inventory.json"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"

[[annotations]]
path = "test-suites/catalog/configuration-inventory.json"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"

[[annotations]]
path = "test-suites/catalog/api-inventory.json"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"

[[annotations]]
path = "test-suites/catalog/source-coverage-map.json"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"

[[annotations]]
path = "test-suites/**"
precedence = "aggregate"
SPDX-FileCopyrightText = "© 2026 Phala Network <dstack@phala.network>"
SPDX-License-Identifier = "Apache-2.0"
145 changes: 145 additions & 0 deletions docs/testing/dstack-test-methodology.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
<!-- SPDX-FileCopyrightText: © 2026 Phala Network <dstack@phala.network> -->
<!-- SPDX-License-Identifier: Apache-2.0 -->
<a id="dstack-test-methodology"></a>
# dstack Test Methodology

This document defines the common process for dstack release testing, from change analysis and risk assessment through execution, evidence collection, and release decisions. See the [test-case authoring specification](test-case-authoring-spec.md#dstack-test-case-authoring-spec) and [report output specification](test-report-output-spec.md#dstack-test-report-output-spec) for normative formats.

<a id="method-objectives"></a>
## 1. Objectives

Testing must produce reproducible, auditable, and traceable release evidence—not merely show that a script once exited successfully. A conclusion must be traceable from a requirement or risk to a case, step, original command evidence, observation, and attachment.

Testing is complete only when:

1. every relevant change, requirement, and material risk has explicit coverage;
2. an executor unfamiliar with the implementation can reproduce each case;
3. the native AI session preserves executed commands and their raw output;
4. simulated and physical-hardware results are reported separately;
5. tools can recompute aggregate status from atomic case results; and
6. references, attachment digests, and statistics are machine-verifiable.

<a id="method-artifacts"></a>
## 2. Artifact layers

Do not mix these four layers:

| Layer | Purpose | Immutable after execution starts |
|---|---|---:|
| Change audit | Establishes changed behavior, dependencies, and risks | Yes |
| Test plan | Defines scope, topology, cases, and execution order | Yes |
| Case specification | Defines preconditions, actions, and expected results | Yes |
| `results/<run-id>/` | Records versions, native sessions, observations, and attachments | No, while running |

A plan uses exactly three semantic levels: chapter, section, and case. Its machine-readable execution order is defined by `index.json`; its top-level `README.md` is the executor's environment guide.

<a id="method-workflow"></a>
## 3. Workflow

### 3.1 Audit the release delta

Compare the previous released tag with the candidate commit. Inspect commits, pull requests, schemas, RPCs, command-line interfaces, configuration defaults, systemd units, image recipes, deployment manifests, migrations, and dependency changes. For every change record:

- the user-visible or operational behavior;
- affected components and interfaces;
- compatibility direction and version combinations;
- failure modes and security impact;
- the requirement and risk IDs used by test cases; and
- whether physical TEE hardware is required.

Generated changelogs alone are insufficient. Follow data and control flow across component boundaries.

### 3.2 Build a risk-based coverage matrix

Classify coverage as:

- **new or changed functionality**: full positive, boundary, and relevant negative coverage;
- **regression**: behavior likely to be affected by shared code, configuration, images, protocols, or lifecycle changes;
- **compatibility**: supported mixed-version combinations and upgrade order;
- **security**: trust boundaries, identity, attestation, key handling, authorization, and secret disclosure;
- **operations**: install, upgrade, restart, recovery, logging, and diagnostics.

Prioritize by impact, likelihood, detectability, and breadth. `P0` covers release-blocking trust, data-loss, availability, or primary-path risks; `P1` covers important supported behavior; `P2` covers lower-risk variants.

### 3.3 Define environments

The plan guide must describe topology, component endpoints, credentials, test data, health checks, concurrency constraints, cleanup, and prohibited operations. Record common software versions once in run-level context. A case records a version override only when it deliberately uses a different component version.

Environment levels are:

- **UNIT**: isolated code-level validation;
- **SIMULATOR**: no-TEE or mock-attestation execution;
- **INTEGRATION**: deployed multi-component system;
- **HARDWARE**: physical supported TEE hardware.

Simulation may follow `docs/development-without-tee.md`; a no-TEE development guest may independently use `key_provider=tpm` when the SGX local key provider is unavailable. This does not run local-key-provider in a TPM mode or cover its SGX behavior. Simulation never proves hardware-specific boot, measurement, attestation, sealing, or device behavior. Such unconfirmed items must be called out separately in the report.

### 3.4 Author and review cases

Each case validates one independently decidable behavior and references at least one requirement or risk. Prefer three to eight logical steps. Every step defines an action and exact observable expected results. Do not write a separate failure criterion: any result that does not fully match the expected result is `FAIL`.

Review the plan for change coverage, regression breadth, compatibility matrices, security boundaries, operational recovery, test-data isolation, and cleanup before execution.

### 3.5 Execute

The `run-plan` orchestration agent must first read the guide, index, and every
case specification. It processes cases in index order, starts an independent
case-agent session for each runnable case, and reads the completed result before
deciding about later cases. It may mark a later case `SKIPPED` without launching
it only when a recorded earlier non-PASS result demonstrably makes the later
case's prerequisite false or its result meaningless. Similarity, expected cost,
or a mere possibility of failure is not sufficient. Independent cases continue.

Each case executor must:

1. read the plan `README.md` and `index.json`;
2. execute cases in index order unless the guide explicitly permits parallelism;
3. start a fresh Codex or Claude session for each case;
4. execute real commands rather than infer outcomes;
5. preserve the native JSONL session as step evidence;
6. write only a shallow atomic `result.json`; and
7. continue to later independent cases after a case-level failure.

The executor name and model are recorded by the runner. Secrets must never be emitted into sessions or artifacts.

<a id="method-status"></a>
## 4. Status model

Case and step status is one of:

- `PASS`: every expected result was fully observed;
- `FAIL`: at least one expected result was not fully observed;
- `BLOCKED`: an external prerequisite prevented the tested behavior from starting;
- `NOT_RUN`: execution was not attempted;
- `SKIPPED`: omission was explicitly authorized and explained.

`PARTIAL` is forbidden. A completed run may contain any terminal case status. A run is `INCOMPLETE` only when required case result artifacts are missing.

Product failure and test-infrastructure failure must be distinguished. A healthy system returning the wrong response is `FAIL`; an unavailable required laboratory host before the tested action begins is `BLOCKED`.

<a id="method-evidence"></a>
## 5. Evidence and traceability

Every logical step must be supported by observed commands and raw output in the native session. Screenshots or other files are attachments, not replacements for command evidence where machine-readable evidence is available. Preserve timestamps, exit codes, stdout, stderr, and tool errors as supplied by the agent CLI.

Use explicit HTML anchors for all chapters, sections, cases, and steps. Do not rely on renderer-specific heading slugs. `index.json` is the authority for ordering and paths; IDs remain stable after publication.

<a id="method-compatibility"></a>
## 6. Compatibility testing

Derive version combinations from supported deployment behavior rather than testing arbitrary permutations. For a rolling upgrade, cover at least:

- latest control-plane services with both previous and latest guest images;
- persisted state created by the previous release and consumed by the candidate;
- protocol/schema defaults when one side omits newly introduced fields;
- upgrade order, restart behavior, and rollback where supported; and
- explicit rejection of unsupported combinations with actionable diagnostics.

For dstack v0.6.0, the expected online topology includes latest VMM, KMS, and gateway components while instances may use a mixture of old and new images.

<a id="method-release-decision"></a>
## 7. Release decision

The final report must provide coverage by requirement and risk, status counts, unresolved failures, blocked or skipped cases, simulation-only results, unconfirmed hardware items, and material deviations from the plan. Release acceptance criteria belong in the plan guide and must state which statuses or open risks block release.

Before publishing, run `dstack-test validate`, render the self-contained HTML report, and package the selected run. The package is an immutable review artifact and must not include secrets or results from unrelated run IDs.
Loading
Loading