Skip to content

feat(iac): make secret and provider-job lifecycles safe - #1019

Merged
intel352 merged 5 commits into
mainfrom
feat/iac-runtime-secret-safety-20261002
Oct 3, 2026
Merged

intel352 merged 5 commits into
mainfrom
feat/iac-runtime-secret-safety-20261002

Conversation

@intel352

@intel352 intel352 commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Keep IaC plans/state declarative while drivers receive an isolated resolved
copy; add durable routed-secret cleanup and optional targeted provider jobs.
All provider-specific execution remains in provider plugins.

Scope Manifest

  • Plan.
  • PR Count: 10; Tasks: 21; locked 2026-10-03T01:51:30Z.
  • This is PR grouping 2, Tasks 3-6, branch
    feat/iac-runtime-secret-safety-20261002.
  • This PR does not deploy staging, mutate cloud resources, enroll agents, or
    complete Gate 0A or the broader slimming program. Dependent plugins consume
    the exact new Workflow release after merge/publication.

Changes

  • Optional typed sensitive-input declarations cross the real SDK/gRPC boundary;
    canonical pointer validation rejects literals and malformed paths.
  • Plan hashes, hooks, state, and control-plane diagnostics preserve references;
    resolved driver copies cannot mutate declarative input. Consumer payloads
    are not rewritten by diagnostic redaction.
  • Routing/alias intent is saved and read back before writes. Exact keys,
    namespace, generation, and deletion/absence evidence survive restart across
    filesystem, memory, PostgreSQL, CLI/shared helper adapters, and gRPC.
  • Cleanup cannot forget state before every recorded key is absent. Legacy
    keys survive partial updates, alias ownership conflicts fail before writes,
    and confirmed ghosts are cleaned before recreation. Only actual owned
    creations permit compensation; create-conflict upserts remain updates.
  • Targeted jobs require exact resource identity and 1..3600-second timeouts.
    Cancellation is a separately advertised optional capability; legacy runner
    absence and UNIMPLEMENTED remain stable negative signals.
  • PostgreSQL migration adds nullable lifecycle JSONB. Real pgx testing also
    corrected existing timestamp scanning and nil-array NOT NULL failures.
  • Filesystem persistence syncs a same-directory temporary record before
    native replacement. Windows uses native replacement/write-through flags;
    native Windows runtime acceptance remains in the cross-OS phase.

Verification

  • Go 1.26.5, GOWORK=off go test ./... -p=4 -json -count=1: 151 packages,
    12,635 test/subtest cases, zero failures on final tree
    7637257b0e8ca89b715c373f4c22dfaeda5e5644 (9cefcef6).
  • golangci-lint run --timeout=8m: zero issues with a full local scan;
    latest Linux CI lint also passes. New-issue filtering is not equivalent proof.
  • Focused cleanup, SDK/client/BDD, and create/upsert hook tests passed with
    -race. Regression fixes have observed RED/GREEN and revert-RED proofs.
  • Disposable PostgreSQL 16 fixture: actual additive migration, legacy reads,
    four lifecycle phases, close/reopen/list, JSONB readback, and deletion passed;
    both pgx corrections reproduced when reverted. Fixture container removed.
  • buf lint; pinned buf generate --path plugin/external/proto/iac.proto
    twice; generated diff against the index clean.
  • Existing public workflow policy passes all 11 workflows. No CI workflow or
    authorization policy was changed. Windows module tests cross-compile only;
    this is not native Windows runtime proof.
  • git diff --cached --check and locked 21-task/10-PR scope check pass.

Runtime Launch Transcript

Build: GOWORK=off make build-wfctl exited 0. Built CLI state-list command
against committed cmd/wfctl/testdata/infra-multi-env.yaml exited 0 and reported
no tracked resources; no provider/cloud call was made.

Launch: go test -race ./plugin/external -run '^TestIaCJobExternalProcess$' -count=1 -timeout=180s -v exited 0 (8.314s).

The actual external plugin manager discovers and launches race-instrumented
SDK executables, then wires the actual provider client through Modular DI.
The native process receives exact target identity, observes a one-second
timeout, accepts the 3600-second bound, and handles cancellation. Invalid
timeouts, caller-context cancellation, UNIMPLEMENTED, authorization and
availability errors, plus a legacy runner without cancellation are checked.
Both native and legacy processes shut down cleanly; launch failure-signature
scrape passed.

Boundary: cloud execution behind the SDK is an in-memory test dependency,
not DigitalOcean or STG. SDK, process transport, host discovery, DI wiring, and
provider client are the real artifact, not reimplementations. Live provider
workload acceptance is explicitly later scope.

Doc-reconciliation: clean.

Bounded Adversarial Review

One initial pass found four concrete ownership/recovery defects. Exact
regressions reproduced them before fixes; removing only those fixes reproduced
the failures again. The correction pass closed three and reproduced one unsafe
upsert ownership case. Its targeted final check closed that sole remaining
finding with SHIP-IT. No Critical/Important findings remain; no style/design
review cycle was reopened. The actual create/upsert outcome is covered by
interruption and ordinary write-error tests, not inferred from the plan label.

CI Corrections

e03188c3 fixes only the x/sys direct-import annotation; 9cefcef6 removes
an unused, side-effect-free saved-plan assignment. Both diagnostics were
reproduced locally before correction. CodeQL alert 398 was specifically
dismissed as a verified false positive: unchanged AWS SigV4 payload and
canonical-request hashing is required by the
AWS protocol,
not password storage. No hash algorithm, scanner rule, or CI policy changed.
The remaining current-head CI gates and release are still pending.

Discover sensitive inputs through an optional typed gRPC service. Validate real leaf values without custom lookup dispatch; reject literal credentials before provider execution.
Keep credential references in plans, hooks and durable state. Resolve a separate driver copy, preserve cross-provider references and fail closed on discovery errors. Redact known credentials only in diagnostic surfaces, not consumer payloads.
Journal exact secret keys and namespaces before writes; retain deletion
debt until absence is verified after restart. Only actual creations
permit compensation; create-conflict upserts retain existing resources.

Add optional targeted, bounded provider jobs and independent cancellation.
Lifecycle JSONB migration is additive; legacy state remains readable and
metadata-dropping backends fail closed.
@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:308: parsing iteration count: invalid syntax
baseline-bench.txt:338607: parsing iteration count: invalid syntax
baseline-bench.txt:629626: parsing iteration count: invalid syntax
baseline-bench.txt:1264442: parsing iteration count: invalid syntax
baseline-bench.txt:1634289: parsing iteration count: invalid syntax
baseline-bench.txt:2050375: parsing iteration count: invalid syntax
benchmark-results.txt:310: parsing iteration count: invalid syntax
benchmark-results.txt:454313: parsing iteration count: invalid syntax
benchmark-results.txt:811449: parsing iteration count: invalid syntax
benchmark-results.txt:1202374: parsing iteration count: invalid syntax
benchmark-results.txt:1581452: parsing iteration count: invalid syntax
benchmark-results.txt:1991478: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 9V74 80-Core Processor                
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                 3.602m ± 141%
ComponentLoad-4                       2.767m ±   9%
ComponentExecute-4                    1.441µ ±   1%
PoolContention/workers-1-4            800.6n ±   2%
PoolContention/workers-2-4            794.4n ±   2%
PoolContention/workers-4-4            793.6n ±   5%
PoolContention/workers-8-4            799.2n ±   1%
PoolContention/workers-16-4           825.5n ±   2%
ComponentLifecycle-4                  2.867m ±   2%
SourceValidation-4                    1.637µ ±   1%
RegistryConcurrent-4                  598.5n ±   7%
LoaderLoadFromString-4                2.802m ±   3%
geomean                               13.53µ

                            │ benchmark-results.txt │
                            │         B/op          │
InterpreterCreation-4                  2.027Mi ± 0%
ComponentLoad-4                        2.180Mi ± 0%
ComponentExecute-4                     1.203Ki ± 0%
PoolContention/workers-1-4             1.203Ki ± 0%
PoolContention/workers-2-4             1.203Ki ± 0%
PoolContention/workers-4-4             1.203Ki ± 0%
PoolContention/workers-8-4             1.203Ki ± 0%
PoolContention/workers-16-4            1.203Ki ± 0%
ComponentLifecycle-4                   2.183Mi ± 0%
SourceValidation-4                     1.984Ki ± 0%
RegistryConcurrent-4                   1.133Ki ± 0%
LoaderLoadFromString-4                 2.182Mi ± 0%
geomean                                15.25Ki

                            │ benchmark-results.txt │
                            │       allocs/op       │
InterpreterCreation-4                   15.68k ± 0%
ComponentLoad-4                         18.02k ± 0%
ComponentExecute-4                       25.00 ± 0%
PoolContention/workers-1-4               25.00 ± 0%
PoolContention/workers-2-4               25.00 ± 0%
PoolContention/workers-4-4               25.00 ± 0%
PoolContention/workers-8-4               25.00 ± 0%
PoolContention/workers-16-4              25.00 ± 0%
ComponentLifecycle-4                    18.07k ± 0%
SourceValidation-4                       32.00 ± 0%
RegistryConcurrent-4                     2.000 ± 0%
LoaderLoadFromString-4                  18.06k ± 0%
geomean                                  183.3

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                            │ baseline-bench.txt │
                            │       sec/op       │
InterpreterCreation-4               8.159m ± 64%
ComponentLoad-4                     3.390m ±  8%
ComponentExecute-4                  1.852µ ±  1%
PoolContention/workers-1-4          1.185µ ±  0%
PoolContention/workers-2-4          1.181µ ±  1%
PoolContention/workers-4-4          1.181µ ±  1%
PoolContention/workers-8-4          1.185µ ±  0%
PoolContention/workers-16-4         1.185µ ±  1%
ComponentLifecycle-4                3.413m ±  1%
SourceValidation-4                  2.209µ ±  1%
RegistryConcurrent-4                867.0n ±  1%
LoaderLoadFromString-4              3.444m ±  1%
geomean                             19.30µ

                            │ baseline-bench.txt │
                            │        B/op        │
InterpreterCreation-4               2.027Mi ± 0%
ComponentLoad-4                     2.180Mi ± 0%
ComponentExecute-4                  1.203Ki ± 0%
PoolContention/workers-1-4          1.203Ki ± 0%
PoolContention/workers-2-4          1.203Ki ± 0%
PoolContention/workers-4-4          1.203Ki ± 0%
PoolContention/workers-8-4          1.203Ki ± 0%
PoolContention/workers-16-4         1.203Ki ± 0%
ComponentLifecycle-4                2.183Mi ± 0%
SourceValidation-4                  1.984Ki ± 0%
RegistryConcurrent-4                1.133Ki ± 0%
LoaderLoadFromString-4              2.182Mi ± 0%
geomean                             15.25Ki

                            │ baseline-bench.txt │
                            │     allocs/op      │
InterpreterCreation-4                15.68k ± 0%
ComponentLoad-4                      18.02k ± 0%
ComponentExecute-4                    25.00 ± 0%
PoolContention/workers-1-4            25.00 ± 0%
PoolContention/workers-2-4            25.00 ± 0%
PoolContention/workers-4-4            25.00 ± 0%
PoolContention/workers-8-4            25.00 ± 0%
PoolContention/workers-16-4           25.00 ± 0%
ComponentLifecycle-4                 18.07k ± 0%
SourceValidation-4                    32.00 ± 0%
RegistryConcurrent-4                  2.000 ± 0%
LoaderLoadFromString-4               18.06k ± 0%
geomean                               183.3

pkg: github.com/GoCodeAlone/workflow/middleware
cpu: AMD EPYC 9V74 80-Core Processor                
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     230.7n ± 0%
CircuitBreakerExecution_Success-4             17.56n ± 0%
CircuitBreakerExecution_Failure-4             55.20n ± 0%
geomean                                       60.69n

                                  │ benchmark-results.txt │
                                  │         B/op          │
CircuitBreakerDetection-4                    144.0 ± 0%
CircuitBreakerExecution_Success-4            0.000 ± 0%
CircuitBreakerExecution_Failure-4            0.000 ± 0%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

                                  │ benchmark-results.txt │
                                  │       allocs/op       │
CircuitBreakerDetection-4                    1.000 ± 0%
CircuitBreakerExecution_Success-4            0.000 ± 0%
CircuitBreakerExecution_Failure-4            0.000 ± 0%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                  451.8n ± 3%
CircuitBreakerExecution_Success-4          59.87n ± 0%
CircuitBreakerExecution_Failure-4          65.22n ± 0%
geomean                                    120.8n

                                  │ baseline-bench.txt │
                                  │        B/op        │
CircuitBreakerDetection-4                 144.0 ± 0%
CircuitBreakerExecution_Success-4         0.000 ± 0%
CircuitBreakerExecution_Failure-4         0.000 ± 0%
geomean                                              ¹
¹ summaries must be >0 to compute geomean

                                  │ baseline-bench.txt │
                                  │     allocs/op      │
CircuitBreakerDetection-4                 1.000 ± 0%
CircuitBreakerExecution_Success-4         0.000 ± 0%
CircuitBreakerExecution_Failure-4         0.000 ± 0%
geomean                                              ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/module
cpu: AMD EPYC 9V74 80-Core Processor                
                                 │ benchmark-results.txt │
                                 │        sec/op         │
IaCStateBackend_InProcess-4                 228.0n ± 25%
IaCStateBackend_GRPC-4                      7.654m ±  2%
JQTransform_Simple-4                        509.4n ± 17%
JQTransform_ObjectConstruction-4            1.110µ ±  1%
JQTransform_ArraySelect-4                   2.739µ ±  2%
JQTransform_Complex-4                       32.50µ ±  4%
JQTransform_Throughput-4                    1.361µ ±  2%
SSEPublishDelivery-4                        49.13n ±  3%
geomean                                     2.959µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
IaCStateBackend_InProcess-4                416.0 ±  0%
IaCStateBackend_GRPC-4                   5.637Mi ± 18%
JQTransform_Simple-4                     1.273Ki ±  0%
JQTransform_ObjectConstruction-4         1.773Ki ±  0%
JQTransform_ArraySelect-4                2.625Ki ±  0%
JQTransform_Complex-4                    16.31Ki ±  0%
JQTransform_Throughput-4                 1.984Ki ±  0%
SSEPublishDelivery-4                       0.000 ±  0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                 │ benchmark-results.txt │
                                 │       allocs/op       │
IaCStateBackend_InProcess-4                 2.000 ± 0%
IaCStateBackend_GRPC-4                     6.855k ± 0%
JQTransform_Simple-4                        10.00 ± 0%
JQTransform_ObjectConstruction-4            15.00 ± 0%
JQTransform_ArraySelect-4                   30.00 ± 0%
JQTransform_Complex-4                       328.0 ± 0%
JQTransform_Throughput-4                    17.00 ± 0%
SSEPublishDelivery-4                        0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                 │ baseline-bench.txt │
                                 │       sec/op       │
IaCStateBackend_InProcess-4              341.4n ±  1%
IaCStateBackend_GRPC-4                   9.200m ± 27%
JQTransform_Simple-4                     658.7n ± 36%
JQTransform_ObjectConstruction-4         1.493µ ±  1%
JQTransform_ArraySelect-4                3.201µ ±  0%
JQTransform_Complex-4                    35.51µ ±  0%
JQTransform_Throughput-4                 1.815µ ±  1%
SSEPublishDelivery-4                     77.33n ±  1%
geomean                                  3.860µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
IaCStateBackend_InProcess-4             416.0 ±  0%
IaCStateBackend_GRPC-4                5.758Mi ± 11%
JQTransform_Simple-4                  1.273Ki ±  0%
JQTransform_ObjectConstruction-4      1.773Ki ±  0%
JQTransform_ArraySelect-4             2.625Ki ±  0%
JQTransform_Complex-4                 16.31Ki ±  0%
JQTransform_Throughput-4              1.984Ki ±  0%
SSEPublishDelivery-4                    0.000 ±  0%
geomean                                             ¹
¹ summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │
                                 │     allocs/op      │
IaCStateBackend_InProcess-4              2.000 ± 0%
IaCStateBackend_GRPC-4                  6.868k ± 0%
JQTransform_Simple-4                     10.00 ± 0%
JQTransform_ObjectConstruction-4         15.00 ± 0%
JQTransform_ArraySelect-4                30.00 ± 0%
JQTransform_Complex-4                    328.0 ± 0%
JQTransform_Throughput-4                 17.00 ± 0%
SSEPublishDelivery-4                     0.000 ± 0%
geomean                                             ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/schema
cpu: AMD EPYC 9V74 80-Core Processor                
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                       840.2n ± 9%
SchemaValidation_AllFields-4                    1.250µ ± 1%
SchemaValidation_FormatValidation-4             1.219µ ± 2%
SchemaValidation_ManySchemas-4                  1.241µ ± 3%
geomean                                         1.123µ

                                    │ benchmark-results.txt │
                                    │         B/op          │
SchemaValidation_Simple-4                      0.000 ± 0%
SchemaValidation_AllFields-4                   0.000 ± 0%
SchemaValidation_FormatValidation-4            0.000 ± 0%
SchemaValidation_ManySchemas-4                 0.000 ± 0%
geomean                                                   ¹
¹ summaries must be >0 to compute geomean

                                    │ benchmark-results.txt │
                                    │       allocs/op       │
SchemaValidation_Simple-4                      0.000 ± 0%
SchemaValidation_AllFields-4                   0.000 ± 0%
SchemaValidation_FormatValidation-4            0.000 ± 0%
SchemaValidation_ManySchemas-4                 0.000 ± 0%
geomean                                                   ¹
¹ summaries must be >0 to compute geomean

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                   1.039µ ± 12%
SchemaValidation_AllFields-4                1.513µ ±  9%
SchemaValidation_FormatValidation-4         1.483µ ±  1%
SchemaValidation_ManySchemas-4              1.479µ ±  4%
geomean                                     1.363µ

                                    │ baseline-bench.txt │
                                    │        B/op        │
SchemaValidation_Simple-4                   0.000 ± 0%
SchemaValidation_AllFields-4                0.000 ± 0%
SchemaValidation_FormatValidation-4         0.000 ± 0%
SchemaValidation_ManySchemas-4              0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                    │ baseline-bench.txt │
                                    │     allocs/op      │
SchemaValidation_Simple-4                   0.000 ± 0%
SchemaValidation_AllFields-4                0.000 ± 0%
SchemaValidation_FormatValidation-4         0.000 ± 0%
SchemaValidation_ManySchemas-4              0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/store
cpu: AMD EPYC 9V74 80-Core Processor                
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                  761.4n ±   5%
EventStoreAppend_SQLite-4                    1.472m ± 218%
GetTimeline_InMemory/events-10-4             10.39µ ±  25%
GetTimeline_InMemory/events-50-4             43.42µ ±   1%
GetTimeline_InMemory/events-100-4            87.03µ ±   0%
GetTimeline_InMemory/events-500-4            445.7µ ±   1%
GetTimeline_InMemory/events-1000-4           907.6µ ±   3%
GetTimeline_SQLite/events-10-4               42.78µ ±   1%
GetTimeline_SQLite/events-50-4               137.0µ ±   2%
GetTimeline_SQLite/events-100-4              253.0µ ±   2%
GetTimeline_SQLite/events-500-4              1.174m ±   3%
GetTimeline_SQLite/events-1000-4             2.318m ±   1%
geomean                                      142.8µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                    859.5 ± 13%
EventStoreAppend_SQLite-4                    2.054Ki ±  3%
GetTimeline_InMemory/events-10-4             7.953Ki ±  0%
GetTimeline_InMemory/events-50-4             46.62Ki ±  0%
GetTimeline_InMemory/events-100-4            94.48Ki ±  0%
GetTimeline_InMemory/events-500-4            472.8Ki ±  0%
GetTimeline_InMemory/events-1000-4           944.3Ki ±  0%
GetTimeline_SQLite/events-10-4               15.59Ki ±  0%
GetTimeline_SQLite/events-50-4               80.56Ki ±  0%
GetTimeline_SQLite/events-100-4              162.1Ki ±  0%
GetTimeline_SQLite/events-500-4              777.4Ki ±  0%
GetTimeline_SQLite/events-1000-4             1.503Mi ±  0%
geomean                                      65.78Ki

                                   │ benchmark-results.txt │
                                   │       allocs/op       │
EventStoreAppend_InMemory-4                     7.000 ± 0%
EventStoreAppend_SQLite-4                       55.00 ± 0%
GetTimeline_InMemory/events-10-4                125.0 ± 0%
GetTimeline_InMemory/events-50-4                653.0 ± 0%
GetTimeline_InMemory/events-100-4              1.306k ± 0%
GetTimeline_InMemory/events-500-4              6.514k ± 0%
GetTimeline_InMemory/events-1000-4             13.02k ± 0%
GetTimeline_SQLite/events-10-4                  316.0 ± 0%
GetTimeline_SQLite/events-50-4                 1.486k ± 0%
GetTimeline_SQLite/events-100-4                2.940k ± 0%
GetTimeline_SQLite/events-500-4                14.79k ± 0%
GetTimeline_SQLite/events-1000-4               29.80k ± 0%
geomean                                        1.065k

cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.110µ ±  4%
EventStoreAppend_SQLite-4                  825.0µ ±  6%
GetTimeline_InMemory/events-10-4           13.90µ ±  5%
GetTimeline_InMemory/events-50-4           76.05µ ±  5%
GetTimeline_InMemory/events-100-4          149.1µ ±  4%
GetTimeline_InMemory/events-500-4          749.9µ ±  5%
GetTimeline_InMemory/events-1000-4         1.208m ± 32%
GetTimeline_SQLite/events-10-4             57.79µ ±  1%
GetTimeline_SQLite/events-50-4             192.8µ ±  0%
GetTimeline_SQLite/events-100-4            359.8µ ±  2%
GetTimeline_SQLite/events-500-4            1.696m ±  0%
GetTimeline_SQLite/events-1000-4           3.356m ±  1%
geomean                                    194.8µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  785.0 ± 7%
EventStoreAppend_SQLite-4                  2.056Ki ± 1%
GetTimeline_InMemory/events-10-4           7.953Ki ± 0%
GetTimeline_InMemory/events-50-4           46.62Ki ± 0%
GetTimeline_InMemory/events-100-4          94.48Ki ± 0%
GetTimeline_InMemory/events-500-4          472.8Ki ± 0%
GetTimeline_InMemory/events-1000-4         944.3Ki ± 0%
GetTimeline_SQLite/events-10-4             15.59Ki ± 0%
GetTimeline_SQLite/events-50-4             80.56Ki ± 0%
GetTimeline_SQLite/events-100-4            162.1Ki ± 0%
GetTimeline_SQLite/events-500-4            777.4Ki ± 0%
GetTimeline_SQLite/events-1000-4           1.503Mi ± 0%
geomean                                    65.29Ki

                                   │ baseline-bench.txt │
                                   │     allocs/op      │
EventStoreAppend_InMemory-4                  7.000 ± 0%
EventStoreAppend_SQLite-4                    55.00 ± 0%
GetTimeline_InMemory/events-10-4             125.0 ± 0%
GetTimeline_InMemory/events-50-4             653.0 ± 0%
GetTimeline_InMemory/events-100-4           1.306k ± 0%
GetTimeline_InMemory/events-500-4           6.514k ± 0%
GetTimeline_InMemory/events-1000-4          13.02k ± 0%
GetTimeline_SQLite/events-10-4               316.0 ± 0%
GetTimeline_SQLite/events-50-4              1.486k ± 0%
GetTimeline_SQLite/events-100-4             2.940k ± 0%
GetTimeline_SQLite/events-500-4             14.79k ± 0%
GetTimeline_SQLite/events-1000-4            29.80k ± 0%
geomean                                     1.065k

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

CI corrections are deliberately bounded: e03188c fixes only the existing x/sys direct-import annotation; 9cefcef removes an unused, side-effect-free saved-plan filtering assignment. Focused regression tests and full golangci-lint pass locally. CodeQL alert 398 was dismissed specifically as a false positive: its unchanged sha256Hex calls hash AWS SigV4 payloads/canonical requests, not stored passwords, as required by https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-create-signed-request.html. No hash algorithm, security rule, or CI policy was changed. Fresh CI is still pending; the code review is closed and no broad design/style round is being repeated.

@intel352
intel352 merged commit 1017dda into main Oct 3, 2026
28 checks passed
@intel352
intel352 deleted the feat/iac-runtime-secret-safety-20261002 branch October 3, 2026 06:00
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