Skip to content

router: follow-ups for the store, forms and router inspectors #368

Open

Description

@erkamyaman

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:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or shows wrong datafeatureA feature request or a pull request that adds one

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions