Skip to content

feat(exam): generate 47 demo items to unlock the full-length GRE mock - #65

Merged
f15cubing merged 3 commits into
mainfrom
agent/exam-demo-items
Jul 5, 2026
Merged

f15cubing merged 3 commits into
mainfrom
agent/exam-demo-items

Conversation

@f15cubing

Copy link
Copy Markdown
Owner

What & why

Exam Mode could only build the 11-item mini mock — the firewalled held-out p0 bank was too small (8 calc / 7 alg / 9 add; the 50/25/25 blueprint caps a form at 16). This adds 47 deterministic, correct-by-construction demo items (eval-p0-gen-*, gen: generated, demo: true) via generate_eval.gen_demo_p0_items, bringing p0 to 35/18/18 so the official 66-item mock (and half/33, third/22) become feasible. Not a live model (same AI-off posture as the AI card pipeline); firewall-safe; demo: true + id-prefix let the scoring layer exclude them from real calibration folds. Companion submodule PR: f15cubing/anki#4 (bumps the pin to bc995b88).

Area(s) touched

eval/bank/{generate_eval.py,items.yaml,vendor_exam_items.py,eval_bank.md,tests/test_generate_eval.py,tests/test_bank_composition.py}, docs/{STATUS.md,codebase/INDEX.md}, README.md, and the anki submodule pin bump — engine/Rust PR? yes (bumps the anki submodule) but data-only: no rslib/proto/pylib/scheduler/undo/store change.

Docs updated

eval/bank/eval_bank.md (Composition → 127; new Demo-items section; vendor_exam_items.py), docs/codebase/INDEX.md (eval-bank row → agent/exam-demo-items), README.md (pin → anki@bc995b88), docs/STATUS.md (in-flight entry). Note: the pre-existing INDEX composite-SHA drift for engine areas (rslib/proto/pylib) is left as-is — this change didn't re-verify them.

Test evidence

  • eval-bank suite 20/20 + test_exam_items_sync 1/1 (repo .venv, sympy 1.14 + PyYAML).
  • New tests: test_demo_p0_items_wellformed_and_deterministic (47 items, 27/11/9, deterministic), test_p0_supports_full_length_exam_blueprint (p0 >= 33/17/16).
  • Exam feasibility verified via direct module load: all presets feasible; max_feasible=66; full-66 assembles (all eval-*).
  • assert_firewall PASS across 127 items (incl. 47 demo) — no study-deck/ETS collision.
  • vendor_exam_items.py idempotent (re-run → no diff); reproduces the prior JSON byte-for-byte before the additions.

Engine/Rust extra gate (if applicable)

N/A for behavior — the submodule bump carries only vendored MCQ data + one test; no Rust/collection/proto/scheduler/undo change; Exam Mode stays read-only (no OpChanges). The aqt test_gre_exam.py runs under CI/./ninja check. Files touched + merge difficulty: LOW (additive).

Made with Cursor

@f15cubing
f15cubing force-pushed the agent/exam-demo-items branch from 3cd0393 to 68bfb73 Compare July 5, 2026 22:11
Felipe Caicedo added 3 commits July 5, 2026 17:15
Exam Mode could only build the 11-item mini mock because the firewalled
held-out p0 bank was too small (8 calculus / 7 algebra / 9 additional -> the
50/25/25 blueprint caps a form at 16). This adds 47 deterministic,
correct-by-construction demo items (eval-p0-gen-*, gen: generated, demo: true)
via generate_eval.gen_demo_p0_items, bringing p0 to 35/18/18 so the official
66-item form (and half/33, third/22) become feasible.

The items are SymPy-exact (NOT a live model — same AI-off posture as the AI
card pipeline), authored in a high-coefficient / distinct-phrasing regime
disjoint from the study deck so assert_firewall holds. demo: true + the id
prefix let the scoring layer exclude them from real calibration folds.

Adds eval/bank/vendor_exam_items.py (reproducible items.yaml -> vendored
anki/qt/aqt/gre/exam_items.json projection; the drift guard stays green) and
bumps the anki submodule pin to bc995b88.

Data + generator + tests only; no scheduler/undo/store/proto/Rust change.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant