# 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:`. 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.