175 lines
14 KiB
Markdown
175 lines
14 KiB
Markdown
# 05. Platform-Wide Integration Matrix
|
|
|
|
## 1) Integration Rule
|
|
Every function must consume the same competition context contract:
|
|
- program
|
|
- pipeline/track
|
|
- stage + `purposeKey`
|
|
- jury context (when relevant)
|
|
- submission round context (when relevant)
|
|
- resolved policy set
|
|
|
|
No page/router may hardcode Monaco behavior without passing through this context resolver.
|
|
|
|
## 2) Critical Integration Domains
|
|
|
|
1. Identity and invitation/onboarding
|
|
2. Pipeline/stage orchestration
|
|
3. Assignment/evaluation
|
|
4. Documents/submission bundles
|
|
5. Awards and routing
|
|
6. Mentoring collaboration
|
|
7. Live finals and final confirmation
|
|
8. Notifications, timeline, reporting, exports
|
|
|
|
## 3) Admin UX Integration Matrix
|
|
|
|
| Surface | Current Behavior | Required Integration To Redesigned Architecture |
|
|
|---|---|---|
|
|
| `src/app/(admin)/admin/rounds/pipeline/[id]/wizard/page.tsx` | Generic stage setup | Must require `purposeKey` assignment and validate Monaco skeleton completeness |
|
|
| `src/app/(admin)/admin/rounds/pipeline/[id]/advanced/page.tsx` | Advanced free-form editing | Add policy editors for jury binding, assignment policies, submission rounds, final confirmation |
|
|
| `src/app/(admin)/admin/rounds/pipeline/[id]/edit/page.tsx` | Pipeline editing | Prevent invalid stage-purpose combinations; show dependency impacts |
|
|
| `src/components/admin/pipeline/sections/assignment-section.tsx` | min/max load + overflow | Replace with explicit hard/soft cap + buffer + startup/concept bias controls (clearly labeled suggestive, not deterministic) |
|
|
| `src/components/admin/pipeline/sections/filtering-section.tsx` | rules + AI criteria | Bind to `eligibility_filter` purpose and standardized outcomes |
|
|
| `src/components/admin/pipeline/sections/awards-section.tsx` | award routing/scoring basic | Add participation mode (`separate_pool`/`dual_track`) and pull-out behavior |
|
|
| `src/components/admin/pipeline/sections/live-finals-section.tsx` | live/audience settings | Add Jury 3 deliberation window and final confirmation linkage |
|
|
| `src/components/admin/pipeline/stage-config-editor.tsx` | generic config rendering | render purpose-aware controls only; remove ambiguous keys |
|
|
| `src/app/(admin)/admin/projects/page.tsx` | project list by filters | Add stage-purpose-aware views and round bundle health columns |
|
|
| `src/app/(admin)/admin/projects/pool/page.tsx` | project pool ops | Use assignment intent/manual queue with reason tracking |
|
|
| `src/app/(admin)/admin/reports/stages/page.tsx` | stage reporting | Include compliance metrics (cap violations, override counts, unassigned backlog) |
|
|
|
|
## 4) Invite / Member / Onboarding Integration Matrix (High Priority)
|
|
|
|
### 4.1 Admin Member Invite (Explicit Requirement)
|
|
|
|
| Surface | Current Behavior | Required Integration |
|
|
|---|---|---|
|
|
| `src/app/(admin)/admin/members/invite/page.tsx` | invites users; optional pre-assign project-to-user by stage | Must bind invite flow to explicit `JuryMembership`. UI must support both pre-assignment modes: `AssignmentIntent` mode and policy-validated direct assignment mode. Admin chooses custom-labeled jury (main or award), stage scope, and mode. |
|
|
| `src/server/routers/user.ts` `bulkCreate` | creates users and may directly create assignments | Support dual behavior: create `AssignmentIntent` and/or direct policy-validated assignments based on request mode. Track chosen mode, source, and policy decision in audit details. |
|
|
| `src/server/routers/user.ts` `sendInvitation`/`bulkSendInvitations` | token invitation | Include context metadata (jury memberships, pending assignment intents, onboarding path) in invitation payload/logs. |
|
|
|
|
### 4.2 Team Invite / Project Team Management
|
|
|
|
| Surface | Current Behavior | Required Integration |
|
|
|---|---|---|
|
|
| `src/app/(applicant)/applicant/team/page.tsx` | team lead invites/removes members | Keep flow, but gate permissions via context resolver and ensure invite acceptance routes into project-team scope correctly. |
|
|
| `src/app/(public)/my-submission/[id]/team/page.tsx` | mirrored team flow | Must consume same backend contract as applicant team page; no divergent logic. |
|
|
| `src/server/routers/applicant.ts` `inviteTeamMember` | creates/updates user + team member + email | Add membership lifecycle states and provenance events; ensure no conflict with jury/mentor invitation states. |
|
|
|
|
### 4.3 Invite Acceptance + Onboarding
|
|
|
|
| Surface | Current Behavior | Required Integration |
|
|
|---|---|---|
|
|
| `src/app/(auth)/accept-invite/page.tsx` | validates token and signs in | After acceptance, route based on membership context (jury, mentor, team, admin) and pending obligations (onboarding, password, jury onboarding choices). |
|
|
| `src/app/(auth)/onboarding/page.tsx` | role-aware onboarding | Must collect jury cap/bias preferences (if enabled) for judges, clearly disclose that startup/concept bias is suggestive (not a rule), and tie to `JudgePolicyOverride` records. |
|
|
| `src/server/routers/user.ts` `validateInviteToken` | token validation only | include contextual invitation metadata for accurate UX preview. |
|
|
| `src/server/routers/user.ts` `needsOnboarding` | role-based onboarding check | extend to membership-aware onboarding requirements per jury/stage. |
|
|
|
|
## 5) Applicant + Submission Integration Matrix
|
|
|
|
| Surface | Current Behavior | Required Integration |
|
|
|---|---|---|
|
|
| `src/app/(public)/apply/[slug]/page.tsx` | stage/public form | enforce submission round contract (`SubmissionRound`, slots, late policy) |
|
|
| `src/app/(public)/apply/edition/[programSlug]/page.tsx` | edition mode intake | must map to `submission_r1_intake` purpose policies if Monaco profile active |
|
|
| `src/app/(applicant)/applicant/pipeline/page.tsx` | pipeline visibility | show purpose-based journey (R1, eligibility, Jury1 result, R2, etc.) |
|
|
| `src/app/(applicant)/applicant/pipeline/[stageId]/documents/page.tsx` | stage docs | enforce round-bundle write/read states by stage purpose |
|
|
| `src/app/(applicant)/applicant/documents/page.tsx` | docs view | show bundle timeline and official slot status per round |
|
|
| `src/server/routers/application.ts` | public submission & draft | create `SubmissionBundleState` and normalize category key mapping |
|
|
| `src/server/routers/applicant.ts` `getUploadUrl/saveFileMetadata/deleteFile` | upload + save + delete | enforce slot state, round lock, promotion provenance, late behavior policy |
|
|
| `src/server/routers/file.ts` | file access and grouped views | use submission round + stage purpose aware visibility consistently across roles |
|
|
|
|
## 6) Jury Integration Matrix
|
|
|
|
| Surface | Current Behavior | Required Integration |
|
|
|---|---|---|
|
|
| `src/app/(jury)/jury/stages/page.tsx` | shows active stages | show only stages bound to juries user belongs to |
|
|
| `src/app/(jury)/jury/stages/[stageId]/assignments/page.tsx` | assignment list | render cap status, ratio status, deadline countdown, completion obligations |
|
|
| `src/app/(jury)/jury/stages/[stageId]/projects/[projectId]/page.tsx` | project details | purpose-aware document separation (Round 1 vs Round 2) |
|
|
| `src/app/(jury)/jury/stages/[stageId]/projects/[projectId]/evaluate/page.tsx` | evaluation form | enforce stage/jury policy and graceful lock behavior |
|
|
| `src/app/(jury)/jury/stages/[stageId]/live/page.tsx` | live finals interaction | require Jury 3 membership and live session permissions |
|
|
| `src/server/routers/assignment.ts` | assignment CRUD/suggestions/jobs | centralize policy engine usage for all assignment paths |
|
|
| `src/server/routers/evaluation.ts` | evaluation lifecycle | incorporate jury binding checks and final confirmation contribution rights |
|
|
| `src/server/services/stage-assignment.ts` | stage assignment preview/run | implement hard/soft cap+buffer with category bias as weighted guidance (not deterministic rule) |
|
|
| `src/server/services/smart-assignment.ts` | scoring logic | treat startup/concept preference as transparent scoring bias, not strict quota blocking |
|
|
|
|
## 7) Awards Integration Matrix
|
|
|
|
| Surface | Current Behavior | Required Integration |
|
|
|---|---|---|
|
|
| `src/app/(admin)/admin/awards/*` | award management | expose mode A/B semantics, admin-confirmed pull-out flow, and single-judge decision mode where configured |
|
|
| `src/app/(jury)/jury/awards/*` | jury award voting | bind to award jury memberships/stage windows and suppress jury voting for single-judge awards |
|
|
| `src/server/routers/award.ts` | award track governance | add strict validation for participation mode, stage bindings, admin-confirmed pull-out, and single-judge configuration |
|
|
| `src/server/routers/specialAward.ts` | eligibility + jurors + votes | include standardized filter->review->selection pipeline and override chain |
|
|
| `src/server/services/award-eligibility-job.ts` | background eligibility | persist decision reasoning under unified audit event taxonomy |
|
|
|
|
## 8) Mentor Integration Matrix
|
|
|
|
| Surface | Current Behavior | Required Integration |
|
|
|---|---|---|
|
|
| `src/app/(mentor)/mentor/projects/[id]/page.tsx` | mentor project detail | include private workspace files + threaded comments; promotion actions only where allowed by team-lead/admin authority |
|
|
| `src/app/(applicant)/applicant/mentor/page.tsx` | applicant mentor interaction | show promotion candidate files and official slot mapping |
|
|
| `src/server/routers/mentor.ts` | assignment/message/notes/milestones | add workspace file/comment/promotion endpoints and enforce team-lead/admin-only promotion permissions |
|
|
| `src/server/services/mentor-matching.ts` | AI matching | gate matching by finalist + mentorship request + stage policy |
|
|
|
|
## 9) Live Finals + Confirmation Integration Matrix
|
|
|
|
| Surface | Current Behavior | Required Integration |
|
|
|---|---|---|
|
|
| `src/app/(admin)/admin/reports/stages/page.tsx` + live admin pages | live status/reporting | show stage manager controls + deliberation timer + confirmation readiness |
|
|
| `src/app/(public)/vote/*` | audience voting pages | enforce category/session mode and anti-duplicate policy |
|
|
| `src/server/routers/live.ts` | live cursor controls | require `jury3_live_finals` purpose and stage manager authority |
|
|
| `src/server/routers/live-voting.ts` | voting session mgmt | tie session lifecycle to stage purpose + deliberation/final confirmation handoff |
|
|
| `src/server/routers/cohort.ts` | cohort windows | align with live/selection policies and category boundaries |
|
|
| `src/server/routers/decision.ts` | overrides/audit | extend to final confirmation decisions and result lock events |
|
|
| **new router family** `finalConfirmation.*` | none | create and govern unanimous-with-quorum-fallback confirmation for category+award scopes, single-judge award exceptions, juror replacement/absence controls, admin override paths, and final lock snapshot |
|
|
| **new router family** `resultUnlock.*` | none | super-admin-only unlock/relock workflow with mandatory reason/audit trail |
|
|
|
|
## 10) Notifications / Messaging / Reporting / Export Integration Matrix
|
|
|
|
| Surface | Current Behavior | Required Integration |
|
|
|---|---|---|
|
|
| `src/server/services/stage-notifications.ts` | event-based notifications | expand event taxonomy for jury membership, promotion, confirmation lock |
|
|
| `src/server/services/evaluation-reminders.ts` | stage deadline reminders | include jury-specific obligations and final confirmation reminders |
|
|
| `src/server/routers/message.ts` | messaging | ensure context tags reference stage/jury/project where applicable |
|
|
| `src/server/routers/export.ts` | report generation | include final lock version and policy-compliance evidence |
|
|
| `src/server/routers/audit.ts` | audit search | add filter facets for stage purpose, jury id, confirmation session |
|
|
| `src/server/routers/analytics.ts` | platform analytics | add Monaco flow KPIs (assignment saturation, override rate, policy compliance) |
|
|
|
|
## 11) Router Integration Checklist (All tRPC Domains)
|
|
|
|
Each router in `src/server/routers/_app.ts` must be classified into one of three buckets:
|
|
|
|
1. **Directly governed by competition context**
|
|
- `pipeline`, `stage`, `stageFiltering`, `stageAssignment`, `assignment`, `evaluation`, `decision`, `live`, `liveVoting`, `cohort`, `award`, `specialAward`, `mentor`, `applicant`, `application`, `file`, `project`, `project-pool`
|
|
|
|
2. **Indirectly context-dependent (must carry context metadata)**
|
|
- `user`, `notification`, `message`, `dashboard`, `analytics`, `export`, `audit`
|
|
|
|
3. **Context-independent utilities**
|
|
- `avatar`, `logo`, `tag`, imports, generic settings/webhooks
|
|
|
|
Requirement:
|
|
- Bucket 1 and 2 routers must accept/derive stage/jury context when touching competition entities.
|
|
|
|
## 12) Services Refactor Boundaries
|
|
|
|
| Service | Keep | Refactor Requirement |
|
|
|---|---|---|
|
|
| `stage-engine.ts` | yes | purpose-aware transition guards |
|
|
| `stage-filtering.ts` | yes | standardized eligibility outcomes + reason schema |
|
|
| `stage-assignment.ts` | yes | full hard/soft cap policy engine |
|
|
| `smart-assignment.ts` | partial | convert soft heuristics into policy-compliant scoring only |
|
|
| `live-control.ts` | yes | bind to Jury3 and confirmation handoff |
|
|
| `mentor-matching.ts` | yes | finalist-stage gating and workspace policy awareness |
|
|
| `evaluation-reminders.ts` | yes | purpose-aware reminder templates |
|
|
|
|
## 13) Integration Acceptance Criteria
|
|
A module is considered integrated only if:
|
|
1. It resolves effective competition context before executing business logic.
|
|
2. It uses typed policy resolution (not ad hoc JSON key checks).
|
|
3. It emits standardized audit/decision events.
|
|
4. It fails safely when required context/policy is missing.
|
|
|
|
## 14) Special Note: “All Functions Deeply Integrated”
|
|
Your requirement is satisfied only when invite/member/team/onboarding pages are not treated as peripheral admin UX, but as first-class entry points into the jury/stage/assignment model. This is explicitly mandatory in Phases 2 and 3 of the roadmap.
|