12 KiB
Worker Operator Experience Validation - 2026-09-24
Scope and acceptance
This report closes the release and production-proof work for OpenSpec change
add-worker-operator-experience. Validation covered the shared worker event
contract, local supervisor and contained runner, progress and diagnostics APIs,
admin projections, reproducible Windows and Linux packages, packaged
cross-platform operation, bounded production behavior, and final restoration.
Acceptance required:
- the focused unit, integration, protocol, and package matrix to pass;
- independently reproducible Windows and Linux artifacts with documented and registered package manifests;
- packaged Windows/Linux evidence for multi-slot operation, outage and restart recovery, durable bundles and receipts, shutdown, and local cleanup;
- bounded production evidence for progress, a full scan-stage timeout, diagnostics, reconciliation, and restoration; and
- a from-zero operator runbook covering acquisition through removal.
No production assignment was repeated to prepare this report. All production facts below are derived from the retained validation snapshots. Raw targets, findings, credentials, private routes, runtime configuration, and authenticated worker command lines are intentionally excluded.
Focused test matrix
The final 14-file worker-operator matrix completed on 2026-09-25:
355 passed, 3 skipped in 49.54s
The matrix includes worker API/runtime, assignment and contained-runner, CLI/contracts/local state, observability persistence, package, Linux handoff, supervisor, remote database, scan execution, and admin API coverage. The three independent-watchdog timing regressions also passed after their test setup bounds were stabilized. The timing change did not alter product deadlines or watchdog behavior.
An unrestricted repository-wide test run is not a release gate for this change: the checkout has unrelated missing private/generated assets and platform assumptions. The focused matrix, packaged E2E, production evidence, and strict OpenSpec validation are the scoped gates.
Reproducible artifacts
Windows portable package
Final independently built archives:
build/operator-experience-validation/windows-i.zipbuild/operator-experience-validation/windows-j.zip
Both archives have the following identical identities:
| Identity | Value |
|---|---|
| Archive bytes | 134850988 |
| Archive SHA-256 | 6ea9290736a059f1e17d8e89d9cf83506fa4abe2ba2f3731a7422a7b0f386e97 |
| Package manifest identity | 78a962b2bd3fa411413c79e9a8ffb021608a08ff020b1ad851f4505ea634b2b6 |
| Build-input identity | 6991ebbce6ae758c2bdd19a6ae934335aa585a50f86b18ccde8d88bca40ce436 |
Raw worker-package.json SHA-256 |
e0b17d70fcb868fe39fac45ab6e05a17c6d40852e6034010fb63b6cab31f8a3c |
Acceptance used the fresh extraction at build/pwe-final-i-extracted. Its own
prepare-worker.ps1 established protected explicit ACLs before direct package
verification. Older G/H Windows archives are excluded because their preparation
script could leave packaged executables inaccessible.
Linux worker image
Final independently built local tags:
truf-worker-test:operator-experience-final-3gtruf-worker-test:operator-experience-final-3h
Both provenance-disabled builds have the following identical identities:
| Identity | Value |
|---|---|
| Worker package identity | 45588f2cf406b41b239cfa3b8a9dc83fe84b587229bc997b2729016e1f0dde42 |
| Image manifest / accepted image ID | sha256:3a088f5743121d823aae132234a29730a84339cecbfda5fc601e8e942f9948c3 |
| Config SHA-256 | sha256:687a1c4c51c1b962c7fa7ea0cc4b04d159e7ba4f94ef347940c9fb225f7cb87d |
Raw worker-package.json SHA-256 |
ee926cce3c19e9e6094753f51fa902415bd7364c24fa649cd0c1b659c0aa4d60 |
The retained manifest snapshot is
build/operator-experience-validation/linux-worker-package-g.json.
Trusted manifest registration
The accepted Linux and Windows manifests were registered after packaged E2E
acceptance. Their remote SHA-256 values match the raw manifest hashes above.
Both files are owned by root:root with mode 0644; pre-change backups remain
intact and upload temporary files were removed. Registration required no runtime
restart or configuration mutation, and canonical health remained successful.
Packaged Windows/Linux E2E
Run 35f3f52e232067c1 passed with the freshly extracted/prepared Windows I
package and Linux G image. The safe summary is
build/pwe-35f3f52e232067c1/summary.json.
The gate confirmed:
- real packaged Windows and Linux operation at two slots;
- server outage handling and restart recovery;
- durable and direct assignment bundle paths;
- authoritative receipt handling;
- graceful shutdown receipts;
- no active local work after completion while intentionally retained abandoned roots remained inactive;
- matching normalized cross-platform evidence; and
- complete cleanup of owned resources with foreign Docker state unchanged.
Production evidence
Reconciliation
The retained snapshot records 34 issued assignments: 33 accepted and one intentional expected expiry. All 33 accepted bundles were ingested, settled, and projected. Final unresolved, precommit, quarantine, and drain-blocker counts were zero.
Evidence sources:
build/operator-experience-validation/final-evidence.jsonbuild/operator-experience-validation/progress-v3-evidence.jsonbuild/operator-experience-validation/timeout-evidence.jsonbuild/operator-experience-validation/server-baseline.json
Duration percentiles
The table reports every retained end-to-end metric group. Values are seconds.
Sufficient means the server-side minimum sample count of five was met. Rows
below that minimum are retained observations, not statistically sufficient
percentile estimates.
| Platform | Source | Outcome | Samples | p50 | p95 | p99 | Sufficient |
|---|---|---|---|---|---|---|---|
| Linux | DockerHub | degraded | 1 | 305 | 305 | 305 | no |
| Linux | DockerHub | error | 1 | 19 | 19 | 19 | no |
| Linux | GitLab | error | 1 | 5371 | 5371 | 5371 | no |
| Linux | HuggingFace | expired | 1 | 7219 | 7219 | 7219 | no |
| Windows | DockerHub | clean | 2 | 31 | 31.9 | 31.98 | no |
| Windows | DockerHub | degraded | 4 | 275.5 | 443.45 | 462.29 | no |
| Windows | DockerHub | error | 7 | 619 | 1679.5 | 1731.1 | yes |
| Windows | GitLab | clean | 3 | 27 | 873 | 948.2 | no |
| Windows | GitLab | error | 6 | 342.5 | 1723.75 | 1916.75 | yes |
| Windows | HuggingFace | clean | 1 | 1019 | 1019 | 1019 | no |
| Windows | HuggingFace | error | 7 | 971 | 3092.6 | 3452.12 | yes |
The snapshot contains 11 Linux and 21 Windows phase/outcome metric groups in total. Three Windows end-to-end error groups met the minimum; the other 29 phase/outcome groups did not. Rollout decisions must therefore preserve the sample-count qualification rather than treating all reported percentiles as stable capacity estimates.
Progress and watchdog evidence
Reservation 1455 is the retained complete-stage progress reference. It was
acknowledged with an accepted bundle and persisted ten monotonic events spanning
assigned, preparing, waiting_permit, scanning, filtering, cleaning,
bundling, uploading, and awaiting_receipt. This demonstrates one coherent
server-visible sequence across the complete local execution and upload boundary.
Independent watchdog fault-injection coverage passed for blocked state persistence, startup-gate persistence, and event draining. The contained runner tests verify bounded process-tree termination rather than relying on scanner cooperation. Packaged E2E additionally passed its watchdog, restart, durable bundle, and cleanup gates.
Natural full-stage timeout
Reservation 1453 is the retained natural timeout reference. The scan ended
with one timeout / scan.stage_timeout / scanning diagnostic after 603.367
seconds. The diagnostic was current and available, with no body or process-log
payload fabricated for the exception. The end-to-end assignment-resolution
duration was 619 seconds.
The scan outcome was error, while the transport outcome was independently
accepted: the bundle was acknowledged, the projection completed, and the
diagnostic was attached to the authoritative result. This confirms that a hard
scan-stage timeout remains a normal, uploadable terminal result and does not
collapse scan, transport, and projection outcomes into one status.
Diagnostic and admin snapshots
The final diagnostic aggregate contains five grouped rows and 23 occurrences:
| Category | Code | Phase | Occurrences |
|---|---|---|---|
| scanner | scan.result_error |
scanning |
20 |
| timeout | scan.stage_timeout |
scanning |
1 |
| assignment expiry | assignment.deadline_expired |
assigned |
1 |
| network | scan.result_error |
scanning |
1 |
The retained snapshots also confirm separate assignment and scan outcomes, ordered progress, current diagnostic availability, accepted receipt state, ingestion/settlement/projection completion, duration metrics, and zero unresolved or precommit work. This is the durable machine-readable substitute for copying private admin pages or unbounded diagnostic bodies into the report.
Sanitized operator transcript
The release and validation sequence was:
- Build the Windows package twice from the same reviewed inputs and compare the archive, package-manifest, build-input, and raw-manifest identities.
- Extract Windows I into a fresh directory, run its packaged
prepare-worker.ps1, and run direct package verification. - Build Linux G and H independently with provenance disabled and compare image, config, package, and raw-manifest identities.
- Run
docker/verify_packaged_workers.pywith the accepted Windows extraction, Linux image, and isolated test image; retain only its safe summary and owned evidence directory. - Register the two accepted trusted manifests through the reviewed deployment path and recheck canonical runtime health.
- Use typed operations to bound production dispatch, start at assignment cap
1, observe status/attach/history and server progress, exercise normal, timeout, outage, and restart paths, and reconcile accepted, ingested, settled, and projected counts. - Restore standard identities and normal/open controls, disable/revoke temporary validation identities, and recheck runtime and edge health.
- Run the exact focused pytest matrix recorded above.
Authentication values, worker argv, raw targets/findings, private route names, and runtime configuration are omitted by design.
Known limits
- There is no public ZIP download, image registry, installer, or automatic updater. Release artifacts must move through a trusted channel and match a server-registered manifest.
- Completed runner roots move under top-level
work/abandonedand are retained for at least 60 seconds; normal retention maintenance runs every 300 seconds. They are inactive evidence, not live work. - Most retained percentile groups have fewer than five samples. Their values are useful validation observations but not stable performance baselines.
- Ownership fencing guarantees one authoritative acceptance, not exactly-once physical execution across a long partition and server-side expiry/reissue.
- Local state remains recovery authority until the server resolves the slot. Operators must not remove pending bundles or work trees to clear an alert.
Rollout, rollback, and restoration
Rollout uses the exact accepted package identities, begins with one user/device at
server cap 1 and local parallelism 1, and requires one accepted, ingested,
settled, and projected assignment before expansion. Caps and client count should
increase in stages while unresolved/precommit counts, diagnostic availability,
duration sample counts, and authenticated contact remain observable.
Rollback first sets the affected cap to 0, allows pending uploads to resolve,
and obtains a graceful shutdown receipt. The operator then returns to the
previous exact artifact while preserving the same private state tree or volume.
Additive server progress and diagnostic records do not require schema rollback.
Final restored production state:
- operations controls normal/open at revision
126; - standard WSL production worker user enabled at assignment cap
1; - standard production device enabled and not revoked;
- temporary validation identities disabled/revoked;
- unresolved, precommit, quarantine, and drain blockers at zero;
- canonical runtime healthy; and
- edge service remained available.
Strict OpenSpec validation passed. The operationally validated change is ready for archival.