Skip to content

docs: record that ips10 touch is dead, and the verifier lesson behind it #370

docs: record that ips10 touch is dead, and the verifier lesson behind it

docs: record that ips10 touch is dead, and the verifier lesson behind it #370

Workflow file for this run

name: Design System
on:
pull_request:
push:
branches: [master]
jobs:
verify:
name: Token sync + lint regression
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: 22
# Token mirrors must match design/tokens.css — drift here is always a bug.
- name: Verify token mirrors are in sync
run: python3 design/verify-tokens-sync.py
# Self-test exercises the verifier itself against five gap patterns
# (var-swap, group-misplace, stray-numeric, hex-stray, comment-mask).
# If any pattern slips through, the verifier itself has regressed.
- name: Self-test verifier gap detection
run: python3 design/verify-tokens-sync.py --self-test
- name: Verify design-system catalog, frontmatter, and translations
run: node scripts/build-design-system-viewer.mjs --check
- name: Verify Markdown links, anchors, and heading structure
run: node scripts/check-docs.mjs
# The Pages GNB is single-sourced from scripts/pages-nav.html; the four
# committed surfaces must match the rendered partial (Build Health
# renders it at generation time and cannot drift).
- name: Verify Pages GNB parity
run: node scripts/sync-pages-nav.mjs --check
# The Devices page renders the ESP32 spec cards from the compatibility
# matrix. The Markdown table is the SSOT; the cards must not drift.
- name: Verify ESP32 spec-card parity
run: node scripts/sync-hardware-spec-cards.mjs --check
# lint.sh is baseline-aware. The current count must be ≤ the snapshot
# recorded in docs/design-lint-baseline.md. Lower is welcome (no action);
# higher fails the PR with a delta report.
- name: Lint vs baseline
run: |
BASELINE=$(grep -m1 -oE 'Total: \*\*[0-9]+ violations\*\*' \
docs/design-lint-baseline.md | grep -oE '[0-9]+')
if [ -z "$BASELINE" ]; then
echo "::error::Could not parse baseline count from docs/design-lint-baseline.md"
exit 1
fi
bash design/lint.sh --json > /tmp/lint-current.json 2>/dev/null || true
CURRENT=$(python3 -c 'import json,sys; print(json.load(open("/tmp/lint-current.json"))["total"])')
echo "Lint baseline: $BASELINE"
echo "Lint current: $CURRENT"
if [ "$CURRENT" -gt "$BASELINE" ]; then
DELTA=$((CURRENT - BASELINE))
echo "::error::Design-lint regression — current $CURRENT exceeds baseline $BASELINE by $DELTA"
bash design/lint.sh || true
exit 1
fi
if [ "$CURRENT" -lt "$BASELINE" ]; then
DELTA=$((BASELINE - CURRENT))
echo "::notice::Design-lint improved — current $CURRENT is $DELTA below baseline $BASELINE. Update docs/design-lint-baseline.md to lock in the gain."
fi