- Shipped
- 8 Agosti 2026, 17:15 UTC
- Author
- Kamo
- Commit
- 817695d
Two defects found by checking prod before flipping kamo.entitlement.fail-open. Sign Pink is a second entitlement root (isPlatformProduct, with its own FREE/BUSINESS/PRO plans). The runner only seeded the top-level org, so Sign Pink's plans would have had no app rows at all — and once a missing row means deny, that revokes every app from every Sign Pink tenant. It now seeds every org that is top-level, isPlatformProduct, or owns plans. The per-tier app matrix was invented. An explicit isIncluded=false row denies regardless of the fail-open flag, so seeding a guessed tier list takes apps away from orgs that have them today — the guessed FREE tier would have stripped POS, MEET, KB, MARKETING, EMAIL, AI_SUPPORT, HRS, ESIG and VOIP from the four live FREE_DEFAULT orgs at migration time. Without the owner's commercial intent the only defensible exclusion is an app that has not shipped, so inclusion now derives from DevelopmentStageType: COMPLETED included, unreleased excluded. That still gates MLOS and the personal-loan app properly while changing nothing an org uses today; tiers are curated per plan in the settings UI, which this runner never overwrites. Verified against prod after running: 21 app features on each root, 105 plan rows for KamoCRM and 63 for Sign Pink, zero uncovered plan-by-app combinations, MLOS(14) and LOS(25) excluded on all 8 plans, and zero shipped apps wrongly excluded.