Skip to content

feat(sandbox,module): ArgoEphemeralRunner + exec_env: ephemeral (infra-admin P3c PR9/12)#849

Merged
intel352 merged 2 commits into
mainfrom
feat/infra-p3c-argo
Jun 3, 2026
Merged

feat(sandbox,module): ArgoEphemeralRunner + exec_env: ephemeral (infra-admin P3c PR9/12)#849
intel352 merged 2 commits into
mainfrom
feat/infra-p3c-argo

Conversation

@intel352
Copy link
Copy Markdown
Contributor

@intel352 intel352 commented Jun 3, 2026

PR9/12 — ArgoEphemeralRunner + exec_env: ephemeral (infra-admin Phase 3c)

Locked plan Tasks 17–18; ADR 0020. The last workflow-core PR: runs a one-off step.sandbox_exec command as a single-container Argo Workflow on k8s. Reuses the existing Argo module's direct API (SubmitWorkflow/WorkflowStatus/WorkflowLogs) — NOT TranslatePipelineToArgo; runner lives in module (no sandbox→module cycle).

Changes

  • module.ArgoEphemeralRunner (sandbox.SandboxRunner): builds a single-container ArgoWorkflowSpec, submits, polls status to terminal, fetches logs → ExecResult. Argo exposes status not a container exit code → Succeeded→0, Failed/Error→nonzero (documented limitation). secret:// env refs pass through UNRESOLVED (ADR 0017; k8s secretKeyRef/pod creds in prod). Workflow name from an atomic counter (no time/rand). Poll interval injectable (1ms in tests).
  • exec_env: ephemeral wired in the factory: resolves the argo module by argo_module config name, or the sole *ArgoWorkflowsModule (clear error on 0/ambiguous). Schema (module_schema.go + step_schema_builtins.go) gains ephemeral option + argo_module field; golden regenerated.
  • Auto-cleanup: the spec sets ttlStrategy.secondsAfterCompletion (300s) so the Argo controller GCs completed runs (no namespace accumulation).

Review notes (resolved)

  • Critical: ctx now threads through (*ArgoWorkflowsModule).SubmitWorkflow/WorkflowStatus/WorkflowLogs/DeleteWorkflow/ListWorkflows → the backend → doRequest(ctx) (was context.Background()), so a cancelled/timed-out ephemeral exec aborts the in-flight HTTP call promptly instead of waiting the 30s client timeout. All existing step.argo_* callers updated to pass their real ctx. Test: cancel during an in-flight status call → prompt context.Canceled.
  • Workflow TTL auto-cleanup; status-error test; variadic factory param → plain string; injectable poll interval (module tests ~6s→<1s).

Verified: build + full go test ./... exit 0 (151 ok); full golangci-lint v2.12.0 0 issues.

🤖 Generated with Claude Code

…a-admin P3c PR9/12)

Adds ArgoEphemeralRunner, a sandbox.SandboxRunner that executes a one-off
command as an Argo Workflow on Kubernetes, wired as exec_env: ephemeral on
step.sandbox_exec.

Task 17 — ArgoEphemeralRunner (module/argo_ephemeral_runner.go):
- argoSubmitter interface (SubmitWorkflow/WorkflowStatus/WorkflowLogs, all
  ctx-aware) satisfied by *ArgoWorkflowsModule; tests inject a fake.
- buildSpec emits a single-container Workflow (entrypoint main); workflow names
  derive from a module-global atomic counter (no time/rand).
- Status->exit-code mapping: Succeeded->0, Failed/Error->1 (documented Argo
  limitation: no per-container exit code from the status API).
- secret:// env refs passed through UNRESOLVED (k8s secretKeyRef resolves at
  pod launch, ADR 0017).
- Poll loop selects on ctx.Done() AND threads ctx into every submitter call so
  an in-flight HTTP request aborts on cancel (not just between ticks).
- TTL: spec.TTLSecondsAfterFinished (default 300s) -> ttlStrategy.
  secondsAfterCompletion so the Argo controller GCs completed runs (no extra
  API call, prevents namespace accumulation).
- Poll interval is injectable (default 2s; tests use 1ms).

Task 18 — factory wiring (module/execenv_factory.go):
- exec_env: ephemeral -> resolveEphemeralRunner: explicit argo_module name, or
  auto-detect the sole *ArgoWorkflowsModule (clear error on 0 or >1).
- argo_module config threaded from step.sandbox_exec; resolveSandboxRunner takes
  a plain argoModuleName string (not variadic).
- exec_env schema options -> [local-docker, ephemeral] + argo_module field in
  step_schema_builtins.go and module_schema.go; golden regenerated.

ctx propagation (review fix): threaded ctx through (*ArgoWorkflowsModule).
SubmitWorkflow/WorkflowStatus/WorkflowLogs/DeleteWorkflow/ListWorkflows -> the
argoBackend methods -> doRequest, so the real backend honors cancellation/
deadline mid-HTTP. All step.argo_* Execute callers now pass their ctx.

Tests: status->exit-code, spec shape, TTL (spec + rendered CRD), secret
passthrough, ctx-cancel between ticks, ctx-cancel during in-flight status,
WorkflowStatus error propagation, submit error, monotonic names, default
poll-interval fallback; factory: ephemeral with/without/ambiguous argo module.

Gate: golangci-lint cache clean + GOWORK=off go build ./... + go test ./... all
exit 0; golangci-lint run 0 issues.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 3, 2026 04:37
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a new Kubernetes/Argo-backed “ephemeral” execution environment for step.sandbox_exec, enabling one-off command execution as single-container Argo Workflows while reusing the existing argo.workflows module’s direct API and improving cancellation behavior via context propagation.

Changes:

  • Introduces module.ArgoEphemeralRunner (implements sandbox.SandboxRunner) to submit/poll/log one-off Argo Workflows with TTL-based auto-cleanup.
  • Wires exec_env: ephemeral (+ optional argo_module) through schema + factory resolution to select the appropriate Argo module instance.
  • Threads context.Context through argo.workflows submit/status/logs/delete/list APIs and updates step callers + tests accordingly.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
schema/testdata/editor-schemas.golden.json Updates editor schema output for exec_env options and new argo_module field.
schema/step_schema_builtins.go Expands step.sandbox_exec schema to include ephemeral + argo_module and updates field descriptions.
schema/module_schema.go Adds ephemeral exec_env option and argo_module field to module schema for sandbox exec config.
module/pipeline_step_sandbox_exec.go Plumbs argo_module through step.sandbox_exec into sandbox runner resolution.
module/pipeline_step_argo.go Updates Argo steps to pass real ctx into Argo module methods.
module/execenv_factory.go Implements exec_env: ephemeral resolution to ArgoEphemeralRunner (explicit module name or auto-detect).
module/execenv_factory_test.go Expands coverage for ephemeral exec env module selection and error paths.
module/argo_workflows.go Adds TTL support in CRD rendering and updates Argo workflow-run operations to accept ctx.
module/argo_workflows_test.go Updates tests for new Argo module method signatures requiring ctx.
module/argo_ephemeral_runner.go New runner implementation: submit → poll status → fetch logs → map phase to exit code; sets TTLStrategy.
module/argo_ephemeral_runner_test.go New unit tests covering status mapping, TTL rendering, secret passthrough, and ctx cancellation behaviors.

Comment thread schema/step_schema_builtins.go Outdated
Comment thread schema/step_schema_builtins.go Outdated
Comment thread module/argo_ephemeral_runner.go
Comment thread module/argo_ephemeral_runner.go
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 3, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:304: parsing iteration count: invalid syntax
baseline-bench.txt:310454: parsing iteration count: invalid syntax
baseline-bench.txt:645399: parsing iteration count: invalid syntax
baseline-bench.txt:969247: parsing iteration count: invalid syntax
baseline-bench.txt:1308944: parsing iteration count: invalid syntax
baseline-bench.txt:1589964: parsing iteration count: invalid syntax
benchmark-results.txt:304: parsing iteration count: invalid syntax
benchmark-results.txt:288374: parsing iteration count: invalid syntax
benchmark-results.txt:608400: parsing iteration count: invalid syntax
benchmark-results.txt:950377: parsing iteration count: invalid syntax
benchmark-results.txt:1251428: parsing iteration count: invalid syntax
benchmark-results.txt:1585185: 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 │
                            │       sec/op       │
InterpreterCreation-4               8.487m ± 62%
ComponentLoad-4                     3.525m ±  0%
ComponentExecute-4                  1.895µ ±  0%
PoolContention/workers-1-4          1.061µ ±  1%
PoolContention/workers-2-4          1.066µ ±  1%
PoolContention/workers-4-4          1.060µ ±  3%
PoolContention/workers-8-4          1.064µ ±  0%
PoolContention/workers-16-4         1.078µ ±  2%
ComponentLifecycle-4                3.594m ±  1%
SourceValidation-4                  2.326µ ±  1%
RegistryConcurrent-4                843.7n ±  3%
LoaderLoadFromString-4              3.606m ±  0%
geomean                             18.82µ

                            │ 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

cpu: AMD EPYC 9V74 80-Core Processor                
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                  6.728m ± 56%
ComponentLoad-4                        3.467m ± 11%
ComponentExecute-4                     1.809µ ±  1%
PoolContention/workers-1-4             1.005µ ±  1%
PoolContention/workers-2-4             1.011µ ±  1%
PoolContention/workers-4-4             1.019µ ±  3%
PoolContention/workers-8-4             1.018µ ±  4%
PoolContention/workers-16-4            1.022µ ±  5%
ComponentLifecycle-4                   3.535m ±  0%
SourceValidation-4                     2.127µ ±  1%
RegistryConcurrent-4                   805.3n ±  5%
LoaderLoadFromString-4                 3.572m ±  1%
geomean                                17.76µ

                            │ 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

pkg: github.com/GoCodeAlone/workflow/middleware
cpu: AMD EPYC 7763 64-Core Processor                
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                  283.3n ± 1%
CircuitBreakerExecution_Success-4          21.54n ± 0%
CircuitBreakerExecution_Failure-4          66.14n ± 0%
geomean                                    73.90n

                                  │ 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

cpu: AMD EPYC 9V74 80-Core Processor                
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     296.6n ± 6%
CircuitBreakerExecution_Success-4             22.67n ± 0%
CircuitBreakerExecution_Failure-4             71.17n ± 0%
geomean                                       78.22n

                                  │ 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

pkg: github.com/GoCodeAlone/workflow/module
cpu: AMD EPYC 7763 64-Core Processor                
                                 │ baseline-bench.txt │
                                 │       sec/op       │
IaCStateBackend_InProcess-4              311.4n ± 27%
IaCStateBackend_GRPC-4                   9.436m ±  3%
JQTransform_Simple-4                     652.4n ± 37%
JQTransform_ObjectConstruction-4         1.490µ ±  0%
JQTransform_ArraySelect-4                3.430µ ±  3%
JQTransform_Complex-4                    39.35µ ±  1%
JQTransform_Throughput-4                 1.826µ ±  0%
SSEPublishDelivery-4                     68.61n ±  0%
geomean                                  3.850µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
IaCStateBackend_InProcess-4             416.0 ±  0%
IaCStateBackend_GRPC-4                5.825Mi ± 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.834k ± 1%
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: AMD EPYC 9V74 80-Core Processor                
                                 │ benchmark-results.txt │
                                 │        sec/op         │
IaCStateBackend_InProcess-4                 298.5n ± 35%
IaCStateBackend_GRPC-4                      10.14m ±  1%
JQTransform_Simple-4                        617.9n ± 34%
JQTransform_ObjectConstruction-4            1.469µ ±  3%
JQTransform_ArraySelect-4                   3.503µ ±  1%
JQTransform_Complex-4                       42.37µ ±  1%
JQTransform_Throughput-4                    1.744µ ±  3%
SSEPublishDelivery-4                        64.80n ±  1%
geomean                                     3.827µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
IaCStateBackend_InProcess-4                416.0 ±  0%
IaCStateBackend_GRPC-4                   5.767Mi ± 19%
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.853k ± 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 7763 64-Core Processor                
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                   1.093µ ± 20%
SchemaValidation_AllFields-4                1.672µ ±  1%
SchemaValidation_FormatValidation-4         1.615µ ±  3%
SchemaValidation_ManySchemas-4              1.811µ ± 19%
geomean                                     1.520µ

                                    │ 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

cpu: AMD EPYC 9V74 80-Core Processor                
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                      1.083µ ± 18%
SchemaValidation_AllFields-4                   1.630µ ±  7%
SchemaValidation_FormatValidation-4            1.555µ ±  1%
SchemaValidation_ManySchemas-4                 1.589µ ±  2%
geomean                                        1.445µ

                                    │ 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

pkg: github.com/GoCodeAlone/workflow/store
cpu: AMD EPYC 7763 64-Core Processor                
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.140µ ± 13%
EventStoreAppend_SQLite-4                  1.247m ±  2%
GetTimeline_InMemory/events-10-4           13.57µ ±  7%
GetTimeline_InMemory/events-50-4           76.74µ ±  4%
GetTimeline_InMemory/events-100-4          157.5µ ± 11%
GetTimeline_InMemory/events-500-4          619.9µ ±  2%
GetTimeline_InMemory/events-1000-4         1.267m ±  1%
GetTimeline_SQLite/events-10-4             70.00µ ±  1%
GetTimeline_SQLite/events-50-4             210.0µ ±  1%
GetTimeline_SQLite/events-100-4            381.6µ ±  2%
GetTimeline_SQLite/events-500-4            1.744m ±  1%
GetTimeline_SQLite/events-1000-4           3.434m ±  1%
geomean                                    206.9µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  788.0 ± 6%
EventStoreAppend_SQLite-4                  1.987Ki ± 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.34Ki

                                   │ 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

cpu: AMD EPYC 9V74 80-Core Processor                
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                   1.078µ ± 19%
EventStoreAppend_SQLite-4                     983.6µ ±  1%
GetTimeline_InMemory/events-10-4              13.14µ ±  4%
GetTimeline_InMemory/events-50-4              70.50µ ± 23%
GetTimeline_InMemory/events-100-4             110.0µ ±  1%
GetTimeline_InMemory/events-500-4             560.1µ ±  0%
GetTimeline_InMemory/events-1000-4            1.137m ±  1%
GetTimeline_SQLite/events-10-4                57.18µ ±  1%
GetTimeline_SQLite/events-50-4                189.5µ ±  0%
GetTimeline_SQLite/events-100-4               350.7µ ±  0%
GetTimeline_SQLite/events-500-4               1.634m ±  1%
GetTimeline_SQLite/events-1000-4              3.223m ±  3%
geomean                                       182.6µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                     769.5 ± 3%
EventStoreAppend_SQLite-4                     1.982Ki ± 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.19Ki

                                   │ 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

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

@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 3, 2026

…ixes (Copilot)

- ArgoEphemeralRunner best-effort DeleteWorkflow on ctx cancellation (fresh
  short ctx) so a cancelled/timed-out ephemeral step doesn't leave the Argo
  workflow running in-cluster until TTL GC. Added to the argoSubmitter
  interface + both test fakes; cancel test asserts deleteCalled.
- step.sandbox_exec schema description generalized (not just Docker — also
  remote/ephemeral via exec_env), in both schema registries + golden.
- exec_env field description drops the internal PR ref; notes named remote
  runners are valid dynamic values.
- logs-retrieval-failure comment matches the actual warning-line behavior.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@intel352 intel352 merged commit 1f2ad49 into main Jun 3, 2026
22 checks passed
@intel352 intel352 deleted the feat/infra-p3c-argo branch June 3, 2026 05:08
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