How to Trace Upstream and Downstream Reach from a Node in Archify Viewer
Click the Upstream or Downstream buttons in the Archify viewer toolbar to highlight all ancestors or descendants of a selected node, or call reachabilityFor(id, direction) programmatically to retrieve the reachable subgraph.
The Archify viewer provides interactive tools to explore system architecture by tracing dependencies in both directions. You can trace upstream to find all ancestors of a component or downstream to discover all descendants from any selected node. This functionality helps developers understand the full authored reachability graph and analyze dependency chains within the tt-a1i/archify codebase.
Activating Reachability Mode via the UI Controls
When you select a node in the Archify viewer, the toolbar displays two reachability buttons. The Upstream button (#btn‑reach‑upstream) shows the count of reachable ancestors, while the Downstream button (#btn‑reach‑downstream) shows the count of reachable descendants.
Clicking either button toggles the reachability mode for the selected direction. Clicking the same button again clears the view and returns to the default graph state. The viewer synchronizes the current state with the URL hash (e.g., #focus=node-id&reach=upstream), enabling you to bookmark specific reachability views.
The Core Reachability Algorithm
The reachability engine resides in archify/assets/template.html and operates on the JSON Intermediate Representation (IR) that stores all node relationships.
Computing Reachability with BFS
The reachabilityFor(id, direction) function forwards requests to computeReachability, passing the node ID and direction parameter ('upstream' or 'downstream'). The implementation performs a breadth-first search over the relationship graph, recording:
- Depth levels for each reachable node
- Node IDs included in the reachable subgraph
- Edge keys that lie on the paths between nodes
The function returns a result object containing direction, originId, nodeIds, edgeKeys, depths, and maxDepth.
Applying Highlights to the Graph
When a toolbar button is pressed, applyReachability(direction, options) validates the current selection and obtains the reachability snapshot. It then clears prior highlights and marks matching nodes and edges with data attributes:
data-reach-match– Identifies nodes/edges in the reachable setdata-reach-depth– Stores the distance from the origin nodedata-reach-origin– References the starting node ID
The viewer updates the toolbar state (aria-pressed), refreshes the status line, and calls Archify.view.reveal (if available) to pan and zoom the diagram to focus on the highlighted subgraph.
Clearing the Reachability View
To remove all reachability highlights and restore the default UI, the viewer invokes clearReachability. This function strips all reachability data attributes from nodes and edges, resets the toolbar button states, and removes the reachability parameters from the URL hash.
Programmatic Access and Manual Invocation
You can bypass the UI and calculate reachability directly via the browser console or custom scripts:
// Calculate upstream reachability for a specific node
const nodeId = 'service-api';
const upstream = reachabilityFor(nodeId, 'upstream');
console.log('Ancestor nodes:', upstream.nodeIds);
console.log('Maximum depth:', upstream.maxDepth);
console.log('Edges in path:', upstream.edgeKeys);
// Apply the highlight manually
applyReachability('upstream');
// Clear the view programmatically
clearReachability();
The toolbar buttons wire these functions automatically:
// As implemented in archify/assets/template.html
upstreamBtn.addEventListener('click', () => applyReachability('upstream'));
downstreamBtn.addEventListener('click', () => applyReachability('downstream'));
Summary
- Use the Upstream or Downstream toolbar buttons to toggle reachability mode and visualize dependency chains.
- The
computeReachabilityfunction inarchify/assets/template.htmlperforms a breadth-first search to calculate reachable nodes. - Reachability results include node IDs, edge keys, depth information, and maximum traversal depth.
- Apply visual highlights with
applyReachability(direction)and clear them withclearReachability(). - The viewer updates the URL hash to enable bookmarking specific upstream or downstream traces.
Frequently Asked Questions
How do I trace upstream reachability programmatically in Archify?
Call reachabilityFor(id, 'upstream') with the target node ID. This returns an object containing nodeIds (all ancestors), edgeKeys (connecting edges), and depths (distance from origin). You can then pass this data to applyReachability('upstream') to highlight the results in the viewer.
What information does the reachability calculation return?
According to the source code in archify/assets/template.html, the reachability object contains six properties: direction (upstream/downstream), originId (starting node), nodeIds (array of reachable nodes), edgeKeys (relationship identifiers), depths (mapping of node to distance), and maxDepth (longest path length).
How do I clear the reachability highlight from the graph?
Click the active Upstream or Downstream button again to toggle it off, or call clearReachability() from the console. Both methods remove the data-reach-match, data-reach-depth, and data-reach-origin attributes from all graph elements and reset the UI state.
Can I bookmark a specific reachability view?
Yes. When you activate reachability mode, Archify updates the URL hash to include both the focus node and direction (e.g., #focus=service-api&reach=upstream). Sharing or bookmarking this URL preserves the exact upstream or downstream trace state for other viewers.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →