Skip to content

feat(wfctl): plugin audit skips IaC interfaces in strict-contracts coverage (Task 19)#607

Merged
intel352 merged 1 commit into
mainfrom
feat/wfctl-audit-iac-skip-task19
May 10, 2026
Merged

feat(wfctl): plugin audit skips IaC interfaces in strict-contracts coverage (Task 19)#607
intel352 merged 1 commit into
mainfrom
feat/wfctl-audit-iac-skip-task19

Conversation

@intel352

Copy link
Copy Markdown
Contributor

Summary

Task 19 of the strict-contracts force-cutover plan (docs/plans/2026-05-10-strict-contracts-force-cutover.md, rev5).

Adds filterOutIaCServiceMethods + isIaCServiceMethod helpers in cmd/wfctl/plugin_audit.go. The advertisedPluginContracts pipeline now drops every IaCProvider.* and ResourceDriver.* entry (plus the typed-proto package-qualified equivalents under workflow.plugin.external.iac.*) before the strict-contracts coverage check fires.

Per Task 19: those interfaces are now compile-time enforced via Go interface satisfaction in sdk.RegisterAllIaCProviderServices (Task 4); the manifest-side strict-contract advertisement is redundant for IaC. Module / Step / Trigger / non-IaC service methods (SecurityScanner, ad-hoc plugin services) remain subject to the coverage requirement so the 14-plugin Module/Step/Trigger migration tracker is unaffected.

Independent of the PR 2 stack — this PR modifies pre-existing audit code that doesn't depend on iac.proto or the new SDK helpers. Base is main.

Tests (cmd/wfctl/plugin_audit_iac_test.go) — 3 cases, all PASS

  • IaCServiceMethodsAreNotRequired — manifest listing IaCProvider.* + ResourceDriver.* produces NO missing_service_method_contract_descriptor finding under StrictContracts:true; ServiceMethods.Total=0 after filtering
  • NonIaCServiceMethodsStillRequire — mixed manifest (IaC + SecurityScanner/Scan) flags ONLY SecurityScanner/Scan; ServiceMethods.Total=1
  • IsIaCServiceMethod_Cases — exhaustive matcher coverage including the typed-proto package-qualified shape (workflow.plugin.external.iac.IaCProviderEnumerator/EnumerateAll)

Verification

  • GOWORK=off go test -race ./cmd/wfctl/... → PASS
  • GOWORK=off go vet ./cmd/wfctl/ → clean
  • gofmt -d → clean (pre-commit hook auto-formatted before commit)

Rollback

Revert this commit; audit returns to flagging every advertised IaC service method as missing a strict-contract descriptor (which is the pre-cutover behavior — redundant after Task 4 ships, but not strictly broken).

Test plan

  • TestAuditPluginStrictContracts_IaCServiceMethodsAreNotRequired passes
  • TestAuditPluginStrictContracts_NonIaCServiceMethodsStillRequire passes (filter narrowness verified)
  • TestIsIaCServiceMethod_Cases exhaustive matcher
  • Race-mode wfctl test suite passes
  • Existing audit tests unaffected

🤖 Generated with Claude Code

…verage check

Task 19 of the strict-contracts force-cutover plan
(docs/plans/2026-05-10-strict-contracts-force-cutover.md, rev5).

Adds filterOutIaCServiceMethods + isIaCServiceMethod helpers in
cmd/wfctl/plugin_audit.go. The advertisedPluginContracts pipeline
now drops every IaCProvider.* and ResourceDriver.* entry (plus the
typed-proto package-qualified equivalents under
workflow.plugin.external.iac.*) BEFORE the strict-contracts
coverage check fires.

Per Task 19: those interfaces are now compile-time enforced via
Go interface satisfaction in
sdk.RegisterAllIaCProviderServices; the manifest-side strict-
contract advertisement is redundant for IaC, so the audit MUST
NOT flag missing descriptors for them. Module / Step / Trigger /
non-IaC service methods (SecurityScanner, ad-hoc plugin services)
remain subject to the coverage requirement so the 14-plugin
Module/Step/Trigger migration tracker is unaffected.

Tests (cmd/wfctl/plugin_audit_iac_test.go) cover three cases —
all pass:

- IaCServiceMethodsAreNotRequired: a manifest listing IaC
  serviceMethods produces NO missing_service_method_contract_
  descriptor finding under StrictContracts:true; ServiceMethods.
  Total=0 after filtering.
- NonIaCServiceMethodsStillRequire: a mixed manifest (IaC +
  SecurityScanner/Scan) flags ONLY SecurityScanner/Scan;
  ServiceMethods.Total=1 (IaC filtered, non-IaC kept).
- IsIaCServiceMethod_Cases: exhaustive matcher coverage —
  IaCProvider.*, ResourceDriver.*, and typed-proto package-
  qualified shapes match true; SecurityScanner/Scan,
  StrictService/Call, PluginService/GetManifest match false.

Verification: GOWORK=off go test -race ./cmd/wfctl/... PASS;
GOWORK=off go vet ./cmd/wfctl/ clean; gofmt -d clean.

Rollback: revert this commit; audit returns to flagging every
advertised IaC service method as missing a strict-contract
descriptor (which is the pre-cutover behavior — not strictly
broken, just redundant after Task 4 ships).
Copilot AI review requested due to automatic review settings May 10, 2026 06:44

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

Updates wfctl’s plugin audit strict-contracts coverage logic to exclude IaC interface service methods (now enforced at compile time), so the audit no longer reports missing strict-contract descriptors for IaCProvider.* / ResourceDriver.* while still enforcing coverage for non-IaC plugin services.

Changes:

  • Filters advertised serviceMethods to drop IaC-related entries before strict-contract coverage checks.
  • Adds narrow IaC method classifier (isIaCServiceMethod) to support both legacy IaCProvider.*/ResourceDriver.* and package-qualified typed-proto names.
  • Adds focused unit tests validating IaC is excluded and non-IaC service methods remain enforced.

Reviewed changes

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

File Description
cmd/wfctl/plugin_audit.go Filters advertised service methods to exclude IaC interfaces from strict-contracts coverage and adds helper classifiers.
cmd/wfctl/plugin_audit_iac_test.go Adds tests ensuring IaC service methods are ignored while non-IaC service methods still require descriptors under strict-contracts.

@github-actions

Copy link
Copy Markdown

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:262: parsing iteration count: invalid syntax
baseline-bench.txt:311081: parsing iteration count: invalid syntax
baseline-bench.txt:582840: parsing iteration count: invalid syntax
baseline-bench.txt:909670: parsing iteration count: invalid syntax
baseline-bench.txt:1230533: parsing iteration count: invalid syntax
baseline-bench.txt:1563966: parsing iteration count: invalid syntax
benchmark-results.txt:262: parsing iteration count: invalid syntax
benchmark-results.txt:346895: parsing iteration count: invalid syntax
benchmark-results.txt:593223: parsing iteration count: invalid syntax
benchmark-results.txt:919873: parsing iteration count: invalid syntax
benchmark-results.txt:1255073: parsing iteration count: invalid syntax
benchmark-results.txt:1588356: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 7763 64-Core Processor                
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                 3.482m ± 187%
ComponentLoad-4                       3.654m ±   1%
ComponentExecute-4                    1.998µ ±   1%
PoolContention/workers-1-4            1.119µ ±   1%
PoolContention/workers-2-4            1.104µ ±   2%
PoolContention/workers-4-4            1.101µ ±   1%
PoolContention/workers-8-4            1.105µ ±   1%
PoolContention/workers-16-4           1.127µ ±   3%
ComponentLifecycle-4                  3.698m ±   1%
SourceValidation-4                    2.383µ ±   3%
RegistryConcurrent-4                  873.0n ±   2%
LoaderLoadFromString-4                3.687m ±   1%
geomean                               18.08µ

                            │ 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: AMD EPYC 9V74 80-Core Processor                
                            │ baseline-bench.txt │
                            │       sec/op       │
InterpreterCreation-4              4.171m ± 134%
ComponentLoad-4                    3.575m ±   1%
ComponentExecute-4                 1.850µ ±   1%
PoolContention/workers-1-4         1.020µ ±   4%
PoolContention/workers-2-4         1.011µ ±   2%
PoolContention/workers-4-4         1.009µ ±   1%
PoolContention/workers-8-4         1.008µ ±   5%
PoolContention/workers-16-4        1.028µ ±   2%
ComponentLifecycle-4               3.649m ±   2%
SourceValidation-4                 2.208µ ±   1%
RegistryConcurrent-4               834.4n ±   3%
LoaderLoadFromString-4             3.644m ±   0%
geomean                            17.32µ

                            │ 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 7763 64-Core Processor                
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     285.5n ± 7%
CircuitBreakerExecution_Success-4             21.54n ± 3%
CircuitBreakerExecution_Failure-4             66.08n ± 0%
geomean                                       74.07n

                                  │ 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: AMD EPYC 9V74 80-Core Processor                
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                 301.3n ± 12%
CircuitBreakerExecution_Success-4         22.69n ±  3%
CircuitBreakerExecution_Failure-4         70.89n ±  0%
geomean                                   78.55n

                                  │ 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 7763 64-Core Processor                
                                 │ benchmark-results.txt │
                                 │        sec/op         │
JQTransform_Simple-4                        907.4n ± 30%
JQTransform_ObjectConstruction-4            1.489µ ±  0%
JQTransform_ArraySelect-4                   3.355µ ±  1%
JQTransform_Complex-4                       38.54µ ±  4%
JQTransform_Throughput-4                    1.815µ ±  2%
SSEPublishDelivery-4                        65.47n ±  1%
geomean                                     1.658µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
JQTransform_Simple-4                      1.273Ki ± 0%
JQTransform_ObjectConstruction-4          1.773Ki ± 0%
JQTransform_ArraySelect-4                 2.625Ki ± 0%
JQTransform_Complex-4                     16.22Ki ± 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       │
JQTransform_Simple-4                        10.00 ± 0%
JQTransform_ObjectConstruction-4            15.00 ± 0%
JQTransform_ArraySelect-4                   30.00 ± 0%
JQTransform_Complex-4                       324.0 ± 0%
JQTransform_Throughput-4                    17.00 ± 0%
SSEPublishDelivery-4                        0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

cpu: AMD EPYC 9V74 80-Core Processor                
                                 │ baseline-bench.txt │
                                 │       sec/op       │
JQTransform_Simple-4                     948.7n ± 18%
JQTransform_ObjectConstruction-4         1.415µ ±  1%
JQTransform_ArraySelect-4                3.424µ ±  1%
JQTransform_Complex-4                    41.89µ ±  1%
JQTransform_Throughput-4                 1.731µ ±  1%
SSEPublishDelivery-4                     64.72n ±  1%
geomean                                  1.668µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
JQTransform_Simple-4                   1.273Ki ± 0%
JQTransform_ObjectConstruction-4       1.773Ki ± 0%
JQTransform_ArraySelect-4              2.625Ki ± 0%
JQTransform_Complex-4                  16.22Ki ± 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      │
JQTransform_Simple-4                     10.00 ± 0%
JQTransform_ObjectConstruction-4         15.00 ± 0%
JQTransform_ArraySelect-4                30.00 ± 0%
JQTransform_Complex-4                    324.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 7763 64-Core Processor                
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                      1.098µ ±  1%
SchemaValidation_AllFields-4                   1.670µ ± 11%
SchemaValidation_FormatValidation-4            1.598µ ±  3%
SchemaValidation_ManySchemas-4                 1.816µ ±  4%
geomean                                        1.518µ

                                    │ 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: AMD EPYC 9V74 80-Core Processor                
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                   1.111µ ± 13%
SchemaValidation_AllFields-4                1.651µ ±  5%
SchemaValidation_FormatValidation-4         1.575µ ±  1%
SchemaValidation_ManySchemas-4              1.603µ ±  2%
geomean                                     1.467µ

                                    │ 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 7763 64-Core Processor                
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                   1.305µ ± 22%
EventStoreAppend_SQLite-4                     1.460m ±  5%
GetTimeline_InMemory/events-10-4              14.15µ ±  2%
GetTimeline_InMemory/events-50-4              82.21µ ±  3%
GetTimeline_InMemory/events-100-4             130.2µ ± 16%
GetTimeline_InMemory/events-500-4             664.9µ ±  4%
GetTimeline_InMemory/events-1000-4            1.366m ±  2%
GetTimeline_SQLite/events-10-4                118.1µ ±  1%
GetTimeline_SQLite/events-50-4                266.8µ ±  0%
GetTimeline_SQLite/events-100-4               437.5µ ±  2%
GetTimeline_SQLite/events-500-4               1.878m ±  3%
GetTimeline_SQLite/events-1000-4              3.635m ±  0%
geomean                                       232.3µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                     783.0 ± 9%
EventStoreAppend_SQLite-4                     1.981Ki ± 2%
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                16.74Ki ± 0%
GetTimeline_SQLite/events-50-4                87.14Ki ± 0%
GetTimeline_SQLite/events-100-4               175.4Ki ± 0%
GetTimeline_SQLite/events-500-4               846.1Ki ± 0%
GetTimeline_SQLite/events-1000-4              1.639Mi ± 0%
geomean                                       67.29Ki

                                   │ benchmark-results.txt │
                                   │       allocs/op       │
EventStoreAppend_InMemory-4                     7.000 ± 0%
EventStoreAppend_SQLite-4                       53.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                  382.0 ± 0%
GetTimeline_SQLite/events-50-4                 1.852k ± 0%
GetTimeline_SQLite/events-100-4                3.681k ± 0%
GetTimeline_SQLite/events-500-4                18.54k ± 0%
GetTimeline_SQLite/events-1000-4               37.29k ± 0%
geomean                                        1.162k

cpu: AMD EPYC 9V74 80-Core Processor                
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.112µ ± 10%
EventStoreAppend_SQLite-4                  1.161m ± 12%
GetTimeline_InMemory/events-10-4           12.98µ ±  4%
GetTimeline_InMemory/events-50-4           71.69µ ± 24%
GetTimeline_InMemory/events-100-4          109.7µ ±  1%
GetTimeline_InMemory/events-500-4          559.9µ ±  1%
GetTimeline_InMemory/events-1000-4         1.138m ±  1%
GetTimeline_SQLite/events-10-4             84.79µ ±  3%
GetTimeline_SQLite/events-50-4             221.1µ ±  1%
GetTimeline_SQLite/events-100-4            384.4µ ±  1%
GetTimeline_SQLite/events-500-4            1.650m ±  0%
GetTimeline_SQLite/events-1000-4           3.241m ±  1%
geomean                                    196.1µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  748.0 ± 9%
EventStoreAppend_SQLite-4                  1.986Ki ± 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             16.74Ki ± 0%
GetTimeline_SQLite/events-50-4             87.14Ki ± 0%
GetTimeline_SQLite/events-100-4            175.4Ki ± 0%
GetTimeline_SQLite/events-500-4            846.1Ki ± 0%
GetTimeline_SQLite/events-1000-4           1.639Mi ± 0%
geomean                                    67.04Ki

                                   │ baseline-bench.txt │
                                   │     allocs/op      │
EventStoreAppend_InMemory-4                  7.000 ± 0%
EventStoreAppend_SQLite-4                    53.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               382.0 ± 0%
GetTimeline_SQLite/events-50-4              1.852k ± 0%
GetTimeline_SQLite/events-100-4             3.681k ± 0%
GetTimeline_SQLite/events-500-4             18.54k ± 0%
GetTimeline_SQLite/events-1000-4            37.29k ± 0%
geomean                                     1.162k

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

@intel352 intel352 merged commit 421d896 into main May 10, 2026
22 checks passed
@intel352 intel352 deleted the feat/wfctl-audit-iac-skip-task19 branch May 10, 2026 06:59
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.

2 participants