Repository navigation
router: follow-ups for the store, forms and router inspectors #368
Copy link
Copy link
Open
Labels
bugSomething is broken or shows wrong dataSomething is broken or shows wrong datafeatureA feature request or a pull request that adds oneA feature request or a pull request that adds one
Description
Items still open from the audit issues #347, #348 and #349. The fixed items landed in #362; this issue tracks what is left. Each item says why it was not part of that fix.
From #347 (NgRx store)
Partly done (the rest is open):
- Low: Classic state is serialized twice; same() compares with JSON.stringify: report() now reuses the serialized classic state (c.last) while the store still holds the same object as lastRaw. same() is now a structural deep compare with no string building (and key order no longer matters). Not done: the overlay's JSON.stringify body compare in ngrx-overlay.ts, because removing it needs dirty tracking for signal stores too. Caveat: a store that mutates its state in place would now report the cached copy, which was already invisible to the diff.
- Low: Report entries are not shape-checked (null log entry throws in mergeNgrxReport): mergeNgrxReport now checks each store, log entry and classic block with valibot looseObject schemas and drops bad ones (a null entry no longer throws). Test added. Not done: the per-page size cap, because honest pages already bound blobs through serialize budgets, and choosing what to show for an oversized blob is a product decision.
Open:
- Medium: Store DevTools history actions missing (toggle, commit, reset, sweep, pause, lock): These are six new NgrxRequest types and new write tools with ACTION_TOOLS gating and panel controls: new public API and a product decision, too big for a small local fix.
- Medium: No call site for any entry (opt-in ngrx.trace stack capture): Needs a new config option, stack trimming and redaction, and a file-link UI: a new public option and a design decision.
- Low: The collector patches store objects (to confirm): Confirmed that the collector wraps methods and signal set/update and patches dispatch. The suggested fix (watchState-only mode, a record toggle that unwraps, a documented clash with withDevtools) is a design change, not a small fix.
- Improvement: collapsible state tree with search, copy path and changed-key highlight: New component and design work, not small or local.
- Improvement: agent tool that explains why a state changed: New agent tool (public API plus config.ts registration) that also depends on the untracked stack trace item.
- Improvement: action frequency and duration view, flagging effect loops: New collector aggregation and a new panel view: needs product and design decisions.
From #348 (forms and WebMCP)
Partly done (the rest is open):
- Low: A running WebMCP call tags every event as agent: webMcp.active() now covers only the synchronous window (current !== null), so events streamed during a long async submit are no longer tagged agent. takeActivity, which tags pushed diffs, still counts running calls; changing it would also re-tag the submit outcome, so it was left as is.
Open:
- Low: Unlinked WebMCP tools are not shown in the panel: Needs new panel UI in app/ (a page-level list); larger than a local fix.
- Low: The forms page is one 1,666-line component: Large refactor of app/ into several components and a store; not small or local.
- Improvement: Inline editing of value/touched/dirty in the tree: New panel UI; needs a design decision.
- Improvement: Turn form history into a Playwright/Testing Library test: New feature extending the export format; not small.
- Improvement: Signal Forms schema view: New feature across package and panel.
- Improvement: Accessibility checks in forms lint: Several new lint rules; larger than a local change.
- Improvement: WebMCP 'Try this tool' button and inputSchema JSON: New gated action plus panel UI; needs a product decision.
- Improvement: Skip full serialization when nothing changed: Needs version-counter tracking across collector and serializer; not small.
- Improvement: Per-form origin attribution: Reworks origin tracking across the collector; needs a design.
- Improvement: Show setup errors as a page-level banner in the panel: Panel UI work in the 1,666-line forms page; left for the panel refactor.
From #349 (router)
Partly done (the rest is open):
- Medium: links on parents are missed: linksOf now also selects [routerlinkactive], so
<li routerLinkActive><a routerLink>is found (test in router-audit.test.ts). Property-bound [routerLink] on other elements and the MAX_LINKS truncation count are not done: the count would change the payload type shared with the panel. - Medium: router attached only once: overlay.ts now detaches when the router is disposed or its root leaves the DOM, then attaches again. The 3-miss cap is replaced with createScanBackoff (new reset()). Overlay tests cover the disposed router and a late router. A second app that appears while the first router is still alive is not detected.
Open:
- Low: shared module state across routers: Moving the state into a per-router context is a wider refactor of router.ts. The overlay watches only one router at a time.
- Low: panel copies server types by hand: Needs a shared types entry point or a contract test across app and package, which is larger than a local fix.
- Low: timeline phase colours hard-coded (to confirm): The hex colours are confirmed, but the contrast was not measured. The fix needs new theme tokens and palette choices under ui-guidelines.md, which is design work.
- Low: events-only wording contradicts the data: The wording spans the package, panel and docs, and the right fix (wording or how mode is set) is a decision.
- Improvement: 'what happens if I go to X' card: New feature across the package and panel.
- Improvement: diff two navigations view: New feature and UI design.
- Improvement: live redirect-from-query check: New detection feature; not small.
- Improvement: HTTP list from the HTTP collector: Cross-collector change.
- Improvement: navigation streaming resource/tool: New public agent API.
- Improvement: record withNavigationErrorHandler / Navigation API: New data and UI; not small.
- Improvement: new lint rules: New rules need design and docs; not small.
Tracked elsewhere
These items from the audit are not listed above because another issue already tracks them:
- Scrubbing through past NgRx states: phase 4 of 4: deeper diagnosis #343 (full state at any past entry)
- Gating instrument and resolve-lazy behind actions.router: phase 1 of 4: safe by default and wired into your workflow #340 (fill ACTION_TOOLS.router)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething is broken or shows wrong dataSomething is broken or shows wrong datafeatureA feature request or a pull request that adds oneA feature request or a pull request that adds one
Activity
fix(components): report silent limits, fix two notices, add real-app …