mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-05 08:10:39 +00:00
38 KiB
38 KiB
Rust foundation cartography scout
Assessed revision: 2bcf94fed8a9b429f18d9196fa824711d6f4cb0a (2bcf94fed)
Scope: all 365 tracked files under lib/foundation/**. Root and consumer manifests, the OpenAPI specification, and public consumer entry points were consulted only as boundary evidence and are not part of this scope's coverage counts.
Applicable instructions read: AGENTS.md and CONTRIBUTING.md (CLAUDE.md is a symlink to AGENTS.md).
Boundary approach
- Most foundation crates are proposed as components in their own right because their manifests, crate-root facades, public state or lifecycle, focused tests, and reverse dependency edges describe a distinct responsibility.
build-supportandfabro-devare grouped asfabro-build-tooling: the two-file build-support crate would otherwise be too narrow for a stable assessment, and both crates serve repository build/development lifecycle rather than product runtime.fabro-macrosandfabro-options-metadataare grouped asfabro-macros-metadata: the proc-macro crate cannot expose runtime metadata itself, and theOptionsMetadataderive and runtime visitor model form one compiler/runtime contract. The proc-macro crate'sCombineande2e_testentry points remain part of that compiler-support component.- The small
fabro-http,fabro-proc, andfabro-staticcrates remain separate. Each is a dependency hub with a distinct public policy boundary (HTTP construction/proxy policy, OS process primitives, and shared string registries respectively), so grouping them would mix independent reasons to change. fabro-typesandfabro-utilremain crate-level components. Their crate-root facades and cross-module use are the stable public boundaries available at this revision; a finer file-family split would not have an independent manifest or facade and would create overlapping conceptual ownership.- Production and normal compile-time internal dependencies are listed below. Dev-only edges to
fabro-testare omitted except for the test-support component itself.
Proposed components
fabro-build-tooling — Fabro build and developer tooling
- File count: 23
- Purpose: Runs repository development, build, documentation, SPA, container, benchmark, and release automation and supplies compile-time Git metadata to product build scripts.
- Globs:
lib/foundation/build-support/**,lib/foundation/fabro-dev/** - Exclude globs:
[] - Entry points:
lib/foundation/fabro-dev/src/main.rs:main,lib/foundation/fabro-dev/src/lib.rs:run,lib/foundation/build-support/git_metadata.rs:collect_from,lib/foundation/build-support/git_metadata.rs:cargo_profile - Owns: developer CLI command dispatch; subprocess plans for build/docs/SPA/Docker/release/test benchmarking; reference generation checks; compile-time Git SHA, rerun paths, and Cargo profile discovery.
- Depends on candidates:
fabro-config,fabro-macros-metadata,fabro-util - Evidence:
lib/foundation/fabro-dev/Cargo.toml— declares an internalfabro-devbinary/library and integration-test target behind thedevfeature.lib/foundation/fabro-dev/src/lib.rs:Command— dispatches the build, Docker, docs, release, SPA, and benchmark command families.lib/foundation/fabro-dev/src/commands/mod.rs:PlannedCommand— centralizes the subprocess lifecycle shared by those commands.lib/foundation/fabro-dev/tests/it/main.rs— provides the integration-test composition root for the developer CLI.lib/foundation/build-support/Cargo.tomlandlib/foundation/build-support/git_metadata.rs:BuildGitMetadata— define a build-script-only support crate whose public result is embedded Git/build metadata;lib/apps/fabro-cli/Cargo.tomlandlib/apps/fabro-server/Cargo.tomlconsume it as a build dependency.
fabro-api — Generated API contract and Rust client
- File count: 60
- Purpose: Generates the low-level Rust HTTP client and API type surface from the OpenAPI contract while reusing canonical Fabro domain types and verifying wire/type 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,lib/foundation/fabro-api/src/lib.rs:types - Owns: OpenAPI-to-Progenitor compatibility transformations; generated-client configuration; canonical type replacement map; low-level generated client facade; API/domain type identity and JSON round-trip tests.
- Depends on candidates:
fabro-config,fabro-model,fabro-types - External dependency edges: API types are also replaced with types from the
fabro-automationandfabro-environmentcomponents. - Evidence:
lib/foundation/fabro-api/Cargo.toml— describes generated Rust types and HTTP client and declaresbuild.rsgeneration dependencies.lib/foundation/fabro-api/build.rs:main— readsdocs/public/api-reference/fabro-api.yaml, patches the generator view, registers canonical type replacements, and writesOUT_DIR/codegen.rs.lib/foundation/fabro-api/src/lib.rs:generated— includes the generated file behind a private module and exposesApiClientplus a type facade.lib/foundation/fabro-api/tests/run_event_round_trip.rs:run_event_reuses_canonical_typeand the othertests/*_round_trip.rsfiles — verify type identity and OpenAPI JSON shape across the exported contract.docs/public/api-reference/fabro-api.yaml— repository instructions identify this out-of-scope file as the HTTP contract source of truth.
fabro-auth — Provider credential resolution
- File count: 16
- Purpose: Resolves provider credentials and interpolated headers from environment or vault sources, refreshes OAuth credentials, and drives interactive authentication strategies.
- Globs:
lib/foundation/fabro-auth/** - Exclude globs:
[] - Entry points:
lib/foundation/fabro-auth/src/resolve.rs:CredentialResolver,lib/foundation/fabro-auth/src/credential_source.rs:CredentialSource,lib/foundation/fabro-auth/src/strategy.rs:AuthStrategy,lib/foundation/fabro-auth/src/sql_vault_source.rs:SqlVaultCredentialSource - Owns: provider credential-source precedence; API authorization/header material; configured-provider discovery; OAuth refresh and vault write-back; API-key and Codex-device login strategy state.
- Depends on candidates:
fabro-http,fabro-model,fabro-oauth,fabro-redact,fabro-static,fabro-types,fabro-vault - Evidence:
lib/foundation/fabro-auth/Cargo.toml— describes typed provider credential storage/resolution and declares the model, OAuth, redaction, vault, HTTP, and type dependencies.lib/foundation/fabro-auth/src/lib.rs— exposes sources, resolver, strategies, refresh, and vault adapters as the crate facade.lib/foundation/fabro-auth/src/resolve.rs:CredentialResolver::resolve— composes catalog policy, vault/environment lookup, header interpolation, and OAuth refresh into the provider-facing credential.lib/foundation/fabro-auth/src/credential_source.rs:CredentialSource— provides the source abstraction used by environment, in-memory vault, and SQLite-backed vault implementations.lib/foundation/fabro-auth/src/sql_vault_source.rs:SqlVaultCredentialSource::persist_oauth_refreshes— owns revision-aware persistence of refreshed OAuth state.
fabro-client — High-level Fabro service client
- File count: 9
- Purpose: Provides the high-level authenticated Fabro service client over HTTP or Unix sockets, including endpoint operations, SSE streams, token refresh, target normalization, and local CLI auth storage.
- Globs:
lib/foundation/fabro-client/** - Exclude globs:
[] - Entry points:
lib/foundation/fabro-client/src/client.rs:Client::builder,lib/foundation/fabro-client/src/client.rs:ClientBuilder::connect,lib/foundation/fabro-client/src/target.rs:ServerTarget,lib/foundation/fabro-client/src/auth_store.rs:AuthStore,lib/foundation/fabro-client/src/client.rs:RunEventStream - Owns: connected client transport state; API operation wrappers and error classification; OAuth refresh coordination; HTTP/Unix target canonicalization; SSE buffering; per-server CLI authentication file and locking lifecycle.
- Depends on candidates:
fabro-api,fabro-http,fabro-model,fabro-static,fabro-types,fabro-util - Evidence:
lib/foundation/fabro-client/Cargo.toml— distinguishes the typed high-level client from the generatedfabro-apidependency.lib/foundation/fabro-client/src/client.rs:ClientStateandClient— own the generated client, raw HTTP client, bearer token, base URL, refresh lock, and optional transport reconnection.lib/foundation/fabro-client/src/target.rs:ServerTarget::build_public_http_client— defines the HTTP-versus-Unix-socket transport boundary.lib/foundation/fabro-client/src/auth_store.rs:AuthStore— owns the locked local authentication file lifecycle.lib/foundation/fabro-client/src/lib.rs— exposes the client, streams, credential, error, session, store, and target facade consumed by CLI/server/tool applications.
fabro-config — Layered configuration and runtime paths
- File count: 52
- Purpose: Parses, combines, migrates, validates, and resolves Fabro configuration layers into runtime settings and canonical storage/runtime paths.
- Globs:
lib/foundation/fabro-config/** - Exclude globs:
[] - Entry points:
lib/foundation/fabro-config/src/builders.rs:ServerSettingsBuilder,lib/foundation/fabro-config/src/builders.rs:RunSettingsBuilder,lib/foundation/fabro-config/src/builders.rs:load_server_runtime_settings,lib/foundation/fabro-config/src/lib.rs:load_config_file,lib/foundation/fabro-config/src/resolve/mod.rs - Owns: source-layer structs and merge semantics; built-in defaults; settings parsing/validation/resolution; configuration compatibility migrations; home, storage, runtime-directory, and run-scratch path conventions; daemon/envfile/log-filter configuration helpers.
- Depends on candidates:
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 and its optionalclapintegration.lib/foundation/fabro-config/src/lib.rs— exposes layer types, builders, resolvers, parsing, storage, and runtime path facade.lib/foundation/fabro-config/src/builders.rs— composes defaults and source layers into dense user, server, run, workflow, and model-catalog settings.lib/foundation/fabro-config/src/layers/combine.rsandlib/foundation/fabro-config/src/layers/*.rs— define the layer merge contract and source-specific shapes.lib/foundation/fabro-config/src/migrations.rspluslib/foundation/fabro-config/migrations/*.rs— register and implement the settings-file migration lifecycle.lib/foundation/fabro-config/src/tests/*.rs— exercise resolution independently for root, CLI, project, run, server, and workflow sources.
fabro-core — Generic graph execution kernel
- File count: 13
- Purpose: Executes generic directed workflow 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:ExecutorBuilder,lib/foundation/fabro-core/src/executor.rs:Executor::run,lib/foundation/fabro-core/src/graph.rs:Graph,lib/foundation/fabro-core/src/handler.rs:NodeHandler,lib/foundation/fabro-core/src/lifecycle.rs:RunLifecycle - Owns: in-memory execution state; node/edge traversal loop; handler and lifecycle extension contracts; retry/visit/cancellation decisions; stall-watchdog task lifecycle.
- Depends on candidates:
fabro-types,fabro-util - Evidence:
lib/foundation/fabro-core/Cargo.toml— identifies the crate as the generic workflow execution engine without depending on the higher-level workflow component.lib/foundation/fabro-core/src/graph.rs— defines generic graph, node, and edge contracts.lib/foundation/fabro-core/src/executor.rs:Executor::run— owns the traversal and execution lifecycle.lib/foundation/fabro-core/src/state.rs:ExecutionState— owns current node, outcomes, retries, visits, completed nodes, and context.lib/foundation/fabro-core/src/lifecycle.rs:RunLifecycleandlib/foundation/fabro-core/src/stall.rs:StallWatchdog— expose the lifecycle hooks and owned background timeout task.lib/components/fabro-workflow/Cargo.toml— out-of-scope consumer evidence that the product workflow component adapts this lower-level kernel.
fabro-db — Shared SQLite database foundation
- File count: 9
- Purpose: Opens and migrates the shared SQLite database, manages migration rollback snapshots and private file permissions, and defines the bundled schema migration set.
- 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,lib/foundation/fabro-db/src/lib.rs:Database::health_check,lib/foundation/fabro-db/src/lib.rs:DbPool - Owns: SQLite pool setup; WAL/synchronous/busy-timeout policy; schema migration registry; pre-migration snapshot and legacy-backup paths; database file permissions; shared tables and indexes declared in
migrations/*.sql. - Depends on candidates:
[] - Evidence:
lib/foundation/fabro-db/Cargo.toml— declares a SQLite storage foundation with SQLx migration support.lib/foundation/fabro-db/src/lib.rs:Database— owns database connection, migration, snapshot, health-check, and pool access lifecycle.lib/foundation/fabro-db/migrations/*.sql— define the variables, environments, secrets, MCP servers, automations, and run-projection schema compiled into this crate's migrator.lib/foundation/fabro-db/tests/sqlite.rs— exercises migration, snapshot, permissions, and database behavior at the crate boundary.lib/components/fabro-variable/Cargo.toml,lib/components/fabro-environment/Cargo.toml,lib/components/fabro-mcp-store/Cargo.toml,lib/components/fabro-automation/Cargo.toml, andlib/components/fabro-store/Cargo.toml— out-of-scope manifests show multiple persistence components sharing this foundation.
fabro-http — Shared HTTP transport construction
- File count: 2
- Purpose: Centralizes reqwest type exposure and synchronous/asynchronous HTTP client construction with Fabro's proxy and test no-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:http_client,lib/foundation/fabro-http/src/lib.rs:test_http_client,lib/foundation/fabro-http/src/lib.rs:BlockingHttpClientBuilder - Owns: approved reqwest facade; proxy-policy resolution from
FABRO_HTTP_PROXY_POLICY; async/blocking client builders; deterministic no-proxy test clients. - Depends on candidates:
fabro-static - Evidence:
lib/foundation/fabro-http/Cargo.toml— declares a shared reqwest-wrapper crate.lib/foundation/fabro-http/src/lib.rs:ProxyPolicyandHttpClientBuilder— implement the shared transport-construction policy rather than domain HTTP behavior.- The root
Cargo.tomlexposesfabro-httpas a workspace dependency, and app/component manifests consume it directly, establishing it as a cross-cutting transport boundary.
fabro-macros-metadata — Compile-time macros and option metadata
- File count: 6
- Purpose: Supplies Fabro's derive/attribute macros and the runtime option-metadata model used by generated 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:e2e_test,lib/foundation/fabro-macros/src/lib.rs:derive_combine,lib/foundation/fabro-macros/src/lib.rs:derive_options_metadata,lib/foundation/fabro-options-metadata/src/lib.rs:OptionsMetadata,lib/foundation/fabro-options-metadata/src/lib.rs:OptionSet - Owns: macro input parsing and expansion for E2E mode gates, configuration-layer combination, and option metadata; option visitor/tree representation; flattened lookup/display/serialization of option metadata.
- Depends on candidates:
[] - Evidence:
lib/foundation/fabro-macros/Cargo.toml— declares the proc-macro crate and a dev dependency on the runtime metadata crate.lib/foundation/fabro-macros/src/options_metadata.rs:derive_impl— generates implementations againstfabro_options_metadata::OptionsMetadata.lib/foundation/fabro-options-metadata/src/lib.rs:OptionsMetadataandOptionSet— provide the runtime half of that generated contract.lib/foundation/fabro-macros/tests/options_metadata.rs— tests the proc-macro/runtime pair together.lib/foundation/fabro-config/Cargo.tomlandlib/foundation/fabro-dev/Cargo.toml— out-of-scope consumer evidence for configuration derives and generated option documentation.
fabro-model — LLM model and provider catalog
- File count: 28
- Purpose: Defines provider/model identity, capabilities, billing metadata, embedded catalog data, override merging, and model 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::from_builtin_with_overrides,lib/foundation/fabro-model/src/catalog.rs:Catalog::select,lib/foundation/fabro-model/src/bootstrap_catalog.rs:catalog,lib/foundation/fabro-model/src/lib.rs - Owns: canonical provider/model IDs; embedded provider TOML catalog; catalog indexes and selection state; provider auth declarations; model capabilities, controls, codecs/adapters, reasoning levels, pricing, and billing calculations.
- Depends on candidates:
fabro-static - Evidence:
lib/foundation/fabro-model/Cargo.toml— names provider identity, model metadata, and resolution as the crate responsibility and embeds catalog resources.lib/foundation/fabro-model/src/catalog.rs:BuiltinCatalogTomlandCatalog— load embedded provider files into indexed selection state.lib/foundation/fabro-model/src/catalog/providers/*.toml— are the tracked built-in provider/model catalog sources.lib/foundation/fabro-model/src/ids.rs— defines open-ended provider and model identity shared by auth, config, API, and LLM consumers.lib/foundation/fabro-model/src/billing.rsandsrc/types.rs— define the catalog's billing and public model metadata surfaces.
fabro-oauth — OAuth PKCE and loopback callback flow
- File count: 3
- Purpose: Implements generic OAuth 2.0 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:start_callback_server_with_errors,lib/foundation/fabro-oauth/src/lib.rs:exchange_code,lib/foundation/fabro-oauth/src/lib.rs:refresh_token,lib/foundation/fabro-oauth/examples/login.rs:main - Owns: PKCE verifier/challenge and state generation; authorization URL encoding; ephemeral callback listener/task and shutdown handle; callback validation/result delivery; token response decoding and refresh requests.
- Depends on candidates:
fabro-http,fabro-redact,fabro-static,fabro-util - Evidence:
lib/foundation/fabro-oauth/Cargo.toml— declares a generic OAuth 2.0 PKCE token-acquisition crate.lib/foundation/fabro-oauth/src/lib.rs:CallbackHandle— owns the ephemeral callback server port and shutdown channel.lib/foundation/fabro-oauth/src/lib.rs:run_browser_flow— composes PKCE, callback server, browser, and token exchange into the top-level flow.lib/foundation/fabro-oauth/examples/login.rs— demonstrates the crate as a standalone protocol flow.lib/foundation/fabro-auth/Cargo.tomlandlib/apps/fabro-cli/Cargo.toml— out-of-scope manifests establish both auth-library and direct CLI consumers.
fabro-proc — OS process primitives
- File count: 8
- Purpose: Wraps platform process primitives for signals, process groups, advisory file locking, pre-exec hooks, process liveness, and process-title rewriting.
- Globs:
lib/foundation/fabro-proc/** - Exclude globs:
[] - Entry points:
lib/foundation/fabro-proc/src/lib.rs,lib/foundation/fabro-proc/src/signal.rs:process_running,lib/foundation/fabro-proc/src/signal.rs:sigterm_process_group,lib/foundation/fabro-proc/src/pre_exec.rs:pre_exec_setsid,lib/foundation/fabro-proc/src/title.rs:init - Owns: Unix signal/process-group calls; cross-platform liveness semantics; advisory locks; child pre-exec configuration; captured argv memory and process title state.
- Depends on candidates:
[] - Evidence:
lib/foundation/fabro-proc/Cargo.toml— describes safe wrappers for process-management primitives and compiles the C argv capture helper.lib/foundation/fabro-proc/src/lib.rs— is a platform-gated facade over flock, pre-exec, signal, and title modules.lib/foundation/fabro-proc/c/capture_argv.candlib/foundation/fabro-proc/build.rs— establish the FFI/build boundary for title rewriting.lib/apps/fabro-server/Cargo.toml,lib/apps/fabro-cli/Cargo.toml, andlib/components/fabro-sandbox/Cargo.toml— out-of-scope manifests show independent process-lifecycle consumers.
fabro-redact — Secret and credential redaction
- File count: 8
- Purpose: Detects and redacts credential-like content in strings, URLs, JSON, and JSONL using embedded Gitleaks 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/lib.rs:redacted_url_for_log,lib/foundation/fabro-redact/src/jsonl.rs:redact_jsonl_line,lib/foundation/fabro-redact/src/safe_url.rs:DisplaySafeUrl - Owns: Gitleaks rule source and generated rule table; lazy rule engine; entropy thresholds; overlap merging and redaction marker; JSON field/object skip policy; safe URL display semantics.
- Depends on candidates:
[] - Evidence:
lib/foundation/fabro-redact/Cargo.toml— declares the secret/credential redaction boundary.lib/foundation/fabro-redact/build.rs:mainandlib/foundation/fabro-redact/data/gitleaks.toml— compile the tracked rule source into an untrackedOUT_DIRtable.lib/foundation/fabro-redact/src/lib.rs:redact_string— composes entropy and Gitleaks detection into one public redaction surface.lib/foundation/fabro-redact/src/safe_url.rs:DisplaySafeUrl— owns the raw-versus-display URL credential boundary.lib/foundation/fabro-redact/src/jsonl.rs— applies the scanner to structured event/log content.
fabro-static — Shared static conventions
- File count: 4
- Purpose: Defines dependency-light canonical environment-variable names and the registry that classifies 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,lib/foundation/fabro-static/src/secret_registry.rs:optional_vault_secrets - Owns: canonical process environment string constants; bootstrap-secret set; optional vault-secret set and classification.
- Depends on candidates:
[] - Evidence:
lib/foundation/fabro-static/Cargo.toml— declares a no-dependency static string registry.lib/foundation/fabro-static/src/env_vars.rs:EnvVars— centralizes environment names consumed across applications, components, and foundation crates.lib/foundation/fabro-static/src/secret_registry.rs— defines secret scope independently of vault/auth implementations.- The root
Cargo.tomlexposes the crate as a workspace dependency, andfabro-http,fabro-model,fabro-util, auth, telemetry, server, CLI, sandbox, Slack, and GitHub manifests consume it.
fabro-telemetry — Analytics and crash telemetry
- File count: 11
- Purpose: Initializes analytics/crash reporting, builds anonymous telemetry context, buffers events, and hands delivery to blocking or detached senders 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:init_server,lib/foundation/fabro-telemetry/src/lib.rs:track,lib/foundation/fabro-telemetry/src/lib.rs:shutdown,lib/foundation/fabro-telemetry/src/panic.rs:install_panic_hook - Owns: process-global telemetry state; anonymous CLI/server identifiers; background buffer thread and shutdown join; analytics event shape/context; command sanitization; Segment delivery and detached subprocess handoff; Sentry panic capture.
- Depends on candidates:
fabro-http,fabro-static,fabro-util - Evidence:
lib/foundation/fabro-telemetry/Cargo.toml— declares analytics and crash reporting with HTTP, Sentry, Git, and process-spawn dependencies.lib/foundation/fabro-telemetry/src/lib.rs:Global— owns the process-global sender, identity, context, level, and background thread.lib/foundation/fabro-telemetry/src/buffer.rsandsrc/sender.rs— define buffered delivery and upload boundaries.lib/foundation/fabro-telemetry/src/spawn.rs— owns the detached subprocess handoff used at process exit.lib/foundation/fabro-telemetry/src/panic.rs— owns panic-hook event construction and capture.
fabro-template — Template rendering and dependency discovery
- File count: 4
- Purpose: Renders MiniJinja templates with Fabro context, source-aware diagnostics, rooted include stores, caching/recording wrappers, and static dependency discovery.
- Globs:
lib/foundation/fabro-template/** - Exclude globs:
[] - Entry points:
lib/foundation/fabro-template/src/lib.rs:render_source,lib/foundation/fabro-template/src/lib.rs:render_named,lib/foundation/fabro-template/src/lib.rs:TemplateContext,lib/foundation/fabro-template/src/store.rs:TemplateStore,lib/foundation/fabro-template/src/dependency.rs:discover_static_dependency_closure - Owns: template context/value exposure; strict and lenient render modes; source-location error diagnostics; include/import path safety and rooted resolution; filesystem/bundle/cache/recording stores; static dependency closure.
- Depends on candidates:
fabro-types,fabro-util - Evidence:
lib/foundation/fabro-template/Cargo.toml— declares the shared MiniJinja rendering boundary.lib/foundation/fabro-template/src/lib.rs:TemplateContextandTemplateError— define the public render input and source-aware failure surface.lib/foundation/fabro-template/src/store.rs:TemplateStoreandTemplateIncludeResolver— define source loading and root containment.lib/foundation/fabro-template/src/dependency.rs— owns include/import extraction and dependency-closure discovery.lib/components/fabro-agent/Cargo.toml,lib/components/fabro-workflow/Cargo.toml, andlib/components/fabro-manifest/Cargo.toml— out-of-scope manifests show agent, workflow, and manifest consumers.
fabro-test — Shared integration-test infrastructure
- File count: 3
- Purpose: Provides isolated Fabro CLI/server integration-test contexts, twin/live mode control, process and environment harnessing, snapshot normalization, and HTTP assertion helpers.
- 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,lib/foundation/fabro-test/src/lib.rs:apply_test_isolation,lib/foundation/fabro-test/src/lib.rs:test_http_client,lib/foundation/fabro-test/src/http_assert.rs:expect_reqwest_status - Owns: per-test temporary home/storage/session/server lifecycle; E2E mode and live-secret gating; subprocess environment isolation; test daemon coordination; snapshot filters; twin service setup; Axum/reqwest response assertion diagnostics.
- Depends on candidates:
fabro-config,fabro-http,fabro-proc,fabro-static,fabro-types,fabro-util - External dependency edges: depends on the
fabro-install,twin-openai, andtwin-githubtest components. - Evidence:
lib/foundation/fabro-test/Cargo.toml— identifies the crate as integration-test utilities and declares test-only component/twin dependencies.lib/foundation/fabro-test/src/lib.rs:TestContext— owns isolated test paths, session state, Fabro binary invocation, filters, and managed server/storage state.lib/foundation/fabro-test/src/lib.rs:TestModeandapply_test_isolation— define the twin/live/strict and environment-isolation contracts used by thee2e_testmacro.lib/foundation/fabro-test/src/http_assert.rs— centralizes response consumption and diagnostic assertion behavior for both server and network tests.- Workspace app/component manifests list
fabro-testonly in dev-dependency/test contexts.
fabro-types — Shared product contracts and state records
- File count: 78
- Purpose: Defines the serializable identifiers, settings records, run/session/event/state projections, and other shared product vocabulary exchanged across Fabro crates and API 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,lib/foundation/fabro-types/src/run.rs:RunSpec,lib/foundation/fabro-types/src/settings/mod.rs,lib/foundation/fabro-types/src/outcome.rs:Outcome,lib/foundation/fabro-types/src/status.rs:RunStatus - Owns: canonical serde shapes and IDs for runs, stages, sessions, events, transcripts, outcomes, status, projections, sandboxes, MCP servers, variables, secrets, integrations, billing, repositories, pull requests, and dense/resolved settings; feature-gated shared test fixtures.
- Depends on candidates:
fabro-model,fabro-util - Evidence:
lib/foundation/fabro-types/Cargo.toml— describes shared record structs/enums and exposes onlyclapandtest-supportfeature boundaries.lib/foundation/fabro-types/src/lib.rs— is a single crate facade that re-exports the canonical shared product vocabulary across its module families.lib/foundation/fabro-types/src/run_event/mod.rsandsrc/run_event/*.rs— define the event contract consumed by workflow, storage, server, client, and API code.lib/foundation/fabro-types/src/settings/mod.rsandsrc/settings/*.rs— define the resolved settings contract consumed byfabro-configand runtime components.lib/foundation/fabro-types/tests/*.rs— verify serde and method contracts for run specs, events, failures, sandbox models, inventory, and stage handlers.lib/foundation/fabro-api/build.rsand its round-trip tests — boundary evidence that API generation intentionally reuses these types rather than generating parallel DTOs.
fabro-util — Cross-cutting runtime and CLI utilities
- File count: 24
- Purpose: Provides shared environment, filesystem, shell, terminal, logging, token, error-rendering, time, backoff, warning, and workspace-glob primitives used across Fabro crates.
- 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,lib/foundation/fabro-util/src/printer.rs:Printer,lib/foundation/fabro-util/src/home.rs:Home,lib/foundation/fabro-util/src/run_log.rs:BufferedFileAppender,lib/foundation/fabro-util/src/workspace_glob.rs:WorkspaceGlobSet - Owns: low-level helper contracts and any helper-owned state, including the global warning set, buffered run-log guard, environment abstraction, home directory, dev/session token formats, terminal styles/printers, backoff policy, error-chain rendering, and workspace glob compilation.
- Depends on candidates:
fabro-static - Evidence:
lib/foundation/fabro-util/Cargo.toml— identifies shared terminal/path/environment/runtime helpers and has no product-component dependencies.lib/foundation/fabro-util/src/lib.rs— exposes the helper modules directly as the public crate facade.lib/foundation/fabro-util/src/shell.rs— owns shell quoting/joining used by workflow and developer tooling.lib/foundation/fabro-util/src/run_log.rsandsrc/warnings.rs— contain the component's stateful log-guard and warning-registry lifecycles.lib/foundation/fabro-util/tests/dev_token.rsandtests/error_chain.rs— test stable token-file and error-rendering contracts.
fabro-vault — Secret vault and SQLite secret store
- File count: 4
- Purpose: Validates and stores workflow-visible secrets in file/in-memory vaults or the shared SQLite database, including revision-aware updates and one-time 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,lib/foundation/fabro-vault/src/store.rs:SecretStore::apply,lib/foundation/fabro-vault/src/store.rs:SecretStore::snapshot,lib/foundation/fabro-vault/src/store.rs:import_legacy_json_once - Owns: secret-name/type validation; redacted secret entry representation; atomic JSON vault persistence; SQL secret CRUD; secret revisions and compare-and-swap refresh updates; snapshots; legacy JSON import and backup lifecycle.
- Depends on candidates:
fabro-db,fabro-static,fabro-types - Evidence:
lib/foundation/fabro-vault/Cargo.toml— declares the workflow-visible secret vault and its database/type dependencies.lib/foundation/fabro-vault/src/lib.rs:Vault— owns file-backed or detached in-memory entries and atomic write behavior.lib/foundation/fabro-vault/src/store.rs:SecretStore— owns the SQLite-backed secret operations and snapshots.lib/foundation/fabro-vault/src/store.rs:SecretStore::replace_if_revision— exposes the revision boundary used for concurrent OAuth refresh write-back.lib/foundation/fabro-vault/tests/store.rs— exercises store CRUD, validation, snapshots, and legacy import at the public boundary.
Coverage
| Proposed component | Tracked files |
|---|---|
fabro-build-tooling |
23 |
fabro-api |
60 |
fabro-auth |
16 |
fabro-client |
9 |
fabro-config |
52 |
fabro-core |
13 |
fabro-db |
9 |
fabro-http |
2 |
fabro-macros-metadata |
6 |
fabro-model |
28 |
fabro-oauth |
3 |
fabro-proc |
8 |
fabro-redact |
8 |
fabro-static |
4 |
fabro-telemetry |
11 |
fabro-template |
4 |
fabro-test |
3 |
fabro-types |
78 |
fabro-util |
24 |
fabro-vault |
4 |
| Total assigned | 365 |
- Relevant tracked files: 365
- Assigned: 365
- Excluded: 0
- Unmapped: 0
- Overlap: 0; every proposed glob is a whole crate directory, and the two grouped components use disjoint crate directories.
- Tracked exclusions: none. Build outputs such as
OUT_DIR/codegen.rsandOUT_DIR/rules_generated.rsare generated but are not tracked and therefore are not part of the 365-file inventory. No vendored or generated tracked source was found in scope. - Unmapped files:
[]
External boundary evidence consulted
These files are outside the scoped inventory and are neither assigned nor counted as unmapped:
Cargo.toml— workspace membership, workspace dependencies, and lint policy.docs/public/api-reference/fabro-api.yaml— source contract read byfabro-api/build.rs.lib/apps/fabro-cli/Cargo.toml,lib/apps/fabro-server/Cargo.toml,lib/apps/fabro-mcp-server/Cargo.toml— application-level reverse dependency evidence.- Relevant
lib/components/*/Cargo.tomlmanifests — reverse dependency evidence for execution, storage, schema, types, templates, auth, HTTP, process, test, and API foundations.
Genuine boundary questions
- Should
build-supportremain grouped withfabro-devin the final map, or should its compile-time consumer boundary make it a separate two-file component despite the resulting assessment granularity? - Should
fabro-macrosandfabro-options-metadataremain one component? TheirOptionsMetadatacompiler/runtime contract supports grouping, whileCombineande2e_testalso connect the proc-macro crate to configuration and test infrastructure. - Should the SQL migration files under
fabro-db/migrations/**remain with the shared database foundation, or should reconciliation assign table-specific migrations to the variable, environment, MCP-store, automation, and run-store components that own the corresponding query behavior? The current proposal follows compile-time ownership byfabro-db. - Is
fabro-typesan acceptable single assessment component, or does the final map need stable subcomponents for settings, run/event/projection, and other contract families? This revision exposes one manifest and one broad crate facade, so this scout found no non-overlapping public boundary for such a split.