Files
oikos/docs/adr/0001-go-single-binary.md
dtoro 18cb79caf9 oikos phase 0: ontology + inventory + policy seeds, OpenAPI contract, ADRs
- 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>
2026-07-07 00:17:15 +02:00

1019 B

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.