feat(frontend): add non-visual architecture graph list view (#239) - #255
Merged
parthrohit22 merged 2 commits intoAug 7, 2026
Conversation
…rigin#239) Add a List View tab alongside the graph/request-flow/heatmap tabs that renders the same sealed-snapshot model as semantic tables (modules, relationships, diagnostics), so screen-reader and keyboard-only users can review the full architecture graph without traversing the canvas node by node. Selecting a row updates the shared selection, keeping the table, canvas, and inspector in sync.
This was referenced Aug 7, 2026
…ond-Origin#256) Four advisories published since dev's last CI run made the live npm-audit gate (scripts/dependency-audit.mjs) start blocking every open PR: brace-expansion (GHSA-rgw5-rvv9-x895), dompurify (GHSA-55q2-fjhq-7xh7, GHSA-c2j3-45gr-mqc4), js-yaml (GHSA-52cp-r559-cp3m, GHSA-5p4m-2wfm-xmqj), and undici (GHSA-4cwx-7wf7-3272 and others via jsdom). All four patches land within the already-used major version, so no override needed a major bump; undici is newly added to overrides since it was previously unpinned.
16 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a "List View" tab to the Architecture workspace that renders the same sealed-snapshot model (
useArchitectureStore().model) already driving the React Flow canvas as three semantic HTML tables — modules, relationships, and diagnostics — so a screen-reader or keyboard-only user can review the complete architecture graph without traversing the visual canvas node by node.Linked issue
Part of #239
Roadmap alignment
This does not map cleanly onto a single §23 (W0–W8) lane — accessibility/WCAG work isn't named as its own workstream in the roadmap. Flagging this honestly rather than forcing a citation. Context for the maintainer: this is a direct continuation of the accessibility/trust-gap baseline you already claimed and merged (#118 → PR #241,
test(a11y): establish WCAG 2.2 AA baseline), where #239 is explicitly filed as "the dedicated non-visual-equivalent follow-up required by #118; it is intentionally not implemented in the baseline PR." Treating that as the accepted evidence this PR advances, since it closes a defect you already tracked to completion via #118's manual-evidence log, rather than a new roadmap workstream.What changed
apps/frontend/src/features/architecture/store.ts— extendedactiveTabto include'list'.apps/frontend/src/features/architecture/components/ArchWorkspace.tsx— added a fourth "List View" tab button (same pattern as the existing Graph/Request Flow/Heatmap buttons) and rendersArchitectureListViewwhen selected.apps/frontend/src/features/architecture/components/ArchitectureListView.tsx(new) — readsmodeldirectly fromuseArchitectureStore(no second fetch): a Modules table (name/type/layer/relationship state, ordered by layer then name), a Relationships table (source/target/type/predicate/truth state, ordered by source then target name), and a Diagnostics table (severity/code/message/location/related modules, ordered by severity then code). Each module and relationship endpoint is a real<button>that callssetSelectedNodeId, the same store action the canvas andNodeInspectoralready use, so selecting a row highlights the row and keeps table/canvas/inspector selection in sync.apps/frontend/src/features/architecture/components/ArchitectureListView.test.tsx(new) — 5 tests covering ordering, selection sync from both the modules and relationships tables, diagnostic rendering with a working related-module link, and explicit empty states.apps/frontend/package.json/package-lock.json— out-of-scope but necessary: cherry-picked the fix from security(deps): bump dompurify, js-yaml, brace-expansion, undici #257 (security/256-dependency-audit-overrides) to unblock this PR's own CI. Four npm advisories published afterdev's last CI run made theFrontendjob's dependency-audit gate fail on every open PR, unrelated to this PR's own diff. security(deps): bump dompurify, js-yaml, brace-expansion, undici #257 is the canonical fix targetingdevdirectly; this is the identical commit cherry-picked so this PR isn't stuck waiting on that one to merge and be rebased. See security(deps): bump dompurify, js-yaml, brace-expansion, undici #257 for full detail on the four advisories/patched versions.Acceptance criteria completed
model.diagnostics, not just the selected node's subsetRelationshipPanelalready showed)<table>with real<button>cells, fully reachable via Tab in document orderselectedNodeIdinuseArchitectureStoreTesting performed
Not run:
npm run test:prototype(Playwright) and a live browser/screen-reader check — no browser automation tool is available in this session. Verified via component tests only, which render the real DOM output and assert on structure, ordering, and click-driven selection sync.Screenshots
Not applicable — no browser automation available in this session to capture one; see Testing performed for the honest limitation.
Security and data considerations
The List View feature itself: none. Purely a client-side rendering of data already fetched by the existing owner-scoped
/analysis/{id}/architecturecall and already displayed by the canvas/inspector; no new API calls, no new endpoints, no new data exposure.The cherry-picked dependency bump: closes four npm advisories (one runtime-reachable, three dev/build-time-only) — see #257 for detail.
Dependencies and blocked work
None functionally, but note: this PR's
package.json/package-lock.jsondiff duplicates #257's commit. Once #257 merges todevand this branch is rebased, that duplication resolves to a no-op (identical content) rather than a conflict.Scope changes or remaining work
e2e/architecture-visual.spec.tsore2e/accessibility.spec.ts) — no browser automation tool was available in this session to author or verify a new spec. Flagging as necessary follow-up before this fully satisfies a11y: provide a complete non-visual architecture graph contract #239's acceptance criteria; using "Part of a11y: provide a complete non-visual architecture graph contract #239" rather than "Closes a11y: provide a complete non-visual architecture graph contract #239" for this reason.tablist/tab/tabpanelsemantics witharia-selected/roving tabindex). Upgrading all four tabs to proper ARIA tab semantics would be a broader change touching existing tabs beyond this issue's proposed scope, so it was left as-is for consistency with the current UI rather than folded in here.Contributor checklist
devupstream/devupstream/devpackage.json/package-lock.json, cherry-picked from security(deps): bump dompurify, js-yaml, brace-expansion, undici #257)Closes) is used only because the issue is fully resolved — not used here, "Part of" instead