{
  "schema_version": 1,
  "scope": "View-local modeled relationships; entries can represent the same service in different contexts.",
  "components": [
    {
      "key": "business:chat",
      "view": "business",
      "id": "chat",
      "title": "Assistant chat",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Agent sessions · tools",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        17,
        27
      ],
      "related_views": [
        "collaboration"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:rooms",
      "view": "business",
      "id": "rooms",
      "title": "Rooms",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Messages · threads · membership",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        17
      ],
      "related_views": [
        "collaboration"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:scribe",
      "view": "business",
      "id": "scribe",
      "title": "Meetings & Scribe",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Live media · notes · assets",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        18
      ],
      "related_views": [
        "collaboration"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:calendar",
      "view": "business",
      "id": "calendar",
      "title": "Calendar",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Meetings · agenda · sources",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        19
      ],
      "related_views": [
        "collaboration"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:apps",
      "view": "business",
      "id": "apps",
      "title": "Apps",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Author · build · host",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        15
      ],
      "related_views": [
        "apps"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:workflows",
      "view": "business",
      "id": "workflows",
      "title": "Workflows",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Definitions · versions · runs",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        16
      ],
      "related_views": [
        "workflows"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:skills",
      "view": "business",
      "id": "skills",
      "title": "Skills & Marketplace",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Discover · approve · pin",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        21
      ],
      "related_views": [
        "skills"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:automation",
      "view": "business",
      "id": "automation",
      "title": "Agent automation",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "JS · cron · goals · heartbeat",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        16,
        27
      ],
      "related_views": [
        "workflows"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:knowledge",
      "view": "business",
      "id": "knowledge",
      "title": "Knowledge & Ask",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Evidence · views · private memory",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        2,
        24,
        25
      ],
      "related_views": [
        "knowledge"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:command",
      "view": "business",
      "id": "command",
      "title": "Command Center",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Priorities · briefings · feedback",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        4,
        7,
        10
      ],
      "related_views": [
        "data"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:dashboards",
      "view": "business",
      "id": "dashboards",
      "title": "Dashboards",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Data · panels · layouts · sharing",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        20
      ],
      "related_views": [
        "dashboards"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:people",
      "view": "business",
      "id": "people",
      "title": "People",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Directory · hierarchy · work lens",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        22
      ],
      "related_views": [
        "access"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:admin",
      "view": "business",
      "id": "admin",
      "title": "Admin surfaces",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Platform · Knowledge · runtime",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        23
      ],
      "related_views": [
        "access"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:account",
      "view": "business",
      "id": "account",
      "title": "Account & billing",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Identity · subscriptions · usage",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        26
      ],
      "related_views": [
        "operations"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:connections",
      "view": "business",
      "id": "connections",
      "title": "Connections & files",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "OAuth · secrets · artifacts",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        26,
        27
      ],
      "related_views": [
        "operations"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "business:runtime_ops",
      "view": "business",
      "id": "runtime_ops",
      "title": "Runtime & delivery",
      "owner": "See the linked capability map for service ownership",
      "contract": "Open the focused map for API and transport boundaries.",
      "state": "Devices · approvals · notifications",
      "change": "Source presence is not proof of rollout or client parity.",
      "confidence": "Product grouping",
      "sources": [
        27,
        29,
        30
      ],
      "related_views": [
        "operations"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "application:web",
      "view": "application",
      "id": "web",
      "title": "Web app",
      "owner": "frontend/web",
      "contract": "Browser → Matrix client APIs (chat/rooms) → AIBot runtime; plus product/feature REST",
      "state": "Web experiences and client state; reaches the assistant and human chat through Matrix, plus product REST APIs.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "Source verified",
      "sources": [
        3,
        8
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "application:messaging"
      ]
    },
    {
      "key": "application:mobile",
      "view": "application",
      "id": "mobile",
      "title": "Mobile app",
      "owner": "frontend/mobile",
      "contract": "Same routing method and backend as web: Matrix → runtime, plus shared product REST",
      "state": "Native client that reuses the same routing method and backend contracts as web, including the shared Matrix path.",
      "change": "Mobile reuses the web routing method and backend contracts, including the shared Matrix path; feature-branch routes are not additional released parity.",
      "confidence": "Source verified",
      "sources": [
        3,
        8,
        29
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "application:messaging"
      ]
    },
    {
      "key": "application:desktop",
      "view": "application",
      "id": "desktop",
      "title": "Desktop app",
      "owner": "frontend/electron",
      "contract": "Electron shell → hosted web; inherits the web Matrix routing + native permissions",
      "state": "Loads the hosted web app and inherits its Matrix routing; supplies native desktop permissions.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "Source verified",
      "sources": [
        3
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "application:messaging"
      ]
    },
    {
      "key": "application:messaging",
      "view": "application",
      "id": "messaging",
      "title": "Messaging / calls",
      "owner": "External services + client integrations",
      "contract": "Matrix client APIs carry client↔assistant messages into the runtime; meeting record/Scribe REST; backend token → LiveKit",
      "state": "Matrix carries human chat and client↔assistant messages; rooms/events route into the AIBot runtime, with meeting/call paths beyond AIBot.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "External / documented",
      "sources": [
        17,
        18,
        19
      ],
      "related_views": [
        "collaboration"
      ],
      "upstream": [
        "application:web",
        "application:mobile",
        "application:desktop"
      ],
      "downstream": [
        "application:runtime"
      ]
    },
    {
      "key": "application:runtime",
      "view": "application",
      "id": "runtime",
      "title": "AIBot runtime",
      "owner": "backend/gateway",
      "contract": "Consumes Matrix room/session events; gateway chat/session RPC, tool calls and event relay",
      "state": "Coordinates assistant work and gateway requests; executes tools and relays events.",
      "change": "AIBot is not the Bot Service Gateway or the model gateway.",
      "confidence": "Source verified",
      "sources": [
        3,
        13
      ],
      "related_views": [],
      "upstream": [
        "application:messaging"
      ],
      "downstream": [
        "application:bsg",
        "application:litellm",
        "application:knowledge",
        "application:execution"
      ]
    },
    {
      "key": "application:bsg",
      "view": "application",
      "id": "bsg",
      "title": "Service bridge",
      "owner": "BSG repository — not in workspace",
      "contract": "Bot JWT → derived identity → product-service calls + fronts durable stores (memory index, user-content/file history) for query",
      "state": "Verifies the runtime bot JWT, derives the acting user identity, brokers authorized product-service calls (Command Center, rooms/membership, directory), and fronts durable stores — the memory index and user-content/file history — for query.",
      "change": "Local clients establish the contract; the runtime authenticates to BSG with a bot JWT. The BSG server was not inspected.",
      "confidence": "External / consumer-verified",
      "sources": [
        4,
        9
      ],
      "related_views": [],
      "upstream": [
        "application:runtime"
      ],
      "downstream": [
        "application:memory",
        "application:command"
      ]
    },
    {
      "key": "application:litellm",
      "view": "application",
      "id": "litellm",
      "title": "Model gateway",
      "owner": "External gateway + each AI consumer",
      "contract": "Consumer-selected alias + endpoint + credentials → model routing",
      "state": "Routes authorized model requests. Also used independently by Knowledge and CC.",
      "change": "Alias/provider targets and environment configuration are not live-verified.",
      "confidence": "External / consumer-verified",
      "sources": [
        12,
        13
      ],
      "related_views": [],
      "upstream": [
        "application:runtime"
      ],
      "downstream": []
    },
    {
      "key": "application:knowledge",
      "view": "application",
      "id": "knowledge",
      "title": "Knowledge",
      "owner": "backend/knowledge-base",
      "contract": "Authorized evidence / Ask / view interfaces; hybrid semantic + FTS retrieval dependency",
      "state": "Evidence and view service backed by per-user workspaces and immutable search revisions; retrieval uses hybrid semantic + full-text search.",
      "change": "The arrow from AIBot is a logical retrieval dependency, not a claim about all routing hops. Ask/persona memory is self-only.",
      "confidence": "Source verified",
      "sources": [
        2,
        24,
        25
      ],
      "related_views": [
        "knowledge"
      ],
      "upstream": [
        "application:runtime",
        "application:brain"
      ],
      "downstream": []
    },
    {
      "key": "application:memory",
      "view": "application",
      "id": "memory",
      "title": "Memory index",
      "owner": "Postgres memory index (fronted by BSG) + runtime SQLite shadow",
      "contract": "Durable agent memory: Postgres index fronted by BSG + runtime SQLite shadow; embeddings + FTS hybrid recall",
      "state": "Durable agent memory: a dual-write index — Postgres read path fronted by BSG plus a best-effort SQLite shadow — over embeddings and full-text for hybrid recall.",
      "change": "High-level concept. BSG also fronts bot/user-content history for query; conversation history itself is read through the runtime message tools.",
      "confidence": "Consumer-verified",
      "sources": [
        13
      ],
      "related_views": [],
      "upstream": [
        "application:bsg"
      ],
      "downstream": []
    },
    {
      "key": "application:command",
      "view": "application",
      "id": "command",
      "title": "Command Center",
      "owner": "backend/command-center",
      "contract": "CC reads and actions via AIBot → BSG → Command Center",
      "state": "Own collection and insight pipeline; API results and user actions pass through BSG.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "Source verified",
      "sources": [
        4,
        7,
        10
      ],
      "related_views": [],
      "upstream": [
        "application:bsg",
        "application:systems",
        "application:brain"
      ],
      "downstream": []
    },
    {
      "key": "application:execution",
      "view": "application",
      "id": "execution",
      "title": "Execution services",
      "owner": "AIBot + external execution infrastructure",
      "contract": "Sandbox backend (Docker / AgentCore / MicroVM) + browser and app-builder execution, selected by task",
      "state": "AgentCore authoring, shared app runners and generic MicroVM execution are separate axes.",
      "change": "High-level grouping of documented execution paths; not one audited deployment.",
      "confidence": "External / documented",
      "sources": [
        13,
        15
      ],
      "related_views": [
        "apps",
        "infra"
      ],
      "upstream": [
        "application:runtime"
      ],
      "downstream": []
    },
    {
      "key": "application:brain",
      "view": "application",
      "id": "brain",
      "title": "Brain Data",
      "owner": "External Brain Data service",
      "contract": "Immutable L0 source snapshots and ingestion handoff",
      "state": "Supplies validated raw-source snapshots to Knowledge. CC can optionally fetch Slack L0.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "External / consumer-verified",
      "sources": [
        2,
        4,
        6
      ],
      "related_views": [],
      "upstream": [
        "application:systems"
      ],
      "downstream": [
        "application:knowledge",
        "application:command"
      ]
    },
    {
      "key": "application:systems",
      "view": "application",
      "id": "systems",
      "title": "Connected work",
      "owner": "External work systems + connector owners",
      "contract": "Source-specific collectors and connector APIs; coverage differs by service",
      "state": "Knowledge and CC have different source coverage and acquisition paths.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "External / documented",
      "sources": [
        2,
        4
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "application:brain",
        "application:command"
      ]
    },
    {
      "key": "application:identity",
      "view": "application",
      "id": "identity",
      "title": "Platform services",
      "owner": "External identity / access / placement services",
      "contract": "UMS identity/hierarchy; Vault credentials; Orchestrator assignment/placement",
      "state": "Identity/hierarchy, per-user credentials and runtime placement support multiple services.",
      "change": "Shared support dependencies are grouped; not all calls are drawn.",
      "confidence": "External / consumer-verified",
      "sources": [
        2,
        4,
        13
      ],
      "related_views": [
        "access",
        "operations"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "collaboration:rooms",
      "view": "collaboration",
      "id": "rooms",
      "title": "Rooms",
      "owner": "External Matrix + web/mobile",
      "contract": "/_matrix/client/v3/createRoom; room events and membership",
      "state": "Matrix owns messages, threads/events and membership. A room is not an agent execution session.",
      "change": "Preserve room IDs, event schemas and access checks across clients.",
      "confidence": "Source verified",
      "sources": [
        17
      ],
      "related_views": [
        "application"
      ],
      "upstream": [],
      "downstream": [
        "collaboration:scribe_signal"
      ]
    },
    {
      "key": "collaboration:media",
      "view": "collaboration",
      "id": "media",
      "title": "Live meetings",
      "owner": "External meeting service + LiveKit",
      "contract": "Backend SFU token path → LiveKit media",
      "state": "Live media and meeting records are distinct authorities.",
      "change": "Token scopes and media lifecycle are independent of assistant inference.",
      "confidence": "External / consumer-verified",
      "sources": [
        18
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "collaboration:meeting_service"
      ]
    },
    {
      "key": "collaboration:calendar",
      "view": "collaboration",
      "id": "calendar",
      "title": "Calendar",
      "owner": "Web CalendarPageClient + CC + meeting service",
      "contract": "useAgendaEventsQuery; listCalls / listMeetings",
      "state": "Calendar combines meeting records, CC agenda and caches. Calls redirects to Calendar.",
      "change": "Google Calendar source ≠ inferred agenda ≠ live meeting record; invalidate relevant caches.",
      "confidence": "Source verified",
      "sources": [
        19
      ],
      "related_views": [
        "data"
      ],
      "upstream": [
        "collaboration:agenda",
        "collaboration:meeting_service"
      ],
      "downstream": []
    },
    {
      "key": "collaboration:sessions",
      "view": "collaboration",
      "id": "sessions",
      "title": "Agent sessions",
      "owner": "backend/gateway + web session client",
      "contract": "chat / sessions RPC; useChatSessionGateway",
      "state": "Append-only JSONL keeps execution history; compaction does not delete that history.",
      "change": "Do not treat Matrix room IDs or Knowledge Ask session IDs as execution keys.",
      "confidence": "Source verified",
      "sources": [
        17
      ],
      "related_views": [
        "knowledge",
        "application"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "collaboration:meeting_service",
      "view": "collaboration",
      "id": "meeting_service",
      "title": "Meeting service",
      "owner": "External meeting service",
      "contract": "/meeting/v1/meetings/:id/scribe",
      "state": "Meeting processing is not owned by AIBot. Scribe serves legacy sections or block/markdown modes.",
      "change": "Keep response-mode compatibility, edit semantics and asset access.",
      "confidence": "External / consumer-verified",
      "sources": [
        18
      ],
      "related_views": [],
      "upstream": [
        "collaboration:media"
      ],
      "downstream": [
        "collaboration:scribe",
        "collaboration:calendar"
      ]
    },
    {
      "key": "collaboration:agenda",
      "view": "collaboration",
      "id": "agenda",
      "title": "CC agenda",
      "owner": "backend/command-center",
      "contract": "CC agenda via BSG / client queries",
      "state": "Meeting preparation and inferred planning are produced by CC stages.",
      "change": "A source calendar change need not immediately regenerate CC preparation.",
      "confidence": "Source verified",
      "sources": [
        7,
        19
      ],
      "related_views": [
        "data"
      ],
      "upstream": [],
      "downstream": [
        "collaboration:calendar"
      ]
    },
    {
      "key": "collaboration:scribe_signal",
      "view": "collaboration",
      "id": "scribe_signal",
      "title": "Scribe change event",
      "owner": "Matrix event + web useMeetingScribe",
      "contract": "aic.meeting.scribe → refetch",
      "state": "Initial GET loads Scribe; Matrix version/change events trigger another GET. No polling.",
      "change": "Do not put the Scribe body contract on the event bus.",
      "confidence": "Source verified",
      "sources": [
        18
      ],
      "related_views": [],
      "upstream": [
        "collaboration:rooms"
      ],
      "downstream": [
        "collaboration:scribe"
      ]
    },
    {
      "key": "collaboration:scribe",
      "view": "collaboration",
      "id": "scribe",
      "title": "Scribe",
      "owner": "Web Scribe UI + external meeting service",
      "contract": "GET/edit Scribe + assets",
      "state": "Meeting notes display after processing and update through event-triggered refetch.",
      "change": "aic-enable-scribe / meeting-series whitelist gate access.",
      "confidence": "Source verified",
      "sources": [
        18
      ],
      "related_views": [],
      "upstream": [
        "collaboration:meeting_service",
        "collaboration:scribe_signal"
      ],
      "downstream": []
    },
    {
      "key": "collaboration:ask_session",
      "view": "collaboration",
      "id": "ask_session",
      "title": "Knowledge Ask",
      "owner": "backend/knowledge-base",
      "contract": "Ask streaming + _index/ask-sessions/...",
      "state": "Ask has its own session bodies, metadata and leases; it is not a Matrix room or AIBot JSONL session.",
      "change": "Respect owner access and migration fallback.",
      "confidence": "Source verified",
      "sources": [
        24
      ],
      "related_views": [
        "knowledge"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "apps:intent",
      "view": "apps",
      "id": "intent",
      "title": "App intent",
      "owner": "Web / mobile → main AIBot agent",
      "contract": "User intent → agent app-builder tool / CLI",
      "state": "The main agent delegates app planning, coding and troubleshooting.",
      "change": "Preserve user and tenant context across the authoring handoff.",
      "confidence": "Source verified",
      "sources": [
        15
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "apps:author",
        "apps:cli"
      ]
    },
    {
      "key": "apps:author",
      "view": "apps",
      "id": "author",
      "title": "AgentCore",
      "owner": "External AgentCore + gateway app-builder",
      "contract": "aic-app-builder CLI → BSG",
      "state": "AgentCore authors app code; it is not the fleet that serves running apps.",
      "change": "Plan/coder/troubleshoot contracts can change separately from runtime hosting.",
      "confidence": "External / documented",
      "sources": [
        15
      ],
      "related_views": [],
      "upstream": [
        "apps:intent"
      ],
      "downstream": [
        "apps:bsg_apps"
      ]
    },
    {
      "key": "apps:owned",
      "view": "apps",
      "id": "owned",
      "title": "Owned apps",
      "owner": "Web marketplace / Apps clients",
      "contract": "/marketplace/apps/owned; /aibot/api-proxy/apps/...",
      "state": "Clients list owned apps and call start/deploy operations.",
      "change": "Keep ownership, deployment status and start semantics distinct.",
      "confidence": "Source verified",
      "sources": [
        15
      ],
      "related_views": [
        "skills"
      ],
      "upstream": [],
      "downstream": [
        "apps:bsg_apps"
      ]
    },
    {
      "key": "apps:cli",
      "view": "apps",
      "id": "cli",
      "title": "Builder CLI",
      "owner": "backend/gateway app-builder CLI",
      "contract": "User → main agent → aic-app-builder → BSG",
      "state": "CLI bridges builder workflows to service contracts.",
      "change": "Validate request, tenant identity and errors at the CLI/service boundary.",
      "confidence": "Source verified",
      "sources": [
        15
      ],
      "related_views": [],
      "upstream": [
        "apps:intent"
      ],
      "downstream": [
        "apps:bsg_apps"
      ]
    },
    {
      "key": "apps:bsg_apps",
      "view": "apps",
      "id": "bsg_apps",
      "title": "App control plane",
      "owner": "External BSG / app services",
      "contract": "App lifecycle APIs via BSG",
      "state": "Coordinates builds and placement on shared runners.",
      "change": "A build success is not proof of a running or publicly reachable deployment.",
      "confidence": "External / consumer-verified",
      "sources": [
        15
      ],
      "related_views": [],
      "upstream": [
        "apps:author",
        "apps:cli",
        "apps:owned"
      ],
      "downstream": [
        "apps:runner"
      ]
    },
    {
      "key": "apps:microvm",
      "view": "apps",
      "id": "microvm",
      "title": "Generic MicroVM",
      "owner": "Gateway tools + external sandbox service",
      "contract": "Runtime sandbox/tool execution",
      "state": "Generic sandbox execution is a fourth, separate axis.",
      "change": "Do not migrate app-hosting assumptions into sandbox policies.",
      "confidence": "External / documented",
      "sources": [
        13,
        15
      ],
      "related_views": [
        "infra",
        "operations"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "apps:efs",
      "view": "apps",
      "id": "efs",
      "title": "Tenant EFS",
      "owner": "External app platform / tenant storage",
      "contract": "apps/<appId>/; deployments/<appId>/",
      "state": "Tenant EFS retains app and deployment files.",
      "change": "Storage isolation, build artifacts and cleanup need independent checks.",
      "confidence": "External / documented",
      "sources": [
        15
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "apps:runner"
      ]
    },
    {
      "key": "apps:runner",
      "view": "apps",
      "id": "runner",
      "title": "Shared-runner fleet",
      "owner": "External app runtime fleet",
      "contract": "Build/place/start → runner",
      "state": "Shared runners host apps; AgentCore remains the authoring system.",
      "change": "Verify actual fleet placement, capacity and isolation in the owning service.",
      "confidence": "External / documented",
      "sources": [
        15
      ],
      "related_views": [
        "infra"
      ],
      "upstream": [
        "apps:bsg_apps",
        "apps:efs"
      ],
      "downstream": [
        "apps:public"
      ]
    },
    {
      "key": "apps:public",
      "view": "apps",
      "id": "public",
      "title": "Public app route",
      "owner": "External routing → BSG / runner",
      "contract": "/aibot/<env>/<app>",
      "state": "Public app routes front BSG/runner execution.",
      "change": "Route and access policy changes affect published app consumers.",
      "confidence": "External / consumer-verified",
      "sources": [
        15
      ],
      "related_views": [],
      "upstream": [
        "apps:runner"
      ],
      "downstream": []
    },
    {
      "key": "workflows:page",
      "view": "workflows",
      "id": "page",
      "title": "Workflows page",
      "owner": "Web routines client",
      "contract": "aic-enable-workflows; user-scoped aic-workflow-engine-v2",
      "state": "Feature flags select the workflow experience and engine.",
      "change": "Test both selected engine paths; source presence does not prove tenant enablement.",
      "confidence": "Source verified",
      "sources": [
        16
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "workflows:v2"
      ]
    },
    {
      "key": "workflows:v2",
      "view": "workflows",
      "id": "v2",
      "title": "Workflow V2",
      "owner": "External workflow service",
      "contract": "/workflow/v2 via v2Rest / svcRest clients",
      "state": "Workflow service is the sole draft/list store for page-managed workflows.",
      "change": "Legacy and V2 contracts differ. V2 room install/actions are not equivalent to SVC support.",
      "confidence": "External / consumer-verified",
      "sources": [
        16
      ],
      "related_views": [],
      "upstream": [
        "workflows:page",
        "workflows:validate"
      ],
      "downstream": [
        "workflows:runs",
        "workflows:room_actions"
      ]
    },
    {
      "key": "workflows:runs",
      "view": "workflows",
      "id": "runs",
      "title": "Runs & traces",
      "owner": "External workflow service",
      "contract": "Publish / run / traces APIs",
      "state": "Published versions and runtime traces are distinct from local authoring state.",
      "change": "Verify execution semantics at the external service; do not infer them from CLI push.",
      "confidence": "External / consumer-verified",
      "sources": [
        16
      ],
      "related_views": [],
      "upstream": [
        "workflows:v2"
      ],
      "downstream": []
    },
    {
      "key": "workflows:catalog",
      "view": "workflows",
      "id": "catalog",
      "title": "Builder catalog",
      "owner": "Gateway workflow-builder",
      "contract": "catalog → init / pull / edit",
      "state": "The builder uses catalog schemas to author compatible definitions.",
      "change": "Catalog/schema changes need authoring and validation regression checks.",
      "confidence": "Source verified",
      "sources": [
        16
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "workflows:validate"
      ]
    },
    {
      "key": "workflows:validate",
      "view": "workflows",
      "id": "validate",
      "title": "Validate & push",
      "owner": "Gateway workflow-builder + workflow service",
      "contract": "validate → push",
      "state": "Push transfers a workflow definition; it is not publish or run.",
      "change": "Versioning, errors and remote draft ownership must remain compatible.",
      "confidence": "Source verified",
      "sources": [
        16
      ],
      "related_views": [],
      "upstream": [
        "workflows:catalog"
      ],
      "downstream": [
        "workflows:v2"
      ]
    },
    {
      "key": "workflows:room_actions",
      "view": "workflows",
      "id": "room_actions",
      "title": "Room actions",
      "owner": "Web / external workflow services",
      "contract": "V2 room install and action paths",
      "state": "Room integration varies by selected service implementation.",
      "change": "Do not assert SVC parity from V2 client support.",
      "confidence": "External / consumer-verified",
      "sources": [
        16
      ],
      "related_views": [
        "collaboration"
      ],
      "upstream": [
        "workflows:v2"
      ],
      "downstream": []
    },
    {
      "key": "workflows:js",
      "view": "workflows",
      "id": "js",
      "title": "JS automation",
      "owner": "backend/gateway automation tools",
      "contract": "JavaScript authoring / execution tool path",
      "state": "Agent-authored automation is separate from the page workflow service.",
      "change": "Apply sandbox, approval and credential policies for this execution path.",
      "confidence": "Source verified",
      "sources": [
        16,
        27
      ],
      "related_views": [],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "workflows:schedule",
      "view": "workflows",
      "id": "schedule",
      "title": "Cron & heartbeat",
      "owner": "backend/gateway scheduler/runtime",
      "contract": "Cron / heartbeat / goals runtime contracts",
      "state": "Scheduled agent turns are not workflow-service versions or runs.",
      "change": "Change timing, retry and delivery rules independently.",
      "confidence": "Source verified",
      "sources": [
        27
      ],
      "related_views": [
        "operations"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "workflows:goals",
      "view": "workflows",
      "id": "goals",
      "title": "Goals",
      "owner": "backend/gateway goal tools",
      "contract": "Goal lifecycle / agent turns",
      "state": "Goals coordinate continuing assistant work.",
      "change": "Do not imply one shared durable job engine across all automation.",
      "confidence": "Source verified",
      "sources": [
        27
      ],
      "related_views": [],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "skills:discovery",
      "view": "skills",
      "id": "discovery",
      "title": "Skill discovery",
      "owner": "Gateway marketplace discovery",
      "contract": "marketplace-skill-discovery feature flag",
      "state": "Discovery finds candidates; it does not install or authorize them.",
      "change": "Flag availability and catalog trust must be checked independently.",
      "confidence": "Source verified",
      "sources": [
        21
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "skills:approval"
      ]
    },
    {
      "key": "skills:approval",
      "view": "skills",
      "id": "approval",
      "title": "Trusted approval",
      "owner": "Gateway trusted approval path",
      "contract": "Explicit approval before installation",
      "state": "Only a trusted approval allows the installation path to proceed.",
      "change": "A model-supplied boolean must not be treated as authorization.",
      "confidence": "Source verified",
      "sources": [
        21
      ],
      "related_views": [],
      "upstream": [
        "skills:discovery"
      ],
      "downstream": [
        "skills:validate"
      ]
    },
    {
      "key": "skills:marketplace",
      "view": "skills",
      "id": "marketplace",
      "title": "Marketplace",
      "owner": "Web marketplace + external services",
      "contract": "Owned items / share / revoke APIs",
      "state": "Marketplace covers more than skills: Apps, panels and sharing also exist.",
      "change": "Sharing and revocation need owner and consumer checks.",
      "confidence": "Source verified",
      "sources": [
        15,
        20,
        21
      ],
      "related_views": [
        "apps",
        "dashboards"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "skills:validate",
      "view": "skills",
      "id": "validate",
      "title": "Integrity checks",
      "owner": "Gateway marketplace installer",
      "contract": "Validate selected version and manifest/hash",
      "state": "Pinned, validated content is required before tenant installation.",
      "change": "Test malformed manifests, hash mismatches and version changes.",
      "confidence": "Source verified",
      "sources": [
        21
      ],
      "related_views": [],
      "upstream": [
        "skills:approval"
      ],
      "downstream": [
        "skills:pinned"
      ]
    },
    {
      "key": "skills:pinned",
      "view": "skills",
      "id": "pinned",
      "title": "Tenant-pinned skill",
      "owner": "Gateway skill installation",
      "contract": "skills/marketplace/<name>/SKILL.md",
      "state": "Validated skill instructions become tenant-pinned workspace content.",
      "change": "Track update, removal and tenant-isolation behavior.",
      "confidence": "Source verified",
      "sources": [
        21
      ],
      "related_views": [],
      "upstream": [
        "skills:validate"
      ],
      "downstream": [
        "skills:runtime"
      ]
    },
    {
      "key": "skills:grant",
      "view": "skills",
      "id": "grant",
      "title": "Connector grants",
      "owner": "External Vault + connector owners",
      "contract": "OAuth consent and credential retrieval",
      "state": "Installing a skill does not grant access to an external connector.",
      "change": "Enforce connector scope and credential ownership separately.",
      "confidence": "External / consumer-verified",
      "sources": [
        21,
        26
      ],
      "related_views": [
        "operations",
        "access"
      ],
      "upstream": [],
      "downstream": [
        "skills:tools"
      ]
    },
    {
      "key": "skills:core",
      "view": "skills",
      "id": "core",
      "title": "Core skills",
      "owner": "backend/gateway core skills",
      "contract": "Runtime skill discovery",
      "state": "Core skills are not marketplace-installed content.",
      "change": "Bundled updates and tenant-pinned versions have different lifecycles.",
      "confidence": "Source verified",
      "sources": [
        21,
        27
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "skills:runtime"
      ]
    },
    {
      "key": "skills:runtime",
      "view": "skills",
      "id": "runtime",
      "title": "Agent runtime",
      "owner": "backend/gateway agent runtime",
      "contract": "Runtime discovery of installed SKILL.md",
      "state": "Skill instructions guide the agent; executable tool schemas remain separate.",
      "change": "Instruction changes still need tool-policy and output checks.",
      "confidence": "Source verified",
      "sources": [
        21,
        27
      ],
      "related_views": [
        "ai"
      ],
      "upstream": [
        "skills:pinned",
        "skills:core"
      ],
      "downstream": [
        "skills:tools"
      ]
    },
    {
      "key": "skills:tools",
      "view": "skills",
      "id": "tools",
      "title": "Tool schemas",
      "owner": "backend/gateway tools/extensions",
      "contract": "Tool schema + policy + connector credentials",
      "state": "Tool calls are controlled by runtime policy and any required grants.",
      "change": "Extension inventory does not certify production enablement.",
      "confidence": "Source verified",
      "sources": [
        21,
        27,
        30
      ],
      "related_views": [
        "operations"
      ],
      "upstream": [
        "skills:runtime",
        "skills:grant"
      ],
      "downstream": []
    },
    {
      "key": "dashboards:builder",
      "view": "dashboards",
      "id": "builder",
      "title": "Dashboard Builder",
      "owner": "Gateway dashboard-builder",
      "contract": "/aic_apps_api/dashboards/.../specs",
      "state": "Builder creates dashboard specifications and supporting data/layout assets.",
      "change": "Treat generated spec, data references and layout as separate contracts.",
      "confidence": "Source verified",
      "sources": [
        20
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "dashboards:specs"
      ]
    },
    {
      "key": "dashboards:specs",
      "view": "dashboards",
      "id": "specs",
      "title": "Dashboard specs",
      "owner": "Web marketplace clients + external APIs",
      "contract": "/marketplace/dashboard; specs / live panels / variable options",
      "state": "The dashboard surface has concrete API clients, not just a product vision.",
      "change": "Version specs and validate panel variables before changing the renderer.",
      "confidence": "Source verified",
      "sources": [
        20
      ],
      "related_views": [],
      "upstream": [
        "dashboards:builder"
      ],
      "downstream": [
        "dashboards:web"
      ]
    },
    {
      "key": "dashboards:web",
      "view": "dashboards",
      "id": "web",
      "title": "Dashboard surface",
      "owner": "Web customDashboard",
      "contract": "ECharts / markdown / grid editor",
      "state": "Web renders custom dashboards, edits layouts and applies cross-filters. Insights redirects here.",
      "change": "Check chart state, markdown rendering and variable interactions.",
      "confidence": "Source verified",
      "sources": [
        20
      ],
      "related_views": [],
      "upstream": [
        "dashboards:specs",
        "dashboards:layout"
      ],
      "downstream": [
        "dashboards:consumers"
      ]
    },
    {
      "key": "dashboards:sources",
      "view": "dashboards",
      "id": "sources",
      "title": "Source engines",
      "owner": "Gateway universal_dashboard_viewer",
      "contract": "SQL runner / Databricks configuration",
      "state": "Dashboard viewers have data-source-specific execution paths.",
      "change": "Keep source credentials, SQL safety and refresh permissions isolated.",
      "confidence": "Source-verified integration",
      "sources": [
        20
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "dashboards:viewer"
      ]
    },
    {
      "key": "dashboards:viewer",
      "view": "dashboards",
      "id": "viewer",
      "title": "Universal viewer",
      "owner": "Gateway universal_dashboard_viewer",
      "contract": "Charts / refresh / migration tools",
      "state": "A separate viewer path owns saved config, queries, charts and migrations.",
      "change": "Not all dashboards share the same rendering engine or data API.",
      "confidence": "Source verified",
      "sources": [
        20
      ],
      "related_views": [],
      "upstream": [
        "dashboards:sources"
      ],
      "downstream": []
    },
    {
      "key": "dashboards:tableau",
      "view": "dashboards",
      "id": "tableau",
      "title": "Tableau",
      "owner": "Gateway Tableau integration",
      "contract": "Tableau tool / connector path",
      "state": "Tableau is an additional integration, not the universal dashboard backend.",
      "change": "Validate its own authentication and capabilities.",
      "confidence": "Source-verified integration",
      "sources": [
        20
      ],
      "related_views": [],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "dashboards:layout",
      "view": "dashboards",
      "id": "layout",
      "title": "Layout state",
      "owner": "Web dashboard clients + external API",
      "contract": "Layouts / grid GET + PUT",
      "state": "Layout writes are distinct from spec and data-query writes.",
      "change": "Test reload, edits and compatibility with existing grids.",
      "confidence": "Source verified",
      "sources": [
        20
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "dashboards:web"
      ]
    },
    {
      "key": "dashboards:sharing",
      "view": "dashboards",
      "id": "sharing",
      "title": "Sharing",
      "owner": "Web marketplace sharing clients",
      "contract": "Dashboard sharing / revocation APIs",
      "state": "Shared dashboard access is independent of panel refresh and layout state.",
      "change": "Do not infer query permission solely from a shared UI link.",
      "confidence": "Source verified",
      "sources": [
        20,
        21
      ],
      "related_views": [
        "skills",
        "access"
      ],
      "upstream": [],
      "downstream": [
        "dashboards:consumers"
      ]
    },
    {
      "key": "dashboards:consumers",
      "view": "dashboards",
      "id": "consumers",
      "title": "Dashboard consumers",
      "owner": "Web marketplace / dashboard",
      "contract": "Dashboard view / variable selection",
      "state": "Consumers depend on specs, permissions, source availability and rendering behavior.",
      "change": "Change-impact reviews must cover all four dependencies.",
      "confidence": "Source verified",
      "sources": [
        20
      ],
      "related_views": [],
      "upstream": [
        "dashboards:sharing",
        "dashboards:web"
      ],
      "downstream": []
    },
    {
      "key": "access:directory",
      "view": "access",
      "id": "directory",
      "title": "People directory",
      "owner": "Web / Matrix user directory",
      "contract": "Matrix user_directory search",
      "state": "Directory identity answers who a person is; it is not a reporting graph.",
      "change": "Preserve Matrix identity mapping and directory visibility rules.",
      "confidence": "Source verified",
      "sources": [
        22
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "access:people"
      ]
    },
    {
      "key": "access:ums",
      "view": "access",
      "id": "ums",
      "title": "UMS hierarchy",
      "owner": "External UMS",
      "contract": "/user/direct-reports; CC UMS enrichment/search",
      "state": "UMS supplies hierarchy and identity enrichment to multiple consumers.",
      "change": "Live hierarchy changes can change retrieval authorization.",
      "confidence": "External / consumer-verified",
      "sources": [
        22
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "access:retrieval",
        "access:people"
      ]
    },
    {
      "key": "access:eligibility",
      "view": "access",
      "id": "eligibility",
      "title": "CC eligibility",
      "owner": "Orchestrator + Vault → CC scheduler",
      "contract": "Orchestrator assignment list + Vault eligibility",
      "state": "Current scheduler eligibility is not a UMS user-enumeration loop.",
      "change": "Do not implement changes from stale UMS enumeration comments.",
      "confidence": "External / consumer-verified",
      "sources": [
        22
      ],
      "related_views": [],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "access:people",
      "view": "access",
      "id": "people",
      "title": "CC People lens",
      "owner": "backend/command-center",
      "contract": "CC people outputs + UMS enrichment",
      "state": "The People lens is synthesized work context, not the directory or hierarchy itself.",
      "change": "Trace source context, identity joins and story synthesis separately.",
      "confidence": "Source verified",
      "sources": [
        7,
        22
      ],
      "related_views": [
        "data"
      ],
      "upstream": [
        "access:directory",
        "access:ums"
      ],
      "downstream": []
    },
    {
      "key": "access:retrieval",
      "view": "access",
      "id": "retrieval",
      "title": "Knowledge access",
      "owner": "backend/knowledge-base",
      "contract": "Authorized evidence retrieval; live UMS hierarchy",
      "state": "Owner and allowed reporting scopes govern evidence access.",
      "change": "Manager access to work evidence never grants access to a report’s private Ask persona.",
      "confidence": "Source verified",
      "sources": [
        22,
        24
      ],
      "related_views": [
        "knowledge"
      ],
      "upstream": [
        "access:ums"
      ],
      "downstream": []
    },
    {
      "key": "access:profile",
      "view": "access",
      "id": "profile",
      "title": "Admin entitlement",
      "owner": "Web AdminConsoleGuard",
      "contract": "profile.admin_console_access",
      "state": "The web guard controls entry to an external admin iframe.",
      "change": "UI hiding is not a substitute for external server authorization.",
      "confidence": "Source verified",
      "sources": [
        23
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "access:admin"
      ]
    },
    {
      "key": "access:admin",
      "view": "access",
      "id": "admin",
      "title": "Platform Admin",
      "owner": "External admin implementation + web host",
      "contract": "Runtime URL /aic/overview + user token",
      "state": "The external Admin Panel implementation is not in this workspace.",
      "change": "Verify token audience, iframe boundary and server permissions with its owner.",
      "confidence": "External / consumer-verified",
      "sources": [
        23
      ],
      "related_views": [],
      "upstream": [
        "access:profile"
      ],
      "downstream": []
    },
    {
      "key": "access:kbadmin",
      "view": "access",
      "id": "kbadmin",
      "title": "Knowledge Admin",
      "owner": "backend/knowledge-base admin",
      "contract": "Views / extraction / cleanup / retention controls",
      "state": "Knowledge Admin manages Knowledge jobs and lifecycle separately.",
      "change": "Retention and cleanup changes require data-lifecycle tests.",
      "confidence": "Source verified",
      "sources": [
        23,
        25
      ],
      "related_views": [
        "knowledge"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "access:ops",
      "view": "access",
      "id": "ops",
      "title": "Runtime controls",
      "owner": "Gateway / AIBot operations clients",
      "contract": "Operational reset/restart contracts",
      "state": "Runtime operational controls are not the Platform Admin console.",
      "change": "Validate destructive scope and tenant isolation.",
      "confidence": "Source verified",
      "sources": [
        23,
        27
      ],
      "related_views": [
        "operations"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "permission:exec",
      "view": "permission",
      "id": "exec",
      "title": "Shell command approval",
      "owner": "backend/gateway exec approvals",
      "contract": "requiresExecApproval → allow-once / allow-always / deny",
      "state": "A shell command missing the allowlist (or any command when ask=always) is blocked and forwarded to a human before it runs; elevated (“sudo”) mode is itself a gate — it needs tools.elevated.enabled + allowed + allowFrom.<provider>, else it is forced off.",
      "change": "Defaults security=deny, ask=on-miss, askFallback=deny — fails closed. ~2-min approval timeout; allow-always persists an allowlist entry. Skipped for allowlisted/safe builtins; only elevated-full bypasses. Forwarder is channel-agnostic (works off Matrix). A tool-result safety filter can still block secret-exfil / prompt-override in the output.",
      "confidence": "Source verified",
      "sources": [
        27
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "permission:a2a"
      ]
    },
    {
      "key": "permission:destructive",
      "view": "permission",
      "id": "destructive",
      "title": "Destructive confirmation",
      "owner": "backend/gateway ask_question tool",
      "contract": "ask_question card, destructive hint; blocks, never auto-selects",
      "state": "Delete / permanent-stop and any confirm-first action present a clickable card and wait; on the 3-minute timeout it returns no-answer and stops — it never auto-selects. Separately, in a group room a NON-owner using a Tier-2 tool triggers a real owner-approval card (5-min, per-room mutex) before it runs.",
      "change": "The ask_question tool is UNREGISTERED off Matrix (channel≠matrix or no room target ⇒ null), so on Slack/Telegram/Discord this and every confirm-first item degrade to prompt-only. Empty selection = no answer. The group owner-approval gate is inert in DMs, for the owner, and for Tier-1 read tools.",
      "confidence": "Source verified",
      "sources": [
        27
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "permission:roomacl"
      ]
    },
    {
      "key": "permission:install",
      "view": "permission",
      "id": "install",
      "title": "Install · config · workflow HITL",
      "owner": "backend/gateway + app-builder + workflow",
      "contract": "One-time click token · owner Apply on diff · durable approval/choice/prompt",
      "state": "Marketplace install needs the user’s actual click (one-time ~5-min token); tenant-config needs an owner Apply on a diff (Matrix+owner+sender-bound, 5-min, optimistic-concurrency guard); workflows can park on approval()/choice()/prompt()/send(buttons). Publishing/sharing an app has its own server gates: a plugin needs an APPROVED version first, and only the app owner may share/update it.",
      "change": "All fail closed except choice(), which AUTO-SELECTS its first option on timeout. approval() = 10-min deny, supports a delegated assignee, and auto-denies off-pod (no HITL transport). Install rides ask_question, so it too is Matrix-only. BSG also 403s app-owner mismatches and the reserved system-skill-* namespace.",
      "confidence": "Source verified",
      "sources": [
        21,
        16
      ],
      "related_views": [
        "skills",
        "workflows"
      ],
      "upstream": [],
      "downstream": [
        "permission:configwrite"
      ]
    },
    {
      "key": "permission:a2a",
      "view": "permission",
      "id": "a2a",
      "title": "Agent-to-agent send",
      "owner": "backend/gateway sessions-send tool",
      "contract": "tools.agentToAgent.enabled + allow allowlist → else forbidden",
      "state": "Sending to another agent (or spawning A2A work) is refused unless agent-to-agent is enabled and the target is on the allowlist — a config gate, not a human ask. A cross-tenant target is always forbidden, and a sandboxed sub-agent can only reach sessions it spawned.",
      "change": "Fail-closed: disabled by default ⇒ forbidden. No human-approval step before spawning a sub-agent. Sub-agents also run a fixed tool-deny list (no gateway, sessions_send, install, memory, cron) and cannot spawn deeper.",
      "confidence": "Source verified",
      "sources": [
        9,
        27
      ],
      "related_views": [],
      "upstream": [
        "permission:exec"
      ],
      "downstream": [
        "permission:send"
      ]
    },
    {
      "key": "permission:roomacl",
      "view": "permission",
      "id": "roomacl",
      "title": "Invite / kick a person",
      "owner": "BSG → UMS → Synapse",
      "contract": "invite-precheck 403s · kick uses caller power level",
      "state": "Adding or removing someone runs as the acting human: BSG’s invite-precheck refuses (owner not in room, invitee not a person, not a group, owner cannot invite) and Synapse enforces the caller’s own power level on kick. Deleting a room needs the caller to be a live room admin (403 not_room_admin) — a distinct gate from kick.",
      "change": "Server-side refusal, not an ask. The bot can never exceed what its owner may do in the room; where PL is unreadable it defers to Synapse. Enterprise invite fan-out is also throttled by a per-server token bucket.",
      "confidence": "Source verified",
      "sources": [
        4,
        17
      ],
      "related_views": [
        "collaboration"
      ],
      "upstream": [
        "permission:destructive"
      ],
      "downstream": [
        "permission:spendext"
      ]
    },
    {
      "key": "permission:configwrite",
      "view": "permission",
      "id": "configwrite",
      "title": "Blocked-outright actions",
      "owner": "backend/gateway tool policy + exec + UMS auth",
      "contract": "Exec writing aibot.json throws · SAAS_MANDATORY_DENY (gateway, nodes) · banned/deleted user 403",
      "state": "Some actions are refused with no ask at all: a shell command that writes aibot.json is hard-blocked (use the config method), a mandatory deny (gateway, nodes) can never be re-enabled by a tenant, and every call made as a banned or marked-for-deletion user is 403/401’d server-side.",
      "change": "Tenants can only narrow tool policy, never widen; the mandatory deny is unioned in last. Protected/infrastructure config fields cannot be changed. Email send and other high-rate paths are also 429-throttled per bot. Using a stored secret is policy-governed, not a per-use ask.",
      "confidence": "Source verified",
      "sources": [
        27
      ],
      "related_views": [],
      "upstream": [
        "permission:install"
      ],
      "downstream": [
        "permission:caveat"
      ]
    },
    {
      "key": "permission:send",
      "view": "permission",
      "id": "send",
      "title": "Send to anyone but you",
      "owner": "backend/gateway messaging tools",
      "contract": "System-prompt confirm-first; recipient identity not code-gated",
      "state": "The prompt tells the model to confirm (show recipient + content, wait for a matching yes) before messaging, emailing, broadcasting or a calendar invite to anyone but the current user; WHO you message is not code-gated. But WHERE is: a code policy blocks sends outside the bound room/provider unless cross-context is explicitly allowed, and in a channel chat only the owner may act in other rooms.",
      "change": "The recipient confirm is model + ask_question no-auto-select only, so it is unenforced off Matrix; the cross-context / cross-room block is real code and always applies. Replying to the current user is never gated; file sharing is a separate multi-option confirm flow with a permanence warning.",
      "confidence": "Source verified",
      "sources": [
        9,
        27
      ],
      "related_views": [],
      "upstream": [
        "permission:a2a"
      ],
      "downstream": []
    },
    {
      "key": "permission:spendext",
      "view": "permission",
      "id": "spendext",
      "title": "Spend · external writes",
      "owner": "backend/gateway tools",
      "contract": "Confirm-first; most spend prompt-only, but compute has a hard credit gate",
      "state": "Spending money, purchasing, publishing to a registry, or external writes (tickets, PRs, third-party APIs), and destructive ops like delete/force-push/DB changes are confirm-first instructions. One kind of spend IS code-enforced: provisioning a MicroVM runs a fail-closed credit check and refuses (402 credit-exhausted / 503) when the tenant is out of credit.",
      "change": "Purchase/payment writes have no dedicated code gate — prompt-only, hard-gated only if routed through the shell (exec), plus the uncertain/low-confidence rule tells the model to ask first. The MicroVM credit gate is real (flag-gated, re-checked at resolution to catch races).",
      "confidence": "Source verified",
      "sources": [
        26
      ],
      "related_views": [],
      "upstream": [
        "permission:roomacl"
      ],
      "downstream": []
    },
    {
      "key": "permission:caveat",
      "view": "permission",
      "id": "caveat",
      "title": "Where gates do not fire",
      "owner": "backend/gateway runtime",
      "contract": "Non-Matrix degrade · cron/goals bypass · non-asks",
      "state": "Off Matrix the ask tools are absent so confirm-first is prompt-only; autonomous turns (cron, goals, heartbeat) do not call ask_question and are gated only by session send-policy. Some things people expect to ask do not: replying to you, request_connection (your ask is the consent), device pairing (a human approves an inbound node). Secrets are their own model: in a group chat only pre-approved vault keys are usable, and any other key auto-requests approval.",
      "change": "Send-policy defaults to allow unless a deny rule is set. request_connection blocks ~5 min for the OAuth round-trip; pairing is owner-initiated, not a bot self-prompt. Node/device pairing requests expire after 5 min.",
      "confidence": "Source verified",
      "sources": [
        26,
        27
      ],
      "related_views": [
        "operations"
      ],
      "upstream": [
        "permission:configwrite"
      ],
      "downstream": []
    },
    {
      "key": "data:l0",
      "view": "data",
      "id": "l0",
      "title": "Source records",
      "owner": "Brain Data",
      "contract": "Immutable L0 source records → changed-content selection",
      "state": "Raw connector material retained as source objects, not user-facing answers.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "External / consumer-verified",
      "sources": [
        2,
        6
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "data:extract"
      ]
    },
    {
      "key": "data:extract",
      "view": "data",
      "id": "extract",
      "title": "L1 extraction",
      "owner": "Knowledge / workspace/l1-processing.ts",
      "contract": "Effective prompt/config + source hashes → durable L1 batches and validated citations",
      "state": "Conversation-aware L1 batches use capability-only Pi in the owner workspace, cumulative retries and exact citations. No generic shell/filesystem tools.",
      "change": "Prompt edits alone do not trigger historical re-extraction. Saved config can override the default prompt.",
      "confidence": "Source verified",
      "sources": [
        5,
        25
      ],
      "related_views": [
        "knowledge",
        "change"
      ],
      "upstream": [
        "data:l0"
      ],
      "downstream": [
        "data:l1"
      ]
    },
    {
      "key": "data:l1",
      "view": "data",
      "id": "l1",
      "title": "Published L1",
      "owner": "Knowledge / workspace revisions",
      "contract": "Validated evidence and search artifacts → CURRENT revision publication",
      "state": "Validated content and indexes become visible through CURRENT publication.",
      "change": "L1 owner scope and source attribution are enforced during retrieval.",
      "confidence": "Source verified",
      "sources": [
        2,
        6
      ],
      "related_views": [],
      "upstream": [
        "data:extract"
      ],
      "downstream": [
        "data:views",
        "data:ask"
      ]
    },
    {
      "key": "data:views",
      "view": "data",
      "id": "views",
      "title": "Views",
      "owner": "Knowledge / view-generation workflow",
      "contract": "Scheduled/on-demand generation over authorized evidence",
      "state": "Separate scheduled/on-demand generation over the owner and allowed report memory.",
      "change": "Publishing L1 does not mean every view is immediately regenerated.",
      "confidence": "Source verified",
      "sources": [
        2,
        6
      ],
      "related_views": [],
      "upstream": [
        "data:l1"
      ],
      "downstream": [
        "data:ask"
      ]
    },
    {
      "key": "data:ask",
      "view": "data",
      "id": "ask",
      "title": "Ask",
      "owner": "Knowledge Ask + authorized memory consumers",
      "contract": "Authorized evidence and generated views → cited answers; self-only private memory",
      "state": "Retrieves allowed evidence and synthesizes answers. L1 can be retrieved without a generated view.",
      "change": "Private Ask memory/persona is self-only; manager retrieval must not expose report persona.",
      "confidence": "Source verified",
      "sources": [
        11,
        24
      ],
      "related_views": [
        "knowledge"
      ],
      "upstream": [
        "data:views",
        "data:l1"
      ],
      "downstream": []
    },
    {
      "key": "data:collect",
      "view": "data",
      "id": "collect",
      "title": "Collect",
      "owner": "CC collectors",
      "contract": "Source-specific CC collectors; optional Brain Data Slack L0",
      "state": "Collects Slack, Gmail, calendar, Matrix and meeting data; selected Slack traffic can use Brain Data L0.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "Local / external inputs",
      "sources": [
        4
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "data:signals"
      ]
    },
    {
      "key": "data:signals",
      "view": "data",
      "id": "signals",
      "title": "Signals",
      "owner": "CC stage 1",
      "contract": "Stage-1 source extraction and open-work resolution checks",
      "state": "Source-specific model calls extract signals and check whether open work was resolved.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "Source verified",
      "sources": [
        7
      ],
      "related_views": [],
      "upstream": [
        "data:collect"
      ],
      "downstream": [
        "data:stories"
      ]
    },
    {
      "key": "data:stories",
      "view": "data",
      "id": "stories",
      "title": "Stories",
      "owner": "CC stage 2",
      "contract": "Stage-2 synthesis using signals, active work and stored CC preferences",
      "state": "Synthesizes work stories and people context, incorporating existing active work and CC preferences.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "Source verified",
      "sources": [
        7,
        10
      ],
      "related_views": [],
      "upstream": [
        "data:signals",
        "data:feedback"
      ],
      "downstream": [
        "data:priorities",
        "data:briefs"
      ]
    },
    {
      "key": "data:priorities",
      "view": "data",
      "id": "priorities",
      "title": "Priorities",
      "owner": "CC priority pipeline",
      "contract": "stage2-priorities.md executed inside run_stage3",
      "state": "Uses stories plus previous groups and feedback to build and assign priority groups.",
      "change": "The stage2-priorities prompt is executed inside run_stage3.",
      "confidence": "Source verified",
      "sources": [
        7,
        10
      ],
      "related_views": [],
      "upstream": [
        "data:stories",
        "data:feedback"
      ],
      "downstream": [
        "data:dashboard"
      ]
    },
    {
      "key": "data:briefs",
      "view": "data",
      "id": "briefs",
      "title": "Briefings",
      "owner": "CC stage 3 / calendar stage 4",
      "contract": "Parallel stage-3 narrative/agent outputs and calendar preparation",
      "state": "Separate narrative/agent outputs and calendar preparation use story and calendar context.",
      "change": "The map groups two output stages. Same-run narrative does not consume the new priority output; draft generation is disabled in the inspected caller.",
      "confidence": "Source verified",
      "sources": [
        7
      ],
      "related_views": [],
      "upstream": [
        "data:stories"
      ],
      "downstream": [
        "data:dashboard"
      ]
    },
    {
      "key": "data:dashboard",
      "view": "data",
      "id": "dashboard",
      "title": "Deliver",
      "owner": "CC → BSG → AIBot → clients",
      "contract": "Persisted CC results → BSG → AIBot → client product surfaces",
      "state": "Persisted output is returned to product surfaces. Partial runs can retain usable results.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "Source verified",
      "sources": [
        4,
        7
      ],
      "related_views": [],
      "upstream": [
        "data:priorities",
        "data:briefs"
      ],
      "downstream": [
        "data:feedback"
      ]
    },
    {
      "key": "data:feedback",
      "view": "data",
      "id": "feedback",
      "title": "Feedback & preferences",
      "owner": "CC actions + dream pipeline",
      "contract": "Rating reason → recent context / consolidation → future CC preferences",
      "state": "Recent feedback influences future priority groups; consolidation writes CC preferences that influence future stories.",
      "change": "Not model-weight training. Rating, resolving and unrating are distinct operations.",
      "confidence": "Source verified",
      "sources": [
        8,
        9,
        10
      ],
      "related_views": [
        "change"
      ],
      "upstream": [
        "data:dashboard"
      ],
      "downstream": [
        "data:stories",
        "data:priorities"
      ]
    },
    {
      "key": "knowledge:l0",
      "view": "knowledge",
      "id": "l0",
      "title": "L0 source inputs",
      "owner": "Brain Data → Knowledge",
      "contract": "Immutable source snapshots / ingestion handoff",
      "state": "Unchanged source-content hashes are no-ops even after a prompt edit.",
      "change": "Historical prompt changes require explicit reprocessing; do not promise automatic backfill.",
      "confidence": "External / consumer-verified",
      "sources": [
        2,
        5,
        25
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "knowledge:batches"
      ]
    },
    {
      "key": "knowledge:batches",
      "view": "knowledge",
      "id": "batches",
      "title": "Durable L1 batches",
      "owner": "Knowledge bounded ingestion workers",
      "contract": "Capability-only Pi; durable cumulative retries",
      "state": "Extraction uses owner workspace capabilities, not generic shell/filesystem tools. GitHub commits batch by repo/UTC day with exact citations.",
      "change": "Review effective prompts, batch identity, retries and source attribution together.",
      "confidence": "Source verified",
      "sources": [
        25
      ],
      "related_views": [],
      "upstream": [
        "knowledge:l0"
      ],
      "downstream": [
        "knowledge:published"
      ]
    },
    {
      "key": "knowledge:published",
      "view": "knowledge",
      "id": "published",
      "title": "Published evidence",
      "owner": "Knowledge shared workspace runtime",
      "contract": "CURRENT revisions; reusable search/embedding artifacts",
      "state": "Published revisions expose attributed evidence and reusable search artifacts.",
      "change": "Embedding changes can require compatible index rebuilds; publication ≠ view regeneration.",
      "confidence": "Source verified",
      "sources": [
        2,
        6,
        25
      ],
      "related_views": [],
      "upstream": [
        "knowledge:batches"
      ],
      "downstream": [
        "knowledge:ask"
      ]
    },
    {
      "key": "knowledge:views",
      "view": "knowledge",
      "id": "views",
      "title": "Generated views",
      "owner": "Knowledge view workflows",
      "contract": "Authorized owner/report evidence → generated document",
      "state": "Views are derived documents with a separate generation lifecycle.",
      "change": "Reprocess L0, regenerate a view and retrieve an answer are different actions.",
      "confidence": "Source verified",
      "sources": [
        2,
        6
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "knowledge:ask"
      ]
    },
    {
      "key": "knowledge:ask",
      "view": "knowledge",
      "id": "ask",
      "title": "Ask & retrieval",
      "owner": "Knowledge Ask + live UMS authorization",
      "contract": "Ask streaming; evidence retrieval + citations",
      "state": "Ask retrieves authorized work evidence. Persona is guidance, never performance evidence.",
      "change": "Check citations, owner access and manager/report privacy independently.",
      "confidence": "Source verified",
      "sources": [
        11,
        22,
        24
      ],
      "related_views": [],
      "upstream": [
        "knowledge:published",
        "knowledge:views",
        "knowledge:persona"
      ],
      "downstream": [
        "knowledge:dbos"
      ]
    },
    {
      "key": "knowledge:persona",
      "view": "knowledge",
      "id": "persona",
      "title": "Private Ask memory",
      "owner": "Knowledge assistant memory",
      "contract": "assistant-memory/CURRENT; journals / persona",
      "state": "Memory and persona are self-only. A manager cannot retrieve a report’s persona.",
      "change": "Explicit mutation waits; automatic turn capture is asynchronous.",
      "confidence": "Source verified",
      "sources": [
        24
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "knowledge:ask"
      ]
    },
    {
      "key": "knowledge:sessions",
      "view": "knowledge",
      "id": "sessions",
      "title": "Ask session bodies",
      "owner": "Knowledge Ask session store",
      "contract": "_index/ask-sessions/...; historical migration fallback",
      "state": "Bodies live in workspace storage; Postgres stores metadata/leases.",
      "change": "Keep session migration fallback and metadata/body consistency.",
      "confidence": "Source verified",
      "sources": [
        24
      ],
      "related_views": [
        "collaboration"
      ],
      "upstream": [
        "knowledge:dbos"
      ],
      "downstream": []
    },
    {
      "key": "knowledge:dbos",
      "view": "knowledge",
      "id": "dbos",
      "title": "DBOS + control DB",
      "owner": "Knowledge Postgres + DBOS workers",
      "contract": "Bounded worker ingestion + separate scheduler queue",
      "state": "Durable execution and publication commits use Knowledge control-plane state.",
      "change": "Do not transfer DBOS retry assumptions to CC single-attempt pipeline jobs.",
      "confidence": "Source verified",
      "sources": [
        14,
        24,
        25
      ],
      "related_views": [
        "infra",
        "data"
      ],
      "upstream": [
        "knowledge:ask"
      ],
      "downstream": [
        "knowledge:sessions"
      ]
    },
    {
      "key": "knowledge:cleanup",
      "view": "knowledge",
      "id": "cleanup",
      "title": "Cleanup & retention",
      "owner": "Knowledge lifecycle workers/admin",
      "contract": "Durable derived cleanup; database retention",
      "state": "Workspace-derived cleanup and database retention are distinct lifecycle work.",
      "change": "Test retries, references, leases and retained records before deleting data.",
      "confidence": "Source verified",
      "sources": [
        23,
        25
      ],
      "related_views": [
        "access"
      ],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "change:entry",
      "view": "change",
      "id": "entry",
      "title": "1 · Define the change",
      "owner": "Feature owner / reviewer",
      "contract": "Entry point → transport → service owner",
      "state": "Start with the affected surface, selected engine/flag and technical authority.",
      "change": "Check upstream requests and downstream consumers; arrow direction is not a complete impact analysis.",
      "confidence": "Review method",
      "sources": [
        3,
        16,
        30
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "change:contracts"
      ]
    },
    {
      "key": "change:contracts",
      "view": "change",
      "id": "contracts",
      "title": "2 · Follow the contract",
      "owner": "Cross-service owners",
      "contract": "Request / event / persisted representation",
      "state": "Inspect each boundary for validation, authorization, defaults and saved state.",
      "change": "An external service with consumer evidence still needs owner-side verification.",
      "confidence": "Review method",
      "sources": [
        4,
        9,
        15,
        23
      ],
      "related_views": [],
      "upstream": [
        "change:entry"
      ],
      "downstream": [
        "change:verify"
      ]
    },
    {
      "key": "change:verify",
      "view": "change",
      "id": "verify",
      "title": "3 · Verify the rollout",
      "owner": "Implementers + release owners",
      "contract": "Tests / flags / backfill / observability",
      "state": "Plan compatibility tests and any data replay or cache invalidation explicitly.",
      "change": "No diagram certifies deployed versions or organizational ownership.",
      "confidence": "Review method",
      "sources": [
        5,
        11,
        16,
        25
      ],
      "related_views": [],
      "upstream": [
        "change:contracts"
      ],
      "downstream": []
    },
    {
      "key": "change:prompt",
      "view": "change",
      "id": "prompt",
      "title": "Effective L1 prompt",
      "owner": "Knowledge prompt/config owner",
      "contract": "Default extraction prompt + saved override",
      "state": "Saved configuration may override the default; changing the file alone may not change the effective prompt.",
      "change": "Verify selected prompt/model and extraction schema.",
      "confidence": "Source verified",
      "sources": [
        5,
        12
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "change:backfill"
      ]
    },
    {
      "key": "change:backfill",
      "view": "change",
      "id": "backfill",
      "title": "Explicit reprocessing",
      "owner": "Knowledge ingestion owner",
      "contract": "L0 hashes → durable L1 ingestion",
      "state": "Unchanged content is skipped; historical re-extraction needs an explicit plan.",
      "change": "Test retries, exact citations, publication and evaluation before broad replay.",
      "confidence": "Source verified",
      "sources": [
        5,
        6,
        25
      ],
      "related_views": [],
      "upstream": [
        "change:prompt"
      ],
      "downstream": [
        "change:consumers"
      ]
    },
    {
      "key": "change:consumers",
      "view": "change",
      "id": "consumers",
      "title": "Regenerate & evaluate",
      "owner": "Knowledge serving owner",
      "contract": "Published L1 → views and evidence retrieval",
      "state": "Downstream views may need regeneration; Ask can retrieve evidence directly.",
      "change": "Do not include CC as a proven L1 downstream consumer.",
      "confidence": "Source verified",
      "sources": [
        6,
        11,
        25
      ],
      "related_views": [
        "knowledge",
        "data"
      ],
      "upstream": [
        "change:backfill"
      ],
      "downstream": []
    },
    {
      "key": "change:tag_ui",
      "view": "change",
      "id": "tag_ui",
      "title": "Client reason picker",
      "owner": "Web / mobile CC clients",
      "contract": "First selected tag → underscore-separated reason",
      "state": "Only the first negative tag is sent today, even if the UI selects more.",
      "change": "A multi-reason feature is a larger contract change than one new reason.",
      "confidence": "Source verified",
      "sources": [
        8
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "change:tag_api"
      ]
    },
    {
      "key": "change:tag_api",
      "view": "change",
      "id": "tag_api",
      "title": "Closed allowlists",
      "owner": "Gateway CC actions + CC API",
      "contract": "Accepted reason enum / allowlists; TEXT column",
      "state": "Both server layers validate reason values. UI-only additions are rejected.",
      "change": "One new reason does not inherently require a DB migration; update both validators.",
      "confidence": "Source verified",
      "sources": [
        9
      ],
      "related_views": [],
      "upstream": [
        "change:tag_ui"
      ],
      "downstream": [
        "change:tag_loop"
      ]
    },
    {
      "key": "change:tag_loop",
      "view": "change",
      "id": "tag_loop",
      "title": "Future preferences",
      "owner": "CC feedback + dream pipeline",
      "contract": "Feedback → recent priority context / consolidation",
      "state": "Recent feedback affects priority grouping; consolidated CC preferences influence future stories.",
      "change": "This is neither model-weight training nor Knowledge private memory.",
      "confidence": "Source verified",
      "sources": [
        10
      ],
      "related_views": [
        "data"
      ],
      "upstream": [
        "change:tag_api"
      ],
      "downstream": []
    },
    {
      "key": "ai:agent",
      "view": "ai",
      "id": "agent",
      "title": "Assistant",
      "owner": "AIBot runtime",
      "contract": "Conversation + routing + tool policy + skills → dynamic inference loop",
      "state": "Combines conversation context, routing, tool policies and skills; can choose model paths dynamically.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "Source verified",
      "sources": [
        13
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "ai:proxy"
      ]
    },
    {
      "key": "ai:kbai",
      "view": "ai",
      "id": "kbai",
      "title": "Knowledge",
      "owner": "Knowledge AI feature configuration",
      "contract": "Per-feature model/effort config for extraction, compose, Ask, retrieval, embeddings",
      "state": "Separate model/effort settings for L1 extraction, compose, Ask, retrieval and embeddings.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "Source verified",
      "sources": [
        12
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "ai:proxy"
      ]
    },
    {
      "key": "ai:ccai",
      "view": "ai",
      "id": "ccai",
      "title": "Command Center",
      "owner": "CC config + stage assembly",
      "contract": "Per-substage model/effort and per-user LiteLLM credentials",
      "state": "Separate prompts and per-substage model/effort settings; per-user LiteLLM credentials.",
      "change": "aibot/cc-usage is a configured alias, not a verified concrete model.",
      "confidence": "Source verified",
      "sources": [
        7,
        12
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "ai:proxy"
      ]
    },
    {
      "key": "ai:promptpolicy",
      "view": "ai",
      "id": "promptpolicy",
      "title": "Feature instructions",
      "owner": "Each service / feature",
      "contract": "Feature instructions + output schemas; conceptual control, not a service",
      "state": "There is no single universal platform prompt. Prompt contracts and output validation live with their consumers.",
      "change": "This is a conceptual control, not an additional deployed service.",
      "confidence": "Conceptual grouping",
      "sources": [
        5,
        7,
        12
      ],
      "related_views": [],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "ai:proxy",
      "view": "ai",
      "id": "proxy",
      "title": "LiteLLM gateway",
      "owner": "External model gateway",
      "contract": "Authorized model request with effective alias / endpoint / credentials",
      "state": "Routes requests using the effective alias, endpoint and credentials supplied by the consumer.",
      "change": "A shared gateway does not mean a shared default model, shared prompt, or shared tenant context.",
      "confidence": "External / consumer-verified",
      "sources": [
        12,
        13
      ],
      "related_views": [],
      "upstream": [
        "ai:agent",
        "ai:kbai",
        "ai:ccai"
      ],
      "downstream": [
        "ai:textmodels",
        "ai:embeddings",
        "ai:media"
      ]
    },
    {
      "key": "ai:access",
      "view": "ai",
      "id": "access",
      "title": "Access & isolation",
      "owner": "Runtime + service identity boundaries",
      "contract": "Tenant/user identity + task policy; cross-cutting control, not a universal service",
      "state": "Model access must retain the correct tenant/user credentials and task permissions.",
      "change": "This is a cross-cutting control, not one universal access-control service.",
      "confidence": "Conceptual grouping",
      "sources": [
        12,
        13
      ],
      "related_views": [],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "ai:textmodels",
      "view": "ai",
      "id": "textmodels",
      "title": "Text & reasoning",
      "owner": "Configured model/provider routes",
      "contract": "Environment-selected text/reasoning provider routes",
      "state": "Model families used for inference. Exact effective models require environment verification.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "External / routing unverified",
      "sources": [
        12,
        13
      ],
      "related_views": [],
      "upstream": [
        "ai:proxy"
      ],
      "downstream": []
    },
    {
      "key": "ai:embeddings",
      "view": "ai",
      "id": "embeddings",
      "title": "Embedding models",
      "owner": "Knowledge / runtime search consumers",
      "contract": "Content/query embeddings with model-compatible index dimensions",
      "state": "Represent saved content and queries for search. They are distinct from chat models.",
      "change": "Changing embedding model/dimensions may require rebuilding compatible indexes.",
      "confidence": "External / routing unverified",
      "sources": [
        12,
        13
      ],
      "related_views": [],
      "upstream": [
        "ai:proxy"
      ],
      "downstream": []
    },
    {
      "key": "ai:media",
      "view": "ai",
      "id": "media",
      "title": "Media models",
      "owner": "Tool-specific runtime configuration",
      "contract": "Tool-specific image/audio/provider paths; not one universal model gateway path",
      "state": "Documented runtime tools use their own provider/model paths. This is not a claim that every media call uses one route.",
      "change": "Verify tenant authorization, request/output compatibility and the owning service before changing this boundary.",
      "confidence": "External / documented",
      "sources": [
        13
      ],
      "related_views": [],
      "upstream": [
        "ai:proxy"
      ],
      "downstream": []
    },
    {
      "key": "infra:devices",
      "view": "infra",
      "id": "devices",
      "title": "User devices",
      "owner": "Frontend delivery surfaces",
      "contract": "Browser/native clients → service entry points",
      "state": "Clients access hosted web/product services and assistant channels.",
      "change": "Verify deployed configuration, credentials, lifecycle and actual placement with the infrastructure owner; source manifests are not live inventory.",
      "confidence": "Source verified",
      "sources": [
        3
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "infra:edge"
      ]
    },
    {
      "key": "infra:edge",
      "view": "infra",
      "id": "edge",
      "title": "Access / routing",
      "owner": "Ingress / service gateways — deployment dependent",
      "contract": "Logical ingress boundary; DNS, load balancers and live routes not audited",
      "state": "Logical access boundary. Exact production ingress, load balancers, DNS and route placement were not audited.",
      "change": "Verify deployed configuration, credentials, lifecycle and actual placement with the infrastructure owner; source manifests are not live inventory.",
      "confidence": "External / topology unverified",
      "sources": [
        3,
        4
      ],
      "related_views": [],
      "upstream": [
        "infra:devices"
      ],
      "downstream": [
        "infra:webhost",
        "infra:bothost"
      ]
    },
    {
      "key": "infra:webhost",
      "view": "infra",
      "id": "webhost",
      "title": "Web workload",
      "owner": "frontend/web / helm",
      "contract": "Repository Helm service/workload templates for Next.js",
      "state": "Helm service/workload templates exist for hosting the web application.",
      "change": "This is not proof of a specific live replica count or ingress topology.",
      "confidence": "Source verified",
      "sources": [
        14
      ],
      "related_views": [],
      "upstream": [
        "infra:edge"
      ],
      "downstream": []
    },
    {
      "key": "infra:bothost",
      "view": "infra",
      "id": "bothost",
      "title": "AIBot runtime",
      "owner": "AIBot + external Orchestrator",
      "contract": "Documented gateway runtime + external Orchestrator placement",
      "state": "Runtime placement and tenant contexts are coordinated with external orchestration.",
      "change": "Runtime workload shown from documented architecture; no live pod placement was checked.",
      "confidence": "Documented runtime",
      "sources": [
        3,
        13
      ],
      "related_views": [],
      "upstream": [
        "infra:edge"
      ],
      "downstream": [
        "infra:services",
        "infra:aiexternal",
        "infra:kbapi"
      ]
    },
    {
      "key": "infra:kbapi",
      "view": "infra",
      "id": "kbapi",
      "title": "Knowledge API",
      "owner": "Knowledge API workload",
      "contract": "Authorized workspace content APIs and Knowledge control-plane access",
      "state": "Serves workspace content and authorized APIs. Separate DBOS-worker deployment templates are present.",
      "change": "Verify deployed configuration, credentials, lifecycle and actual placement with the infrastructure owner; source manifests are not live inventory.",
      "confidence": "Source verified",
      "sources": [
        14,
        2
      ],
      "related_views": [],
      "upstream": [
        "infra:bothost"
      ],
      "downstream": [
        "infra:workspace",
        "infra:kbdb"
      ]
    },
    {
      "key": "infra:kbworker",
      "view": "infra",
      "id": "kbworker",
      "title": "DBOS workers",
      "owner": "Knowledge DBOS worker deployment",
      "contract": "Configurable DBOS worker deployment; durable workspace jobs",
      "state": "Runs checkpointed ingestion/view workflows and reads/writes shared workspace revisions.",
      "change": "Worker deployment is independently configurable; current live replica layout is unverified.",
      "confidence": "Source verified",
      "sources": [
        6,
        14
      ],
      "related_views": [],
      "upstream": [
        "infra:brainhost"
      ],
      "downstream": [
        "infra:workspace",
        "infra:kbdb"
      ]
    },
    {
      "key": "infra:cchost",
      "view": "infra",
      "id": "cchost",
      "title": "CC workload",
      "owner": "Command Center process",
      "contract": "FastAPI + scheduler + bounded workers in one process; Postgres job queue",
      "state": "HTTP API, scheduler and bounded worker loops run in the same process; jobs are persisted in Postgres.",
      "change": "A failed production pipeline job is not automatically requeued; later triggers create a new run.",
      "confidence": "Source verified",
      "sources": [
        4,
        14
      ],
      "related_views": [],
      "upstream": [
        "infra:services"
      ],
      "downstream": [
        "infra:ccdb"
      ]
    },
    {
      "key": "infra:services",
      "view": "infra",
      "id": "services",
      "title": "Core services",
      "owner": "External service repositories",
      "contract": "BSG service identity/routing; UMS hierarchy; Vault credentials",
      "state": "Service identity, organization hierarchy, credentials and Orchestrator dependencies support the workloads.",
      "change": "Not placed inside a specific network/cluster boundary because their deployment was not audited.",
      "confidence": "External / placement unverified",
      "sources": [
        4,
        13
      ],
      "related_views": [],
      "upstream": [
        "infra:bothost"
      ],
      "downstream": [
        "infra:cchost"
      ]
    },
    {
      "key": "infra:aiexternal",
      "view": "infra",
      "id": "aiexternal",
      "title": "External execution",
      "owner": "External model and execution services",
      "contract": "LiteLLM / AgentCore / shared runners / MicroVM; app tenant EFS",
      "state": "Separate LiteLLM model access, AgentCore authoring, shared-runner app hosting and MicroVM tool execution. App source/deployments use tenant EFS.",
      "change": "Verify deployed configuration, credentials, lifecycle and actual placement with the infrastructure owner; source manifests are not live inventory.",
      "confidence": "External / placement unverified",
      "sources": [
        13,
        15
      ],
      "related_views": [
        "apps",
        "ai"
      ],
      "upstream": [
        "infra:bothost"
      ],
      "downstream": []
    },
    {
      "key": "infra:brainhost",
      "view": "infra",
      "id": "brainhost",
      "title": "Brain Data",
      "owner": "External Brain Data deployment",
      "contract": "Source snapshots → shared workspace; ingestion handoff → Knowledge",
      "state": "Produces source snapshots in the shared workspace and hands off ingestion to Knowledge.",
      "change": "Verify deployed configuration, credentials, lifecycle and actual placement with the infrastructure owner; source manifests are not live inventory.",
      "confidence": "External / placement unverified",
      "sources": [
        2,
        6
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "infra:kbworker",
        "infra:workspace"
      ]
    },
    {
      "key": "infra:workspace",
      "view": "infra",
      "id": "workspace",
      "title": "Shared workspace",
      "owner": "Brain Data sources + Knowledge memory/views",
      "contract": "Owner folders, published CURRENT revisions, evidence/views/Ask bodies",
      "state": "Canonical workspace content includes evidence, views, private assistant memory and Ask session bodies; search artifacts support serving.",
      "change": "Volume technology, backups and physical storage topology are not asserted by this diagram.",
      "confidence": "Source verified",
      "sources": [
        2,
        24,
        25
      ],
      "related_views": [],
      "upstream": [
        "infra:kbapi",
        "infra:kbworker",
        "infra:brainhost"
      ],
      "downstream": []
    },
    {
      "key": "infra:kbdb",
      "view": "infra",
      "id": "kbdb",
      "title": "Knowledge control DB",
      "owner": "Knowledge control plane",
      "contract": "Postgres metadata/leases and DBOS workflow state; not canonical content bodies",
      "state": "Knowledge control/run metadata, Ask metadata/leases and DBOS state; canonical Ask bodies stay in the workspace.",
      "change": "Shown as a logical database boundary. No physical server separation is implied.",
      "confidence": "Source verified",
      "sources": [
        14,
        24,
        25
      ],
      "related_views": [],
      "upstream": [
        "infra:kbapi",
        "infra:kbworker"
      ],
      "downstream": []
    },
    {
      "key": "infra:ccdb",
      "view": "infra",
      "id": "ccdb",
      "title": "Command Center DB",
      "owner": "Command Center",
      "contract": "Postgres source projections, durable queue, results and feedback",
      "state": "CC source projections, run outputs, durable job queue and feedback state.",
      "change": "Shown separately to communicate ownership, not verified hosting separation.",
      "confidence": "Source verified",
      "sources": [
        4,
        14
      ],
      "related_views": [],
      "upstream": [
        "infra:cchost"
      ],
      "downstream": []
    },
    {
      "key": "operations:account",
      "view": "operations",
      "id": "account",
      "title": "Account lifecycle",
      "owner": "Web/mobile clients + external account APIs",
      "contract": "Account / session / onboarding / deletion clients",
      "state": "Account flows establish user context and lifecycle boundaries.",
      "change": "Deletion requires owner-by-owner retention review; no global deletion guarantee is inferred.",
      "confidence": "Source verified",
      "sources": [
        26
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "operations:billing"
      ]
    },
    {
      "key": "operations:billing",
      "view": "operations",
      "id": "billing",
      "title": "Billing & usage",
      "owner": "Clients + external billing services",
      "contract": "Subscription / payment / topup API clients",
      "state": "Commercial state and usage visibility have distinct service contracts.",
      "change": "Verify entitlements and payment-side idempotency with the external owner.",
      "confidence": "External / consumer-verified",
      "sources": [
        26
      ],
      "related_views": [],
      "upstream": [
        "operations:account"
      ],
      "downstream": []
    },
    {
      "key": "operations:vault",
      "view": "operations",
      "id": "vault",
      "title": "Vault & connections",
      "owner": "External Vault + connector integrations",
      "contract": "OAuth consent / connector credentials",
      "state": "Per-user secrets and grants support authorized integrations.",
      "change": "A UI connection or installed skill does not imply every tool can use the credential.",
      "confidence": "External / consumer-verified",
      "sources": [
        26,
        27
      ],
      "related_views": [
        "skills",
        "access"
      ],
      "upstream": [],
      "downstream": [
        "operations:tools"
      ]
    },
    {
      "key": "operations:files",
      "view": "operations",
      "id": "files",
      "title": "Files & artifacts",
      "owner": "Client file surfaces + gateway tools",
      "contract": "File / artifact tool and client paths",
      "state": "File attachments and generated artifacts participate in assistant work.",
      "change": "Check tenant scope, content access, URLs and retention for each storage path.",
      "confidence": "Source verified",
      "sources": [
        27,
        30
      ],
      "related_views": [],
      "upstream": [],
      "downstream": []
    },
    {
      "key": "operations:delivery",
      "view": "operations",
      "id": "delivery",
      "title": "Notifications",
      "owner": "Web/mobile clients + Electron shell",
      "contract": "Notification/unread clients and native integration",
      "state": "Clients differ in delivery and permission behavior; Electron loads hosted web.",
      "change": "Test native permissions and unread synchronization separately from web behavior.",
      "confidence": "Source verified",
      "sources": [
        26,
        29,
        30
      ],
      "related_views": [],
      "upstream": [
        "operations:native"
      ],
      "downstream": []
    },
    {
      "key": "operations:native",
      "view": "operations",
      "id": "native",
      "title": "Native clients",
      "owner": "frontend/mobile + frontend/electron",
      "contract": "Expo / React Native; Electron hosted web",
      "state": "Mobile main is the baseline; design-revamp routes are secondary branch evidence only.",
      "change": "Do not label additional feature routes as shipped mobile parity.",
      "confidence": "Baseline + secondary branch",
      "sources": [
        29,
        30
      ],
      "related_views": [
        "application"
      ],
      "upstream": [],
      "downstream": [
        "operations:delivery"
      ]
    },
    {
      "key": "operations:tools",
      "view": "operations",
      "id": "tools",
      "title": "Research & media",
      "owner": "Gateway tools / extensions + providers",
      "contract": "Deep research / browser / voice / TTS paths",
      "state": "Tools have provider-specific execution paths and capabilities.",
      "change": "Extension presence is not production enablement; verify permissions and model routes.",
      "confidence": "Source verified",
      "sources": [
        27,
        30
      ],
      "related_views": [
        "ai"
      ],
      "upstream": [
        "operations:vault",
        "operations:control"
      ],
      "downstream": []
    },
    {
      "key": "operations:control",
      "view": "operations",
      "id": "control",
      "title": "Execution controls",
      "owner": "Gateway runtime / nodes",
      "contract": "Approval / tenant-agent / device-node contracts",
      "state": "Approval, tenant agent routing and device execution define additional trust boundaries.",
      "change": "Verify authorization before executing tools or acting through devices.",
      "confidence": "Source verified",
      "sources": [
        27
      ],
      "related_views": [],
      "upstream": [],
      "downstream": [
        "operations:tools"
      ]
    },
    {
      "key": "operations:health",
      "view": "operations",
      "id": "health",
      "title": "Health & telemetry",
      "owner": "Gateway operations / service owners",
      "contract": "Usage / health / log APIs",
      "state": "Operational diagnostics help inspect runtime behavior and failures.",
      "change": "Live deployment topology, provider mappings and enabled extensions remain unaudited.",
      "confidence": "Source verified",
      "sources": [
        27,
        30
      ],
      "related_views": [
        "infra"
      ],
      "upstream": [],
      "downstream": []
    }
  ]
}
