Skip to content

feat(wfctl): bounded pipeline records and registry reports - #1020

Merged
intel352 merged 1 commit into
mainfrom
wfctl-pipeline-registry-reports
Oct 3, 2026
Merged

intel352 merged 1 commit into
mainfrom
wfctl-pipeline-registry-reports

Conversation

@intel352

@intel352 intel352 commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Add executable, bounded pipeline records and deterministic registry-sync reports for the approved Signal ecosystem prerequisites. Human pipeline mode remains available; record mode is a Linux/macOS step-only contract, not an untrusted native-plugin sandbox.

Changes

  • Load only the selected static pipeline/plugin closure in record mode, including all six supported composites, compensation, and literal workflow calls. Reject dynamic/unsupported boundaries, identity/catalog collisions, fragments, and error skipping before execution.
  • Supervise the real engine and SDK plugins with private framed IPC, bounded capture, process-group custody, and owner-only crash-recovery journals. Broker strict Docker sandbox operations through the parent with pinned daemon identity and exact empty cleanup readback.
  • Enforce configurable HTTP pre-read limits, exact bounded webhook HMAC bytes, and the six-field JSON-safe external RPC metadata allowlist. Resolve sandbox command/env values at execution, enforce strict isolation, and propagate nonzero execution errors.
  • Add exact stable registry targets and number-free canonical operation reports binding immutable release/source/assets/checksums, Git trees, changed paths, and diff bytes. Preserve no-op file identity and Git clean-filter semantics.
  • Add actual-host SDK, composite, cancellation, parent-SIGKILL, strict live-container, and CLI registry fixtures. Downloaded-binary selectors fail closed without source-build fallback; Linux registry fixtures retain the default GitHub API endpoint through local CONNECT/TLS substitution.

Design And Scope

Accepted implementation plan
and locked umbrella.

PR Count: 34
Tasks: 41
This PR: Group 14, Task 35, wfctl-pipeline-registry-reports.

This PR does not complete the umbrella, contact the official Signal service, or resume the deferred Encrypted Spaces proof work. Task 35's release/tag/checksum and downloaded-binary reruns remain mandatory after merge; downstream consumers stay blocked until those gates pass.

Verification

Pinned GOWORK=off GOTOOLCHAIN=go1.26.5:

  • Changed-package race suite: PASS, wfctl 482.940s, runtime packages green.
  • Core engine and builtin plugin race suites: PASS.
  • golangci-lint run across changed packages: 0 issues; go vet: PASS.
  • Windows amd64 cross-compilation: PASS. This is build evidence, not Windows runtime evidence.
  • Real SDK and seven-case crash matrix: PASS; stdout-capture removal and SIGPIPE regressions demonstrate false-success/orphan failures before restoration.
  • Registry CLI on macOS and Linux: forward/no-op/rollback and 30 rejection cases PASS; release-snapshot mutation produces failures and changed-state detection.

Runtime Launch Evidence

The actual built CLI ran both real-Docker host tests, including a digest-pinned BusyBox strict sandbox: PASS, 57.061s. The container checked UID/GID 65532, dropped capabilities, no-new-privileges, read-only root, credential absence, non-executable /tmp, owner-only /work, and a caller-supplied value round-trip. Final cleanup journal was empty; the daemon's wfctl.pipeline.cleanup label query returned no containers.

GOWORK=off GOTOOLCHAIN=go1.26.5 \
  WFCTL_RECORD_HOST_LIVE_DOCKER=1 \
  WFCTL_RECORD_HOST_LIVE_IMAGE=busybox@sha256:bdf57e528e45e4433820e045b29b4597825a1c9e38353532d90a01445013f82e \
  go test ./cmd/wfctl \
    -run '^TestPipelineRecordHostLiveDocker(Builtin|Sandbox)$' -count=1

Transport fixtures do not prove container execution or live GitHub release immutability. The explicit real-container tests provide the sandbox evidence. Source-built and macOS linker-API fixtures do not prove downloaded release conformance.

Doc-reconciliation: clean.

CI and downloaded-release verification: pending; no runner/trust-policy changes.

Automation must not treat stopped errors or leaked stdout as success. Supervise pipeline actors, broker strict sandboxes, and retain recovery state until exact cleanup is proven. Bind registry changes to reread immutable release identity and canonical Git tree reports.
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown

⏱ Benchmark Results

✅ No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:310: parsing iteration count: invalid syntax
baseline-bench.txt:303080: parsing iteration count: invalid syntax
baseline-bench.txt:648189: parsing iteration count: invalid syntax
baseline-bench.txt:970459: parsing iteration count: invalid syntax
baseline-bench.txt:1260257: parsing iteration count: invalid syntax
baseline-bench.txt:1571553: parsing iteration count: invalid syntax
benchmark-results.txt:310: parsing iteration count: invalid syntax
benchmark-results.txt:314969: parsing iteration count: invalid syntax
benchmark-results.txt:584817: parsing iteration count: invalid syntax
benchmark-results.txt:879529: parsing iteration count: invalid syntax
benchmark-results.txt:1175075: parsing iteration count: invalid syntax
benchmark-results.txt:1450071: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 7763 64-Core Processor                
                            │ baseline-bench.txt │       benchmark-results.txt        │
                            │       sec/op       │    sec/op     vs base              │
InterpreterCreation-4               7.637m ± 59%   7.816m ± 58%       ~ (p=0.699 n=6)
ComponentLoad-4                     3.684m ± 10%   3.601m ±  1%  -2.24% (p=0.026 n=6)
ComponentExecute-4                  1.983µ ±  2%   1.961µ ±  1%       ~ (p=0.061 n=6)
PoolContention/workers-1-4          1.095µ ±  2%   1.107µ ±  2%       ~ (p=0.818 n=6)
PoolContention/workers-2-4          1.116µ ±  4%   1.080µ ±  2%  -3.18% (p=0.006 n=6)
PoolContention/workers-4-4          1.105µ ±  1%   1.087µ ±  1%  -1.67% (p=0.002 n=6)
PoolContention/workers-8-4          1.105µ ±  3%   1.092µ ±  2%  -1.18% (p=0.022 n=6)
PoolContention/workers-16-4         1.115µ ±  3%   1.099µ ±  5%       ~ (p=0.225 n=6)
ComponentLifecycle-4                3.731m ±  4%   3.636m ±  0%  -2.53% (p=0.002 n=6)
SourceValidation-4                  2.325µ ±  1%   2.303µ ±  1%  -0.97% (p=0.011 n=6)
RegistryConcurrent-4                821.6n ±  4%   807.9n ±  2%       ~ (p=0.240 n=6)
LoaderLoadFromString-4              3.671m ±  2%   3.648m ±  4%       ~ (p=0.132 n=6)
geomean                             19.15µ         18.93µ        -1.11%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.513 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.485 n=6)
ComponentExecute-4                  1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-1-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-2-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-4-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-8-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-16-4         1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
ComponentLifecycle-4                2.183Mi ± 0%   2.183Mi ± 0%       ~ (p=0.461 n=6)
SourceValidation-4                  1.984Ki ± 0%   1.984Ki ± 0%       ~ (p=1.000 n=6) ¹
RegistryConcurrent-4                1.133Ki ± 0%   1.133Ki ± 0%       ~ (p=1.000 n=6) ¹
LoaderLoadFromString-4              2.182Mi ± 0%   2.182Mi ± 0%       ~ (p=0.968 n=6)
geomean                             15.25Ki        15.25Ki       +0.00%
¹ all samples are equal

                            │ baseline-bench.txt │        benchmark-results.txt        │
                            │     allocs/op      │  allocs/op   vs base                │
InterpreterCreation-4                15.68k ± 0%   15.68k ± 0%       ~ (p=1.000 n=6)
ComponentLoad-4                      18.02k ± 0%   18.02k ± 0%       ~ (p=1.000 n=6)
ComponentExecute-4                    25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-1-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-2-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-4-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-8-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-16-4           25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
ComponentLifecycle-4                 18.07k ± 0%   18.07k ± 0%       ~ (p=1.000 n=6) ¹
SourceValidation-4                    32.00 ± 0%    32.00 ± 0%       ~ (p=1.000 n=6) ¹
RegistryConcurrent-4                  2.000 ± 0%    2.000 ± 0%       ~ (p=1.000 n=6) ¹
LoaderLoadFromString-4               18.06k ± 0%   18.06k ± 0%       ~ (p=1.000 n=6) ¹
geomean                               183.3         183.3       +0.00%
¹ all samples are equal

pkg: github.com/GoCodeAlone/workflow/middleware
                                  │ baseline-bench.txt │       benchmark-results.txt       │
                                  │       sec/op       │   sec/op     vs base              │
CircuitBreakerDetection-4                  292.8n ± 3%   290.5n ± 0%       ~ (p=0.223 n=6)
CircuitBreakerExecution_Success-4          22.51n ± 1%   22.54n ± 1%       ~ (p=0.699 n=6)
CircuitBreakerExecution_Failure-4          66.71n ± 0%   66.24n ± 1%  -0.70% (p=0.002 n=6)
geomean                                    76.04n        75.69n       -0.46%

                                  │ baseline-bench.txt │       benchmark-results.txt        │
                                  │        B/op        │    B/op     vs base                │
CircuitBreakerDetection-4                 144.0 ± 0%     144.0 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Success-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Failure-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                              ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                  │ baseline-bench.txt │       benchmark-results.txt        │
                                  │     allocs/op      │ allocs/op   vs base                │
CircuitBreakerDetection-4                 1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Success-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Failure-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                              ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/module
                                 │ baseline-bench.txt │       benchmark-results.txt        │
                                 │       sec/op       │    sec/op     vs base              │
IaCStateBackend_InProcess-4              331.9n ± 34%   315.4n ± 31%       ~ (p=0.240 n=6)
IaCStateBackend_GRPC-4                   9.461m ± 11%   9.273m ±  2%       ~ (p=0.093 n=6)
JQTransform_Simple-4                     680.6n ± 40%   664.3n ± 38%       ~ (p=0.310 n=6)
JQTransform_ObjectConstruction-4         1.574µ ±  6%   1.523µ ±  1%  -3.21% (p=0.002 n=6)
JQTransform_ArraySelect-4                3.585µ ±  4%   3.492µ ±  3%  -2.59% (p=0.026 n=6)
JQTransform_Complex-4                    41.09µ ±  3%   39.51µ ±  1%  -3.85% (p=0.002 n=6)
JQTransform_Throughput-4                 1.913µ ±  4%   1.855µ ±  1%  -3.06% (p=0.004 n=6)
SSEPublishDelivery-4                     65.19n ±  1%   70.90n ±  0%  +8.77% (p=0.002 n=6)
geomean                                  3.971µ         3.901µ        -1.74%

                                 │ baseline-bench.txt │         benchmark-results.txt         │
                                 │        B/op        │     B/op       vs base                │
IaCStateBackend_InProcess-4             416.0 ±  0%       416.0 ±  0%       ~ (p=1.000 n=6) ¹
IaCStateBackend_GRPC-4                5.882Mi ± 12%     5.756Mi ± 14%       ~ (p=0.937 n=6)
JQTransform_Simple-4                  1.273Ki ±  0%     1.273Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4      1.773Ki ±  0%     1.773Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4             2.625Ki ±  0%     2.625Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                 16.31Ki ±  0%     16.31Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4              1.984Ki ±  0%     1.984Ki ±  0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                    0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=6) ¹
geomean                                             ²                  -0.27%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │        benchmark-results.txt        │
                                 │     allocs/op      │  allocs/op   vs base                │
IaCStateBackend_InProcess-4              2.000 ± 0%      2.000 ± 0%       ~ (p=1.000 n=6) ¹
IaCStateBackend_GRPC-4                  6.841k ± 0%     6.838k ± 0%       ~ (p=0.794 n=6)
JQTransform_Simple-4                     10.00 ± 0%      10.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4         15.00 ± 0%      15.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4                30.00 ± 0%      30.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                    328.0 ± 0%      328.0 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4                 17.00 ± 0%      17.00 ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%      0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²                -0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/schema
                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │       sec/op       │    sec/op     vs base              │
SchemaValidation_Simple-4                    1.111µ ± 5%   1.108µ ± 18%       ~ (p=0.732 n=6)
SchemaValidation_AllFields-4                 1.684µ ± 8%   1.655µ ±  3%  -1.75% (p=0.026 n=6)
SchemaValidation_FormatValidation-4          1.602µ ± 3%   1.566µ ±  5%       ~ (p=0.067 n=6)
SchemaValidation_ManySchemas-4               1.798µ ± 2%   1.797µ ±  4%       ~ (p=0.937 n=6)
geomean                                      1.523µ        1.507µ        -1.07%

                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │        B/op        │    B/op     vs base                │
SchemaValidation_Simple-4                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_AllFields-4                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_FormatValidation-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_ManySchemas-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │     allocs/op      │ allocs/op   vs base                │
SchemaValidation_Simple-4                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_AllFields-4                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_FormatValidation-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_ManySchemas-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/store
                                   │ baseline-bench.txt │       benchmark-results.txt        │
                                   │       sec/op       │    sec/op     vs base              │
EventStoreAppend_InMemory-4                1.249µ ± 14%   1.216µ ± 15%       ~ (p=0.699 n=6)
EventStoreAppend_SQLite-4                  1.187m ±  8%   1.208m ±  3%       ~ (p=0.310 n=6)
GetTimeline_InMemory/events-10-4           14.57µ ±  4%   14.27µ ±  6%       ~ (p=0.394 n=6)
GetTimeline_InMemory/events-50-4           81.29µ ±  4%   79.09µ ±  2%  -2.71% (p=0.009 n=6)
GetTimeline_InMemory/events-100-4          162.8µ ± 23%   159.5µ ± 22%       ~ (p=0.240 n=6)
GetTimeline_InMemory/events-500-4          648.2µ ±  3%   635.6µ ±  2%  -1.94% (p=0.009 n=6)
GetTimeline_InMemory/events-1000-4         1.334m ±  2%   1.301m ±  1%  -2.47% (p=0.002 n=6)
GetTimeline_SQLite/events-10-4             71.40µ ±  2%   69.47µ ±  1%  -2.70% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4             207.6µ ±  2%   200.3µ ±  2%  -3.48% (p=0.009 n=6)
GetTimeline_SQLite/events-100-4            366.8µ ±  1%   356.8µ ±  2%  -2.73% (p=0.002 n=6)
GetTimeline_SQLite/events-500-4            1.675m ±  5%   1.615m ±  1%  -3.59% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4           3.285m ±  2%   3.184m ±  1%  -3.07% (p=0.002 n=6)
geomean                                    210.1µ         205.2µ        -2.31%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                  824.5 ± 9%     794.0 ± 4%       ~ (p=0.416 n=6)
EventStoreAppend_SQLite-4                  2.056Ki ± 2%   2.052Ki ± 2%       ~ (p=0.156 n=6)
GetTimeline_InMemory/events-10-4           7.953Ki ± 0%   7.953Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4           46.62Ki ± 0%   46.62Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4          94.48Ki ± 0%   94.48Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4          472.8Ki ± 0%   472.8Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_InMemory/events-1000-4         944.3Ki ± 0%   944.3Ki ± 0%  -0.00% (p=0.045 n=6)
GetTimeline_SQLite/events-10-4             15.59Ki ± 0%   15.59Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4             80.56Ki ± 0%   80.56Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4            162.1Ki ± 0%   162.1Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4            777.4Ki ± 0%   777.4Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_SQLite/events-1000-4           1.503Mi ± 0%   1.503Mi ± 0%       ~ (p=0.545 n=6)
geomean                                    65.56Ki        65.34Ki       -0.33%
¹ all samples are equal

                                   │ baseline-bench.txt │        benchmark-results.txt        │
                                   │     allocs/op      │  allocs/op   vs base                │
EventStoreAppend_InMemory-4                  7.000 ± 0%    7.000 ± 0%       ~ (p=1.000 n=6) ¹
EventStoreAppend_SQLite-4                    55.00 ± 0%    55.00 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-10-4             125.0 ± 0%    125.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4             653.0 ± 0%    653.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4           1.306k ± 0%   1.306k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4           6.514k ± 0%   6.514k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-1000-4          13.02k ± 0%   13.02k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-10-4               316.0 ± 0%    316.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4              1.486k ± 0%   1.486k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4             2.940k ± 0%   2.940k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4             14.79k ± 0%   14.79k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-1000-4            29.80k ± 0%   29.80k ± 0%       ~ (p=1.000 n=6) ¹
geomean                                     1.065k        1.065k       +0.00%
¹ all samples are equal

Benchmarks run with go test -bench=. -benchmem -count=6.
Regressions ≥ 20% are flagged. Results compared via benchstat.

@intel352

intel352 commented Oct 3, 2026

Copy link
Copy Markdown
Contributor Author

All 25 CI checks passed on 56b95de. Independent design/code review has no unresolved Critical or Important findings; final test-harness corrections passed focused race verification. Copilot review was requested with both the required reviewer login and the CLI-supported alias, but no review or threads have arrived. Using maintainer-preapproved admin merge for the outstanding review requirement. Task 35 remains open until main CI, exact release/tag/checksum, and downloaded-binary verification pass; downstream work remains gated.

@intel352
intel352 merged commit 6d3cf77 into main Oct 3, 2026
27 checks passed
@intel352
intel352 deleted the wfctl-pipeline-registry-reports branch October 3, 2026 17:01
@intel352

intel352 commented Oct 3, 2026

Copy link
Copy Markdown
Contributor Author

Post-merge checkpoint: newer main 49e1803 includes this PR and independently merged IaC PR #1021. Named main CI and snapshot now pass; exact original merge CI hit the aggregate 600s wfctl race/coverage ceiling twice, after the new runtime matrices passed. Full OSV findings match the prior baseline exactly, but include inherited shipped Go/UI exposure; this is not a clean security scan. A separately scoped maintenance design is on fix/workflow-release-security-20261003, preserving scanner failure policy and the staged trust lifecycle. Concurrent v0.86.1 is immutable and not retagged. Task 35 downloaded-release verification and patched-consumer promotion remain pending.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant