Documentation / Graceful-teardown measurement — 2026-10-23

Graceful-teardown measurement — 2026-10-23

Measured result: the v1.2.0 pin passed an uncancelled control and both observed cancellation phases of the graceful-teardown drill. This completes the current-pin obligation; it does not retrospectively establish a pass at rc.6 or any other intervening pin.

Scope and method

  • Published engine: 1.2.0+0af21de5bd0a4e91ca002e03e6c256bc4e8ca4e8.
  • Sample source: tomas-rampas/vouchfx-samples at 0fc7426bb28be793192593c7ccb7179442210f12, orders-dotnet inline topology.
  • Host: Windows, Docker Desktop Linux containers; Docker server 29.6.1 linux/amd64.
  • Method: documented Option B, direct CLI with --shutdown-on-stdin-eof. The observer closed each abort's recorded child stdin while that same process and its topology were running. No MCP server or actual MCP tool timeout was invoked.
  • Both child stdout and stderr were drained to files. Ryuk was disabled, no external providers were configured, and no forced kill or manual Docker cleanup was used.
  • This sample has no TLS security declaration. The results establish this one host and inline orders topology, not Compose, TLS, every Docker platform, or end-to-end MCP timeout behaviour.

Accepted measurements

All durations are measured elapsed seconds. Removal bounds are relative to stdin EOF and cover all observed owned containers, the owned network and owned volumes.

Measurement Child PID Integer exit / outcome evidence Exit after EOF Owned resources observed All owned resources observed absent by
Uncancelled control 29752 0 / PASS archive Not applicable; total runtime 31.922 s 3 containers, 1 network, 3 volumes Normal teardown; baseline restored
Mid-stand-up abort 37768 4 / fixed early Inconclusive stdout notice; no JSON archive 10.141 s 2 containers, 1 network, 3 volumes 13.985 s
Ready, execution in flight 45160 4 / INCONCLUSIVE scenario-completed archive 5.875 s 3 containers, 1 network, 3 volumes 4.860 s

Mid-stand-up EOF was recorded at 2026-10-23T08:05:57.603647Z, after two running owned containers and the owned network were observed, before any step started. The CLI printed:

vouchfx run: the run was shut down because stdin reached EOF or could not be read, which --shutdown-on-stdin-eof treats alike, before it reached a verdict. Stopping on either is what that flag arranges; it is not an engine or provider defect - there is nothing to report. Reported as Inconclusive (section 12.1).

This early catch produced no JSON archive: the notice and exit 4 are the outcome evidence, not an invented scenario event. The ready abort recorded EOF at 2026-10-23T08:07:51.986786Z, after all three owned containers were running and step-started was present; its archive contains the INCONCLUSIVE scenario-completed event.

The cleanup values are conservative observation upper bounds, not exact deletion instants. Maximum observed teardown sampling gaps were 0.828 s for mid-stand-up and 1.079 s for the ready abort. The latter exceeds the one-second observation target by 0.079 s; that target is unchanged. Neither gap changes the measured result against the unchanged 35-second grace: both child exit and confirmed owned-resource absence occurred inside it. Resources can disappear before process exit, as observed in the ready case.

Baseline and observer checks

The host baseline contained zero containers, three networks and eleven pre-existing volumes. After each accepted measurement, a 30-second settle check confirmed exact equality of global before/after resource IDs and states, with no extra resources. The whole-session baseline also matched exactly. Every recorded owned resource was absent, no new Ryuk container appeared, and no unrelated baseline resource was removed or changed.

Two earlier observer attempts are explicitly excluded from the passes above: one cancelled before the ownership network was observed and lacked phase evidence; the other failed with a ValueError during a Docker removal race. The corrected observer passed three mocked removal-race probes (exit 0). The control and the two accepted abort measurements establish the live result; the mocked probes validate observer handling, not engine cleanup.

Evidence fingerprints

Raw captures remain private: they contain host-specific data and are not publication artefacts. These SHA-256 fingerprints identify the retained raw reports without publishing their contents.

Report SHA-256
Control 0ea4c836e9d0427fc62a0ab97008b930fc7c87fbcacdb7a2a35689f5d09ddba1
Mid-stand-up e6f73169cf8bc1cb0752d554a0079b111079b5ccdb92520fe9da6f9972b3d261
Ready/in-flight 603a126c0735412df7f56f95d03993c66f7c731380606b22dcec36029b9c77b7