Make the regular-interview pass threshold configurable
Preferred deadline
Before the first I1 results are published for the redesigned JS/TS Web Dev course.
Problem
Regular task interviews produce numeric scores, but the passing boundary is currently treated as a fixed 4/10 rule in existing course behavior. The redesigned interview definitions in #3093 calculate a score from 0 to 100 and this course requires 60%. Other courses may require another threshold.
The boundary must therefore be explicit configuration, not a constant embedded in a client, template, or certificate calculation.
The current student card also routes regular interview results through Technical Screening decision helpers:
- InterviewCard.tsx casts the result to
Decision; - InterviewDescription.tsx renders it through
getInterviewResult; - client/src/domain/interview.tsx defaults an unrecognized value to a positive card result.
A numeric regular-interview score must not be interpreted as a Mentor-selection decision.
Proposed behavior
Add a configurable passThresholdPercent for each regular Interview CourseTask, or an equivalent reusable regular-interview result configuration.
- Administrators configure a value from 0 to 100.
- I1–I8 in the redesigned course use 60%.
- Normalize the final interview score to a percentage before comparison, regardless of whether a legacy form uses 0–10 and a new definition uses 0–100.
- A score equal to the threshold qualifies; a lower score does not.
- Derive the displayed Passed/Failed or qualifying result server-side, or return it explicitly from the API. Clients must not duplicate the calculation.
- The numeric interview score remains the authoritative stored result. Do not add a second manually editable pass/fail interview result.
- Keep certificate rules and mandatory dimension floors separate; they may consume the configured threshold but are not implemented here.
- Keep Technical Screening separate. It uses the Mentor decision and no numeric threshold, as described in #3094.
- Use the concise student result card from #3093: final score, derived result, and submitted configured feedback when present.
- Do not expose closed questions, suggested answers, answer guidance, or internal evidence notes in the student result.
- Migrate existing regular Interview CourseTasks to explicit thresholds that preserve their current behavior instead of retaining an implicit global
4/10default.
Suggested student card:
I3 — JS, Fetch/HTTP, async, errors, and ownership
68.5 / 100 · Passed
Feedback
<submitted Interviewer feedback>Administration and migration
- Show the threshold only for regular numeric Interview CourseTasks.
- Validate it as a percentage from 0 to 100.
- Changing the threshold after results exist must either be blocked or use an explicit audited migration/recalculation path.
- Existing regular interviews retain their current effective boundary after migration.
- Technical Screening and other decision-backed tasks do not show this field.
Acceptance criteria
- A course administrator can configure a 0–100 threshold for a regular Interview CourseTask.
- The redesigned course can use 60% without another RS App code change.
- Equality passes and a score below the configured threshold fails.
- The server/API supplies the derived result consistently to every client.
- No regular-interview client contains a hard-coded
4/10,40%, or60%rule. - Numeric regular-interview results are not passed through Technical Screening
Decisionhelpers. - The student card shows the final score, correct derived result, and configured feedback when present.
- A form without feedback does not render an empty Feedback section.
- Existing regular Interview CourseTasks preserve their effective threshold through explicit configuration/migration.
- Technical Screening continues to display the Mentor decision without a numeric threshold.
- Tests cover threshold equality, values immediately below/above it, legacy and 0–100 scales, missing configuration, migration, result-card rendering, and Technical Screening separation.
Related issues
- #3093 — dynamic regular-interview definitions, scoring, feedback, and student result card.
- #3094 — threshold/decision-backed pass/fail CourseTasks and scoreless Technical Screening.
Source: rolling-scopes/rsschool-app