Features
- Semantic background, text, and accent color tokens (#109).
colors.semanticnow includes the real computed page surface (background), body text color (text), and the most chromatic hue-distinct brand color (accent). Output contractSCHEMA_VERSION1.1.0 -> 1.2.0, additive: 1.1.x consumers ignore the new keys. - Dominant body font detection (#109). The canonical base font is read off
document.bodyinstead of a size/tag heuristic. Typography gains atextcontext for body-eligible copy in other families;bodymarks the dominant reading font. - GitHub Actions annotations for the drift gate (#110, DEM-83). When
--comparefails underGITHUB_ACTIONS=true, the summary and per-token changes render inline on the PR Checks tab via::error::/::warning::workflow commands. Purely additive; the exit-code contract is unchanged.
Fixes
- The drift gate fails closed (#111). A compare failure (unparseable baseline, typo'd path, platform error) used to warn and exit 0, leaving a misconfigured CI gate green forever. It now exits 2 (RUNTIME, "check broke, investigate"). A path-looking argument that is not a file rejects locally instead of being sent to the App as a baseline id, and an unparseable baseline names the file and points at
--save-output.
Upgrade note for CI drift gates
Baselines saved by 0.21.x will report typography drift under 0.22.0 with no site change, because body copy splits into body + text contexts (measured on dembrandt.com: drift 25 against threshold 10). Re-approve once after upgrading:
dembrandt <url> --compare <baseline.json> --approve