Files
MOPC-Portal/docs/round-redesign-architecture-docs/mixed-round-design-implementation-docs/phase-03-admin-control-plane-ux/form-behavior-and-validation.md
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

796 B

Form Behavior and Validation Rules

Universal Rules

  1. Every required field has inline validation.
  2. Every select has deterministic default value.
  3. Save actions are idempotent and disabled while pending.
  4. Unsafe changes surface explicit impact warnings.

Create/Edit Parity Requirements

  • intake windows
  • upload policy
  • file requirements
  • assignment policy
  • filtering policy
  • routing policy
  • live policy

Modal Safety Rules

  1. Modal close must not mutate persisted state.
  2. Non-submit buttons must explicitly set type="button".
  3. Escape/cancel should only dismiss local draft state.

Payload Safety

  • replace raw free-text config where structured selectors exist
  • normalize serialization format for config payloads
  • reject unknown keys in strict mode contracts