--- id: RAIL-FAB-WP-0021 type: workplan title: "Zone Boundary Overlays" domain: railiance repo: railiance-fabric status: finished owner: codex topic_slug: railiance created: "2026-05-24" updated: "2026-05-24" state_hub_workstream_id: "e9e2d47f-a965-4e2e-b65d-379dbb206a65" --- # RAIL-FAB-WP-0021 - Zone Boundary Overlays ## Goal Make deployment zones visible as labeled rectangular boundaries in the Fabric graph explorer, so an operator can immediately see which nodes belong to local dev, shared test, and production contexts. This work builds on `RAIL-FAB-WP-0020` deployment overlay fields. Zone boundaries are visual annotations over graph elements. They must not create new fabric membership, ownership, security policy, or routing authority. Initial display labels: - `dev-tegwick` for the private developer-local overlay; - `test` for shared test-stage services; - `prod` for production services. The implementation should keep the underlying graph explorable and avoid turning zones into hard layout containers unless that proves necessary. ## Background WP-20 added deployment overlay fields and graph explorer modes for: - deployment environment; - deployment scenario; - routing authority; - access zone; - policy authority; - route evidence. The current UI can filter and summarize zone-oriented data, but the operator still needs to infer the spatial grouping from node labels and details. The next step is to draw zone boundaries around the visible nodes that share a deployment zone, with a readable label on the boundary. The likely implementation path is a graph-canvas overlay layer that computes bounding rectangles from rendered node positions after layout, pan, zoom, filter, or mode changes. This is preferred over changing graph topology to compound parent nodes unless testing shows the overlay layer is too fragile. ## T01 - Define Zone Grouping And Labels ```task id: RAIL-FAB-WP-0021-T01 status: done priority: high state_hub_task_id: "91777c22-663c-443a-b682-38bfb7a864bf" ``` Define how graph explorer elements map to zone overlay groups. Expected grouping rules: - primary grouping field is `deploymentEnvironment`; - `dev` nodes in the private local scenario render as `dev-tegwick`; - `test` nodes render as `test`; - `prod` nodes render as `prod`; - nodes without deployment overlay data are not enclosed by a zone boundary; - edge-only overlay evidence should affect zone warnings/details but should not create a rectangle unless at least one visible node belongs to the zone. Done when the grouping and label rules are documented in the graph explorer contract or operations docs and have focused tests. Result: documented environment/access-zone boundary rules in `docs/graph-explorer-contract.md`; graph explorer maps `dev` to `dev-tegwick`, legacy `staging` to `test`, `prod` to `prod`, and ignores catch-all `all` environment values for rectangle boundaries. ## T02 - Render Rectangle Boundary Overlays ```task id: RAIL-FAB-WP-0021-T02 status: done priority: high state_hub_task_id: "98ef5ecc-fa4d-443c-a4fe-fa896984d6c4" ``` Draw labeled rectangular boundaries around the currently visible nodes in each zone group. Implementation expectations: - compute rectangles from rendered node bounding boxes; - add padding so borders do not collide with node labels; - draw borders above the canvas background but below interaction-critical UI; - keep zone labels readable at normal zoom levels; - update rectangles after layout, pan, zoom, resize, filter, mode, focus, manual override, and rule changes; - hide a zone boundary when no visible nodes remain in that zone. Done when the UI shows stable labeled rectangles for `dev-tegwick`, `test`, and `prod` where matching nodes are visible. Result: added a canvas overlay layer that computes padded rendered-node bounds, draws labeled rectangles, updates after layout/pan/zoom/filter changes, and hides empty zones. ## T03 - Add Zone Overlay Controls ```task id: RAIL-FAB-WP-0021-T03 status: done priority: medium state_hub_task_id: "30d48d5c-bd53-434b-9b8b-ed1a495cee4e" ``` Add lightweight controls for zone boundaries without cluttering the graph explorer toolbar. Expected controls: - toggle zone boundaries on or off; - choose whether boundaries group by deployment environment or access zone if both are useful; - preserve the setting in copied URL state and browser-local profiles. Done when operators can turn the overlay off for dense graph inspection and restore it through shared/saved view state. Result: added map controls for zone visibility and grouping by deployment environment or access zone, with URL/profile state preservation. ## T04 - Surface Zone Boundary Details ```task id: RAIL-FAB-WP-0021-T04 status: done priority: medium state_hub_task_id: "c002aa54-a243-4912-81ae-0d282910ebc6" ``` Make a zone boundary useful when inspected. Expected behavior: - clicking or selecting a zone label should show zone summary details; - details should include visible node count, deployment environment, scenarios, access zones, routing authorities, and route-without-policy-authority warnings; - zone selection should not replace node/edge selection semantics permanently; - a zone-focused view should be possible via existing focus/rule mechanisms if it can be done simply. Done when a zone label provides the same core answers as the WP-20 map overview, but scoped to that zone. Result: zone labels are clickable and show scoped counts for visible nodes, environments, scenarios, access zones, routing authorities, policy authorities, and route-without-policy-authority warnings; existing focus/highlight/hide orientation actions work for zone contexts. ## T05 - Verify Responsive And Dense Graph Behavior ```task id: RAIL-FAB-WP-0021-T05 status: done priority: high state_hub_task_id: "03f265ad-f335-4caf-a882-35d8d30c75fc" ``` Verify that zone rectangles remain useful across normal operator viewports and dense graphs. Checks should cover: - desktop and narrower browser widths; - full graph mode and deployment zone modes; - filtered views where a zone has only one or two nodes; - hidden/removed nodes from rule and manual override controls; - graph pan/zoom/layout changes; - no incoherent overlap between labels, controls, and detail panels. Done when automated tests cover the computed grouping behavior and a browser smoke check confirms the canvas overlay is visible and aligned. Result: static UI tests cover the zone controls/helpers; JavaScript syntax was checked with `node --check`; the full test suite and validator pass; a headless Edge smoke screenshot confirmed visible labeled boundaries in deployment environment mode.