docs(openspec): add agent feature sets native add-on framework proposal #3447

Merged
mfreeman451 merged 20 commits from feat/3425-agent-feature-sets-proposal into staging 2026-05-29 05:04:21 +00:00
Owner

OpenSpec change add-agent-feature-sets for issue #3425: a signed, discoverable framework for selectable native agent add-ons. Delivery models compiled-in / pushed-artifact / os-package; supervision config-toggle / agent-sidecar / systemd-service / systemd-timer / ephemeral-helper; an Edge Ops selection+targeting UI; and a control-plane catalog, modeled on the WASM plugin DevX.

Defines the contract that bumblebee, host-network-visibility/netprobe, and remote-access are retrofitted onto in follow-ups. Proposal/design/tasks + 18 requirements across new agent-feature-sets and native-addon-builds capabilities plus agent-config, agent-configuration, build-web-ui, agent-registry. Passes openspec validate --strict.

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

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?
OpenSpec change add-agent-feature-sets for issue #3425: a signed, discoverable framework for selectable native agent add-ons. Delivery models compiled-in / pushed-artifact / os-package; supervision config-toggle / agent-sidecar / systemd-service / systemd-timer / ephemeral-helper; an Edge Ops selection+targeting UI; and a control-plane catalog, modeled on the WASM plugin DevX. Defines the contract that bumblebee, host-network-visibility/netprobe, and remote-access are retrofitted onto in follow-ups. Proposal/design/tasks + 18 requirements across new agent-feature-sets and native-addon-builds capabilities plus agent-config, agent-configuration, build-web-ui, agent-registry. Passes openspec validate --strict. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> ## 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?
docs(openspec): add agent feature sets native add-on framework proposal
Some checks failed
lint / lint (push) Successful in 1m43s
Golang Tests / test-go (push) Failing after 1m51s
Secret Scan / gitleaks (pull_request) Successful in 24s
lint / lint (pull_request) Successful in 1m40s
CI / build (pull_request) Successful in 11m29s
28ca47b21e
OpenSpec change add-agent-feature-sets for issue #3425: a signed, discoverable framework for selectable native agent add-ons. Delivery models compiled-in / pushed-artifact / os-package; supervision config-toggle / agent-sidecar / systemd-service / systemd-timer / ephemeral-helper; an Edge Ops selection+targeting UI; and a control-plane catalog, modeled on the WASM plugin DevX.

Defines the contract that bumblebee, host-network-visibility/netprobe, and remote-access are retrofitted onto in follow-ups. Proposal/design/tasks + 18 requirements across new agent-feature-sets and native-addon-builds capabilities plus agent-config, agent-configuration, build-web-ui, agent-registry. Passes openspec validate --strict.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(openspec): adopt go-plugin and binary-size hygiene for agent feature sets
All checks were successful
Secret Scan / gitleaks (pull_request) Successful in 1m3s
lint / lint (pull_request) Successful in 2m7s
lint / lint (push) Successful in 2m43s
Golang Tests / test-go (push) Successful in 2m48s
CI / build (pull_request) Successful in 14m30s
8480d65fc6
Pin the agent-sidecar supervision model to HashiCorp go-plugin (subprocess + gRPC, polyglot Go/Rust, UDS + AutoMTLS); reject the Go stdlib plugin package. Add a dependency-isolation contract + CI gate so add-ons never grow the base agent, build hygiene (method dead-code elimination guard, no stdlib plugin, size-regression gate) from the Datadog Agent size lessons, and a native add-on SDK. Reframe compiled-in delivery as legacy/coupled-only.

Updates design.md, proposal.md, agent-feature-sets + native-addon-builds specs, tasks.md. New dependency github.com/hashicorp/go-plugin (MPL-2.0). Passes openspec validate --strict.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(openspec): drop build flavors; keep single agent artifact; accept MPL go-plugin
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 23s
lint / lint (pull_request) Successful in 1m6s
Golang Tests / test-go (push) Failing after 1m12s
lint / lint (push) Successful in 2m14s
CI / build (pull_request) Successful in 11m59s
6e5722572a
Per maintainer: no multiple agent build packages. Lean-edge comes from the out-of-process-plugin default + dependency isolation (the base agent never imports add-on packages, so a single artifact stays small as capabilities are added). remote-access stays compiled-in and config-toggled, unchanged. Build-tag agent flavors recorded as a rejected alternative.

Accept github.com/hashicorp/go-plugin (MPL-2.0): compatible with ServiceRadar's Apache-2.0 (weak/file-level copyleft, consumed unmodified). Passes openspec validate --strict.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(openspec): resolve open decisions (pushed-artifact default, reuse signing key, v1 UI bundles)
All checks were successful
Secret Scan / gitleaks (pull_request) Successful in 23s
lint / lint (pull_request) Successful in 1m9s
lint / lint (push) Successful in 1m13s
Golang Tests / test-go (push) Successful in 1m16s
CI / build (pull_request) Successful in 11m31s
23ee5b30cf
Maintainer decisions: default delivery = signed pushed-artifact tarballs (os-package secondary); reuse the existing WASM signing key/infra (no native-addon-specific key); feature sets are a v1 UI multi-select grouping over add-ons (no first-class bundle resource, deferred).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(agent): add go-plugin native add-on contract spine (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 57s
Rust Tests / test-rust (rust/rdp-adapter, cargo) (push) Successful in 2m2s
lint / lint (pull_request) Failing after 2m19s
lint / lint (push) Failing after 2m31s
Rust Tests / test-rust (rust/rperf-client, cargo) (push) Successful in 2m46s
Rust Tests / test-rust (rust/log-collector, cargo) (push) Successful in 2m54s
Golang Tests / test-go (push) Successful in 2m59s
Rust Tests / test-rust (rust/trapd, cargo) (push) Successful in 3m2s
Rust Tests / test-rust (rust/consumers/zen, cargo) (push) Successful in 3m8s
Rust Tests / test-rust (//rust/rperf-server:rperf, rust/rperf-server, bazel) (push) Successful in 4m0s
Rust Tests / test-rust (rust/rdp-connector-probe, cargo) (push) Successful in 4m10s
Rust Tests / test-rust (//rust/netprobe:netprobe, //build/platforms:linux_aarch64_musl, rust/netprobe, bazel-static) (push) Successful in 4m28s
Rust Tests / test-rust (//rust/netprobe:netprobe, //build/platforms:linux_x86_64_musl, rust/netprobe, bazel-static) (push) Successful in 4m38s
Rust Tests / test-rust (//rust/netprobe:netprobe_test, rust/netprobe, bazel-test) (push) Successful in 5m2s
Rust Tests / test-rust (rust/srql, cargo) (push) Successful in 5m38s
CI / build (pull_request) Successful in 13m34s
04be4136e5
First implementation slice of the native add-on framework: the gRPC Addon contract (proto/agent/addon/v1), the shared go-plugin glue + Go Addon interface (go/pkg/addon), the author SDK Serve() (go/pkg/addon/sdk), and the agent-side add-on manager that launches and supervises add-ons as go-plugin subprocesses over a Unix socket with AutoMTLS, health checks, restart backoff, and a circuit breaker (go/pkg/agent/addon). Includes a reference add-on (go/cmd/serviceradar-sample-addon) + manifest (addons/sample-addon) and an end-to-end test.

Adds github.com/hashicorp/go-plugin v1.8.0 (MPL-2.0). go build and go test ./go/pkg/agent/addon/... pass; gofmt/go vet clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(agent): deliver and apply native add-on assignments via agent config (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 26s
lint / lint (pull_request) Failing after 1m51s
lint / lint (push) Failing after 2m3s
Golang Tests / test-go (push) Successful in 2m36s
CI / build (pull_request) Successful in 14m2s
39f359bec5
Slice 1b wires the add-on manager into the running agent. Adds AddonAssignmentConfig to AgentConfigResponse (field 12); the agent constructs an add-on manager (initAddonManager), applies enabled assignments through applyAddonAssignments in applyConfigResponse (mirroring applyVisibilityConfig: enabled -> []addon.Spec -> manager.Apply, disabled/removed reconciled away), and stops it during shutdown.

Regenerated protobufs with protoc-gen-go v1.36.11 to match go.mod. go build, go vet, and the add-on manager tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(core): add control-plane add-on catalog + config push (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 44s
lint / lint (push) Failing after 2m39s
lint / lint (pull_request) Failing after 1m50s
Golang Tests / test-go (push) Successful in 3m5s
CI / build (pull_request) Successful in 26m9s
Elixir Quality / Elixir Quality (pull_request) Failing after 30m4s
8469739f69
Slice 2 (Elixir control plane). New Ash resources AddonPackage (staged->approved->revoked state machine, kind/delivery/supervision, per-arch artifacts, config_schema, binary/install_path, provenance) and AddonAssignment (per-agent, denormalized addon_id, params, args) + SetAssignmentAddonId change, registered in the Plugins domain. AgentConfigGenerator loads enabled+approved add-on assignments and emits the typed addons section of AgentConfigResponse, folded into the config_version hash. DependencyCatalog gains AddonAssignment (per-agent push_affected_agents) and AddonPackage (fleet push_config_for_type) entries so a UI save pushes config to targeted agents. Elixir proto bindings (Monitoring.AddonAssignmentConfig + addons field) and a focused migration for platform.addon_packages/addon_assignments.

mix compile clean (no errors/warnings); mix ash_postgres.generate_migrations validated the resource DDL (migration harvested to addon tables only). Write-time params/approval validations deferred as a follow-up; approval is gated at config-generation time.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(agent): advertise active add-on status + capabilities upward (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 31s
lint / lint (pull_request) Failing after 1m36s
lint / lint (push) Failing after 1m41s
Golang Tests / test-go (push) Failing after 2m20s
CI / build (pull_request) Successful in 16m52s
Elixir Quality / Elixir Quality (pull_request) Failing after 30m13s
8cb7814463
Slice 1c (reconciliation). The agent now surfaces per-add-on state in the agent_capability StatusResponse: addon.Status -> proto.SidecarStatus (name prefixed 'addon:', degradation reason via last_error), merged into the existing sidecars list, and running add-ons' capability identifiers appended to the advertised capability list. Adds a Capabilities field to addon.Status (from the assignment spec) and a ToProtoStatuses mapper with unit tests.

go build/vet/test green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(web-ng): Edge Ops UI for native add-on selection + assignment (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 25s
lint / lint (push) Failing after 1m28s
lint / lint (pull_request) Failing after 1m28s
Golang Tests / test-go (push) Failing after 2m4s
Elixir Quality / Elixir Quality (pull_request) Has been cancelled
CI / build (pull_request) Has been cancelled
85d9eb8b42
Slice 3 (Edge Ops UI). Adds an 'Add-ons' surface where operators browse approved AddonPackages, configure one from its config.schema.json (reusing PluginConfigForm), and assign it to an agent — creating an AddonAssignment that the control plane pushes to the targeted agent. New web-ng context modules (AddonPackages, AddonAssignments) wrap the core Ash resources via scope; a lean AddonPackageLive.Index LiveView (catalog table + details modal with current assignments + assign-to-agent form); routes under /admin/addons and /settings/agents/addons; and an 'Add-ons' tab in the Edge Ops nav, gated on plugins.view / plugins.assign RBAC.

mix compile + mix format clean. LiveView test deferred (needs DB-backed conn; not runnable in sandbox).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(build): native add-on signed-bundle build rails (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 25s
lint / lint (pull_request) Failing after 1m23s
lint / lint (push) Failing after 1m35s
Golang Tests / test-go (push) Failing after 1m55s
Elixir Quality / Elixir Quality (pull_request) Has been cancelled
CI / build (pull_request) Has been cancelled
ccf7657f81
Slice 4 (native-addon-builds, bundle core). Adds build/native_addons mirroring build/wasm_plugins: an in-repo inventory (addon_inventory.bzl), a deterministic bundle assembler (assemble_addon_bundle.py), and a declare_native_addon_targets macro that cross-compiles each add-on's go_binary per architecture (rules_go go_cross_binary, linux/amd64 + arm64) and assembles {addon.yaml, config.schema.json, bin/<os>/<arch>/<binary>} into a zip + sha256 + metadata.json carrying a per-arch artifacts[] list. Verified: bazel build //build/native_addons:all_bundles produces sample_addon_bundle.zip (0755 binaries, 0644 manifest) with correct per-arch sha256 metadata.

Signing (Cosign + ed25519 upload-signature, reusing the existing WASM key), the serviceradar-native-addon-index.json discovery index, the Forgejo release upload, and the web-ng verify-then-mirror importer reuse the WASM rails and are the follow-up (they need signing keys / a registry / a release runner, not runnable in this sandbox).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(core): add AddonAssignment write-time safety validations (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 38s
lint / lint (pull_request) Failing after 1m34s
lint / lint (push) Failing after 1m35s
Golang Tests / test-go (push) Failing after 2m13s
CI / build (pull_request) Has been cancelled
Elixir Quality / Elixir Quality (pull_request) Has been cancelled
f62445e91c
Slice 5 (hardening). AddonAssignment create/update now enforce two guards mirroring the WASM plugin validations: AddonPackageApproved (an enabled assignment may only reference an :approved AddonPackage) and NoDuplicateEnabledAddonAssignment (at most one enabled assignment per agent per add-on, keyed on the denormalized addon_id). Both run under SystemActor and degrade safely on lookup errors.

mix compile clean. The params-vs-config_schema validation is deferred: it needs an ApplyConfigDefaults-style type-coercion pass first (ConfigSchema uses strict ExJsonSchema and would reject string-typed form values), so adding it without coercion would reject valid UI input.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(web-ng): per-agent add-on assignments card on agent detail (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 1m12s
lint / lint (push) Failing after 1m42s
lint / lint (pull_request) Failing after 2m40s
Golang Tests / test-go (push) Failing after 3m15s
CI / build (pull_request) Successful in 23m51s
Elixir Quality / Elixir Quality (pull_request) Failing after 30m0s
2d0d46b51c
Adds an 'Add-on Assignments' card to AgentLive.Show (mirroring the plugin assignments card): loads the agent's AddonAssignments with their AddonPackage and lists add-on id/name, version, enabled status, and advertised capabilities, with a link to Manage Add-ons. Completes the per-agent desired-state view alongside the capabilities card (which surfaces the add-on capabilities the agent now advertises when active). mix compile + format clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(agent): restart add-ons on binary/args change, recover circuit-open, unblock status (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 29s
lint / lint (push) Failing after 1m29s
lint / lint (pull_request) Failing after 1m32s
Golang Tests / test-go (push) Failing after 2m2s
CI / build (pull_request) Successful in 14m24s
Elixir Quality / Elixir Quality (pull_request) Has been cancelled
8a0bbfff40
Review fixes in the add-on supervisor (go/pkg/agent/addon/manager.go): (1) Apply now treats a BinaryPath or Args change as a restart boundary — it stops the old runner and relaunches the new binary, instead of folding it into reconfigure (which only re-Configured the old process, so upgrades silently no-op'd). (2) Apply respawns a runner whose supervisor goroutine has exited (e.g. after the restart circuit breaker tripped) instead of issuing a dead reconfigure signal, so a fixed binary recovers without an agent restart. (3) Apply collects runners to stop and shuts them down AFTER releasing m.mu, so the blocking go-plugin Kill no longer stalls Status()/Stop() (the push loop reports status under the same lock). Adds equalStrings/finished/needsRestart helpers and a regression test for relaunch-on-binary-change.

go build/vet/test green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(addons): version-hash the launch artifact + dispatch delivery/supervision explicitly (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 27s
lint / lint (push) Failing after 2m5s
lint / lint (pull_request) Failing after 2m4s
Golang Tests / test-go (push) Successful in 2m31s
Elixir Quality / Elixir Quality (pull_request) Has been cancelled
CI / build (pull_request) Has been cancelled
f108eaf7f0
Control-plane + agent review fixes for native add-on assignments:

P1 config versioning: stable_addon_assignment no longer drops :binary_path from the config version hash. DependencyCatalog pushes AddonPackage binary/install_path changes, but the hash dropped binary_path, so an executable change kept the same config_version and polling agents got not_modified forever. The whole assignment map (now incl. binary_path, delivery, supervision) joins the hash; add-on assignments carry no per-poll volatile fields to strip (unlike plugins).

Approved-capability subset: build_addon_assignment_config now prefers approved_capabilities over the package's full manifest list (new effective_addon_capabilities/1, mirroring plugin effective_capabilities), so an operator-narrowed grant is what reaches the agent.

P2 explicit delivery/supervision dispatch: AddonAssignmentConfig gains delivery (8) and supervision (9) string fields (proto + regenerated monitoring.pb.go + hand-maintained monitoring.pb.ex). The generator emits them; the agent's applyAddonAssignments dispatches explicitly — only agent_sidecar runs as a supervised go-plugin; compiled_in/config_toggle/systemd_*/ephemeral_helper are logged ('supervision model not supported by this agent; assignment not applied') instead of silently skipping with a misleading 'no binary path', so desired-vs-observed stays honest. Empty fields default to pushed_artifact/agent_sidecar for older control planes.

Also fixes a latent compile break: push_loop_test.go did not pass the addonManager arg added to buildAgentCapabilityGatewayStatus.

go build/vet/test + gofmt green; serviceradar_core mix compile --warnings-as-errors green; .pb.ex proto round-trip verified (fields 8/9 stable, empty-default clean). DB-backed generator tests excluded (no Postgres in sandbox).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
test(addons): cover add-on assignment compilation + version hashing (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 28s
lint / lint (pull_request) Failing after 1m33s
lint / lint (push) Failing after 1m40s
Golang Tests / test-go (push) Successful in 2m25s
Elixir Quality / Elixir Quality (pull_request) Has been cancelled
CI / build (pull_request) Has been cancelled
3cec0bd2ac
Adds the missing AgentConfigGenerator coverage for the native add-on paths the PR review flagged as untested: (1) the compiled add-on carries delivery/supervision and the operator-approved capability subset wins over the package manifest; (2) capabilities fall back to the package manifest when none are approved; (3) a binary/install-path change re-versions the agent config (the not_modified regression).

Verified against real branch migrations on the srql-fixtures CNPG cluster via the srql-fixtures-db-tests skill (isolated scratch DB, dropped after): 30 tests, 0 failures — the 3 new cases plus the 27 existing version-hash/config tests, confirming the stable_addon_assignment change does not regress general hashing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fix(addons): validate assignment params against package config_schema (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 27s
lint / lint (push) Failing after 1m39s
lint / lint (pull_request) Failing after 1m59s
Golang Tests / test-go (push) Successful in 2m41s
CI / build (pull_request) Successful in 31m41s
Elixir Quality / Elixir Quality (pull_request) Failing after 31m53s
a09f32f8bb
Closes the last PR-review finding: AddonAssignment :create/:update accepted arbitrary params, so invalid params persisted and pushed to the agent, only failing later as a runtime Configure rejection (control-plane error → runtime drift).

Adds ServiceRadar.Plugins.Validations.AddonAssignmentParams (mirrors the core of the plugin AssignmentParams: resolve the package config_schema, run ConfigSchema.validate_params/2; omits the plugin-only batch/secret/auth-linkage checks that don't apply to native add-ons) and wires it into both create and update.

Tests (agent_config_generator_test.exs): a typed schema rejects bad params and accepts valid params. Verified against real branch migrations on srql-fixtures (scratch DB, dropped after): 32 tests, 0 failures.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Closes tasks 1.2 (addons/<id>/ layout convention, instantiated by the sample-addon README) and 1.4 (author checklist). addons/sample-addon/README.md documents the manifest-package layout, the addon.yaml fields, and how an add-on flows build → catalog → assign → deliver → supervise → report. docs/docs/native-addons.md is the operator/author overview mirroring wasm-plugins.md, with delivery/supervision models, the capability/approval model, SDK pointers, and an explicit author checklist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(openspec): scaffold native add-on follow-up changes (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 24s
Golang Tests / test-go (push) Successful in 2m6s
lint / lint (pull_request) Failing after 2m5s
lint / lint (push) Failing after 2m6s
CI / build (pull_request) Has been cancelled
Elixir Quality / Elixir Quality (pull_request) Has been cancelled
59dd27a7d2
Carves the remaining add-on framework implementation into four validatable follow-up changes (the parent add-agent-feature-sets specs the contract; these add implementation-grade requirements under distinct names + tasks):

- add-native-addon-build-signing: Cosign/Rekor + upload-signature, discovery index + verify-before-release, manifest-schema + dependency-isolation CI gates, verify-then-mirror importer.

- add-native-addon-delivery-models: agent dispatch by delivery model, pushed-artifact activation+rollback, systemd/ephemeral/config-toggle supervision, last-known-good cache, base-agent packaging carve.

- add-native-addon-rust-sdk: Rust go-plugin handshake/contract helper + Rust reference add-on + fingerprintd manifest (polyglot proof).

- add-native-addon-edge-ops: per-agent add-on status read model + SRQL, approval review, cohort targeting, drift view, onboarding feature-set selection.

All four pass 'openspec validate <id> --strict'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(openspec): reconcile add-agent-feature-sets task status with implementation (#3425)
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 29s
lint / lint (pull_request) Failing after 1m42s
lint / lint (push) Failing after 2m24s
Golang Tests / test-go (push) Successful in 3m26s
CI / build (pull_request) Successful in 14m13s
Elixir Quality / Elixir Quality (pull_request) Has been cancelled
34157e2cb1
The checklist read 0/45 despite the agent-sidecar spine being complete. Reconciled against the implementation (verified by a per-task code audit): 17 tasks marked done; the 28 remaining each carry a — Status note (partial / not-started / done-differently / deferred) pointing at the follow-up change that tracks it (add-native-addon-{build-signing,delivery-models,rust-sdk,edge-ops}).

Notable done-differently calls: 5.3 (DependencyCatalog binds AddonAssignment/AddonPackage with :push_affected_agents under config_type :agent — add-ons ride in AgentConfigResponse — not a dedicated :addon type) and 5.4 (targeted delivery via assignment + agent config push). 1.2/1.4 closed by the docs added in this PR.

openspec validate add-agent-feature-sets --strict passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
mfreeman451 left a comment

lgtm

lgtm
Merge origin/staging into feat/3425-agent-feature-sets-proposal
Some checks failed
Secret Scan / gitleaks (pull_request) Successful in 25s
lint / lint (push) Successful in 2m22s
lint / lint (pull_request) Successful in 2m21s
Golang Tests / test-go (push) Successful in 2m54s
CI / build (pull_request) Failing after 17m13s
Elixir Quality / Elixir Quality (pull_request) Failing after 32m19s
c8e37adba9
Resolves conflicts from the bumblebee work (PR #3450) landing on staging. Both branches touched the agent config hot path:

- proto AgentConfigResponse: both claimed field 12. Kept staging's bumblebee_config = 12; renumbered the add-on assignments to addons = 13 in monitoring.proto, the regenerated monitoring.pb.go, and the hand-maintained monitoring.pb.ex.

- agent_config_generator.ex: build_config / to_proto_response / generate_config! now carry both bumblebee_config and addons (compute_version_hash already auto-merged to take both).

- go/pkg/agent/types.go: kept both addonManager and objectStore Server fields.

Also fixes 9 make lint-go findings on the add-on code (err113 wrapped static errors, exhaustive zero-value switch cases, exec.CommandContext for noctx, justified nolint:gochecknoglobals on the go-plugin Handshake and the test fixture). go build/vet + golangci-lint (0 issues) + gofmt green; serviceradar_core compiles --warnings-as-errors; merged proto round-trips (fields 12 + 13 coexist).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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!3447
No description provided.