Validates, lays out and writes one offline HTML file, next to the input unless you pass -o. It refuses to overwrite its input. Delivery is deterministic:
- the same JSON always gives the same file, byte for byte, so the receipt’s hash is worth keeping.
+ the same JSON always gives the same file, byte for byte, so the receipt’s hash is worth keeping. With --open it then opens the file in your default
+ browser; the skill passes it, so a diagram opens as soon as the agent delivers it.
diff --git a/site/components/docs/ViewerTry.tsx b/site/components/docs/ViewerTry.tsx
index e00a40f..2013010 100644
--- a/site/components/docs/ViewerTry.tsx
+++ b/site/components/docs/ViewerTry.tsx
@@ -66,7 +66,7 @@ const FEATURES: { id: Try; label: string; icon: ReactNode; title: string; desc:
label: 'Play',
icon: icon(Play),
title: 'Play the flow',
- desc: 'Pulses travel whatever you’re looking at: the whole diagram, a view, a trace or a route, hop by hop. With reduced motion there is nothing to play.',
+ desc: 'Pulses travel whatever you’re looking at: the whole diagram, a view, a trace or a route, hop by hop. The button beside Play sets the speed: 1×, 2× or 0.5×. With reduced motion there is nothing to play.',
keys: [['P', 'play or stop']],
},
];
diff --git a/site/lib/reference.ts b/site/lib/reference.ts
index 252ceda..a96f5cd 100644
--- a/site/lib/reference.ts
+++ b/site/lib/reference.ts
@@ -6,13 +6,14 @@ export type Family = (typeof FAMILIES)[number];
export const CLI_COMMANDS = [
{ name: 'validate', usage: '
[--json]', does: 'Check the diagram' },
- { name: 'deliver', usage: ' [-o out.html]', does: 'Write the offline HTML viewer' },
+ { name: 'deliver', usage: ' [-o out.html] [--open]', does: 'Write the offline HTML viewer' },
{ name: 'serve', usage: ' [--port 4400]', does: 'Live viewer that reloads on save' },
] as const;
export const CLI_OPTIONS = [
{ flag: '--json', for: 'validate', does: 'Machine-readable diagnostics' },
{ flag: '-o, --out', for: 'deliver', does: 'The output path; the default is next to the input, as .html' },
+ { flag: '--open', for: 'deliver', does: 'Open the written viewer in the default browser; when none opens, it warns and still exits 0' },
{ flag: '--port', for: 'serve', does: 'The port; 4400 by default, and the next free one if it is taken' },
{ flag: '-h, --help', for: 'any', does: 'Show the help' },
{ flag: '-v, --version', for: 'any', does: 'Show the version' },
@@ -45,4 +46,5 @@ export const SHARE_PARAMS = [
{ param: 'lens', keeps: 'The node types the lens hides, comma-separated', example: '#lens=cache,queue' },
{ param: 'route', keeps: 'A route between two nodes', example: '#route=storefront~orders' },
{ param: 'play', keeps: 'The flow is playing', example: '#play=1' },
+ { param: 'speed', keeps: 'The flow’s speed when it isn’t 1×: 0.5 or 2', example: '#play=1&speed=0.5' },
] as const;
diff --git a/skill/SKILL.md b/skill/SKILL.md
index 708024f..ae15598 100644
--- a/skill/SKILL.md
+++ b/skill/SKILL.md
@@ -18,7 +18,7 @@ Run it as one literal command (each shell call starts fresh, so don't rely on va
```bash
npx -y @hyamero/stackmap@0.1.0 validate --json
-npx -y @hyamero/stackmap@0.1.0 deliver
+npx -y @hyamero/stackmap@0.1.0 deliver --open
npx -y @hyamero/stackmap@0.1.0 serve # optional live preview; see below
```
@@ -45,7 +45,7 @@ Unless the user names a location, each diagram lives in `.stackmap//` unde
5. **Repair only what the diagnostics name.** Each has a `code`, a `subject` (JSON pointer into your file), a `message`, `evidence` and `allowedFixes`. Apply one of the `allowedFixes` at `subject`; don't restructure unrelated parts. `card-fit/overflow` means the text would be cut off on the card: shorten it to the `maxChars` in its evidence, keeping the meaning (move detail into a row, or into an evidence note on compact cards, which have no rows). Re-run step 4.
- **Stop rule:** if two consecutive rounds don't reduce the number of errors, stop, keep the last file, and report the remaining diagnostics verbatim instead of guessing.
- Warnings don't block delivery. Fix the cheap ones (a misspelt brand, a node you forgot to connect); mention the ones you leave.
-6. **Deliver** with `deliver `. Exit 1: back to step 5. Exit 2: an environment problem — report it; don't edit the diagram to "fix" it.
+6. **Deliver** with `deliver --open`: it writes `diagram.html` and opens it in the user's browser. A warning that no browser could be opened is not a failure (a headless or remote machine): the file is written, so give its path. Exit 1: back to step 5. Exit 2: an environment problem — report it; don't edit the diagram to "fix" it.
7. **Check evidence** (repository diagrams): every `evidence[].file` must exist, e.g. `git ls-files --error-unmatch ` from the repo root.
8. **Report** the absolute path of `diagram.html`, the receipt line, and any warnings you left. Offer `serve` for iterating. Don't claim you looked at the rendering unless you did.