Scrum4Me/prisma/migrations/20260507103000_sprint_implementation/migration.sql
Madhura68 d41e01f2e6 PBI-50 F1: SPRINT_BATCH execution-strategy + cross-repo blocker + branch-resume
Schema-migratie + Scrum4Me-side wiring voor de nieuwe SPRINT_IMPLEMENTATION-flow:

- prisma: PrStrategy ADD VALUE 'SPRINT_BATCH'; ClaudeJobKind ADD VALUE
  'SPRINT_IMPLEMENTATION'; nieuwe enum SprintTaskExecutionStatus; ClaudeJob.lease_until
  + status_lease_until index; SprintRun.previous_run_id (self-relation
  SprintRunChain) voor branch-hergebruik bij resume; nieuwe sprint_task_executions
  tabel met frozen plan_snapshot + verify_required_snapshot per task in scope.
- actions/sprint-runs.ts startSprintRunCore: nieuwe blocker-type 'task_cross_repo'
  voor SPRINT_BATCH (pre-flight rejecteert sprints met cross-repo task_url).
  Bij SPRINT_BATCH: één SPRINT_IMPLEMENTATION ClaudeJob (geen per-task loop).
- actions/sprint-runs.ts resumePausedSprintRunAction: SPRINT_BATCH-pad met
  remaining-execution-check; bij onafgemaakt werk → nieuwe SprintRun met
  previous_run_id + run.branch hergebruikt + nieuwe SPRINT_IMPLEMENTATION-job.
  Oude SprintRun → CANCELLED. Bestaande PBI-49 P0 scope-DONE pad ongewijzigd.
- actions/products.ts updatePrStrategyAction: accepteert SPRINT_BATCH.
- components/products/pr-strategy-select.tsx: drie opties met helptekst,
  gebruikt @prisma/client PrStrategy ipv lokaal type.
- components/sprint/sprint-run-controls.tsx: BLOCKER_LABELS + blockerHref
  voor task_cross_repo.

Migratie applied op Neon. Type-check + 532 tests groen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 13:04:03 +02:00

68 lines
2.7 KiB
SQL

-- PBI-50: SPRINT_IMPLEMENTATION single-session sprint runner
-- Adds:
-- - PrStrategy.SPRINT_BATCH (third option)
-- - ClaudeJobKind.SPRINT_IMPLEMENTATION (fifth kind)
-- - SprintTaskExecutionStatus enum
-- - ClaudeJob.lease_until (for heartbeat-driven stale detection)
-- - SprintRun.previous_run_id (for branch reuse on resume)
-- - sprint_task_executions table (frozen scope-snapshot per claim)
-- AlterEnum: PrStrategy ADD VALUE (Postgres requires this outside transaction;
-- Prisma migrate handles it)
ALTER TYPE "PrStrategy" ADD VALUE 'SPRINT_BATCH';
-- AlterEnum: ClaudeJobKind ADD VALUE
ALTER TYPE "ClaudeJobKind" ADD VALUE 'SPRINT_IMPLEMENTATION';
-- CreateEnum
CREATE TYPE "SprintTaskExecutionStatus" AS ENUM ('PENDING', 'RUNNING', 'DONE', 'FAILED', 'SKIPPED');
-- AlterTable
ALTER TABLE "claude_jobs" ADD COLUMN "lease_until" TIMESTAMP(3);
-- AlterTable
ALTER TABLE "sprint_runs" ADD COLUMN "previous_run_id" TEXT;
-- CreateTable
CREATE TABLE "sprint_task_executions" (
"id" TEXT NOT NULL,
"sprint_job_id" TEXT NOT NULL,
"task_id" TEXT NOT NULL,
"order" INTEGER NOT NULL,
"plan_snapshot" TEXT NOT NULL,
"verify_required_snapshot" "VerifyRequired" NOT NULL,
"verify_only_snapshot" BOOLEAN NOT NULL DEFAULT false,
"base_sha" TEXT,
"head_sha" TEXT,
"status" "SprintTaskExecutionStatus" NOT NULL DEFAULT 'PENDING',
"verify_result" "VerifyResult",
"verify_summary" TEXT,
"skip_reason" TEXT,
"started_at" TIMESTAMP(3),
"finished_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "sprint_task_executions_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "sprint_task_executions_sprint_job_id_order_idx" ON "sprint_task_executions"("sprint_job_id", "order");
-- CreateIndex
CREATE UNIQUE INDEX "sprint_task_executions_sprint_job_id_task_id_key" ON "sprint_task_executions"("sprint_job_id", "task_id");
-- CreateIndex
CREATE INDEX "claude_jobs_status_lease_until_idx" ON "claude_jobs"("status", "lease_until");
-- CreateIndex
CREATE UNIQUE INDEX "sprint_runs_previous_run_id_key" ON "sprint_runs"("previous_run_id");
-- AddForeignKey
ALTER TABLE "sprint_runs" ADD CONSTRAINT "sprint_runs_previous_run_id_fkey" FOREIGN KEY ("previous_run_id") REFERENCES "sprint_runs"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "sprint_task_executions" ADD CONSTRAINT "sprint_task_executions_sprint_job_id_fkey" FOREIGN KEY ("sprint_job_id") REFERENCES "claude_jobs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "sprint_task_executions" ADD CONSTRAINT "sprint_task_executions_task_id_fkey" FOREIGN KEY ("task_id") REFERENCES "tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;