feat(native): wireframe the proposed dashboard, move library paths under .holistics/ - #33
Merged
Merged
Conversation
build-dashboard's propose-and-confirm step now draws the proposed dashboard as a mermaid block-beta wireframe on the same 12-column grid as the canvas, so the user approves the real arrangement rather than a prose description of it. Column spans are the build widths (1/4 3, 1/3 4, 1/2 6, full 12), step 3 builds to the confirmed wireframe, and verify step 5 checks the canvas matches it. The text plan loses its per-block bullets and its Layout line, both of which the diagram now carries. Box colour encodes the kind of block -- data, control, section heading -- using design-system values, and everything sits inside a frame so the diagram reads as separate from the message text. The diagram declares htmlLabels:false, without which long labels are truncated in chat. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
build-custom-chart and build-dashboard-theme each prescribe where a new file goes. Both now point at .holistics/library/ instead of a bare library/ at the project root: .holistics/library/custom_charts/<chart_name>.chart.aml .holistics/library/themes/<slug>.theme.aml This covers the frontmatter descriptions, the workflow steps that write the file, and the "look for something to start from" steps that read the folder. Applied to both the native-skills copy and the plugins copy of each skill so the linked directories stay in sync. The two prose references to the public chart library are left alone; they do not name a folder. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…gin source Follows the shared-content model in DEVELOPMENT.md: a skill is defined once in a source plugin, and every consumer holds a full copy with a .link file pointing back at it. build-custom-chart sat at native-skills/system/build-custom-chart -- the only skill directory not under a plugin group folder, so it was not reachable as part of a plugin. Its native copy moves to native-skills/system/holistics-development/ and now links to the existing plugins/holistics-development/skills/build-custom-chart. The two directories were previously independent copies with nothing enforcing that they matched. build-dashboard had no plugin copy at all. Its content becomes the source at plugins/holistics-development/skills/build-dashboard, and the native copy keeps its path at native-skills/system/ holistics-common/build-dashboard, now carrying a .link. build-dashboard-theme was already correct and is untouched. Copies were produced with `pnpm sync-links`, so edits from here go to the source under plugins/ and propagate outward. Side effect: build-dashboard and build-custom-chart are now covered by `pnpm validate-frontmatter`, which globs plugins/**/SKILL.md only -- 31 files validated, up from 30. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
datbth
approved these changes
Aug 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two independent changes to the dashboard-authoring skills. Happy to split them if you'd rather review separately — the second is a self-contained path rename.
1.
build-dashboard— the plan is drawn, not describedWhy
Step 2 asked the user to approve a layout described in prose ("the sections top-to-bottom by importance") plus a bullet list of blocks. The user was approving a sentence about an arrangement, not the arrangement — nothing in the plan committed the build to a shape, and nothing at verification time checked that the canvas matched what was agreed.
What changed
The proposal now ends with a
block-betawireframe on the same 12-column grid as the canvas, so column spans are the build widths (¼3· ⅓4· ½6· full12→ 280 / 380 / 580 / 1180 px):The wireframe is binding, not decorative: step 3 builds to it via the span→px conversion, and verify step 5 checks the canvas matches — same blocks, same rows, same spans — and requires any deviation to be named at handoff.
To pay for it, the text plan loses its per-block bullets and its
**Layout**line. Both restated what the diagram now shows; block name and viz type live in the box labels.Box fill encodes what kind of block it is — data / control / section heading — using design-system values rather than picked colours, so the diagram reads as part of the product rather than as generic mermaid.
Constraints worth knowing (all found by rendering, not by reading docs)
These are in the skill because none is guessable, and each one produced a visible defect first:
htmlLabels: falseis required. With mermaid's default HTML labels, every label is truncated by a character or two in chat — a label is a div sized to a width measured in one font and then rendered in another, and the overflow is cut. Switching to SVG text measures the real text node and fixes it. The key must be top-level:block: { htmlLabels: false }looks equivalent and silently does nothing.classDefcarries, so label colour, size and weight always fall back to mermaid's defaults. The dead properties are deliberately not in the template — clipping was a functional defect, label typography was polish.spaceis a keyword, not a block id. A live run emittedspace1:9and drew an empty lavender box labelled "space1" in the middle of the control row. The skill now says to write it bare however often it is needed and never number it. Styling the stray block does not help — the box disappears but the text remains.space:<n>; boxes fill left-to-right and wrap on their own, so a short row shifts every block after it.block-betarequires mermaid 11.2.
build-custom-chart,build-dashboard-theme— library paths move under.holistics/Both skills prescribe where a new file goes. They now point at:
This covers the frontmatter descriptions, the workflow steps that write the file, and the "look for something to start from" steps that read the folder. Applied to both the
native-skills/andplugins/copy of each skill so the linked directories stay in sync.Path strings only — the two prose references to the public chart library are untouched, since they name a catalogue rather than a folder.
Caveats
max-widthequal to the natural content width, andblock.useMaxWidth:falseonly replaces that with a hard pixel width — there is no setting that stretches it. Fixing it means relaxing the SVGmax-widthon the rendering side, which is out of scope here.0.6the heading clears WCAG AA against the dark chat background; lowering it further does not..holistics/library/matches the project layout they expect before this lands — it is a prescribed output path, so getting it wrong sends new files somewhere that is not loaded.Test plan
pnpm validate-links— all links validpnpm validate-frontmatter— all 30 files passhtmlLabels: falsespace:<n>produces no box and no label🤖 Generated with Claude Code