Skip to content

feat(wfctl): add provider log capture#738

Merged
intel352 merged 1 commit into
mainfrom
feat/log-capture-20260520
May 20, 2026
Merged

feat(wfctl): add provider log capture#738
intel352 merged 1 commit into
mainfrom
feat/log-capture-20260520

Conversation

@intel352
Copy link
Copy Markdown
Contributor

Summary

  • add typed IaC log capture proto/service and wfctl logs capture command
  • expose log capture through typed IaC adapters and SDK contract registry
  • preserve provider access to the framework-owned gRPC server for optional service discovery

Verification

  • GOWORK=off go test ./cmd/wfctl ./plugin/external/proto ./plugin/external/sdk -run 'TestLogsCaptureUsesConfiguredProviderAndWritesOutput|TestOptionalServicesHaveDistinctInterfaces|TestBuildContractRegistryAdvertisesLogCaptureService|TestIaCGRPCPlugin_GRPCServer_(SharesServerWithProvider|RegistersAllServices|PropagatesAutoRegisterError)' -count=1
  • GOWORK=off go test ./cmd/wfctl ./plugin/external/proto ./plugin/external/sdk -count=1
  • git diff --check

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 typed IaC “log capture” capability end-to-end: proto/service definition, SDK service registration & contract-registry exposure, wfctl typed adapter support, and a new wfctl logs capture command to stream provider logs.

Changes:

  • Introduces IaCProviderLogCapture gRPC service (server-streaming LogChunk) and wires it into SDK auto-registration + contract registry.
  • Extends wfctl’s typed IaC adapter to call the log-capture stream and forward chunks to an interfaces.LogCaptureSink.
  • Adds wfctl logs capture CLI command (plus config/provider resolution) and tests.

Reviewed changes

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

Show a summary per file
File Description
plugin/external/sdk/iacserver.go Registers the new optional log-capture service; adds a provider hook to receive the framework-owned *grpc.Server.
plugin/external/sdk/iacserver_serve_test.go Tests that the plugin shares the constructed gRPC server with server-aware providers.
plugin/external/sdk/contracts_logcapture_test.go Ensures the contract registry advertises the new log-capture service when registered.
plugin/external/proto/iac.proto Adds IaCProviderLogCapture service plus LogCaptureType, CaptureLogsRequest, and LogChunk messages.
plugin/external/proto/iac.pb.go Regenerated protobuf Go types for the new service/messages.
plugin/external/proto/iac_proto_test.go Extends optional-service interface distinctness test to include log capture.
plugin/external/proto/iac_grpc.pb.go Regenerated gRPC stubs for the new log-capture service (server-streaming).
interfaces/iac_provider.go Adds LogCaptureProvider, LogCaptureRequest, LogChunk, and LogCaptureSink interfaces/types.
cmd/wfctl/wfctl.yaml Registers a new top-level logs command pipeline.
cmd/wfctl/main.go Adds logs to the wfctl command dispatch map.
cmd/wfctl/logs.go Implements wfctl logs capture including provider resolution and streaming output sink.
cmd/wfctl/logs_test.go Tests that logs capture uses the configured provider and writes captured output.
cmd/wfctl/iac_typed_adapter.go Adds typed client support for log capture and translates streaming chunks into interfaces.LogChunk.
Files not reviewed (1)
  • plugin/external/proto/iac_grpc.pb.go: Language not supported

Comment thread cmd/wfctl/logs.go Outdated
Comment thread cmd/wfctl/logs.go
Comment thread cmd/wfctl/iac_typed_adapter.go Outdated
@codecov
Copy link
Copy Markdown

codecov Bot commented May 20, 2026

Codecov Report

❌ Patch coverage is 43.16239% with 133 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
cmd/wfctl/logs.go 56.83% 46 Missing and 14 partials ⚠️
cmd/wfctl/iac_typed_adapter.go 26.22% 42 Missing and 3 partials ⚠️
plugin/external/proto/iac_grpc.pb.go 0.00% 26 Missing ⚠️
plugin/external/sdk/iacserver.go 50.00% 1 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

@intel352 intel352 force-pushed the feat/log-capture-20260520 branch from 15bb166 to d604da2 Compare May 20, 2026 11:52
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 20, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:274: parsing iteration count: invalid syntax
baseline-bench.txt:314951: parsing iteration count: invalid syntax
baseline-bench.txt:611823: parsing iteration count: invalid syntax
baseline-bench.txt:912901: parsing iteration count: invalid syntax
baseline-bench.txt:1193021: parsing iteration count: invalid syntax
baseline-bench.txt:1497465: parsing iteration count: invalid syntax
benchmark-results.txt:274: parsing iteration count: invalid syntax
benchmark-results.txt:331304: parsing iteration count: invalid syntax
benchmark-results.txt:670533: parsing iteration count: invalid syntax
benchmark-results.txt:973531: parsing iteration count: invalid syntax
benchmark-results.txt:1298741: parsing iteration count: invalid syntax
benchmark-results.txt:1578507: 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.340m ± 62%   8.241m ± 59%       ~ (p=0.937 n=6)
ComponentLoad-4                     3.622m ±  9%   3.692m ±  4%       ~ (p=0.065 n=6)
ComponentExecute-4                  1.946µ ±  1%   1.925µ ±  1%  -1.10% (p=0.011 n=6)
PoolContention/workers-1-4          1.092µ ±  2%   1.097µ ±  2%       ~ (p=0.329 n=6)
PoolContention/workers-2-4          1.085µ ±  1%   1.094µ ±  1%  +0.83% (p=0.048 n=6)
PoolContention/workers-4-4          1.080µ ±  1%   1.093µ ±  1%  +1.20% (p=0.002 n=6)
PoolContention/workers-8-4          1.091µ ±  0%   1.090µ ±  1%       ~ (p=0.903 n=6)
PoolContention/workers-16-4         1.089µ ±  1%   1.095µ ±  1%       ~ (p=0.121 n=6)
ComponentLifecycle-4                3.572m ±  0%   3.864m ±  3%  +8.17% (p=0.002 n=6)
SourceValidation-4                  2.338µ ±  1%   2.311µ ±  1%       ~ (p=0.102 n=6)
RegistryConcurrent-4                802.2n ±  4%   766.4n ±  1%  -4.46% (p=0.002 n=6)
LoaderLoadFromString-4              3.591m ±  1%   3.625m ±  3%  +0.92% (p=0.009 n=6)
geomean                             18.95µ         19.04µ        +0.47%

                            │ 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.368 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%  +0.00% (p=0.009 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.201 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                  287.9n ± 4%   292.0n ± 5%       ~ (p=0.937 n=6)
CircuitBreakerExecution_Success-4          21.34n ± 1%   21.53n ± 0%       ~ (p=0.058 n=6)
CircuitBreakerExecution_Failure-4          66.19n ± 2%   66.43n ± 0%       ~ (p=0.063 n=6)
geomean                                    74.08n        74.74n       +0.89%

                                  │ 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              307.8n ± 26%   310.2n ± 29%        ~ (p=0.240 n=6)
IaCStateBackend_GRPC-4                   9.351m ±  5%   9.664m ±  3%   +3.35% (p=0.026 n=6)
JQTransform_Simple-4                     666.7n ± 37%   694.8n ± 30%        ~ (p=0.310 n=6)
JQTransform_ObjectConstruction-4         1.502µ ±  0%   1.506µ ±  1%        ~ (p=0.061 n=6)
JQTransform_ArraySelect-4                3.429µ ±  1%   3.492µ ±  1%   +1.82% (p=0.002 n=6)
JQTransform_Complex-4                    38.76µ ±  2%   39.47µ ±  0%        ~ (p=0.065 n=6)
JQTransform_Throughput-4                 1.842µ ±  0%   1.850µ ±  0%   +0.46% (p=0.002 n=6)
SSEPublishDelivery-4                     63.82n ±  7%   71.57n ±  0%  +12.14% (p=0.002 n=6)
geomean                                  3.816µ         3.933µ         +3.05%

                                 │ 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.735Mi ± 12%     5.913Mi ± 10%       ~ (p=0.937 n=6)
JQTransform_Simple-4                  1.273Ki ±  0%     1.273Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4      1.773Ki ±  0%     1.773Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4             2.625Ki ±  0%     2.625Ki ±  0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                 16.22Ki ±  0%     16.22Ki ±  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.38%               ²
¹ 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.840k ± 0%     6.835k ± 0%       ~ (p=0.686 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                    324.0 ± 0%      324.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.01%               ²
¹ 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.089µ ± 16%   1.099µ ± 7%       ~ (p=0.310 n=6)
SchemaValidation_AllFields-4                1.646µ ±  3%   1.647µ ± 1%       ~ (p=0.816 n=6)
SchemaValidation_FormatValidation-4         1.588µ ±  1%   1.591µ ± 1%       ~ (p=0.786 n=6)
SchemaValidation_ManySchemas-4              1.864µ ±  4%   1.817µ ± 3%       ~ (p=0.065 n=6)
geomean                                     1.518µ         1.512µ       -0.36%

                                    │ 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.294µ ± 12%   1.254µ ± 15%        ~ (p=0.394 n=6)
EventStoreAppend_SQLite-4                  1.321m ±  2%   1.623m ±  8%  +22.82% (p=0.002 n=6)
GetTimeline_InMemory/events-10-4           13.65µ ±  3%   13.57µ ±  5%        ~ (p=0.394 n=6)
GetTimeline_InMemory/events-50-4           62.55µ ± 25%   75.40µ ±  2%        ~ (p=0.310 n=6)
GetTimeline_InMemory/events-100-4          125.2µ ±  1%   123.5µ ± 20%        ~ (p=0.065 n=6)
GetTimeline_InMemory/events-500-4          645.9µ ±  1%   633.2µ ±  2%   -1.97% (p=0.041 n=6)
GetTimeline_InMemory/events-1000-4         1.328m ±  1%   1.294m ±  2%   -2.56% (p=0.009 n=6)
GetTimeline_SQLite/events-10-4             108.2µ ±  4%   105.2µ ±  1%   -2.78% (p=0.002 n=6)
GetTimeline_SQLite/events-50-4             253.9µ ±  0%   246.0µ ±  1%   -3.11% (p=0.002 n=6)
GetTimeline_SQLite/events-100-4            428.3µ ±  0%   417.3µ ±  1%   -2.57% (p=0.002 n=6)
GetTimeline_SQLite/events-500-4            1.831m ±  0%   1.788m ±  2%   -2.33% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4           3.553m ±  3%   3.512m ±  1%   -1.14% (p=0.002 n=6)
geomean                                    218.7µ         221.9µ         +1.47%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                  796.0 ± 6%     806.0 ± 8%       ~ (p=0.738 n=6)
EventStoreAppend_SQLite-4                  1.986Ki ± 1%   1.985Ki ± 2%       ~ (p=1.000 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=0.545 n=6)
GetTimeline_InMemory/events-1000-4         944.3Ki ± 0%   944.3Ki ± 0%       ~ (p=0.636 n=6)
GetTimeline_SQLite/events-10-4             16.74Ki ± 0%   16.74Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4             87.14Ki ± 0%   87.14Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_SQLite/events-100-4            175.4Ki ± 0%   175.4Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4            846.1Ki ± 0%   846.1Ki ± 0%       ~ (p=0.273 n=6)
GetTimeline_SQLite/events-1000-4           1.639Mi ± 0%   1.639Mi ± 0%       ~ (p=0.177 n=6)
geomean                                    67.39Ki        67.46Ki       +0.10%
¹ 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                    53.00 ± 0%    53.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               382.0 ± 0%    382.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4              1.852k ± 0%   1.852k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4             3.681k ± 0%   3.681k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4             18.54k ± 0%   18.54k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-1000-4            37.29k ± 0%   37.29k ± 0%       ~ (p=1.000 n=6) ¹
geomean                                     1.162k        1.162k       +0.00%
¹ all samples are equal

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

Copilot AI review requested due to automatic review settings May 20, 2026 12:07
@intel352 intel352 force-pushed the feat/log-capture-20260520 branch from d604da2 to 0b5ef15 Compare May 20, 2026 12:07
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

Copilot reviewed 14 out of 16 changed files in this pull request and generated 1 comment.

Files not reviewed (1)
  • plugin/external/proto/iac_grpc.pb.go: Language not supported

Comment thread cmd/wfctl/logs.go
@intel352 intel352 force-pushed the feat/log-capture-20260520 branch from 0b5ef15 to d9efca6 Compare May 20, 2026 12:18
@intel352 intel352 merged commit f5d28be into main May 20, 2026
28 checks passed
@intel352 intel352 deleted the feat/log-capture-20260520 branch May 20, 2026 12:31
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