Competition/Round architecture: full platform rewrite (Phases 1-9)
All checks were successful
Build and Push Docker Image / build (push) Successful in 7m45s
All checks were successful
Build and Push Docker Image / build (push) Successful in 7m45s
Replace Pipeline/Stage system with Competition/Round architecture. New schema: Competition, Round (7 types), JuryGroup, AssignmentPolicy, ProjectRoundState, DeliberationSession, ResultLock, SubmissionWindow. New services: round-engine, round-assignment, deliberation, result-lock, submission-manager, competition-context, ai-prompt-guard. Full admin/jury/applicant/mentor UI rewrite. AI prompt hardening with structured prompts, retry logic, and injection detection. All legacy pipeline/stage code removed. 4 new migrations + seed aligned. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
# 10. Monaco Reference Configuration (Example)
|
||||
|
||||
This is an example of how a Monaco 2026 competition would be configured in the redesigned system.
|
||||
|
||||
## 1) Program Profile
|
||||
- Program: Monaco Ocean Protection Challenge 2026
|
||||
- Categories: `STARTUP`, `BUSINESS_CONCEPT`
|
||||
- Main pipeline: `mopc-2026-main`
|
||||
- Award tracks: configurable per award
|
||||
|
||||
## 2) Stage Purpose Layout (Main Track)
|
||||
|
||||
1. `submission_r1_intake`
|
||||
- type: `INTAKE`
|
||||
- open: 2026-02-01
|
||||
- close: 2026-05-31
|
||||
- late policy: `flag`
|
||||
|
||||
2. `eligibility_filter`
|
||||
- type: `FILTER`
|
||||
- trigger: admin or auto-on-close
|
||||
|
||||
3. `jury1_evaluation`
|
||||
- type: `EVALUATION`
|
||||
- open: 2026-06-05
|
||||
- close: 2026-06-25
|
||||
- jury binding: `MAIN_SEMIFINAL`
|
||||
|
||||
4. `submission_r2_intake`
|
||||
- type: `INTAKE`
|
||||
- open: 2026-06-28
|
||||
- close: 2026-07-20
|
||||
|
||||
5. `jury2_evaluation`
|
||||
- type: `EVALUATION`
|
||||
- open: 2026-07-24
|
||||
- close: 2026-08-10
|
||||
- jury binding: `MAIN_FINALIST`
|
||||
|
||||
6. `jury3_live_finals`
|
||||
- type: `LIVE_FINAL`
|
||||
- event date window: 2026-09-01
|
||||
- jury binding: `MAIN_LIVE_FINALS`
|
||||
|
||||
7. `final_confirmation`
|
||||
- type: `SELECTION`
|
||||
- rule: unanimous active quorum + one admin approval
|
||||
- absent juror handling: replace juror or mark as excused (admin-audited)
|
||||
- admin override: enabled for both category and award scopes (mandatory reason/audit)
|
||||
- unlock policy: super-admin only
|
||||
|
||||
8. `results_publication`
|
||||
- type: `RESULTS`
|
||||
- publication mode: manual
|
||||
|
||||
## 3) Jury Definitions
|
||||
|
||||
- `MAIN_SEMIFINAL` (display label example: `Jury 1 - Technical Panel`)
|
||||
- Purpose: semi-final selection
|
||||
- members: list of judges
|
||||
- `MAIN_FINALIST` (display label example: `Jury 2 - Selection Panel`)
|
||||
- Purpose: finalist selection
|
||||
- members: list of judges (overlap allowed)
|
||||
- `MAIN_LIVE_FINALS` (display label example: `Jury 3 - Live Finals Panel`)
|
||||
- Purpose: live final voting + deliberation
|
||||
- members: list of judges (overlap allowed)
|
||||
|
||||
## 4) Assignment Policy Example
|
||||
|
||||
### Jury1 policy
|
||||
- required reviews: 3
|
||||
- default cap mode: `SOFT`
|
||||
- default cap: 25
|
||||
- buffer: 10
|
||||
- startup/concept bias target per judge: 50/50 (suggestive, not deterministic)
|
||||
|
||||
### Per-judge override example
|
||||
- judge A: hard cap 18
|
||||
- judge B: soft cap 22 buffer 8
|
||||
- judge C: startup-biased preference (100/0 suggestion, not hard rule)
|
||||
|
||||
## 5) Submission Round Requirements
|
||||
|
||||
### Round 1 (`submission_r1_intake`)
|
||||
Slots:
|
||||
- `r1_exec_summary` (required)
|
||||
- `r1_pitch_deck` (required)
|
||||
- `r1_video_pitch` (optional)
|
||||
|
||||
### Round 2 (`submission_r2_intake`)
|
||||
Slots:
|
||||
- `r2_business_plan` (required)
|
||||
- `r2_financials` (required)
|
||||
- `r2_impact_metrics` (optional)
|
||||
|
||||
Behavior:
|
||||
- applicants edit current round only
|
||||
- previous round read-only
|
||||
- admin can replace with provenance
|
||||
|
||||
## 6) Award Mode Examples
|
||||
|
||||
### Example A: Separate Pool, Pull-Out
|
||||
- award: “Blue Innovation Prize”
|
||||
- participationMode: `SEPARATE_POOL`
|
||||
- routingBehavior: `PULL_FROM_MAIN`
|
||||
- pull-out confirmation: admin-confirmed before removal from main pool
|
||||
|
||||
### Example B: Dual Track
|
||||
- award: “Community Impact Award”
|
||||
- participationMode: `DUAL_TRACK`
|
||||
- routingBehavior: `KEEP_IN_MAIN`
|
||||
|
||||
### Example C: Single-Judge Award
|
||||
- award: “Chair’s Special Recognition”
|
||||
- winnerDecisionMode: `SINGLE_JUDGE_DECIDES`
|
||||
- singleJudgeUserId: configured award judge
|
||||
- candidate set: only projects remaining eligible after award filtering
|
||||
|
||||
## 7) Mentoring Layer Example
|
||||
|
||||
Eligibility:
|
||||
- finalist projects with `wantsMentorship=true`
|
||||
|
||||
Permissions:
|
||||
- mentor and team can upload/comment private files
|
||||
- team lead + admin can promote file to official submission
|
||||
|
||||
Promotion artifact:
|
||||
- records source file, target slot, actor, timestamp, resulting official file id
|
||||
|
||||
## 8) Live Finals Example
|
||||
|
||||
- voting mode: criteria
|
||||
- audience voting: enabled for end-of-category only
|
||||
- audience totals visible to Jury3 during deliberation: true
|
||||
- tie-break order:
|
||||
1. highest Jury3 weighted score
|
||||
2. admin-declared tie-break (if still tied)
|
||||
|
||||
## 9) Final Confirmation Example
|
||||
|
||||
- decision rule: unanimous (categories + jury-based awards)
|
||||
- active quorum must submit confirmation vote (absent juror can be replaced or marked excused)
|
||||
- admin approval required after quorum unanimity
|
||||
- admin override allowed for category or award outcomes with mandatory reason code and audit snapshot
|
||||
- result lock snapshot generated immediately on finalize
|
||||
- unlock available only to super admins with mandatory reason + unlock event audit
|
||||
|
||||
## 10) Invite Flow Example
|
||||
|
||||
### Admin invite (jury)
|
||||
- create user with role `JURY_MEMBER`
|
||||
- attach `JuryMembership: MAIN_FINALIST` (custom display label in UI)
|
||||
- create optional `AssignmentIntent` for stage `jury2_evaluation` and/or direct policy-validated assignments
|
||||
- send invitation
|
||||
- on accept: jury onboarding -> cap/bias preference override if allowed (disclosure shown that bias is suggestive only)
|
||||
|
||||
### Team invite
|
||||
- create/attach `TeamMember`
|
||||
- send invitation
|
||||
- on accept: applicant context landing
|
||||
Reference in New Issue
Block a user