# Signature-verification test-case generation. Set quality.case_type to one # of the 12 codes below to switch GeneratorContext into scenario-driven # generation: it renders the described scenario and stamps the sample's # metadata `verification` block with the matching ground-truth verdict/ # reject_code. Left unset (the default), generation is completely unaffected. # # python main.py --config configs/examples/verification_cases.yaml \ # --set quality.case_type=3a --count 10 # # For "1d" (correct signer, but the scan itself is degraded) use # configs/examples/hard_degraded.yaml instead -- it already sets # `quality.case_type: "1d"` plus the matching degraded-scan overrides; this # file's job is everything else, where a clean/legible scan is expected. # # | code | scenario | verdict | reject_code | # |------|------------------------------------------------------|---------|-------------------------| # | 1a | Correct signer signs normally | PASS | - | # | 1b | Correct signer, natural pen variation | PASS | - | # | 1c | Multi-signer form, both sign correctly | PASS | - | # | 1d | Correct signer, scan degraded (see hard_degraded.yaml)| PASS | - | # | 2a | Box left completely blank | REJECT | NO_SIGNATURE | # | 2b | Printed/typed name only, no handwriting | REJECT | NO_SIGNATURE | # | 3a | Wrong real person signs the box | REJECT | IDENTITY_MISMATCH | # | 3b | Skilled-forgery sample used | REJECT | IDENTITY_MISMATCH | # | 4a | Authorized signer, but wrong role's box | REJECT | ROLE_MISMATCH | # | 4b | Signer from a different form entirely | REJECT | ROLE_MISMATCH | # | 5a | Required signer's box left empty | REJECT | REQUIRED_SIGNER_ABSENT | # | 5b | Someone else signs in the required signer's place | REJECT | REQUIRED_SIGNER_ABSENT | quality: case_type: "1a" # <- override with --set quality.case_type= validation: strict: false