Major release consolidating this cycle's platform-integrity and billing work.
Highlights
- Tenant isolation — team-scoping hardened across background jobs, GEDCOM/GRAMPS import/export, research spaces, and record matching; permissions follow the active tenant.
- No fabricated data — the platform never presents invented values as fact. A mechanical fabrication gate (architecture test) bans randomness, hardcoded certainty stand-ins, and domain values constructed in error paths; provider-backed features degrade to a typed
Unavailableresult. DNA matching, facial recognition, record matching, handwriting, statistics, and achievements all made honest. - In-app notifications — the database channel now stores and renders in a Filament bell (DNA matches, duplicates, record suggestions, achievements).
- Stripe production — webhook endpoint fails closed on missing signature secret; Stripe Billing portal for card/invoices; failed-payment and subscription-ended notifications; pause/resume with access revoked while paused.
- Navigation — app-panel groups consolidated to a single, guarded taxonomy.
- Fixes — GEDCOM import no longer crashes on
trees.user_id; DNAdna:matchcommand rebuilt without fabricated centimorgans; numerous phantom-column and null-deref repairs.
See the commit history since 2.2.0 for the full change set.