Skip to content

ci: remove public DigitalOcean automation#1010

Merged
intel352 merged 11 commits into
mainfrom
codex/remove-public-do-live-ci
Jul 14, 2026
Merged

ci: remove public DigitalOcean automation#1010
intel352 merged 11 commits into
mainfrom
codex/remove-public-do-live-ci

Conversation

@intel352

@intel352 intel352 commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

What changed

  • removes the DigitalOcean conformance, budget, leak-scrubber, cleanup, dispatch, and obsolete release automation from the public Workflow repository
  • removes publisher-secret callbacks, named-secret use, self-hosted runners, OIDC/cloud credential paths, and private Git dependency authority from active public Actions
  • makes active Actions GitHub-hosted and credential-free apart from the automatic github.token, with explicit effective least-privilege permissions
  • adds a fail-closed trusted-base public-workflow policy, sealed action/command/executable/presence authority, mutation fixtures, and branch/tag protection verification
  • keeps OSV, dependency update, release, prerelease, benchmark, and CI behavior on explicit reviewed GitHub-hosted paths

Why

Workflow is the provider-neutral framework. DigitalOcean ownership and any live provider validation belong in the DigitalOcean plugin repository, and public repositories must not dispatch workloads to private/self-hosted infrastructure or hold cloud credential authority.

This is the bootstrap policy PR. The trusted-base policy and required branch check will be enabled on main immediately after merge.

Impact

No Workflow package/API release is created by this CI-only change. Provider-specific runtime migration follows in separate locked PRs. Public Actions remain available without named secrets or live cloud access.

Validation

  • independent spec review: approved
  • independent full-range quality review: approved
  • ./scripts/check-public-workflow-policy.sh (11 workflows)
  • full mutation/lifecycle harness, including two concurrent runs with unchanged production checkout
  • policytool go test -count=1 -race ./..., go vet ./..., and clean build
  • Actionlint, ShellCheck, bash -n, JSON parsing, and git diff --check
  • fresh uncached serialized GOWORK=off GOFLAGS=-mod=readonly go test -count=1 -p=1 ./...
  • locked-plan scope verification

CI follow-up evidence

The first PR run exposed a real differential OSV finding in the new isolated policy tool: Go 1.26.4 included GO-2026-4970 and GO-2026-5856. Active/current repository toolchain declarations now use Go 1.26.5, and a fresh policytool govulncheck ./... reports no vulnerabilities.

Review also identified a list/delete race in snapshot cleanup. Cleanup now enumerates release IDs through the GitHub API, validates the entire result before mutation, deletes both releases and encoded Git tag refs, treats only HTTP 404 as an already-completed concurrent deletion, and propagates authorization, rate-limit, server, malformed-status, list, and tag failures.

TDD regression proof:

With cleanup fix reverted:
$ ./scripts/test-check-public-workflow-policy.sh
FAIL — snapshot cleanup success did not delete both the release and tag ref

With Go pin reverted:
$ ./scripts/test-check-public-workflow-policy.sh
FAIL — active/current Go pins still reference vulnerable Go 1.26.4

With both fixes restored:
$ ./scripts/test-check-public-workflow-policy.sh
PASS — public workflow policy fixtures passed

Additional causal mutations proved that removing --include, using raw #/%// tag paths, changing the exact list endpoint, or processing a valid row before a later malformed row all fail the harness.

CI portability regression evidence

The prior GitHub-hosted policy job failed because the mutation harness invoked rg, which is not installed on the stock runner. The harness now uses NUL-safe batched find/grep/xargs scans and executes workers through fixed absolute Bash and env -i, without runtime ripgrep or ambient shell-function/PATH authority.

Additional TDD regressions proved the replacement fails closed for directory-vs-file pruning, hostile PATH Bash/true shims, exported shell functions, malformed or empty sidecars, missing tools, scan errors, and errors in later batches.


Before: rg: command not found
Before final sidecar fix: empty fake grep mode did not fail closed (status=1)
After: normal and hostile exported-rg harnesses exit 0
After: Public Workflow Policy passes 11 active workflows locally
Final sealed harness SHA-256: 7d209bb35ff3a7a46b22f9a10a920eb30218c3403726d1dac72e0bffd1d914a4

Doc-reconciliation: clean

Copilot AI review requested due to automatic review settings July 13, 2026 14:18
@github-advanced-security

Copy link
Copy Markdown
Contributor

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

Comment thread .github/workflows/policytool/main.go Fixed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR removes provider-specific (DigitalOcean) automation from the public repository’s GitHub Actions surface and replaces it with a credential-free, least-privilege “public workflow policy” gate backed by a pinned analyzer + explicit allowlists (actions/commands/executables/presence).

Changes:

  • Remove DigitalOcean conformance/budget/leak-scrubber/dispatch automation and related secret/callback authority from public workflows.
  • Add a trusted-base pull_request_target policy workflow + verifier tooling, plus fixtures and mutation harness to enforce a fail-closed boundary.
  • Tighten remaining workflows to use GitHub-hosted runners, SHA/digest-pinned actions, github.token (not named secrets), and explicit job-scoped permissions.

Reviewed changes

Copilot reviewed 60 out of 62 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
scripts/fixtures/public-workflow-policy/reject.yml Negative fixture: forbidden patterns
scripts/fixtures/public-workflow-policy/reject-yaml-structure.yml Negative fixture: YAML aliases/dupes
scripts/fixtures/public-workflow-policy/reject-unsafe-programs.yml Negative fixture: dynamic/provider tools
scripts/fixtures/public-workflow-policy/reject-unreviewed-uses.yml Negative fixture: unapproved uses:
scripts/fixtures/public-workflow-policy/reject-statement-authority.yml Negative fixture: unsafe shell shapes
scripts/fixtures/public-workflow-policy/reject-shell.yml Negative fixture: shell selection
scripts/fixtures/public-workflow-policy/reject-shell-inheritance.yml Negative fixture: inherited shells
scripts/fixtures/public-workflow-policy/reject-secret-syntax.yml Negative fixture: secret selector forms
scripts/fixtures/public-workflow-policy/reject-script-execution.yml Negative fixture: committed script exec
scripts/fixtures/public-workflow-policy/reject-runners.yml Negative fixture: runner selectors
scripts/fixtures/public-workflow-policy/reject-provider-uses.yml Negative fixture: provider actions/reuse
scripts/fixtures/public-workflow-policy/reject-permissions.yml Negative fixture: permission shapes
scripts/fixtures/public-workflow-policy/reject-missing-shell.yml Negative fixture: implicit shell
scripts/fixtures/public-workflow-policy/reject-legacy-github-token.yml Negative fixture: secrets.GITHUB_TOKEN
scripts/fixtures/public-workflow-policy/reject-implicit-permissions.yml Negative fixture: implicit perms
scripts/fixtures/public-workflow-policy/reject-guard-suffix.yml Negative fixture: guard bypasses
scripts/fixtures/public-workflow-policy/reject-global.yml Negative fixture: global markers
scripts/fixtures/public-workflow-policy/reject-execution-context.yml Negative fixture: exec context overrides
scripts/fixtures/public-workflow-policy/reject-env-indirection.yml Negative fixture: env indirection
scripts/fixtures/public-workflow-policy/reject-dynamic-secrets.yml Negative fixture: dynamic secret selectors
scripts/fixtures/public-workflow-policy/reject-deny-pattern-execution.yml Negative fixture: deny-pattern exec
scripts/fixtures/public-workflow-policy/reject-command-analysis.yml Negative fixture: command wrappers
scripts/fixtures/public-workflow-policy/reject-builtin-wrapper.yml Negative fixture: builtin tunneling
scripts/fixtures/public-workflow-policy/pass.yml Positive fixture: credential-free
scripts/fixtures/public-workflow-policy/pass-negative-guard.yml Positive fixture: safe provider guard
scripts/fixtures/public-workflow-policy/pass-expression-and-deny-guard.yml Positive fixture: safe expressions
scripts/fixtures/public-workflow-policy/lifecycle-old.yml Fixture: lifecycle transition
scripts/fixtures/public-workflow-policy/lifecycle-future.yml Fixture: lifecycle transition
scripts/check-public-workflow-policy.sh Policy wrapper + policytool integrity
scripts/test-check-public-workflow-policy.sh Mutation/lifecycle harness for policy
docs/WFCTL.md Update infra cleanup guidance
docs/public-workflow-policy.md Document new public policy model
docs/conformance-runbook.md Remove DO operational runbook
.github/workflows/test-dispatch.yml Remove repo-dispatch test workflow
.github/workflows/scripts/verify-public-workflow-branch-protection.sh Add branch/tag governance verifier
.github/workflows/scripts/file-or-comment-leak-issue.sh Remove DO leak/budget dedup helper
.github/workflows/release.yml Reduce auth scope; add tag ancestry check
.github/workflows/public-workflow-policy.yml Add trusted-base policy enforcement workflow
.github/workflows/pre-release.yml Reduce auth scope; use github.token
.github/workflows/policytool/main.go Add policy analyzer implementation
.github/workflows/policytool/main_test.go Add analyzer test suite
.github/workflows/policytool/go.mod Add isolated Go module for analyzer
.github/workflows/policytool/go.sum Add analyzer dependency lock data
.github/workflows/osv-scanner.yml Replace reusable wf with digest-pinned container steps
.github/workflows/helm-lint.yml Add explicit default shell
.github/workflows/dependency-update.yml Move write perms to job scope; use github.token
.github/workflows/cross-plugin-build-test.yml Remove private Go module env; set default shell
.github/workflows/create-release.yml Remove manual tag-and-dispatch workflow
.github/workflows/copilot-setup-steps.yml Remove private repo Go config step
.github/workflows/conformance-smoke.yml Remove DO conformance smoke workflow
.github/workflows/conformance-leak-scrubber.yml Remove DO leak scrubber workflow
.github/workflows/conformance-budget-check.yml Remove DO budget kill-switch workflow
.github/workflows/codeql.yml Reduce global perms; set default shell; use github.token
.github/workflows/ci.yml Add policy job; remove named-secret token paths
.github/workflows/benchmark.yml Use pinned benchstat; set default shell
.github/public-workflow-secret-allowlist.json Add empty secret allowlist
.github/public-workflow-presence-allowlist.json Add presence inventory + tombstones
.github/public-workflow-executable-allowlist.json Add executable allowlist entries
.github/public-workflow-command-allowlist.json Add exact statement/command allowlist
.github/public-workflow-authority.json Add policy authority bundle manifest
.github/public-workflow-action-allowlist.json Add action allowlist with SHA/node/context digests
.github/conformance/cleanup.yaml Remove DO cleanup IaC config

Comment thread .github/workflows/public-workflow-policy.yml Outdated
Comment thread scripts/check-public-workflow-policy.sh
@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:308: parsing iteration count: invalid syntax
baseline-bench.txt:360915: parsing iteration count: invalid syntax
baseline-bench.txt:657880: parsing iteration count: invalid syntax
baseline-bench.txt:987983: parsing iteration count: invalid syntax
baseline-bench.txt:1308639: parsing iteration count: invalid syntax
baseline-bench.txt:1643401: parsing iteration count: invalid syntax
benchmark-results.txt:308: parsing iteration count: invalid syntax
benchmark-results.txt:319245: parsing iteration count: invalid syntax
benchmark-results.txt:631915: parsing iteration count: invalid syntax
benchmark-results.txt:962681: parsing iteration count: invalid syntax
benchmark-results.txt:1259727: parsing iteration count: invalid syntax
benchmark-results.txt:1587790: 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               8.608m ± 64%   7.554m ± 59%       ~ (p=0.485 n=6)
ComponentLoad-4                     3.563m ±  1%   3.593m ±  9%       ~ (p=0.132 n=6)
ComponentExecute-4                  1.924µ ±  1%   1.948µ ±  1%  +1.27% (p=0.002 n=6)
PoolContention/workers-1-4          1.091µ ±  2%   1.087µ ±  2%       ~ (p=0.818 n=6)
PoolContention/workers-2-4          1.076µ ±  1%   1.092µ ±  2%  +1.53% (p=0.013 n=6)
PoolContention/workers-4-4          1.083µ ±  2%   1.089µ ±  1%       ~ (p=0.195 n=6)
PoolContention/workers-8-4          1.078µ ±  1%   1.094µ ±  0%  +1.48% (p=0.002 n=6)
PoolContention/workers-16-4         1.079µ ±  1%   1.115µ ±  2%  +3.29% (p=0.004 n=6)
ComponentLifecycle-4                3.554m ±  0%   3.586m ±  0%  +0.90% (p=0.002 n=6)
SourceValidation-4                  2.282µ ±  2%   2.282µ ±  1%       ~ (p=0.900 n=6)
RegistryConcurrent-4                779.8n ±  4%   814.8n ±  5%       ~ (p=0.065 n=6)
LoaderLoadFromString-4              3.559m ±  1%   3.598m ±  2%  +1.12% (p=0.004 n=6)
geomean                             18.81µ         18.84µ        +0.16%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.818 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.619 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.961 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.550 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                  283.4n ± 0%   287.8n ± 8%  +1.55% (p=0.002 n=6)
CircuitBreakerExecution_Success-4          21.54n ± 1%   22.54n ± 2%  +4.62% (p=0.002 n=6)
CircuitBreakerExecution_Failure-4          66.75n ± 2%   66.64n ± 0%       ~ (p=1.000 n=6)
geomean                                    74.14n        75.61n       +1.99%

                                  │ 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              312.0n ± 33%   326.0n ± 20%       ~ (p=0.589 n=6)
IaCStateBackend_GRPC-4                   9.383m ±  3%   9.252m ±  2%       ~ (p=0.180 n=6)
JQTransform_Simple-4                     646.0n ± 38%   666.2n ± 51%       ~ (p=0.394 n=6)
JQTransform_ObjectConstruction-4         1.487µ ±  0%   1.614µ ±  0%  +8.54% (p=0.002 n=6)
JQTransform_ArraySelect-4                3.419µ ±  1%   3.625µ ±  2%  +6.03% (p=0.002 n=6)
JQTransform_Complex-4                    39.35µ ±  1%   40.61µ ±  1%  +3.19% (p=0.002 n=6)
JQTransform_Throughput-4                 1.836µ ±  1%   1.959µ ±  1%  +6.70% (p=0.002 n=6)
SSEPublishDelivery-4                     63.94n ±  1%   65.75n ±  9%  +2.84% (p=0.002 n=6)
geomean                                  3.810µ         3.968µ        +4.15%

                                 │ 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.899Mi ± 8%     5.868Mi ± 12%       ~ (p=0.818 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.07%               ²
¹ 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.839k ± 0%     6.837k ± 0%       ~ (p=0.827 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.091µ ± 5%   1.107µ ± 18%       ~ (p=0.515 n=6)
SchemaValidation_AllFields-4                 1.662µ ± 5%   1.669µ ±  4%       ~ (p=0.734 n=6)
SchemaValidation_FormatValidation-4          1.594µ ± 1%   1.607µ ±  3%       ~ (p=0.416 n=6)
SchemaValidation_ManySchemas-4               1.822µ ± 2%   1.801µ ±  3%       ~ (p=0.139 n=6)
geomean                                      1.515µ        1.521µ        +0.40%

                                    │ 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.114µ ± 25%   1.266µ ± 20%        ~ (p=0.093 n=6)
EventStoreAppend_SQLite-4                  2.287m ± 11%   1.270m ±  7%  -44.49% (p=0.002 n=6)
GetTimeline_InMemory/events-10-4           14.10µ ±  4%   15.06µ ±  4%   +6.83% (p=0.004 n=6)
GetTimeline_InMemory/events-50-4           78.26µ ±  3%   83.77µ ±  1%   +7.04% (p=0.002 n=6)
GetTimeline_InMemory/events-100-4          122.0µ ±  1%   131.0µ ± 28%   +7.34% (p=0.002 n=6)
GetTimeline_InMemory/events-500-4          627.6µ ±  1%   670.4µ ±  1%   +6.82% (p=0.002 n=6)
GetTimeline_InMemory/events-1000-4         1.288m ±  1%   1.379m ±  2%   +7.11% (p=0.002 n=6)
GetTimeline_SQLite/events-10-4             69.99µ ±  1%   74.40µ ±  1%   +6.29% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4             199.3µ ±  1%   215.8µ ±  7%   +8.27% (p=0.002 n=6)
GetTimeline_SQLite/events-100-4            357.3µ ±  1%   384.3µ ±  1%   +7.55% (p=0.002 n=6)
GetTimeline_SQLite/events-500-4            1.612m ±  1%   1.724m ±  2%   +6.94% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4           3.200m ±  1%   3.411m ±  2%   +6.60% (p=0.002 n=6)
geomean                                    209.4µ         213.4µ         +1.88%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                  797.5 ± 7%     812.0 ± 8%       ~ (p=0.786 n=6)
EventStoreAppend_SQLite-4                  2.050Ki ± 3%   2.053Ki ± 1%       ~ (p=0.701 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%       ~ (p=0.197 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%  -0.00% (p=0.032 n=6)
geomean                                    65.36Ki        65.47Ki       +0.16%
¹ 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 ± 2%    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.

Text matching missed valid Go import syntax and rejected policy data. Parse Go and module files so only actual provider dependencies fail.
Copilot AI review requested due to automatic review settings July 13, 2026 17:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 64 changed files in this pull request and generated 1 comment.

Comment thread .github/workflows/policytool/main.go
intel352 added 2 commits July 13, 2026 14:23
Candidate-controlled archive entries and analyzer-root symlinks must be rejected before extraction or trusted code execution. SDK policy markers are fixed substrings, not URL-validation regexes.
Exercise sibling path escapes, gitlinks, and hardlink archives so bootstrap validation cannot regress to type-specific or post-extraction checks.
Copilot AI review requested due to automatic review settings July 13, 2026 18:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 64 changed files in this pull request and generated no new comments.

Avoid recompiling the same digest validation regexp in manifest loops while preserving the exact lowercase-hex contract.
Copilot AI review requested due to automatic review settings July 13, 2026 19:23

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 64 changed files in this pull request and generated 1 comment.

Comment thread .github/workflows/pre-release.yml Outdated
intel352 added 3 commits July 13, 2026 16:09
Pin active toolchains to Go 1.26.5 for the July stdlib security fixes. Treat only missing snapshot releases and tags as idempotent; all other GitHub API failures remain fatal.
Require the cleanup fake to match the exact default-GET release listing so unrelated paginated API calls cannot satisfy it.
Validate the complete release listing before deletion and enforce exact gh DELETE calls so malformed data cannot cause partial cleanup.
Copilot AI review requested due to automatic review settings July 13, 2026 21:31

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 105 out of 107 changed files in this pull request and generated no new comments.

intel352 added 3 commits July 13, 2026 17:59
Scan the actual gitless archive tree and hidden workflow files without relying on ripgrep. Fail closed when archive enumeration or batched scanning cannot complete.
Run batched scans without ripgrep and isolate worker execution from hostile shell functions and PATH shims. Preserve fail-closed behavior for scan and fixture failures.
Copilot AI review requested due to automatic review settings July 14, 2026 09:27

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 105 out of 107 changed files in this pull request and generated no new comments.

@intel352
intel352 marked this pull request as ready for review July 14, 2026 09:40
@intel352
intel352 merged commit 22f8b1e into main Jul 14, 2026
28 checks passed
@intel352
intel352 deleted the codex/remove-public-do-live-ci branch July 14, 2026 09:51
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.

3 participants