- client_lifecycle_test.go: full end-to-end integration test planned → provisioning (enroll) → active → migrating → active → deprecated → failed. Validates age keypair generation, attrs, context/secrets endpoints, invalid transition blocking, compute entity provisioning with relationship edges and status tracking. Also tests enrollment rejection for invalid states and duplicate slug rejection for provisioning. - adr/0011-client-lifecycle-flows.md: workstation self-enrollment, compute entity provisioning, deprecation/destruction flows with Mermaid sequence diagrams. Full lifecycle state diagram. Transition check enforcement documentation. - adr/0012-hermes-oikos-interactions.md: Hermes ↔ Oikos interaction flow through OODA loop phases. Thin client bootstrap. Internal component interactions (scheduler, actuator, notifier). Complete 30-tool ownership matrix. - Fix: migration 012 FK reference (executions.id → executions.entity_id) - Fix: provision handler null attributes JSONB - Fix: provisioning steps use entity_id for execution FK All 3 integration tests pass, go vet clean.
Architecture Decision Records
MADR-style records for Oikos. One decision per file, numbered, never edited after acceptance — superseding decisions get a new ADR that links back. Statuses: proposed | accepted | superseded-by-NNNN.
| ADR | Title |
|---|---|
| 0001 | Go with single-binary role packaging |
| 0002 | PostgreSQL + TimescaleDB as the only datastore |
| 0003 | DB-native ontology with YAML seed manifests |
| 0004 | Contract-first OpenAPI API |
| 0005 | UUIDv7 + slug entity identity |
| 0006 | Learning is proposal-only (no self-authorization) |
| 0007 | Threat model and trust zones |
| 0008 | Forward-only migrations |
| 0009 | SSE over WebSocket for the event stream |
| 0010 | Infisical secrets with SOPS DR fallback |