Skip to content

practice: preserve attempt history when questions change #72

Open

Description

@procoder-ji

Related to #22 and the question-versioning step in docs/product-roadmap.md.

Problem

Saved attempts contain question IDs and selected option IDs. The frontend grades them against the current question bank. Changing an answer key can change a historical result; removing an ID can cause an attempt to be discarded during validation.

Scope

  • Record the question-revision and compatibility strategy in an ADR, following ADR 0001.
  • Keep reviewed definitions in the canonical shared question data. Identify the exact revision used by an attempt; do not accept browser-supplied answer keys or scores.
  • Keep retired revisions available for historical review while excluding them from new sessions.
  • Define a compatible interpretation or migration for existing unversioned browser and backend records.
  • Update TypeScript validation, backend validation, persistence and import/export contracts together. Document rollout and rollback.
  • Preserve the 100-attempt limit, payload bounds, account isolation and generation-based reset behavior.
  • Keep this separate from the planned game-history contract in games: save browser history and show per-game progress #69.

Starting files

shared/practice/questions.json, src/features/progress/, src/features/practice/domain/session.ts, backend/src/ProCoderJi.Api/Features/Practice/PracticeQuestionBank.cs, and backend/src/ProCoderJi.Api/Features/Progress/.

Done when

Shared fixtures and both runtimes demonstrate that correcting or retiring a question preserves the original attempt's review and result. Tests cover existing unversioned records, revision mismatches, retirement, reload/export/import, cloud synchronization and reset compatibility across supported storage providers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions