Files
truf-server/docs/worker-operator-experience-validation-2026-09-24.md
2026-09-30 20:30:56 +03:00

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.zip
  • build/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-3g
  • truf-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.json
  • build/operator-experience-validation/progress-v3-evidence.json
  • build/operator-experience-validation/timeout-evidence.json
  • build/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:

  1. Build the Windows package twice from the same reviewed inputs and compare the archive, package-manifest, build-input, and raw-manifest identities.
  2. Extract Windows I into a fresh directory, run its packaged prepare-worker.ps1, and run direct package verification.
  3. Build Linux G and H independently with provenance disabled and compare image, config, package, and raw-manifest identities.
  4. Run docker/verify_packaged_workers.py with the accepted Windows extraction, Linux image, and isolated test image; retain only its safe summary and owned evidence directory.
  5. Register the two accepted trusted manifests through the reviewed deployment path and recheck canonical runtime health.
  6. 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.
  7. Restore standard identities and normal/open controls, disable/revoke temporary validation identities, and recheck runtime and edge health.
  8. 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/abandoned and 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.