← all branches

feat/discovery

needs attentionviewing older commit
4bdb2c9 · incrementalPR #305reviewed 2026-07-21 23:22 UTC1H · 3M · 5L · 5I
The branch
Purpose
Feature Discovery v1 — ambient spotlights + Descubre hub + first-run guided product tour for existing users, flag-gated (feature-discovery-spotlights, OFF by default).
Goal
Contextual coachmarks for unused capabilities, self-serve Descubre hub, 5-step first-run product tour. FCIS-compliant, RLS-enforced, PostHog analytics.
Sub-goals
  • Ambient spotlight computation (pure decision, rolling-day pacing)
  • Descubre hub (header badge + gap list)
  • First-run product tour (5 steps, dimmed scrim)
  • discovery_state table (profile-scoped RLS, migration 0063)
  • Adversarial review + fixes applied (Host→VERCEL_ENV, spotlight latch, atomic upsert)
The changes (whole branch)
What
Merge from main: renumber discovery_state migration 0062→0063, bring in energia findings API (finding.contract/handler/schemas), add energia sidebar nav, add prod Supabase MCP server.
Why
Main's migration 0062 (sloppy_ma_gnuci) conflicted with this branch's; resolved by renaming to 0063.
Areas
apps/platform+254252domains/cross-domain+16040domains/core+4980packages/secrets+15212packages/database+1381packages/api+1030packages/analytics+980e2e/platform+610
Blast
65 files +5232/-66 cumulative. Flag-gated — zero user impact until PostHog flag created.
feature-discovery-spotlights (PostHog, OFF) must be created before flag flip Run scripts/discovery-reclassify-consumer-orgs.sql before deploy One non-preview verification pass before staged rollout
CI / GitHub Checks· No check results availablecoderabbit· No .coderabbit.yaml present

Findings · 15

correctness3

medium

Migration renamed 0062→0063 via git mv, not drizzle-kit regeneration

packages/database/drizzle/0063_discovery_state.sql

Zero lines changed. Bare CREATE POLICY statements not idempotency-wrapped — double-apply would abort mid-file.

medium

Bare CREATE POLICY statements not idempotency-wrapped

packages/database/drizzle/0063_discovery_state.sql

Wrap in DO $$ BEGIN ... EXCEPTION WHEN duplicate_object THEN null; END $$; per migrations.md.

low

list contract declares 404 but handler never returns it

apps/platform/src/api/contracts/finding.contract.ts

Dead 404 misleads ts-rest client type inference.

security3

high

.mcp.json git-tracked — prod Supabase project ref in repo history

.mcp.json

Force-added file commits prod project_ref (tljxdspuxeyscdhbbzkn) to history. read_only=true is advisory server-side only. Fix: git rm --cached, move to .env.local.

info

discovery_state: no DELETE for authenticated — intentional

packages/database/drizzle/0063_discovery_state.sql

info

Platform admin bypass is JWT-grounded and intentional

apps/platform/src/api/handlers/finding.handler.ts

conventions5

medium

finding.contract missing 500 response declaration

apps/platform/src/api/contracts/finding.contract.ts:40

Declares 200/400/401/403/404 but no 500. ts-rest collapses undeclared codes. Add JSendFailSchema(['INTERNAL_ERROR']).

low

Handler calls queries directly (SG-19 justified)

apps/platform/src/api/handlers/finding.handler.ts:58

Canonical rule deviation; documented SG-19 exception for contract-anchored tables with no org_id.

low

fnd_ prefix not in utility CLAUDE.md or ontology

domains/utility/CLAUDE.md

info

FCIS entity structure fully compliant

domains/utility/src/finding/

info

Static/parametric route ordering correct

apps/platform/src/app/api/[...ts-rest]/route.ts

tests2

low

No handler-level test for 403 path (ensureModuleEntitled rejection)

apps/platform/src/api/handlers/finding.handler.ts

info

Test coverage solid: finding integration, contract, energia nav, discovery_state

improvement2

low

Missing trailing newlines in .mcp.json and 0063_discovery_state.sql

.mcp.json

low

disabled prop evaluates to false not undefined for non-greyed nav items

apps/platform/src/components/DashboardSidebar.tsx

History · 36 commits

  1. c1fe7b7needs attentionincremental3H · 4M · 3L2026-07-27 06:02
  2. 414db56safeincremental0H · 0M · 2L2026-07-23 00:52
  3. ea68968needs attentionincremental0H · 4M · 7L2026-07-22 23:01
  4. 4bdb2c9needs attentionincremental1H · 3M · 5L2026-07-21 23:22current
  5. 6e3f255safeincremental0H · 0M · 0L2026-07-20 16:46
  6. cc41079blockedincremental5H · 5M · 3L2026-07-20 16:25
  7. 2451ee0needs attentionincremental0H · 5M · 6L2026-07-20 16:09
  8. ab7c103needs attentionincremental0H · 1M · 6L2026-07-20 15:52
  9. 7eff611needs attentionincremental0H · 1M · 2L2026-07-18 00:41
  10. 246c67csafeincremental0H · 0M · 0L2026-07-17 23:58
  11. 7521b17safeincremental0H · 0M · 0L2026-07-17 23:35
  12. 1847ec8needs attentionincremental0H · 2M · 4L2026-07-17 23:28
  13. 5d3175cneeds attentionincremental3H · 6M · 4L2026-07-17 19:31
  14. d3f875dneeds attentionincremental1H · 2M · 4L2026-07-17 18:01
  15. 47d25faneeds attentionincremental1H · 1M · 2L2026-07-17 00:46
  16. 440d838needs attentionincremental4H · 9M · 9L2026-07-17 00:27
  17. 7466f97needs attentionincremental0H · 1M · 5L2026-07-16 23:20
  18. b686d58needs attentionincremental0H · 2M · 2L2026-07-16 14:24
  19. 9ea1446blockedincremental2H · 7M · 10L2026-07-16 13:44
  20. 6f39bb9needs attentionincremental0H · 2M · 7L2026-07-14 21:53
  21. 2eadf2aneeds attentionincremental0H · 1M · 2L2026-07-14 20:12
  22. 97bd08fneeds attentionincremental0H · 2M · 5L2026-07-14 19:40
  23. a48e3ffneeds attentionincremental5H · 8M · 6L2026-07-14 18:22
  24. 69473b7needs attentionincremental2H · 5M · 3L2026-07-14 01:34
  25. 92e4235needs attentionincremental2H · 1M · 3L2026-07-14 01:04
  26. 6be8018safeincremental0H · 0M · 3L2026-07-14 00:15
  27. 090b4daneeds attentionincremental1H · 3M · 5L2026-07-13 23:50
  28. fa7683bneeds attentionincremental1H · 4M · 3L2026-07-13 18:55
  29. d64cd72needs attentionincremental2H · 3M · 2L2026-07-13 16:27
  30. c1f337bneeds attentionincremental3H · 7M · 14L2026-07-13 13:30
  31. 46e32b2safeincremental0H · 0M · 3L2026-07-11 02:54
  32. 3b30949needs attentionincremental0H · 2M · 3L2026-07-11 02:39
  33. 9f8dbdfneeds attentionincremental3H · 5M · 5L2026-07-11 02:32
  34. 23191eeneeds attentionincremental5H · 12M · 7L2026-07-11 02:18
  35. fa9b88fneeds attentionincremental0H · 1M · 2L2026-07-11 01:30
  36. 6a8bf42blockedfull8H · 11M · 8L2026-07-11 01:08