feat(l1): add ai_build session kind (model + migration)

Teaches l1_walk_sessions a new session_kind='ai_build' for AI-generated
decision-tree walks. FK shape matches adhoc: both flow_id and
flow_proposal_id must be NULL. Drops and recreates the two affected CHECK
constraints (session_kind allowlist + target_consistency). Migration
beca7464b6b4 chains from b3358ba0e48c.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-29 14:42:45 -04:00
parent 87236b57d2
commit 16b9abf2e2
3 changed files with 67 additions and 2 deletions

View File

@@ -30,6 +30,7 @@ class L1WalkSession(Base):
- flow: Walking a published flow (flow_id required, flow_proposal_id null).
- proposal: Walking a draft flow proposal (flow_proposal_id required, flow_id null).
- adhoc: Free-form investigation (both flow_id and flow_proposal_id null).
- ai_build: AI-generated decision-tree walk (both flow_id and flow_proposal_id null).
status lifecycle:
- active: Session is in progress.
@@ -45,7 +46,7 @@ class L1WalkSession(Base):
name="ck_l1_walk_sessions_ticket_kind",
),
CheckConstraint(
"session_kind IN ('flow', 'proposal', 'adhoc')",
"session_kind IN ('flow', 'proposal', 'adhoc', 'ai_build')",
name="ck_l1_walk_sessions_session_kind",
),
CheckConstraint(
@@ -55,7 +56,7 @@ class L1WalkSession(Base):
CheckConstraint(
"(session_kind = 'flow' AND flow_id IS NOT NULL AND flow_proposal_id IS NULL) "
"OR (session_kind = 'proposal' AND flow_proposal_id IS NOT NULL AND flow_id IS NULL) "
"OR (session_kind = 'adhoc' AND flow_id IS NULL AND flow_proposal_id IS NULL)",
"OR (session_kind IN ('adhoc', 'ai_build') AND flow_id IS NULL AND flow_proposal_id IS NULL)",
name="ck_l1_walk_sessions_target_consistency",
),
)