You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Aug 11, 2026. It is now read-only.
SaaS lifecycle state must be more precise than a generic tenant active flag. Trial expiry, payment grace, suspension, cancellation, restoration, and downgrade need deterministic access behavior while preserving tenant data and offline/LAN safety.
Objective
Implement a tenant-lifecycle capability with versioned transition rules, effective restrictions, restoration, scheduled jobs, and safe coordination with entitlements, sessions, modules, public routing, workers, and provisioning.
Scope
Add admitted module/extension descriptor, permissions, events, jobs, and admin navigation.
Parent epic: #868
Depends on: #869, #871, #872
Context
SaaS lifecycle state must be more precise than a generic tenant active flag. Trial expiry, payment grace, suspension, cancellation, restoration, and downgrade need deterministic access behavior while preserving tenant data and offline/LAN safety.
Objective
Implement a tenant-lifecycle capability with versioned transition rules, effective restrictions, restoration, scheduled jobs, and safe coordination with entitlements, sessions, modules, public routing, workers, and provisioning.
Scope
provisioning,trial,active,renewal_due,past_due,grace,suspended,canceled,restoring, andblocked/manual_review, subject to docs(saas-control-plane): decide module admission, control-plane boundary, trust model, and lifecycle contracts #869.Out of scope
Security and integrity requirements
Acceptance criteria
Testing
Documentation
Dependencies
Subscription billing #876 will request lifecycle transitions through this contract rather than mutating tenant state directly.