Updates/nats tenant int cont #2627

Merged
mfreeman451 merged 4 commits from refs/pull/2627/head into testing 2026-01-02 21:23:12 +00:00
mfreeman451 commented 2026-01-02 04:14:05 +00:00 (Migrated from github.com)
Owner

Imported from GitHub pull request.

Original GitHub pull request: #2219
Original author: @mfreeman451
Original URL: https://github.com/carverauto/serviceradar/pull/2219
Original created: 2026-01-02T04:14:05Z
Original updated: 2026-01-02T21:23:14Z
Original head: carverauto/serviceradar:updates/nats-tenant-int-cont
Original base: testing
Original merged: 2026-01-02T21:23:12Z by @mfreeman451

User description

IMPORTANT: Please sign the Developer Certificate of Origin

Thank you for your contribution to ServiceRadar. Please note, when contributing, the developer must include
a DCO sign-off statement indicating the DCO acceptance in one commit message. Here
is an example DCO Signed-off-by line in a commit message:

Signed-off-by: J. Doe <j.doe@domain.com>

Describe your changes

Code checklist before requesting a review

  • I have signed the DCO?
  • The build completes without errors?
  • All tests are passing when running make test?

PR Type

Enhancement, Tests


Description

  • NATS tenant integration and account management: Comprehensive implementation of NATS operator bootstrap, tenant account creation, and user credential generation with JWT signing capabilities

  • Multi-tenant identity extraction: New tenant context propagation system extracting tenant information from mTLS certificates and injecting it into gRPC request contexts

  • NATS credentials file support: Added credentials file configuration across all services (Go, Rust, Elixir) for authenticated NATS connections

  • gRPC NATSAccountService: Stateless service providing operator bootstrap, account creation, user credential generation, and JWT signing with mTLS authorization

  • CLI enhancements: New nats-bootstrap and admin nats commands for operator initialization, tenant account management, and token generation

  • Edge onboarding package management: Elixir-based CRUD operations for onboarding packages with tenant certificate generation, token management, and audit event tracking

  • Tenant-aware NATS subjects: Event publisher support for dynamic tenant prefix application to NATS subjects based on context

  • Comprehensive test coverage: Unit tests for account management, user credentials, operator key generation, tenant parsing, and event prefixing

  • Configuration updates: Added NATS operator and credentials file configuration fields across datasvc, consumers, and collector services


Diagram Walkthrough

flowchart LR
  A["mTLS Certificate"] -->|"Extract Tenant CN"| B["TenantInterceptor"]
  B -->|"Inject Context"| C["gRPC Request"]
  C -->|"Route to Service"| D["NATSAccountService"]
  D -->|"Sign JWT"| E["Account/User Credentials"]
  E -->|"Push via NATS"| F["NATS Resolver"]
  G["CLI Bootstrap"] -->|"Initialize"| H["Operator Keys"]
  H -->|"Create Accounts"| D
  I["Services"] -->|"Use Creds File"| J["NATS Connection"]
  K["Event Publisher"] -->|"Apply Tenant Prefix"| L["NATS Subjects"]

File Walkthrough

Relevant files
Code generation
1 files
nats_account.pb.go
NATS account management protobuf generated code                   

proto/nats_account.pb.go

  • Generated protobuf Go code for NATS account management with 1266 lines
  • Defines message types for account limits, subject mappings, and user
    credentials
  • Implements credential types (collector, service, admin) and
    account/user JWT operations
  • Includes service definitions for bootstrap, tenant account creation,
    and JWT signing
+1266/-0
Enhancement
26 files
nats_bootstrap.go
NATS bootstrap CLI implementation and account management 

pkg/cli/nats_bootstrap.go

  • Implements NATS bootstrap CLI handlers for operator initialization and
    tenant account creation
  • Provides local and remote bootstrap modes with file generation for
    operator JWT, seeds, and credentials
  • Includes platform and system account credential generation with
    configurable permissions
  • Adds admin commands for token generation, status checking, and tenant
    listing
+961/-0 
cli.go
Admin command handler and CLI registration                             

pkg/cli/cli.go

  • Adds AdminHandler to dispatch nested admin commands with support for
    admin nats subcommands
  • Registers nats-bootstrap and admin handlers in the command parser
  • Implements resource-based routing for admin operations
+22/-0   
nats_account_service.go
NATS Account Service Implementation with JWT Operations   

pkg/datasvc/nats_account_service.go

  • Implements NATSAccountServer gRPC service for stateless NATS JWT/NKeys
    cryptographic operations
  • Provides methods for operator bootstrap, tenant account creation, user
    credential generation, and JWT signing
  • Handles mTLS authorization via authorizeRequest() and extracts client
    identity from peer certificates
  • Manages NATS resolver connections for pushing account JWTs via $SYS
    topics
+808/-0 
operator.go
NATS Operator Key Management and Bootstrap                             

pkg/nats/accounts/operator.go

  • Implements Operator type for managing NATS operator keys and JWT
    signing operations
  • Provides BootstrapOperator() function to initialize new or import
    existing operator keys
  • Includes utility functions for generating operator, account, and user
    key pairs
  • Supports loading operator configuration from direct values,
    environment variables, or files
+476/-0 
server.go
gRPC Server Tenant Context Extraction                                       

pkg/grpc/server.go

  • Adds TenantInterceptor() to extract tenant information from peer
    certificates
  • Injects tenant context into request context for downstream handlers
  • Logs tenant details (slug, partition, component) when available
  • Positioned first in interceptor chain to ensure tenant context is
    available to other interceptors
+31/-0   
tenant.go
Multi-tenant identity extraction from mTLS certificates   

pkg/tenant/tenant.go

  • New package for multi-tenant identity extraction from mTLS certificate
    CNs
  • Implements tenant info parsing from certificate Common Names with
    format validation
  • Provides context-based tenant propagation and NATS channel prefixing
    utilities
  • Supports extracting tenant from gRPC peer certificates and PEM-encoded
    files
+315/-0 
nats_config.go
NATS server configuration generation and collector setup 

pkg/edgeonboarding/nats_config.go

  • Configuration structures for NATS server bootstrap and collector
    credentials
  • Template-based NATS configuration file generation with TLS, JetStream,
    and clustering support
  • Collector permission generation for different collector types
    (flowgger, trapd, netflow, otel)
  • Bootstrap request and file structures for NATS server initialization
+328/-0 
account_manager.go
NATS tenant account creation and JWT signing                         

pkg/nats/accounts/account_manager.go

  • Account signer for creating and managing tenant NATS accounts with JWT
    signing
  • Subject mapping configuration for tenant isolation in NATS subjects
  • Account limits and JetStream configuration application to JWT claims
  • Stateless account operations using operator key for signing
+225/-0 
user_manager.go
NATS user credential generation with role-based permissions

pkg/nats/accounts/user_manager.go

  • User credential generation for NATS with role-based permissions
    (collector, service, admin)
  • Credential type-specific permission application for different use
    cases
  • NATS .creds file formatting for user authentication
  • User JWT creation and signing with account key
+217/-0 
events.go
Tenant-aware NATS event subject prefixing                               

pkg/natsutil/events.go

  • Added tenant prefixing support for NATS subjects via environment
    variable control
  • New methods for applying tenant prefix to event subjects based on
    context
  • EventPublisher now supports explicit tenant prefix configuration
  • Fallback to default tenant when no tenant found in context
+74/-13 
main.go
NATS account service integration in data services               

cmd/data-services/main.go

  • NATS account service initialization with operator configuration
  • Resolver path and system account credentials configuration from
    environment
  • gRPC service registration for NATSAccountService
  • Graceful handling of missing operator during startup with bootstrap
    capability
+68/-0   
edge_onboarding.go
Collector package and NATS credential models                         

pkg/models/edge_onboarding.go

  • New collector type constants (flowgger, trapd, netflow, otel)
  • Collector package lifecycle status constants (pending, provisioning,
    ready, etc.)
  • CollectorPackage and NatsCredential model structures for credential
    management
  • CollectorDownloadResult structure for package delivery
+71/-0   
nats.go
NATS credentials file support in datasvc connection           

pkg/datasvc/nats.go

  • Added credsFile field to NATSStore for credential file support
  • NATS connection now uses UserCredentials option when creds file is
    configured
  • Improved connection options handling with conditional credential
    loading
+11/-2   
rbac.go
Certificate subject identity extraction improvement           

pkg/datasvc/rbac.go

  • Added subjectIdentity function for extracting identity from
    certificate subject
  • Improved identity extraction using CN and Organization fields
  • Fallback to full subject string when CN is unavailable
+23/-1   
main.go
CLI command dispatch for NATS bootstrap and admin               

cmd/cli/main.go

  • Added dispatch for nats-bootstrap command
  • Added dispatchAdminCommand function for routing admin subcommands
  • Support for admin nats command routing
+14/-0   
service.go
NATS credentials file support in netflow consumer               

pkg/consumers/netflow/service.go

  • Added NATS credentials file support to netflow service connection
  • Conditional loading of credentials file when configured
+8/-2     
events.go
NATS credentials file support in core event publisher       

pkg/core/events.go

  • Added NATS credentials file option to event publisher initialization
  • Conditional loading of credentials when configured
+4/-0     
kv_client.go
NATS credentials file support in KV client                             

pkg/config/kv_client.go

  • Added NATS credentials file support from environment variable
  • Conditional loading of credentials when KV_NATS_CREDS_FILE is set
+5/-0     
main.rs
NATS credentials file support in trapd service                     

cmd/trapd/src/main.rs

  • Added credentials file path resolution and conditional loading
  • Support for credentials in both SecurityMode::None and
    SecurityMode::Mtls
  • Fallback to credentials-only connection when no security config
+21/-1   
nats_output.rs
NATS credentials file support in flowgger output                 

cmd/flowgger/src/flowgger/output/nats_output.rs

  • Added creds_file field to NATSConfig structure
  • Conditional loading of credentials file during NATS connection
+14/-0   
nats_output.rs
NATS credentials file support in OpenTelemetry output       

cmd/otel/src/nats_output.rs

  • Added creds_file field to NATSConfig with default None
  • Conditional loading of credentials file during connection
  • Debug logging for credentials file usage
+7/-0     
nats.rs
NATS credentials file support in zen NATS connection         

cmd/consumers/zen/src/nats.rs

  • Added credentials file path resolution and conditional loading
  • Credentials file applied before other TLS configuration
+4/-0     
watch.rs
KV watch initial snapshot optimization                                     

rust/config-bootstrap/src/watch.rs

  • Added initial snapshot skipping logic to prevent duplicate
    notifications
  • Tracks first event to skip initial KV snapshot already loaded during
    bootstrap
  • Improved change detection to only notify on actual configuration
    changes
+13/-0   
setup.rs
NATS credentials file debug logging                                           

cmd/otel/src/setup.rs

  • Added debug logging for NATS credentials file configuration
+1/-0     
onboarding_packages.ex
Edge onboarding package management with tenant certificates

elixir/serviceradar_core/lib/serviceradar/edge/onboarding_packages.ex

  • Comprehensive Ash-based context module for edge onboarding package
    CRUD operations
  • Token generation, delivery, revocation, and soft-delete functionality
  • Component certificate generation signed by tenant CA with SPIFFE URI
    support
  • Package creation with automatic tenant certificate inclusion and
    encryption
+606/-0 
onboarding_event.ex
Edge onboarding audit event resource                                         

elixir/serviceradar_core/lib/serviceradar/edge/onboarding_event.ex

  • Ash resource for audit events stored in TimescaleDB hypertable
  • Event types for package lifecycle (created, delivered, activated,
    revoked, deleted)
  • Composite primary key (event_time, package_id) for efficient
    time-series queries
  • Policy-based authorization for event access and creation
+128/-0 
Formatting
2 files
kv.pb.go
Protobuf file path normalization in KV service                     

proto/kv.pb.go

  • Updates protobuf file references from proto/kv.proto to kv.proto
  • Corrects all internal variable names from file_proto_kv_proto_* to
    file_kv_proto_*
  • Maintains all message and service definitions without functional
    changes
+83/-83 
kv_grpc.pb.go
Proto metadata path correction                                                     

proto/kv_grpc.pb.go

  • Updated metadata reference from proto/kv.proto to kv.proto
+2/-2     
Dependencies
1 files
nats_account_grpc.pb.go
Generated gRPC Protocol Buffer Service Code                           

proto/nats_account_grpc.pb.go

  • Auto-generated gRPC service definitions for NATSAccountService
  • Defines client and server interfaces for six RPC methods:
    BootstrapOperator, GetOperatorInfo, CreateTenantAccount,
    GenerateUserCredentials, SignAccountJWT, PushAccountJWT
  • Includes service registration and handler implementations
+376/-0 
Tests
6 files
nats_account_service_test.go
NATS Account Service Unit Tests                                                   

pkg/datasvc/nats_account_service_test.go

  • Comprehensive test suite for NATSAccountServer with mocked mTLS
    context
  • Tests account creation, user credential generation, and JWT signing
    operations
  • Validates proto conversion functions and error handling for invalid
    inputs
  • Includes tests for account limits, subject mappings, and credential
    expiration
+474/-0 
user_manager_test.go
User Credentials Generation Tests                                               

pkg/nats/accounts/user_manager_test.go

  • Tests for GenerateUserCredentials() function covering all credential
    types (collector, service, admin)
  • Validates user JWT structure, permissions, and creds file formatting
  • Tests custom permissions, expiration handling, and error cases
  • Verifies JWT is properly signed by account and unique keys are
    generated
+440/-0 
account_manager_test.go
Account Signer and Management Tests                                           

pkg/nats/accounts/account_manager_test.go

  • Tests for AccountSigner and account creation operations
  • Validates account JWT claims, limits, and subject mappings
  • Tests JWT re-signing with revocations and updated limits
  • Verifies multiple accounts can be created with unique keys
+370/-0 
tenant_test.go
Tenant Information Parsing and Context Tests                         

pkg/tenant/tenant_test.go

  • Tests for tenant information parsing from certificate Common Names
    (CN)
  • Validates ParseCN() function with various CN formats and error cases
  • Tests tenant context injection/extraction from gRPC context
  • Includes roundtrip tests and helper functions for tenant slug
    prefixing
+354/-0 
operator_test.go
NATS operator key generation and JWT signing tests             

pkg/nats/accounts/operator_test.go

  • Comprehensive test suite for NATS operator key generation and
    management
  • Tests for operator initialization from direct seed, file, and
    environment variables
  • Tests for system account public key configuration from multiple
    sources
  • Tests for operator JWT creation and key encoding/decoding for storage
+357/-0 
events_test.go
Tenant prefixing functionality tests                                         

pkg/natsutil/events_test.go

  • Tests for tenant prefix environment variable parsing
  • Tests for tenant prefix application with context-based tenant
    extraction
  • Tests for EventPublisher tenant prefixing configuration and control
  • Tests for dynamic tenant prefix enable/disable functionality
+135/-0 
Configuration changes
9 files
prod.exs
Production Configuration for Elixir Poller                             

elixir/serviceradar_poller/config/prod.exs

  • Adds production configuration file for Elixir poller service
  • Sets logger level to info for production environment
+4/-0     
types.go
NATS operator and credentials configuration in datasvc     

pkg/datasvc/types.go

  • Added NATSCredsFile configuration field to datasvc Config
  • Added NATSOperator configuration for NATS account management service
  • Documentation for NATS operator configuration and multi-tenant
    isolation
+20/-14 
config.go
NATS credentials file configuration for event writer         

pkg/consumers/db-event-writer/config.go

  • Added NATSCredsFile optional configuration field
  • Field ordering and formatting adjustments for consistency
+13/-12 
types.go
NATS bootstrap CLI configuration fields                                   

pkg/cli/types.go

  • Added NATS bootstrap configuration fields to CmdConfig
  • Added admin command fields for NATS operations
  • Configuration for bootstrap token, output directory, operator setup,
    and TLS
+25/-0   
events.go
NATS credentials file configuration in event models           

pkg/models/events.go

  • Added CredsFile field to NATSConfig structure
  • Support for NATS credentials file configuration
+4/-3     
netflow.go
NATS credentials file configuration in netflow models       

pkg/models/netflow.go

  • Added NATSCredsFile optional configuration field
+1/-0     
config.rs
NATS credentials file configuration in trapd                         

cmd/trapd/src/config.rs

  • Added nats_creds_file optional configuration field
  • Added validation for non-empty credentials file path
  • Added nats_creds_path method for resolving credentials file path
+21/-0   
config.rs
NATS credentials file configuration in OpenTelemetry collector

cmd/otel/src/config.rs

  • Added creds_file optional field to NATSConfigTOML
  • Added credentials file path resolution in Config initialization
  • Updated default config example with credentials file path
+13/-0   
config.rs
NATS credentials file configuration in zen consumer           

cmd/consumers/zen/src/config.rs

  • Added nats_creds_file optional configuration field
  • Added validation for non-empty credentials file
  • Added nats_creds_path method for resolving credentials file with path
    handling
+25/-0   
Error handling
2 files
errors.go
NATS bootstrap and admin command error definitions             

pkg/cli/errors.go

  • Added NATS bootstrap-related error variables for CLI commands
  • Added admin NATS command error handling
  • Added helper function ErrUnknownAdminResource for error wrapping
+17/-2   
errors.go
NATS resolver and operator error definitions                         

pkg/datasvc/errors.go

  • Added resolver and operator configuration error variables
  • Added account JWT requirement error for NATS operations
+6/-0     
Additional files
101 files
.bazelignore +4/-0     
.bazelrc +2/-0     
.env.example +38/-0   
AGENTS.md +171/-2 
MODULE.bazel +5/-0     
Makefile +4/-0     
README-Docker.md +16/-1   
BUILD.bazel +6/-0     
BUILD.bazel +12/-0   
mix_release.bzl +120/-49
zen-consumer-with-otel.json +1/-0     
zen-consumer.json +1/-0     
BUILD.bazel +1/-0     
flowgger.toml +1/-0     
otel.toml +1/-0     
docker-compose.elx.yml +108/-0 
docker-compose.spiffe.yml +8/-0     
docker-compose.yml +364/-268
Dockerfile.core-elx +108/-0 
Dockerfile.poller-elx +95/-0   
Dockerfile.web-ng +6/-0     
.gitkeep +1/-0     
datasvc.docker.json +1/-0     
datasvc.mtls.json +13/-0   
db-event-writer.mtls.json +1/-0     
entrypoint-certs.sh +11/-6   
flowgger.docker.toml +2/-1     
generate-certs.sh +212/-6 
nats.docker.conf +16/-160
netflow-consumer.mtls.json +1/-0     
otel.docker.toml +2/-0     
pg_hba.conf +9/-0     
pg_ident.conf +17/-0   
ssl_dist.core.conf +17/-0   
ssl_dist.poller.conf +17/-0   
ssl_dist.web.conf +17/-0   
trapd.docker.json +2/-1     
zen.docker.json +2/-1     
BUILD.bazel +80/-0   
push_targets.bzl +2/-0     
architecture.md +58/-6   
ash-api.md +305/-0 
ash-authentication.md +244/-0 
ash-authorization.md +283/-0 
ash-domains.md +223/-0 
ash-migration-guide.md +339/-0 
docker-setup.md +39/-4   
edge-agents.md +253/-0 
edge-onboarding.md +316/-273
security-architecture.md +238/-0 
spiffe-identity.md +52/-0   
troubleshooting-guide.md +51/-0   
datasvc.ex +32/-2   
.formatter.exs +15/-0   
BUILD.bazel +14/-0   
README.md +269/-0 
config.exs +101/-0 
dev.exs +66/-0   
prod.exs +6/-0     
runtime.exs +196/-0 
test.exs +91/-0   
eventwriter.md +370/-0 
device.ex +608/-0 
device_registry.ex +284/-0 
telemetry.ex +267/-0 
application.ex +373/-0 
backoff.ex +59/-0   
agent_registration_worker.ex +241/-0 
cluster_health.ex +298/-0 
cluster_status.ex +272/-0 
cluster_supervisor.ex +129/-0 
poller_supervisor.ex +66/-0   
registration_worker.ex +249/-0 
tenant_guard.ex +300/-0 
tenant_registry.ex +630/-0 
tenant_schemas.ex +381/-0 
result_processor.ex +399/-0 
stats_aggregator.ex +626/-0 
client.ex +507/-0 
edge.ex +53/-0   
agent_process.ex +528/-0 
collector_package.ex +436/-0 
crypto.ex +183/-0 
nats_credential.ex +262/-0 
onboarding_events.ex +195/-0 
onboarding_package.ex +417/-0 
poller_process.ex +450/-0 
pubsub.ex +82/-0   
tenant_ca.ex +280/-0 
generator.ex +504/-0 
tenant_resolver.ex +327/-0 
provision_collector_worker.ex +292/-0 
record_event_worker.ex +84/-0   
config.ex +298/-0 
field_parser.ex +260/-0 
health.ex +156/-0 
ocsf.ex +360/-0 
pipeline.ex +258/-0 
processor.ex +51/-0   
default.ex +29/-0   
Additional files not shown

Imported from GitHub pull request. Original GitHub pull request: #2219 Original author: @mfreeman451 Original URL: https://github.com/carverauto/serviceradar/pull/2219 Original created: 2026-01-02T04:14:05Z Original updated: 2026-01-02T21:23:14Z Original head: carverauto/serviceradar:updates/nats-tenant-int-cont Original base: testing Original merged: 2026-01-02T21:23:12Z by @mfreeman451 --- ### **User description** ## IMPORTANT: Please sign the Developer Certificate of Origin Thank you for your contribution to ServiceRadar. Please note, when contributing, the developer must include a [DCO sign-off statement]( https://developercertificate.org/) indicating the DCO acceptance in one commit message. Here is an example DCO Signed-off-by line in a commit message: ``` Signed-off-by: J. Doe <j.doe@domain.com> ``` ## Describe your changes ## Issue ticket number and link ## Code checklist before requesting a review - [ ] I have signed the DCO? - [ ] The build completes without errors? - [ ] All tests are passing when running make test? ___ ### **PR Type** Enhancement, Tests ___ ### **Description** - **NATS tenant integration and account management**: Comprehensive implementation of NATS operator bootstrap, tenant account creation, and user credential generation with JWT signing capabilities - **Multi-tenant identity extraction**: New tenant context propagation system extracting tenant information from mTLS certificates and injecting it into gRPC request contexts - **NATS credentials file support**: Added credentials file configuration across all services (Go, Rust, Elixir) for authenticated NATS connections - **gRPC NATSAccountService**: Stateless service providing operator bootstrap, account creation, user credential generation, and JWT signing with mTLS authorization - **CLI enhancements**: New `nats-bootstrap` and `admin nats` commands for operator initialization, tenant account management, and token generation - **Edge onboarding package management**: Elixir-based CRUD operations for onboarding packages with tenant certificate generation, token management, and audit event tracking - **Tenant-aware NATS subjects**: Event publisher support for dynamic tenant prefix application to NATS subjects based on context - **Comprehensive test coverage**: Unit tests for account management, user credentials, operator key generation, tenant parsing, and event prefixing - **Configuration updates**: Added NATS operator and credentials file configuration fields across datasvc, consumers, and collector services ___ ### Diagram Walkthrough ```mermaid flowchart LR A["mTLS Certificate"] -->|"Extract Tenant CN"| B["TenantInterceptor"] B -->|"Inject Context"| C["gRPC Request"] C -->|"Route to Service"| D["NATSAccountService"] D -->|"Sign JWT"| E["Account/User Credentials"] E -->|"Push via NATS"| F["NATS Resolver"] G["CLI Bootstrap"] -->|"Initialize"| H["Operator Keys"] H -->|"Create Accounts"| D I["Services"] -->|"Use Creds File"| J["NATS Connection"] K["Event Publisher"] -->|"Apply Tenant Prefix"| L["NATS Subjects"] ``` <details><summary><h3>File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Code generation</strong></td><td><details><summary>1 files</summary><table> <tr> <td> <details> <summary><strong>nats_account.pb.go</strong><dd><code>NATS account management protobuf generated code</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> proto/nats_account.pb.go <ul><li>Generated protobuf Go code for NATS account management with 1266 lines<br> <li> Defines message types for account limits, subject mappings, and user <br>credentials<br> <li> Implements credential types (collector, service, admin) and <br>account/user JWT operations<br> <li> Includes service definitions for bootstrap, tenant account creation, <br>and JWT signing</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-49eb93c28e2d86d8dcf4ee78fd24bed498cf3fcfaa8e49849a36e70980420087">+1266/-0</a></td> </tr> </table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>26 files</summary><table> <tr> <td> <details> <summary><strong>nats_bootstrap.go</strong><dd><code>NATS bootstrap CLI implementation and account management</code>&nbsp; </dd></summary> <hr> pkg/cli/nats_bootstrap.go <ul><li>Implements NATS bootstrap CLI handlers for operator initialization and <br>tenant account creation<br> <li> Provides local and remote bootstrap modes with file generation for <br>operator JWT, seeds, and credentials<br> <li> Includes platform and system account credential generation with <br>configurable permissions<br> <li> Adds admin commands for token generation, status checking, and tenant <br>listing</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-2176d03ba6ab4ccc1b0587a4727171546eecf6123e4df815ead583aaab062457">+961/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>cli.go</strong><dd><code>Admin command handler and CLI registration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/cli/cli.go <ul><li>Adds <code>AdminHandler</code> to dispatch nested admin commands with support for <br><code>admin nats</code> subcommands<br> <li> Registers <code>nats-bootstrap</code> and <code>admin</code> handlers in the command parser<br> <li> Implements resource-based routing for admin operations</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3040c236897f2704958b674ce81c445b6de53f2ff4c204c812ec510de8a76a73">+22/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>nats_account_service.go</strong><dd><code>NATS Account Service Implementation with JWT Operations</code>&nbsp; &nbsp; </dd></summary> <hr> pkg/datasvc/nats_account_service.go <ul><li>Implements <code>NATSAccountServer</code> gRPC service for stateless NATS JWT/NKeys <br>cryptographic operations<br> <li> Provides methods for operator bootstrap, tenant account creation, user <br>credential generation, and JWT signing<br> <li> Handles mTLS authorization via <code>authorizeRequest()</code> and extracts client <br>identity from peer certificates<br> <li> Manages NATS resolver connections for pushing account JWTs via <code>$SYS</code> <br>topics</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3e814328b5d5bddca9cd4b0ca021a975cf416afdc059e454452580a4ce751320">+808/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>operator.go</strong><dd><code>NATS Operator Key Management and Bootstrap</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/nats/accounts/operator.go <ul><li>Implements <code>Operator</code> type for managing NATS operator keys and JWT <br>signing operations<br> <li> Provides <code>BootstrapOperator()</code> function to initialize new or import <br>existing operator keys<br> <li> Includes utility functions for generating operator, account, and user <br>key pairs<br> <li> Supports loading operator configuration from direct values, <br>environment variables, or files</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-14ae6d6482381ca8bbbd5dc42b4a5caa04269601624c8e7dc1941567f8e874d8">+476/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>server.go</strong><dd><code>gRPC Server Tenant Context Extraction</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/grpc/server.go <ul><li>Adds <code>TenantInterceptor()</code> to extract tenant information from peer <br>certificates<br> <li> Injects tenant context into request context for downstream handlers<br> <li> Logs tenant details (slug, partition, component) when available<br> <li> Positioned first in interceptor chain to ensure tenant context is <br>available to other interceptors</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-af62cb3a3a7c777bd1b8feed18657c3ecae951d2dbdea55527f08c8c67967c71">+31/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>tenant.go</strong><dd><code>Multi-tenant identity extraction from mTLS certificates</code>&nbsp; &nbsp; </dd></summary> <hr> pkg/tenant/tenant.go <ul><li>New package for multi-tenant identity extraction from mTLS certificate <br>CNs<br> <li> Implements tenant info parsing from certificate Common Names with <br>format validation<br> <li> Provides context-based tenant propagation and NATS channel prefixing <br>utilities<br> <li> Supports extracting tenant from gRPC peer certificates and PEM-encoded <br>files</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-52b7de0bd266ec6f84b342a6515e76a08f89be71a1a69dabd93babf55f644178">+315/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>nats_config.go</strong><dd><code>NATS server configuration generation and collector setup</code>&nbsp; </dd></summary> <hr> pkg/edgeonboarding/nats_config.go <ul><li>Configuration structures for NATS server bootstrap and collector <br>credentials<br> <li> Template-based NATS configuration file generation with TLS, JetStream, <br>and clustering support<br> <li> Collector permission generation for different collector types <br>(flowgger, trapd, netflow, otel)<br> <li> Bootstrap request and file structures for NATS server initialization</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-ae75ffeeb6591fed63961ef7cb46d3ded56258a641e009354f92a9ad78e38978">+328/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>account_manager.go</strong><dd><code>NATS tenant account creation and JWT signing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/nats/accounts/account_manager.go <ul><li>Account signer for creating and managing tenant NATS accounts with JWT <br>signing<br> <li> Subject mapping configuration for tenant isolation in NATS subjects<br> <li> Account limits and JetStream configuration application to JWT claims<br> <li> Stateless account operations using operator key for signing</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-6d99437619fe01afb4470e118528ff6f0154b1169948cce1fccfadd742c41178">+225/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>user_manager.go</strong><dd><code>NATS user credential generation with role-based permissions</code></dd></summary> <hr> pkg/nats/accounts/user_manager.go <ul><li>User credential generation for NATS with role-based permissions <br>(collector, service, admin)<br> <li> Credential type-specific permission application for different use <br>cases<br> <li> NATS .creds file formatting for user authentication<br> <li> User JWT creation and signing with account key</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-84b756d1bdd4d008851fb5859e56f79f44c8083c766ee0314d7862484ce8c12b">+217/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>events.go</strong><dd><code>Tenant-aware NATS event subject prefixing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/natsutil/events.go <ul><li>Added tenant prefixing support for NATS subjects via environment <br>variable control<br> <li> New methods for applying tenant prefix to event subjects based on <br>context<br> <li> EventPublisher now supports explicit tenant prefix configuration<br> <li> Fallback to default tenant when no tenant found in context</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3503010fc6a66fb16b8fbc055b7daf53be305d7284efe58d37a7fbf1813a6b63">+74/-13</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>main.go</strong><dd><code>NATS account service integration in data services</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> cmd/data-services/main.go <ul><li>NATS account service initialization with operator configuration<br> <li> Resolver path and system account credentials configuration from <br>environment<br> <li> gRPC service registration for NATSAccountService<br> <li> Graceful handling of missing operator during startup with bootstrap <br>capability</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-5e7731adfb877918cd65d9d5531621312496450fd550fea2682efca4ca8fe816">+68/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>edge_onboarding.go</strong><dd><code>Collector package and NATS credential models</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/models/edge_onboarding.go <ul><li>New collector type constants (flowgger, trapd, netflow, otel)<br> <li> Collector package lifecycle status constants (pending, provisioning, <br>ready, etc.)<br> <li> CollectorPackage and NatsCredential model structures for credential <br>management<br> <li> CollectorDownloadResult structure for package delivery</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-0c66da94363b25ecb9e4766c8f12cde387c1874aeb9099447c609c4e867b4fe0">+71/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>nats.go</strong><dd><code>NATS credentials file support in datasvc connection</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/datasvc/nats.go <ul><li>Added <code>credsFile</code> field to NATSStore for credential file support<br> <li> NATS connection now uses <code>UserCredentials</code> option when creds file is <br>configured<br> <li> Improved connection options handling with conditional credential <br>loading</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-5158b29e580a201f5f461d47939ece7caf94f27d43a5e0d465d79ea6b41ec4b4">+11/-2</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>rbac.go</strong><dd><code>Certificate subject identity extraction improvement</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/datasvc/rbac.go <ul><li>Added <code>subjectIdentity</code> function for extracting identity from <br>certificate subject<br> <li> Improved identity extraction using CN and Organization fields<br> <li> Fallback to full subject string when CN is unavailable</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-289dde1d035f5d7ae28cf97e20a73f55eb54aae4d86a3d50c5a824e2a6793173">+23/-1</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>main.go</strong><dd><code>CLI command dispatch for NATS bootstrap and admin</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> cmd/cli/main.go <ul><li>Added dispatch for <code>nats-bootstrap</code> command<br> <li> Added <code>dispatchAdminCommand</code> function for routing admin subcommands<br> <li> Support for <code>admin nats</code> command routing</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-ed4d81d29a7267f93fd77e17993fd3491b9ef6ded18490b4514d10ed1d803bc2">+14/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>service.go</strong><dd><code>NATS credentials file support in netflow consumer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/consumers/netflow/service.go <ul><li>Added NATS credentials file support to netflow service connection<br> <li> Conditional loading of credentials file when configured</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-934f311d3181dac33306bb1169cb7a070cf595d95bb5ffa1475bdea04fd20c66">+8/-2</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>events.go</strong><dd><code>NATS credentials file support in core event publisher</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/core/events.go <ul><li>Added NATS credentials file option to event publisher initialization<br> <li> Conditional loading of credentials when configured</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-7d499ed41701e367e51735c9a0a78bcce977dea3872771eb7b22c47dc39e0241">+4/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>kv_client.go</strong><dd><code>NATS credentials file support in KV client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/config/kv_client.go <ul><li>Added NATS credentials file support from environment variable<br> <li> Conditional loading of credentials when <code>KV_NATS_CREDS_FILE</code> is set</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-0c911990aa32d43404f0f23dadc0363ec97ed4ca315592e6c9bd24510e82e06d">+5/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>main.rs</strong><dd><code>NATS credentials file support in trapd service</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> cmd/trapd/src/main.rs <ul><li>Added credentials file path resolution and conditional loading<br> <li> Support for credentials in both SecurityMode::None and <br>SecurityMode::Mtls<br> <li> Fallback to credentials-only connection when no security config</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-33b655d8730ae3e9c844ee280787d11f1b0d5343119188273f89558805f814ba">+21/-1</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>nats_output.rs</strong><dd><code>NATS credentials file support in flowgger output</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> cmd/flowgger/src/flowgger/output/nats_output.rs <ul><li>Added <code>creds_file</code> field to NATSConfig structure<br> <li> Conditional loading of credentials file during NATS connection</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-a82e2e4d413539bf0b414b5629665b19648447523994cba639c4d1238aa5a0c1">+14/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>nats_output.rs</strong><dd><code>NATS credentials file support in OpenTelemetry output</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> cmd/otel/src/nats_output.rs <ul><li>Added <code>creds_file</code> field to NATSConfig with default None<br> <li> Conditional loading of credentials file during connection<br> <li> Debug logging for credentials file usage</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-6b585ea3564a481174e04da1270e2e13edd4e2b980d02a2652d6d21e6d82a498">+7/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>nats.rs</strong><dd><code>NATS credentials file support in zen NATS connection</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> cmd/consumers/zen/src/nats.rs <ul><li>Added credentials file path resolution and conditional loading<br> <li> Credentials file applied before other TLS configuration</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-97f7335def0ad5d644b594a1076ae2d7080b11259cbb8de22c7946cc8e4b39f8">+4/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>watch.rs</strong><dd><code>KV watch initial snapshot optimization</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> rust/config-bootstrap/src/watch.rs <ul><li>Added initial snapshot skipping logic to prevent duplicate <br>notifications<br> <li> Tracks first event to skip initial KV snapshot already loaded during <br>bootstrap<br> <li> Improved change detection to only notify on actual configuration <br>changes</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-f922120c29012f3c9ad574f52556ea318cefe5f9ab2060a18ab2d2e9d80d8c2b">+13/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>setup.rs</strong><dd><code>NATS credentials file debug logging</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> cmd/otel/src/setup.rs - Added debug logging for NATS credentials file configuration </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3891f667deb20fd26e296d3e2742c57378d3764fe1743118e612465ae360391f">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>onboarding_packages.ex</strong><dd><code>Edge onboarding package management with tenant certificates</code></dd></summary> <hr> elixir/serviceradar_core/lib/serviceradar/edge/onboarding_packages.ex <ul><li>Comprehensive Ash-based context module for edge onboarding package <br>CRUD operations<br> <li> Token generation, delivery, revocation, and soft-delete functionality<br> <li> Component certificate generation signed by tenant CA with SPIFFE URI <br>support<br> <li> Package creation with automatic tenant certificate inclusion and <br>encryption</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-e4fe8e19bc324416302bb4c962f57133b3f62eb82053766844d881c522a473e5">+606/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>onboarding_event.ex</strong><dd><code>Edge onboarding audit event resource</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> elixir/serviceradar_core/lib/serviceradar/edge/onboarding_event.ex <ul><li>Ash resource for audit events stored in TimescaleDB hypertable<br> <li> Event types for package lifecycle (created, delivered, activated, <br>revoked, deleted)<br> <li> Composite primary key (event_time, package_id) for efficient <br>time-series queries<br> <li> Policy-based authorization for event access and creation</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-ffd06b5c67a092f2e42b21f6e556110f9fa9ccc9b825e25a39d2deb88745f7b8">+128/-0</a>&nbsp; </td> </tr> </table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>2 files</summary><table> <tr> <td> <details> <summary><strong>kv.pb.go</strong><dd><code>Protobuf file path normalization in KV service</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> proto/kv.pb.go <ul><li>Updates protobuf file references from <code>proto/kv.proto</code> to <code>kv.proto</code><br> <li> Corrects all internal variable names from <code>file_proto_kv_proto_*</code> to <br><code>file_kv_proto_*</code><br> <li> Maintains all message and service definitions without functional <br>changes</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-0b9bbdd1cf0f65de86dd5ee0c824e5d35326bb4b8edcf1c97b61864493f4477f">+83/-83</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>kv_grpc.pb.go</strong><dd><code>Proto metadata path correction</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> proto/kv_grpc.pb.go - Updated metadata reference from `proto/kv.proto` to `kv.proto` </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-6daa12c34cd941284969fc2b1098fff1f7a96a17c57d99c7ba9267d494ebddd5">+2/-2</a>&nbsp; &nbsp; &nbsp; </td> </tr> </table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>1 files</summary><table> <tr> <td> <details> <summary><strong>nats_account_grpc.pb.go</strong><dd><code>Generated gRPC Protocol Buffer Service Code</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> proto/nats_account_grpc.pb.go <ul><li>Auto-generated gRPC service definitions for <code>NATSAccountService</code><br> <li> Defines client and server interfaces for six RPC methods: <br><code>BootstrapOperator</code>, <code>GetOperatorInfo</code>, <code>CreateTenantAccount</code>, <br><code>GenerateUserCredentials</code>, <code>SignAccountJWT</code>, <code>PushAccountJWT</code><br> <li> Includes service registration and handler implementations</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-af98ae5f073d25a2ea0a044c996542fc65d215f6a70f14a9fba0447d87b34e11">+376/-0</a>&nbsp; </td> </tr> </table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>6 files</summary><table> <tr> <td> <details> <summary><strong>nats_account_service_test.go</strong><dd><code>NATS Account Service Unit Tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/datasvc/nats_account_service_test.go <ul><li>Comprehensive test suite for <code>NATSAccountServer</code> with mocked mTLS <br>context<br> <li> Tests account creation, user credential generation, and JWT signing <br>operations<br> <li> Validates proto conversion functions and error handling for invalid <br>inputs<br> <li> Includes tests for account limits, subject mappings, and credential <br>expiration</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3d1ee22d8514e26752c45da92cfacb867a80d29cb8bfc3682b5784d123bcfc52">+474/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>user_manager_test.go</strong><dd><code>User Credentials Generation Tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/nats/accounts/user_manager_test.go <ul><li>Tests for <code>GenerateUserCredentials()</code> function covering all credential <br>types (collector, service, admin)<br> <li> Validates user JWT structure, permissions, and creds file formatting<br> <li> Tests custom permissions, expiration handling, and error cases<br> <li> Verifies JWT is properly signed by account and unique keys are <br>generated</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-000364a4950aac254d71c594f4c09b87abd8a8993f855d7a71cb248847cb82ce">+440/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>account_manager_test.go</strong><dd><code>Account Signer and Management Tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/nats/accounts/account_manager_test.go <ul><li>Tests for <code>AccountSigner</code> and account creation operations<br> <li> Validates account JWT claims, limits, and subject mappings<br> <li> Tests JWT re-signing with revocations and updated limits<br> <li> Verifies multiple accounts can be created with unique keys</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-0c2bcb7ae33e8e4e35efdfb12c247cc0f62c7d479ac18dbf9e2682664dd2a5a6">+370/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>tenant_test.go</strong><dd><code>Tenant Information Parsing and Context Tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/tenant/tenant_test.go <ul><li>Tests for tenant information parsing from certificate Common Names <br>(CN)<br> <li> Validates <code>ParseCN()</code> function with various CN formats and error cases<br> <li> Tests tenant context injection/extraction from gRPC context<br> <li> Includes roundtrip tests and helper functions for tenant slug <br>prefixing</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-04245997664d90bcc09ea6a3b4edcda1b462adac68b2920953262ada7d7f6fbb">+354/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>operator_test.go</strong><dd><code>NATS operator key generation and JWT signing tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/nats/accounts/operator_test.go <ul><li>Comprehensive test suite for NATS operator key generation and <br>management<br> <li> Tests for operator initialization from direct seed, file, and <br>environment variables<br> <li> Tests for system account public key configuration from multiple <br>sources<br> <li> Tests for operator JWT creation and key encoding/decoding for storage</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-7e02d50421951cc5d2172638cfcfd3cd0b953726699b20d887808baa63cecbf0">+357/-0</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>events_test.go</strong><dd><code>Tenant prefixing functionality tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/natsutil/events_test.go <ul><li>Tests for tenant prefix environment variable parsing<br> <li> Tests for tenant prefix application with context-based tenant <br>extraction<br> <li> Tests for EventPublisher tenant prefixing configuration and control<br> <li> Tests for dynamic tenant prefix enable/disable functionality</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-c11081459515a60362c5729f90da0828cee115b39cfe881e252d1d119b2263e2">+135/-0</a>&nbsp; </td> </tr> </table></details></td></tr><tr><td><strong>Configuration changes</strong></td><td><details><summary>9 files</summary><table> <tr> <td> <details> <summary><strong>prod.exs</strong><dd><code>Production Configuration for Elixir Poller</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> elixir/serviceradar_poller/config/prod.exs <ul><li>Adds production configuration file for Elixir poller service<br> <li> Sets logger level to <code>info</code> for production environment</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-4345b4ee42a794cc2871beffeda0e7c1a7c1acc19e32b458d6a47b55b61b9fe3">+4/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>types.go</strong><dd><code>NATS operator and credentials configuration in datasvc</code>&nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/datasvc/types.go <ul><li>Added <code>NATSCredsFile</code> configuration field to datasvc Config<br> <li> Added <code>NATSOperator</code> configuration for NATS account management service<br> <li> Documentation for NATS operator configuration and multi-tenant <br>isolation</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-4a380e5b61f591d2764cd7d10c67e3ba1e844b93addb3c686932ffa866bac662">+20/-14</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>config.go</strong><dd><code>NATS credentials file configuration for event writer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/consumers/db-event-writer/config.go <ul><li>Added <code>NATSCredsFile</code> optional configuration field<br> <li> Field ordering and formatting adjustments for consistency</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-241fb78182e99079654727a4140db640d348e0e1e813fd35d32c99b2d1ff78b3">+13/-12</a>&nbsp; </td> </tr> <tr> <td> <details> <summary><strong>types.go</strong><dd><code>NATS bootstrap CLI configuration fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/cli/types.go <ul><li>Added NATS bootstrap configuration fields to CmdConfig<br> <li> Added admin command fields for NATS operations<br> <li> Configuration for bootstrap token, output directory, operator setup, <br>and TLS</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-26b14ac5781e43bc8b1fd47ab9430976f17a1a25ca5df12c6acf869d2518e7d5">+25/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>events.go</strong><dd><code>NATS credentials file configuration in event models</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/models/events.go <ul><li>Added <code>CredsFile</code> field to NATSConfig structure<br> <li> Support for NATS credentials file configuration</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-8430b0f58da1cbe15deac7e09bb4acaa1b1e3f2e8772d883a7df24ef6173fa2b">+4/-3</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>netflow.go</strong><dd><code>NATS credentials file configuration in netflow models</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/models/netflow.go - Added `NATSCredsFile` optional configuration field </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-d9c07c7c3ebf257ff6b110eb25635153229050d19e364173bca107db36fc36c3">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>config.rs</strong><dd><code>NATS credentials file configuration in trapd</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> cmd/trapd/src/config.rs <ul><li>Added <code>nats_creds_file</code> optional configuration field<br> <li> Added validation for non-empty credentials file path<br> <li> Added <code>nats_creds_path</code> method for resolving credentials file path</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-c89b88ba4d2bf0a054d0ba69a672a92c30140b8d19503d67b980a218ffe3106d">+21/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>config.rs</strong><dd><code>NATS credentials file configuration in OpenTelemetry collector</code></dd></summary> <hr> cmd/otel/src/config.rs <ul><li>Added <code>creds_file</code> optional field to NATSConfigTOML<br> <li> Added credentials file path resolution in Config initialization<br> <li> Updated default config example with credentials file path</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-abbaec651da3d6af96b482e0f77bb909b65dbe0cabd78b5803769cc9dab0a1b0">+13/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>config.rs</strong><dd><code>NATS credentials file configuration in zen consumer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> cmd/consumers/zen/src/config.rs <ul><li>Added <code>nats_creds_file</code> optional configuration field<br> <li> Added validation for non-empty credentials file<br> <li> Added <code>nats_creds_path</code> method for resolving credentials file with path <br>handling</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-05038f3867985e757de9027609950e682bad6d1992dac6acd7c28962a3c65dc4">+25/-0</a>&nbsp; &nbsp; </td> </tr> </table></details></td></tr><tr><td><strong>Error handling</strong></td><td><details><summary>2 files</summary><table> <tr> <td> <details> <summary><strong>errors.go</strong><dd><code>NATS bootstrap and admin command error definitions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/cli/errors.go <ul><li>Added NATS bootstrap-related error variables for CLI commands<br> <li> Added admin NATS command error handling<br> <li> Added helper function <code>ErrUnknownAdminResource</code> for error wrapping</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-204b8556a0e5d25301b6d0c912b804684e8262740028ac990331cac6de3f43ac">+17/-2</a>&nbsp; &nbsp; </td> </tr> <tr> <td> <details> <summary><strong>errors.go</strong><dd><code>NATS resolver and operator error definitions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary> <hr> pkg/datasvc/errors.go <ul><li>Added resolver and operator configuration error variables<br> <li> Added account JWT requirement error for NATS operations</ul> </details> </td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-039edfa8e88d69d0bca827d4dc488fc1042ebc3a5088526e4255f3387a8ffea4">+6/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> </table></details></td></tr><tr><td><strong>Additional files</strong></td><td><details><summary>101 files</summary><table> <tr> <td><strong>.bazelignore</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-a5641cd37d6ad98b32cdfce1980836cc68312277bc6a7052f55da02ada5bc6cf">+4/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>.bazelrc</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-544556920c45b42cbfe40159b082ce8af6bd929e492d076769226265f215832f">+2/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>.env.example</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-a3046da0d15a27e89f2afe639b25748a7ad4d9290af3e7b1b6c1a5533c8f0a8c">+38/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>AGENTS.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9">+171/-2</a>&nbsp; </td> </tr> <tr> <td><strong>MODULE.bazel</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-6136fc12446089c3db7360e923203dd114b6a1466252e71667c6791c20fe6bdc">+5/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>Makefile</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-76ed074a9305c04054cdebb9e9aad2d818052b07091de1f20cad0bbac34ffb52">+4/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>README-Docker.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-9fd61d24482efe68c22d8d41e2a1dcc440f39195aa56e7a050f2abe598179efd">+16/-1</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>BUILD.bazel</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-884fa9353a5226345e44fbabea3300efc7a87dfbcde0b6a42521ca51823f1b68">+6/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>BUILD.bazel</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-0e80ea46aeb61a873324685edb96eae864c7a2004fbb7ee404b4ec951190ba10">+12/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>mix_release.bzl</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-86ec281f99363b6b6eb1f49e21d83b7eeca93a35b552b9f305fffc6855e38ccd">+120/-49</a></td> </tr> <tr> <td><strong>zen-consumer-with-otel.json</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-68375f1f7847e1fbdf75664f6be65b1ad94ae6ce86ed73fc5964d65054668acb">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>zen-consumer.json</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-4d308af9802a93a0f656e8c02a3b5fcd8991407bb18360f087470db74e1f9524">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>BUILD.bazel</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-c62c0139ebdb337369f4067567cd2c52b8e7decb3ddfabc77f9f67b2f6e5789c">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>flowgger.toml</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-af9f49f931e282dca53d1f0521b036d222fe671f77e61a876a84cf4c6d7cca4d">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>otel.toml</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-c64b9ace832b8ea57a2be62f84166e03bb1904882635d444ec76a880cdf14cc0">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>docker-compose.elx.yml</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-9562070d7ad4a3e9b2d06567008cf35de1d96448d914b3b45bf6c36d97cdd914">+108/-0</a>&nbsp; </td> </tr> <tr> <td><strong>docker-compose.spiffe.yml</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-603fd9e7d40841d174f26b95d0cb0c9537430bf3f7a5da3ccbba4ea3d8ac66c9">+8/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>docker-compose.yml</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-e45e45baeda1c1e73482975a664062aa56f20c03dd9d64a827aba57775bed0d3">+364/-268</a></td> </tr> <tr> <td><strong>Dockerfile.core-elx</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-5ec7a971285669999af442a0c7f141c34f7fd9180257307f5c4ed12f789a2182">+108/-0</a>&nbsp; </td> </tr> <tr> <td><strong>Dockerfile.poller-elx</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-966cdcf55b7defa4f9fd83a15c55a0e1106430e6e20926c1181187e95ed8d87e">+95/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>Dockerfile.web-ng</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-92d43af1965575d56c3380ecc8a81024aac2ff36f039ec2d3839e9fc7852bc10">+6/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>.gitkeep</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-d72c41aab2d6f2c230a4340dfefe7917cdd12bed942c825aa0d4c9875a637bac">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>datasvc.docker.json</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3f2719d3dbfe042e8383739e3c78e74e5f851a44e5e46bea8e79c4b79fdcc34f">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>datasvc.mtls.json</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3a45619e57f1e6e9a31486ec7fffb33ef246e271f82bac272ee0a946b88da70a">+13/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>db-event-writer.mtls.json</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-7a33f95f7545499abf0ed9fc91b58499ab209639e4885019579c959583fc7496">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>entrypoint-certs.sh</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-83d6800b184a5233c66c69766286b0a60fece1bc64addb112d9f8dc019437f05">+11/-6</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>flowgger.docker.toml</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-824f8797b418d4b9f5ea41e4a3741a0ed64b881f343072464489a76b7ea01008">+2/-1</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>generate-certs.sh</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-8298241543b4744a6ac7780c760ac5b5a0a87ba62de19c8612ebe1aba0996ebd">+212/-6</a>&nbsp; </td> </tr> <tr> <td><strong>nats.docker.conf</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-06f2012494f428fe1bfb304972061c2094e0d99da88ba9af6914f7776872e6eb">+16/-160</a></td> </tr> <tr> <td><strong>netflow-consumer.mtls.json</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-f15920e8498a24f71ce3eec4f48fe8fefbb1765a90362998af779a660fcef9e1">+1/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>otel.docker.toml</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-d4af38790e3657b7589cd37a7539d5308b032f11caba7aa740ddc86bf99f4415">+2/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>pg_hba.conf</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-7bd5f7292054916c7e5997f4c84ac9ec07d4c945621a48936c2aed0575fb96eb">+9/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>pg_ident.conf</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-e7b8ce062e32c61fdc3bcc9e525c1f1df1c8008fbc02b11409e58c67baa17cc5">+17/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>ssl_dist.core.conf</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-08d49d8621b581d1a9aa5c456f61e8c5774e021083c982cbb514019f915a1701">+17/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>ssl_dist.poller.conf</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3373e5d02bd9a19c75819948cf829086dc9c02f41f30c78759beb7038c428d3e">+17/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>ssl_dist.web.conf</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-cef5be462ddb059fdfdeb9fd7c5cd70e656c4cd8b6ae1fe3fe312557b3da80ac">+17/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>trapd.docker.json</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-1ab1a0e03e63bc02e0ef31992a7187a377927272ed2060150b40d44cc0ea3357">+2/-1</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>zen.docker.json</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-e060a3164cdc2746e0d9ad000fcf43c4bcdb05f4a41c586d7220e2ff2a7df01d">+2/-1</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>BUILD.bazel</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-0e4db31c224a8f72ae8e870a849e38a59d74a2c7f7b04347b0b3eb07e20c5a80">+80/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>push_targets.bzl</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-4af33fe62caba04b6d479589c16cfb85babc39bae5c92595d4d4e31660738513">+2/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>architecture.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-90abd06467420fd89391fd1a4d75ceb1f6a9381de4d13a95fffe606abff38d37">+58/-6</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>ash-api.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-1cb48a12148688dc640f42675d0b3c2458ecc40175f4ae7eef4b07bdc2ede3a3">+305/-0</a>&nbsp; </td> </tr> <tr> <td><strong>ash-authentication.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-e3d22dc8d6917661b980dd9c7e08bdc07fad4d225b10c60885b091a9cdd20425">+244/-0</a>&nbsp; </td> </tr> <tr> <td><strong>ash-authorization.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-72abeea2439e2281b6f998db2d11a73fe3ab393898125c466f0b16e7a49d3088">+283/-0</a>&nbsp; </td> </tr> <tr> <td><strong>ash-domains.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-bc78325c5ea4c6839212536a43336a231175450738af14f4173be663acf2fe49">+223/-0</a>&nbsp; </td> </tr> <tr> <td><strong>ash-migration-guide.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-e730373f07f6656d00327de02b4aa64e13809aadb3bf5478a4c60041ee431ad8">+339/-0</a>&nbsp; </td> </tr> <tr> <td><strong>docker-setup.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-8604269dffb3ce4133e48cab374ca8e97745d0efbdef67cad792aeb5945fe5ec">+39/-4</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>edge-agents.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-df8f4b6b6cd8fb926f9204b2bab85ec4f393286d1b25d8a62d2debd357dd651d">+253/-0</a>&nbsp; </td> </tr> <tr> <td><strong>edge-onboarding.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-f32fbefcc4dd23b0f2146015630a411099012e8bf56ea7b9d52ae8b2a83ac3e3">+316/-273</a></td> </tr> <tr> <td><strong>security-architecture.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-49e33c2fc609030af8a64af34016a22e9e86c0f3781acec5a9e6d0f7ccf5dc09">+238/-0</a>&nbsp; </td> </tr> <tr> <td><strong>spiffe-identity.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-6a3f0bdce99eb15d1075805cb5101594398f81ad92aa4eea9b27bb7545098db1">+52/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>troubleshooting-guide.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-343b87dd0b430b3f99b16d32200c353bb6e3d7bbb185da3c1b3effc3a03e7f2a">+51/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>datasvc.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-00c928e77e8bf2f741a35e42e304acd2f2d4b8546532a5125a717924f2bde5dc">+32/-2</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>.formatter.exs</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-791d4757cee68d168d8ab62d3eca6562470207fa6b3ccbf124e35c3fbd9de875">+15/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>BUILD.bazel</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-f1e707ff2843703a98d4752b3a3730c080c75772dbb5dbff1221f66af0678bc7">+14/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>README.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-5dc9fa4d00db77d9f3e08a76ec06c2e2d703a7976ac2531af5edd9e3d1175b56">+269/-0</a>&nbsp; </td> </tr> <tr> <td><strong>config.exs</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-42b3888cc53d9dcf4ebc45ec7fffb2c672b129bffe763b6c76de58e4678a13a8">+101/-0</a>&nbsp; </td> </tr> <tr> <td><strong>dev.exs</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-a18ef01363a8ee26ebf4b56399d88607b4cf7934c597d6d3085041195b06ab5b">+66/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>prod.exs</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-4fe837307f8710c783ecb9ae7595bb7bb9ec37d8522248bd081fa256803c3e92">+6/-0</a>&nbsp; &nbsp; &nbsp; </td> </tr> <tr> <td><strong>runtime.exs</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-5d045e2af9f15590a9745058e25a00380ad7a2cc363d0a9934715bd11ea8eef3">+196/-0</a>&nbsp; </td> </tr> <tr> <td><strong>test.exs</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-d8fffec56a9bc7305c02bbdd424e21031ecbbb2c2e6ba07ba626e6043540e360">+91/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>eventwriter.md</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-f505978234d706915d40bae31f46f0c906a941b1b63a82f2e8c37dcd01e21c4d">+370/-0</a>&nbsp; </td> </tr> <tr> <td><strong>device.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-eba1d95a852e4a736813c7b486da651704f20718e24f931c966ff3f37c421eea">+608/-0</a>&nbsp; </td> </tr> <tr> <td><strong>device_registry.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-c9bf6ea0ae2afb5d4cbcfe8686ebb5682031524e28edb55e43ca5e4b0512d281">+284/-0</a>&nbsp; </td> </tr> <tr> <td><strong>telemetry.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-09c303c0c3b329f8470971b33c0c6b4af8161efc77c03edc35fbae33e4b68dbf">+267/-0</a>&nbsp; </td> </tr> <tr> <td><strong>application.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-a9ffbf400b7f9b22cd8980c41286c54fe373f1f1a8684bb6a344a5fb39b178d0">+373/-0</a>&nbsp; </td> </tr> <tr> <td><strong>backoff.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-53ea1e963221e36412478d7951d5c99c6e88af68cfed27d2de18145f1225a2c1">+59/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>agent_registration_worker.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-6853aaa54f548e950f8cb63248555dbdb4ab186ae6ae98c377c51b0e6ccd5b98">+241/-0</a>&nbsp; </td> </tr> <tr> <td><strong>cluster_health.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-65e2a238e7a24c82a3772842be52ddfeb155d66c6f1341e6e652ec3161c5d8bb">+298/-0</a>&nbsp; </td> </tr> <tr> <td><strong>cluster_status.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-4d39914bf1e3d207119f8d94afc598809746aa5843fb55e52cac9222d0fd335b">+272/-0</a>&nbsp; </td> </tr> <tr> <td><strong>cluster_supervisor.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-d21a872c79a3d45692c7a09cb01d7dab9837046fda8b1f7154f4dbd855f28cd9">+129/-0</a>&nbsp; </td> </tr> <tr> <td><strong>poller_supervisor.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3b1db74a8de73927a3a440eaac52e739726e60b533c6abd6d8397d7d69be20a7">+66/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>registration_worker.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-5bd2757e1b929e1c749cf5a2317af169ed0a0f799ee649aee28f8e32c9726490">+249/-0</a>&nbsp; </td> </tr> <tr> <td><strong>tenant_guard.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-2bfe90d04e02f851260ae70b6a6d3994a6c0d5b424504abb8908b105b4a74ecd">+300/-0</a>&nbsp; </td> </tr> <tr> <td><strong>tenant_registry.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-91248b3b128a2e3d9bea6ffdb5e0f295e4a1745e82f87687c640ad01416fb85d">+630/-0</a>&nbsp; </td> </tr> <tr> <td><strong>tenant_schemas.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-1bedaaf2d80ba8ab6f6fc08d8b34e058cdcd0180706065b9fa51c408854a71b2">+381/-0</a>&nbsp; </td> </tr> <tr> <td><strong>result_processor.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-f7e2338fbec758691af214fbe19d6353004519685e7a49a6db4dc7ee13b6df53">+399/-0</a>&nbsp; </td> </tr> <tr> <td><strong>stats_aggregator.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-1f4ac8290be7d27cac0ed660e51a9b3b23a219a6bb43b3735f3c5a9768321031">+626/-0</a>&nbsp; </td> </tr> <tr> <td><strong>client.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-503e195ad79e05e12d7ad03a675f6e35ffdfc201b8571b0d30a220fe036e03a1">+507/-0</a>&nbsp; </td> </tr> <tr> <td><strong>edge.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-f695667e1983fd620ca0d2f400f5870843ec9050d500ae4cadcfac47e6a2d7d9">+53/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>agent_process.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-b1a0ba4695f84f3faee480a7488345eedbf5668d6fda1f635b6ec70aa990a688">+528/-0</a>&nbsp; </td> </tr> <tr> <td><strong>collector_package.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-c80c5b92e14cbc1b9d44f22a90cef81f628a5e02caf4aa9c40cce6b5c1ce54cc">+436/-0</a>&nbsp; </td> </tr> <tr> <td><strong>crypto.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3da7b9890490f8b2452af805bc006e60a4a973e2859de0c822dad0274e09fe9a">+183/-0</a>&nbsp; </td> </tr> <tr> <td><strong>nats_credential.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-43ab32ff01411168b07440bda6db64607f5823654b49471e63d59c3efc643649">+262/-0</a>&nbsp; </td> </tr> <tr> <td><strong>onboarding_events.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-e9c798940eba3ec983996573129d5fdd0b9c867b15852be640a7c33e7c1a234d">+195/-0</a>&nbsp; </td> </tr> <tr> <td><strong>onboarding_package.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-e6ba48ec0db807092011fd63f422a085c059eecb8f7512e14e56b1a764920b82">+417/-0</a>&nbsp; </td> </tr> <tr> <td><strong>poller_process.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-9126a3bea6a4903447a3257444ab6d173747fa29f1d564e962caee2d37073870">+450/-0</a>&nbsp; </td> </tr> <tr> <td><strong>pubsub.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-3a755baaa66eedbff0f27af2bc2a81a4fcafa173b44d791f8c7ae3572d9c18b6">+82/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>tenant_ca.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-45488c104eb11a38ea61cbe73beff2e25f42827abb55fce323d93cfc90db86b3">+280/-0</a>&nbsp; </td> </tr> <tr> <td><strong>generator.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-b48e4a9e1189da61e2a60e16f56fce81298d76b7cdab745107140fed3f6e48b4">+504/-0</a>&nbsp; </td> </tr> <tr> <td><strong>tenant_resolver.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-13d528b4123c11b4be7479e60f13d8f81a7f1d7886761e6154afc131f80da45e">+327/-0</a>&nbsp; </td> </tr> <tr> <td><strong>provision_collector_worker.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-7ff3df8f584638f1a5e4a5b4676e90267a4a4558726f42fb88e8e2455b584a81">+292/-0</a>&nbsp; </td> </tr> <tr> <td><strong>record_event_worker.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-08d2cde403b48e1aa3b6c9260f58f9d1624937c4c8aa20974067b96483a15838">+84/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>config.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-c744d27fc45aecf0680acf0deb0365e663f9816f6fd9d44eab2f7b97153d8897">+298/-0</a>&nbsp; </td> </tr> <tr> <td><strong>field_parser.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-950ab9f9b1147aa83584ccbbd9bb5ff481058b8a88b851d38906fa032e5fb307">+260/-0</a>&nbsp; </td> </tr> <tr> <td><strong>health.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-d6ea366663e57dff2287712135b0a4a6dbf110f944a84dceec470f928059fc4d">+156/-0</a>&nbsp; </td> </tr> <tr> <td><strong>ocsf.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-4196cb8692229a412d93fa222d911334df216d802372a8547a269eef3c4ed433">+360/-0</a>&nbsp; </td> </tr> <tr> <td><strong>pipeline.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-876e8049c9abc69fbc9af55c1b159011b8a52e0fe55db77281a14480fcd47548">+258/-0</a>&nbsp; </td> </tr> <tr> <td><strong>processor.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-afb2eb4f5a7f385a53b9205b095d9623540fc3148aa0f9d7c5091b55112012af">+51/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>default.ex</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-a5e1d434414159f0aeb40c9894903a14a051dbcb5be019555cdab39ad83ad54b">+29/-0</a>&nbsp; &nbsp; </td> </tr> <tr> <td><strong>Additional files not shown</strong></td> <td><a href="https://github.com/carverauto/serviceradar/pull/2219/files#diff-2f328e4cd8dbe3ad193e49d92bcf045f47a6b72b1e9487d366f6b8288589b4ca"></a></td> </tr> </table></details></td></tr></tbody></table> </details> ___
qodo-code-review[bot] commented 2026-01-02 04:15:38 +00:00 (Migrated from github.com)
Author
Owner

Imported GitHub PR comment.

Original author: @qodo-code-review[bot]
Original URL: https://github.com/carverauto/serviceradar/pull/2219#issuecomment-3704432680
Original created: 2026-01-02T04:15:38Z

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
Secret material exposure

Description: The new gRPC/proto API surfaces highly sensitive secrets (e.g.,
CreateTenantAccountResponse.account_seed,
BootstrapOperatorResponse.operator_seed/system_account_seed, and
GenerateUserCredentialsResponse.creds_file_content which contains a JWT + seed), which can
enable full account/operator impersonation if any caller is able to invoke/observe these
responses (needs verification that access is strictly mTLS-authenticated/authorized and
responses are never logged or stored unencrypted).
nats_account.pb.go [238-875]

Referred Code
// CreateTenantAccountRequest is the request to create a new tenant NATS account.
type CreateTenantAccountRequest struct {
	state           protoimpl.MessageState `protogen:"open.v1"`
	TenantSlug      string                 `protobuf:"bytes,1,opt,name=tenant_slug,json=tenantSlug,proto3" json:"tenant_slug,omitempty"`                // Unique tenant identifier (e.g., "acme-corp")
	Limits          *AccountLimits         `protobuf:"bytes,2,opt,name=limits,proto3" json:"limits,omitempty"`                                          // Optional resource limits
	SubjectMappings []*SubjectMapping      `protobuf:"bytes,3,rep,name=subject_mappings,json=subjectMappings,proto3" json:"subject_mappings,omitempty"` // Optional custom subject mappings
	unknownFields   protoimpl.UnknownFields
	sizeCache       protoimpl.SizeCache
}

func (x *CreateTenantAccountRequest) Reset() {
	*x = CreateTenantAccountRequest{}
	mi := &file_nats_account_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CreateTenantAccountRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}




 ... (clipped 617 lines)
Tenant isolation bypass

Description: Tenant isolation for NATS subjects is controlled by an environment flag and, when enabled,
missing tenant context falls back to DefaultTenant ("default"), which can realistically
cause cross-tenant event publication/consumption (e.g., requests without a tenant in
context publish into the shared default tenant namespace) if tenant context propagation
fails or is bypassed.
events.go [22-236]

Referred Code
const (
	// EnvNATSTenantPrefixEnabled is the environment variable to enable tenant prefixing.
	// When set to "true", all NATS subjects will be prefixed with the tenant slug.
	EnvNATSTenantPrefixEnabled = "NATS_TENANT_PREFIX_ENABLED"

	// DefaultTenant is used when no tenant is found in context and prefixing is enabled.
	DefaultTenant = "default"
)

var (



 ... (clipped 194 lines)
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status:
Audit logging unknown: The new NATS operator/account/user management gRPC API is introduced but the diff does not
show any audit logging for these critical security actions, requiring verification in the
service implementation.

Referred Code
"\x1aUSER_CREDENTIAL_TYPE_ADMIN\x10\x032\xb0\x04\n" +
"\x12NATSAccountService\x12X\n" +
"\x11BootstrapOperator\x12\x1f.proto.BootstrapOperatorRequest\x1a .proto.BootstrapOperatorResponse\"\x00\x12R\n" +
"\x0fGetOperatorInfo\x12\x1d.proto.GetOperatorInfoRequest\x1a\x1e.proto.GetOperatorInfoResponse\"\x00\x12^\n" +
"\x13CreateTenantAccount\x12!.proto.CreateTenantAccountRequest\x1a\".proto.CreateTenantAccountResponse\"\x00\x12j\n" +
"\x17GenerateUserCredentials\x12%.proto.GenerateUserCredentialsRequest\x1a&.proto.GenerateUserCredentialsResponse\"\x00\x12O\n" +
"\x0eSignAccountJWT\x12\x1c.proto.SignAccountJWTRequest\x1a\x1d.proto.SignAccountJWTResponse\"\x00\x12O\n" +
"\x0ePushAccountJWT\x12\x1c.proto.PushAccountJWTRequest\x1a\x1d.proto.PushAccountJWTResponse\"\x00B*Z(github.com/carverauto/serviceradar/protob\x06proto3"

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status:
Missing error context: The new credentials-file connection path relies on nats.Connect failures but returns the
raw error without adding operation context (e.g., which env var/creds file was used),
requiring review for actionable error reporting.

Referred Code
credsFile := strings.TrimSpace(os.Getenv("KV_NATS_CREDS_FILE"))
if credsFile != "" {
	opts = append(opts, nats.UserCredentials(credsFile))
}

nc, err := nats.Connect(addr, opts...)
if err != nil {
	return nil, err

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status:
Error exposure unknown: The new credentials-file-based NATS connection may surface underlying credential/parsing
errors directly to callers, so it requires verification that user-facing layers do not
expose sensitive internal details.

Referred Code
credsFile := strings.TrimSpace(os.Getenv("KV_NATS_CREDS_FILE"))
if credsFile != "" {
	opts = append(opts, nats.UserCredentials(credsFile))
}

nc, err := nats.Connect(addr, opts...)
if err != nil {
	return nil, err

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status:
Secret logging risk: The new API schema includes highly sensitive fields (seeds/JWTs/creds content), so it
requires verification that no service code logs these values at any log level.

Referred Code
// CreateTenantAccountResponse returns the generated account credentials.
// The account_seed should be stored encrypted by the caller (Elixir/AshCloak).
type CreateTenantAccountResponse struct {
	state            protoimpl.MessageState `protogen:"open.v1"`
	AccountPublicKey string                 `protobuf:"bytes,1,opt,name=account_public_key,json=accountPublicKey,proto3" json:"account_public_key,omitempty"` // The account's public NKey (starts with 'A')
	AccountSeed      string                 `protobuf:"bytes,2,opt,name=account_seed,json=accountSeed,proto3" json:"account_seed,omitempty"`                  // The account's private seed (starts with 'SA') - STORE ENCRYPTED
	AccountJwt       string                 `protobuf:"bytes,3,opt,name=account_jwt,json=accountJwt,proto3" json:"account_jwt,omitempty"`                     // The signed account JWT
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *CreateTenantAccountResponse) Reset() {
	*x = CreateTenantAccountResponse{}
	mi := &file_nats_account_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CreateTenantAccountResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}



 ... (clipped 556 lines)

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status:
Sensitive data exposure: The new gRPC messages explicitly transmit secrets (AccountSeed, OperatorSeed,
SystemAccountSeed, and CredsFileContent), requiring human verification that transport
security, authorization (mTLS), and secure storage/handling guarantees are enforced in the
unseen service code.

Referred Code
// CreateTenantAccountResponse returns the generated account credentials.
// The account_seed should be stored encrypted by the caller (Elixir/AshCloak).
type CreateTenantAccountResponse struct {
	state            protoimpl.MessageState `protogen:"open.v1"`
	AccountPublicKey string                 `protobuf:"bytes,1,opt,name=account_public_key,json=accountPublicKey,proto3" json:"account_public_key,omitempty"` // The account's public NKey (starts with 'A')
	AccountSeed      string                 `protobuf:"bytes,2,opt,name=account_seed,json=accountSeed,proto3" json:"account_seed,omitempty"`                  // The account's private seed (starts with 'SA') - STORE ENCRYPTED
	AccountJwt       string                 `protobuf:"bytes,3,opt,name=account_jwt,json=accountJwt,proto3" json:"account_jwt,omitempty"`                     // The signed account JWT
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *CreateTenantAccountResponse) Reset() {
	*x = CreateTenantAccountResponse{}
	mi := &file_nats_account_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *CreateTenantAccountResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}



 ... (clipped 556 lines)

Learn more about managing compliance generic rules or creating your own custom rules

  • Update
Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
- Requires Further Human Verification
🏷️ - Compliance label
Imported GitHub PR comment. Original author: @qodo-code-review[bot] Original URL: https://github.com/carverauto/serviceradar/pull/2219#issuecomment-3704432680 Original created: 2026-01-02T04:15:38Z --- ## PR Compliance Guide 🔍 <!-- https://github.com/carverauto/serviceradar/commit/77f9c0f2d2a45da740794eb3a9d075b46b853f1e --> Below is a summary of compliance checks for this PR:<br> <table><tbody><tr><td colspan='2'><strong>Security Compliance</strong></td></tr> <tr><td rowspan=2>⚪</td> <td><details><summary><strong>Secret material exposure </strong></summary><br> <b>Description:</b> The new gRPC/proto API surfaces highly sensitive secrets (e.g., <br><code>CreateTenantAccountResponse.account_seed</code>, <br><code>BootstrapOperatorResponse.operator_seed</code>/<code>system_account_seed</code>, and <br><code>GenerateUserCredentialsResponse.creds_file_content</code> which contains a JWT + seed), which can <br>enable full account/operator impersonation if any caller is able to invoke/observe these <br>responses (needs verification that access is strictly mTLS-authenticated/authorized and <br>responses are never logged or stored unencrypted).<br> <strong><a href='https://github.com/carverauto/serviceradar/pull/2219/files#diff-49eb93c28e2d86d8dcf4ee78fd24bed498cf3fcfaa8e49849a36e70980420087R238-R875'>nats_account.pb.go [238-875]</a></strong><br> <details open><summary>Referred Code</summary> ```go // CreateTenantAccountRequest is the request to create a new tenant NATS account. type CreateTenantAccountRequest struct { state protoimpl.MessageState `protogen:"open.v1"` TenantSlug string `protobuf:"bytes,1,opt,name=tenant_slug,json=tenantSlug,proto3" json:"tenant_slug,omitempty"` // Unique tenant identifier (e.g., "acme-corp") Limits *AccountLimits `protobuf:"bytes,2,opt,name=limits,proto3" json:"limits,omitempty"` // Optional resource limits SubjectMappings []*SubjectMapping `protobuf:"bytes,3,rep,name=subject_mappings,json=subjectMappings,proto3" json:"subject_mappings,omitempty"` // Optional custom subject mappings unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CreateTenantAccountRequest) Reset() { *x = CreateTenantAccountRequest{} mi := &file_nats_account_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *CreateTenantAccountRequest) String() string { return protoimpl.X.MessageStringOf(x) } ... (clipped 617 lines) ``` </details></details></td></tr> <tr><td><details><summary><strong>Tenant isolation bypass </strong></summary><br> <b>Description:</b> Tenant isolation for NATS subjects is controlled by an environment flag and, when enabled, <br>missing tenant context falls back to <code>DefaultTenant</code> ("default"), which can realistically <br>cause cross-tenant event publication/consumption (e.g., requests without a tenant in <br>context publish into the shared default tenant namespace) if tenant context propagation <br>fails or is bypassed.<br> <strong><a href='https://github.com/carverauto/serviceradar/pull/2219/files#diff-3503010fc6a66fb16b8fbc055b7daf53be305d7284efe58d37a7fbf1813a6b63R22-R236'>events.go [22-236]</a></strong><br> <details open><summary>Referred Code</summary> ```go const ( // EnvNATSTenantPrefixEnabled is the environment variable to enable tenant prefixing. // When set to "true", all NATS subjects will be prefixed with the tenant slug. EnvNATSTenantPrefixEnabled = "NATS_TENANT_PREFIX_ENABLED" // DefaultTenant is used when no tenant is found in context and prefixing is enabled. DefaultTenant = "default" ) var ( ... (clipped 194 lines) ``` </details></details></td></tr> <tr><td colspan='2'><strong>Ticket Compliance</strong></td></tr> <tr><td>⚪</td><td><details><summary>🎫 <strong>No ticket provided </strong></summary> - [ ] Create ticket/issue <!-- /create_ticket --create_ticket=true --> </details></td></tr> <tr><td colspan='2'><strong>Codebase Duplication Compliance</strong></td></tr> <tr><td>⚪</td><td><details><summary><strong>Codebase context is not defined </strong></summary> Follow the <a href='https://qodo-merge-docs.qodo.ai/core-abilities/rag_context_enrichment/'>guide</a> to enable codebase context checks. </details></td></tr> <tr><td colspan='2'><strong>Custom Compliance</strong></td></tr> <tr><td rowspan=1>🟢</td><td> <details><summary><strong>Generic: Meaningful Naming and Self-Documenting Code</strong></summary><br> **Objective:** Ensure all identifiers clearly express their purpose and intent, making code <br>self-documenting<br> **Status:** Passed<br> > Learn more about managing compliance <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#configuration-options'>generic rules</a> or creating your own <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#custom-compliance'>custom rules</a> </details></td></tr> <tr><td rowspan=5>⚪</td> <td><details> <summary><strong>Generic: Comprehensive Audit Trails</strong></summary><br> **Objective:** To create a detailed and reliable record of critical system actions for security analysis <br>and compliance.<br> **Status:** <br><a href='https://github.com/carverauto/serviceradar/pull/2219/files#diff-49eb93c28e2d86d8dcf4ee78fd24bed498cf3fcfaa8e49849a36e70980420087R1176-R1183'><strong>Audit logging unknown</strong></a>: The new NATS operator/account/user management gRPC API is introduced but the diff does not <br>show any audit logging for these critical security actions, requiring verification in the <br>service implementation.<br> <details open><summary>Referred Code</summary> ```go "\x1aUSER_CREDENTIAL_TYPE_ADMIN\x10\x032\xb0\x04\n" + "\x12NATSAccountService\x12X\n" + "\x11BootstrapOperator\x12\x1f.proto.BootstrapOperatorRequest\x1a .proto.BootstrapOperatorResponse\"\x00\x12R\n" + "\x0fGetOperatorInfo\x12\x1d.proto.GetOperatorInfoRequest\x1a\x1e.proto.GetOperatorInfoResponse\"\x00\x12^\n" + "\x13CreateTenantAccount\x12!.proto.CreateTenantAccountRequest\x1a\".proto.CreateTenantAccountResponse\"\x00\x12j\n" + "\x17GenerateUserCredentials\x12%.proto.GenerateUserCredentialsRequest\x1a&.proto.GenerateUserCredentialsResponse\"\x00\x12O\n" + "\x0eSignAccountJWT\x12\x1c.proto.SignAccountJWTRequest\x1a\x1d.proto.SignAccountJWTResponse\"\x00\x12O\n" + "\x0ePushAccountJWT\x12\x1c.proto.PushAccountJWTRequest\x1a\x1d.proto.PushAccountJWTResponse\"\x00B*Z(github.com/carverauto/serviceradar/protob\x06proto3" ``` </details> > Learn more about managing compliance <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#configuration-options'>generic rules</a> or creating your own <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#custom-compliance'>custom rules</a> </details></td></tr> <tr><td><details> <summary><strong>Generic: Robust Error Handling and Edge Case Management</strong></summary><br> **Objective:** Ensure comprehensive error handling that provides meaningful context and graceful <br>degradation<br> **Status:** <br><a href='https://github.com/carverauto/serviceradar/pull/2219/files#diff-0c911990aa32d43404f0f23dadc0363ec97ed4ca315592e6c9bd24510e82e06dR735-R742'><strong>Missing error context</strong></a>: The new credentials-file connection path relies on <code>nats.Connect</code> failures but returns the <br>raw error without adding operation context (e.g., which env var/creds file was used), <br>requiring review for actionable error reporting.<br> <details open><summary>Referred Code</summary> ```go credsFile := strings.TrimSpace(os.Getenv("KV_NATS_CREDS_FILE")) if credsFile != "" { opts = append(opts, nats.UserCredentials(credsFile)) } nc, err := nats.Connect(addr, opts...) if err != nil { return nil, err ``` </details> > Learn more about managing compliance <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#configuration-options'>generic rules</a> or creating your own <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#custom-compliance'>custom rules</a> </details></td></tr> <tr><td><details> <summary><strong>Generic: Secure Error Handling</strong></summary><br> **Objective:** To prevent the leakage of sensitive system information through error messages while <br>providing sufficient detail for internal debugging.<br> **Status:** <br><a href='https://github.com/carverauto/serviceradar/pull/2219/files#diff-0c911990aa32d43404f0f23dadc0363ec97ed4ca315592e6c9bd24510e82e06dR735-R742'><strong>Error exposure unknown</strong></a>: The new credentials-file-based NATS connection may surface underlying credential/parsing <br>errors directly to callers, so it requires verification that user-facing layers do not <br>expose sensitive internal details.<br> <details open><summary>Referred Code</summary> ```go credsFile := strings.TrimSpace(os.Getenv("KV_NATS_CREDS_FILE")) if credsFile != "" { opts = append(opts, nats.UserCredentials(credsFile)) } nc, err := nats.Connect(addr, opts...) if err != nil { return nil, err ``` </details> > Learn more about managing compliance <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#configuration-options'>generic rules</a> or creating your own <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#custom-compliance'>custom rules</a> </details></td></tr> <tr><td><details> <summary><strong>Generic: Secure Logging Practices</strong></summary><br> **Objective:** To ensure logs are useful for debugging and auditing without exposing sensitive <br>information like PII, PHI, or cardholder data.<br> **Status:** <br><a href='https://github.com/carverauto/serviceradar/pull/2219/files#diff-49eb93c28e2d86d8dcf4ee78fd24bed498cf3fcfaa8e49849a36e70980420087R299-R875'><strong>Secret logging risk</strong></a>: The new API schema includes highly sensitive fields (seeds/JWTs/creds content), so it <br>requires verification that no service code logs these values at any log level.<br> <details open><summary>Referred Code</summary> ```go // CreateTenantAccountResponse returns the generated account credentials. // The account_seed should be stored encrypted by the caller (Elixir/AshCloak). type CreateTenantAccountResponse struct { state protoimpl.MessageState `protogen:"open.v1"` AccountPublicKey string `protobuf:"bytes,1,opt,name=account_public_key,json=accountPublicKey,proto3" json:"account_public_key,omitempty"` // The account's public NKey (starts with 'A') AccountSeed string `protobuf:"bytes,2,opt,name=account_seed,json=accountSeed,proto3" json:"account_seed,omitempty"` // The account's private seed (starts with 'SA') - STORE ENCRYPTED AccountJwt string `protobuf:"bytes,3,opt,name=account_jwt,json=accountJwt,proto3" json:"account_jwt,omitempty"` // The signed account JWT unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CreateTenantAccountResponse) Reset() { *x = CreateTenantAccountResponse{} mi := &file_nats_account_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *CreateTenantAccountResponse) String() string { return protoimpl.X.MessageStringOf(x) } ... (clipped 556 lines) ``` </details> > Learn more about managing compliance <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#configuration-options'>generic rules</a> or creating your own <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#custom-compliance'>custom rules</a> </details></td></tr> <tr><td><details> <summary><strong>Generic: Security-First Input Validation and Data Handling</strong></summary><br> **Objective:** Ensure all data inputs are validated, sanitized, and handled securely to prevent <br>vulnerabilities<br> **Status:** <br><a href='https://github.com/carverauto/serviceradar/pull/2219/files#diff-49eb93c28e2d86d8dcf4ee78fd24bed498cf3fcfaa8e49849a36e70980420087R299-R875'><strong>Sensitive data exposure</strong></a>: The new gRPC messages explicitly transmit secrets (<code>AccountSeed</code>, <code>OperatorSeed</code>, <br><code>SystemAccountSeed</code>, and <code>CredsFileContent</code>), requiring human verification that transport <br>security, authorization (mTLS), and secure storage/handling guarantees are enforced in the <br>unseen service code.<br> <details open><summary>Referred Code</summary> ```go // CreateTenantAccountResponse returns the generated account credentials. // The account_seed should be stored encrypted by the caller (Elixir/AshCloak). type CreateTenantAccountResponse struct { state protoimpl.MessageState `protogen:"open.v1"` AccountPublicKey string `protobuf:"bytes,1,opt,name=account_public_key,json=accountPublicKey,proto3" json:"account_public_key,omitempty"` // The account's public NKey (starts with 'A') AccountSeed string `protobuf:"bytes,2,opt,name=account_seed,json=accountSeed,proto3" json:"account_seed,omitempty"` // The account's private seed (starts with 'SA') - STORE ENCRYPTED AccountJwt string `protobuf:"bytes,3,opt,name=account_jwt,json=accountJwt,proto3" json:"account_jwt,omitempty"` // The signed account JWT unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CreateTenantAccountResponse) Reset() { *x = CreateTenantAccountResponse{} mi := &file_nats_account_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *CreateTenantAccountResponse) String() string { return protoimpl.X.MessageStringOf(x) } ... (clipped 556 lines) ``` </details> > Learn more about managing compliance <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#configuration-options'>generic rules</a> or creating your own <a href='https://qodo-merge-docs.qodo.ai/tools/compliance/#custom-compliance'>custom rules</a> </details></td></tr> <tr><td align="center" colspan="2"> - [ ] Update <!-- /compliance --update_compliance=true --> </td></tr></tbody></table> <details><summary>Compliance status legend</summary> 🟢 - Fully Compliant<br> 🟡 - Partial Compliant<br> 🔴 - Not Compliant<br> ⚪ - Requires Further Human Verification<br> 🏷️ - Compliance label<br> </details>
qodo-code-review[bot] commented 2026-01-02 04:17:00 +00:00 (Migrated from github.com)
Author
Owner

Imported GitHub PR comment.

Original author: @qodo-code-review[bot]
Original URL: https://github.com/carverauto/serviceradar/pull/2219#issuecomment-3704433806
Original created: 2026-01-02T04:17:00Z

PR Code Suggestions

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
General
Use pem.Decode for PEM parsing

Replace the manual PEM parsing in decodePEM with the standard library's
pem.Decode function for improved robustness and security.

pkg/tenant/tenant.go [252-277]

+import "encoding/pem"
+
 // decodePEM extracts the DER bytes from PEM-encoded data.
 func decodePEM(pemData []byte) []byte {
-	// Simple PEM decoder - find the base64 content between headers
-	const beginCert = "-----BEGIN CERTIFICATE-----"
-	const endCert = "-----END CERTIFICATE-----"
-
-	start := strings.Index(string(pemData), beginCert)
-	if start == -1 {
-		return pemData // Not PEM, return as-is (might be DER)
+	block, _ := pem.Decode(pemData)
+	if block != nil {
+		return block.Bytes
 	}
-
-	end := strings.Index(string(pemData), endCert)
-	if end == -1 {
-		return pemData
-	}
-
-	// Extract base64 content
-	b64 := strings.TrimSpace(string(pemData[start+len(beginCert) : end]))
-	b64 = strings.ReplaceAll(b64, "\n", "")
-	b64 = strings.ReplaceAll(b64, "\r", "")
-
-	// Decode base64
-	decoded := make([]byte, len(b64))
-	n := decodeBase64(decoded, []byte(b64))
-
-	return decoded[:n]
+	// Not PEM, return raw data (may already be DER)
+	return pemData
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 9

__

Why: The suggestion correctly identifies a security and maintainability risk by replacing a custom PEM parser with the robust and secure standard library equivalent, which is a critical best practice.

High
Return gRPC errors on failure

In PushAccountJWT, return gRPC status errors for NATS connection and request
failures instead of embedding error messages in the response body.

pkg/datasvc/nats_account_service.go [743-758]

 conn, err := s.getResolverConn()
 if err != nil {
-	return &proto.PushAccountJWTResponse{
-		Success: false,
-		Message: "resolver connection not available: " + err.Error(),
-	}, nil
+	return nil, status.Errorf(codes.Unavailable, "resolver connection not available: %v", err)
 }
 
 subject := fmt.Sprintf("$SYS.REQ.ACCOUNT.%s.CLAIMS.UPDATE", req.GetAccountPublicKey())
-resp, err := conn.Request(subject, []byte(req.GetAccountJwt()), 5*time.Second)
+ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
+defer cancel()
+resp, err := conn.RequestWithContext(ctx, subject, []byte(req.GetAccountJwt()))
 if err != nil {
-	return &proto.PushAccountJWTResponse{
-		Success: false,
-		Message: "failed to push JWT to resolver: " + err.Error(),
-	}, nil
+	return nil, status.Errorf(codes.Internal, "failed to push JWT to resolver: %v", err)
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that returning errors within the response body is not idiomatic for gRPC. Adopting standard gRPC error handling improves client-side logic and API consistency.

Medium
Use double-checked locking for efficiency

Refactor BootstrapOperator to use a double-checked locking pattern. First, use a
read lock to check if the operator is initialized, and only acquire a write lock
if it is not.

pkg/datasvc/nats_account_service.go [348-362]

 func (s *NATSAccountServer) BootstrapOperator(
 	ctx context.Context,
 	req *proto.BootstrapOperatorRequest,
 ) (*proto.BootstrapOperatorResponse, error) {
 	if err := s.authorizeRequest(ctx); err != nil {
 		return nil, err
 	}
 
+	s.mu.RLock()
+	// Check if already initialized
+	if s.operator != nil && s.operator.IsInitialized() {
+		s.mu.RUnlock()
+		return nil, status.Error(codes.AlreadyExists, "operator already initialized")
+	}
+	s.mu.RUnlock()
+
 	s.mu.Lock()
 	defer s.mu.Unlock()
 
-	// Check if already initialized
+	// Double-check after acquiring write lock
 	if s.operator != nil && s.operator.IsInitialized() {
 		return nil, status.Error(codes.AlreadyExists, "operator already initialized")
 	}
 ...

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 6

__

Why: The suggestion correctly proposes using a double-checked locking pattern to improve concurrency by avoiding an exclusive lock for a read-only check, which is a good performance optimization.

Low
Make env check case-insensitive

Make the environment variable check in IsTenantPrefixEnabled case-insensitive to
correctly handle values like "True" or "YES".

pkg/natsutil/events.go [39-42]

+import "strings"
+
 // IsTenantPrefixEnabled returns true if NATS tenant prefixing is enabled via environment.
 func IsTenantPrefixEnabled() bool {
-	val := os.Getenv(EnvNATSTenantPrefixEnabled)
+	val := strings.ToLower(os.Getenv(EnvNATSTenantPrefixEnabled))
 	return val == "true" || val == "1" || val == "yes"
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 4

__

Why: The suggestion improves the robustness of environment variable parsing by making it case-insensitive, which is a good practice for user-provided configuration.

Low
Guard against empty config writes

In WriteOperatorConfig, add a check to ensure the config string is not empty
before writing it to a file, returning an error if it is.

pkg/datasvc/nats_account_service.go [260-296]

-// Build operator.conf content
-operatorJWT := s.operator.JWT()
-systemAccountPubKey := s.operator.SystemAccountPublicKey()
-
-var config string
-if operatorJWT != "" {
-    config = fmt.Sprintf(... )
-}
-// …
-// Write the config file
-if err := os.WriteFile(s.operatorConfigPath, []byte(config), 0644); err != nil {
-    return fmt.Errorf("failed to write operator config: %w", err)
+// After building `config`
+if config == "" {
+    return fmt.Errorf("operator config is empty, nothing to write")
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 2

__

Why: The suggestion adds a defensive check to prevent writing an empty configuration file. While this is a minor improvement for robustness, the current logic makes it unlikely for the config variable to be empty if operatorJWT is present.

Low
Security
Sanitize file name for JWT writes

In WriteAccountJWT, sanitize accountPublicKey using filepath.Base before using
it to construct a file path to prevent path traversal vulnerabilities.

pkg/datasvc/nats_account_service.go [315-339]

-// WriteAccountJWT writes an account JWT to the file-based resolver directory.
-// …
-jwtPath := filepath.Join(resolverPath, accountPublicKey+".jwt")
-if err := os.WriteFile(jwtPath, []byte(accountJWT), 0644); err != nil {
-    return fmt.Errorf("failed to write account JWT: %w", err)
-}
+safeKey := filepath.Base(accountPublicKey)
+jwtPath := filepath.Join(resolverPath, safeKey+".jwt")

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 8

__

Why: This suggestion addresses a potential path traversal vulnerability by sanitizing user-controllable input used in a file path. Using filepath.Base is a correct and important security measure.

Medium
Use more restrictive directory permissions

Change the permissions for directories created with os.MkdirAll from 0755 to a
more restrictive 0750 to enhance security.

pkg/cli/nats_bootstrap.go [318-325]

-if err := os.MkdirAll(paths.outputDir, 0755); err != nil {
+if err := os.MkdirAll(paths.outputDir, 0750); err != nil {
     return fmt.Errorf("create output directory %s: %w", paths.outputDir, err)
 }
 
 paths.jwtDir = filepath.Join(paths.outputDir, "jwt")
-if err := os.MkdirAll(paths.jwtDir, 0755); err != nil {
+if err := os.MkdirAll(paths.jwtDir, 0750); err != nil {
     return fmt.Errorf("create JWT directory %s: %w", paths.jwtDir, err)
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 7

__

Why: This is a valid security hardening suggestion to restrict directory permissions from 0755 to 0750, reducing the risk of information leakage to other users on the system.

Medium
Fix format string vulnerability in URL construction

To prevent a format string vulnerability, refactor the URL construction at
endpoint to use simple string concatenation instead of fmt.Sprintf with a
user-controlled format string.

pkg/cli/nats_bootstrap.go [907]

+endpoint := fmt.Sprintf("%s/api/admin/nats/tenants?limit=%d", coreURL, cfg.NATSTenantLimit)
 
-

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 5

__

Why: The suggestion correctly identifies a potential format string vulnerability, but the provided improved_code is identical to the existing_code and does not implement the recommended fix.

Low
Possible issue
Validate operator JWT path

Add a validation check in GenerateNATSConfig to ensure OperatorJWTPath is not
empty, returning ErrOperatorJWTRequired if it is.

pkg/edgeonboarding/nats_config.go [211-218]

 func GenerateNATSConfig(cfg *NATSServerConfig) ([]byte, error) {
 	if cfg == nil {
 		cfg = DefaultNATSServerConfig()
 	}
 
+	if cfg.OperatorJWTPath == "" {
+		return nil, ErrOperatorJWTRequired
+	}
 	if cfg.SystemAccountPublicKey == "" {
 		return nil, ErrSystemAccountPublicKeyRequired
 	}

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 7

__

Why: The suggestion improves robustness by adding a missing validation check for OperatorJWTPath, ensuring the function fails early with a clear error.

Medium
Write platform public key file

In writePlatformAccountFiles, write the platform account's public key to a .pub
file for consistency with how the system account key is handled.

pkg/cli/nats_bootstrap.go [381-429]

-func writePlatformAccountFiles(cfg *CmdConfig, paths *natsBootstrapPaths, result *natsBootstrapAPIResponse) error {
-	platformAccount := strings.TrimSpace(cfg.NATSPlatformAccount)
-	if !cfg.NATSWritePlatform || platformAccount == "" {
-		return nil
-	}
-
-	operatorName := strings.TrimSpace(cfg.NATSOperatorName)
-	if operatorName == "" {
-		operatorName = defaultNATSOperatorName
-	}
-
-	operatorSeed := strings.TrimSpace(result.OperatorSeed)
-	if operatorSeed == "" {
-		operatorSeed = strings.TrimSpace(cfg.NATSImportSeed)
-	}
-
-	if operatorSeed == "" {
-		return errPlatformNoOperatorSeed
-	}
-
-	platformUser := cfg.NATSPlatformUser
-	if platformUser == "" {
-		platformUser = defaultPlatformUser
-	}
-
-	platformResult, platformCreds, err := generatePlatformAccount(
-		operatorSeed,
-		operatorName,
-		platformAccount,
-		result.SystemAccountPublicKey,
-		platformUser,
-	)
-	if err != nil {
-		return fmt.Errorf("generate platform account: %w", err)
-	}
-
 	paths.platformAccountPublicKey = platformResult.AccountPublicKey
 	paths.platformCredsPath = filepath.Join(paths.outputDir, "platform.creds")
 	if err := os.WriteFile(paths.platformCredsPath, []byte(platformCreds), 0600); err != nil {
 		return fmt.Errorf("write platform.creds: %w", err)
 	}
 
+	// Write platform public key file for resolver
+	platformPubKeyPath := filepath.Join(paths.outputDir, "platform_account.pub")
+	if err := os.WriteFile(platformPubKeyPath, []byte(platformResult.AccountPublicKey), 0644); err != nil {
+		return fmt.Errorf("write platform account public key: %w", err)
+	}
+	paths.platformAccountPublicKeyPath = platformPubKeyPath
+
 	platformJWTPath := filepath.Join(paths.jwtDir, platformResult.AccountPublicKey+".jwt")
 	if err := os.WriteFile(platformJWTPath, []byte(platformResult.AccountJWT), 0644); err != nil {
 		return fmt.Errorf("write platform account JWT: %w", err)
 	}
 
-	return nil
-}
-

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 6

__

Why: The suggestion improves consistency by writing a .pub file for the platform account, similar to the system account, which aids downstream tooling and maintainability.

Low
  • Update
Imported GitHub PR comment. Original author: @qodo-code-review[bot] Original URL: https://github.com/carverauto/serviceradar/pull/2219#issuecomment-3704433806 Original created: 2026-01-02T04:17:00Z --- ## PR Code Suggestions ✨ <!-- 77f9c0f --> Explore these optional code suggestions: <table><thead><tr><td><strong>Category</strong></td><td align=left><strong>Suggestion&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </strong></td><td align=center><strong>Impact</strong></td></tr><tbody><tr><td rowspan=5>General</td> <td> <details><summary>Use pem.Decode for PEM parsing</summary> ___ **Replace the manual PEM parsing in <code>decodePEM</code> with the standard library's <br><code>pem.Decode</code> function for improved robustness and security.** [pkg/tenant/tenant.go [252-277]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-52b7de0bd266ec6f84b342a6515e76a08f89be71a1a69dabd93babf55f644178R252-R277) ```diff +import "encoding/pem" + // decodePEM extracts the DER bytes from PEM-encoded data. func decodePEM(pemData []byte) []byte { - // Simple PEM decoder - find the base64 content between headers - const beginCert = "-----BEGIN CERTIFICATE-----" - const endCert = "-----END CERTIFICATE-----" - - start := strings.Index(string(pemData), beginCert) - if start == -1 { - return pemData // Not PEM, return as-is (might be DER) + block, _ := pem.Decode(pemData) + if block != nil { + return block.Bytes } - - end := strings.Index(string(pemData), endCert) - if end == -1 { - return pemData - } - - // Extract base64 content - b64 := strings.TrimSpace(string(pemData[start+len(beginCert) : end])) - b64 = strings.ReplaceAll(b64, "\n", "") - b64 = strings.ReplaceAll(b64, "\r", "") - - // Decode base64 - decoded := make([]byte, len(b64)) - n := decodeBase64(decoded, []byte(b64)) - - return decoded[:n] + // Not PEM, return raw data (may already be DER) + return pemData } ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 9</summary> __ Why: The suggestion correctly identifies a security and maintainability risk by replacing a custom PEM parser with the robust and secure standard library equivalent, which is a critical best practice. </details></details></td><td align=center>High </td></tr><tr><td> <details><summary>Return gRPC errors on failure</summary> ___ **In <code>PushAccountJWT</code>, return gRPC status errors for NATS connection and request <br>failures instead of embedding error messages in the response body.** [pkg/datasvc/nats_account_service.go [743-758]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-3e814328b5d5bddca9cd4b0ca021a975cf416afdc059e454452580a4ce751320R743-R758) ```diff conn, err := s.getResolverConn() if err != nil { - return &proto.PushAccountJWTResponse{ - Success: false, - Message: "resolver connection not available: " + err.Error(), - }, nil + return nil, status.Errorf(codes.Unavailable, "resolver connection not available: %v", err) } subject := fmt.Sprintf("$SYS.REQ.ACCOUNT.%s.CLAIMS.UPDATE", req.GetAccountPublicKey()) -resp, err := conn.Request(subject, []byte(req.GetAccountJwt()), 5*time.Second) +ctx, cancel := context.WithTimeout(ctx, 5*time.Second) +defer cancel() +resp, err := conn.RequestWithContext(ctx, subject, []byte(req.GetAccountJwt())) if err != nil { - return &proto.PushAccountJWTResponse{ - Success: false, - Message: "failed to push JWT to resolver: " + err.Error(), - }, nil + return nil, status.Errorf(codes.Internal, "failed to push JWT to resolver: %v", err) } ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 7</summary> __ Why: The suggestion correctly identifies that returning errors within the response body is not idiomatic for gRPC. Adopting standard gRPC error handling improves client-side logic and API consistency. </details></details></td><td align=center>Medium </td></tr><tr><td> <details><summary>Use double-checked locking for efficiency</summary> ___ **Refactor <code>BootstrapOperator</code> to use a double-checked locking pattern. First, use a <br>read lock to check if the operator is initialized, and only acquire a write lock <br>if it is not.** [pkg/datasvc/nats_account_service.go [348-362]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-3e814328b5d5bddca9cd4b0ca021a975cf416afdc059e454452580a4ce751320R348-R362) ```diff func (s *NATSAccountServer) BootstrapOperator( ctx context.Context, req *proto.BootstrapOperatorRequest, ) (*proto.BootstrapOperatorResponse, error) { if err := s.authorizeRequest(ctx); err != nil { return nil, err } + s.mu.RLock() + // Check if already initialized + if s.operator != nil && s.operator.IsInitialized() { + s.mu.RUnlock() + return nil, status.Error(codes.AlreadyExists, "operator already initialized") + } + s.mu.RUnlock() + s.mu.Lock() defer s.mu.Unlock() - // Check if already initialized + // Double-check after acquiring write lock if s.operator != nil && s.operator.IsInitialized() { return nil, status.Error(codes.AlreadyExists, "operator already initialized") } ... ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 6</summary> __ Why: The suggestion correctly proposes using a double-checked locking pattern to improve concurrency by avoiding an exclusive lock for a read-only check, which is a good performance optimization. </details></details></td><td align=center>Low </td></tr><tr><td> <details><summary>Make env check case-insensitive</summary> ___ **Make the environment variable check in <code>IsTenantPrefixEnabled</code> case-insensitive to <br>correctly handle values like "True" or "YES".** [pkg/natsutil/events.go [39-42]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-3503010fc6a66fb16b8fbc055b7daf53be305d7284efe58d37a7fbf1813a6b63R39-R42) ```diff +import "strings" + // IsTenantPrefixEnabled returns true if NATS tenant prefixing is enabled via environment. func IsTenantPrefixEnabled() bool { - val := os.Getenv(EnvNATSTenantPrefixEnabled) + val := strings.ToLower(os.Getenv(EnvNATSTenantPrefixEnabled)) return val == "true" || val == "1" || val == "yes" } ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 4</summary> __ Why: The suggestion improves the robustness of environment variable parsing by making it case-insensitive, which is a good practice for user-provided configuration. </details></details></td><td align=center>Low </td></tr><tr><td> <details><summary>Guard against empty config writes</summary> ___ **In <code>WriteOperatorConfig</code>, add a check to ensure the <code>config</code> string is not empty <br>before writing it to a file, returning an error if it is.** [pkg/datasvc/nats_account_service.go [260-296]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-3e814328b5d5bddca9cd4b0ca021a975cf416afdc059e454452580a4ce751320R260-R296) ```diff -// Build operator.conf content -operatorJWT := s.operator.JWT() -systemAccountPubKey := s.operator.SystemAccountPublicKey() - -var config string -if operatorJWT != "" { - config = fmt.Sprintf(... ) -} -// … -// Write the config file -if err := os.WriteFile(s.operatorConfigPath, []byte(config), 0644); err != nil { - return fmt.Errorf("failed to write operator config: %w", err) +// After building `config` +if config == "" { + return fmt.Errorf("operator config is empty, nothing to write") } ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 2</summary> __ Why: The suggestion adds a defensive check to prevent writing an empty configuration file. While this is a minor improvement for robustness, the current logic makes it unlikely for the `config` variable to be empty if `operatorJWT` is present. </details></details></td><td align=center>Low </td></tr><tr><td rowspan=3>Security</td> <td> <details><summary>Sanitize file name for JWT writes</summary> ___ **In <code>WriteAccountJWT</code>, sanitize <code>accountPublicKey</code> using <code>filepath.Base</code> before using <br>it to construct a file path to prevent path traversal vulnerabilities.** [pkg/datasvc/nats_account_service.go [315-339]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-3e814328b5d5bddca9cd4b0ca021a975cf416afdc059e454452580a4ce751320R315-R339) ```diff -// WriteAccountJWT writes an account JWT to the file-based resolver directory. -// … -jwtPath := filepath.Join(resolverPath, accountPublicKey+".jwt") -if err := os.WriteFile(jwtPath, []byte(accountJWT), 0644); err != nil { - return fmt.Errorf("failed to write account JWT: %w", err) -} +safeKey := filepath.Base(accountPublicKey) +jwtPath := filepath.Join(resolverPath, safeKey+".jwt") ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 8</summary> __ Why: This suggestion addresses a potential path traversal vulnerability by sanitizing user-controllable input used in a file path. Using `filepath.Base` is a correct and important security measure. </details></details></td><td align=center>Medium </td></tr><tr><td> <details><summary>Use more restrictive directory permissions</summary> ___ **Change the permissions for directories created with <code>os.MkdirAll</code> from <code>0755</code> to a <br>more restrictive <code>0750</code> to enhance security.** [pkg/cli/nats_bootstrap.go [318-325]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-2176d03ba6ab4ccc1b0587a4727171546eecf6123e4df815ead583aaab062457R318-R325) ```diff -if err := os.MkdirAll(paths.outputDir, 0755); err != nil { +if err := os.MkdirAll(paths.outputDir, 0750); err != nil { return fmt.Errorf("create output directory %s: %w", paths.outputDir, err) } paths.jwtDir = filepath.Join(paths.outputDir, "jwt") -if err := os.MkdirAll(paths.jwtDir, 0755); err != nil { +if err := os.MkdirAll(paths.jwtDir, 0750); err != nil { return fmt.Errorf("create JWT directory %s: %w", paths.jwtDir, err) } ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 7</summary> __ Why: This is a valid security hardening suggestion to restrict directory permissions from `0755` to `0750`, reducing the risk of information leakage to other users on the system. </details></details></td><td align=center>Medium </td></tr><tr><td> <details><summary>Fix format string vulnerability in URL construction</summary> ___ **To prevent a format string vulnerability, refactor the URL construction at <br><code>endpoint</code> to use simple string concatenation instead of <code>fmt.Sprintf</code> with a <br>user-controlled format string.** [pkg/cli/nats_bootstrap.go [907]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-2176d03ba6ab4ccc1b0587a4727171546eecf6123e4df815ead583aaab062457R907-R907) ```diff +endpoint := fmt.Sprintf("%s/api/admin/nats/tenants?limit=%d", coreURL, cfg.NATSTenantLimit) - ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 5</summary> __ Why: The suggestion correctly identifies a potential format string vulnerability, but the provided `improved_code` is identical to the `existing_code` and does not implement the recommended fix. </details></details></td><td align=center>Low </td></tr><tr><td rowspan=2>Possible issue</td> <td> <details><summary>Validate operator JWT path</summary> ___ **Add a validation check in <code>GenerateNATSConfig</code> to ensure <code>OperatorJWTPath</code> is not <br>empty, returning <code>ErrOperatorJWTRequired</code> if it is.** [pkg/edgeonboarding/nats_config.go [211-218]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-ae75ffeeb6591fed63961ef7cb46d3ded56258a641e009354f92a9ad78e38978R211-R218) ```diff func GenerateNATSConfig(cfg *NATSServerConfig) ([]byte, error) { if cfg == nil { cfg = DefaultNATSServerConfig() } + if cfg.OperatorJWTPath == "" { + return nil, ErrOperatorJWTRequired + } if cfg.SystemAccountPublicKey == "" { return nil, ErrSystemAccountPublicKeyRequired } ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 7</summary> __ Why: The suggestion improves robustness by adding a missing validation check for `OperatorJWTPath`, ensuring the function fails early with a clear error. </details></details></td><td align=center>Medium </td></tr><tr><td> <details><summary>Write platform public key file</summary> ___ **In <code>writePlatformAccountFiles</code>, write the platform account's public key to a <code>.pub</code> <br>file for consistency with how the system account key is handled.** [pkg/cli/nats_bootstrap.go [381-429]](https://github.com/carverauto/serviceradar/pull/2219/files#diff-2176d03ba6ab4ccc1b0587a4727171546eecf6123e4df815ead583aaab062457R381-R429) ```diff -func writePlatformAccountFiles(cfg *CmdConfig, paths *natsBootstrapPaths, result *natsBootstrapAPIResponse) error { - platformAccount := strings.TrimSpace(cfg.NATSPlatformAccount) - if !cfg.NATSWritePlatform || platformAccount == "" { - return nil - } - - operatorName := strings.TrimSpace(cfg.NATSOperatorName) - if operatorName == "" { - operatorName = defaultNATSOperatorName - } - - operatorSeed := strings.TrimSpace(result.OperatorSeed) - if operatorSeed == "" { - operatorSeed = strings.TrimSpace(cfg.NATSImportSeed) - } - - if operatorSeed == "" { - return errPlatformNoOperatorSeed - } - - platformUser := cfg.NATSPlatformUser - if platformUser == "" { - platformUser = defaultPlatformUser - } - - platformResult, platformCreds, err := generatePlatformAccount( - operatorSeed, - operatorName, - platformAccount, - result.SystemAccountPublicKey, - platformUser, - ) - if err != nil { - return fmt.Errorf("generate platform account: %w", err) - } - paths.platformAccountPublicKey = platformResult.AccountPublicKey paths.platformCredsPath = filepath.Join(paths.outputDir, "platform.creds") if err := os.WriteFile(paths.platformCredsPath, []byte(platformCreds), 0600); err != nil { return fmt.Errorf("write platform.creds: %w", err) } + // Write platform public key file for resolver + platformPubKeyPath := filepath.Join(paths.outputDir, "platform_account.pub") + if err := os.WriteFile(platformPubKeyPath, []byte(platformResult.AccountPublicKey), 0644); err != nil { + return fmt.Errorf("write platform account public key: %w", err) + } + paths.platformAccountPublicKeyPath = platformPubKeyPath + platformJWTPath := filepath.Join(paths.jwtDir, platformResult.AccountPublicKey+".jwt") if err := os.WriteFile(platformJWTPath, []byte(platformResult.AccountJWT), 0644); err != nil { return fmt.Errorf("write platform account JWT: %w", err) } - return nil -} - ``` `[To ensure code accuracy, apply this suggestion manually]` <details><summary>Suggestion importance[1-10]: 6</summary> __ Why: The suggestion improves consistency by writing a `.pub` file for the platform account, similar to the system account, which aids downstream tooling and maintainability. </details></details></td><td align=center>Low </td></tr> <tr><td align="center" colspan="2"> - [ ] Update <!-- /improve_multi --more_suggestions=true --> </td><td></td></tr></tbody></table>
qodo-code-review[bot] commented 2026-01-02 07:34:49 +00:00 (Migrated from github.com)
Author
Owner

Imported GitHub PR comment.

Original author: @qodo-code-review[bot]
Original URL: https://github.com/carverauto/serviceradar/pull/2219#issuecomment-3704675074
Original created: 2026-01-02T07:34:49Z

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: build

Failed stage: Test []

Failed test name: //web-ng:precommit

Failure summary:

The GitHub Action failed because the Bazel test target //web-ng:precommit failed (Exit 1), causing
the overall Bazel run to exit with code 3.

The //web-ng:precommit failure was due to Elixir formatting checks: mix format was run with
--check-formatted and reported unformatted code.
- Error: ** (Mix) mix format failed due to
--check-formatted. The following files are not formatted:
- Offending file shown in the log:
-
src/web-ng/lib/serviceradar_web_ng/edge/collector_bundle_generator.ex
- Example formatting issue
around line ~537 (function head wrapping/indentation):
- defp edge_site_nats_url(%{edge_site:
%EdgeSite{nats_leaf_url: url}}) when is_binary(url) and url != "" do
- should be split across
lines as shown in the diff.

Relevant error logs:
1:  Runner name: 'arc-runner-set-2tp2m-runner-2tmwq'
2:  Runner group name: 'Default'
...

138:  ^[[36;1mif command -v apt-get >/dev/null 2>&1; then^[[0m
139:  ^[[36;1m  sudo apt-get update^[[0m
140:  ^[[36;1m  sudo apt-get install -y build-essential pkg-config libssl-dev protobuf-compiler cmake flex bison^[[0m
141:  ^[[36;1melif command -v dnf >/dev/null 2>&1; then^[[0m
142:  ^[[36;1m  sudo dnf install -y gcc gcc-c++ make openssl-devel protobuf-compiler cmake flex bison^[[0m
143:  ^[[36;1melif command -v yum >/dev/null 2>&1; then^[[0m
144:  ^[[36;1m  sudo yum install -y gcc gcc-c++ make openssl-devel protobuf-compiler cmake flex bison^[[0m
145:  ^[[36;1melif command -v microdnf >/dev/null 2>&1; then^[[0m
146:  ^[[36;1m  sudo microdnf install -y gcc gcc-c++ make openssl-devel protobuf-compiler cmake flex bison^[[0m
147:  ^[[36;1melse^[[0m
148:  ^[[36;1m  echo "Unsupported package manager; please install gcc, g++ (or clang), make, OpenSSL headers, pkg-config, and protoc manually." >&2^[[0m
149:  ^[[36;1m  exit 1^[[0m
150:  ^[[36;1mfi^[[0m
151:  ^[[36;1m^[[0m
152:  ^[[36;1mensure_pkg_config^[[0m
153:  ^[[36;1mprotoc --version || (echo "protoc installation failed" && exit 1)^[[0m
154:  shell: /usr/bin/bash -e {0}
...

309:  ^[[36;1mecho CARGO_HOME=${CARGO_HOME:-"$HOME/.cargo"} >> $GITHUB_ENV^[[0m
310:  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
311:  env:
312:  BUILDBUDDY_ORG_API_KEY: ***
313:  SRQL_TEST_DATABASE_URL: ***
314:  SRQL_TEST_ADMIN_URL: ***
315:  DOCKERHUB_USERNAME: ***
316:  DOCKERHUB_TOKEN: ***
317:  TEST_CNPG_DATABASE: serviceradar_web_ng_test
318:  INSTALL_DIR_FOR_OTP: /home/runner/_work/_temp/.setup-beam/otp
319:  INSTALL_DIR_FOR_ELIXIR: /home/runner/_work/_temp/.setup-beam/elixir
320:  ##[endgroup]
321:  ##[group]Run : install rustup if needed
322:  ^[[36;1m: install rustup if needed^[[0m
323:  ^[[36;1mif ! command -v rustup &>/dev/null; then^[[0m
324:  ^[[36;1m  curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused --location --silent --show-error --fail https://sh.rustup.rs | sh -s -- --default-toolchain none -y^[[0m
325:  ^[[36;1m  echo "$CARGO_HOME/bin" >> $GITHUB_PATH^[[0m
...

458:  ^[[36;1mfi^[[0m
459:  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
460:  env:
461:  BUILDBUDDY_ORG_API_KEY: ***
462:  SRQL_TEST_DATABASE_URL: ***
463:  SRQL_TEST_ADMIN_URL: ***
464:  DOCKERHUB_USERNAME: ***
465:  DOCKERHUB_TOKEN: ***
466:  TEST_CNPG_DATABASE: serviceradar_web_ng_test
467:  INSTALL_DIR_FOR_OTP: /home/runner/_work/_temp/.setup-beam/otp
468:  INSTALL_DIR_FOR_ELIXIR: /home/runner/_work/_temp/.setup-beam/elixir
469:  CARGO_HOME: /home/runner/.cargo
470:  CARGO_INCREMENTAL: 0
471:  CARGO_TERM_COLOR: always
472:  ##[endgroup]
473:  ##[group]Run : work around spurious network errors in curl 8.0
474:  ^[[36;1m: work around spurious network errors in curl 8.0^[[0m
475:  ^[[36;1m# https://rust-lang.zulipchat.com/#narrow/stream/246057-t-cargo/topic/timeout.20investigation^[[0m
...

523:  SRQL_TEST_ADMIN_URL: ***
524:  DOCKERHUB_USERNAME: ***
525:  DOCKERHUB_TOKEN: ***
526:  TEST_CNPG_DATABASE: serviceradar_web_ng_test
527:  INSTALL_DIR_FOR_OTP: /home/runner/_work/_temp/.setup-beam/otp
528:  INSTALL_DIR_FOR_ELIXIR: /home/runner/_work/_temp/.setup-beam/elixir
529:  CARGO_HOME: /home/runner/.cargo
530:  CARGO_INCREMENTAL: 0
531:  CARGO_TERM_COLOR: always
532:  ##[endgroup]
533:  Attempting to download 1.x...
534:  Acquiring v1.27.0 from https://github.com/bazelbuild/bazelisk/releases/download/v1.27.0/bazelisk-linux-amd64
535:  Adding to the cache ...
536:  Successfully cached bazelisk to /home/runner/_work/_tool/bazelisk/1.27.0/x64
537:  Added bazelisk to the path
538:  ##[warning]Failed to restore: Cache service responded with 400
539:  Restored bazelisk cache dir @ /home/runner/.cache/bazelisk
...

681:  2026/01/02 07:27:37 Downloading https://releases.bazel.build/8.4.1/release/bazel-8.4.1-linux-x86_64...
682:  Extracting Bazel installation...
683:  Starting local Bazel server (8.4.1) and connecting to it...
684:  (07:27:47) ^[[32mINFO: ^[[0mInvocation ID: cbd7eb99-5842-43e6-b7bb-693495afe839
685:  (07:27:47) ^[[32mINFO: ^[[0mStreaming build results to: ^[[36mhttps://carverauto.buildbuddy.io/invocation/cbd7eb99-5842-43e6-b7bb-693495afe839^[[0m
686:  (07:27:47) ^[[32mINFO: ^[[0mReading 'startup' options from /home/runner/_work/serviceradar/serviceradar/.bazelrc: --max_idle_secs=60
687:  (07:27:47) ^[[32mINFO: ^[[0mOptions provided by the client:
688:  Inherited 'common' options: --isatty=0 --terminal_columns=80
689:  (07:27:47) ^[[32mINFO: ^[[0mReading rc options for 'test' from /home/runner/_work/serviceradar/serviceradar/.bazelrc:
690:  Inherited 'common' options: --announce_rc --experimental_convenience_symlinks=clean --color=yes --curses=yes
691:  (07:27:47) ^[[32mINFO: ^[[0mReading rc options for 'test' from /home/runner/_work/serviceradar/serviceradar/.bazelrc.remote:
692:  Inherited 'common' options: --remote_header=x-buildbuddy-api-key=***
693:  (07:27:47) ^[[32mINFO: ^[[0mReading rc options for 'test' from /home/runner/_work/serviceradar/serviceradar/.bazelrc:
694:  Inherited 'build' options: --keep_going --jobs=auto --show_timestamps --action_env=SRQL_TEST_DATABASE_URL --action_env=SRQL_TEST_ADMIN_URL --action_env=NATS_URL --action_env=NATS_SERVER_NAME --action_env=NATS_CA_FILE --action_env=NATS_CERT_FILE --action_env=NATS_KEY_FILE --action_env=NATS_CA_B64 --action_env=NATS_CERT_B64 --action_env=NATS_KEY_B64 --action_env=NEXT_PRIVATE_SKIP_TURBOPACK=1 --action_env=TURBOPACK= --action_env=NEXT_SKIP_TURBO=1 --action_env=OPENSSL_DIR=/usr --action_env=OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu --action_env=OPENSSL_INCLUDE_DIR=/usr/include --action_env=OPENSSL_NO_VENDOR= --action_env=OPENSSL_NO_PKG_CONFIG= --repo_env=OPENSSL_DIR=/usr --repo_env=OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu --repo_env=OPENSSL_INCLUDE_DIR=/usr/include --repo_env=OPENSSL_NO_VENDOR= --repo_env=OPENSSL_NO_PKG_CONFIG= --repo_env=RULES_ERLANG_SKIP_SYSTEM=1 --repo_env=RULES_ELIXIR_SKIP_SYSTEM=1 --repo_env=RULES_PYTHON_LOCAL_PYTHON=/usr/bin/python3 --repo_env=NEXT_SKIP_TURBO=1 --repo_env=NEXT_PRIVATE_SKIP_TURBOPACK=1 --repo_env=TURBOPACK= --java_runtime_version=local_jdk --tool_java_runtime_version=local_jdk --@io_bazel_rules_go//go/config:pure --workspace_status_command=$(pwd)/scripts/workspace_status.sh --build_metadata=REPO_URL=git@github.com:carverauto/serviceradar.git
695:  (07:27:47) ^[[32mINFO: ^[[0mReading rc options for 'test' from /home/runner/_work/serviceradar/serviceradar/.bazelrc:
696:  'test' options: --test_output=errors --test_strategy=standalone --remote_executor= --action_env=SRQL_TEST_DATABASE_URL --action_env=SRQL_TEST_ADMIN_URL --test_env=PATH --test_env=CNPG_HOST --test_env=CNPG_PORT --test_env=CNPG_DATABASE --test_env=CNPG_USERNAME --test_env=CNPG_PASSWORD --test_env=CNPG_SSL_MODE --test_env=CNPG_CERT_DIR --test_env=TEST_CNPG_HOST --test_env=TEST_CNPG_PORT --test_env=TEST_CNPG_DATABASE --test_env=TEST_CNPG_USERNAME --test_env=TEST_CNPG_PASSWORD --action_env=NATS_URL --action_env=NATS_SERVER_NAME --action_env=NATS_CA_FILE --action_env=NATS_CERT_FILE --action_env=NATS_KEY_FILE --action_env=NATS_CA_B64 --action_env=NATS_CERT_B64 --action_env=NATS_KEY_B64 --@io_bazel_rules_go//go/config:pure --flaky_test_attempts=2
697:  (07:27:47) ^[[32mINFO: ^[[0mFound applicable config definition build:ci in file /home/runner/_work/serviceradar/serviceradar/.bazelrc: --keep_going --build_tag_filters=-manual --config=remote_base --build_metadata=ROLE=CI --bes_results_url=https://carverauto.buildbuddy.io/invocation/ --bes_backend=grpcs://carverauto.buildbuddy.io --remote_cache=grpcs://carverauto.buildbuddy.io --remote_timeout=15m --define=use_hex_cache=true --strategy=ExpandTemplate=local --strategy=NpmPackageExtract=local --strategy=CopyDirectory=local
698:  (07:27:47) ^[[32mINFO: ^[[0mFound applicable config definition build:remote_base in file /home/runner/_work/serviceradar/serviceradar/.bazelrc: --remote_executor=grpcs://remote.buildbuddy.io --host_platform=//build/rbe:rbe_platform --platforms=//build/rbe:rbe_platform --crosstool_top=@buildbuddy_toolchain//:toolchain --extra_toolchains=@buildbuddy_toolchain//:cc_toolchain --extra_execution_platforms=//build/rbe:rbe_platform --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 --copt=-Wno-use-after-free --java_language_version=11 --tool_java_language_version=11 --java_runtime_version=remotejdk_11 --tool_java_runtime_version=remotejdk_11 --define=EXECUTOR=remote --incompatible_strict_action_env --remote_download_minimal --remote_upload_local_results --jobs=100 --define=use_hex_cache=true --strategy=ExpandTemplate=local --strategy=NpmPackageExtract=local --strategy=CopyDirectory=local --action_env=OPENSSL_DIR=/usr --action_env=OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu --action_env=OPENSSL_INCLUDE_DIR=/usr/include --action_env=NEXT_PRIVATE_SKIP_TURBOPACK=1 --action_env=TURBOPACK= --action_env=NEXT_SKIP_TURBO=1
699:  (07:27:47) ^[[32mINFO: ^[[0mFound applicable config definition test:ci in file /home/runner/_work/serviceradar/serviceradar/.bazelrc: --test_tag_filters=-manual --test_output=errors
700:  (07:27:48) ^[[32mINFO: ^[[0mCurrent date is 2026-01-02
...

2553:  ^[[1A^[[K
2554:  ^[[1A^[[K
2555:  ^[[1A^[[K
2556:  ^[[1A^[[K
2557:  ^[[1A^[[K
2558:  ^[[1A^[[K
2559:  ^[[1A^[[K
2560:  ^[[1A^[[K
2561:  ^[[1A^[[K
2562:  ^[[1A^[[K
2563:  ^[[1A^[[K
2564:  ^[[1A^[[K
2565:  ^[[1A^[[K
2566:  ^[[1A^[[K
2567:  ^[[1A^[[K(07:28:08) ^[[32mINFO: ^[[0mFrom Executing genrule //docker/images:cnpg_postgresql_16_6_rootfs_tar:
2568:  Error: pulling layout:/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/external/rules_oci++oci+cloudnativepg_postgresql_16_6_linux_amd64/layout: parsing reference "layout:/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/external/rules_oci++oci+cloudnativepg_postgresql_16_6_linux_amd64/layout": could not parse reference: layout:/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/external/rules_oci++oci+cloudnativepg_postgresql_16_6_linux_amd64/layout
2569:  (07:28:08) ^[[32mAnalyzing:^[[0m 999 targets (435 packages loaded, 13621 targets configur\
...

3519:  Testing //web-ng:precommit; 1s local
3520:  Copying files to directory timescaledb/src; 0s remote, remote-cache
3521:  [Prepa] @go_sdk//:builder
3522:  OCI Image //.../images:cert_generator_image_amd64; 0s remote, remote-cache
3523:  Foreign Cc - Configure: Building perl_install; 0s remote, remote-cache
3524:  //docker/images:age_extension_layer; 0s remote, remote-cache
3525:  MakeDeb .../nats/serviceradar-nats__amd64.deb; 0s remote, remote-cache
3526:  Fetching repository @@rules_oci++oci+arc_runner_linux_amd64; starting 8s
3527:  Fetching ...ux_x86_64__x86_64-unknown-linux-gnu__stable_tools; starting 8s
3528:  Fetching ...ository @@gazelle++go_deps+org_golang_google_grpc; starting 8s
3529:  Fetching ...ry @@gazelle++go_deps+com_github_stretchr_testify; starting 8s
3530:  Fetching ...itory @@gazelle++go_deps+io_opentelemetry_go_otel; starting 8s
3531:  Fetching ...@gazelle++go_deps+io_opentelemetry_go_otel_metric; starting 8s
3532:  Fetching ...tory @@gazelle++go_deps+com_github_markbates_goth; starting 8s
3533:  Fetching ...e++go_deps+com_github_rs_zerolog; starting 8s ... (58 fetches)
3534:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/age.o src/backend/age.c
3535:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/catalog/ag_catalog.o src/backend/catalog/ag_catalog.c
3536:  ^[[1A^[[K
...

3539:  ^[[1A^[[K
3540:  ^[[1A^[[K
3541:  ^[[1A^[[K
3542:  ^[[1A^[[K
3543:  ^[[1A^[[K
3544:  ^[[1A^[[K
3545:  ^[[1A^[[K
3546:  ^[[1A^[[K
3547:  ^[[1A^[[K
3548:  ^[[1A^[[K
3549:  ^[[1A^[[K
3550:  ^[[1A^[[K
3551:  ^[[1A^[[K
3552:  ^[[1A^[[K
3553:  ^[[1A^[[K(07:28:16) ^[[32mINFO: ^[[0mFrom Executing genrule //docker/images:age_extension_layer:
3554:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/catalog/ag_graph.o src/backend/catalog/ag_graph.c
3555:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/catalog/ag_label.o src/backend/catalog/ag_label.c
3556:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/catalog/ag_namespace.o src/backend/catalog/ag_namespace.c
3557:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/commands/graph_commands.o src/backend/commands/graph_commands.c
3558:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/commands/label_commands.o src/backend/commands/label_commands.c
3559:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/executor/cypher_create.o src/backend/executor/cypher_create.c
3560:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/executor/cypher_merge.o src/backend/executor/cypher_merge.c
3561:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/executor/cypher_set.o src/backend/executor/cypher_set.c
3562:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/executor/cypher_utils.o src/backend/executor/cypher_utils.c
3563:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/nodes/ag_nodes.o src/backend/nodes/ag_nodes.c
3564:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/nodes/cypher_copyfuncs.o src/backend/nodes/cypher_copyfuncs.c
3565:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/nodes/cypher_outfuncs.o src/backend/nodes/cypher_outfuncs.c
3566:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/nodes/cypher_readfuncs.o src/backend/nodes/cypher_readfuncs.c
3567:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/optimizer/cypher_createplan.o src/backend/optimizer/cypher_createplan.c
3568:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/optimizer/cypher_pathnode.o src/backend/optimizer/cypher_pathnode.c
3569:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/optimizer/cypher_paths.o src/backend/optimizer/cypher_paths.c
3570:  flex -b  -o'src/backend/parser/ag_scanner.c' src/backend/parser/ag_scanner.l
3571:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_analyze.o src/backend/parser/cypher_analyze.c
3572:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_clause.o src/backend/parser/cypher_clause.c
3573:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/executor/cypher_delete.o src/backend/executor/cypher_delete.c
3574:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_expr.o src/backend/parser/cypher_expr.c
3575:  bison -Wno-deprecated  --defines=src/include/parser/cypher_gram_def.h -o src/backend/parser/cypher_gram.c src/backend/parser/cypher_gram.y
3576:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_item.o src/backend/parser/cypher_item.c
3577:  '/usr/bin/perl' -I ./tools/ ./tools/gen_keywordlist.pl --extern --varname CypherKeyword --output src/include/parser src/include/parser/cypher_kwlist.h
3578:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_parse_agg.o src/backend/parser/cypher_parse_agg.c
3579:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_parse_node.o src/backend/parser/cypher_parse_node.c
3580:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_parser.o src/backend/parser/cypher_parser.c
3581:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_transform_entity.o src/backend/parser/cypher_transform_entity.c
3582:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/age_graphid_ds.o src/backend/utils/adt/age_graphid_ds.c
3583:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/agtype.o src/backend/utils/adt/agtype.c
3584:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/agtype_ext.o src/backend/utils/adt/agtype_ext.c
3585:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/agtype_gin.o src/backend/utils/adt/agtype_gin.c
3586:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/agtype_ops.o src/backend/utils/adt/agtype_ops.c
3587:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/agtype_parser.o src/backend/utils/adt/agtype_parser.c
3588:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/agtype_util.o src/backend/utils/adt/agtype_util.c
3589:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/agtype_raw.o src/backend/utils/adt/agtype_raw.c
3590:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/age_global_graph.o src/backend/utils/adt/age_global_graph.c
3591:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/age_session_info.o src/backend/utils/adt/age_session_info.c
3592:  (07:28:16) ^[[32mAnalyzing:^[[0m 999 targets (1275 packages loaded, 79101 targets configu\
...

3596:  Foreign Cc - Configure: Building perl_install; 0s remote, remote-cache
3597:  //docker/images:age_extension_layer; 0s remote, remote-cache
3598:  @@abseil-cpp+//absl/time/internal/cctz:civil_time; 0s remote, remote-cache
3599:  Compiling absl/base/log_severity.cc [for tool]; 0s remote, remote-cache
3600:  @@zlib+//:copy_public_headers; 0s remote, remote-cache
3601:  //internal/fastsum:fastsum_test; 0s remote, remote-cache
3602:  @@abseil-cpp+//absl/types:bad_variant_access; 0s remote, remote-cache ...
3603:  Fetching repository @@rules_oci++oci+arc_runner_linux_amd64; starting 9s
3604:  Fetching ...ux_x86_64__x86_64-unknown-linux-gnu__stable_tools; starting 9s
3605:  Fetching ...ository @@gazelle++go_deps+org_golang_google_grpc; starting 9s
3606:  Fetching ...ry @@gazelle++go_deps+com_github_stretchr_testify; starting 9s
3607:  Fetching ...itory @@gazelle++go_deps+io_opentelemetry_go_otel; starting 8s
3608:  Fetching ...@gazelle++go_deps+io_opentelemetry_go_otel_metric; starting 8s
3609:  Fetching ...tory @@gazelle++go_deps+com_github_markbates_goth; starting 8s
3610:  Fetching ...e++go_deps+com_github_rs_zerolog; starting 8s ... (58 fetches)
3611:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/age_vle.o src/backend/utils/adt/age_vle.c
3612:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/cypher_funcs.o src/backend/utils/adt/cypher_funcs.c
3613:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/ag_float8_supp.o src/backend/utils/adt/ag_float8_supp.c
3614:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/adt/graphid.o src/backend/utils/adt/graphid.c
3615:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/ag_func.o src/backend/utils/ag_func.c
3616:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/graph_generation.o src/backend/utils/graph_generation.c
3617:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/cache/ag_cache.o src/backend/utils/cache/ag_cache.c
3618:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/load/ag_load_labels.o src/backend/utils/load/ag_load_labels.c
3619:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/load/ag_load_edges.o src/backend/utils/load/ag_load_edges.c
3620:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/load/age_load.o src/backend/utils/load/age_load.c
3621:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/load/libcsv.o src/backend/utils/load/libcsv.c
3622:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/name_validation.o src/backend/utils/name_validation.c
3623:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/utils/ag_guc.o src/backend/utils/ag_guc.c
3624:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/ag_scanner.o src/backend/parser/ag_scanner.c
3625:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_gram.o src/backend/parser/cypher_gram.c
3626:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal  -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2   -c -o src/backend/parser/cypher_keywords.o src/backend/parser/cypher_keywords.c
3627:  gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -shared -o age.so src/backend/age.o src/backend/catalog/ag_catalog.o src/backend/catalog/ag_graph.o src/backend/catalog/ag_label.o src/backend/catalog/ag_namespace.o src/backend/commands/graph_commands.o src/backend/commands/label_commands.o src/backend/executor/cypher_create.o src/backend/executor/cypher_merge.o src/backend/executor/cypher_set.o src/backend/executor/cypher_utils.o src/backend/nodes/ag_nodes.o src/backend/nodes/cypher_copyfuncs.o src/backend/nodes/cypher_outfuncs.o src/backend/nodes/cypher_readfuncs.o src/backend/optimizer/cypher_createplan.o src/backend/optimizer/cypher_pathnode.o src/backend/optimizer/cypher_paths.o src/backend/parser/ag_scanner.o src/backend/parser/cypher_analyze.o src/backend/parser/cypher_clause.o src/backend/executor/cypher_delete.o src/backend/parser/cypher_expr.o src/backend/parser/cypher_gram.o src/backend/parser/cypher_item.o src/backend/parser/cypher_keywords.o src/backend/parser/cypher_parse_agg.o src/backend/parser/cypher_parse_node.o src/backend/parser/cypher_parser.o src/backend/parser/cypher_transform_entity.o src/backend/utils/adt/age_graphid_ds.o src/backend/utils/adt/agtype.o src/backend/utils/adt/agtype_ext.o src/backend/utils/adt/agtype_gin.o src/backend/utils/adt/agtype_ops.o src/backend/utils/adt/agtype_parser.o src/backend/utils/adt/agtype_util.o src/backend/utils/adt/agtype_raw.o src/backend/utils/adt/age_global_graph.o src/backend/utils/adt/age_session_info.o src/backend/utils/adt/age_vle.o src/backend/utils/adt/cypher_funcs.o src/backend/utils/adt/ag_float8_supp.o src/backend/utils/adt/graphid.o src/backend/utils/ag_func.o src/backend/utils/graph_generation.o src/backend/utils/cache/ag_cache.o src/backend/utils/load/ag_load_labels.o src/backend/utils/load/ag_load_edges.o src/backend/utils/load/age_load.o src/backend/utils/load/libcsv.o src/backend/utils/name_validation.o src/backend/utils/ag_guc.o -L/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/lib/x86_64-linux-gnu  -Wl,-z,relro -Wl,-z,now -L/usr/lib/llvm-16/lib  -Wl,--as-needed -fvisibility=hidden 
3628:  /bin/mkdir -p '/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/install_age/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/lib/postgresql/16/lib'
...

3706:  -- Check for working C compiler: /usr/bin/gcc - skipped
3707:  -- Detecting C compile features
3708:  -- Detecting C compile features - done
3709:  -- TimescaleDB version 2.24.0. Can be updated from version 2.23.1
3710:  -- Build type is RelWithDebInfo
3711:  -- Install method is 'docker'
3712:  -- Performing Test CC_SUPPORTS_NO_UNUSED_CLI_ARG
3713:  -- Performing Test CC_SUPPORTS_NO_UNUSED_CLI_ARG - Success
3714:  -- Performing Test CC_SUPPORTS_NO_FORMAT_TRUNCATION
3715:  -- Performing Test CC_SUPPORTS_NO_FORMAT_TRUNCATION - Success
3716:  -- Performing Test CC_STRINGOP_TRUNCATION
3717:  -- Performing Test CC_STRINGOP_TRUNCATION - Success
3718:  -- Performing Test CC_SUPPORTS_IMPLICIT_FALLTHROUGH
3719:  -- Performing Test CC_SUPPORTS_IMPLICIT_FALLTHROUGH - Success
3720:  -- Performing Test CC_SUPPORTS_NEWLINE_EOF
3721:  -- Performing Test CC_SUPPORTS_NEWLINE_EOF - Failed
3722:  -- Performing Test CC_SUPPORTS_VISIBILITY_HIDDEN
...

5455:  from external/protobuf+/src/google/protobuf/compiler/kotlin/file.cc:8:
5456:  bazel-out/k8-opt-exec-ST-18ddd633e11e/bin/external/protobuf+/src/google/protobuf/io/_virtual_includes/printer/google/protobuf/io/printer.h: In instantiation of 'void google::protobuf::io::AnnotationProtoCollector<AnnotationProto>::AddAnnotation(size_t, size_t, const std::string&, const std::vector<int>&, std::optional<google::protobuf::io::AnnotationCollector::Semantic>) [with AnnotationProto = google::protobuf::GeneratedCodeInfo; size_t = long unsigned int; std::string = std::__cxx11::basic_string<char>]':
5457:  bazel-out/k8-opt-exec-ST-18ddd633e11e/bin/external/protobuf+/src/google/protobuf/io/_virtual_includes/printer/google/protobuf/io/printer.h:123:8:   required from here
5458:  bazel-out/k8-opt-exec-ST-18ddd633e11e/bin/external/protobuf+/src/google/protobuf/io/_virtual_includes/printer/google/protobuf/io/printer.h:127:23: warning: comparison of integer expressions of different signedness: 'int' and...
Imported GitHub PR comment. Original author: @qodo-code-review[bot] Original URL: https://github.com/carverauto/serviceradar/pull/2219#issuecomment-3704675074 Original created: 2026-01-02T07:34:49Z --- ## CI Feedback 🧐 A test triggered by this PR failed. Here is an AI-generated analysis of the failure: <table><tr><td> **Action:** build</td></tr> <tr><td> **Failed stage:** [Test](https://github.com/carverauto/serviceradar/actions/runs/20653183984/job/59301300904) [❌] </td></tr> <tr><td> **Failed test name:** //web-ng:precommit </td></tr> <tr><td> **Failure summary:** The GitHub Action failed because the Bazel test target <code>//web-ng:precommit</code> failed (Exit 1), causing <br>the overall Bazel run to exit with code 3.<br> <br> The <code>//web-ng:precommit</code> failure was due to Elixir formatting checks: <code>mix format</code> was run with <br><code>--check-formatted</code> and reported unformatted code.<br> - Error: <code>** (Mix) mix format failed due to </code><br><code>--check-formatted. The following files are not formatted:</code><br> - Offending file shown in the log:<br> - <br><code>src/web-ng/lib/serviceradar_web_ng/edge/collector_bundle_generator.ex</code><br> - Example formatting issue <br>around line ~537 (function head wrapping/indentation):<br> - <code>defp edge_site_nats_url(%{edge_site: </code><br><code>%EdgeSite{nats_leaf_url: url}}) when is_binary(url) and url != "" do</code><br> - should be split across <br>lines as shown in the diff.<br> </td></tr> <tr><td> <details><summary>Relevant error logs:</summary> ```yaml 1: Runner name: 'arc-runner-set-2tp2m-runner-2tmwq' 2: Runner group name: 'Default' ... 138: ^[[36;1mif command -v apt-get >/dev/null 2>&1; then^[[0m 139: ^[[36;1m sudo apt-get update^[[0m 140: ^[[36;1m sudo apt-get install -y build-essential pkg-config libssl-dev protobuf-compiler cmake flex bison^[[0m 141: ^[[36;1melif command -v dnf >/dev/null 2>&1; then^[[0m 142: ^[[36;1m sudo dnf install -y gcc gcc-c++ make openssl-devel protobuf-compiler cmake flex bison^[[0m 143: ^[[36;1melif command -v yum >/dev/null 2>&1; then^[[0m 144: ^[[36;1m sudo yum install -y gcc gcc-c++ make openssl-devel protobuf-compiler cmake flex bison^[[0m 145: ^[[36;1melif command -v microdnf >/dev/null 2>&1; then^[[0m 146: ^[[36;1m sudo microdnf install -y gcc gcc-c++ make openssl-devel protobuf-compiler cmake flex bison^[[0m 147: ^[[36;1melse^[[0m 148: ^[[36;1m echo "Unsupported package manager; please install gcc, g++ (or clang), make, OpenSSL headers, pkg-config, and protoc manually." >&2^[[0m 149: ^[[36;1m exit 1^[[0m 150: ^[[36;1mfi^[[0m 151: ^[[36;1m^[[0m 152: ^[[36;1mensure_pkg_config^[[0m 153: ^[[36;1mprotoc --version || (echo "protoc installation failed" && exit 1)^[[0m 154: shell: /usr/bin/bash -e {0} ... 309: ^[[36;1mecho CARGO_HOME=${CARGO_HOME:-"$HOME/.cargo"} >> $GITHUB_ENV^[[0m 310: shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 311: env: 312: BUILDBUDDY_ORG_API_KEY: *** 313: SRQL_TEST_DATABASE_URL: *** 314: SRQL_TEST_ADMIN_URL: *** 315: DOCKERHUB_USERNAME: *** 316: DOCKERHUB_TOKEN: *** 317: TEST_CNPG_DATABASE: serviceradar_web_ng_test 318: INSTALL_DIR_FOR_OTP: /home/runner/_work/_temp/.setup-beam/otp 319: INSTALL_DIR_FOR_ELIXIR: /home/runner/_work/_temp/.setup-beam/elixir 320: ##[endgroup] 321: ##[group]Run : install rustup if needed 322: ^[[36;1m: install rustup if needed^[[0m 323: ^[[36;1mif ! command -v rustup &>/dev/null; then^[[0m 324: ^[[36;1m curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused --location --silent --show-error --fail https://sh.rustup.rs | sh -s -- --default-toolchain none -y^[[0m 325: ^[[36;1m echo "$CARGO_HOME/bin" >> $GITHUB_PATH^[[0m ... 458: ^[[36;1mfi^[[0m 459: shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 460: env: 461: BUILDBUDDY_ORG_API_KEY: *** 462: SRQL_TEST_DATABASE_URL: *** 463: SRQL_TEST_ADMIN_URL: *** 464: DOCKERHUB_USERNAME: *** 465: DOCKERHUB_TOKEN: *** 466: TEST_CNPG_DATABASE: serviceradar_web_ng_test 467: INSTALL_DIR_FOR_OTP: /home/runner/_work/_temp/.setup-beam/otp 468: INSTALL_DIR_FOR_ELIXIR: /home/runner/_work/_temp/.setup-beam/elixir 469: CARGO_HOME: /home/runner/.cargo 470: CARGO_INCREMENTAL: 0 471: CARGO_TERM_COLOR: always 472: ##[endgroup] 473: ##[group]Run : work around spurious network errors in curl 8.0 474: ^[[36;1m: work around spurious network errors in curl 8.0^[[0m 475: ^[[36;1m# https://rust-lang.zulipchat.com/#narrow/stream/246057-t-cargo/topic/timeout.20investigation^[[0m ... 523: SRQL_TEST_ADMIN_URL: *** 524: DOCKERHUB_USERNAME: *** 525: DOCKERHUB_TOKEN: *** 526: TEST_CNPG_DATABASE: serviceradar_web_ng_test 527: INSTALL_DIR_FOR_OTP: /home/runner/_work/_temp/.setup-beam/otp 528: INSTALL_DIR_FOR_ELIXIR: /home/runner/_work/_temp/.setup-beam/elixir 529: CARGO_HOME: /home/runner/.cargo 530: CARGO_INCREMENTAL: 0 531: CARGO_TERM_COLOR: always 532: ##[endgroup] 533: Attempting to download 1.x... 534: Acquiring v1.27.0 from https://github.com/bazelbuild/bazelisk/releases/download/v1.27.0/bazelisk-linux-amd64 535: Adding to the cache ... 536: Successfully cached bazelisk to /home/runner/_work/_tool/bazelisk/1.27.0/x64 537: Added bazelisk to the path 538: ##[warning]Failed to restore: Cache service responded with 400 539: Restored bazelisk cache dir @ /home/runner/.cache/bazelisk ... 681: 2026/01/02 07:27:37 Downloading https://releases.bazel.build/8.4.1/release/bazel-8.4.1-linux-x86_64... 682: Extracting Bazel installation... 683: Starting local Bazel server (8.4.1) and connecting to it... 684: (07:27:47) ^[[32mINFO: ^[[0mInvocation ID: cbd7eb99-5842-43e6-b7bb-693495afe839 685: (07:27:47) ^[[32mINFO: ^[[0mStreaming build results to: ^[[36mhttps://carverauto.buildbuddy.io/invocation/cbd7eb99-5842-43e6-b7bb-693495afe839^[[0m 686: (07:27:47) ^[[32mINFO: ^[[0mReading 'startup' options from /home/runner/_work/serviceradar/serviceradar/.bazelrc: --max_idle_secs=60 687: (07:27:47) ^[[32mINFO: ^[[0mOptions provided by the client: 688: Inherited 'common' options: --isatty=0 --terminal_columns=80 689: (07:27:47) ^[[32mINFO: ^[[0mReading rc options for 'test' from /home/runner/_work/serviceradar/serviceradar/.bazelrc: 690: Inherited 'common' options: --announce_rc --experimental_convenience_symlinks=clean --color=yes --curses=yes 691: (07:27:47) ^[[32mINFO: ^[[0mReading rc options for 'test' from /home/runner/_work/serviceradar/serviceradar/.bazelrc.remote: 692: Inherited 'common' options: --remote_header=x-buildbuddy-api-key=*** 693: (07:27:47) ^[[32mINFO: ^[[0mReading rc options for 'test' from /home/runner/_work/serviceradar/serviceradar/.bazelrc: 694: Inherited 'build' options: --keep_going --jobs=auto --show_timestamps --action_env=SRQL_TEST_DATABASE_URL --action_env=SRQL_TEST_ADMIN_URL --action_env=NATS_URL --action_env=NATS_SERVER_NAME --action_env=NATS_CA_FILE --action_env=NATS_CERT_FILE --action_env=NATS_KEY_FILE --action_env=NATS_CA_B64 --action_env=NATS_CERT_B64 --action_env=NATS_KEY_B64 --action_env=NEXT_PRIVATE_SKIP_TURBOPACK=1 --action_env=TURBOPACK= --action_env=NEXT_SKIP_TURBO=1 --action_env=OPENSSL_DIR=/usr --action_env=OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu --action_env=OPENSSL_INCLUDE_DIR=/usr/include --action_env=OPENSSL_NO_VENDOR= --action_env=OPENSSL_NO_PKG_CONFIG= --repo_env=OPENSSL_DIR=/usr --repo_env=OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu --repo_env=OPENSSL_INCLUDE_DIR=/usr/include --repo_env=OPENSSL_NO_VENDOR= --repo_env=OPENSSL_NO_PKG_CONFIG= --repo_env=RULES_ERLANG_SKIP_SYSTEM=1 --repo_env=RULES_ELIXIR_SKIP_SYSTEM=1 --repo_env=RULES_PYTHON_LOCAL_PYTHON=/usr/bin/python3 --repo_env=NEXT_SKIP_TURBO=1 --repo_env=NEXT_PRIVATE_SKIP_TURBOPACK=1 --repo_env=TURBOPACK= --java_runtime_version=local_jdk --tool_java_runtime_version=local_jdk --@io_bazel_rules_go//go/config:pure --workspace_status_command=$(pwd)/scripts/workspace_status.sh --build_metadata=REPO_URL=git@github.com:carverauto/serviceradar.git 695: (07:27:47) ^[[32mINFO: ^[[0mReading rc options for 'test' from /home/runner/_work/serviceradar/serviceradar/.bazelrc: 696: 'test' options: --test_output=errors --test_strategy=standalone --remote_executor= --action_env=SRQL_TEST_DATABASE_URL --action_env=SRQL_TEST_ADMIN_URL --test_env=PATH --test_env=CNPG_HOST --test_env=CNPG_PORT --test_env=CNPG_DATABASE --test_env=CNPG_USERNAME --test_env=CNPG_PASSWORD --test_env=CNPG_SSL_MODE --test_env=CNPG_CERT_DIR --test_env=TEST_CNPG_HOST --test_env=TEST_CNPG_PORT --test_env=TEST_CNPG_DATABASE --test_env=TEST_CNPG_USERNAME --test_env=TEST_CNPG_PASSWORD --action_env=NATS_URL --action_env=NATS_SERVER_NAME --action_env=NATS_CA_FILE --action_env=NATS_CERT_FILE --action_env=NATS_KEY_FILE --action_env=NATS_CA_B64 --action_env=NATS_CERT_B64 --action_env=NATS_KEY_B64 --@io_bazel_rules_go//go/config:pure --flaky_test_attempts=2 697: (07:27:47) ^[[32mINFO: ^[[0mFound applicable config definition build:ci in file /home/runner/_work/serviceradar/serviceradar/.bazelrc: --keep_going --build_tag_filters=-manual --config=remote_base --build_metadata=ROLE=CI --bes_results_url=https://carverauto.buildbuddy.io/invocation/ --bes_backend=grpcs://carverauto.buildbuddy.io --remote_cache=grpcs://carverauto.buildbuddy.io --remote_timeout=15m --define=use_hex_cache=true --strategy=ExpandTemplate=local --strategy=NpmPackageExtract=local --strategy=CopyDirectory=local 698: (07:27:47) ^[[32mINFO: ^[[0mFound applicable config definition build:remote_base in file /home/runner/_work/serviceradar/serviceradar/.bazelrc: --remote_executor=grpcs://remote.buildbuddy.io --host_platform=//build/rbe:rbe_platform --platforms=//build/rbe:rbe_platform --crosstool_top=@buildbuddy_toolchain//:toolchain --extra_toolchains=@buildbuddy_toolchain//:cc_toolchain --extra_execution_platforms=//build/rbe:rbe_platform --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 --copt=-Wno-use-after-free --java_language_version=11 --tool_java_language_version=11 --java_runtime_version=remotejdk_11 --tool_java_runtime_version=remotejdk_11 --define=EXECUTOR=remote --incompatible_strict_action_env --remote_download_minimal --remote_upload_local_results --jobs=100 --define=use_hex_cache=true --strategy=ExpandTemplate=local --strategy=NpmPackageExtract=local --strategy=CopyDirectory=local --action_env=OPENSSL_DIR=/usr --action_env=OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu --action_env=OPENSSL_INCLUDE_DIR=/usr/include --action_env=NEXT_PRIVATE_SKIP_TURBOPACK=1 --action_env=TURBOPACK= --action_env=NEXT_SKIP_TURBO=1 699: (07:27:47) ^[[32mINFO: ^[[0mFound applicable config definition test:ci in file /home/runner/_work/serviceradar/serviceradar/.bazelrc: --test_tag_filters=-manual --test_output=errors 700: (07:27:48) ^[[32mINFO: ^[[0mCurrent date is 2026-01-02 ... 2553: ^[[1A^[[K 2554: ^[[1A^[[K 2555: ^[[1A^[[K 2556: ^[[1A^[[K 2557: ^[[1A^[[K 2558: ^[[1A^[[K 2559: ^[[1A^[[K 2560: ^[[1A^[[K 2561: ^[[1A^[[K 2562: ^[[1A^[[K 2563: ^[[1A^[[K 2564: ^[[1A^[[K 2565: ^[[1A^[[K 2566: ^[[1A^[[K 2567: ^[[1A^[[K(07:28:08) ^[[32mINFO: ^[[0mFrom Executing genrule //docker/images:cnpg_postgresql_16_6_rootfs_tar: 2568: Error: pulling layout:/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/external/rules_oci++oci+cloudnativepg_postgresql_16_6_linux_amd64/layout: parsing reference "layout:/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/external/rules_oci++oci+cloudnativepg_postgresql_16_6_linux_amd64/layout": could not parse reference: layout:/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/external/rules_oci++oci+cloudnativepg_postgresql_16_6_linux_amd64/layout 2569: (07:28:08) ^[[32mAnalyzing:^[[0m 999 targets (435 packages loaded, 13621 targets configur\ ... 3519: Testing //web-ng:precommit; 1s local 3520: Copying files to directory timescaledb/src; 0s remote, remote-cache 3521: [Prepa] @go_sdk//:builder 3522: OCI Image //.../images:cert_generator_image_amd64; 0s remote, remote-cache 3523: Foreign Cc - Configure: Building perl_install; 0s remote, remote-cache 3524: //docker/images:age_extension_layer; 0s remote, remote-cache 3525: MakeDeb .../nats/serviceradar-nats__amd64.deb; 0s remote, remote-cache 3526: Fetching repository @@rules_oci++oci+arc_runner_linux_amd64; starting 8s 3527: Fetching ...ux_x86_64__x86_64-unknown-linux-gnu__stable_tools; starting 8s 3528: Fetching ...ository @@gazelle++go_deps+org_golang_google_grpc; starting 8s 3529: Fetching ...ry @@gazelle++go_deps+com_github_stretchr_testify; starting 8s 3530: Fetching ...itory @@gazelle++go_deps+io_opentelemetry_go_otel; starting 8s 3531: Fetching ...@gazelle++go_deps+io_opentelemetry_go_otel_metric; starting 8s 3532: Fetching ...tory @@gazelle++go_deps+com_github_markbates_goth; starting 8s 3533: Fetching ...e++go_deps+com_github_rs_zerolog; starting 8s ... (58 fetches) 3534: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/age.o src/backend/age.c 3535: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/catalog/ag_catalog.o src/backend/catalog/ag_catalog.c 3536: ^[[1A^[[K ... 3539: ^[[1A^[[K 3540: ^[[1A^[[K 3541: ^[[1A^[[K 3542: ^[[1A^[[K 3543: ^[[1A^[[K 3544: ^[[1A^[[K 3545: ^[[1A^[[K 3546: ^[[1A^[[K 3547: ^[[1A^[[K 3548: ^[[1A^[[K 3549: ^[[1A^[[K 3550: ^[[1A^[[K 3551: ^[[1A^[[K 3552: ^[[1A^[[K 3553: ^[[1A^[[K(07:28:16) ^[[32mINFO: ^[[0mFrom Executing genrule //docker/images:age_extension_layer: 3554: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/catalog/ag_graph.o src/backend/catalog/ag_graph.c 3555: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/catalog/ag_label.o src/backend/catalog/ag_label.c 3556: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/catalog/ag_namespace.o src/backend/catalog/ag_namespace.c 3557: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/commands/graph_commands.o src/backend/commands/graph_commands.c 3558: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/commands/label_commands.o src/backend/commands/label_commands.c 3559: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/executor/cypher_create.o src/backend/executor/cypher_create.c 3560: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/executor/cypher_merge.o src/backend/executor/cypher_merge.c 3561: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/executor/cypher_set.o src/backend/executor/cypher_set.c 3562: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/executor/cypher_utils.o src/backend/executor/cypher_utils.c 3563: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/nodes/ag_nodes.o src/backend/nodes/ag_nodes.c 3564: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/nodes/cypher_copyfuncs.o src/backend/nodes/cypher_copyfuncs.c 3565: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/nodes/cypher_outfuncs.o src/backend/nodes/cypher_outfuncs.c 3566: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/nodes/cypher_readfuncs.o src/backend/nodes/cypher_readfuncs.c 3567: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/optimizer/cypher_createplan.o src/backend/optimizer/cypher_createplan.c 3568: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/optimizer/cypher_pathnode.o src/backend/optimizer/cypher_pathnode.c 3569: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/optimizer/cypher_paths.o src/backend/optimizer/cypher_paths.c 3570: flex -b -o'src/backend/parser/ag_scanner.c' src/backend/parser/ag_scanner.l 3571: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_analyze.o src/backend/parser/cypher_analyze.c 3572: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_clause.o src/backend/parser/cypher_clause.c 3573: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/executor/cypher_delete.o src/backend/executor/cypher_delete.c 3574: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_expr.o src/backend/parser/cypher_expr.c 3575: bison -Wno-deprecated --defines=src/include/parser/cypher_gram_def.h -o src/backend/parser/cypher_gram.c src/backend/parser/cypher_gram.y 3576: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_item.o src/backend/parser/cypher_item.c 3577: '/usr/bin/perl' -I ./tools/ ./tools/gen_keywordlist.pl --extern --varname CypherKeyword --output src/include/parser src/include/parser/cypher_kwlist.h 3578: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_parse_agg.o src/backend/parser/cypher_parse_agg.c 3579: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_parse_node.o src/backend/parser/cypher_parse_node.c 3580: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_parser.o src/backend/parser/cypher_parser.c 3581: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_transform_entity.o src/backend/parser/cypher_transform_entity.c 3582: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/age_graphid_ds.o src/backend/utils/adt/age_graphid_ds.c 3583: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/agtype.o src/backend/utils/adt/agtype.c 3584: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/agtype_ext.o src/backend/utils/adt/agtype_ext.c 3585: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/agtype_gin.o src/backend/utils/adt/agtype_gin.c 3586: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/agtype_ops.o src/backend/utils/adt/agtype_ops.c 3587: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/agtype_parser.o src/backend/utils/adt/agtype_parser.c 3588: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/agtype_util.o src/backend/utils/adt/agtype_util.c 3589: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/agtype_raw.o src/backend/utils/adt/agtype_raw.c 3590: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/age_global_graph.o src/backend/utils/adt/age_global_graph.c 3591: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/age_session_info.o src/backend/utils/adt/age_session_info.c 3592: (07:28:16) ^[[32mAnalyzing:^[[0m 999 targets (1275 packages loaded, 79101 targets configu\ ... 3596: Foreign Cc - Configure: Building perl_install; 0s remote, remote-cache 3597: //docker/images:age_extension_layer; 0s remote, remote-cache 3598: @@abseil-cpp+//absl/time/internal/cctz:civil_time; 0s remote, remote-cache 3599: Compiling absl/base/log_severity.cc [for tool]; 0s remote, remote-cache 3600: @@zlib+//:copy_public_headers; 0s remote, remote-cache 3601: //internal/fastsum:fastsum_test; 0s remote, remote-cache 3602: @@abseil-cpp+//absl/types:bad_variant_access; 0s remote, remote-cache ... 3603: Fetching repository @@rules_oci++oci+arc_runner_linux_amd64; starting 9s 3604: Fetching ...ux_x86_64__x86_64-unknown-linux-gnu__stable_tools; starting 9s 3605: Fetching ...ository @@gazelle++go_deps+org_golang_google_grpc; starting 9s 3606: Fetching ...ry @@gazelle++go_deps+com_github_stretchr_testify; starting 9s 3607: Fetching ...itory @@gazelle++go_deps+io_opentelemetry_go_otel; starting 8s 3608: Fetching ...@gazelle++go_deps+io_opentelemetry_go_otel_metric; starting 8s 3609: Fetching ...tory @@gazelle++go_deps+com_github_markbates_goth; starting 8s 3610: Fetching ...e++go_deps+com_github_rs_zerolog; starting 8s ... (58 fetches) 3611: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/age_vle.o src/backend/utils/adt/age_vle.c 3612: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/cypher_funcs.o src/backend/utils/adt/cypher_funcs.c 3613: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/ag_float8_supp.o src/backend/utils/adt/ag_float8_supp.c 3614: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/adt/graphid.o src/backend/utils/adt/graphid.c 3615: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/ag_func.o src/backend/utils/ag_func.c 3616: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/graph_generation.o src/backend/utils/graph_generation.c 3617: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/cache/ag_cache.o src/backend/utils/cache/ag_cache.c 3618: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/load/ag_load_labels.o src/backend/utils/load/ag_load_labels.c 3619: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/load/ag_load_edges.o src/backend/utils/load/ag_load_edges.c 3620: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/load/age_load.o src/backend/utils/load/age_load.c 3621: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/load/libcsv.o src/backend/utils/load/libcsv.c 3622: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/name_validation.o src/backend/utils/name_validation.c 3623: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/utils/ag_guc.o src/backend/utils/ag_guc.c 3624: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/ag_scanner.o src/backend/parser/ag_scanner.c 3625: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_gram.o src/backend/parser/cypher_gram.c 3626: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -I.//src/include -I.//src/include/parser -I. -I./ -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/16/server -I/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/include/postgresql/internal -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -c -o src/backend/parser/cypher_keywords.o src/backend/parser/cypher_keywords.c 3627: gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wimplicit-fallthrough=3 -Wcast-function-type -Wshadow=compatible-local -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -Wno-format-truncation -Wno-stringop-truncation -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-omit-frame-pointer -fPIC -fvisibility=hidden -shared -o age.so src/backend/age.o src/backend/catalog/ag_catalog.o src/backend/catalog/ag_graph.o src/backend/catalog/ag_label.o src/backend/catalog/ag_namespace.o src/backend/commands/graph_commands.o src/backend/commands/label_commands.o src/backend/executor/cypher_create.o src/backend/executor/cypher_merge.o src/backend/executor/cypher_set.o src/backend/executor/cypher_utils.o src/backend/nodes/ag_nodes.o src/backend/nodes/cypher_copyfuncs.o src/backend/nodes/cypher_outfuncs.o src/backend/nodes/cypher_readfuncs.o src/backend/optimizer/cypher_createplan.o src/backend/optimizer/cypher_pathnode.o src/backend/optimizer/cypher_paths.o src/backend/parser/ag_scanner.o src/backend/parser/cypher_analyze.o src/backend/parser/cypher_clause.o src/backend/executor/cypher_delete.o src/backend/parser/cypher_expr.o src/backend/parser/cypher_gram.o src/backend/parser/cypher_item.o src/backend/parser/cypher_keywords.o src/backend/parser/cypher_parse_agg.o src/backend/parser/cypher_parse_node.o src/backend/parser/cypher_parser.o src/backend/parser/cypher_transform_entity.o src/backend/utils/adt/age_graphid_ds.o src/backend/utils/adt/agtype.o src/backend/utils/adt/agtype_ext.o src/backend/utils/adt/agtype_gin.o src/backend/utils/adt/agtype_ops.o src/backend/utils/adt/agtype_parser.o src/backend/utils/adt/agtype_util.o src/backend/utils/adt/agtype_raw.o src/backend/utils/adt/age_global_graph.o src/backend/utils/adt/age_session_info.o src/backend/utils/adt/age_vle.o src/backend/utils/adt/cypher_funcs.o src/backend/utils/adt/ag_float8_supp.o src/backend/utils/adt/graphid.o src/backend/utils/ag_func.o src/backend/utils/graph_generation.o src/backend/utils/cache/ag_cache.o src/backend/utils/load/ag_load_labels.o src/backend/utils/load/ag_load_edges.o src/backend/utils/load/age_load.o src/backend/utils/load/libcsv.o src/backend/utils/name_validation.o src/backend/utils/ag_guc.o -L/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/lib/x86_64-linux-gnu -Wl,-z,relro -Wl,-z,now -L/usr/lib/llvm-16/lib -Wl,--as-needed -fvisibility=hidden 3628: /bin/mkdir -p '/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/install_age/buildbuddy-execroot/bazel-out/k8-fastbuild/bin/docker/images/rootfs_age/usr/lib/postgresql/16/lib' ... 3706: -- Check for working C compiler: /usr/bin/gcc - skipped 3707: -- Detecting C compile features 3708: -- Detecting C compile features - done 3709: -- TimescaleDB version 2.24.0. Can be updated from version 2.23.1 3710: -- Build type is RelWithDebInfo 3711: -- Install method is 'docker' 3712: -- Performing Test CC_SUPPORTS_NO_UNUSED_CLI_ARG 3713: -- Performing Test CC_SUPPORTS_NO_UNUSED_CLI_ARG - Success 3714: -- Performing Test CC_SUPPORTS_NO_FORMAT_TRUNCATION 3715: -- Performing Test CC_SUPPORTS_NO_FORMAT_TRUNCATION - Success 3716: -- Performing Test CC_STRINGOP_TRUNCATION 3717: -- Performing Test CC_STRINGOP_TRUNCATION - Success 3718: -- Performing Test CC_SUPPORTS_IMPLICIT_FALLTHROUGH 3719: -- Performing Test CC_SUPPORTS_IMPLICIT_FALLTHROUGH - Success 3720: -- Performing Test CC_SUPPORTS_NEWLINE_EOF 3721: -- Performing Test CC_SUPPORTS_NEWLINE_EOF - Failed 3722: -- Performing Test CC_SUPPORTS_VISIBILITY_HIDDEN ... 5455: from external/protobuf+/src/google/protobuf/compiler/kotlin/file.cc:8: 5456: bazel-out/k8-opt-exec-ST-18ddd633e11e/bin/external/protobuf+/src/google/protobuf/io/_virtual_includes/printer/google/protobuf/io/printer.h: In instantiation of 'void google::protobuf::io::AnnotationProtoCollector<AnnotationProto>::AddAnnotation(size_t, size_t, const std::string&, const std::vector<int>&, std::optional<google::protobuf::io::AnnotationCollector::Semantic>) [with AnnotationProto = google::protobuf::GeneratedCodeInfo; size_t = long unsigned int; std::string = std::__cxx11::basic_string<char>]': 5457: bazel-out/k8-opt-exec-ST-18ddd633e11e/bin/external/protobuf+/src/google/protobuf/io/_virtual_includes/printer/google/protobuf/io/printer.h:123:8: required from here 5458: bazel-out/k8-opt-exec-ST-18ddd633e11e/bin/external/protobuf+/src/google/protobuf/io/_virtual_includes/printer/google/protobuf/io/printer.h:127:23: warning: comparison of integer expressions of different signedness: 'int' and...
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
carverauto/serviceradar!2627
No description provided.