# 02. Monaco Flow Target Architecture

## 1) Target Architecture Intent
Design the competition as a **typed, policy-driven stage machine** where each step in your Monaco flow maps to an explicit stage purpose and policy contract.

Core idea:
- Keep existing `Pipeline/Track/Stage` spine
- Add explicit purpose codes and policy entities
- Drive every major feature (invite, docs, assignment, review, mentoring, finals, confirmation) from the same stage context

## 2) Canonical Stage Purpose Map

For the main track, define explicit purpose keys (not just generic stage type):

1. `submission_r1_intake`
2. `eligibility_filter`
3. `jury1_evaluation`
4. `submission_r2_intake`
5. `jury2_evaluation`
6. `finals_prep_collaboration` (mentoring layer; may be non-blocking stage or overlay policy)
7. `jury3_live_finals`
8. `final_confirmation`
9. `results_publication`

`StageType` remains useful (`INTAKE`, `FILTER`, `EVALUATION`, `LIVE_FINAL`, `RESULTS`) but **stage purpose key is authoritative** for business behavior.

## 3) Actor Spaces (Target)

### 3.1 Applicants / Teams
- Apply during open submission windows
- Upload required documents for active submission stage
- Access prior round docs read-only
- Request mentoring (if enabled)
- Collaborate with mentor in private file/chat workspace
- Mark eligible mentoring file as official submission (when allowed)

### 3.2 Admins
- Configure stages, deadlines, rubrics, file requirements, assignment policies
- Trigger/monitor AI filtering and assignment
- Override eligibility, assignments, advancement, finalist/winner outcomes
- Run live finals controls (stage manager)
- Perform final confirmation and official result lock

### 3.3 Judges
- Belong to explicit juries (`Jury 1`, `Jury 2`, `Jury 3`, award juries)
- Review assigned projects in active windows
- Access prior + current docs as policy allows
- Submit scores, feedback, notes
- Participate in deliberation/final confirmation where required

### 3.4 Mentors
- Assigned to eligible finalist teams that requested mentoring
- Use mentor-team private workspace (chat, files, threaded comments)
- Help refine docs; optionally approve/promote files if policy permits

### 3.5 Audience (Optional)
- Votes during configured live finals windows
- Only when enabled for stage/category/session

## 4) End-To-End Flow Blueprint (Mapped To Monaco)

## 4.1 Stage A: Submission Round 1 (`submission_r1_intake`)

### Inputs
- Program application settings
- Stage deadline and late policy
- Required document set for round 1

### Runtime Rules
- Applicant can edit/upload only while submission window policy allows
- Late behavior from policy:
  - strict cutoff
  - accepted as late with flag
  - accepted in grace window only
- Admin can always inspect and intervene

### Outputs
- Project classified as `STARTUP` or `BUSINESS_CONCEPT`
- Round 1 submission bundle + metadata + late flag

## 4.2 Stage B: AI Eligibility Filter (`eligibility_filter`)

### Inputs
- Eligible candidate pool from Stage A
- Deterministic rules + AI criteria text + confidence thresholds

### Runtime Rules
- Deterministic checks first, then AI evaluation (if enabled)
- Outcome buckets:
  - `eligible`
  - `ineligible`
  - `manual_review`
- Admin override always allowed with reason code + audit

### Outputs
- Eligible pool for Jury 1
- Ineligible pool retained and visible to admins with evidence

## 4.3 Stage C: Jury 1 Evaluation (`jury1_evaluation`)

### Inputs
- Jury 1 membership
- Assignment policy per juror (cap mode, cap value, soft buffer, category-bias preference)
- Rubric/version and deadline window

### Runtime Rules
- Assignment engine obeys per-judge policies:
  - hard cap: never exceed cap
  - soft cap: target cap, may go to cap+buffer
- Startup/concept ratio is treated as a **soft bias** for fair distribution, not a deterministic constraint
- Jury onboarding must clearly state that ratio preference is a suggestion, not a hard rule
- After all soft-cap judges reach cap+buffer:
  - unassigned projects move to manual assignment queue
- Judges see countdown, project list, round 1 documents
- Submit score, feedback, notes

### Outputs
- Ranking and distribution views per category
- AI recommended shortlist per category
- Admin final advancement decision -> Semi-finalists

## 4.4 Stage D: Submission Round 2 (`submission_r2_intake`)

### Inputs
- Semi-finalists selected from Stage C
- New round 2 document requirements

### Runtime Rules
- Applicant edits only round 2 requirements
- Round 1 docs are read-only for applicants
- Judges/admin can see both bundles (with clear labeling)
- Admin retains full document management authority across rounds

### Outputs
- Round 1 locked bundle + Round 2 final bundle per semi-finalist

## 4.5 Stage E: Jury 2 Evaluation (`jury2_evaluation`)

### Inputs
- Jury 2 membership + assignment policies
- Access to round 1 + round 2 docs
- Special award governance configuration

### Runtime Rules
- Same assignment controls as Jury 1
- Judges score and annotate
- Special awards run in configured mode:
  - mode A: separate pool (optional pull-out, admin-confirmed)
  - mode B: dual eligibility while staying in main pool
- Award juries can overlap with main juries
- Some awards can run in single-judge decision mode (award master / designated judge)
- Admin can override finalist recommendations

### Outputs
- Finalists per category
- Award shortlist/winners progression state per award policy

## 4.6 Stage F: Mentoring Collaboration Layer (`finals_prep_collaboration` overlay)

This is a collaboration layer, not a judging gate.

### Inputs
- Finalists requesting mentoring
- Mentor assignments

### Runtime Rules
- Private mentor-team workspace:
  - messaging/chat
  - file upload by mentor/team
  - threaded file comments
- Promotion to official submission supported where policy allows:
  - promotion authority: team lead and admin
  - create provenance record (who, when, source file, target requirement)
  - keep immutable audit trail

### Outputs
- Improved finalist submissions
- Complete mentoring collaboration + promotion history

## 4.7 Stage G: Live Finals Jury 3 (`jury3_live_finals`)

### Inputs
- Finalist list/order
- Jury 3 members
- Live voting settings and optional audience voting config

### Runtime Rules
- Admin stage manager can set active presenter, open/close vote windows
- Jury 3 sees:
  - all finalist info and historical context allowed by policy
  - prior jury summaries (if permitted)
  - real-time note-taking and live voting controls
- Audience vote optional; if enabled, shown during deliberation as configured

### Outputs
- Live vote records + deliberation notes + optional audience totals

## 4.8 Stage H: Final Confirmation (`final_confirmation`)

### Inputs
- Jury 3 voting outcomes
- Deliberation notes
- Award outcomes

### Runtime Rules
- Explicit confirmation workflow:
  - all required jury confirmations captured (default unanimous for both category winners and award winners, based on active quorum)
  - if a required juror is absent, admin can either replace the juror or mark absence so they do not count toward required confirmations (fully audited)
  - exception: awards configured for single-judge mode follow single-judge confirmation flow
  - one admin approval required to finalize
- Admin override path is supported for both category and award outcomes with mandatory reason/audit evidence
- On finalize:
  - winner rankings locked
  - result set immutable (unlock allowed only through super-admin workflow with explicit audit reason)

### Outputs
- Official winners per category
- Official award winners
- Immutable final decision audit package

## 4.9 Stage I: Results Publication (`results_publication`)
- Controlled publication policy (manual or policy-based)
- Public/private output controls
- Report export snapshot references final lock version

## 5) Cross-Cutting Target Behaviors

### 5.1 Deadlines And Reminder Contracts
Every stage with time windows must have:
- user-visible countdown in role dashboards
- reminder policy (3-day, 24h, 1h defaults; configurable)
- reliable dedupe via reminder logs

### 5.2 Manual Override Everywhere (With Structured Reasoning)
Admins can override:
- filtering outcomes
- assignment decisions
- advancement and finalist picks
- award eligibility and winner selection
- final winner confirmation

Each override requires:
- reason code
- optional reason text
- before/after snapshot
- actor and timestamp

### 5.3 Multi-Jury Explicitness
Juries become explicit objects with memberships and stage bindings:
- main juries and award juries use purpose bindings with custom labels per program
- overlap allowed
- assignments and dashboards are jury-context-aware

### 5.4 Multi-Round Document Visibility
- Applicants edit current stage only
- Applicants read-only previous stage docs
- Judges view current + previous by policy
- Admin full control

### 5.5 Platform-Wide Integration Rule
No function may bypass stage context:
- invite + onboarding
- assignment generation
- document submission/locking
- live voting
- status timeline
- notifications

All are resolved through a central `competition context resolver` (program + pipeline + stage purpose + jury context + user role).

## 6) Simplicity + Customizability Strategy

### 6.1 Simplicity
- Fixed Monaco-compatible stage purpose skeleton (minimal mandatory stages)
- Strong defaults and pre-built templates for most competitions
- Role-specific UX views that only expose relevant controls

### 6.2 Customizability
- Policy overrides per stage, jury, award, and user
- Configurable late policies, cap buffers, top-N finalists, audience voting behavior
- Award mode per award (`separate_pool` vs `dual_track`)
- Final confirmation rules configurable (unanimous, supermajority, quorum fallback handling, etc.)

## 7) Target Outcome
The redesigned architecture should let admins run Monaco OPC end-to-end **without ad hoc interpretation** and with full traceability, while still allowing controlled per-program policy customization.
