Repository navigation
Confidence 10/10 · No issues found
🟢 Confidence 10/10 · safe to merge. New page plus a stricter org-scope guard on ingest, the guard pinned by a foreign org_id test; the page's states are pinned by scene tests.
no findings · tests covered · risk high · 2/2 new units observable
Adds a /product-analytics page (events, funnels, paths) on the shared step builder and filter rail, a demo-seed generator for sessions and product events, and makes the ingest org guard read org_id. Safe to merge. The open McpQueryErrors traced to apps/web/src/page/registry.ts come from the agent's MCP registry; this diff only registers the new route there and does not fix them.
/product-analyticsholds the URL-borne funnel and paths definition and debounces typed steps 450 msnavigatewrites the drafts into every navigation and keeps a blank anchor the URL omitsanalyticsFilterRailis extracted to the kit, with Traffic and Event sections optional- The ingest org guard also refuses a row whose
org_idnames another org
Production impact
Open errors in the changed files (2)
| Issue | Service | Occurrences | File |
|---|---|---|---|
| @maple/mcp/errors/McpQueryError (7 issues) | maple-ai | 33 | apps/web/src/page/registry.ts |
| @maple/mcp/errors/McpQueryError (3 issues) | maple-chat | 15 | apps/web/src/page/registry.ts |
After this merges, Maple checks whether they stop.
What was checked
navigatekeepsmodel.steps/model.anchorwhen the URL omits a blank Page anchor (update.ts:79), so picking a kind survives Depth/Direction/filter changes- Web analytics keeps its Traffic group and Event section through
view-filters.ts:34-51 routeWindowStepre-requests every slot on a non-window change, so a pick refetches the funnel/paths key
Observability coverage: 2 of 2 changes observable
| Change | Kind | Observable | Evidence |
|---|---|---|---|
Product events reads (getProductEventNames, getProductEventsFunnelWidget, getProductEventsPathsWidget) |
outbound query | yes | Existing WarehouseQueryService.compiledQuery call sites; QueryEngine.getProductEventNames spans appear in the PR's preview trace table |
Demo seed session_replays / product_events writes |
warehouse write | yes | Reuses ingestAll in DemoService.ts:56, the already-traced ingest path |
477ddce · Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one.