Skip to main content

Question Bank — operator runbook (full)

/question-bank (alias deep link /question-bank/review-queue redirects with ?tabId=review-queue)

Operators: Platform admin + Directory admin (canManageQuestionBank). Others may browse but lose destructive / review queue powers.


A. Open the hub

  1. Sidebar → Question Bank (if absent, you lack canAccessQuestionBank).
  2. Land on default Question List tab unless URL query tabId dictates otherwise.

Tabs:

TabPurpose
Question ListMaster catalogue grid + filters + CRUD.
Review QueuePrioritised moderation list.
Usage DashboardLive unvalidated / flagged distribution analytics.

Staff viewer may read details but cannot push status transitions.


B. Question List — search & slice

  1. Use SearchBar (distinct from server filter set).
  2. Open Filters drawer / panel (job family, variant group, status, skill type, format, cognitive level, tooling tags, primary role, sourcing channel, bank id).
  3. Adjust sort (defaults updatedAt desc in code).
  4. Change page size if supported.
  5. Select rows via checkboxes for bulk operations (where operator).

C. Create item (operator)

  1. Create / Add button (top area) opens modal with QuestionBankDraftFormFields.
  2. Populate parent skill labels, formats (mcq, scenario, short_answer, oeq), level (L0_1L6, NA), source lineage, optional industry context & tools tags.
  3. Enter question text plus options A–D / rationales depending on format schema.
  4. Save — new row becomes draft unless you choose another permitted status in modal.
  5. Observe validation errors inline; fix before retry.

D. Edit / change status / delete (operator)

  1. Row action → Edit (opens modal with draftValuesFromQuestionItem hydration).
  2. Adjust copy; change status among: draft, review, live_unvalidated, live_validated, retired (operator); flagged is automation-first.
  3. Save.
  4. Delete permanently removes row—confirm destructive intent.
  5. Bulk status update: select many → choose target status in bulk bar → submit; watch bulkStatusError style errors.
  6. Bulk retire parallel path for deprecation campaigns.

E. Review Queue tab

  1. Switch to Review Queue (or visit /question-bank/review-queue which redirects into same page).
  2. Page through queue (page size 50).
  3. For each row trigger Approve / Reject analogue (implementation: submitQuestionBankReviewDecision).
  4. If empty, message No items in queue displays.

F. Usage Dashboard tab

  1. Switch to Usage Dashboard.
  2. Read cards titled along the lines of
    • Live unvalidated — by job family
    • Live unvalidated — by level
    • Flagged — by job family
    • Flagged — by level
  3. Use insights to schedule content clean-up or validation sprints.

G. CSV import (operator)

  1. Import modal (QuestionBankImportModal).
  2. Attach CSV following internal template; confirm mapping preview.
  3. Submit; read QuestionBankImportResult summary (counts, row errors).
  4. Download / copy error report if provided; fix source file; re-run partial import policy per CS guidance.

H. Post-import / usage tracking

When assessment authors insert bank rows, usage counters (usageCount) increment server-side—trust dashboard numbers for governance, not spreadsheets.


Common failure modes

SymptomCheck
Forbidden on saveSession role not actually operator (MCA ≠ operator).
Filter returns emptyOver-restrictive combination—reset filters.
Import partialRow-level schema violations—inspect summary table.