Skip to content

fix: resolve the P3 issues - #186

Merged
erkamyaman merged 25 commits into
santoshyadavdev:mainfrom
erkamyaman:fix/p3-issues
Sep 30, 2026
Merged

erkamyaman merged 25 commits into
santoshyadavdev:mainfrom
erkamyaman:fix/p3-issues

Conversation

@erkamyaman

Copy link
Copy Markdown
Collaborator

Fixes the open P3 issues from the September sweep, with tests for each fix and docs updated to match. Based on #185 (P2), which is based on #184 (P1), so merge those first.

Closes #160
Closes #161
Closes #162
Closes #163
Closes #165
Closes #167
Closes #168
Closes #169
Closes #170
Closes #171
Closes #172
Closes #173
Closes #174
Closes #175
Closes #176
Closes #177
Closes #178
Closes #179
Closes #180
Closes #182
Closes #183

NgRx and agents

  • NgRx store: dispatch an action from the panel and from an agent tool #160: NgrxRequest only had restore and latest, and ACTION_TOOLS.ngrx was empty. I added two validated requests: 'dispatch' (type string plus a plain JSON object payload, checked by dispatchProblem) and 'dispatch-again' (a shallow copy of the raw logged action). The panel gets a 'Dispatch an action' form under the action log, with type suggestions from source and the log, a JSON payload field, and a 'Dispatch again' button on each action entry. A new agent tool, dispatch-ngrx-action, returns the new log entry. It is listed in ACTION_TOOLS.ngrx, AGENT_INSPECTOR and PAGE_AGENT_ENTRIES, and actionBlockedMessage and the action label now also cover dispatching. The get-ngrx-store scan now reports action type strings for createAction and createActionGroup. Tests cover the collector, the scan, the RPC and MCP tool, the config lists and the panel.
  • explain-pipe tells agents to turn on an "Instrument" button that does not exist #161: When recording was off, explainPipeText told agents to click an "Instrument" button that does not exist, and the message had an em dash. It now names Record calls and uses a comma. The new rpc/tests/pipe-explain.test.ts covers recording off and on.
  • NgRx store: Restore button shows for actions Store DevTools dropped (maxAge) or never recorded (filters) #170: Every @ngrx/store entry was created with restorable: !!devtools and the flag never changed, so Restore showed for actions Store DevTools had dropped (maxAge) or never recorded (filters, paused recording). The collector now checks liftedState.actionsById when it logs an action, which marks unrecorded ones 'not-recorded'. On each collect it marks held actions that Store DevTools has since dropped as 'dropped'. The overlay sends only the new flag changes (unrestorableSince / report.unrestorable), mergeNgrxReport applies them to entries already on the server, and restore gives a different error for each case. The panel hides Restore and explains why, and the docs FAQ covers both cases. Tests cover real Store DevTools with maxAge and actionsBlocklist, the overlay-to-server update and the merge.

Docs

  • Document mounting the hub in Hono, h3 and Fastify SSR servers #162: No docs page covered mounting the hub outside Express, though initNgDevtoolsHub() already returns a web handler. Added a docs page for Hono, h3 and Fastify (apps/docs/src/content/getting-started/other-servers.md) covering the catch-all route under devtools.base, the 404-outside-base behaviour and the transport choice (ws: false, sidecar, or attach(server)). It is linked from the nav, the introduction and the Express page. Added a Hono router test in hub.test.ts, with hono 4.13.8 as a devDependency.
  • Signals docs: debugName advice is outdated since the compiler adds it in dev builds #163: The Signals docs said names come only from a manual debugName, but the compiler's implicit_signal_debug_name transform adds one in dev builds, and a failed write hook gave no sign. The Exact and sampled values section and the FAQ now describe the real causes. installSignalWriteHook now returns null when the hook is missing, the overlay pushes writeHook: false, and the panel shows a status notice.

Forms and HTTP

  • HTTP mock rules ignore responseType and return parsed JSON for blob and arraybuffer requests #167: parseBody JSON-parsed every non-text body and the mock always sent content-type application/json. It now returns a Blob for blob requests and an ArrayBuffer for arraybuffer requests (Uint8Array.from so it lands in the page's realm), and mockContentType sets text/plain, application/octet-stream or application/json on both the mocked response and the injected HttpErrorResponse. The call preview uses the rule's body text, so a Blob no longer previews as "{}" (packages/ng-devtools/src/http.ts).
  • Forms "Pick field on page" can't be cancelled from the panel #174: Esc was only heard on the app's document and the panel had no way to cancel. There is now a cancel-pick form action that runs cancelPick on the page. In the panel the button switches to "Cancel picking" with aria-pressed="true" and calls it, host Esc sends the same cancel, and a pickSeq counter drops the result of a superseded pick (forms-actions.ts, forms-collector.ts, app/src/pages/forms-inspector.ts).
  • Forms redaction is hard to act on: raw reason codes in the panel and a refusal with no unmask hint #175: The raw RedactReason codes reached the panel, the field explanation and a fixed refusal message. REDACT_LABELS and unmaskHint in forms-privacy.ts map each code to a plain label and the matching unmask. secretOf in forms-actions.ts finds which key matched and why (an ancestor match reads "inside a secret group"). The name check still ignores the element marker, so write safety is unchanged. Refusals, explain-field, the Fields tab and a new line where the Set editor is hidden (with a link to the unmask docs) all use the labels.

Components and injectors

  • Host path is the same for every list item wrapped in an element #168: hostPath() only indexed hosts that were direct siblings, so cards wrapped in
  • or all got the same path. Each host is now indexed among same-tag hosts under its nearest component ancestor (or the document root) in DOM order, crossing shadow roots and skipping nested components' hosts (component-tree.ts hostsUnder). Tests cover wrapped list items and shadow roots, and the Host path docs are updated.
  • Injector tree: show what each service injects, not only components #169: Only component and directive constructors got dependenciesOf(), so environment injectors had no dependency list. collectInjectorTree now reads each environment injector's own records and calls ɵgetDependenciesFromInjectable only for class tokens whose record already holds an instance (it skips pending placeholders and multi records, so nothing gets created). Results are cached per injector and token and capped at 500. They show in the DI panel as 'Injected by its services', and inspect-providers now covers services too (whole tree, and token injectedBy). Covered by a collector test (it asserts pending services are never asked for) and an agent test.
  • Page highlight disappears after 2 seconds while the row is still hovered or focused #171: showHighlight always cleared itself after 2 s. Panel highlights now stay until a clear arrives, with a 60 s safety timeout (HIGHLIGHT_SAFETY_MS). Agent highlights pass durationMs=2000 through highlight-in-page. Pick mode in both component-pick and forms-collector keeps the box until the pointer leaves the page or picking ends. Tests use fake timers for panel and agent highlights and check pick-mode mouseout. The overlay docs no longer say the box clears after 2 seconds.
  • Components truncation notice does not say which limit was hit #172: Both caps set the same truncated flag and nothing recorded which one fired. The report now has truncatedBy {components|depth}, and the server validates it. The panel notice has role=status and names the cap, the count reads '2000+', and the no-match state says the filter only searches listed components. inspect-component and highlight say the tree stopped at the cap when nothing matches. Tests cover the collector, panel helpers and agent tools. The components docs and the resource docs are updated.
  • Report the runtime change detection mode: zoneless, zone.js, or zone.js loaded but unused #180: The only zone signal was a source scan, which finds nothing in a default zoneless app. New zone-mode.ts reads the NgZone record the root environment injector created: a real NgZone has an own _inner zone, while NoopNgZone does not. It combines this with globalThis.Zone to report zoneless, zone or zone-unused. The mode travels with the injector tree report (validated on the server and put in shared state). It shows as a Change detection chip on the Dashboard and is stated in the change-detection and inspect-providers agent answers. Tests cover all three modes, the server path and the chip label. The dashboard, tools and resources docs are updated.

Router

  • Routes tab: Go with an empty :param shows agent wording far from the row #176: Cause: Go stayed enabled with an empty :param, so the agent-worded error from fillPattern came back and landed in the status line at the top of the Routes tab. Fix: Go now checks the params first. It marks the empty fields with aria-invalid, says "Fill in :id to navigate." and moves focus to the first empty field. Go and Read lazy results now show in a role="status" row under the row that was clicked (app/src/pages/route-tree.ts).
  • Router: "Record each guard and resolver" checkbox stays toggled when the request fails #177: Cause: routerAction passed on rpcTry's null, which skipped the error branch, and toggleInstrument never put the native checkbox back. Fix: routerAction now returns { error: 'Could not reach the page.' } in place of null. On any error, toggleInstrument sets the checkbox back to page().instrumented, and abort() shows that error instead of "#undefined" (router-types.ts, route-timeline.ts, route-current.ts).
  • Router outlet tree: show routerOutletData passed to each outlet #178: Cause: outletsOf never read RouterOutlet.routerOutletData. Fix: outletsOf now stores a redacted, capped preview (serialize, at most 300 chars) as OutletInfo.data. The panel's Outlets list shows it, the inspect-route tool prints a routerOutletData line for each outlet, and the tool description and the docs mention it.
  • Router Replay stays enabled for navigations whose URL is redacted #179: Cause: Replay was enabled for every navigation, even when the page-side isSafeUrl would refuse it. Fix: a new isReplayableUrl in router-types.ts copies the isSafeUrl rule. Replay is now disabled for redacted or non-relative URLs, with a visible note linked by aria-describedby (the writes-off note still wins when writes are off).

Signals and panel

  • Test the Chrome extension connection flow and status messages #165: Cause: extension/panel-bridge.js had no tests. Fix: new packages/ng-devtools/src/tests/extension-panel-bridge.test.ts (runs in pnpm test:devtools). It loads panel.html in jsdom, runs the script in a vm with a chrome.* stub and a mocked fetch, and covers eight cases: the status region, a non-http page, missing permission then granted, access declined, no server (each URL listed and fetched once), server found (frame URL with baseURL and pageId, and without pageId), and a navigation during detection. Removing the URL dedupe makes the no-server test fail.
  • Signals: let users jump to a dependency or consumer from the detail panel #173: Cause: Dependency and consumer entries were static
  • items that still had a hover style. Fix: each entry is now a .rel-link button with the label 'Go to '. jumpTo() selects the node (or the resource that owns an internal signal), clears the name and kind filters if they hide it, says so in a persistent role=status note, then scrolls the card into view and focuses it. The hover style is gone from the static internals rows. New signal-jump.test.ts fails before the fix and passes after, and signals.md is updated.
  • Panel shows "Defaults" and turned-off inspectors until the connection is up #182: Cause: panelConfig(null) returns the all-on defaults while the panel is still connecting. Fix: App now has availableTabs (the config-based list) and tabs, which shows only Dashboard plus the open tab until rpc is set. The Dashboard hides its stat cards and shows an aria-busy Configuration block saying Loading… until it connects. New app/src/tests/config-pending.test.ts fails before the fix and passes after, and dashboard.md is updated.
  • Signals inspector keeps a closed tab's graph for up to 20 seconds #183: Cause: leave() forgot every inspector's page except signals, and there was no forget RPC, so a closed tab's graph stayed until the 15 s expiry sweep. Fix (kept from the earlier run after checking it): a shared forgetSignalPages helper in devframe.ts is used by both the sweep and a new forget-signal-page action (mapped to signals in RPC_INSPECTOR). It moves draft.graph to the most recent page that is left. leave() calls it and resets lastSignalKey and historyDelta so a page restored from the back/forward cache pushes the full graph again. Tests are in agent-tools.test.ts and overlay-config.test.ts.

Left open

Notes for review

Checks

  • pnpm test:devtools: 1040 tests pass
  • pnpm test:panel: 65 tests pass
  • pnpm test:axe: 0 violations in light and dark
  • pnpm exec nx test angular-devtools, pnpm typecheck, pnpm format:check, pnpm skills:check, docs build: pass
  • extension/ui rebuilt in its own commit

Fixes wrong data, leaked values and broken setups found in the issue
sweep: signal history, NgRx restore, forms selects, router labels and
large route configs, pipe and Analog redaction, HTTP fault rules,
Analog hydration and Nx routes, build-meta, mount path, popup server
detection, extension panel after worker idle, Vite restart, HTTPS,
WebSocket guard and base handling, hub restarts, static report scans
and the build output guard. Docs are updated to match.

Fixes santoshyadavdev#63, santoshyadavdev#64, santoshyadavdev#65, santoshyadavdev#66, santoshyadavdev#67, santoshyadavdev#68, santoshyadavdev#69, santoshyadavdev#70, santoshyadavdev#71, santoshyadavdev#72, santoshyadavdev#73, santoshyadavdev#74, santoshyadavdev#75, santoshyadavdev#76, santoshyadavdev#77, santoshyadavdev#78, santoshyadavdev#79, santoshyadavdev#80, santoshyadavdev#81, santoshyadavdev#82, santoshyadavdev#83, santoshyadavdev#84
Rebuilds extension/ui so the bundled panel matches the app changes
for the NgRx restore banner, router truncation and server detection.
Restoring a state or pressing Back to latest removed the focused
control, so focus fell to the page body. Focus now moves to the Back
to latest button or the State tree, and the banner no longer repeats
the status message.
At 360px the floating panel stayed 720px wide and cut off the no
server message and the toolbar. The panel is now clamped to the
window, the message scrolls, is announced through a status line and
has a heading, and the setup link says it opens a new tab.
Rebuilds extension/ui so the bundled panel includes the store
inspector focus fix.
Fixes wrong or missing data, accessibility gaps, redaction gaps and
limits across forms, SSR and HTTP, injectors, NgRx, signals,
components, overlay, router, Analog, pipes, the CLI and config, and
adds panel tests and an axe check to CI. Also adds the features the
P2 issues asked for: defer blocks, element picking, component
properties, action origins, resource entries and change detection
recording. Docs are updated to match.

Refs santoshyadavdev#100, santoshyadavdev#102, santoshyadavdev#128
Fixes santoshyadavdev#85, santoshyadavdev#86, santoshyadavdev#87, santoshyadavdev#88, santoshyadavdev#89, santoshyadavdev#90, santoshyadavdev#91, santoshyadavdev#92, santoshyadavdev#93, santoshyadavdev#94, santoshyadavdev#95, santoshyadavdev#96, santoshyadavdev#97, santoshyadavdev#98, santoshyadavdev#99, santoshyadavdev#101, santoshyadavdev#105, santoshyadavdev#106, santoshyadavdev#107, santoshyadavdev#108, santoshyadavdev#109, santoshyadavdev#110, santoshyadavdev#111, santoshyadavdev#112, santoshyadavdev#113, santoshyadavdev#114, santoshyadavdev#115, santoshyadavdev#116, santoshyadavdev#117, santoshyadavdev#118, santoshyadavdev#119, santoshyadavdev#121, santoshyadavdev#122, santoshyadavdev#123, santoshyadavdev#124, santoshyadavdev#125, santoshyadavdev#126, santoshyadavdev#127, santoshyadavdev#129, santoshyadavdev#130, santoshyadavdev#131, santoshyadavdev#132, santoshyadavdev#133, santoshyadavdev#134, santoshyadavdev#135, santoshyadavdev#136, santoshyadavdev#137, santoshyadavdev#138, santoshyadavdev#139, santoshyadavdev#140, santoshyadavdev#141, santoshyadavdev#142, santoshyadavdev#143, santoshyadavdev#144, santoshyadavdev#145, santoshyadavdev#146, santoshyadavdev#147, santoshyadavdev#148, santoshyadavdev#149, santoshyadavdev#150, santoshyadavdev#151, santoshyadavdev#152, santoshyadavdev#153, santoshyadavdev#154, santoshyadavdev#155, santoshyadavdev#156, santoshyadavdev#158, santoshyadavdev#159
Rebuilds extension/ui so the bundled panel includes the P2 panel
changes.
Fixes smaller data, wording and accessibility gaps across NgRx, forms,
HTTP mocks, components, injectors, router and signals, and adds the
features the P3 issues asked for: NgRx dispatch from the panel and an
agent tool, service dependencies in the injector tree, outlet data,
the change detection mode, signal jump links and a docs page for
Hono, h3 and Fastify. Docs are updated to match.

Fixes santoshyadavdev#160, santoshyadavdev#161, santoshyadavdev#162, santoshyadavdev#163, santoshyadavdev#165, santoshyadavdev#167, santoshyadavdev#168, santoshyadavdev#169, santoshyadavdev#170, santoshyadavdev#171, santoshyadavdev#172, santoshyadavdev#173, santoshyadavdev#174, santoshyadavdev#175, santoshyadavdev#176, santoshyadavdev#177, santoshyadavdev#178, santoshyadavdev#179, santoshyadavdev#180, santoshyadavdev#182, santoshyadavdev#183
Rebuilds extension/ui so the bundled panel includes the P3 panel
changes.
@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

Next included review available in 14 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 2 included reviews currently available. Your 57 included PR review attempts over the past 7 days set your current allowance at 2 reviews per hour.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Essentials

Run ID: 51e20182-b274-4821-94ef-6d586fa1854a

📥 Commits

Reviewing files that changed from the base of the PR and between e3d635c and 00b8e76.

⛔ Files ignored due to path filters (2)
  • extension/ui/assets/index-DnyDdE8h.js is excluded by !**/assets/index-[0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-].js
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (94)
  • app/src/__tests__/config-pending.test.ts
  • app/src/__tests__/dashboard-cards.test.ts
  • app/src/__tests__/forms-panels.test.ts
  • app/src/__tests__/panel-highlight.test.ts
  • app/src/__tests__/router-panels.test.ts
  • app/src/__tests__/signal-inspector.test.ts
  • app/src/__tests__/signal-jump.test.ts
  • app/src/__tests__/store-inspector-focus.test.ts
  • app/src/__tests__/store-inspector.test.ts
  • app/src/app.ts
  • app/src/pages/component-tree-state.ts
  • app/src/pages/component-tree.ts
  • app/src/pages/dashboard.ts
  • app/src/pages/di-inspector.ts
  • app/src/pages/forms-field-detail.ts
  • app/src/pages/forms-inspector.ts
  • app/src/pages/forms-types.ts
  • app/src/pages/route-current.ts
  • app/src/pages/route-timeline.ts
  • app/src/pages/route-tree.ts
  • app/src/pages/router-types.ts
  • app/src/pages/signal-inspector.ts
  • app/src/pages/store-inspector.ts
  • app/src/pages/store-types.ts
  • app/src/rpc.ts
  • apps/docs/src/content/agents/mcp-server.md
  • apps/docs/src/content/agents/resources.md
  • apps/docs/src/content/agents/tools.md
  • apps/docs/src/content/getting-started/configuration.md
  • apps/docs/src/content/getting-started/express.md
  • apps/docs/src/content/getting-started/introduction.md
  • apps/docs/src/content/getting-started/other-servers.md
  • apps/docs/src/content/getting-started/overlay.md
  • apps/docs/src/content/guides/ngrx-signals-restore.md
  • apps/docs/src/content/inspectors/components.md
  • apps/docs/src/content/inspectors/dashboard.md
  • apps/docs/src/content/inspectors/forms.md
  • apps/docs/src/content/inspectors/injectors.md
  • apps/docs/src/content/inspectors/ngrx-store.md
  • apps/docs/src/content/inspectors/router.md
  • apps/docs/src/content/inspectors/signals.md
  • apps/docs/src/content/inspectors/ssr-http.md
  • apps/docs/src/content/security.md
  • apps/docs/src/ngmd.config.ts
  • extension/ui/assets/browser-agent-rpc-BXhoSh1z-CkzEjDUc.js
  • extension/ui/index.html
  • packages/ng-devtools/package.json
  • packages/ng-devtools/src/__tests__/agent-tools.test.ts
  • packages/ng-devtools/src/__tests__/component-agent.test.ts
  • packages/ng-devtools/src/__tests__/component-pick.test.ts
  • packages/ng-devtools/src/__tests__/component-tree.test.ts
  • packages/ng-devtools/src/__tests__/config.test.ts
  • packages/ng-devtools/src/__tests__/extension-panel-bridge.test.ts
  • packages/ng-devtools/src/__tests__/forms-actions.test.ts
  • packages/ng-devtools/src/__tests__/forms-collector.test.ts
  • packages/ng-devtools/src/__tests__/forms-mcp.test.ts
  • packages/ng-devtools/src/__tests__/http.test.ts
  • packages/ng-devtools/src/__tests__/hub.test.ts
  • packages/ng-devtools/src/__tests__/injector-tree.test.ts
  • packages/ng-devtools/src/__tests__/ngrx-collector.test.ts
  • packages/ng-devtools/src/__tests__/ngrx-mcp.test.ts
  • packages/ng-devtools/src/__tests__/overlay-config.test.ts
  • packages/ng-devtools/src/__tests__/page-highlight.test.ts
  • packages/ng-devtools/src/__tests__/panel-component-tree.test.ts
  • packages/ng-devtools/src/__tests__/panel-highlight-sessions.test.ts
  • packages/ng-devtools/src/__tests__/router-features.test.ts
  • packages/ng-devtools/src/__tests__/router-tools.test.ts
  • packages/ng-devtools/src/__tests__/signal-history.test.ts
  • packages/ng-devtools/src/component-pick.ts
  • packages/ng-devtools/src/component-tree.ts
  • packages/ng-devtools/src/config.ts
  • packages/ng-devtools/src/devframe.ts
  • packages/ng-devtools/src/forms-actions.ts
  • packages/ng-devtools/src/forms-collector.ts
  • packages/ng-devtools/src/forms-privacy.ts
  • packages/ng-devtools/src/http.ts
  • packages/ng-devtools/src/injector-tree.ts
  • packages/ng-devtools/src/ngrx-collector.ts
  • packages/ng-devtools/src/ngrx-overlay.ts
  • packages/ng-devtools/src/ngrx-shared.ts
  • packages/ng-devtools/src/overlay.ts
  • packages/ng-devtools/src/page-highlight.ts
  • packages/ng-devtools/src/router-links.ts
  • packages/ng-devtools/src/rpc/__tests__/get-ngrx-store.test.ts
  • packages/ng-devtools/src/rpc/__tests__/pipe-explain.test.ts
  • packages/ng-devtools/src/rpc/component-tools.ts
  • packages/ng-devtools/src/rpc/forms-explain.ts
  • packages/ng-devtools/src/rpc/get-ngrx-store.ts
  • packages/ng-devtools/src/rpc/injector-tools.ts
  • packages/ng-devtools/src/rpc/ngrx-tools.ts
  • packages/ng-devtools/src/rpc/pipe-explain.ts
  • packages/ng-devtools/src/rpc/router-tools.ts
  • packages/ng-devtools/src/types.ts
  • packages/ng-devtools/src/zone-mode.ts
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added area: panel The devtools panel app (app/) area: package The ng-devtools package (packages/ng-devtools) area: extension The Chrome extension area: demo The demo apps area: agents MCP server, agent tools and resources area: docs The documentation site area: ci Workflows, hooks and repository tooling labels Sep 30, 2026
@nx-cloud

nx-cloud Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit 00b8e76

Command Status Duration Result
nx affected -t test build ✅ Succeeded <1s View ↗

💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗


☁️ Nx Cloud last updated this comment at 2026-09-30 22:44:11 UTC

@erkamyaman
erkamyaman marked this pull request as ready for review September 30, 2026 20:05
@erkamyaman erkamyaman self-assigned this Sep 30, 2026
@erkamyaman
erkamyaman removed the request for review from santoshyadavdev September 30, 2026 20:09
Canonicalizes paths in the build output guard, keeps select writes on
the option-matching path for multiple and object-valued selects,
redacts text before clipping it, counts left-out child routes and
warns about truncation in every router tool mode, stops treating an
Nx root Analog dependency as proof an app uses Analog, finds the Nx
workspace output on its own, replaces any types in build-meta, checks
values before reusing a signal history binding, and keeps focus after
restoring the newest NgRx action.
Rebuilds extension/ui for the store inspector focus change.
Brings in the review fixes from santoshyadavdev#184. Keeps the P2 panel test setup and moves the P1 store inspector test onto it.
Brings in the santoshyadavdev#184 review fixes through P2. Keeps both store inspector panel tests (the focus test moves to store-inspector-focus.test.ts) and adds the paused flag next to the dispatch result entry.
…aces

The Routes tab, get-routes and the Dashboard SSR and Analog fields
resolved the Analog app from the working directory, so in an Nx
workspace with several Analog apps they described the first app under
apps/ instead of the one Vite serves. They now share the Vite root
with the Analog tab through servedAnalogRoot().
Redacts the page URL and title in component tree reports, holds change
detection instances weakly, stops visibility reports after pagehide so
closed tabs are not counted as background tabs, points aria-controls at
the response preview only while it is open, focuses the URL pattern
after adding a rule, lets the panel find __connection.json next to
itself so the CLI Panel URL and a report served at / connect, keeps
refusing the folder the build was run from when --root is set, and
fixes the tool count in the tools docs.
Rebuilds extension/ui for the network inspector and base URL changes.
Brings in the Vite root fix for Analog routes and build meta, keeping the P2 server function names.
Decodes escapes in NgRx action types read from source, words the
dropped reason so it covers Store DevTools commit, reset and import,
clears panel highlights when the panel closes, reloads or disconnects,
and lists each service dependency once in the injector tree.
Rebuilds extension/ui for the panel highlight and store inspector changes.
Brings in the P2 QA fixes. Keeps component page URL redaction with the truncation reason, and clears the call log before pageshow in the signal page test, since the page now pushes right away when it comes back.
Decides the Back to latest focus from the finished restore response,
accepts pending select values on controls that update on blur or
submit, names the served Analog app in Nx workspaces, and marks
strings cut by the redaction window as truncated.
Rebuilds extension/ui for the store inspector focus change.
Brings in the second round of santoshyadavdev#184 review fixes and rebuilds extension/ui.
Brings in the second round of santoshyadavdev#184 review fixes. Moves the new deferred restore focus test into store-inspector-focus.test.ts, where the P1 focus tests live on this branch, and rebuilds extension/ui.
Brings in the squashed santoshyadavdev#184 and santoshyadavdev#185 and the santoshyadavdev#187 and santoshyadavdev#188 docs changes. This branch already held every santoshyadavdev#184 and santoshyadavdev#185 commit, so the conflicts keep this branch's side.
@erkamyaman
erkamyaman merged commit 619ba3d into santoshyadavdev:main Sep 30, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment