# SpecVerse v4.0 Implementation Manifest
# Defines technology stack using implementation types and capability mappings

manifests:
  {{projectNameKebab}}Implementation:
    specVersion: "4.0.0"
    name: "{{projectNameKebab}}-implementation"
    version: "1.0.0"
    description: "Development implementation manifest for {{projectName}}"

    # v4.0: Deployment reference
    deployment:
      deploymentSource: "../specs/main.specly"
      deploymentName: "development"

    # v4.0: Default technology stack mappings
    defaultMappings:
      storage: "PostgreSQL15"
      controller: "PrismaServices"
      service: "PrismaServices"
      routing: "FastifyAPI"
      orm: "PrismaORM"
      communication: "EventEmitter"

    # v4.0: Map deployment instance capabilities to implementation types
    capabilityMappings:
      # API Layer - Fastify REST API (routing)
      - capability: "api.rest"
        instanceFactory: "FastifyAPI"

      # Business Logic Layer - PrismaServices (controllers + services)
      - capability: "service.controller"
        instanceFactory: "PrismaServices"

      - capability: "service.business"
        instanceFactory: "PrismaServices"

      - capability: "service.crud"
        instanceFactory: "PrismaServices"

      # Data Layer - PostgreSQL + Prisma
      - capability: "storage.database"
        instanceFactory: "PostgreSQL15"

      # ORM - Prisma (schema + client)
      - capability: "orm.schema"
        instanceFactory: "PrismaORM"

      - capability: "orm.client"
        instanceFactory: "PrismaORM"

      - capability: "orm.prisma"
        instanceFactory: "PrismaORM"

      # Events - In-memory for development
      - capability: "messaging.pubsub"
        instanceFactory: "EventEmitter"

      - capability: "messaging.events"
        instanceFactory: "EventEmitter"

      # Validation - Zod
      - capability: "validation.runtime"
        instanceFactory: "ZodValidation"

      - capability: "validation.schema"
        instanceFactory: "ZodValidation"

      # Project Scaffolding (generates package.json, tsconfig.json, etc.)
      - capability: "project.scaffold"
        instanceFactory: "GenericScaffold"

      # Application Entry Point (generates src/main.ts)
      - capability: "app.entrypoint"
        instanceFactory: "GenericApp"

      # Frontend - React
      # Slim shell backed by @specverse/runtime — dev views render from the
      # embedded spec at runtime. To eject to a fully standalone starter
      # kit, swap ReactAppRuntime for ReactAppStarter.
      - capability: "app.frontend"
        instanceFactory: "ReactAppRuntime"

      # CLI
      - capability: "cli.commands"
        instanceFactory: "CommanderJS"

    # v4.0: Configuration section
    configuration:
      # Environment-specific settings
      environments:
        development:
          database:
            provider: "sqlite"
            url: "file:./dev.db"
          server:
            port: 3000
            host: "localhost"
            logLevel: "debug"
          features:
            hotReload: true
            debugMode: true

        test:
          database:
            provider: "sqlite"
            url: "file:./test.db"
          server:
            port: 3001
            host: "localhost"
            logLevel: "silent"

        production:
          database:
            provider: "postgresql"
            url: "${DATABASE_URL}"
          server:
            port: "${PORT:-8080}"
            host: "0.0.0.0"
            logLevel: "info"
          middleware:
            rateLimit:
              max: 1000
              timeWindow: "1 minute"
            compression: true

      # Authentication configuration
      authentication:
        enabled: true
        provider: "jwt"
        secret: "${JWT_SECRET}"
        expiresIn: "7d"

      # CORS configuration
      cors:
        origin: "*"  # Change to specific domains in production
        credentials: true
        methods: ["GET", "POST", "PUT", "DELETE", "PATCH"]

      # Validation configuration
      validation:
        enabled: true
        provider: "zod"
        stripUnknown: true
        abortEarly: false

      # Logging configuration
      logging:
        level: "info"
        pretty: true
        destinations:
          - type: "console"
          - type: "file"
            path: "logs/{{projectNameKebab}}.log"

      # Code generation options
      generation:
        outputDir: "./generated/code"
        typescript: true
        validation: true
        tests: false
        documentation: true
        metadata:
          idStrategy: "uuid"
          auditFields: true
          softDeleteStrategy: "deletedAt"
