* fix(lint): enforce viewBox presence and title length cap
- Add a11y check: non-decorative <svg> must carry a viewBox attribute
with exactly four numeric tokens and positive width/height dimensions.
- Add a11y check: <title> text must be 60 characters or fewer, closing
the gap between the CONTRIBUTING.md spec and linter enforcement.
- Update VALID_SVG in test-lint-a11y.py to include viewBox so all
existing passing cases remain valid after the new checks land.
- Add three adversarial cases: missing-viewbox, invalid-viewbox,
title-too-long — all verified against the gate suite (47/47 OK).
* fix(lint): accept SVG comma separators and reject non-finite viewBox values
- Re-split viewBox on [\s,]+ so comma-separated values (e.g. 0,0,800,600)
are accepted as valid SVG
- Guard each component with math.isfinite() so values like inf and nan are
rejected rather than passing the > 0 size check
- Add adversarial test cases: viewbox-comma-separated (pass),
viewbox-nonfinite-width, viewbox-nonfinite-height (both fail)
- Bump plugin manifests to 2.4.1
* fix(lint): reject viewBox numbers with Python-only underscore separators
* test(lint): cover remaining viewBox cases
---------
Co-authored-by: Rupam Pal <rupam.pal@euromonitor.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>
Fold all line-boundary forms and escape Markdown/HTML syntax in draw.io digest headings, lists, and tables; add adversarial injection coverage; publish synchronized plugin version 2.5.1. Fixes#81.
* 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.
Adds .claude-plugin/plugin.json and .claude-plugin/marketplace.json so the repo can be installed via /plugin marketplace add. Uses "skills": ["./"] so the existing root SKILL.md is picked up without relocation — standalone install path is unchanged. Also removes stray Cocoon AI author reference from SKILL.md frontmatter.