* feat(line): add ridgeline as a Line variant
One distribution per series, stacked at a fixed pitch on a single shared
amplitude. Ships three static examples (light, dark, full editorial),
the type-line.md spec, and a geometric gate.
verify-ridgeline.py derives the figure's one amplitude and its baseline
pitch from the figure itself, then holds every vertex to both. It also
checks the drawn baseline rules, the shared bin scale, absolute M/L/Z
only, the overlap ceiling, the focus pairing and every label binding.
test-verify-ridgeline.py proves each check in both polarities and pins
the scope treaty with the sibling Line gates.
The contract binds data-bins on a <path>, which no other chart in the
repo declares, so verify-slopegraph and this gate never claim the same
file.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(verify-ridgeline): read exponent coordinates as numbers, not commands
parse_d scanned for [A-Za-z] independently of the numbers, so the `e` in a
valid scientific-notation coordinate such as 4.4e2 was counted as a path
command. The explicit-command rule then rejected a correct ridgeline with a
message about command counts.
Tokenise the d attribute left to right with the number branch tried first,
so an exponent is consumed as part of its number. A letter that survives
that branch is a real command and still faces the M/L/Z vocabulary check;
anything else leaves the path unreadable, which stays a finding.
Adds both polarities: a shipped coordinate rewritten as 4.4e2 must verify,
and a falsified one written the same way must not.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: 0xDarkMatter <0xDarkMatter@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* fix(commands): stop hardcoding the visual-type count
Integrates the final reviewed diff from PR #112.
* docs(high-level): correct effective width checklist
Integrates the final reviewed diff from PR #105.
* fix(commands): quote profile argument hint
Integrates the final reviewed diff from PR #126.
* test(sankey): gate conservation and ribbon geometry
Integrates the final reviewed diff from PR #103.
* feat(tooling): add doctor diagnostics gate
Integrates the final reviewed diff from PR #132.
* feat(scripts): lint diagrams as rendered
Integrates the final reviewed diff from PR #18.
* feat(types): add quantitative polar chart
Integrates the final reviewed diff from PR #101.
* chore(release): consolidate reviewed changes in 2.6.0
Documents every combined gate and synchronizes Claude, Codex, and Factory metadata for the 39-type release.
* fix(doctor): support installed-skill projects
---------
Co-authored-by: mysoniw <soniw1@gmail.com>
Co-authored-by: thang <76550342+thangldw@users.noreply.github.com>
Co-authored-by: YinShaokun <yinshaokun@didiglobal.com>
Co-authored-by: 0xDarkMatter <0xDarkMatter@users.noreply.github.com>
Co-authored-by: Rupam Pal <rupam.pal@euromonitor.com>
Co-authored-by: Yuvraj3905 <yuvraj202001@gmail.com>
Adds ten editorial diagram types with light, dark, and full-editorial examples; updates the taxonomy, gallery, descriptions, references, and synchronized plugin version; and adds maintainer/visual-proof contribution gates.
Co-authored-by: Jacopo Vendramin <vendraminjacopo@gmail.com>
Documents the dumbbell in type-bar.md's existing Variants section,
alongside grouped and stacked bars. Reference-only, matching the
precedent those two set and the one #100 landed for datalake: no
example assets, no gallery entries.
Not a new visual type. The count stays at 28 and SKILL.md is untouched
-- no selection-table row, no frontmatter hook, no manifest description
change.
Covers layout on the shared 1000x500 composition, an element pattern,
and five honesty rules: no truncated axis, one scale with both endpoints
labelled, the connector is a gap and not a trajectory, a stated row
order, and no imputed or silently dropped endpoints.
Two of those rules live in a formula rather than a drawing, so they ship
as a checker with adversarial fixtures per ADR 0005:
- Domain resolution is exhaustive over sign. A rule phrased as
"all-positive / all-negative" silently drops data that only touches
zero, and drops all-zero data entirely -- where floor == ceil == 0 and
the position formula divides by zero. resolve_domain() partitions the
space, guarantees ceil > floor, and returns a finite fallback span for
all-zero input so every dot lands on the floor.
- Non-text contrast is carried by the boundary, not the fill. Accent on
paper is 2.86:1 skin-wide, and shape redundancy does not waive WCAG
1.4.11, so the solid endpoint takes a 1px ink stroke (11.82:1) and the
connector 55% ink on light / 40% on dark (3.19:1 and 3.24:1). The
checker reads these tokens out of the reference, so prose and
thresholds cannot drift apart.
scripts/test-verify-dumbbell.py covers both polarities: all-zero,
zero-touching, mixed-sign, empty and non-finite input, observed-extremes
truncation, and the sub-3:1 treatments this replaces. Wired into CI and
CONTRIBUTING alongside the treemap and geometry gates.
Other things the geometry and house style forced: the focal bar pattern
(12% tint plus accent stroke) does not survive at a 6px dot, so the pair
separates by fill weight; a 64px row pitch from y=96 overflows the y=420
plot floor at seven rows, so pitch and origin are tabulated per row
count; rgb(45,49,66) IS the dark paper, so light-theme hairlines
composite to 1.000:1 and must invert; label offsets keyed to start/end
put both labels inside the pair on a decreasing row; a value on the
domain floor collided with its category label; and the value axis was
missing the Geist Mono 7px title every other cartesian type carries.
Co-authored-by: 0xDarkMatter <0xDarkMatter@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Add Treemap as the 28th visual type with light, dark, and editorial variants; area, label, and information-marker verification; synchronized documentation and manifests; and plugin version 2.5.0.
* feat: add client profiles
* ci: pin shell to bash for docs_sync step
The docs_sync step runs two commands in a multi-line block. Without a
pinned shell, the windows-latest matrix leg uses pwsh, where a non-zero
exit from the first command may not abort the block, masking a gate
failure. Pin shell: bash to match the icons and summary steps.
Moves six clipped labels onto free connector segments and adds scripts/verify-geometry.py with tests, CI wiring, ADR 0005, and SKILL.md rule 6 so the defect cannot recur. Fixes#45.
Installs previously drifted: a standalone `npx skills add` copy never
followed the repo, and Claude Code disables auto-update for third-party
marketplaces by default. Route every client through its own marketplace so
merged changes reach users through the native update path.
- Add `.agents/plugins/marketplace.json` so Codex resolves the plugin from
a Git marketplace it refreshes at startup.
- Add `author` to the Claude manifest so both native manifests agree.
- Add `scripts/bump-plugin-version.py` to increment the Claude and Codex
versions together; it refuses to run when they already differ.
- Add `scripts/verify-plugin-package.py` to gate synchronized, strictly
increasing semver against the base ref, marketplace paths that stay
inside the repo root, and the packaged skill.
- Add `scripts/test-plugin-package.py` covering the adversarial cases:
missing bump, mismatched manifests, malformed semver, and a marketplace
target that does not exist.
- Add a `plugin-package` CI job running the tests, the version gate against
the PR base sha, and `claude plugin validate . --strict`.
- Document the per-PR bump requirement, the new gates, and the per-client
install/update paths, including the one-time migration off standalone
copies.
Version bumps 2.3.0 -> 2.3.1 to satisfy the new gate.
- SKILL.md: confirm type/pattern/size/cuts with the user before rendering;
checklist hooks for the checkpoint and the packaged self-check
- scripts/verify-docs-sync.py: CI now fails when the frontmatter description
loses a type's lexical hook, the gallery can't reach a shipped example, or
the README tree names a missing file
- skills/diagram-design/scripts/self_check.py: distilled output checker that
ships with the skill so installed agents can verify their own diagrams;
adversarial suite in scripts/test-self-check.py
- assets/index.html: six new tabs (OAuth sequence + five single-variant
examples with a data-single variant lock) so every shipped example is
browsable
- docs/adr/0001-0004: settled policies recorded (pinned controller, taxonomy
freeze, reveal-only autoplay, byte cap + trigger-rich description)
- README: It's-working-if section, new gates documented; CONTRIBUTING: gate
table, ADR guidance, type-addition invariants; CI: two new steps
The README's "Browse the live gallery" link pointed at the raw HTML blob,
which GitHub renders as source code rather than the gallery. Add a Pages
deployment workflow that publishes skills/diagram-design/assets as a static
site, and point the README at the deployed gallery (closes#33).
Add CONTRIBUTING.md covering all validation gates and contribution
workflows, CODE_OF_CONDUCT.md (Contributor Covenant 2.1), GitHub issue
templates (bug/feature), and a pull request template; add a Contributing
section to the README.