pdf-quiz-generator/backend/alembic/versions
Daniel cf2f42975e
Some checks failed
Tests / backend (push) Failing after 8s
Tests / frontend (push) Successful in 33s
Tests / e2e (push) Failing after 33s
feat: no invite codes and no email sign-in codes — that is the provider's job
Both were this app doing an identity provider's work. Sign-in and
sign-up happen at sso.pedshub.com now: it takes the address, sends the
code, checks it, and knows about second factors — none of which belongs
here, and two of which were never done here at all.

Gone: services/invites.py, services/login_codes.py,
routers/login_code.py, the two models, the three admin invite routes,
the invite_only flag and its switch, the invite field on both sign-up
forms, and the code half of the sign-in page — which was the primary way
in and is now a button that says "Sign in with PedsHub SSO". The
password form stays for a site with no provider configured.

Migration r7b8c9d0e1f2 drops invite_codes (three spent rows) and
login_codes (empty). The dump beside it has both.

585 tests, and the contract snapshot is 320 routes — five fewer, all
five named in the diff so the removal is reviewable rather than
discovered later by a client.

Also: "Make a deck" in the signed-in menu and on the landing page, going
to the scribe's My Resources at app.pedshub.com/#resources. Same
sign-in on both sides; the arrow says it leaves.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TqXevQJhxFrM7jJg82cgZN
2026-09-13 13:56:48 +02:00
..
5f8c1c2a9d40_add_classification_snapshots.py chore: preserve pre-revamp local changes 2026-09-07 00:50:35 +02:00
9bac7bf02e38_add_reminders_disabled_to_users.py Persist reminders_disabled in Postgres and harden reminder scheduler 2026-04-14 04:31:03 +02:00
97ef9b957a02_initial_tables.py Initial commit: PDF Quiz Generator app 2026-03-30 20:04:53 +00:00
a1b2c3d4e5f6_drop_reminders.py feat: cross-link the articles, and strip what the analysis page replaced 2026-09-11 03:44:44 +02:00
a3b4c5d6e7f8_category_system.py feat: an organ system is a fact about a topic, not about a keyword 2026-09-12 04:32:25 +02:00
a5b6c7d8e9f0_conversations.py feat: AI Mode — a chat that cannot cite what it did not find 2026-09-10 15:19:24 +02:00
a7b8c9d0e1f2_exam_groups_and_blueprints.py feat: exams are a group you can build, with the board's own blueprint 2026-09-11 20:27:48 +02:00
a9b0c1d2e3f4_question_versions.py feat: question version history with restore; TODO list 2026-09-10 02:27:44 +02:00
b0c1d2e3f4a5_exam_scoped_tags.py feat: exam-scoped disciplines and exam-scoped facet counts 2026-09-10 02:48:34 +02:00
b2c3d4e5f6a7_plan_origin.py fix: one sessions list, at /sessions, with plan material out of it 2026-09-11 04:10:25 +02:00
b4c5d6e7f809_drop_question_is_shared.py refactor: remove per-question sharing 2026-09-12 08:42:51 +02:00
b6c7d8e9f0a1_article_cms.py feat: article CMS, three reading views, and articles written from the library 2026-09-10 17:13:07 +02:00
b8c9d0e1f2a3_fix_question_quiz_fk.py fix: the reading browser counted the wrong thing, and the hover card fled 2026-09-11 21:24:04 +02:00
b71a4e2d6c90_add_explanation_image_path.py chore: preserve pre-revamp local changes 2026-09-07 00:50:35 +02:00
c1d2e3f4a5b6_grant_dimensions.py feat: grants can name an exam and a discipline, not only a category 2026-09-10 04:02:36 +02:00
c3aafcd58735_add_roles_images_modes_models.py Initial commit: PDF Quiz Generator app 2026-03-30 20:04:53 +00:00
c3d4e5f6a7b8_question_feedback.py feat: feedback replaces comments; Qbank is a landing page; one question page 2026-09-11 18:50:57 +02:00
c5d6e7f8091a_collectible_articles.py feat: articles are collectible, and Summary is a toggle 2026-09-12 14:52:20 +02:00
c7d8e9f0a1b2_exam_objectives.py feat: a study objective that changes what you see; purge unused figures 2026-09-11 02:47:01 +02:00
c9d0e1f2a3b4_draft_questions.py feat: extracted questions are staged, and only acceptance takes an id 2026-09-11 22:57:08 +02:00
c82d19e4a601_category_hierarchy.py fix: close custom-test review gaps and verify grading 2026-09-07 02:07:58 +02:00
d0e1f2a3b4c5_repetition.py feat: a repetition does not raise your score; no more deleting a session 2026-09-12 01:08:42 +02:00
d2e3f4a5b6c7_media_libraries.py feat: MinIO-backed media libraries, and file the last 316 questions 2026-09-10 06:45:22 +02:00
d4e5f6a7b8c9_invite_codes.py feat: the player is a box; sharing and sign-up are the administrator's 2026-09-11 19:17:35 +02:00
d6e7f8091a2b_search_the_article_body.py fix: search the article body, and cap an upload at what it is for 2026-09-12 15:23:32 +02:00
d8e9f0a1b2c3_question_tips_and_notes.py feat: attending tip, per-question notes, save to folder, session clock 2026-09-11 02:59:32 +02:00
d94a26b8f302_study_tools.py feat: redesign quiz runner and add study tools 2026-09-07 03:10:23 +02:00
e1f2a3b4c5d6_used_hint.py feat: right after a tip is its own slice 2026-09-12 01:51:03 +02:00
e3f4a5b6c7d8_tag_hierarchy.py feat: real organ systems, symptoms grouped by system, and admin taxonomy CRUD 2026-09-10 10:44:39 +02:00
e4c7b2a9d6f1_add_user_notes.py Add persistent MyNote for quizzes 2026-05-12 17:51:23 +02:00
e5f6a7b8c9d0_drop_comments.py feat: one settings page, and comments removed 2026-09-11 19:40:24 +02:00
e7f8091a2b3c_user_voice_preference.py feat: a reading voice in Settings, and a tutor that reads every figure 2026-09-12 16:48:09 +02:00
e8d4f1a27c93_articles_cards.py feat: linked topic articles and card associations 2026-09-07 15:16:48 +02:00
e9f0a1b2c3d4_answer_timing.py feat: session analysis after a quiz, and a merged TODO for the rest 2026-09-11 03:07:05 +02:00
f0a1b2c3d4e5_question_figures.py feat: figures as records, question-centred dashboard, fewer hints mid-quiz 2026-09-11 03:18:49 +02:00
f2a1c9d4e801_comments.py feat: shareable quiz links, moderated comments and AI authoring 2026-09-07 17:10:08 +02:00
f2a3b4c5d6e7_collection_last_used.py feat: a collections page 2026-09-12 03:33:37 +02:00
f4a5b6c7d8e9_study_plan_articles.py feat: study plans you can open, work through, and edit 2026-09-10 12:10:39 +02:00
f6a7b8c9d0e1_question_soft_delete.py feat: questions are soft-deleted, and the trash holds them 2026-09-11 20:12:58 +02:00
f8091a2b3c4d_login_links.py fix: WebP figures, the openai SDK removed, and a voice a site can add to 2026-09-12 17:13:05 +02:00
g4b7e2f5a903_share_tokens.py feat: shareable quiz links, moderated comments and AI authoring 2026-09-07 17:10:08 +02:00
g9a1b2c3d4e5_login_codes.py feat: sign in with a code sent by email 2026-09-12 17:29:28 +02:00
h1b2c3d4e5f6_password_optional.py feat: an account may have no password, and may set one later 2026-09-12 17:39:29 +02:00
h1c2d3e4f506_question_category_links.py feat: multi-subcategory questions, statistics hardening, seeded lab values 2026-09-08 14:43:22 +02:00
i2d3e4f5a607_lab_links.py feat: Orthobullets-style lab panel with source deep links and card links 2026-09-08 16:20:55 +02:00
i9f0a1b2c3d4_folders_notes_article_feedback.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
j0a1b2c3d4e5_article_trash.py feat: delete an article, and a trash for the ones that were published 2026-09-12 19:31:28 +02:00
j3e4f5a6b708_option_explanations.py feat: per-option explanations 2026-09-08 19:29:21 +02:00
k1b2c3d4e5f6_article_topic_claims.py feat: an article follows a topic, rather than copying it once 2026-09-12 19:57:06 +02:00
k4f5a6b7c819_quiz_origin.py feat: key points smart links, difficulty tags, adaptive sessions, educator-only question management 2026-09-09 02:26:45 +02:00
l2c3d4e5f6a7_media_source.py feat: figures are thumbnails that open into a viewer, with source and overlay 2026-09-12 20:33:00 +02:00
l5a6b7c8d920_key_points.py feat: key points smart links, difficulty tags, adaptive sessions, educator-only question management 2026-09-09 02:26:45 +02:00
m3d4e5f6a7b8_flashcard_reviews.py feat: cards remember, render as prose, and are reachable from a question 2026-09-12 21:50:31 +02:00
m6a7b8c9d031_question_difficulty.py feat: key points smart links, difficulty tags, adaptive sessions, educator-only question management 2026-09-09 02:26:45 +02:00
n4e5f6a7b8c9_drop_courses.py refactor: remove the LMS 2026-09-12 23:27:51 +02:00
n7a8b9c0d142_collections.py feat: facet filters, personal libraries, adaptive shortcuts, restart, rename support 2026-09-09 04:31:40 +02:00
p5f6a7b8c9d0_refresh_tokens.py feat: a versioned API, refresh tokens, and an end-to-end stack that found four bugs 2026-09-13 01:23:38 +02:00
p8b9c0d1e253_category_grants.py feat: analysis recommendations, category grants, compact question header 2026-09-09 18:47:32 +02:00
q6a7b8c9d0e1_ownership_is_a_role.py feat: the bank belongs to a role, not to a person 2026-09-13 13:26:25 +02:00
q9c0d1e2f364_question_fulltext.py feat: hybrid search on BGE-M3, with embedding provenance and a retry job 2026-09-09 23:45:33 +02:00
r0d1e2f3a475_embedding_provenance.py feat: hybrid search on BGE-M3, with embedding provenance and a retry job 2026-09-09 23:45:33 +02:00
r7b8c9d0e1f2_drop_code_tables.py feat: no invite codes and no email sign-in codes — that is the provider's job 2026-09-13 13:56:48 +02:00
s1e2f3a4b586_bge_m3_embeddings.py feat: hybrid search on BGE-M3, with embedding provenance and a retry job 2026-09-09 23:45:33 +02:00
t2f3a4b5c697_shared_category.py feat: flashcard decks share the question and article category tree 2026-09-10 01:40:03 +02:00
u3a4b5c6d7e8_embed_articles_cards.py feat: hybrid search for articles and cards; full-page question editor 2026-09-10 02:01:35 +02:00
v4b5c6d7e8f9_exams.py feat: exams as real data, AI-mode matching, and a continue-study panel 2026-09-10 02:08:38 +02:00
w5c6d7e8f9a0_article_views.py feat: exams as real data, AI-mode matching, and a continue-study panel 2026-09-10 02:08:38 +02:00
x6d7e8f9a0b1_section_index.py feat: section-level index so retrieval can cite a section, not a whole article 2026-09-10 02:18:53 +02:00
y7e8f9a0b1c2_media_assets.py feat: media as a searchable corpus, ready for a vision embedder 2026-09-10 02:22:52 +02:00
z8f9a0b1c2d3_study_plans.py feat: PREP study plans of numbered blocks 2026-09-10 02:25:29 +02:00