catalogYaml top-level constant

String const catalogYaml

Implementation

const String catalogYaml =
    r'''# The Capability Catalog: the single source of truth for every selectable
# option (FR-018). Versioned engine-compatibility data (§60.3), loaded by
# catalog_loader.dart like the recipe lock (R-201). Binds FR-014, FR-019-021,
# contracts/capability-catalog-schema.md.
#
# IDs are stable and never reused/renumbered (FR-019, INV-CAT2). Dependency
# versions are pins the recipe lock resolves (C-3) — verified against
# pub.dev on 2026-07-21; Recommended-stack pins (flutter_bloc, go_router,
# get_it, dio, freezed/json_serializable, build_runner) match the shipped
# lock/recipe_lock.json exactly (SC-007 continuity).
#
# Options with supportLevel "unsupported" and a "deferred" validation
# requirement are declared but MUST NOT be reachable in the shipped
# configurator (FR-013, FR-064, INV-DEF1) — SupportLevel has no separate
# "deferred" value, so Deferred reuses the existing not-selectable mechanism
# (C-4/INV-SL2) rather than inventing a new enum member (ponytail: the
# guarantee SC-002 needs — "unsupported/deferred selectable count = 0" — is
# already exactly what "unsupported" gives us).
catalogVersion: "3.0.0"
entries:
  # --- Application Foundation (all single-select) ---
  - capabilityId: foundation.app_initialization
    optionId: simple
    displayName: Simple Initialization
    description: Start the app directly with a small explicit entry point.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/app_initialization_simple]
    validationRequirements: []

  - capabilityId: foundation.app_initialization
    optionId: bootstrap
    displayName: Bootstrap Pattern
    description: Run ordered asynchronous setup before starting the app.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/app_initialization_bootstrap]
    validationRequirements: []

  - capabilityId: foundation.app_initialization
    optionId: production_bootstrap
    displayName: Production Bootstrap Pipeline
    description: Bootstrap with guarded zones, error capture, and ordered services.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/app_initialization_production_bootstrap]
    validationRequirements: []

  - capabilityId: foundation.environment_config
    optionId: dart_define
    displayName: Dart Define
    description: Read compile-time environment values with String.fromEnvironment.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/environment_config_dart_define]
    validationRequirements: []

  - capabilityId: foundation.environment_config
    optionId: flutter_dotenv
    displayName: Flutter Dotenv
    description: Load environment values from an application asset.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: flutter_dotenv, version: "6.0.1"}
    devDependencies: []
    recipeRefs: [recipe/foundation/environment_config_flutter_dotenv]
    validationRequirements: []

  - capabilityId: foundation.environment_config
    optionId: envied
    displayName: Envied
    description: Generate typed environment accessors at build time.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: envied, version: "1.1.1"}
    devDependencies:
      - {name: envied_generator, version: "1.1.1"}
    recipeRefs: [recipe/foundation/environment_config_envied]
    validationRequirements: ["requires:build_runner"]

  - capabilityId: foundation.flavors
    optionId: basic
    displayName: Basic Flavors
    description: Model dev, uat, and prod environments in Dart.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/flavors_basic]
    validationRequirements: []

  - capabilityId: foundation.flavors
    optionId: advanced
    displayName: Advanced Flavors
    description: Configure Android product flavors and iOS schemes.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/flavors_advanced]
    validationRequirements: []

  - capabilityId: foundation.logging
    optionId: logger
    displayName: Logger
    description: Structured application logging with the logger package.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: logger, version: "2.7.0"}
    devDependencies: []
    recipeRefs: [recipe/foundation/logging_logger]
    validationRequirements: []

  - capabilityId: foundation.logging
    optionId: talker
    displayName: Talker
    description: Logging and error reporting with retained history.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: talker, version: "5.1.19"}
    devDependencies: []
    recipeRefs: [recipe/foundation/logging_talker]
    validationRequirements: []

  - capabilityId: foundation.error_handling
    optionId: basic
    displayName: Basic Exception Handling
    description: Handle expected exceptions with native Dart constructs.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/error_handling_basic]
    validationRequirements: []

  - capabilityId: foundation.error_handling
    optionId: failure_result
    displayName: Failure / Result Pattern
    description: Return typed success or failure values from fallible work.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/error_handling_failure_result]
    validationRequirements: []

  - capabilityId: foundation.error_handling
    optionId: global_boundary
    displayName: Global Error Boundary
    description: Capture Flutter, platform, and uncaught asynchronous errors.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/error_handling_global_boundary]
    validationRequirements: []

  - capabilityId: foundation.theme
    optionId: basic_themedata
    displayName: Basic ThemeData
    description: Define a compact light ThemeData configuration.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/theme_basic_themedata]
    validationRequirements: []

  - capabilityId: foundation.theme
    optionId: material3
    displayName: Material 3 Theme System
    description: Centralize Material 3 color and typography choices.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/theme_material3]
    validationRequirements: []

  - capabilityId: foundation.theme
    optionId: design_tokens
    displayName: Design Token Theme System
    description: Express reusable color, spacing, and typography tokens.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/foundation/theme_design_tokens]
    validationRequirements: []

  - capabilityId: foundation.localization
    optionId: gen_l10n
    displayName: Flutter gen-l10n
    description: SDK-generated localization delegates from ARB files.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: intl, version: "0.20.2"}
    devDependencies: []
    recipeRefs: [recipe/l10n/gen_l10n]
    validationRequirements: ["requires:flutter_gen_l10n"]

  - capabilityId: foundation.localization
    optionId: easy_localization
    displayName: Easy Localization
    description: Load and switch JSON translations with easy_localization.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: easy_localization, version: "3.0.8"}
    devDependencies: []
    recipeRefs: [recipe/foundation/localization_easy_localization]
    validationRequirements: []

  - capabilityId: foundation.project_structure
    optionId: feature_first
    displayName: Feature First
    description: Group code by feature. Stored convention; generation is unchanged in 0.3.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/org/feature_first]
    validationRequirements: []

  - capabilityId: foundation.project_structure
    optionId: layer_first
    displayName: Layer First
    description: Group code by layer. Stored convention; feature generation consumes it later.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: []
    validationRequirements: []

  - capabilityId: foundation.project_structure
    optionId: hybrid
    displayName: Hybrid
    description: Combine feature and layer grouping. Stored convention; feature generation consumes it later.
    supportLevel: official
    selectionType: single
    requiredCapabilities: []
    conflictingCapabilities: []
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: []
    validationRequirements: []

  # --- Architecture Depth (single, required) ---
  - capabilityId: org.architecture_depth
    optionId: simple
    displayName: Simple
    description: Feature-First without a Clean-architecture layer split.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/org/depth_simple]
    validationRequirements: []

  - capabilityId: org.architecture_depth
    optionId: clean
    displayName: Clean Architecture
    description: Feature-First with data/domain/presentation layers.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/org/depth_clean]
    validationRequirements: []

  # --- State Management (single, required) ---
  - capabilityId: org.state_management
    optionId: bloc
    displayName: Bloc / Cubit
    description: Predictable state with flutter_bloc.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: flutter_bloc, version: "9.1.1"}
    devDependencies: []
    recipeRefs: [recipe/state/bloc]
    validationRequirements: []

  - capabilityId: org.state_management
    optionId: riverpod
    displayName: Riverpod
    description: Compile-safe, testable state and dependency graph.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: flutter_riverpod, version: "3.3.2"}
    devDependencies: []
    recipeRefs: [recipe/state/riverpod]
    validationRequirements: []

  - capabilityId: org.state_management
    optionId: setstate
    displayName: setState / Minimal
    description: Plain StatefulWidget state — no state-management library.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/state/setstate]
    validationRequirements: []

  # --- Routing (single, required; "skip" conditional on FR-015) ---
  - capabilityId: org.routing
    optionId: go_router
    displayName: GoRouter
    description: Declarative, URL-based routing.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: go_router, version: "14.8.1"}
    devDependencies: []
    recipeRefs: [recipe/routing/go_router]
    validationRequirements: []

  - capabilityId: org.routing
    optionId: navigator_minimal
    displayName: Navigator / Minimal
    description: A single explicit Navigator route table — no router package.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/routing/navigator_minimal]
    validationRequirements: []

  - capabilityId: org.routing
    optionId: skip
    displayName: Skip
    description: No routing recipe — offered only when the project still passes every gate (FR-015).
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: []
    validationRequirements: ["conditional:routing_skip_gate"]

  # --- Backend and Networking (multi, optional) ---
  - capabilityId: org.backend
    optionId: rest_dio
    displayName: REST API with Dio
    description: HTTP client with interceptors, cancellation, and transforms.
    supportLevel: official
    selectionType: multi
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: dio, version: "5.10.0"}
    devDependencies: []
    recipeRefs: [recipe/backend/rest_dio]
    validationRequirements: []

  - capabilityId: org.backend
    optionId: rest_http
    displayName: REST API with package:http
    description: The lightweight, official Dart HTTP client.
    supportLevel: official
    selectionType: multi
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: http, version: "1.6.0"}
    devDependencies: []
    recipeRefs: [recipe/backend/rest_http]
    validationRequirements: []

  - capabilityId: org.backend
    optionId: firebase
    displayName: Firebase foundation
    description: Firebase core initialization (Deferred — see T078; no matrix row yet).
    supportLevel: unsupported
    selectionType: multi
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: []
    dependencies:
      - {name: firebase_core, version: "4.12.1"}
    devDependencies: []
    recipeRefs: []
    validationRequirements: [deferred]

  - capabilityId: org.backend
    optionId: supabase
    displayName: Supabase foundation
    description: Supabase client initialization.
    supportLevel: official
    selectionType: multi
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: supabase_flutter, version: "2.16.0"}
    devDependencies: []
    recipeRefs: [recipe/backend/supabase]
    validationRequirements: []

  # --- Local Storage (multi, optional) ---
  - capabilityId: org.local_storage
    optionId: shared_preferences
    displayName: SharedPreferences
    description: Simple key-value storage.
    supportLevel: official
    selectionType: multi
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: shared_preferences, version: "2.5.5"}
    devDependencies: []
    recipeRefs: [recipe/storage/shared_preferences]
    validationRequirements: []

  - capabilityId: org.local_storage
    optionId: secure
    displayName: Flutter Secure Storage
    description: Encrypted key-value storage backed by Keychain/Keystore.
    supportLevel: official
    selectionType: multi
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: flutter_secure_storage, version: "10.3.1"}
    devDependencies: []
    recipeRefs: [recipe/storage/secure]
    validationRequirements: []

  - capabilityId: org.local_storage
    optionId: drift
    displayName: Drift / SQLite
    description: Typed, reactive SQL database on top of SQLite.
    supportLevel: official
    selectionType: multi
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: drift, version: "2.34.2"}
      - {name: drift_flutter, version: "0.3.1"}
      - {name: sqlite3, version: "3.5.0"}
    devDependencies:
      - {name: drift_dev, version: "2.34.4"}
      - {name: build_runner, version: "2.5.4"}
    recipeRefs: [recipe/storage/drift]
    validationRequirements: ["requires:build_runner"]

  # --- Data Modeling and Serialization (single, required) ---
  - capabilityId: org.data_modeling
    optionId: freezed_json
    displayName: freezed + json_serializable
    description: Immutable models with generated unions, copyWith, and JSON.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: freezed_annotation, version: "2.4.4"}
      - {name: json_annotation, version: "4.9.0"}
    devDependencies:
      - {name: freezed, version: "2.5.8"}
      - {name: json_serializable, version: "6.9.5"}
      - {name: build_runner, version: "2.5.4"}
    recipeRefs: [recipe/model/freezed_json]
    validationRequirements: ["requires:build_runner"]

  - capabilityId: org.data_modeling
    optionId: json_serializable
    displayName: json_serializable only
    description: Generated JSON (de)serialization without freezed unions.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: json_annotation, version: "4.9.0"}
    devDependencies:
      - {name: json_serializable, version: "6.9.5"}
      - {name: build_runner, version: "2.5.4"}
    recipeRefs: [recipe/model/json_serializable]
    validationRequirements: ["requires:build_runner"]

  - capabilityId: org.data_modeling
    optionId: manual_models
    displayName: Manual models
    description: Hand-written model classes — no codegen.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/model/manual]
    validationRequirements: []

  # --- Dependency Injection (single, required; riverpod_di conditional on FR-016) ---
  - capabilityId: org.dependency_injection
    optionId: get_it
    displayName: GetIt
    description: Service-locator style dependency injection.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: get_it, version: "8.3.0"}
    devDependencies: []
    recipeRefs: [recipe/di/get_it]
    validationRequirements: []

  - capabilityId: org.dependency_injection
    optionId: riverpod_di
    displayName: Riverpod-based injection
    description: Providers as the injection graph — selectable only when State Management = Riverpod (FR-016).
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies:
      - {name: flutter_riverpod, version: "3.3.2"}
    devDependencies: []
    recipeRefs: [recipe/di/riverpod]
    validationRequirements: ["conditional:requires_state_management_riverpod"]

  - capabilityId: org.dependency_injection
    optionId: manual_injection
    displayName: Manual injection
    description: Constructor-passed dependencies — no DI container.
    supportLevel: official
    selectionType: single
    flutterConstraint: ">=3.41.0 <3.42.0"
    dartConstraint: "^3.11.0"
    platformSupport: [android, ios, web, macos, windows, linux]
    dependencies: []
    devDependencies: []
    recipeRefs: [recipe/di/manual]
    validationRequirements: []
''';