Parent tracker: #62
Spec: docs/superpowers/specs/2026-05-21-edge-case-hardening-design.md
Milestone: P3
Depends on: P3.1
Goal
Fire findings for missing, static, or unverified state parameters in OAuth flows.
Acceptance criteria
New check IDs
oauth_state_missing
oauth_state_static_review
oauth_state_unverified_review
Files touched
crates/sessionscope-classifier/src/oauth_flow.rs
Fixture expectations
Audit-then-decide
oauth_state_missing: candidate missing_validation_evidence, severity medium.
oauth_state_static_review: candidate dynamic_review_required, severity medium.
oauth_state_unverified_review: candidate missing_validation_evidence, severity high.
- Feed into the consolidated P4.8 audit.
Doc-update checklist
Parent tracker: #62
Spec:
docs/superpowers/specs/2026-05-21-edge-case-hardening-design.mdMilestone: P3
Depends on: P3.1
Goal
Fire findings for missing, static, or unverified
stateparameters in OAuth flows.Acceptance criteria
oauth_state_missingfires when an auth-code flow's authorize-URL builder lacks astateparameter.oauth_state_static_reviewfires whenstateis assigned from a literal string (not crypto-random).oauth_state_unverified_reviewfires when a callback handler readsstatebut no comparison against a stored value (session, cache, signed cookie) is visible.New check IDs
oauth_state_missingoauth_state_static_reviewoauth_state_unverified_reviewFiles touched
crates/sessionscope-classifier/src/oauth_flow.rsFixture expectations
state = crypto.randomBytes(...).toString('hex')with callback comparison present.Audit-then-decide
oauth_state_missing: candidatemissing_validation_evidence, severitymedium.oauth_state_static_review: candidatedynamic_review_required, severitymedium.oauth_state_unverified_review: candidatemissing_validation_evidence, severityhigh.Doc-update checklist
docs/USAGE.mdcheck catalog: three new IDs.docs/COVERAGE_MATRIX.md: three rows.CHANGELOG.mdunreleased entry.