Goal
Build a reusable policy resolution engine that resolves grace period and offline timeout settings from a hierarchy: per-license override → vendor default → global platform default.
Requirements
Functional
Technical
Acceptance Criteria
Dependencies
Goal
Build a reusable policy resolution engine that resolves grace period and offline timeout settings from a hierarchy: per-license override → vendor default → global platform default.
Requirements
Functional
resolve_policy(license_id, vendor_id) → PolicySnapshot.license.grace_override>vendor.default_grace> global default (60 min).max_offline_hours: license override > vendor default > global (24 hours).heartbeat_interval_seconds: vendor default > global (300 seconds).Technical
app/services/policy_service.py.vendor_policies,license_policies, andplatform_defaultstables.LEFT JOINchain andCOALESCE.activation_sessions.policy_snapshot(JSONB column).Acceptance Criteria
grace=60,offline=24,heartbeat=300.Dependencies