From d4536b0f96a0a5c368329469dc244c02f1479dbd Mon Sep 17 00:00:00 2001 From: Madhura68 Date: Wed, 29 Apr 2026 20:05:02 +0200 Subject: [PATCH] chore: bump vendor/scrum4me to M13 (ClaudeJob + ClaudeWorker) and sync schema --- prisma/schema.prisma | 96 ++++++++++++++++++++++++++++++++++++-------- vendor/scrum4me | 2 +- 2 files changed, 81 insertions(+), 17 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 368ee67..89367b4 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -19,6 +19,21 @@ enum StoryStatus { DONE } +enum PbiStatus { + READY + BLOCKED + DONE +} + +enum ClaudeJobStatus { + QUEUED + CLAIMED + RUNNING + DONE + FAILED + CANCELLED +} + enum TaskStatus { TO_DO IN_PROGRESS @@ -56,14 +71,16 @@ model User { created_at DateTime @default(now()) updated_at DateTime @updatedAt roles UserRole[] - api_tokens ApiToken[] - products Product[] - todos Todo[] - product_members ProductMember[] - assigned_stories Story[] @relation("StoryAssignee") - login_pairings LoginPairing[] + api_tokens ApiToken[] + products Product[] + todos Todo[] + product_members ProductMember[] + assigned_stories Story[] @relation("StoryAssignee") + login_pairings LoginPairing[] asked_questions ClaudeQuestion[] @relation("ClaudeQuestionAsker") answered_questions ClaudeQuestion[] @relation("ClaudeQuestionAnswerer") + claude_jobs ClaudeJob[] + claude_workers ClaudeWorker[] @@index([active_product_id]) @@map("users") @@ -80,13 +97,15 @@ model UserRole { } model ApiToken { - id String @id @default(cuid()) - user User @relation(fields: [user_id], references: [id], onDelete: Cascade) - user_id String - token_hash String @unique - label String? - created_at DateTime @default(now()) - revoked_at DateTime? + id String @id @default(cuid()) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) + user_id String + token_hash String @unique + label String? + created_at DateTime @default(now()) + revoked_at DateTime? + claimed_jobs ClaudeJob[] + claude_worker ClaudeWorker? @@index([token_hash]) @@map("api_tokens") @@ -109,8 +128,9 @@ model Product { stories Story[] todos Todo[] members ProductMember[] - active_for_users User[] @relation("UserActiveProduct") + active_for_users User[] @relation("UserActiveProduct") claude_questions ClaudeQuestion[] + claude_jobs ClaudeJob[] @@unique([user_id, name]) @@unique([user_id, code]) @@ -127,12 +147,14 @@ model Pbi { description String? priority Int sort_order Float - created_at DateTime @default(now()) - updated_at DateTime @updatedAt + status PbiStatus @default(READY) + created_at DateTime @default(now()) + updated_at DateTime @updatedAt stories Story[] @@unique([product_id, code]) @@index([product_id, priority, sort_order]) + @@index([product_id, status]) @@map("pbis") } @@ -213,12 +235,54 @@ model Task { created_at DateTime @default(now()) updated_at DateTime @updatedAt claude_questions ClaudeQuestion[] + claude_jobs ClaudeJob[] @@index([story_id, priority, sort_order]) @@index([sprint_id, status]) @@map("tasks") } +model ClaudeJob { + id String @id @default(cuid()) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) + user_id String + product Product @relation(fields: [product_id], references: [id], onDelete: Cascade) + product_id String + task Task @relation(fields: [task_id], references: [id], onDelete: Cascade) + task_id String + status ClaudeJobStatus @default(QUEUED) + claimed_by_token ApiToken? @relation(fields: [claimed_by_token_id], references: [id], onDelete: SetNull) + claimed_by_token_id String? + claimed_at DateTime? + started_at DateTime? + finished_at DateTime? + branch String? + summary String? + error String? + created_at DateTime @default(now()) + updated_at DateTime @updatedAt + + @@index([user_id, status]) + @@index([task_id, status]) + @@index([status, claimed_at]) + @@map("claude_jobs") +} + +model ClaudeWorker { + id String @id @default(cuid()) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) + user_id String + token ApiToken @relation(fields: [token_id], references: [id], onDelete: Cascade) + token_id String + product_id String? + started_at DateTime @default(now()) + last_seen_at DateTime @default(now()) + + @@unique([token_id]) + @@index([user_id, last_seen_at]) + @@map("claude_workers") +} + model ProductMember { id String @id @default(cuid()) product Product @relation(fields: [product_id], references: [id], onDelete: Cascade) diff --git a/vendor/scrum4me b/vendor/scrum4me index 1cb5772..73087e9 160000 --- a/vendor/scrum4me +++ b/vendor/scrum4me @@ -1 +1 @@ -Subproject commit 1cb5772edd9b2ab75b551b73c6f95591ec6c0f32 +Subproject commit 73087e9705abbe4ad53278ea95cb377cccd1e1f3