feat(types): ship ten editorial diagram types in one release (#118)

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>
This commit is contained in:
Cathryn Lavery
2026-08-19 15:49:27 -07:00
committed by GitHub
co-authored by Jacopo Vendramin
parent 5f1b6ddc66
commit 4691a2f40c
60 changed files with 6453 additions and 58 deletions
+2 -2
View File
@@ -402,7 +402,7 @@ def main() -> int:
missing_guide = directory / "missing-guide.md"
missing_guide.write_text(
original_skill.read_text(encoding="utf-8").replace(
"### Visual-type guide (28)", "### Visual guide"
"### Visual-type guide (38)", "### Visual guide"
),
encoding="utf-8",
)
@@ -410,7 +410,7 @@ def main() -> int:
markdown_errors = semantic_module.verify_markdown()
finally:
semantic_module.SKILL = original_skill
if not any("must contain the 28-row visual-type guide" in error for error in markdown_errors):
if not any("must contain the 38-row visual-type guide" in error for error in markdown_errors):
raise AssertionError(f"missing visual-guide anchor was accepted: {markdown_errors}")
print("OK: missing visual-type guide anchor is rejected")
+2 -2
View File
@@ -72,8 +72,8 @@ def check_description(errors: list[str]) -> None:
errors.append("SKILL.md frontmatter description is missing")
return
types = selection_table_types(markdown)
if len(types) != 28:
errors.append(f"expected 28 visual types in the selection table; found {len(types)}")
if len(types) != 38:
errors.append(f"expected 38 visual types in the selection table; found {len(types)}")
for name in types:
key = normalized(name)
key = DESCRIPTION_ALIASES.get(key, key)
+6 -6
View File
@@ -191,18 +191,18 @@ def verify_markdown() -> list[str]:
if "Selection: semantic pattern, then visual type" not in skill:
errors.append("SKILL.md must choose semantic pattern before visual type")
router_position = skill.find("semantic-patterns.md")
guide_position = skill.find("### Visual-type guide (28)")
guide_position = skill.find("### Visual-type guide (38)")
if router_position < 0:
errors.append("SKILL.md must link to semantic-patterns.md")
if guide_position < 0:
errors.append("SKILL.md must contain the 28-row visual-type guide")
errors.append("SKILL.md must contain the 38-row visual-type guide")
if router_position >= 0 and guide_position >= 0 and router_position > guide_position:
errors.append("semantic-pattern router must precede the visual-type guide")
visual_guide = section(skill, "### Visual-type guide (28)", "Rules of thumb:")
visual_guide = section(skill, "### Visual-type guide (38)", "Rules of thumb:")
visual_rows = re.findall(r"^\|.*\[type-[^)]+\.md\]", visual_guide, re.MULTILINE)
if len(visual_rows) != 28:
errors.append(f"visual-type guide must preserve 28 rows; found {len(visual_rows)}")
if len(visual_rows) != 38:
errors.append(f"visual-type guide must preserve 38 rows; found {len(visual_rows)}")
for index, name in enumerate(PATTERN_NAMES, 1):
if name not in skill:
@@ -419,7 +419,7 @@ def main() -> int:
print(f"- {error}")
return 1
if not args.example_only:
print("OK: 7 semantic patterns route independently to the preserved 28 visual types")
print("OK: 7 semantic patterns route independently to the preserved 38 visual types")
print("OK: animation modes, primitives, static fallback, and accessibility contract")
if not args.markdown_only:
print("OK: policy-trace example controls, structure, reduced motion, and unique IDs")