Skip to content

P4.3: Classifier — sliding/idle expiry without rotation #89

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 session or refresh handler resets a TTL/Max-Age on each use (sliding expiry) but no rotation evidence is linked.

Acceptance criteria

  • sliding_expiry_without_rotation_review fires when:
    • a handler updates a TTL/Max-Age value on each request (evidenced by repeated assignments or framework-default sliding-session config)
    • no rotation evidence is linked from the lifecycle linker
  • Review-required.

New check IDs

  • sliding_expiry_without_rotation_review

Files touched

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

Fixture expectations

  • Negative: sliding session middleware enabled, no rotate calls.
  • Positive: sliding session with session.regenerate() or session.cycle_key() calls present.
  • False-positive: fixed-expiry sessions (no fire).

Audit-then-decide

  • Category: lifecycle_gap, severity low.
  • 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