Skip to content

fix(viewer): stabilize relationship exploration - #225

Open
sunsunsun-java wants to merge 18 commits into
tt-a1i:devfrom
sunsunsun-java:codex/221-viewer-relationship-exploration
Open

sunsunsun-java wants to merge 18 commits into
tt-a1i:devfrom
sunsunsun-java:codex/221-viewer-relationship-exploration

Conversation

@sunsunsun-java

@sunsunsun-java sunsunsun-java commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Problem and value

Closes #221.

Relationship exploration could hide highlighted nodes behind the Semantic Passport, overflow long inbound/outbound lists, and repeatedly reframe the camera while the pointer crossed relationship rows. Large diagrams were especially difficult to inspect.

The Viewer now separates preview from navigation: hover/focus only highlights, while Click, Enter, or Space performs one explicit reveal. Framing uses the remaining safe viewport around visible overlays, and wide showcase diagrams keep relationship labels above the desktop readability floor.

Scope

  • Added compact, bounded inbound/outbound Passport sections and a responsive bottom drawer through 1280px.
  • Condensed the desktop compact Passport to 27rem (432px), with a single-line title/summary/action header and an approximately 88px collapsed body in the browser fixture.
  • Preserved 40px reach controls; at the 1280/1281 breakpoint the responsive drawer stays full-width instead of inheriting the desktop fixed width.
  • Made long English/Chinese titles shrink with ellipsis without covering Details or Close.
  • Made relationship hover/focus camera-neutral; Click/Enter/Space reveal exactly once.
  • Preserved focus, URL, pinned relationship, and camera ownership across Escape, resize, hash changes, Radar movement, and manual pan/zoom.
  • Coalesced cold-start semantic framing after fonts and Viewer chrome settle.
  • Made the output checker inherit data-detail="context" from relationship groups with nearest-detail precedence.
  • Made architecture showcase relationship labels scale to the 930px desktop Reader floor; SVG, collision validation, layout receipts, and legend avoidance share the same geometry.
  • Added real-browser coverage for physical relationship interaction, responsive Passport geometry, sub-1x camera behavior, inherited relationship-label readability, long translated titles, and the 1280/1281 compact breakpoint.
  • Reworked the two MCO showcase layouts to 1240px and regenerated their HTML plus both README Share Cards.

The architecture schema, semantic inference, URL forms, canonical SVG contract, and non-relationship Viewer workflows remain compatible.

Verification

  • Full Node suite: 996 passed, 0 failed, 46 environment-dependent tests skipped.
  • Viewer real-Chrome suite: 36 passed, 0 failed.
  • Desktop Reader real-Chrome suite: 2 passed, 0 failed, including inherited relationship-label measurement.
  • Maka and Pi visual-check: all required viewports passed containment, readability, and Viewer chrome checks.
  • Pi minimum projected text at 1440px: 7.27px (required floor: 6px).
  • Fresh archify.zip rebuild is byte-identical.
  • git diff --check: passed.
  • Multi-agent review covered spec, standards, responsive/accessibility, tests, and artifact reproducibility; the compact-specific findings were fixed before this update.

Generated artifacts

  • Regenerated archify.zip, affected Gallery artifacts/manifest, README proof GIF/receipt, MCO public/experiment HTML, Maka HTML plus visual-check sidecars, and the affected public/package examples.
  • Regenerated the Pi architecture from pinned source revision e86823096c5bad39e1ca282ec24bc5eb9bec745b for local visual review; project-specific Pi output remains intentionally untracked.

Checklist

  • Focused implementation with compatible typed JSON behavior.
  • Regression tests cover behavior and generated output.
  • Generated artifacts and package freshness verified.
  • No secrets, private repository content, or local paths added to tracked artifacts.

Reserve a scrollable Passport height before compact Radar fallback so mobile relationship exploration can recover without overlay collisions. Replace the output-path race fixture's fixed delay with an explicit release handshake.
Move the persistent CDP pointer outside the Passport before every hover scenario, and wait for the user-visible reveal result instead of a pre-animation layout gap.
Declare the browser media capabilities required by the desktop-hover contract so headless CI does not silently exercise the non-hover fallback.
Keep delayed programmatic scroll events inside the semantic camera grace window. Make the hover regression explicitly install a fine-pointer environment before the Viewer initializes.
@tt-a1i
tt-a1i changed the base branch from main to dev September 16, 2026 15:20
@coderabbitai

coderabbitai Bot commented Sep 16, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 38 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: fae7056e-cd4f-4d73-b026-2e8f514a6755

📥 Commits

Reviewing files that changed from the base of the PR and between e6ca304 and 3cc0b9b.

⛔ Files ignored due to path filters (10)
  • archify.zip is excluded by !**/*.zip
  • docs/assets/archify-live-proof.gif is excluded by !**/*.gif
  • docs/assets/mco-runtime-reach-share-card.png is excluded by !**/*.png
  • docs/assets/mco-runtime-share-card.png is excluded by !**/*.png
  • generated/maka-regenerated.workflow.html is excluded by !**/generated/**
  • generated/maka-regenerated.workflow.visual-check.1440x900.dark.png is excluded by !**/*.png, !**/generated/**
  • generated/maka-regenerated.workflow.visual-check.1440x900.light.png is excluded by !**/*.png, !**/generated/**
  • generated/maka-regenerated.workflow.visual-check.2048x1320.dark.png is excluded by !**/*.png, !**/generated/**
  • generated/maka-regenerated.workflow.visual-check.2048x1320.light.png is excluded by !**/*.png, !**/generated/**
  • generated/maka-regenerated.workflow.visual-check.json is excluded by !**/generated/**
📒 Files selected for processing (61)
  • archify/assets/template.html
  • archify/bin/archify.mjs
  • archify/bin/visual-check.mjs
  • archify/examples/dataflow-product-analytics.html
  • archify/examples/lifecycle-agent-run.html
  • archify/examples/sequence-cache-miss-request.html
  • archify/examples/web-app-rendered.html
  • archify/examples/workflow-agent-tool-call-rendered.html
  • archify/references/viewer-runtime.md
  • archify/renderers/architecture/render-architecture.mjs
  • archify/renderers/shared/i18n.mjs
  • archify/scripts/check-render-output.mjs
  • archify/test/authored-reachability.test.mjs
  • archify/test/chapter-handoff.test.mjs
  • archify/test/desktop-reader-browser.test.mjs
  • archify/test/golden.mjs
  • archify/test/helpers/chrome-viewer.mjs
  • archify/test/layout-rules.test.mjs
  • archify/test/readme-showcase.test.mjs
  • archify/test/real-repository-proof.test.mjs
  • archify/test/relationship-direct-explorer.test.mjs
  • archify/test/relationship-lens.test.mjs
  • archify/test/relationship-permalink.test.mjs
  • archify/test/render-output-checks.test.mjs
  • archify/test/semantic-camera.test.mjs
  • archify/test/semantic-passport.test.mjs
  • archify/test/semantic-radar.test.mjs
  • archify/test/viewer-chrome-layout.test.mjs
  • archify/test/viewer-relationship-explorer.test.mjs
  • archify/test/visual-check.test.mjs
  • docs/assets/archify-live-proof.json
  • docs/cases/mco-runtime.architecture.html
  • docs/cases/mco-runtime.architecture.json
  • docs/gallery.html
  • docs/gallery/artifacts/agent-run.lifecycle.html
  • docs/gallery/artifacts/agent-tool-call.workflow.html
  • docs/gallery/artifacts/async-job-roundtrip.sequence.html
  • docs/gallery/artifacts/cache-miss.sequence.html
  • docs/gallery/artifacts/deployment-release.lifecycle.html
  • docs/gallery/artifacts/event-stream.dataflow.html
  • docs/gallery/artifacts/incident-response.workflow.html
  • docs/gallery/artifacts/product-analytics.dataflow.html
  • docs/gallery/artifacts/production-deployment.architecture.html
  • docs/gallery/artifacts/release-delivery.workflow.html
  • docs/gallery/artifacts/web-app.architecture.html
  • docs/gallery/manifest.json
  • examples/archify-repo-grid.html
  • examples/archify-repo.html
  • examples/checkout-platform-delta.html
  • examples/checkout-platform-delta.receipt.json
  • examples/dataflow-product-analytics.html
  • examples/lifecycle-agent-run.html
  • examples/maka-architecture.html
  • examples/rag-pipeline.html
  • examples/sequence-cache-miss-request.html
  • examples/web-app-rendered.html
  • examples/web-app.html
  • examples/workflow-agent-tool-call-rendered.html
  • experiments/mco-showcase/mco-runtime.architecture.json
  • experiments/mco-showcase/mco-runtime.html
  • scripts/build-readme-showcase.mjs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@tt-a1i tt-a1i left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The relationship-exploration fix is worthwhile: keeping hover camera-neutral while explicit activation reveals the relevant nodes directly addresses #221. The compact/expanded Passport and cancellation coverage are useful. I reviewed head 3cc0b9bbe2e979e5278e1e529956a48d8aa33858 against current dev 24285de8b1b65fe39ee1b3965cbe4d5239c499d5 (the PR merge base is 5de7275). I am requesting changes before integration.

Blocking performance regression — archify/scripts/check-render-output.mjs:628-678. collectDesktopReadability() invokes nearestAncestorDetail(fragment, match.index) for every text element without its own detail attribute. The helper reparses all preceding SVG tags each time, including for primary/boundary labels whose classification does not need that lookup. A valid synthetic SVG containing repeated <g data-detail="context"><text font-size="12" ...>Label</text></g> takes approximately 0.38 / 1.45 / 5.58 seconds for 1,000 / 2,000 / 4,000 labels on this head, versus 35 / 38 / 47 milliseconds on dev. Both outputs report ok: true. These are local Node 22 CLI timings including startup, not end-to-end diagram generation measurements. Resolve inherited detail during one traversal (or reuse an existing parsed ancestry representation), preserving nearest-ancestor precedence. Add bounded large-input regression coverage that establishes the scaling behavior without a machine-sensitive stopwatch assertion.

Integration work needed. Refresh against dev and port the Viewer changes to the canonical viewer/ sources before regenerating the template. Preserve the newer Passport placement fix (#207), visual-check sidecar semantics (#290), shared browser gate (#440), and the removal of tracked Maka output (#383). Reuse existing browser helpers where possible; register the new relationship-explorer suite in the shared browser gate. These are final integration requirements, not a request to redesign the agreed interaction or split it arbitrarily into several PRs.

Independent verification on this head: 136 tests passed, 0 failed, 0 skipped across viewer-relationship-explorer, desktop-reader-browser, render-output-checks, and layout-rules with Node 22 and real Chrome on macOS. This includes the physical pointer/keyboard tests present in that selection, translated controls, responsive disclosure, and rapid hash replacement. I did not rerun the full suite or all of viewer-chrome-layout, and this is not independent perceptual acceptance of the showcase screenshots.

Please retain the readable-label and inherited-detail checks, fix the traversal cost, then provide the current-dev integration and affected generated outputs once. The intended behavior is valuable; the current blocker is the extra checker cost and unfinished integration, not the use of a compact Passport.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(viewer): keep explored relationships visible outside the semantic passport

2 participants