feat: GATEKEEPER Roll Number Verification Flow (#16)#28
Merged
Conversation
Build fallback identity verification using roll numbers for GATEKEEPER. - roll_verification/fixtures.py: 35 real students from the official class roster as StudentProfile fixtures; VALID_ROLL_NUMBERS frozenset; ROLL_TO_NAME dict; build_fixture_registry() returns pre-seeded StudentRegistry ready for verification - roll_verification/display.py: StudentDisplayCard frozen dataclass with pretty() (bordered terminal card), one_line() (log-friendly summary), to_dict() (plain types, JSON-safe); format_display_card() pure converter; format_not_found() and format_inactive() staff messages - roll_verification/flow.py: RollVerificationFlow stateless class; verify() single-lookup pipeline: lookup → map failure reason → FlowStatus → build display card; verify_batch() bulk verification; verified_count() and rejected_count() helpers; FlowStatus enum: VERIFIED/NOT_FOUND/INVALID/INACTIVE/MANUAL_CHECK; VerificationFlowResult with display_card, requires_manual flag, audit lookup_result; never raises on any input - tests/test_roll_verification.py: 55 tests using REAL roll numbers: - all 35 real students verified individually and in bulk - spot checks: Raj Rasal, Sahil Ghone, Pranav Nair, Shivam Sah - name casing normalization verified (SHIVAM SAH → Shivam Sah) - invalid inputs: empty, None, special chars, spaces, too short - display card: pretty(), one_line(), to_dict(), JSON serialization - registry injection, inactive student, custom registry - batch: all 35, mixed valid/invalid, empty list - manual verification flag on verified vs rejected Closes #16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Build fallback identity verification using roll numbers for GATEKEEPER.
roll_verification/fixtures.py: 35 real students from the official class roster as StudentProfile fixtures; VALID_ROLL_NUMBERS frozenset; ROLL_TO_NAME dict; build_fixture_registry() returns pre-seeded StudentRegistry ready for verification
roll_verification/display.py: StudentDisplayCard frozen dataclass with pretty() (bordered terminal card), one_line() (log-friendly summary), to_dict() (plain types, JSON-safe); format_display_card() pure converter; format_not_found() and format_inactive() staff messages
roll_verification/flow.py: RollVerificationFlow stateless class; verify() single-lookup pipeline: lookup → map failure reason → FlowStatus → build display card; verify_batch() bulk verification; verified_count() and rejected_count() helpers; FlowStatus enum: VERIFIED/NOT_FOUND/INVALID/INACTIVE/MANUAL_CHECK; VerificationFlowResult with display_card, requires_manual flag, audit lookup_result; never raises on any input
tests/test_roll_verification.py: 55 tests using REAL roll numbers:
Closes #16