Competencies

A competency is a specific skill or knowledge area students demonstrate. Each belongs to a class and is either Core (required) or Elective (counts toward grade requirements up to a configured limit).

Competencies can be linked across classes — "Welcome Interview" in CS 255 and AI 250 are the same underlying competency, so a grade earned in one class propagates to the other automatically.

Grade Records

Every grade flows through a single function grade_record() which:

  1. Writes an audit row to grade_attempts — every attempt is preserved forever
  2. Updates competency_grades if the new grade is higher (highest-wins)
  3. Propagates to linked competencies in other classes
  4. Checks whether a new grade lock-in has been earned
Highest-wins rule

A grade is never downgraded. A student with Mastery can never have their grade reduced by a later attempt at any grade level.

Grade Lock-ins

When a student's overall standing first reaches the threshold for a letter grade (C, B, or A), a lock-in row is written recording the week number. Locks are permanent — they record when a student first qualified. Run 🔒 Recheck Locks from the top bar after bulk imports to backfill any missing locks.

Approaching Only

When you select a student in the Instructor Panel, the system runs a hypothetical: if every remaining incomplete competency were graded Approaching, would the student project an A? If yes, the green Approaching Only banner fires. This tells you the student doesn't need any more Masteries — you can cut the interview short.

The flag is stored on the grade_attempts row (approaching_only = 1) for research analysis, and appears as ◆ diamonds in the timing scatter chart.

Threshold Evaluation

A student's projected letter grade is computed by threshold_evaluate() which checks their current competency_grades against the class's grade_thresholds rules. Rules are checked in sort order (A first, then B, then C) and the highest passing grade is returned.

Example A rule: min_mastery: 4, min_others: "Approaching", required_electives: 2, max_incomplete: 0

Daily Limit

By default a student can only be interviewed once per day per competency (source = Interview, not q-visit). The Instructor Panel shows a warning if the limit is reached. An override button bypasses it when needed — the override is recorded on the attempt row.

Question Sets

A set is an ordered collection of questions assigned to a competency. The instructor loads a set at the start of each interview. Sets can be reused across multiple interviews. Follow-up questions are nested under base questions and can be sent selectively.