Skip to content
Cockpit0.29.0
A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live

I2653

Every diagram on the site is one interactive, linkable viewer whose node links are inferred, and a derived table can be drawn as a chart

Where it stands

devtask.issue
Readiness
ready no dependency and no gate holds it; nobody has started it
Status
READY
Can start
startable
Milestone
Milestone status
ACTIVE
Wave
0
Waiting on
none
Holds back
Behind it in all
3
Evidence
0 of 3
A move writes the repository: it stamps one field of this issue's record and appends one event to the ledger, and a commit will carry both.
The same moves from a terminal

majordomus plan start I2653

majordomus plan verify I2653

majordomus plan done I2653

What it is

Objective
Make every Mermaid diagram the site publishes zoomable, pannable, full-screen, downloadable and addressable by a fragment (#diagram-<name>, and #diagram-<name>:<node> for one node), with a node that names a rule, a decision, a command, a capability, an issue, a milestone or a document linked to that object's page by the build rather than by the diagram's author; and let a table the site already renders from derived data be drawn as an interactive Apache ECharts chart by declaring it, with no second copy of the numbers.
Why
ADR 0152. site/diagrams.js initialised Mermaid and nothing else: a wide dependency graph was a horizontal scrollbar, no diagram had an address, and a node that was an issue or a rule was text. Rule project.a-diagram-is-drawn-not-typed says a parseable diagram is what makes linking and checking possible; nothing used that. The site drew no chart at all, although ADR 0135 names ECharts as the library for measured series.
Now
Each <pre class=\"mermaid\"> is rendered at its natural width inside a scrolling box. It has no id, no controls and no links. The Mermaid runtime (the heaviest file on the site) is fetched by a blocking script tag. Numbers the generator derives (issues per milestone and state, benchmark percentiles) are tables only.
Wanted
scripts/lib/diagrams.mjs names every diagram after the build (an explicit data-diagram, else the heading it sits under), lists its nodes, and writes beside it the links it inferred from site/data/generated; site/diagrams.js turns each into the same viewer; scripts/ci/link-check resolves a node fragment against the diagram's declared nodes; site/charts.js draws any <figure data-chart> from the table inside it, with the vendored ECharts build fetched only when a chart nears the viewport; docs/DIAGRAMS.md is the manual.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • Every <pre class=\"mermaid\"> of the built site carries a unique id diagram-<name>, the list of its nodes, and tabindex=0; a build that would publish two diagrams with one id on a page is refused
  • A node whose id or label is the identity of an object the site has a page for is listed beside the diagram as a link to that page, and scripts/ci/link-check resolves every such link
  • A link to #diagram-<name>:<node> is refused by scripts/ci/link-check when the diagram does not declare that node
  • In a browser, the viewer zooms, pans and resets from its toolbar and from the keyboard, copies its own link, and opens the diagram and node a fragment names
  • A <figure data-chart> is drawn from the table inside it, and the table stays on the page
  • The hand-drawn-diagram ratchet stays at diagrams=0
Validation
node --test scripts/lib/diagrams.test.mjsMJ_TEST_JOBS=2 bash test/run.sh 3006_diagrams_are_interactive_and_linkable 12_site_build 272_diagrams_are_drawnscripts/site-build && scripts/site-checkscripts/ci/diagram-check
Evidence required
diagram_pass_unit_testsdiagram_case_3006site_check_passes
Evidence present
unknown: the record carries no `evidence` entries

Scope

Touches
site/diagrams.jssite/charts.jssite/tailwind.csssite/templates/partials/mermaid.htmlsite/templates/partials/charts.htmlsite/templates/components.htmlsite/templates/argument.htmlsite/templates/dag.htmlsite/templates/milestone.htmlsite/templates/plan-section.htmlsite/templates/economics.htmlshare/design/figure.cssscripts/lib/diagrams.mjsscripts/lib/diagrams.test.mjsscripts/lib/interaction-specs/diagram.mjsscripts/lib/interaction-specs/scroll-region.mjsscripts/site-buildscripts/site-checkscripts/ci/link-checktest/cases/3006_diagrams_are_interactive_and_linkable.shdocs/DIAGRAMS.mddocs/claims/a-diagram-is-named-linked-and-addressable.mddocs/CLAIMS.yamldocs/README.mddocs/DESIGN_SYSTEM.mddocs/GITHUB_PAGES_ARCHITECTURE.mdpackage.jsonpackage-lock.json.ai/repo/automation/inventory.jsonl.ai/repo/adrs/0152-a-diagram-and-a-chart-on-the-site-are-one-viewer-each-over-w.md.ai/repo/project/issues/I2653.yaml.ai/repo/project/issues/I2654.yaml.ai/repo/project/issues/I2655.yaml.ai/repo/project/issues/I2656.yaml
Not
The homepage: its story and its byte budget are declared (site/data/homepage.toml) and it carries no diagram by decision; I2655 asks that question on its ownThe Cockpit and majordomus ui: they render their own graphs; sharing this viewer with them is I2656Typing links into a diagram's source with Mermaid's click directive: a link is inferred from an identity or it does not exist
Depends on
none
Priority
p2
Profile
implementation
Parallel safe
true
Owner
unknown: the record declares no `owner`

The work so far

Branches
none
Merged
none
Commits
0
Trunk
master
Sessions
none
Created
2026-10-13
Updated
2026-10-13
Started
unknown: the record declares no `started_at`
Verified
unknown: the record declares no `verified_at`
Completed
unknown: the record declares no `completed_at`

Synchronisation

Adapter
scripts/github-sync
Repository
unknown: the derived plan's header carries no repository
External issue
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
State there
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it

Findings

LevelCodeMessageReproduce
WARNscope_conflictshares docs/GITHUB_PAGES_ARCHITECTURE.md with I2660; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares scripts/site-build with I2697; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases/3006_diagrams_are_interactive_and_linkable.sh with I2713; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases/3006_diagrams_are_interactive_and_linkable.sh with I2714; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases/3006_diagrams_are_interactive_and_linkable.sh with I2716; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases/3006_diagrams_are_interactive_and_linkable.sh with I2717; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases/3006_diagrams_are_interactive_and_linkable.sh with I2718; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases/3006_diagrams_are_interactive_and_linkable.sh with I2720; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases/3006_diagrams_are_interactive_and_linkable.sh with I2723; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares test/cases/3006_diagrams_are_interactive_and_linkable.sh with I2731; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares share/design/figure.css with I2747; they may not run concurrentlymajordomus plan validate
WARNscope_conflictshares docs/DESIGN_SYSTEM.md with I2770; they may not run concurrentlymajordomus plan validate