{
  "configVersion": 1,
  "project": {
    "name": "my-project",
    "description": ""
  },
  "paths": {
    "tasksRoot": "spine-tasks"
  },
  "baseBranch": "main",
  "testing": {
    "build": "npm run typecheck",
    "test": "npm test",
    "testWithCoverage": "npm run coverage:check",
    "review": ""
  },
  "agents": {
    "worker": { "model": "cursor/auto", "thinking": "high" },
    "reviewer": {
      "model": "cursor/auto",
      "thinking": "medium",
      "plan": { "model": "google/gemini-flash-latest", "thinking": "low" }
    },
    "supervisor": {
      "enabled": false,
      "model": "inherit",
      "pollIntervalMs": 30000,
      "autoNudge": false,
      "thinking": "off"
    }
  },
  "lanes": {
    "maxParallel": 3,
    "queueExcess": true,
    "workerBackend": "subprocess",
    "workerOutputMaxBytes": 262144,
    "workerOutputTailLines": 200,
    "retainWorkerOutputOnSuccess": false,
    "streamWorkerOutputLive": false,
    "workerLiveLogMaxBytes": 262144,
    "stallTimeoutMinutes": 120,
    "stallGraceAfterProgressMinutes": 30,
    "heartbeatIntervalMinutes": 10,
    "progressSnapshotIntervalMinutes": 2,
    "checkpointWarningMinutes": 10,
    "extendGraceOnFileScope": false,
    "autoCommitOnStall": false
  },
  "dashboard": {
    "port": 8109
  },
  "orchestrator": {
    "attachedMilestonePollMs": 2000,
    "sequencePollMs": 5000,
    "dashboardPollMs": 2000
  },
  "gates": {
    "requireBeforeIntegrate": true,
    "collectBuildEvidence": true,
    "collectTestEvidence": true
  },
  "integrate": {
    "isolatedWorktree": true,
    "allowHumanOnBaseBranch": "warn"
  },
  "review": {
    "requireFinalVerdict": true,
    "maxFinalAttempts": 3
  },
  "handoff": {
    "path": ".spine/handoff.md",
    "autoWriteOn": []
  },
  "metrics": {
    "enabled": true,
    "path": ".spine/run-metrics.jsonl"
  },
  "contract": {
    "mode": "required",
    "legacyTaskIdPrefixes": ["TP-"]
  },
  "_examples": {
    "worktreeSetupHook": "scripts/spine-worktree-setup-flutter.sh",
    "_worktreeSetupHookNote": "Optional Flutter: symlink gitignored pubspec assets from SPINE_PROJECT_ROOT into lane worktrees — see docs/adoption/flutter-worktree-guide.md",
    "_testingScriptsNote": "testing.build/test/testWithCoverage/review may use a relative scripts/*.sh path (validated sandbox, no shell metacharacters); e.g. scripts/run-gate-evidence.sh. testing.review is optional and, when set, runs through the same validated executor and is included in the gate evidence bundle."
  },
  "worktreeSetupHook": "",
  "worktreeSetupIgnorePaths": [".venv"],
  "referenceDocs": ["docs/constitution.md"],
  "standards": [],
  "neverLoad": []
}
