Files
Matt 331b67dae0 Round system redesign: Phases 1-7 complete
Full pipeline/track/stage architecture replacing the legacy round system.

Schema: 11 new models (Pipeline, Track, Stage, StageTransition,
ProjectStageState, RoutingRule, Cohort, CohortProject, LiveProgressCursor,
OverrideAction, AudienceVoter) + 8 new enums.

Backend: 9 new routers (pipeline, stage, routing, stageFiltering,
stageAssignment, cohort, live, decision, award) + 6 new services
(stage-engine, routing-engine, stage-filtering, stage-assignment,
stage-notifications, live-control).

Frontend: Pipeline wizard (17 components), jury stage pages (7),
applicant pipeline pages (3), public stage pages (2), admin pipeline
pages (5), shared stage components (3), SSE route, live hook.

Phase 6 refit: 23 routers/services migrated from roundId to stageId,
all frontend components refitted. Deleted round.ts (985 lines),
roundTemplate.ts, round-helpers.ts, round-settings.ts, round-type-settings.tsx,
10 legacy admin pages, 7 legacy jury pages, 3 legacy dialogs.

Phase 7 validation: 36 tests (10 unit + 8 integration files) all passing,
TypeScript 0 errors, Next.js build succeeds, 13 integrity checks,
legacy symbol sweep clean, auto-seed on first Docker startup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 13:57:09 +01:00

1.7 KiB

Phase 01 Schema Specification

Summary

Introduce the canonical orchestration entities and remove legacy dependency assumptions around single roundId progression.

New Canonical Tables

  1. Pipeline
  2. Track
  3. Stage
  4. StageTransition
  5. ProjectStageState
  6. RoutingRule
  7. Cohort
  8. CohortProject
  9. LiveProgressCursor
  10. NotificationPolicy
  11. OverrideAction
  12. DecisionAuditLog

Award Governance Extensions

  • Add DecisionMode = JURY_VOTE | AWARD_MASTER | ADMIN
  • Add award-scoped governance metadata to award track configs
  • Add award winner finalization audit event contracts

Migration Model

  • Build new schema directly as canonical target.
  • Keep migration files deterministic and replay-safe.
  • Do not implement dual-write or compatibility tables.

Required Constraints

  1. trackId + sortOrder unique in Stage
  2. projectId + trackId + stageId unique in ProjectStageState
  3. fromStageId + toStageId unique in StageTransition
  4. cohortId + projectId unique in CohortProject

Required Indexes

  • ProjectStageState(projectId, trackId, state)
  • ProjectStageState(stageId, state)
  • RoutingRule(pipelineId, isActive, priority)
  • StageTransition(fromStageId, priority)
  • DecisionAuditLog(entityType, entityId, createdAt)
  • LiveProgressCursor(stageId, sessionId)

Data Initialization Rules

  • Every seeded project must start with one intake-stage state.
  • Seed must include main track plus at least two award tracks with different routing modes.
  • Seed must include representative roles: admins, jury, applicants, observer, audience contexts.

Integrity Checks

  • No orphan states.
  • No invalid transition targets across pipelines.
  • No duplicate active state rows for same (project, track, stage).