fix(verify-geometry): recognize wider label masks (#84)
Extend the verified label-mask width range to 200px while retaining the 14px height cap, with adversarial and shipped-asset coverage, and publish synchronized plugin version 2.4.7.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "diagram-design",
|
"name": "diagram-design",
|
||||||
"description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, or DP security matrix diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.",
|
"description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, or DP security matrix diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.",
|
||||||
"version": "2.4.6",
|
"version": "2.4.7",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Cathryn Lavery",
|
"name": "Cathryn Lavery",
|
||||||
"url": "https://github.com/cathrynlavery"
|
"url": "https://github.com/cathrynlavery"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "diagram-design",
|
"name": "diagram-design",
|
||||||
"description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, or DP security matrix diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.",
|
"description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, or DP security matrix diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.",
|
||||||
"version": "2.4.6",
|
"version": "2.4.7",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Cathryn Lavery",
|
"name": "Cathryn Lavery",
|
||||||
"url": "https://github.com/cathrynlavery"
|
"url": "https://github.com/cathrynlavery"
|
||||||
|
|||||||
@@ -32,8 +32,13 @@ three variants at a time.
|
|||||||
- Geometric contracts in this repo are expressed as checkers with fixtures, in line with how
|
- Geometric contracts in this repo are expressed as checkers with fixtures, in line with how
|
||||||
the import extractors are verified. A rule that only lives in prose is a rule that ships
|
the import extractors are verified. A rule that only lives in prose is a rule that ships
|
||||||
broken examples.
|
broken examples.
|
||||||
- The heuristics are shape-based (node ≥ 60×40, mask 20–120 × 8–14) and match the shipped
|
- The heuristics are shape-based (node ≥ 60×40, mask 20–200 × 8–14) and match the shipped
|
||||||
templates. A future type with markedly different proportions may need the thresholds
|
templates. A future type with markedly different proportions may need the thresholds
|
||||||
revisited — widen them in the checker, and add the case to the adversarial tests.
|
revisited — widen them in the checker, and add the case to the adversarial tests.
|
||||||
|
(The width cap was originally 120; the long mono plates in example-sequence-oauth.html
|
||||||
|
are 128 wide and fell outside the window, so every mask past 120 — including the wider
|
||||||
|
plates CJK labels produce — went unverified. Widened to 200 with the height cap kept at
|
||||||
|
14: raising it to 18 would misclassify ~80 shipped rects — zone eyebrows, container
|
||||||
|
header bars, row stripes — as masks.)
|
||||||
- The checker does not evaluate the 6–10px connector gap from rule 2, which needs stroke
|
- The checker does not evaluate the 6–10px connector gap from rule 2, which needs stroke
|
||||||
geometry rather than rectangles. That rule remains a checklist item.
|
geometry rather than rectangles. That rule remains a checklist item.
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ ASSET_DIR = ROOT / "skills/diagram-design/assets"
|
|||||||
ARCHITECTURE = ASSET_DIR / "example-architecture.html"
|
ARCHITECTURE = ASSET_DIR / "example-architecture.html"
|
||||||
SWIMLANE = ASSET_DIR / "example-swimlane.html"
|
SWIMLANE = ASSET_DIR / "example-swimlane.html"
|
||||||
ZONED = ASSET_DIR / "example-dp-integration.html"
|
ZONED = ASSET_DIR / "example-dp-integration.html"
|
||||||
|
SEQUENCE_OAUTH = ASSET_DIR / "example-sequence-oauth.html"
|
||||||
|
|
||||||
|
|
||||||
def load_verifier():
|
def load_verifier():
|
||||||
@@ -99,9 +100,30 @@ def main() -> int:
|
|||||||
0,
|
0,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# A long mono plate (128px, as shipped in example-sequence-oauth.html) or a
|
||||||
|
# wide CJK label plate must be recognized as a mask and checked like any other.
|
||||||
|
check(
|
||||||
|
"wide mono mask clipped by a later node",
|
||||||
|
document('<rect x="180" y="80" width="128" height="12" rx="2" fill="#f5f5f5"/>' + node),
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
check(
|
||||||
|
"wide mono mask over an earlier node is legal",
|
||||||
|
document(node + '<rect x="180" y="80" width="128" height="12" rx="2" fill="#f5f5f5"/>'),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
# Wide-but-tall rects are container header bars or row stripes, not masks —
|
||||||
|
# the height cap stays at 14 so they are never reported.
|
||||||
|
check(
|
||||||
|
"container header bar is not a mask",
|
||||||
|
document('<rect x="80" y="80" width="188" height="16" rx="2" fill="#eee"/>' + node),
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
|
||||||
check_file("shipped architecture example", ARCHITECTURE, 0)
|
check_file("shipped architecture example", ARCHITECTURE, 0)
|
||||||
check_file("shipped swimlane example", SWIMLANE, 0)
|
check_file("shipped swimlane example", SWIMLANE, 0)
|
||||||
check_file("shipped zoned example", ZONED, 0)
|
check_file("shipped zoned example", ZONED, 0)
|
||||||
|
check_file("shipped sequence-oauth example", SEQUENCE_OAUTH, 0)
|
||||||
|
|
||||||
if failures:
|
if failures:
|
||||||
print("\nFAILURES:")
|
print("\nFAILURES:")
|
||||||
|
|||||||
@@ -17,8 +17,10 @@ Paint order is what makes this a defect rather than a stylistic choice:
|
|||||||
Shape heuristics follow the shipped templates:
|
Shape heuristics follow the shipped templates:
|
||||||
|
|
||||||
* A node is a `<rect>` at least 60x40 - large enough for a title and sublabel.
|
* A node is a `<rect>` at least 60x40 - large enough for a title and sublabel.
|
||||||
* A label mask is a `<rect>` 20-120 wide and 8-14 tall - the masking plate that
|
* A label mask is a `<rect>` 20-200 wide and 8-14 tall - the masking plate that
|
||||||
SKILL.md prescribes for arrow labels and zone eyebrows.
|
SKILL.md prescribes for arrow labels and zone eyebrows. The width cap covers
|
||||||
|
the long mono plates shipped in example-sequence-oauth.html (128px) and the
|
||||||
|
wider plates CJK labels need at the same glyph count.
|
||||||
* A mask fully contained in a node is a badge chip (`EXT`, `EDGE`, `ORIG`) and
|
* A mask fully contained in a node is a badge chip (`EXT`, `EDGE`, `ORIG`) and
|
||||||
is legal.
|
is legal.
|
||||||
|
|
||||||
@@ -49,7 +51,7 @@ RECT_RE = re.compile(
|
|||||||
NODE_MIN_W = 60.0
|
NODE_MIN_W = 60.0
|
||||||
NODE_MIN_H = 40.0
|
NODE_MIN_H = 40.0
|
||||||
MASK_MIN_W = 20.0
|
MASK_MIN_W = 20.0
|
||||||
MASK_MAX_W = 120.0
|
MASK_MAX_W = 200.0
|
||||||
MASK_MIN_H = 8.0
|
MASK_MIN_H = 8.0
|
||||||
MASK_MAX_H = 14.0
|
MASK_MAX_H = 14.0
|
||||||
EPSILON = 0.5
|
EPSILON = 0.5
|
||||||
|
|||||||
Reference in New Issue
Block a user