Overview
One concept: HTML + outline → opener tips.
What each step does
Same story as the figure, in readable prose.
-
Ship a dual-read pair
Write
visual/<name>.htmlfor humans andvisual/<name>.outline.mdfor agents — same claim, two surfaces. -
Treat outline as SSOT
Inventory, relationships, and citations live in the outline. If HTML and outline disagree, the outline wins.
-
Resolve with
open-visualThe engine finds the HTML (path or workspace name), warns if the sibling outline is missing, prints agent tips, and optionally opens the OS browser.
Legend
Symbols and guarantees for this fixture.
- Arrow
- Local resolve / tip print only — no fetch, CDN, or remote I/O.
- Outline SSOT
- Agent-facing source of truth for ids, relationships, and citations.
- --no-open
- Smoke path: resolve + tips print; browser launch is skipped.
- Playbook
- This page follows the
diagramvisual playbook landmarks.
Open questions
Uncertainty left for humans; mirrored in the outline + JSON embed.
| Id | Question |
|---|---|
q-json-ssot |
Should agents ever prefer #devrites-outline JSON over
.outline.md when both exist?
|
q-browser-ci |
Do all interactive review hosts have a usable OS opener, or is --no-open the default smoke path? |
Citations
Claims on this page map to repo paths.
| Claim | Path |
|---|---|
| Opener implementation | engine/internal/lib/open_visual.go |
| Playbook router | pack/.claude/skills/devrites-lib/reference/visual-playbooks/index.md |
| Outline template | pack/.claude/skills/devrites-lib/reference/visual-playbooks/outline-template.md |
| Explain tip hook | pack/.claude/skills/rite-explain/SKILL.md |
Fixture path: engine/testdata/visual/open-visual-smoke.html