docs: record that ips10 touch is dead, and the verifier lesson behind it #370
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |