Skip to content

viewer: resolve bundle-root-absolute links into graph edges - #283

Open
tungamajunga wants to merge 2 commits into
GoogleCloudPlatform:mainfrom
tungamajunga:fix/viewer-bundle-absolute-links
Open

viewer: resolve bundle-root-absolute links into graph edges#283
tungamajunga wants to merge 2 commits into
GoogleCloudPlatform:mainfrom
tungamajunga:fix/viewer-bundle-absolute-links

Conversation

@tungamajunga

Copy link
Copy Markdown

Problem

SPEC.md §6.1 defines two cross-linking forms and recommends the absolute (bundle-relative) one beginning with /:

Absolute (bundle-relative): begins with /, interpreted relative to the bundle root. This is the recommended form because it is stable when documents are moved within their subdirectory.

The viewer's _extract_links in reference_agent/viewer/generator.py drops any target starting with /, so a bundle whose links use the spec's recommended form renders viz.html with nodes but zero edges.

Minimal repro (a producer emitting spec-recommended links, run through reference_agent visualize before/after this change):

Links in bundle Before After
root-absolute (](/references/x.md)) 11 nodes, 0 edges 11 nodes, 5 edges
same bundle rewritten to relative links 5 edges 5 edges (unchanged)

Changes

  • _extract_links: /-prefixed targets now resolve against the bundle root per SPEC §6.1; relative targets behave exactly as before, and targets that escape the bundle root are still rejected (covered by a new traversal test).
  • _walk_concepts (separate commit): skip hidden directories, so producer-internal state (a .oknoll/ revision store, .git/) pointed-at working directories no longer duplicates every concept node.

All existing tests pass; three tests added (absolute links become edges, absolute links cannot escape the bundle root, hidden directories are not walked).

🤖 Generated with Claude Code

tungamajunga and others added 2 commits August 9, 2026 20:03
SPEC.md §6.1 defines two cross-linking forms and recommends the absolute
(bundle-relative) one beginning with "/". The viewer's _extract_links
dropped those targets, so bundles using the recommended form rendered
with no edges at all. Resolve them against the bundle root instead;
targets that escape the root are still rejected.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Producer-internal state (a .oknoll/ revision store, .git/) is not bundle
content; walking it duplicated every concept node once per snapshot when
the viewer was pointed at a working bundle directory.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@google-cla

google-cla Bot commented Aug 9, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

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.

1 participant