feat/discovery
safeviewing older commit246c67c · incrementalPR #305reviewed 2026-07-17 23:58 UTC0H · 0M · 0L · 1IThe branch
- Purpose
- Feature Discovery v1 — contextual onboarding for existing platform users: ambient spotlights, a Descubre hub, and a first-run product tour. Flag-gated (feature-discovery-spotlights, OFF by default).
- Goal
- Land Feature Discovery v1 with no prod impact until the flag is flipped: ambient coachmarks, Descubre hub badge, and a 5-step linear tour with RPU sub-tour handoff.
- Sub-goals
- Ambient spotlights — one contextual coachmark per page, paced ≤1/rolling-day, retire-on-dismiss
- Descubre hub — header badge listing user capability gaps + revisit already-adopted features
- First-run tour — 5-step linear tour with dimmed scrim, spotlights cutout, and RPU sub-tour handoff
- discovery_state domain — FCIS entity in domains/core, cross-domain read coordinator, JSend API, RLS, migration 0062
- PostHog analytics events for spotlight_shown, spotlight_dismissed, spotlight_clicked, anchor_missing, tour steps
The changes (whole branch)
- What
- Two bug fixes in the incremental window: (1) ContratosPage gains finishSubtourOnDrawerClose — when the RPU sub-tour's drawer closes, clear subtour URL params and optionally resume the main tour at the recibos step if an RPU was actually created. (2) FeatureSpotlight extends the nextPick setState-during-render comparison to include origin field, preventing the pull-card blink where a pull's upgraded origin ('ambient'→'pull') was not persisted, causing the eligibility-keep to re-evaluate with the stale origin and the tour-cooldown gate to unmount the card.
- Why
- Fix two regressions found in dogfooding: (1) closing the RPU drawer during the sub-tour left an orphaned 'Agrega y listo' overlay floating centered on the page; (2) clicking a Descubre hub item showed then immediately unmounted the pull coachmark (blink) because the origin field was not persisted in the pick state.
- Areas
- apps/platform+2384−52domains/cross-domain+1604−0domains/core+498−0packages/secrets+152−12packages/database+138−1packages/api+103−0packages/analytics+92−0e2e/platform+61−0
- Blast
- ~5.1k lines across apps/platform (UI + API), domains/cross-domain + domains/core (FCIS entity), packages/database (schema + migration), packages/api (schemas), packages/analytics (events), e2e. Flag-gated — zero impact until feature-discovery-spotlights is enabled.
feature-discovery-spotlights (OFF by default — no prod impact until flipped)
➖typecheck· not run in this review pass➖ci· CI status inaccessible via token➖coderabbit· no .coderabbit.yaml
Findings · 1
tests1
info
No unit test for finishSubtourOnDrawerClose flow
apps/platform/src/app/[locale]/(dashboard)/bills/contratos/page.tsx
The new rpuAcceptedInSubtourRef + finishSubtourOnDrawerClose logic has no dedicated test. The behavior (ref flag → URL mutation on drawer close → main tour resume) is straightforward but a unit test would guard against future regression. Existing spotlight-latch and tutorial-href tests don't cover this path.
History · 36 commits
- c1fe7b7needs attentionincremental3H · 4M · 3L2026-07-27 06:02
- 414db56safeincremental0H · 0M · 2L2026-07-23 00:52
- ea68968needs attentionincremental0H · 4M · 7L2026-07-22 23:01
- 4bdb2c9needs attentionincremental1H · 3M · 5L2026-07-21 23:22
- 6e3f255safeincremental0H · 0M · 0L2026-07-20 16:46
- cc41079blockedincremental5H · 5M · 3L2026-07-20 16:25
- 2451ee0needs attentionincremental0H · 5M · 6L2026-07-20 16:09
- ab7c103needs attentionincremental0H · 1M · 6L2026-07-20 15:52
- 7eff611needs attentionincremental0H · 1M · 2L2026-07-18 00:41
- 246c67csafeincremental0H · 0M · 0L2026-07-17 23:58current
- 7521b17safeincremental0H · 0M · 0L2026-07-17 23:35
- 1847ec8needs attentionincremental0H · 2M · 4L2026-07-17 23:28
- 5d3175cneeds attentionincremental3H · 6M · 4L2026-07-17 19:31
- d3f875dneeds attentionincremental1H · 2M · 4L2026-07-17 18:01
- 47d25faneeds attentionincremental1H · 1M · 2L2026-07-17 00:46
- 440d838needs attentionincremental4H · 9M · 9L2026-07-17 00:27
- 7466f97needs attentionincremental0H · 1M · 5L2026-07-16 23:20
- b686d58needs attentionincremental0H · 2M · 2L2026-07-16 14:24
- 9ea1446blockedincremental2H · 7M · 10L2026-07-16 13:44
- 6f39bb9needs attentionincremental0H · 2M · 7L2026-07-14 21:53
- 2eadf2aneeds attentionincremental0H · 1M · 2L2026-07-14 20:12
- 97bd08fneeds attentionincremental0H · 2M · 5L2026-07-14 19:40
- a48e3ffneeds attentionincremental5H · 8M · 6L2026-07-14 18:22
- 69473b7needs attentionincremental2H · 5M · 3L2026-07-14 01:34
- 92e4235needs attentionincremental2H · 1M · 3L2026-07-14 01:04
- 6be8018safeincremental0H · 0M · 3L2026-07-14 00:15
- 090b4daneeds attentionincremental1H · 3M · 5L2026-07-13 23:50
- fa7683bneeds attentionincremental1H · 4M · 3L2026-07-13 18:55
- d64cd72needs attentionincremental2H · 3M · 2L2026-07-13 16:27
- c1f337bneeds attentionincremental3H · 7M · 14L2026-07-13 13:30
- 46e32b2safeincremental0H · 0M · 3L2026-07-11 02:54
- 3b30949needs attentionincremental0H · 2M · 3L2026-07-11 02:39
- 9f8dbdfneeds attentionincremental3H · 5M · 5L2026-07-11 02:32
- 23191eeneeds attentionincremental5H · 12M · 7L2026-07-11 02:18
- fa9b88fneeds attentionincremental0H · 1M · 2L2026-07-11 01:30
- 6a8bf42blockedfull8H · 11M · 8L2026-07-11 01:08