- seeds/ontology.yaml: 59 entity types (5 abstract, is-a hierarchy), 46 relationship types with cardinality, 6 lifecycles with terminal states and named precondition checks - seeds/inventory.yaml: 110 entities / 142 relationships translated from legacy inventory.yaml (fleet, services, ingress, storage, governance, archaeology); thin spots marked for backfill - seeds/policy.yaml: 4 risk classes, 27 approval rules (hierarchy-aware, per-entity overrides), autonomy kill-switch off (cold start) - api/openapi.yaml: full v1 REST contract (40 paths), RFC 9457 errors, cursor pagination, idempotency, ETag/If-Match, scopes; redocly-clean - docs/adr/0001-0010: initial architecture decision records - scripts/validate-seeds.py: Phase 0 gate — hierarchy, lifecycles, endpoints, cardinality, policy cross-refs (0 errors) - plan: layer CHECK gains 'meta' (root type), cardinality gains 'many-to-one' Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
24 lines
1019 B
Markdown
24 lines
1019 B
Markdown
# ADR 0001 — Go with single-binary role packaging
|
|
|
|
Status: accepted (2026-07-07) · Plan: rev 3, R3-4
|
|
|
|
## Context
|
|
The OS has three long-running roles (api, scheduler+actuator+learning,
|
|
notifier) plus one-shot jobs (migrate, seed, export). Rev 2 planned three
|
|
binaries with three Dockerfiles.
|
|
|
|
## Decision
|
|
One Go binary `oikos` with role subcommands (`oikos api | scheduler |
|
|
notifier | all | migrate | seed | export`), one multi-stage Dockerfile, one
|
|
image tagged `oikos:<git-sha>`. Compose runs the image N times with
|
|
different commands (Loki/Temporal pattern). Go over Python for static
|
|
typing, small static binaries (CGO_ENABLED=0, distroless), and goroutines
|
|
for concurrent probes.
|
|
|
|
## Consequences
|
|
- One build, guaranteed version consistency across roles, trivial local dev
|
|
(`oikos all`), simpler rollback (retag one image).
|
|
- Full rewrite of ~4,400 Python lines (logic carries over per plan reuse map).
|
|
- All roles share a dependency set; image is slightly larger than per-role
|
|
minimal images — accepted.
|