Files
Matt Van Horn 48fecccda7 feat: add a waterfall chart visual type (#191)
* feat(waterfall): add reference, example variants, and executable verifier

Waterfall is a running-total grammar: totals anchor at the domain floor,
signed bridge bars float between running levels, and a carry connector
conserves the total across every gap. Each bar declares data-role,
data-value, and data-name; scripts/verify-waterfall.py recomputes the
walk and fails on conservation, scale, bridge-geometry, carry, printed-
label, or sign-treatment drift, with adversarial coverage in
scripts/test-verify-waterfall.py per ADR 0005.

Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com>

* feat(waterfall): wire routing, gallery, docs, CI, and screenshot catalog

Move the verifiable type count 39 -> 40 across SKILL.md, the frontmatter
description and all four plugin manifest descriptions, the gallery tab
(eyebrow 53), README, CONTRIBUTING, cookbook, and the counters in
verify-docs-sync.py, verify-semantic-motion.py, the screenshot catalog
scripts, and the motion-verifier fixture. Add the waterfall CI gates to
ci.yml and .maintainer-policy.json, the canonical waterfall.png with its
manifest entry, and the README thumbnail. Pay the ADR 0004 byte cap by
trimming SKILL.md body prose the ADR 0007 way (an illustrative §6 rule-5
example clause and the §10 consultant-row detail); SKILL.md lands at
39,971 bytes. Plugin manifest versions are untouched (ADR 0009).

Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com>

* docs(adr): record the waterfall running-total grammar decision

ADR 0010 argues the grammar against bar, dumbbell, pyramid, Sankey, and
stacked bars, and scopes the two dumbbell-precedent departures (sign by
fill weight, data coordinates exempt from the 4px grid). ADR 0002 gains
the 39 -> 40 amendment its enforcement procedure requires.

Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com>

* docs(pr-previews): add waterfall light/dark/full visual proof renders

Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com>

* fix(verify-waterfall): close the three review findings, with regressions

Non-finite carries: parse_number now rejects nan/inf, and the bar geometry,
running total and fitted scale each require finite values, so a
data-carry="nan" can no longer sail past a tolerance comparison that is false
either way.

Labels were not bar-bound: printed_values now takes the bar and only accepts a
<text> centred on that bar's column at its expected label height. A bar that
loses its own label while an unrelated tick carries the same number now fails
instead of borrowing it.

Polarity fills were under-validated: the tint-for-increase and
paper-for-decrease mapping is asserted absolutely per bar against the theme's
documented pair, which the previous set-vs-set comparison could not see for a
single-polarity walk or a swapped chart. An unrecognised paper falls through to
the relative checks rather than failing the file.

Each finding gets a mutation in test-verify-waterfall.py: 17 now, all caught,
and the three shipped examples still pass.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Cathryn Lavery <cathryn@bestself.co>
2026-09-09 18:43:12 -05:00

68 KiB
2400x1202px