feat(PBI-67/ST-1297): datamodel-velden voor job-model-selectie

Voegt 8 nieuwe optionele velden toe verspreid over Product, Task en
ClaudeJob ten dienste van de override-cascade:

  task.requires_opus → job.requested_* → product.preferred_* → kind-default

Bestaande rijen krijgen NULL (Product/ClaudeJob) of false (Task) en
vallen daarmee terug op de kind-defaults uit de resolver (ST-1298).

Migration is additief: alleen ALTER TABLE ADD COLUMN, geen RENAME of
DROP. Bestaande factories en seed-script blijven werken zonder
aanpassing omdat alle nieuwe velden default-waardes hebben.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Janpeter Visser 2026-05-08 11:00:07 +02:00
parent f233dd815e
commit 946ac8f960
2 changed files with 26 additions and 0 deletions

View file

@ -0,0 +1,18 @@
-- PBI-67: Model + mode-selectie per ClaudeJob-kind
--
-- Additieve migration: nieuwe optionele kolommen op products, tasks en
-- claude_jobs voor de override-cascade
-- task.requires_opus → job.requested_* → product.preferred_* → kind-default
-- Bestaande rijen krijgen NULL (Product/ClaudeJob) of false (Task.requires_opus)
-- en vallen daarmee terug op kind-defaults uit de resolver.
ALTER TABLE "products" ADD COLUMN "preferred_model" TEXT;
ALTER TABLE "products" ADD COLUMN "thinking_budget_default" INTEGER;
ALTER TABLE "products" ADD COLUMN "preferred_permission_mode" TEXT;
ALTER TABLE "tasks" ADD COLUMN "requires_opus" BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE "claude_jobs" ADD COLUMN "requested_model" TEXT;
ALTER TABLE "claude_jobs" ADD COLUMN "requested_thinking_budget" INTEGER;
ALTER TABLE "claude_jobs" ADD COLUMN "requested_permission_mode" TEXT;
ALTER TABLE "claude_jobs" ADD COLUMN "actual_thinking_tokens" INTEGER;

View file

@ -208,6 +208,9 @@ model Product {
definition_of_done String
auto_pr Boolean @default(false)
pr_strategy PrStrategy @default(SPRINT)
preferred_model String?
thinking_budget_default Int?
preferred_permission_mode String?
archived Boolean @default(false)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@ -363,6 +366,7 @@ model Task {
status TaskStatus @default(TO_DO)
verify_only Boolean @default(false)
verify_required VerifyRequired @default(ALIGNED_OR_PARTIAL)
requires_opus Boolean @default(false)
// Override product.repo_url for branch/worktree/push purposes. Set when
// a task targets a different repo than its parent product (e.g. an
// MCP-server task tracked under the main product's PBI). Falls back to
@ -408,6 +412,10 @@ model ClaudeJob {
output_tokens Int?
cache_read_tokens Int?
cache_write_tokens Int?
requested_model String?
requested_thinking_budget Int?
requested_permission_mode String?
actual_thinking_tokens Int?
plan_snapshot String?
base_sha String?
head_sha String?