{
  "schema_version": 1,
  "cartography_version": 1,
  "created_at": "2026-07-27T14:07:02Z",
  "repository": {
    "name": "fabro",
    "root": ".",
    "revision": "2bcf94fed8a9b429f18d9196fa824711d6f4cb0a",
    "short_revision": "2bcf94fed"
  },
  "instructions": [
    "AGENTS.md",
    "CLAUDE.md",
    "CONTRIBUTING.md"
  ],
  "overview": "Fabro is a Cargo workspace whose CLI and HTTP server compose shared workflow, agent, model, sandbox, persistence, integration, and foundation crates. A Bun workspace contains the React web application, Astro marketing site, Remotion composition, and OpenAPI-derived TypeScript client tooling; the OpenAPI document is the shared HTTP contract. Public and internal documentation, protocol twins, fixture corpora, evaluation tooling, build/release/deployment automation, and repository-local agent workflows form separate support boundaries around the product runtime.",
  "global_exclusions": [
    {
      "globs": [
        "lib/packages/fabro-api-client/src/**"
      ],
      "reason": "Generated TypeScript/Axios output written by the package's pinned OpenAPI Generator command; generated headers and .openapi-generator metadata corroborate the output boundary."
    },
    {
      "globs": [
        "apps/marketing/.vercel/**"
      ],
      "reason": "Vercel CLI link metadata whose own README identifies it as automatically created local project/team state."
    },
    {
      "globs": [
        "lib/apps/fabro-spa/assets/**"
      ],
      "reason": "Placeholder for ignored embedded-SPA build output; repository instructions and .gitignore identify the directory as generated."
    },
    {
      "globs": [
        "docs/brainstorms/**",
        "docs/ideation/**",
        "docs/plans/**",
        "docs/superpowers/plans/**",
        "docs/superpowers/specs/**",
        "docs/internal/cargo-target-apfs-churn-plan.md",
        "docs/internal/cli-workflow-coupling-audit.md",
        "docs/internal/event-schema-competitive-analysis.md",
        "docs/internal/fabro-event-schema-v2-proposal.md",
        "docs/internal/mcp-server-qa-test-plan.md",
        "docs/internal/plan-events-as-source-of-truth-follow-ups.md",
        "docs/internal/plan-events-as-source-of-truth.md",
        "docs/internal/slow-test-opportunities-2026-04-07.md"
      ],
      "reason": "Point-in-time brainstorms, implementation plans, audits, research, handoffs, and superseded proposals rather than maintained source contracts."
    },
    {
      "globs": [
        "docs/internal/demo/*.svg",
        "docs/internal/demo/*.png",
        "docs/public/images/*-workflow.svg",
        "docs/public/images/tutorial-*.svg",
        "docs/public/images/brave-search-research.svg",
        "docs/public/images/how-fabro-works.svg",
        "docs/public/images/nlspec-conformance.svg",
        "docs/public/images/plan-implement-readme.svg"
      ],
      "reason": "Graphviz-generated SVG and PNG renderings whose executable or documentation graph sources remain assigned."
    },
    {
      "globs": [
        "docs/internal/licenses/**"
      ],
      "reason": "Vendored third-party Graphviz license text rather than Fabro source."
    },
    {
      "globs": [
        "evals/swe-bench/scoreboard/**"
      ],
      "reason": "Committed evaluation records generated by record_results.py, not executable evaluation source."
    },
    {
      "globs": [
        ".fabro/skills/rust-style-guide/**"
      ],
      "reason": "Vendored policy payload copied from the brynary/rust-style-guide repository at a recorded commit."
    },
    {
      "globs": [
        "Cargo.lock",
        "bun.lock"
      ],
      "reason": "Machine-maintained dependency resolution snapshots consumed in locked or frozen mode."
    },
    {
      "globs": [
        ".claude/skills/*/watermark"
      ],
      "reason": "Generated progress-state commit SHAs overwritten by the owning skill workflows."
    },
    {
      "globs": [
        ".fabro/project.toml.bak"
      ],
      "reason": "Stale backup of the canonical .fabro/project.toml configuration."
    },
    {
      "globs": [
        ".fabro/workflows/goal/workflow.svg",
        ".github/assets/**"
      ],
      "reason": "Non-runtime workflow illustration and unreferenced pull-request review screenshots."
    },
    {
      "globs": [
        "CLAUDE.md",
        "install.sh",
        "install.md"
      ],
      "reason": "Tracked symlink aliases whose canonical targets are assigned elsewhere, avoiding duplicate assessment of identical content."
    },
    {
      "globs": [
        "LICENSE.md"
      ],
      "reason": "Repository legal text rather than an implementation or documentation component."
    }
  ],
  "components": [
    {
      "id": "fabro-cli",
      "name": "Fabro CLI Application",
      "purpose": "Provides the fabro command-line process, command dispatch, terminal presentation, server bootstrap, and hidden run-worker entry.",
      "globs": ["lib/apps/fabro-cli/**"],
      "exclude_globs": [],
      "entry_points": ["lib/apps/fabro-cli/src/main.rs:main", "lib/apps/fabro-cli/src/args.rs:Commands"],
      "owns": ["CLI process and command lifecycle, output contracts, command context, local server discovery, and the run-worker subprocess entry"],
      "depends_on": ["fabro-acp", "fabro-agent", "fabro-api", "fabro-auth", "fabro-build-support", "fabro-checkpoint", "fabro-client", "fabro-config", "fabro-dump", "fabro-environment", "fabro-github", "fabro-graphviz", "fabro-hooks", "fabro-http", "fabro-install", "fabro-interview", "fabro-llm", "fabro-manifest", "fabro-mcp", "fabro-mcp-server", "fabro-model", "fabro-oauth", "fabro-proc", "fabro-redact", "fabro-sandbox", "fabro-server", "fabro-static", "fabro-store", "fabro-telemetry", "fabro-template", "fabro-tool", "fabro-types", "fabro-util", "fabro-validate", "fabro-vault", "fabro-workflow", "workflow-test-corpus"],
      "evidence": ["lib/apps/fabro-cli/Cargo.toml — declares the fabro binary and its direct workspace dependencies", "lib/apps/fabro-cli/src/main.rs:main_inner — constructs shared command state and dispatches the complete command surface"]
    },
    {
      "id": "fabro-mcp-server",
      "name": "Fabro MCP Stdio Server",
      "purpose": "Exposes Fabro run operations as an MCP stdio tool service and generates supported MCP client configuration.",
      "globs": ["lib/apps/fabro-mcp-server/**"],
      "exclude_globs": [],
      "entry_points": ["lib/apps/fabro-mcp-server/src/lib.rs:start", "lib/apps/fabro-mcp-server/src/config.rs:init_agent"],
      "owns": ["MCP stdio service lifecycle, tool router, lazy Fabro client backend, and MCP client configuration updates"],
      "depends_on": ["fabro-api", "fabro-client", "fabro-config", "fabro-manifest", "fabro-model", "fabro-server", "fabro-tool", "fabro-types", "fabro-util"],
      "evidence": ["lib/apps/fabro-mcp-server/Cargo.toml — declares a distinct MCP server library package", "lib/apps/fabro-mcp-server/src/server.rs:start — owns the rmcp stdio service lifecycle"]
    },
    {
      "id": "fabro-server",
      "name": "Fabro HTTP Server",
      "purpose": "Hosts Fabro's HTTP control plane and web surface while coordinating persisted run state, workers, schedulers, sessions, authentication, and integrations.",
      "globs": ["lib/apps/fabro-server/**"],
      "exclude_globs": [],
      "entry_points": ["lib/apps/fabro-server/src/serve.rs:serve_command", "lib/apps/fabro-server/src/server.rs:build_router"],
      "owns": ["Server startup and shutdown, AppState, API and web routing, authentication, scheduling, worker control, and integration coordination"],
      "depends_on": ["fabro-agent", "fabro-api", "fabro-auth", "fabro-automation", "fabro-build-support", "fabro-client", "fabro-config", "fabro-db", "fabro-environment", "fabro-github", "fabro-graphviz", "fabro-hooks", "fabro-http", "fabro-http-api-contract", "fabro-install", "fabro-interview", "fabro-llm", "fabro-manifest", "fabro-mcp-store", "fabro-model", "fabro-proc", "fabro-redact", "fabro-sandbox", "fabro-slack", "fabro-spa", "fabro-static", "fabro-store", "fabro-tool", "fabro-types", "fabro-util", "fabro-validate", "fabro-variable", "fabro-vault", "fabro-workflow"],
      "evidence": ["lib/apps/fabro-server/Cargo.toml — declares the HTTP server package and its application dependencies", "lib/apps/fabro-server/src/server.rs:AppState — centralizes the service's stores, runtimes, schedulers, credentials, integrations, and shutdown state"]
    },
    {
      "id": "fabro-spa",
      "name": "Embedded SPA Assets",
      "purpose": "Provides compile-time embedded production SPA lookup, bytes, and content hashes to the Rust server.",
      "globs": ["lib/apps/fabro-spa/Cargo.toml", "lib/apps/fabro-spa/src/**"],
      "exclude_globs": [],
      "entry_points": ["lib/apps/fabro-spa/src/lib.rs:get", "lib/apps/fabro-spa/src/lib.rs:AssetBytes"],
      "owns": ["Compile-time SPA embedding, asset lookup, byte and hash metadata, and source-map exclusion"],
      "depends_on": [],
      "evidence": ["lib/apps/fabro-spa/Cargo.toml — declares a distinct embedded-assets package", "lib/apps/fabro-spa/src/lib.rs:EmbeddedAssets — defines compile-time asset embedding and lookup", "lib/apps/fabro-server/src/static_files.rs — consumes the embedded asset interface"]
    },
    {
      "id": "fabro-acp",
      "name": "Agent Client Protocol Runtime",
      "purpose": "Launches and controls Agent Client Protocol processes through Fabro sandboxes and translates their sessions into run results.",
      "globs": ["lib/components/fabro-acp/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-acp/src/command.rs:AcpProcessSpec", "lib/components/fabro-acp/src/session.rs:run_acp_turn"],
      "owns": ["ACP process specifications, transport and session lifetime, live steering, cancellation, and exit translation"],
      "depends_on": ["fabro-sandbox", "fabro-types", "fabro-util"],
      "evidence": ["lib/components/fabro-acp/Cargo.toml — declares the ACP backend and optional sandbox runtime edge", "lib/components/fabro-acp/tests/session.rs — exercises the ACP session boundary"]
    },
    {
      "id": "fabro-agent",
      "name": "Coding Agent Runtime",
      "purpose": "Runs programmable coding-agent sessions with model profiles, context management, native and MCP tools, permissions, and subagents.",
      "globs": ["lib/components/fabro-agent/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-agent/src/session.rs:Session", "lib/components/fabro-agent/src/tool_registry.rs:ToolRegistry"],
      "owns": ["Agent session history, prompts and profiles, tool execution, context compaction, permissions, questions, todos, and subagents"],
      "depends_on": ["fabro-auth", "fabro-config", "fabro-http", "fabro-llm", "fabro-mcp", "fabro-model", "fabro-sandbox", "fabro-static", "fabro-template", "fabro-types", "fabro-util", "fabro-vault"],
      "evidence": ["lib/components/fabro-agent/Cargo.toml — describes a programmable agentic loop and its runtime dependencies", "lib/components/fabro-agent/src/lib.rs — exposes the session, profile, tool, permission, history, and subagent facade"]
    },
    {
      "id": "fabro-automation",
      "name": "Automation Definitions and Storage",
      "purpose": "Validates, versions, imports, and durably stores scheduled, API-triggered, and manual automation definitions.",
      "globs": ["lib/components/fabro-automation/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-automation/src/store.rs:AutomationStore", "lib/components/fabro-automation/src/migrations.rs:import_legacy_directory_once"],
      "owns": ["Automation identifiers, targets, triggers, revisions, SQLite records, and legacy import"],
      "depends_on": ["fabro-db"],
      "evidence": ["lib/components/fabro-automation/Cargo.toml — declares the automation domain and durable storage boundary", "lib/components/fabro-automation/migrations/2026071101_file_definitions_to_sqlite.rs — evolves the owned persistence format"]
    },
    {
      "id": "fabro-checkpoint",
      "name": "Git Checkpoint Storage",
      "purpose": "Stores workflow checkpoints and metadata in Git commits and dedicated metadata branches.",
      "globs": ["lib/components/fabro-checkpoint/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-checkpoint/src/branch.rs:BranchStore", "lib/components/fabro-checkpoint/src/git.rs:Store"],
      "owns": ["Checkpoint commits, Git trees, metadata branches, authorship, trailers, and checkpoint errors"],
      "depends_on": ["fabro-config", "fabro-store", "fabro-types"],
      "evidence": ["lib/components/fabro-checkpoint/Cargo.toml — identifies Git-backed workflow checkpoint storage", "lib/components/fabro-checkpoint/src/lib.rs — exposes the branch, Git, author, trailer, and error surface"]
    },
    {
      "id": "fabro-dump",
      "name": "Run Dump Materialization",
      "purpose": "Materializes stored run projections, events, checkpoints, artifacts, and blobs into a portable directory tree.",
      "globs": ["lib/components/fabro-dump/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-dump/src/lib.rs:RunDump", "lib/components/fabro-dump/src/lib.rs:RunDump::write_to_dir"],
      "owns": ["Dump layout, stage ranking, blob hydration, serialization, and directory writing"],
      "depends_on": ["fabro-store", "fabro-types"],
      "evidence": ["lib/components/fabro-dump/Cargo.toml — gives the operation a distinct crate and storage dependency", "lib/components/fabro-dump/src/lib.rs:RunDump — contains the public dump-building lifecycle"]
    },
    {
      "id": "fabro-environment",
      "name": "Environment Definitions and Storage",
      "purpose": "Validates, seeds, versions, imports, and durably stores server-owned execution environment definitions.",
      "globs": ["lib/components/fabro-environment/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-environment/src/store.rs:EnvironmentStore", "lib/components/fabro-environment/src/store.rs:seed_default_environment"],
      "owns": ["Environment identifiers, revisions, drafts, SQLite records, built-in seeding, and legacy import"],
      "depends_on": ["fabro-config", "fabro-db", "fabro-types"],
      "evidence": ["lib/components/fabro-environment/Cargo.toml — declares a server-owned environment domain and store", "lib/components/fabro-environment/tests/store.rs — exercises the independent persistence boundary"]
    },
    {
      "id": "fabro-github",
      "name": "GitHub Authentication and API",
      "purpose": "Resolves GitHub credentials and performs authenticated App, repository, branch, and pull-request operations.",
      "globs": ["lib/components/fabro-github/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-github/src/lib.rs:GitHubCredentials", "lib/components/fabro-github/src/lib.rs:create_pull_request"],
      "owns": ["GitHub credentials and token minting, API translation, repository URL handling, and pull-request lifecycle calls"],
      "depends_on": ["fabro-http", "fabro-redact", "fabro-static", "fabro-types"],
      "evidence": ["lib/components/fabro-github/Cargo.toml — describes the GitHub App authentication and API adapter", "lib/components/fabro-github/src/lib.rs:GitHubContext — defines the credential context and testable HTTP boundary"]
    },
    {
      "id": "fabro-graphviz",
      "name": "Workflow Graph Language",
      "purpose": "Parses Graphviz DOT into Fabro's typed graph model and handles conditions, stylesheets, fidelity, and graph rendering.",
      "globs": ["lib/components/fabro-graphviz/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-graphviz/src/parser/mod.rs:parse", "lib/components/fabro-graphviz/src/render.rs:render_dot"],
      "owns": ["DOT lexer, parser, semantic conversion, graph errors, condition and stylesheet syntax, and rendering normalization"],
      "depends_on": ["fabro-types", "workflow-test-corpus"],
      "evidence": ["lib/components/fabro-graphviz/Cargo.toml — names the crate as the DOT parser and graph data model", "lib/components/fabro-graphviz/src/parser/mod.rs:parse — is the source-to-typed-graph entry point"]
    },
    {
      "id": "fabro-hooks",
      "name": "Workflow Lifecycle Hooks",
      "purpose": "Configures and executes user-defined workflow hooks and bridges tool hooks into the agent runtime.",
      "globs": ["lib/components/fabro-hooks/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-hooks/src/runner.rs:HookRunner", "lib/components/fabro-hooks/src/bridge.rs:WorkflowToolHookCallback"],
      "owns": ["Hook definitions and selection, execution context, result merging, command and HTTP dispatch, and agent bridging"],
      "depends_on": ["fabro-agent", "fabro-auth", "fabro-http", "fabro-llm", "fabro-model", "fabro-redact", "fabro-types", "fabro-util"],
      "evidence": ["lib/components/fabro-hooks/Cargo.toml — identifies the workflow hook boundary and runtime dependencies", "lib/components/fabro-hooks/tests/host_command_hooks.rs — tests host hooks through the public lifecycle"]
    },
    {
      "id": "fabro-install",
      "name": "Installation Persistence",
      "purpose": "Prepares, persists, and rolls back shared CLI/server installation settings, credentials, development tokens, and default environments.",
      "globs": ["lib/components/fabro-install/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-install/src/lib.rs:InstallPersistencePlan", "lib/components/fabro-install/src/lib.rs:persist_install_outputs_direct"],
      "owns": ["Install persistence plans, settings and environment mutations, vault writes, development tokens, and rollback"],
      "depends_on": ["fabro-config", "fabro-db", "fabro-environment", "fabro-static", "fabro-types", "fabro-util", "fabro-vault"],
      "evidence": ["lib/components/fabro-install/Cargo.toml — declares shared install primitives for CLI and server", "lib/components/fabro-install/src/lib.rs:InstallPersistencePlan — groups the files, tokens, and vault state committed by one install"]
    },
    {
      "id": "fabro-interview",
      "name": "Human Interaction Runtime",
      "purpose": "Represents workflow questions and answers and provides console, callback, queue, control, recording, replay, and automatic interviewer implementations.",
      "globs": ["lib/components/fabro-interview/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-interview/src/lib.rs:Interviewer", "lib/components/fabro-interview/src/control.rs:ControlInterviewer"],
      "owns": ["Question and answer protocol, interviewer request lifetime, timeout behavior, delivery, recording, and replay"],
      "depends_on": ["fabro-types", "fabro-util"],
      "evidence": ["lib/components/fabro-interview/Cargo.toml — defines interviewer traits and implementations as one crate", "lib/components/fabro-interview/src/lib.rs:Interviewer — is the shared asynchronous human-interaction interface"]
    },
    {
      "id": "fabro-llm",
      "name": "Unified LLM Client",
      "purpose": "Provides a provider-neutral generation API with routing, middleware, retries, token and cost accounting, provider adapters, and wire codecs.",
      "globs": ["lib/components/fabro-llm/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-llm/src/client.rs:Client", "lib/components/fabro-llm/src/provider.rs:ProviderAdapter"],
      "owns": ["Normalized generation types, adapter registry, provider authentication and transport, codecs, retries, middleware, and accounting"],
      "depends_on": ["fabro-auth", "fabro-http", "fabro-model", "fabro-redact", "fabro-static", "fabro-types", "fabro-util"],
      "evidence": ["lib/components/fabro-llm/Cargo.toml — declares the unified multi-provider client", "lib/components/fabro-llm/tests/it/wire/mod.rs — verifies provider codecs against one normalized boundary"]
    },
    {
      "id": "fabro-manifest",
      "name": "Run Manifest Construction",
      "purpose": "Resolves workflow and configuration inputs, collects static dependencies, and constructs self-contained run manifests with Git provenance.",
      "globs": ["lib/components/fabro-manifest/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-manifest/src/lib.rs:build_run_manifest", "lib/components/fabro-manifest/src/lib.rs:ManifestBuildInput"],
      "owns": ["Manifest input and output, configuration resolution, workflow dependency collection, Git context, and pre-run push preparation"],
      "depends_on": ["fabro-api", "fabro-config", "fabro-github", "fabro-graphviz", "fabro-template", "fabro-types", "fabro-workflow"],
      "evidence": ["lib/components/fabro-manifest/Cargo.toml — declares manifest construction and its graph, Git, and workflow dependencies", "lib/components/fabro-manifest/src/lib.rs:build_run_manifest — is the shared assembly operation used by CLI, server, and MCP server"]
    },
    {
      "id": "fabro-mcp",
      "name": "MCP Client Runtime",
      "purpose": "Connects to configured Model Context Protocol servers, manages connections, discovers tools, and dispatches qualified calls.",
      "globs": ["lib/components/fabro-mcp/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-mcp/src/client.rs:McpClient", "lib/components/fabro-mcp/src/connection_manager.rs:McpConnectionManager"],
      "owns": ["MCP client connections, stdio and HTTP transports, connection-manager state, tool discovery, and result conversion"],
      "depends_on": ["fabro-config", "fabro-http", "fabro-types"],
      "evidence": ["lib/components/fabro-mcp/Cargo.toml — declares the MCP client and transport features", "lib/components/fabro-mcp/tests/stdio_integration.rs — verifies the external process boundary over stdio"]
    },
    {
      "id": "fabro-mcp-store",
      "name": "MCP Server Catalog Storage",
      "purpose": "Durably stores, revisions, caches, and imports server-managed MCP server definitions.",
      "globs": ["lib/components/fabro-mcp-store/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-mcp-store/src/store.rs:McpServerStore", "lib/components/fabro-mcp-store/src/store.rs:import_legacy_directory_once"],
      "owns": ["MCP definition records, optimistic revisions, catalog cache, and legacy directory import"],
      "depends_on": ["fabro-db", "fabro-types"],
      "evidence": ["lib/components/fabro-mcp-store/Cargo.toml — declares durable MCP catalog storage", "lib/components/fabro-mcp-store/src/lib.rs — explicitly assigns persistence ownership to this crate"]
    },
    {
      "id": "fabro-sandbox",
      "name": "Execution Sandbox Abstraction",
      "purpose": "Defines sandbox and provider contracts and implements local, Docker, and Daytona execution lifecycles.",
      "globs": ["lib/components/fabro-sandbox/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-sandbox/src/sandbox.rs:Sandbox", "lib/components/fabro-sandbox/src/provider.rs:SandboxProviderRegistry"],
      "owns": ["Sandbox filesystem, process, and terminal interface; provider lifecycle; clone setup; reconnect behavior; and provider implementations"],
      "depends_on": ["fabro-config", "fabro-github", "fabro-http", "fabro-proc", "fabro-redact", "fabro-static", "fabro-types", "fabro-util"],
      "evidence": ["lib/components/fabro-sandbox/Cargo.toml — defines provider features around a common sandbox crate", "lib/components/fabro-sandbox/src/provider.rs:SandboxProvider — separates provider lifecycle from per-sandbox operations"]
    },
    {
      "id": "fabro-slack",
      "name": "Slack Interaction Integration",
      "purpose": "Connects to Slack Socket Mode and translates questions, answers, run events, and threads between Slack and Fabro.",
      "globs": ["lib/components/fabro-slack/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-slack/src/connection.rs:run", "lib/components/fabro-slack/src/client.rs:SlackClient"],
      "owns": ["Slack credentials, Socket Mode lifecycle, API client, block rendering, payload parsing, thread registry, and dispatch"],
      "depends_on": ["fabro-http", "fabro-interview", "fabro-static", "fabro-types", "fabro-workflow"],
      "evidence": ["lib/components/fabro-slack/Cargo.toml — declares the Slack interviewer integration", "lib/components/fabro-slack/src/connection.rs:run — owns the Socket Mode event loop"]
    },
    {
      "id": "fabro-store",
      "name": "Run and Authentication Persistence",
      "purpose": "Persists run events, projections, blobs, artifacts, summaries, catalog indexes, and authentication grants over SlateDB, object storage, and SQLite.",
      "globs": ["lib/components/fabro-store/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-store/src/slate/mod.rs:Database", "lib/components/fabro-store/src/run_state.rs:RunProjectionReducer"],
      "owns": ["Run event and projection lifecycle, blob and artifact layout, summary indexes, auth records, locking, and storage errors"],
      "depends_on": ["fabro-types", "fabro-util"],
      "evidence": ["lib/components/fabro-store/src/lib.rs — presents one persistence facade for events, projections, artifacts, summaries, blobs, and auth", "lib/components/fabro-store/src/slate/mod.rs:Database — is the shared storage root for the owned stores"]
    },
    {
      "id": "fabro-tool",
      "name": "Run-Control Tools",
      "purpose": "Defines and executes shared run create, search, get, event, gather, interaction, and pairing tools over an abstract Fabro backend.",
      "globs": ["lib/components/fabro-tool/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-tool/src/common.rs:FabroToolBackend", "lib/components/fabro-tool/src/common.rs:tool_definitions"],
      "owns": ["Tool names and schemas, parameter validation, backend-neutral operations, result records, and text rendering"],
      "depends_on": ["fabro-api", "fabro-client", "fabro-types", "fabro-util"],
      "evidence": ["lib/components/fabro-tool/Cargo.toml — identifies shared run-control tool behavior over API/client contracts", "lib/components/fabro-tool/src/common.rs:FabroToolBackend — is the abstraction shared by CLI, server, workflow, and MCP server"]
    },
    {
      "id": "fabro-tracker",
      "name": "Issue Tracker Adapters",
      "purpose": "Provides a common issue-tracker interface with GitHub Projects and Linear implementations.",
      "globs": ["lib/components/fabro-tracker/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-tracker/src/lib.rs:Tracker", "lib/components/fabro-tracker/src/github.rs:GitHubTracker"],
      "owns": ["Normalized issues and blockers, candidate selection and transitions, and GitHub Projects and Linear GraphQL adapters"],
      "depends_on": ["fabro-github", "fabro-http"],
      "evidence": ["lib/components/fabro-tracker/Cargo.toml — declares the tracker trait and provider adapters", "lib/components/fabro-tracker/src/lib.rs:Tracker — defines the provider-neutral issue workflow"]
    },
    {
      "id": "fabro-validate",
      "name": "Workflow Graph Validation",
      "purpose": "Runs built-in and catalog-aware lint rules over typed workflow graphs and returns structured diagnostics.",
      "globs": ["lib/components/fabro-validate/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-validate/src/lib.rs:validate", "lib/components/fabro-validate/src/lib.rs:LintRule"],
      "owns": ["Validation diagnostics, rule interface and registry, graph and catalog traversal, and error escalation"],
      "depends_on": ["fabro-acp", "fabro-graphviz", "fabro-model", "fabro-types", "workflow-test-corpus"],
      "evidence": ["lib/components/fabro-validate/Cargo.toml — declares graph validation and its graph/catalog dependencies", "lib/components/fabro-validate/src/rules/mod.rs:built_in_rules — forms the explicit built-in rule registry"]
    },
    {
      "id": "fabro-variable",
      "name": "Workflow Variable Storage",
      "purpose": "Validates, durably stores, snapshots, and imports workflow-visible non-sensitive variables.",
      "globs": ["lib/components/fabro-variable/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-variable/src/lib.rs:VariableStore", "lib/components/fabro-variable/src/lib.rs:import_legacy_json_once"],
      "owns": ["Variable validation, SQLite records, render-context snapshots, and legacy JSON import"],
      "depends_on": ["fabro-db", "fabro-types"],
      "evidence": ["lib/components/fabro-variable/Cargo.toml — defines workflow-visible variables as a storage concern", "lib/components/fabro-variable/tests/store.rs — verifies its independent persistence and import contract"]
    },
    {
      "id": "fabro-workflow",
      "name": "Workflow Orchestration Engine",
      "purpose": "Transforms, validates, initializes, executes, persists, resumes, and finalizes graph-defined Fabro runs.",
      "globs": ["lib/components/fabro-workflow/**"],
      "exclude_globs": [],
      "entry_points": ["lib/components/fabro-workflow/src/operations/start.rs:start", "lib/components/fabro-workflow/src/pipeline/execute.rs:execute"],
      "owns": ["Run operations, workflow phases, node handlers, run services, events, checkpoints, Git, artifacts, hooks, status, steering, and cancellation"],
      "depends_on": ["fabro-acp", "fabro-agent", "fabro-auth", "fabro-checkpoint", "fabro-config", "fabro-core", "fabro-dump", "fabro-github", "fabro-graphviz", "fabro-hooks", "fabro-http", "fabro-interview", "fabro-llm", "fabro-mcp", "fabro-model", "fabro-redact", "fabro-sandbox", "fabro-static", "fabro-store", "fabro-template", "fabro-tool", "fabro-types", "fabro-util", "fabro-validate", "fabro-vault", "workflow-test-corpus"],
      "evidence": ["lib/components/fabro-workflow/Cargo.toml — declares the DOT-based runner and component dependencies", "lib/components/fabro-workflow/src/pipeline/mod.rs — exposes the ordered transform, validate, initialize, execute, and finalize phases"]
    },
    {
      "id": "fabro-build-support",
      "name": "Rust Build-Script Support",
      "purpose": "Supplies shared compile-time Git and Cargo profile metadata to Fabro application build scripts.",
      "globs": ["lib/foundation/build-support/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/build-support/git_metadata.rs:collect_from", "lib/foundation/build-support/git_metadata.rs:cargo_profile"],
      "owns": ["Compile-time Git SHA discovery, Cargo rerun paths, and profile discovery"],
      "depends_on": [],
      "evidence": ["lib/foundation/build-support/Cargo.toml — declares the shared build-support package", "lib/foundation/build-support/git_metadata.rs:BuildGitMetadata — defines build-script Git and profile metadata", "lib/apps/fabro-cli/build.rs — consumes the shared metadata collector", "lib/apps/fabro-server/build.rs — consumes the shared metadata collector"]
    },
    {
      "id": "fabro-build-tooling",
      "name": "Fabro Build and Developer Tooling",
      "purpose": "Runs repository build, documentation, SPA, container, benchmark, release, and test-support automation.",
      "globs": ["lib/foundation/fabro-dev/**", "test/bin/release_test.sh", "test/analysis/bench-tests-diff.sql"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-dev/src/main.rs:main"],
      "owns": ["Developer CLI dispatch, subprocess plans, generated-reference checks, build and release workflows, and benchmark analysis"],
      "depends_on": ["container-packaging-and-deployment", "fabro-cli", "fabro-config", "fabro-macros-metadata", "fabro-spa", "fabro-util", "fabro-web-app", "public-documentation", "repository-development-policy"],
      "evidence": ["lib/foundation/fabro-dev/src/lib.rs:Command — dispatches build, Docker, docs, release, SPA, and benchmark commands"]
    },
    {
      "id": "fabro-api",
      "name": "Generated Rust API Client",
      "purpose": "Generates the low-level Rust HTTP client and API type facade from OpenAPI while reusing canonical product types and verifying wire parity.",
      "globs": ["lib/foundation/fabro-api/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-api/build.rs:main", "lib/foundation/fabro-api/src/lib.rs:ApiClient"],
      "owns": ["OpenAPI compatibility transformations, generation settings, type replacement map, generated-client facade, and wire/type parity tests"],
      "depends_on": ["fabro-automation", "fabro-config", "fabro-environment", "fabro-http-api-contract", "fabro-model", "fabro-types"],
      "evidence": ["lib/foundation/fabro-api/build.rs:main — reads the OpenAPI contract and writes generated Rust code to OUT_DIR", "lib/foundation/fabro-api/tests/run_event_round_trip.rs — verifies identity and JSON parity for canonical reused types"]
    },
    {
      "id": "fabro-auth",
      "name": "Provider Credential Resolution",
      "purpose": "Resolves provider credentials and headers from environment or vault sources, refreshes OAuth credentials, and drives authentication strategies.",
      "globs": ["lib/foundation/fabro-auth/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-auth/src/resolve.rs:CredentialResolver", "lib/foundation/fabro-auth/src/strategy.rs:AuthStrategy"],
      "owns": ["Credential-source precedence, provider discovery, OAuth refresh and write-back, header interpolation, and interactive auth state"],
      "depends_on": ["fabro-http", "fabro-model", "fabro-oauth", "fabro-redact", "fabro-static", "fabro-types", "fabro-vault"],
      "evidence": ["lib/foundation/fabro-auth/Cargo.toml — declares typed provider credential resolution", "lib/foundation/fabro-auth/src/resolve.rs:CredentialResolver::resolve — composes catalog policy, source lookup, headers, and refresh"]
    },
    {
      "id": "fabro-client",
      "name": "High-Level Fabro Service Client",
      "purpose": "Provides an authenticated Fabro service client over HTTP or Unix sockets with endpoint wrappers, SSE streams, refresh, and local auth storage.",
      "globs": ["lib/foundation/fabro-client/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-client/src/client.rs:ClientBuilder::connect", "lib/foundation/fabro-client/src/target.rs:ServerTarget"],
      "owns": ["Connected transport state, operation wrappers, SSE buffering, token refresh, target normalization, and per-server CLI auth files"],
      "depends_on": ["fabro-api", "fabro-http", "fabro-model", "fabro-static", "fabro-types", "fabro-util"],
      "evidence": ["lib/foundation/fabro-client/Cargo.toml — distinguishes the high-level client from the generated API client", "lib/foundation/fabro-client/src/client.rs:ClientState — owns transport, generated client, token, URL, and refresh coordination"]
    },
    {
      "id": "fabro-config",
      "name": "Layered Configuration and Runtime Paths",
      "purpose": "Parses, combines, migrates, validates, and resolves Fabro configuration layers into runtime settings and canonical paths.",
      "globs": ["lib/foundation/fabro-config/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-config/src/builders.rs:ServerSettingsBuilder", "lib/foundation/fabro-config/src/resolve/mod.rs"],
      "owns": ["Source layers and merge semantics, defaults, parsing and validation, migrations, home/storage/runtime paths, daemon, envfile, and logging configuration"],
      "depends_on": ["fabro-macros-metadata", "fabro-model", "fabro-proc", "fabro-static", "fabro-types", "fabro-util"],
      "evidence": ["lib/foundation/fabro-config/Cargo.toml — declares the centralized configuration crate", "lib/foundation/fabro-config/src/builders.rs — composes defaults and layers into dense runtime settings"]
    },
    {
      "id": "fabro-core",
      "name": "Generic Graph Execution Kernel",
      "purpose": "Executes generic directed graphs with handler, retry, lifecycle, cancellation, checkpoint, visit-limit, and stall-monitoring contracts.",
      "globs": ["lib/foundation/fabro-core/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-core/src/executor.rs:Executor::run", "lib/foundation/fabro-core/src/handler.rs:NodeHandler"],
      "owns": ["Execution state, graph traversal, handler and lifecycle contracts, retry and visit decisions, cancellation, and stall watchdog"],
      "depends_on": ["fabro-types", "fabro-util"],
      "evidence": ["lib/foundation/fabro-core/Cargo.toml — identifies a generic kernel without higher-level workflow dependencies", "lib/foundation/fabro-core/src/executor.rs:Executor::run — owns the traversal and execution lifecycle"]
    },
    {
      "id": "fabro-db",
      "name": "Shared SQLite Database Foundation",
      "purpose": "Opens and migrates the shared SQLite database, manages rollback snapshots and permissions, and defines the bundled schema.",
      "globs": ["lib/foundation/fabro-db/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-db/src/lib.rs:Database::connect", "lib/foundation/fabro-db/src/lib.rs:Database::migrate"],
      "owns": ["SQLite pool policy, migration registry, snapshots, backup paths, permissions, tables, and indexes"],
      "depends_on": [],
      "evidence": ["lib/foundation/fabro-db/Cargo.toml — declares the shared SQLite foundation", "lib/foundation/fabro-db/migrations/2026071101_secrets.sql — is one migration in the compiled shared schema"]
    },
    {
      "id": "fabro-http",
      "name": "Shared HTTP Transport Construction",
      "purpose": "Centralizes reqwest type exposure and synchronous and asynchronous HTTP client construction with Fabro proxy policy.",
      "globs": ["lib/foundation/fabro-http/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-http/src/lib.rs:HttpClientBuilder", "lib/foundation/fabro-http/src/lib.rs:test_http_client"],
      "owns": ["Approved reqwest facade, proxy-policy resolution, client builders, and deterministic no-proxy test clients"],
      "depends_on": ["fabro-static"],
      "evidence": ["lib/foundation/fabro-http/Cargo.toml — declares the shared reqwest wrapper", "lib/foundation/fabro-http/src/lib.rs:ProxyPolicy — defines the common transport-construction policy"]
    },
    {
      "id": "fabro-macros-metadata",
      "name": "Compile-Time Macros and Option Metadata",
      "purpose": "Supplies Fabro derive and attribute macros plus the runtime option-metadata model used by configuration and documentation tooling.",
      "globs": ["lib/foundation/fabro-macros/**", "lib/foundation/fabro-options-metadata/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-macros/src/lib.rs:derive_options_metadata", "lib/foundation/fabro-options-metadata/src/lib.rs:OptionsMetadata"],
      "owns": ["Macro expansion for E2E gates, layer combination, and option metadata plus the runtime visitor and option-tree representation"],
      "depends_on": [],
      "evidence": ["lib/foundation/fabro-macros/src/options_metadata.rs:derive_impl — generates implementations against the runtime metadata crate", "lib/foundation/fabro-macros/tests/options_metadata.rs — tests the compiler/runtime pair together"]
    },
    {
      "id": "fabro-model",
      "name": "LLM Model and Provider Catalog",
      "purpose": "Defines provider and model identity, capabilities, billing metadata, embedded catalog data, override merging, and selection.",
      "globs": ["lib/foundation/fabro-model/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-model/src/catalog.rs:Catalog::builtin", "lib/foundation/fabro-model/src/catalog.rs:Catalog::select"],
      "owns": ["Provider and model IDs, catalog sources and indexes, auth declarations, capabilities, controls, codecs, reasoning, pricing, and billing"],
      "depends_on": ["fabro-static"],
      "evidence": ["lib/foundation/fabro-model/Cargo.toml — names model metadata and resolution as the crate responsibility", "lib/foundation/fabro-model/src/catalog/providers/openai.toml — is one tracked built-in provider catalog source"]
    },
    {
      "id": "fabro-oauth",
      "name": "OAuth PKCE and Callback Flow",
      "purpose": "Implements generic OAuth PKCE authorization, loopback callback serving, browser launch, code exchange, and token refresh.",
      "globs": ["lib/foundation/fabro-oauth/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-oauth/src/lib.rs:run_browser_flow", "lib/foundation/fabro-oauth/src/lib.rs:refresh_token"],
      "owns": ["PKCE and state, authorization URLs, callback listener and shutdown, callback validation, exchange, and refresh"],
      "depends_on": ["fabro-http", "fabro-redact", "fabro-static", "fabro-util"],
      "evidence": ["lib/foundation/fabro-oauth/Cargo.toml — declares a generic OAuth 2.0 PKCE flow", "lib/foundation/fabro-oauth/src/lib.rs:CallbackHandle — owns the ephemeral callback server lifecycle"]
    },
    {
      "id": "fabro-proc",
      "name": "OS Process Primitives",
      "purpose": "Wraps platform process primitives for signals, groups, advisory locks, pre-exec hooks, liveness, and process-title rewriting.",
      "globs": ["lib/foundation/fabro-proc/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-proc/src/signal.rs:process_running", "lib/foundation/fabro-proc/src/pre_exec.rs:pre_exec_setsid"],
      "owns": ["Unix signals and process groups, cross-platform liveness, locks, child pre-exec configuration, and argv/title state"],
      "depends_on": [],
      "evidence": ["lib/foundation/fabro-proc/Cargo.toml — describes safe process-management wrappers", "lib/foundation/fabro-proc/c/capture_argv.c — establishes the FFI boundary for title rewriting"]
    },
    {
      "id": "fabro-redact",
      "name": "Secret and Credential Redaction",
      "purpose": "Detects and redacts credential-like content in strings, URLs, JSON, and JSONL using embedded rules and entropy scanning.",
      "globs": ["lib/foundation/fabro-redact/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-redact/src/lib.rs:redact_string", "lib/foundation/fabro-redact/src/safe_url.rs:DisplaySafeUrl"],
      "owns": ["Rule source and engine, entropy thresholds, overlap merging, structured redaction policy, and safe URL display"],
      "depends_on": [],
      "evidence": ["lib/foundation/fabro-redact/build.rs:main — compiles the tracked Gitleaks rule source into OUT_DIR", "lib/foundation/fabro-redact/src/lib.rs:redact_string — composes entropy and rule-based detection"]
    },
    {
      "id": "fabro-static",
      "name": "Shared Static Conventions",
      "purpose": "Defines dependency-light canonical environment-variable names and registries for bootstrap and optional vault secrets.",
      "globs": ["lib/foundation/fabro-static/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-static/src/env_vars.rs:EnvVars", "lib/foundation/fabro-static/src/secret_registry.rs:is_bootstrap_secret"],
      "owns": ["Canonical environment names and bootstrap and optional secret classification"],
      "depends_on": [],
      "evidence": ["lib/foundation/fabro-static/Cargo.toml — declares a no-dependency static registry", "lib/foundation/fabro-static/src/env_vars.rs:EnvVars — centralizes environment names used across the workspace"]
    },
    {
      "id": "fabro-telemetry",
      "name": "Analytics and Crash Telemetry",
      "purpose": "Initializes analytics and crash reporting, builds anonymous context, buffers events, and delivers them across CLI and server lifecycles.",
      "globs": ["lib/foundation/fabro-telemetry/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-telemetry/src/lib.rs:init_cli", "lib/foundation/fabro-telemetry/src/lib.rs:shutdown"],
      "owns": ["Process-global telemetry state, identifiers, buffer thread, event context, command sanitization, Segment delivery, and panic capture"],
      "depends_on": ["fabro-http", "fabro-static", "fabro-util"],
      "evidence": ["lib/foundation/fabro-telemetry/Cargo.toml — declares analytics and crash reporting", "lib/foundation/fabro-telemetry/src/lib.rs:Global — owns sender, identity, context, level, and background thread"]
    },
    {
      "id": "fabro-template",
      "name": "Template Rendering and Dependency Discovery",
      "purpose": "Renders MiniJinja templates with source-aware diagnostics, rooted stores, wrappers, and static dependency discovery.",
      "globs": ["lib/foundation/fabro-template/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-template/src/lib.rs:render_named", "lib/foundation/fabro-template/src/store.rs:TemplateStore"],
      "owns": ["Template context, render modes, diagnostics, include safety, stores, caching and recording, and dependency closure"],
      "depends_on": ["fabro-types", "fabro-util"],
      "evidence": ["lib/foundation/fabro-template/Cargo.toml — declares the shared rendering boundary", "lib/foundation/fabro-template/src/dependency.rs — owns include and import extraction and closure discovery"]
    },
    {
      "id": "fabro-test",
      "name": "Shared Integration-Test Infrastructure",
      "purpose": "Provides isolated CLI/server test contexts, twin and live mode control, process harnessing, snapshot normalization, and HTTP assertions.",
      "globs": ["lib/foundation/fabro-test/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-test/src/lib.rs:TestContext", "lib/foundation/fabro-test/src/lib.rs:TestMode"],
      "owns": ["Temporary test home and storage, managed processes, mode and secret gating, environment isolation, snapshot filters, twins, and HTTP diagnostics"],
      "depends_on": ["fabro-config", "fabro-http", "fabro-install", "fabro-proc", "fabro-static", "fabro-types", "fabro-util", "twin-github", "twin-openai", "workflow-test-corpus"],
      "evidence": ["lib/foundation/fabro-test/Cargo.toml — declares shared integration-test utilities and twin dependencies", "lib/foundation/fabro-test/src/lib.rs:TestContext — owns isolated paths, subprocesses, filters, and managed server state"]
    },
    {
      "id": "fabro-types",
      "name": "Shared Product Contracts and State Records",
      "purpose": "Defines serializable identifiers, settings, run and session events, projections, and other product vocabulary exchanged across Fabro boundaries.",
      "globs": ["lib/foundation/fabro-types/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-types/src/lib.rs", "lib/foundation/fabro-types/src/run_event/mod.rs:RunEvent"],
      "owns": ["Canonical serde shapes and IDs for runs, stages, sessions, events, settings, projections, sandboxes, integrations, billing, and repositories"],
      "depends_on": ["fabro-model", "fabro-util"],
      "evidence": ["lib/foundation/fabro-types/Cargo.toml — describes shared record structs and enums", "lib/foundation/fabro-types/src/lib.rs — is the single facade for canonical product vocabulary"]
    },
    {
      "id": "fabro-util",
      "name": "Cross-Cutting Runtime and CLI Utilities",
      "purpose": "Provides shared environment, filesystem, shell, terminal, logging, token, error, time, backoff, warning, and glob primitives.",
      "globs": ["lib/foundation/fabro-util/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-util/src/lib.rs", "lib/foundation/fabro-util/src/shell.rs:shell_quote"],
      "owns": ["Low-level helper contracts plus warning, buffered log, environment, home, token, terminal, backoff, error, and glob state"],
      "depends_on": ["fabro-static"],
      "evidence": ["lib/foundation/fabro-util/Cargo.toml — identifies shared runtime and terminal helpers", "lib/foundation/fabro-util/src/run_log.rs — owns the buffered run-log guard lifecycle"]
    },
    {
      "id": "fabro-vault",
      "name": "Secret Vault and SQLite Store",
      "purpose": "Validates and stores workflow-visible secrets in file, memory, or SQLite stores with revision-aware updates and legacy import.",
      "globs": ["lib/foundation/fabro-vault/**"],
      "exclude_globs": [],
      "entry_points": ["lib/foundation/fabro-vault/src/lib.rs:Vault::load", "lib/foundation/fabro-vault/src/store.rs:SecretStore::open"],
      "owns": ["Secret validation and redacted entries, atomic file persistence, SQL CRUD, revisions, snapshots, and legacy import"],
      "depends_on": ["fabro-db", "fabro-static", "fabro-types"],
      "evidence": ["lib/foundation/fabro-vault/Cargo.toml — declares workflow-visible secret storage", "lib/foundation/fabro-vault/src/store.rs:SecretStore::replace_if_revision — exposes concurrent refresh write-back semantics"]
    },
    {
      "id": "fabro-web-app",
      "name": "Fabro Browser Application",
      "purpose": "Builds and runs the React SPA for normal operations and first-run installation.",
      "globs": ["apps/fabro-web/**"],
      "exclude_globs": ["apps/fabro-web/app/components/playground/**"],
      "entry_points": ["apps/fabro-web/app/entry.tsx", "apps/fabro-web/scripts/build.ts"],
      "owns": ["Browser bundle and route graphs, install flow, shared browser runtime and UI, product operations UX, and public assets"],
      "depends_on": ["fabro-api-client-generation", "fabro-http-api-contract", "fabro-workflow-playground"],
      "evidence": ["apps/fabro-web/package.json — declares the React application, custom build, tests, and API-client workspace edge", "apps/fabro-web/app/entry.tsx — creates the browser root and selects normal or install routing"]
    },
    {
      "id": "fabro-workflow-playground",
      "name": "Browser Workflow Playground",
      "purpose": "Provides a self-contained workflow drafting, simulation, chat, visualization, file-generation, download, and run-launch surface.",
      "globs": ["apps/fabro-web/app/components/playground/**"],
      "exclude_globs": [],
      "entry_points": ["apps/fabro-web/app/components/playground/playground.tsx:Playground", "apps/fabro-web/app/components/playground/state/draft.ts:WorkflowDraft"],
      "owns": ["Workflow draft schema and persistence, simulation, canvas, chat adaptation, generated project files, download, and launch controls"],
      "depends_on": ["fabro-http-api-contract", "fabro-web-app"],
      "evidence": ["apps/fabro-web/app/components/playground/playground.tsx:Playground — exposes a prop boundary framed for re-embedding", "apps/fabro-web/app/components/playground/state/persist.ts:usePlaygroundDraft — owns versioned browser persistence"]
    },
    {
      "id": "fabro-marketing-site",
      "name": "Fabro Marketing Site",
      "purpose": "Builds and deploys the public Fabro site with landing content, blog, roadmap, showcase, install resources, and social assets.",
      "globs": ["apps/marketing/**", "test/bin/install_test.sh"],
      "exclude_globs": ["apps/marketing/.vercel/**"],
      "entry_points": ["apps/marketing/src/pages/index.astro", "apps/marketing/astro.config.mjs", "apps/marketing/public/install.sh"],
      "owns": ["Astro routes and layout, content collections, marketing presentation, workflow showcases, install resources, redirects, and deployment configuration"],
      "depends_on": [],
      "evidence": ["apps/marketing/package.json — declares an independent Astro application", "apps/marketing/src/content.config.ts — defines typed roadmap, blog, and showcase collections", "test/bin/install_test.sh — black-box tests the site's canonical install script"]
    },
    {
      "id": "fabro-remotion-video",
      "name": "Fabro Remotion Composition",
      "purpose": "Renders the branded FabroIntro motion-graphics video.",
      "globs": ["apps/remotion/**"],
      "exclude_globs": [],
      "entry_points": ["apps/remotion/src/index.ts", "apps/remotion/src/Root.tsx:RemotionRoot"],
      "owns": ["Composition registration, frame timeline, image format, logo animation, brand assets, and rendered-video lifecycle"],
      "depends_on": [],
      "evidence": ["apps/remotion/package.json — declares an independent Remotion project and render target", "apps/remotion/src/Root.tsx:RemotionRoot — declares composition identity, dimensions, frame rate, and duration"]
    },
    {
      "id": "fabro-api-client-generation",
      "name": "TypeScript API Client Generation",
      "purpose": "Configures, normalizes, and type-checks the generated TypeScript/Axios client for the Fabro HTTP contract.",
      "globs": ["lib/packages/fabro-api-client/package.json", "lib/packages/fabro-api-client/openapitools.json", "lib/packages/fabro-api-client/scripts/**", "lib/packages/fabro-api-client/tests/**", "lib/packages/fabro-api-client/tsconfig.json"],
      "exclude_globs": [],
      "entry_points": ["lib/packages/fabro-api-client/package.json:scripts.generate", "lib/packages/fabro-api-client/scripts/normalize-generated.ts"],
      "owns": ["Generator versions and options, output location, normalization, strict compilation, and hand-written generated-shape invariants"],
      "depends_on": ["fabro-http-api-contract"],
      "evidence": ["lib/packages/fabro-api-client/package.json — invokes pinned OpenAPI Generator against the shared YAML and writes src", "lib/packages/fabro-api-client/tests/principal-exhaustive.ts — asserts a generated union contract at compile time"]
    },
    {
      "id": "public-documentation",
      "name": "Public Documentation",
      "purpose": "Owns authored Fabro user documentation, Mintlify presentation, the repository landing page, and published web-screenshot maintenance.",
      "globs": ["README.md", "docs/public/**", "docs/internal/updating-web-screenshots.md"],
      "exclude_globs": ["docs/public/api-reference/fabro-api.yaml", "docs/public/changelog/**", "docs/public/images/*-workflow.svg", "docs/public/images/tutorial-*.svg", "docs/public/images/brave-search-research.svg", "docs/public/images/how-fabro-works.svg", "docs/public/images/nlspec-conformance.svg", "docs/public/images/plan-implement-readme.svg"],
      "entry_points": ["README.md", "docs/public/docs.json", "docs/public/getting-started/introduction.mdx"],
      "owns": ["Mintlify navigation and presentation, public guides and reference prose, curated images and screenshots, syntax definitions, and repository overview"],
      "depends_on": ["documentation-demo-workflows", "fabro-cli", "fabro-http-api-contract", "public-release-history"],
      "evidence": ["docs/public/docs.json — declares the Mintlify theme, navigation, OpenAPI, and changelog surfaces", "README.md — links to the published docs and embeds their canonical assets", "docs/internal/updating-web-screenshots.md — defines the screenshot capture and verification workflow"]
    },
    {
      "id": "public-release-history",
      "name": "Published Changelog",
      "purpose": "Preserves and publishes dated user-facing release and change records independently of current reference documentation.",
      "globs": ["docs/public/changelog/**"],
      "exclude_globs": [],
      "entry_points": ["docs/public/changelog/2026-07-25.mdx"],
      "owns": ["Dated titles, migration warnings, feature summaries, and historical behavior notes"],
      "depends_on": ["public-documentation"],
      "evidence": ["docs/public/docs.json — gives the changelog its own top-level tab and enumerates every page", "docs/public/changelog/2026-07-25.mdx — is the newest dated release entry at the assessed revision"]
    },
    {
      "id": "fabro-http-api-contract",
      "name": "Fabro HTTP API Contract",
      "purpose": "Defines the OpenAPI-first wire contract used by the server, generated clients, conformance tests, and published API reference.",
      "globs": ["docs/public/api-reference/fabro-api.yaml"],
      "exclude_globs": [],
      "entry_points": ["docs/public/api-reference/fabro-api.yaml"],
      "owns": ["HTTP routes, request and response schemas, authentication declarations, and API-facing wire documentation"],
      "depends_on": [],
      "evidence": ["AGENTS.md — identifies the OpenAPI file as the HTTP interface source of truth", "lib/foundation/fabro-api/build.rs:main — consumes the contract for Rust generation", "lib/apps/fabro-server/tests/it/openapi_conformance.rs — reads it for router conformance"]
    },
    {
      "id": "documentation-demo-workflows",
      "name": "Executable Documentation Demos",
      "purpose": "Provides runnable workflow definitions, configuration, and prompts used by public tutorials and demonstrations.",
      "globs": ["docs/internal/demo/*.fabro", "docs/internal/demo/*.toml", "docs/internal/demo/prompts/**"],
      "exclude_globs": [],
      "entry_points": ["docs/internal/demo/01-hello.fabro", "docs/internal/demo/14-search-imagegen.toml"],
      "owns": ["Executable example graphs, the image-generation run configuration, and shared demo prompt text"],
      "depends_on": ["fabro-cli", "fabro-sandbox", "fabro-workflow"],
      "evidence": ["docs/public/tutorials/hello-world.mdx — invokes a demo workflow path directly", "docs/internal/demo/14-search-imagegen.toml — selects the demo graph, environment, and output assets"]
    },
    {
      "id": "internal-engineering-guidance",
      "name": "Internal Engineering Guidance",
      "purpose": "Records active repository-wide engineering policies and maintained architecture and runtime contracts.",
      "globs": ["docs/internal/*-strategy.md", "docs/internal/*-policy.md", "docs/internal/events.md", "docs/internal/fabro-event-schema-v2-concrete-shape.md", "docs/internal/llm-client-resolution.md", "docs/internal/run-directory-keys.md"],
      "exclude_globs": [],
      "entry_points": ["docs/internal/events-strategy.md", "docs/internal/testing-strategy.md", "docs/internal/error-handling-strategy.md"],
      "owns": ["Logging, events, testing, migrations, secrets, error handling, React effects, panic, event catalog, LLM resolution, parallelism, and run-file guidance"],
      "depends_on": ["fabro-cli", "fabro-config", "fabro-server", "fabro-types", "fabro-web-app", "fabro-workflow"],
      "evidence": ["AGENTS.md — makes the strategy and policy documents mandatory before related changes", "docs/internal/events.md — is the maintained serialized event catalog"]
    },
    {
      "id": "product-context",
      "name": "Internal Product Context",
      "purpose": "Maintains product intent, audience, current shape, success signals, and stable technical and product constraints.",
      "globs": ["docs/internal/product/**"],
      "exclude_globs": [],
      "entry_points": ["docs/internal/product/product-description.md", "docs/internal/product/current-state.md"],
      "owns": ["Business problem, personas, product description, current state, success metrics, and product-level technical requirements"],
      "depends_on": [],
      "evidence": ["docs/internal/product/current-state.md — identifies itself as a concise current product snapshot", "docs/internal/product/technical-requirements.md — records stable constraints for product changes"]
    },
    {
      "id": "twin-openai",
      "name": "OpenAI Protocol Twin",
      "purpose": "Provides a deterministic OpenAI-compatible HTTP service for black-box and protocol-contract tests.",
      "globs": ["test/twin/openai/**"],
      "exclude_globs": [],
      "entry_points": ["test/twin/openai/src/main.rs:main", "test/twin/openai/src/lib.rs:build_app"],
      "owns": ["OpenAI-compatible routes, scenario queues, request logs, deterministic IDs, streaming and failure behavior, admin APIs, and debug UI"],
      "depends_on": ["fabro-http", "fabro-static"],
      "evidence": ["test/twin/openai/Cargo.toml — declares a fake OpenAI-compatible library and binary", "test/twin/openai/src/state.rs:AppState — owns namespaced counters, scenario queues, and request logs"]
    },
    {
      "id": "twin-github",
      "name": "GitHub Protocol Twin",
      "purpose": "Provides an in-process fake GitHub service with seeded mutable state and temporary Git repositories.",
      "globs": ["test/twin/github/**"],
      "exclude_globs": [],
      "entry_points": ["test/twin/github/src/server.rs:TestServer::start", "test/twin/github/src/server.rs:build_router"],
      "owns": ["Fake GitHub App, OAuth, REST, GraphQL, smart-HTTP, repositories, pull requests, releases, projects, tokens, and test keys"],
      "depends_on": ["fabro-http"],
      "evidence": ["test/twin/github/Cargo.toml — declares an independent fake GitHub service", "test/twin/github/src/state.rs:AppState — owns the seeded and mutable GitHub-domain state"]
    },
    {
      "id": "workflow-test-corpus",
      "name": "Shared Workflow Compatibility Fixtures",
      "purpose": "Supplies reusable workflow, compatibility, configuration, prompt, partial, and template inputs to cross-crate tests.",
      "globs": ["test/*.fabro", "test/attractor/**", "test/dot-compatibility/**", "test/templated_inputs/**", "test/templated_unbound_imported/**", "test/templated_unbound_partial/**", "test/templates/**"],
      "exclude_globs": [],
      "entry_points": ["test/simple.fabro", "test/attractor/simple_example.dot", "test/templates/static_dependencies/workflow.fabro"],
      "owns": ["Representative workflow syntax and behavior cases, Attractor compatibility graphs, DOT fixtures, and template dependency trees"],
      "depends_on": [],
      "evidence": ["lib/foundation/fabro-test/src/lib.rs:TestContext::install_fixture — resolves named inputs from the shared test directory", "lib/components/fabro-workflow/tests/it/attractor_compat.rs — enumerates the Attractor corpus"]
    },
    {
      "id": "documentation-workflow-tests",
      "name": "Documentation Workflow Conformance",
      "purpose": "Extracts, curates, validates, preflights, and executes workflow examples and companion files derived from Fabro documentation.",
      "globs": ["test/docs/**"],
      "exclude_globs": [],
      "entry_points": ["test/docs/run_tests.sh", "test/docs/extract_dots.py:main", "test/docs/CHECKLIST.md"],
      "owns": ["Documentation example corpus, extraction and stub generation, validation and execution phases, parallel runner state, and checklist"],
      "depends_on": ["fabro-cli", "fabro-workflow", "public-documentation"],
      "evidence": ["test/docs/run_tests.sh — discovers and runs every tracked documentation workflow", "test/docs/extract_dots.py:main — extracts complete graphs and creates companion fixtures"]
    },
    {
      "id": "swe-bench-evaluation",
      "name": "SWE-Bench Evaluation Workflow",
      "purpose": "Generates Fabro patches for SWE-bench Lite, grades them, monitors runs, builds environments, and records normalized summaries.",
      "globs": ["evals/swe-bench/*.py", "evals/swe-bench/*.fabro", "evals/swe-bench/*.txt", "evals/swe-bench/README.md"],
      "exclude_globs": [],
      "entry_points": ["evals/swe-bench/run_eval.py:main", "evals/swe-bench/evaluate_daytona.py:main", "evals/swe-bench/record_results.py:main"],
      "owns": ["Dataset selection, per-instance workflow generation, sandbox specs, subprocess orchestration, patch extraction, grading, monitoring, and scoreboard schema"],
      "depends_on": ["fabro-cli", "fabro-sandbox", "fabro-workflow"],
      "evidence": ["evals/swe-bench/README.md — defines the generate, evaluate, and record lifecycle", "evals/swe-bench/run_eval.py:run_instance — creates per-instance Fabro inputs and invokes the CLI"]
    },
    {
      "id": "repository-development-policy",
      "name": "Repository Development Policy",
      "purpose": "Defines workspace, dependency, formatting, lint, test, version-control, contributor, and coding-agent development contracts.",
      "globs": [".cargo/**", ".config/**", ".gitattributes", ".gitignore", "AGENTS.md", "CONTRIBUTING.md", "Cargo.toml", "package.json", "bunfig.toml", "clippy.toml", "rustfmt.toml"],
      "exclude_globs": [],
      "entry_points": ["Cargo.toml:[workspace]", "package.json:workspaces", "AGENTS.md"],
      "owns": ["Workspace membership and policy, tool aliases, test profiles, lints and formatting, tracked path treatment, contributor workflow, and agent instructions"],
      "depends_on": ["fabro-build-tooling"],
      "evidence": ["Cargo.toml — declares Rust workspace members, dependencies, lints, and profiles", ".cargo/config.toml — exposes cargo dev and repository test policy", "AGENTS.md — defines architectural and workflow instructions"]
    },
    {
      "id": "repository-ci",
      "name": "Pull-Request and Branch CI",
      "purpose": "Runs branch and pull-request validation for Rust and TypeScript and configures GitHub Actions static validation.",
      "globs": [".github/workflows/rust.yml", ".github/workflows/typescript.yml", ".github/zizmor.yml"],
      "exclude_globs": [],
      "entry_points": [".github/workflows/rust.yml", ".github/workflows/typescript.yml"],
      "owns": ["Path triggers, formatting, linting, generated-doc checks, tests, E2E modes, TypeScript checks, builds, concurrency, and workflow-lint policy"],
      "depends_on": ["fabro-api-client-generation", "fabro-build-tooling", "fabro-web-app", "public-documentation", "repository-development-policy", "twin-openai"],
      "evidence": [".github/workflows/rust.yml — runs Rust formatting, lint, generated-document, workspace test, and twin E2E jobs", ".github/workflows/typescript.yml — checks and builds the Bun workspace and embedded SPA"]
    },
    {
      "id": "release-distribution-automation",
      "name": "Release and Package Publication",
      "purpose": "Cuts nightly releases and publishes CLI archives, GitHub Releases, multi-architecture images, attestations, and Homebrew formulas.",
      "globs": [".github/workflows/nightly.yml", ".github/workflows/release.yml", "installer/**"],
      "exclude_globs": [],
      "entry_points": [".github/workflows/nightly.yml", ".github/workflows/release.yml", "installer/fabro.rb.template"],
      "owns": ["Nightly tag creation, release matrix, archives and checksums, attestations, GitHub Releases, image publication, and Homebrew channels"],
      "depends_on": ["container-packaging-and-deployment", "fabro-build-tooling", "fabro-cli", "fabro-web-app", "repository-development-policy"],
      "evidence": [".github/workflows/release.yml — packages target matrices and publishes releases, images, and formulas", "installer/fabro.rb.template — defines platform archives, checksums, installation, and smoke tests"]
    },
    {
      "id": "container-packaging-and-deployment",
      "name": "Container Packaging and Deployment",
      "purpose": "Packages Fabro as a runtime container and defines local, production, Tailscale, and split-web Compose deployments.",
      "globs": [".dockerignore", ".env.example", "Dockerfile", "docker-compose*.yaml", "docker/**"],
      "exclude_globs": [],
      "entry_points": ["Dockerfile", "docker/entrypoint.sh", "docker-compose.yaml"],
      "owns": ["Container image layout, runtime packages and user, storage and Docker socket handoff, preflight checks, proxy behavior, Compose topology, volumes, ports, and health checks"],
      "depends_on": ["fabro-build-tooling", "fabro-cli", "fabro-server", "fabro-web-app"],
      "evidence": ["Dockerfile — consumes the architecture-specific staged binary and installs the runtime entrypoint", "docker-compose.yaml — defines the primary image, state, socket, port, and health-check contract"]
    },
    {
      "id": "fabro-repository-automation",
      "name": "Fabro-Native Repository Automation",
      "purpose": "Configures Fabro's development environment and named workflow graphs, prompts, permissions, and project defaults for repository work.",
      "globs": [".fabro/Dockerfile", ".fabro/project.toml", ".fabro/workflows/**"],
      "exclude_globs": [".fabro/workflows/goal/workflow.svg"],
      "entry_points": [".fabro/project.toml", ".fabro/workflows/implement-plan/workflow.fabro", ".fabro/workflows/smoke/workflow.fabro"],
      "owns": ["Repository pull-request defaults, Daytona development environment, named workflow catalog, local prompts, GitHub permissions, and maintenance commands"],
      "depends_on": ["fabro-build-tooling", "fabro-cli", "fabro-config", "fabro-github", "fabro-graphviz", "fabro-sandbox", "fabro-workflow", "repository-development-policy"],
      "evidence": [".fabro/project.toml — selects the repository environment, resources, lifecycle, labels, and pull-request defaults", ".fabro/workflows/implement-plan/workflow.fabro — invokes repository Cargo and Bun verification and build tooling"]
    },
    {
      "id": "coding-agent-automation",
      "name": "Repository Coding-Agent Automation",
      "purpose": "Supplies repository-local review prompts, documentation and changelog skills, edit hooks, and an image-generation helper to coding agents.",
      "globs": [".ai/prompts/**", ".claude/settings.json", ".claude/skills/**", "bin/agent/**"],
      "exclude_globs": [".claude/skills/*/watermark"],
      "entry_points": [".ai/prompts/code-review-fast.md", ".claude/skills/changelog/SKILL.md", ".claude/skills/docs/SKILL.md", "bin/agent/imagegen"],
      "owns": ["Code-review orchestration, changelog and documentation maintenance, post-edit formatting hook, and agent image-generation command"],
      "depends_on": ["public-documentation", "public-release-history"],
      "evidence": [".ai/prompts/code-review-deep-1.md — begins the multi-stage review artifact pipeline", ".claude/skills/docs/SKILL.md — defines the code-to-public-documentation update workflow", ".claude/settings.json — registers the repository post-edit Rust formatting hook"]
    }
  ],
  "unmapped_files": [
    "docs/internal/assets/brand/github-header-v2-mesh.png",
    "docs/internal/assets/brand/github-header-v2-mesh.svg",
    "docs/internal/assets/brand/logo/logotype-black.svg",
    "docs/internal/assets/brand/logo/logotype.svg",
    "docs/internal/assets/brand/logo/symbol-black.svg",
    "docs/internal/assets/brand/logo/symbol.svg",
    "docs/internal/assets/brand/palette-lockups.svg",
    "docs/internal/assets/brand/palette-mockup-icons.svg",
    "docs/internal/assets/brand/palette-mockup.svg",
    "docs/internal/assets/brand/palette.png",
    "docs/internal/assets/brand/palette.svg",
    "docs/internal/assets/brand/social-card.html",
    "docs/internal/assets/brand/social-card.png",
    "docs/internal/assets/brand/twitter-card-v0.176.1.html",
    "docs/internal/assets/brand/twitter-card-v0.176.1.png"
  ],
  "coverage": {
    "relevant_file_count": 3104,
    "assigned_file_count": 2256,
    "excluded_file_count": 833,
    "unmapped_file_count": 15
  },
  "open_questions": [
    "Should the currently unreferenced docs/internal/assets brand collateral be assigned to a maintained brand component, or remain explicitly unmapped until an ownership and update workflow is identified?",
    "Should the first-run browser installer become a separate component if its route and state lifecycle gains an independent entry point, rather than remaining inside fabro-web-app?",
    "Should fabro-workflow eventually split run-operation/materialization ownership from pipeline execution if those facades acquire independent state and public contracts?"
  ]
}
