Powernode's system extension. Node lifecycle, modules, SDWAN, fleet autonomy, container runtimes, disk image CI, and the on-node Go agent.
This file is the index for AI sessions touching extensions/system/. Each domain points at its operator guide + critical source files.
| Domain | Operator Guide | Key Source Files |
|---|---|---|
| Node lifecycle | docs/ARCHITECTURE.md §2 |
app/models/system/{node,node_instance,node_template,node_architecture,node_platform}.rb, app/services/system/{enrollment,bootstrap,provisioning,instance_control}_service.rb |
| Modules + categories + assignments | docs/ARCHITECTURE.md §1 |
app/models/system/{node_module,node_module_category,node_module_assignment,node_module_version}.rb, app/services/system/{module_version,module_build,module_publication_processor,module_oci_ingest}_service.rb |
| Container runtimes (Phase 1 Docker + Phase 2 K3s) | docs/CONTAINER_RUNTIMES.md |
app/services/system/docker_daemon_provisioner_service.rb, app/services/system/kubernetes_cluster_provisioner_service.rb, app/controllers/api/v1/system/node_api/runtime_controller.rb, agent/internal/dockerd/, agent/internal/k3sd/ |
| SDWAN (slices 1–9) | docs/ARCHITECTURE.md §5 |
app/models/sdwan/, app/services/sdwan/, app/controllers/api/v1/system/sdwan/ |
| Fleet autonomy + sensors | docs/FLEET_SENSORS.md, docs/ARCHITECTURE.md §4 |
app/services/system/fleet/sensors/, app/services/fleet_autonomy_service.rb, db/seeds/fleet_autonomy_agent.rb |
| Skill executors | docs/SKILL_EXECUTORS.md |
app/services/system/ai/skills/ (14 executors), db/seeds/system_skills_seed.rb |
| Disk image CI | docs/DISK_IMAGE_CI.md |
app/models/system/{disk_image_publication,disk_image_webhook}.rb, app/services/system/disk_image_*_service.rb |
| CI workers + Gitea Actions | (cross-cuts disk image CI) | app/services/system/{worker_dispatch,execution_dispatcher}.rb |
| Tasks + autonomy reconcile | docs/ARCHITECTURE.md §4 |
app/models/system/task.rb, app/services/system/runtime_task_dispatcher.rb |
| Honeypot canaries | docs/ARCHITECTURE.md §7 |
app/services/system/honeypot/canary_module_service.rb |
The system extension seeds three AI agents with distinct trust scores + approval chains:
- System Concierge (
assistant, chat) — operator chat agent.concierge_tool_filtercoverssystem_*,docker_*,kubernetes_*, plusdiscover_skills/get_skill_context/request_confirmation. 4 read-shape skills bound. Seeded bydb/seeds/system_concierge_agent.rb. - Fleet Autonomy (
monitor) — fleet-wide reconciler running every 60s. Cert rotation, SDWAN remediation, CVE response, drift remediation, module composition, rolling upgrades. 8 skills bound. 19 intervention policies. Seeded bydb/seeds/fleet_autonomy_agent.rb. - Runtime Manager (
monitor) — Phase 1 Docker + Phase 2 K3s lifecycle. 2 skills bound (docker_provision,provision_cluster). 8 intervention policies. Distinct approval chain so container runtime changes route separately. Seeded bydb/seeds/system_runtime_manager_agent.rb.
System-extension MCP actions follow these prefixes:
system_*— fleet ops, modules, instances, templates, tasks, container runtime provisioning, disk image CIsystem_sdwan_*— SDWAN management (~70 actions)kubernetes_*— Phase 2 K8s clusters (read + decommission + kubeconfig)docker_*— DockerHost CRUD + container/image/network/volume management (works on managed + external hosts)
The full action catalog regenerates via cd server && bundle exec rails mcp:generate_tool_catalog (gitignored at docs/platform/MCP_TOOL_CATALOG.md).
- Always check existing skill executors before writing a new orchestration. 14 already cover most fleet/SDWAN/runtime workflows. See
docs/SKILL_EXECUTORS.md. - New skills must have BOTH an executor at
app/services/system/ai/skills/<name>_executor.rbAND anAi::Skillrecord (seeded viadb/seeds/system_skills_seed.rb). - New autonomy actions must have a
system.<action>intervention policy entry in eitherfleet_autonomy_agent.rborsystem_runtime_manager_agent.rb. - Cross-account safety: use
find_or_create_bywithaccount: accountscoping. The KG seeds + skill seeds follow this pattern.
This is a git submodule. Per root CLAUDE.md:
- Always run
git rev-parse --show-toplevelbeforegit add/commit - Commit inside the submodule first, then bump the parent's submodule pointer
- The system extension is dual-remoted:
origin= private Gitea,github= public GitHub mirror (MIT)
- RSpec specs under
server/spec/ - Live smoke tests under
server/db/seeds/smoke_test_*.rb— run viacd server && rails runner "load Rails.root.join('../extensions/system/server/db/seeds/smoke_test_<name>.rb')" - Go agent tests under
agent/internal/*/— run viacd agent && go test ./...
README.md— extension overviewCONTRIBUTING.md— submodule + commit workflowdocs/ARCHITECTURE.md— 8 subsystems + 4 API surfaces + security architecturedocs/TASKS.md— milestone status (auto-generated)docs/SMOKE_TEST.md— integration test checklistdocs/CONTAINER_RUNTIMES.md— Phase 1 Docker + Phase 2 K3s operator guide + troubleshootingdocs/USE_CASE_MATRIX.md— what works / what doesn't / what to expect for 10 NodeInstance container use cases (READ FIRST when designing a deployment)docs/SKILL_EXECUTORS.md— 14 executor reference (with example I/O)docs/FLEET_SENSORS.md— 12 sensor reference + intervention policy tabledocs/DISK_IMAGE_CI.md— webhook + CI worker workflowdocs/MCP_API_REFERENCE.md—system_*/system_sdwan_*/kubernetes_*/docker_*MCP tool actionsdocs/agent-peering.md— NodeInstance-as-Agent pattern (in sweep)docs/credential-restoration.md— Vault credential lifecycledocs/gitops.md— GitOps reconciler design (in sweep)initramfs/README.md— multi-arch boot builder
node-provisioning.md— full Node + NodeInstance lifecycle with per-state error recoverysdwan-network-setup.md— SDWAN end-to-end (networks, peers, VIPs, firewall, BGP, federation)module-authoring.md— author + register + sign + publish a new NodeModulecve-response.md— full CVE response workflow (SBOM-aware matching, triage, remediation)instance-pool-tuning.md— pool sizing + reaping (slice 7)multi-cluster-k3s.md— multi-cluster K3s withmetadata.target_cluster_id+ HA control planedisk-image-ci.md— disk image CI operator workflowvault-credential-restoration.md— DR runbook for credential restoration
10 end-to-end walkthroughs (01-single-node-qemu.md through 10-gitops-fleet.md). Six have companion runnable seeds at server/db/seeds/example_*.rb.
<parent>/docs/system/threat-model.md— STRIDE threat analysis across 6 attack surfaces (operator API, worker API, node API, MCP tools, internal CA, GitHub mirror)