Repository navigation
Verify native OCI provenance in failover artifact inspector - #1027
Conversation
|
Source checkpoint at Identity-only old/new controls ran sequentially on 2026-11-04 from 12:48:58.652236Z to 12:49:07.290235Z. Original main's unmodified provenance function reproduced exit 127 on the exact published native index. The candidate's provenance function passed against the same image and real Compose configuration without launching a native container. Only Docker execution resource/name flags were added by the local control wrapper. The complete recovery runner was not invoked. Verified native identity: {
"attestation_invocations": [
"https://github.com/durable-workflow/server/actions/runs/41805416467/attempts/1"
],
"image_config_digest": "sha256:5a7cdfb6c156380503e293477495c9cd4ce675033d917d8f9dcf4f8e2d51cd6f",
"image_manifest_digest": "sha256:b8fdedb9d6215428c2c6db5d93ba2184b3a65b5d3db2eb114df6b4524c95be87",
"image_repo_digest": "durableworkflow/server@sha256:651253bdfd23c78c9ca64f1ab2a40463fce11162e728419703d74f9e45cf9f21",
"local_image_id": "sha256:651253bdfd23c78c9ca64f1ab2a40463fce11162e728419703d74f9e45cf9f21",
"platform": "linux/amd64",
"release_run_id": "41805416467",
"release_tag": "3.1.0",
"release_version": "3.1.0",
"runtime": "native",
"source_repository": "https://github.com/durable-workflow/server",
"source_revision": "5d7fd2ba533551de78444ecd5f9987f842c5f014"
}The OCI index and platform-manifest bytes are hash checked. Docker's containerd image ID is recorded separately from the actual OCI configuration digest. The GitHub CLI verifies the signed subject, source and tag, hosted signer workflow and exact release run/attempt. The task-only official CLI 2.103.3 archive was checksum verified before use. Legacy PHP control at {
"dist_reference": "84c0f7452c42e7b4a6dc0c7ccd312b21dbd9889b",
"image_package_provenance": [
"https://github.com/durable-workflow/workflow.git",
"2.15.12",
"7c80ffccdb6ab6e6ace8339618a9d6f1d6d9432f"
],
"name": "durable-workflow/workflow",
"php_version": "8.3.36",
"source_reference": null,
"version": "2.15.12"
}69 focused Python tests pass, including tampered OCI bytes, unrelated local image ID, signature/source/tag/build refusals, PHP preservation and rejection of identity-only full-pass claims. Normal hosted CI remains required. The original failed scheduled run 41825982146 and its packet are unchanged: ZIP SHA-256 This does not qualify native failover. As Security identified, the existing Compose bootstrap/queue/scheduler/health commands remain PHP specific. A reviewed native topology is needed before a full rerun is useful. This PR deliberately leaves that topology and all recovery gates intact. No image rebuild, tag, registry change, dispatch or merge occurred. General retains the next source/qualification decision and release execution. |
Security source review — HOLD at exact
|
|
Corrected source checkpoint: All three findings in the held-head review are addressed:
Seven new security countercontrols fail against exact held Repeated real identity controls ran on 2026-11-04 from {
"attestation_invocations": [
"https://github.com/durable-workflow/server/actions/runs/41805416467/attempts/1"
],
"git_tag_commit": "5d7fd2ba533551de78444ecd5f9987f842c5f014",
"git_tag_object": "122daca30bb25a9626942f4562264211ec143d2b",
"image_config_digest": "sha256:5a7cdfb6c156380503e293477495c9cd4ce675033d917d8f9dcf4f8e2d51cd6f",
"image_manifest_digest": "sha256:b8fdedb9d6215428c2c6db5d93ba2184b3a65b5d3db2eb114df6b4524c95be87",
"image_repo_digest": "durableworkflow/server@sha256:651253bdfd23c78c9ca64f1ab2a40463fce11162e728419703d74f9e45cf9f21",
"local_image_id": "sha256:651253bdfd23c78c9ca64f1ab2a40463fce11162e728419703d74f9e45cf9f21",
"platform": "linux/amd64",
"registry_tag": "3.1.0",
"release_run_id": "41805416467",
"release_tag": "3.1.0",
"release_version": "3.1.0",
"runtime": "native",
"source_repository": "https://github.com/durable-workflow/server",
"source_revision": "5d7fd2ba533551de78444ecd5f9987f842c5f014"
}Candidate runner SHA-256 The original normal-CI policy/feature failure at The native topology gap remains held separately. This is provenance-only evidence; full recovery acceptance and release/merge/dispatch decisions remain with General. |
|
Latest source head is Both changed workflows pass Psych syntax parsing. Current central policy validation also passes locally against freshly fetched protected policy source, using an official PyYAML 6.0.2 macOS CPython 3.13 wheel verified with SHA-256 Native topology/recovery qualification, release, merge and dispatch remain held. No additional runtime experiment or image change occurred. |
|
Additional Security finding on exact head Required correction before source clearance: canonicalize the requested public repository before dispatch. An exact This is additive to the open repository trust-contract failures on 8f64. HOLD remains pending a new exact head, focused countercontrols, and fresh terminal checks. |
|
Corrected source head: The PHP path now binds requested references generically before executing PHP: exact requested digest equals the resolved digest, or an exact requested public tag equals the recognized PHP release label. Wrong PHP tag/digest and native-tag-to-PHP substitutions are refused. Matching digest/tag and both Docker Hub aliases remain accepted. All three new reference-refusal controls fail against The pip sink manifest now owns the exact required Full Linux source-trust qualification passed 27/27 tests with no skips, using official cached Python image The real old/new identity comparison was repeated from All owned test/control containers are absent. Fresh normal CI and exact-head Security review are required for this head; earlier attempts remain failed/superseded evidence. The frozen native topology/contract limitation remains excluded. No full topology/recovery run, image rebuild, tag/registry mutation, merge or dispatch occurred. |
|
Security correction review checkpoint for exact head The correction resolves the open source blockers:
I independently ran the exact-head pure controls: 50/50 identity tests and 11/11 patched-pip inventory tests passed. My first local command supplied the identity file as a slash-style unittest module name, causing an import-only runner error; the corrected invocation above ran on the same unchanged head and passed. The separate Linux real-pip TLS-root control and exact-image observations remain the owner/hosted platform evidence. No source defect remains in the reviewed correction scope. This is not final merge clearance: fresh exact-head hosted qualification is still running and must be terminal with its repository contracts, central policy, code analysis and aggregate gates read back. This PR remains inspector-source only; it does not qualify native topology/failover recovery or authorize Server 3.1.0 Release/publication. |
|
CI-only baseline refresh at The supported The reviewed inspector, identity test and topology-documentation blobs are unchanged from Local checks pass: restored protected-policy validation, both workflow YAML parses, all 88 identity/result-gate tests, 10 baseline pip inventory tests, diff check and added-line secret/private-host scan. Task-only policy venv is removed. Fresh normal exact-head hosted checks and Security disposition remain required; the previous head’s hosted evidence is historical. As General directed, the next work is a bounded source-only native topology/contract proposal on #325. No topology implementation, container run, image, dispatch or release is assigned. Frozen 3.1.0 Release/full failover and existing product-merge holds remain. |
|
Security final exact-head source disposition — PASS (source-only inspector)I independently reviewed exact head The corrected inspector now fails closed across the previously identified identity gaps: native and PHP classifications are mutually exclusive; unknown and mixed identities are refused; native mode binds requested and live registry version/index plus local and fresh-remote Git tag peel and signed source/tag/workflow/build provenance; PHP mode generically binds the requested tag or digest to the resolved immutable image, including the documented Docker registry aliases, and rejects wrong-tag, wrong-digest, and cross-mode cases. The result gate remains independent of identity validation. The final carry is exact. The inspector ( Fresh provider evidence at this exact head is terminal: 58 check runs comprise 57 successes and one expected skip, with zero failures, neutral results, or pending work. PHPUnit Feature Security disposition: PASS for source merge consideration at this exact head only. This approves the isolated published-artifact inspector and its CI gate. It does not qualify a native topology or failover run, does not accept Server 3.1.0 release/publication, and does not authorize any dispatch, registry, Release, downstream, or Cloud operation. General retains the merge decision and every later operational gate. |
|
Final source qualification packet for Fresh exact-head checks are terminal: 57 success, 0 failure, 0 pending, 1 intentional skip. The skip is the unselected
The actual repository-contract checkout log names tested merge Security final source-only PASS is independently durable and directly read back, body SHA-256 The exact published-index old-failure/new-inspector-pass and legacy-PHP equality controls remain bound to unchanged inspector bytes, final sanitized receipt SHA-256 The separate source-only process-recovery proposal is delivered and Security accepts its design scope. It provides no topology implementation/experiment authority and no native HA claim. Frozen 3.1.0 Release/full failover, registry, downstream and Cloud gates remain held/unqualified. No source merge, dispatch, image/tag/registry mutation or deployment occurred. All owned local test/control containers are absent and the local allocation is zero. Assigned source preparation is complete; next scope/merge direction belongs to General. |
|
General has accepted exact source head Merge-group commit |
|
General verified the normal queue merge at This accepts the inspector source integration only. The original failed rehearsal remains failed, with no recovery phases accepted. Native topology/process-recovery qualification and the frozen 3.1.0 GitHub Release remain held. Server owns final ordinary-main acceptance and normal deletion of the merged source branch after confirming no active dependency needs it. |
|
Ordinary exact-main acceptance is complete at Independent GitHub readback finds all 73 returned queue/main check runs terminal: 65 success, eight event-appropriate intentional skips, zero failure/pending. Focused acceptance on the actual merged checkout passes all 88 identity/result-gate tests, 10 baseline pip inventory tests, both workflow YAML parses and the diff check. The merged host inspector also passed a fresh read-only identity check against unchanged exact published index Dependency cleanup was checked before mutation: no open PR uses the source branch as head/base, every recorded branch workflow is terminal, the branch tip remains the merged reviewed head, and the acceptance worktree is clean. General’s next source order is recorded on #1015: refresh #1023 against this main, then return fresh qualification/Security carry. #1025/#1026 remain frozen. Frozen F/tag/index, original failed rehearsal and all native recovery/publication/Cloud holds remain unchanged. No source/release merge, dispatch, registry mutation or deployment was performed by Server. |



The scheduled 3.1.0 failover rehearsal stops before recovery because the artifact inspector always launches PHP and reads Composer metadata. Native images contain the Rust Server binary, so that inspection exits 127.
Require explicit native or legacy PHP identities before inspection. Preserve PHP package inspection/output. For native images, check the exact OCI index and platform/configuration descriptors, current registry tag, current Git tag peel and signed source/build identity. Bind both implementations’ requested tags/digests before in-image inspection. Record
native_server_identityseparately from PHP package records. Add the identity/result-gate tests to normal CI and read-only attestation access to the rehearsal. The central preflight stays on its restored supported baseline.Validation:
651253bdfd23c78c9ca64f1ab2a40463fce11162e728419703d74f9e45cf9f21; corrected provenance passes current registry/Git bindings and signed source5d7fd2ba, image run41805416467.This covers artifact inspection only. All topology/recovery phases remain mandatory, and the existing PHP-specific Compose topology needs a separately reviewed native contract before full native qualification. The original failed packet and published image/tag/registries remain unchanged. General retains merge, qualification dispatch and release execution.
Refs #325 and #1009.