schema_version = "1.0" system = "mikan" docs = "ARCHITECTURE.md" # Canonical global architecture index. # Schema: .pi/skills/mikan-architecture/references/SCHEMA.md # Detailed semantics live in ARCHITECTURE.md and module-local README files. # IDs are stable references and must not be reused for a different concept. [[modules]] id = "composition-root" name = "Process composition root" kind = "entrypoint" docs = "ARCHITECTURE.md#boot-and-process-lifecycle" sources = ["src/main.ts", "src/cli/process-lifecycle.ts", "src/cli/boot.ts"] [[modules]] id = "observability" name = "Process observability" kind = "infrastructure" docs = "src/observability/README.md" sources = ["src/observability/"] [[modules]] id = "platform-adapters" name = "Platform adapters" kind = "adapter" docs = "src/adapters/README.md" sources = ["src/adapters/"] [[modules]] id = "conversation-intake" name = "Conversation intake" kind = "orchestrator" docs = "src/adapters/README.md#contracts" sources = ["src/adapters/intake.ts"] [[modules]] id = "conversation-runtime" name = "Conversation runtime" kind = "orchestrator" docs = "src/runtime/README.md" sources = ["src/runtime/"] [[modules]] id = "harness" name = "Agent harness" kind = "core" docs = "src/harness/README.md" sources = ["src/harness/"] [[modules]] id = "office" name = "Conversation office" kind = "authority" docs = "src/office/README.md" sources = ["src/office/"] [[modules]] id = "state-migrations" name = "State migrations" kind = "authority" docs = "src/migrations/README.md" sources = ["src/migrations/", "src/cli/migrate.ts"] [[modules]] id = "configuration" name = "Configuration and live settings" kind = "authority" docs = "src/settings/README.md" sources = ["src/settings/"] [[modules]] id = "sandbox" name = "Sandbox execution" kind = "infrastructure" docs = "src/sandbox/README.md" sources = ["src/sandbox/"] [[modules]] id = "sessions" name = "Conversation sessions" kind = "authority" docs = "src/sessions/README.md" sources = ["src/sessions/"] [[modules]] id = "vault" name = "Credential vault" kind = "authority" docs = "src/vault/README.md" sources = ["src/vault/"] [[modules]] id = "commands" name = "Built-in commands" kind = "registry" docs = "src/adapters/commands/README.md" sources = ["src/adapters/commands/"] [[modules]] id = "web-adapter" name = "Web adapter" kind = "adapter" docs = "src/adapters/README.md#contracts" sources = ["src/adapters/web/"] [[modules]] id = "events" name = "Scheduled events" kind = "infrastructure" docs = "src/events/README.md" sources = ["src/events/"] # A seam is a stable relationship callers depend on. Interface names refer to # source-level contracts or authority entry points; details stay in docs/code. [[seams]] id = "telemetry" owner = "observability" consumers = [ "composition-root", "platform-adapters", "conversation-runtime", "harness", "sandbox", "vault", "events", "web-adapter", ] interface = "vendor-neutral errors, spans, metrics, events, attribution, and shutdown" docs = "src/observability/README.md" [[seams]] id = "platform-messaging" owner = "platform-adapters" consumers = [ "composition-root", "conversation-intake", "conversation-runtime", "harness", "web-adapter", "events", ] interface = "MessagingBot, ConversationEvent, ConversationResponder" docs = "src/adapters/README.md" [[seams]] id = "intake" owner = "conversation-intake" consumers = ["platform-adapters"] interface = "processMessageIntake" docs = "src/adapters/README.md#contracts" [[seams]] id = "runtime" owner = "conversation-runtime" consumers = ["composition-root", "conversation-intake", "web-adapter", "configuration"] interface = "ConversationRuntime" docs = "src/runtime/README.md" [[seams]] id = "runner" owner = "harness" consumers = ["conversation-runtime"] interface = "PiAgentWrapper" docs = "ARCHITECTURE.md#agent-execution" [[seams]] id = "mcp-tools" owner = "harness" consumers = ["web-adapter"] interface = "loadMcpTools" docs = "src/harness/README.md" [[seams]] id = "harness-model-calls" owner = "harness" consumers = ["platform-adapters"] interface = "evaluateWithJev" docs = "src/harness/README.md" [[seams]] id = "office-resolution" owner = "office" consumers = [ "platform-adapters", "conversation-runtime", "sessions", "vault", "configuration", "web-adapter", "harness", "events", ] interface = "Workspace.office, Office, createConversationEvent, createConversationMessage, parseGithubConversationId" docs = "src/office/README.md" [[seams]] id = "settings" owner = "configuration" consumers = [ "composition-root", "conversation-runtime", "commands", "office", "harness", "web-adapter", ] interface = "resolve settings, apply settings mutations" docs = "ARCHITECTURE.md#configuration-authority" [[seams]] id = "projection" owner = "office" consumers = ["harness"] interface = "resolveWorkspaceProjection" docs = "src/office/README.md" [[seams]] id = "executor" owner = "sandbox" consumers = ["harness"] interface = "pi-durable ExecutionEnv, SandboxAdapter" docs = "src/sandbox/README.md" [[seams]] id = "session-store" owner = "sessions" consumers = ["conversation-runtime", "harness"] interface = "session-key policy, managed session store" docs = "src/sessions/README.md" [[seams]] id = "vault-resolution" owner = "vault" consumers = ["harness", "web-adapter"] interface = "VaultManager" docs = "src/vault/README.md" [[seams]] id = "command-inventory" owner = "commands" consumers = ["platform-adapters", "conversation-runtime"] interface = "COMMAND_MANIFEST" docs = "src/adapters/commands/README.md" [[seams]] id = "event-protocol" owner = "events" consumers = ["harness", "web-adapter"] interface = "EventStore, OfficeEventStore, EventScheduler, buildEventPayload, parseEventPayload" docs = "src/events/README.md" # Resources record global ownership and security classification. Paths are # conceptual locations; detailed layouts belong to the owning module docs. [[resources]] id = "workspace-root" authority = "office" scope = "deployment" classification = "shared-workspace-data" docs = "ARCHITECTURE.md#storage-and-authority-map" [[resources]] id = "office-directory" authority = "office" scope = "conversation" classification = "conversation-data" docs = "src/office/README.md" [[resources]] id = "state-dir" authority = "configuration" scope = "deployment" classification = "host-private" docs = "ARCHITECTURE.md#storage-and-authority-map" [[resources]] id = "migration-record" authority = "state-migrations" scope = "deployment" classification = "host-authoritative" docs = "src/migrations/README.md" [[resources]] id = "office-registry" authority = "office" scope = "deployment" classification = "host-authoritative" docs = "src/office/README.md" [[resources]] id = "settings" authority = "configuration" scope = "deployment-and-conversation" classification = "host-authoritative" docs = "ARCHITECTURE.md#configuration-authority" [[resources]] id = "session-files" authority = "sessions" scope = "session" classification = "conversation-data" docs = "src/sessions/README.md" [[resources]] id = "platform-log" authority = "platform-adapters" scope = "conversation" classification = "conversation-data" docs = "src/adapters/README.md" [[resources]] id = "workspace-projection" authority = "office" scope = "conversation-runtime" classification = "authorized-view" docs = "src/office/README.md" [[resources]] id = "vault-store" authority = "vault" scope = "credential-key" classification = "credential" docs = "src/vault/README.md" [[resources]] id = "openconnector-runtime-token" authority = "harness" scope = "conversation" classification = "credential" docs = "src/harness/README.md" [[resources]] id = "runner-state" authority = "conversation-runtime" scope = "office-and-session" classification = "ephemeral" docs = "src/runtime/README.md" [[resources]] id = "events-bus" authority = "events" scope = "conversation" classification = "host-only-scheduling" docs = "ARCHITECTURE.md#scheduled-execution" [[flows]] id = "boot" path = [ "composition-root", "observability", "office", "configuration", "conversation-runtime", "platform-adapters", "web-adapter", "events", ] docs = "ARCHITECTURE.md#boot-and-process-lifecycle" [[flows]] id = "conversation-run" path = [ "platform-adapters", "conversation-intake", "conversation-runtime", "harness", "platform-adapters", ] docs = "ARCHITECTURE.md#conversation-run" [[flows]] id = "execution-resolution" path = ["harness", "office", "harness", "vault", "sandbox"] docs = "ARCHITECTURE.md#execution-resolution" [[flows]] id = "scheduled-text-event" path = ["events", "platform-adapters", "conversation-runtime", "harness", "platform-adapters"] docs = "ARCHITECTURE.md#scheduled-execution" [[invariants]] id = "identity-office-address" owners = ["office"] applies_to = ["platform-adapters", "conversation-runtime", "sessions", "vault"] docs = "ARCHITECTURE.md#inv-identity-office-address" adr = "docs/adr/0005-office-address-identity.md" [[invariants]] id = "identity-office-key" owners = ["office"] applies_to = ["configuration", "sessions", "vault"] docs = "ARCHITECTURE.md#inv-identity-office-key" adr = "docs/adr/0005-office-address-identity.md" [[invariants]] id = "office-record-before-directory" owners = ["office"] applies_to = ["office-registry", "office-directory"] docs = "ARCHITECTURE.md#inv-office-record-before-directory" [[invariants]] id = "runtime-composite-identity" owners = ["conversation-runtime", "sessions"] applies_to = ["runner-state", "session-files"] docs = "ARCHITECTURE.md#inv-runtime-composite-identity" [[invariants]] id = "intake-order" owners = ["conversation-intake"] applies_to = ["platform-adapters", "conversation-runtime"] docs = "ARCHITECTURE.md#inv-intake-order" [[invariants]] id = "session-serialization" owners = ["conversation-runtime"] applies_to = ["runner-state"] docs = "ARCHITECTURE.md#inv-session-serialization" [[invariants]] id = "process-shutdown-order" owners = ["composition-root", "platform-adapters", "web-adapter", "events", "conversation-runtime"] applies_to = ["platform-adapters", "web-adapter", "events", "events-bus", "runner-state"] docs = "ARCHITECTURE.md#inv-process-shutdown-order" [[invariants]] id = "runner-materialization-rollback" owners = ["harness", "sessions"] applies_to = ["runner-state", "mcp-tools", "session-files"] docs = "ARCHITECTURE.md#inv-runner-materialization-rollback" [[invariants]] id = "run-settlement" owners = ["conversation-runtime", "harness"] applies_to = ["runner-state", "platform-adapters"] docs = "ARCHITECTURE.md#inv-run-settlement" [[invariants]] id = "projection-coherence" owners = ["office"] applies_to = ["office", "office-directory", "workspace-projection", "harness", "sandbox"] docs = "ARCHITECTURE.md#inv-projection-coherence" [[invariants]] id = "state-dir-host-only" owners = ["configuration"] applies_to = ["state-dir", "workspace-projection", "vault-store"] docs = "ARCHITECTURE.md#inv-state-dir-host-only" [[invariants]] id = "execution-policy-enforcement" owners = ["harness", "sandbox"] applies_to = ["workspace-projection"] docs = "ARCHITECTURE.md#inv-execution-policy-enforcement" [[invariants]] id = "credential-least-authority" owners = ["harness", "vault"] applies_to = ["vault-store", "sandbox"] docs = "ARCHITECTURE.md#inv-credential-least-authority" [[invariants]] id = "mcp-conversation-authority" owners = ["harness", "conversation-runtime"] applies_to = ["mcp-tools", "openconnector-runtime-token", "office", "runner-state"] docs = "ARCHITECTURE.md#inv-mcp-conversation-authority" [[invariants]] id = "settings-runner-coherence" owners = ["configuration", "conversation-runtime"] applies_to = ["settings", "runner-state"] docs = "ARCHITECTURE.md#inv-settings-runner-coherence" [[invariants]] id = "session-format-compatibility" owners = ["sessions", "harness"] applies_to = ["session-files"] docs = "ARCHITECTURE.md#inv-session-format-compatibility" # Deviations make current implementation limits visible without changing the # accepted target model in prose or ADRs. [[deviations]] id = "runtime-resource-identity" status = "open" affects = ["sandbox", "office"] docs = "ARCHITECTURE.md#dev-runtime-resource-identity" adr = "docs/adr/0005-office-address-identity.md"