name: react
display_name: React
ecosystem: node
version: 1.0.0
description: Built-in React coding stack pack
maintainer: paqad-ai
detection:
  priority: 50
  manifests:
    - file: package.json
      packages:
        - react
        - react-dom
traits:
  - name: next
    display_name: Next.js
    detect_package: next
    description: React application uses Next.js
  - name: remix
    display_name: Remix
    detect_package: '@remix-run/react'
    description: React application uses Remix
  - name: vite-spa
    display_name: Vite SPA
    detect_package: '@vitejs/plugin-react'
    description: React application uses Vite SPA tooling
  - name: gatsby
    display_name: Gatsby
    detect_package: gatsby
    description: React application uses Gatsby
  - name: tailwind
    display_name: Tailwind
    detect_package: tailwindcss
    description: React application uses Tailwind CSS
toolchains:
  - ecosystem: node
    package_managers:
      - pnpm
      - npm
    lockfiles:
      - pnpm-lock.yaml
      - package-lock.json
mcp_defaults:
  - name: vite-inspector
    when: always
  - name: react-router-mcp
    when: always
  - name: tailwind-mcp
    when: when_trait
    trait: tailwind
pentest:
  file_check_map:
    - glob: src/pages/**
      checks: [permission-boundary-review, business-logic-abuse-review]
    - glob: src/api/**
      checks: [permission-boundary-review, runtime-surface-probing, input-validation-review]
    - glob: src/middleware/**
      checks: [permission-boundary-review, runtime-surface-probing]
    - glob: package-lock.json
      checks: [dependency-advisory-triage]
    - glob: pnpm-lock.yaml
      checks: [dependency-advisory-triage]
    - glob: yarn.lock
      checks: [dependency-advisory-triage]
    - glob: .env*
      checks: [runtime-surface-probing, cryptographic-review]
    - glob: src/auth/**
      checks: [auth-mechanism-review]
    - glob: src/graphql/**
      checks: [input-validation-review, permission-boundary-review]
  audit_commands:
    - command: pnpm audit --json
      parser: node
ast:
  language: typescript
  tree_sitter_grammar: tree-sitter-typescript
  file_extensions: ['.ts', '.tsx', '.js', '.jsx']
testing:
  frameworks:
    - name: vitest
      detect_package: vitest
      run_command: pnpm test
    - name: playwright
      detect_package: '@playwright/test'
      run_command: pnpm playwright test
test_runners:
  - runner_id: vitest
    structured_format: tap
    structured_flags: --reporter=tap
    default_command: pnpm test
    single_test_selector: file
    parallel:
      mode: native
  - runner_id: playwright
    structured_format: junit-xml
    structured_flags: --reporter=junit --outputFile=.paqad/test-results/playwright.xml
    default_command: pnpm playwright test
    output_source: file
    output_path_pattern: .paqad/test-results/playwright.xml
    single_test_selector: file
    parallel:
      mode: native
build_outputs:
  - dist
format_changed:
  - default_command: pnpm format
    script: prettier --write .
    command: pnpm exec prettier --write --ignore-unknown {files}
  - default_command: npm run format
    script: prettier --write .
    command: npx --no-install prettier --write --ignore-unknown {files}
docs:
  overview_template: rules/foundation/guide.md
  conventions_template: rules/conventions/guide.md
module_health:
  source_roots:
    - src
  source_globs: []
  public_api_extractor: null
  test_command: pnpm test
  coverage_format: lcov
  coverage_path: coverage/lcov.info
  test_report_format: junit-xml
  test_report_path: coverage/junit.xml
  git_window_days: 14
visual_evidence:
  frontend_globs:
    - src/**/*.{jsx,tsx}
    - src/**/*.css
