Catalog plan coverage and free labels

Confirmed against the live catalog source on 2026-09-09: a viewer with an active Dedicated subscription can see paid-tier courses marked red even though the subscription covers them. This is a presentation defect; the red label is not evidence of a missing entitlement.

StoreCatalogLayoutAreas.ObserveViewerFacts reads individual entitlement records and installed copies. It does not read the active subscription or held coupon keys. Card sets planIncluded = PlanTiers.RankOf(tier) == 0; StatusSlot then colors every other tier red unless the package was acquired individually. Its comment promises “do I have it,” but the inputs answer only “is this free or already individually acquired?”

The licensing rule is different: SubscriptionFact.Covers checks active status, expiry, and tier coverage. PlanTiers.IsAllAccess explicitly makes Dedicated cover every known package tier, including Enterprise. A held coupon key is another independent coverage source through CouponKeys.Applicable. Acquiring each package separately materializes its access/install state; it is not a prerequisite for showing that a plan includes the package.

Correction

The catalog keeps the package's tier visible and adds green Free for you text when the viewer's active subscription or applicable held key covers it. Keep coverage, individual purchase, installation, and availability on the current mesh distinct. A package awaiting provisioning may be included in a plan without being ready to open. While coverage is loading or cannot be determined, use a neutral state rather than asserting an upgrade is needed.

The catalog must consume the existing licensing predicates; it must not grant access while rendering or infer entitlement from global-admin status. Verify active Dedicated coverage of Enterprise packages, ordinary tier boundaries, expired/inactive plans and keys, individually purchased packages, unknown package tiers, and unresolved viewer facts.

ObserveViewerFacts now includes the live Subscriptions.ObserveCurrent and CouponKeys.ObserveHeld readers. ViewerFacts.Covers calls the existing licensing predicates and checks that plan/key ownership matches the viewer. Coverage is separate from the purchase and install sets. The free label is localized in English/German through StoreTexts; purchased cards retain their tier as well. Unconfirmed coverage uses the neutral foreground rather than an error color.

The four CatalogCoverageTests cases execute the pure predicates and labels (including tier, status, expiry, identity, scope and localization boundaries), and are registered in the Catalog Tests area. Full mesh compilation and rendered integration verification remain required before release; the local default framework checkout was stale during this investigation. Private account and coupon records are not copied into the public module.

The live readers seed a neutral state without a timeout that would end an idle page subscription. LiveCoverageTests emits successive snapshots to prove activation, cancellation, deletion, key issuance, revocation and holder filtering; one-shot readers remain available for actions.

Reconnecting…
The server was updated. Reloading the page to pick up the latest version.