Skip to content

P4.4: Classifier — password-change without global revocation #90

Description

@bjcorder

Parent tracker: #62
Spec: docs/superpowers/specs/2026-05-21-edge-case-hardening-design.md
Milestone: P4

Goal

Fire a finding when a password-change handler is detected but no evidence of global session invalidation, refresh-family revocation, or token-version bump is linked.

Acceptance criteria

  • password_change_global_revocation_absent_review fires when:
    • a password-change handler is detected (existing reset/password lifecycle evidence)
    • no evidence of global revocation (revokeAllSessions, bumpTokenVersion, delete refresh_tokens where user_id, cycle_key cascade) is linked in the same scope
  • Review-required.
  • Existing django/password-change-refresh-revoke fixture should remain a positive case after this issue lands.

New check IDs

  • password_change_global_revocation_absent_review

Files touched

  • crates/sessionscope-classifier/src/lifecycle.rs

Fixture expectations

  • Negative: password-change handler that only updates the password hash.
  • Positive: password-change handler that calls a global-revocation helper.
  • False-positive: standalone password-validation utility (not a handler) — no fire.

Audit-then-decide

  • Category: lifecycle_gap, severity medium.
  • Feed into the consolidated P4.8 audit.

Doc-update checklist

  • docs/USAGE.md check catalog.
  • docs/COVERAGE_MATRIX.md row.
  • CHANGELOG.md unreleased entry.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions