diff --git a/docs/superpowers/plans/2026-04-28-pr3-mentoring-config-completeness.md b/docs/superpowers/plans/2026-04-28-pr3-mentoring-config-completeness.md new file mode 100644 index 0000000..8d9e65f --- /dev/null +++ b/docs/superpowers/plans/2026-04-28-pr3-mentoring-config-completeness.md @@ -0,0 +1,39 @@ +# PR 3 — MENTORING Round Config Completeness (§A) + +> **For agentic workers:** Use superpowers:executing-plans for inline execution. + +**Goal:** Surface every `MentoringConfigSchema` field on the round Config tab; hide the empty General Settings card on MENTORING rounds; relax the "File requirements set" Launch Readiness gate when no file promotion is configured. + +**Architecture:** UI-only changes. No schema, no API. Three files touched. + +**Spec:** `docs/superpowers/specs/2026-04-28-mentor-round-readiness-design.md` §A. + +## File map + +| File | Action | Why | +|------|--------|-----| +| `src/components/admin/rounds/config/mentoring-config.tsx` | Modify | Add `mentoringRequestDeadlineDays` numeric input + `passThroughIfNoRequest` toggle; add help-text to Eligibility | +| `src/app/(admin)/admin/rounds/[roundId]/page.tsx` | Modify | Hide General Settings card when `round.roundType === 'MENTORING'`; relax File-requirements readiness gate for MENTORING rounds without file promotion configured | + +## Tasks + +### Task 1: Add the two missing inputs to `mentoring-config.tsx` + +- [ ] **Step 1: Patch the file** — append a new "Mentoring Request Window" card BETWEEN the existing two cards, and add help-text to Eligibility. Code in execution. + +- [ ] **Step 2: Typecheck** — `npm run typecheck`. Expect 0 errors. + +### Task 2: Hide General Settings card + relax readiness on MENTORING rounds + +- [ ] **Step 1: Patch `(admin)/admin/rounds/[roundId]/page.tsx`** — wrap the General Settings card in `{!isMentoring && (...)}` and extend the file-requirements bypass condition. + +- [ ] **Step 2: Typecheck + build** — confirm clean. + +### Task 3: Smoke + commit + +- [ ] **Step 1: `npm run build`** — confirm clean. +- [ ] **Step 2: Commit** — message references §A. + +## Out of scope + +Form unit tests (heavy render setup; existing config-save mutation already verified by other PRs). Manual smoke covers the UI work. diff --git a/src/app/(admin)/admin/rounds/[roundId]/page.tsx b/src/app/(admin)/admin/rounds/[roundId]/page.tsx index 86844f1..78b4632 100644 --- a/src/app/(admin)/admin/rounds/[roundId]/page.tsx +++ b/src/app/(admin)/admin/rounds/[roundId]/page.tsx @@ -514,6 +514,7 @@ export default function RoundDetailPage() { const isFiltering = round?.roundType === 'FILTERING' const isEvaluation = round?.roundType === 'EVALUATION' + const isMentoring = round?.roundType === 'MENTORING' const hasJury = ['EVALUATION', 'LIVE_FINAL', 'DELIBERATION'].includes(round?.roundType ?? '') const hasAwards = roundAwards.length > 0 const isSimpleAdvance = ['INTAKE', 'SUBMISSION', 'MENTORING'].includes(round?.roundType ?? '') @@ -589,7 +590,8 @@ export default function RoundDetailPage() { action: undefined as Route | undefined, actionLabel: undefined as string | undefined, }, - ...((isEvaluation && !(config.requireDocumentUpload as boolean)) + ...((isEvaluation && !(config.requireDocumentUpload as boolean)) || + (isMentoring && !(config.filePromotionEnabled as boolean) && !config.promotionTargetWindowId) ? [] : [{ label: 'File requirements set', @@ -2198,7 +2200,8 @@ export default function RoundDetailPage() { - {/* General Round Settings */} + {/* General Round Settings — hidden on MENTORING rounds (no advancement targets apply) */} + {!isMentoring && ( + )} {/* Round-type-specific config */} Admin Selected +
@@ -56,6 +61,46 @@ export function MentoringConfig({ config, onChange }: MentoringConfigProps) { + + + Mentoring Request Window + How long teams have to request a mentor, and what happens to non-requesters + + +
+ +

After this many days, teams can no longer submit a mentoring request. Default: 14.

+ { + const v = parseInt(e.target.value, 10) + if (!Number.isNaN(v) && v >= 1 && v <= 90) update('mentoringRequestDeadlineDays', v) + }} + /> +
+ +
+
+ +

+ When ON, projects that don't request mentoring auto-PASS to the next round (default). + When OFF, all projects are held in PENDING until the admin decides — useful when mentoring is mandatory. +

+
+ update('passThroughIfNoRequest', v)} + /> +
+
+
+ Communication & Files