Repository navigation
feat(dist): une cible neutre ouvre le greffon a une quarantaine d hotes #157
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: validate | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: validate-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| validate: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | |
| with: | |
| node-version: "20" | |
| - name: Build reference index | |
| run: node null-to-hero/tools/build-index.mjs | |
| - name: Every rule is complete across its four sources | |
| if: always() | |
| run: node null-to-hero/tools/rule.mjs --audit | |
| - name: Prose counts match the CSVs | |
| if: always() | |
| run: node null-to-hero/tools/sync-counts.mjs --check | |
| - name: Run reference validator | |
| if: always() | |
| run: node tests/validate.js | |
| - name: Run Node unit tests | |
| if: always() | |
| run: node tests/unit.mjs | |
| - name: Detector rules (fixtures both directions) | |
| run: node tests/inspect-rules.mjs | |
| - name: Corpus divergence harness (registry and recorded results) | |
| run: node null-to-hero/tools/eval-corpus/run.mjs | |
| - name: Parsers for the generated packages | |
| if: always() | |
| run: python3 -m pip install --quiet pyyaml | |
| - name: Portable packages are in sync and valid (Codex, Kimi Code) | |
| if: always() | |
| run: node tests/portability.mjs | |
| # P10. The thirteen browser rules are what the product sells and nothing in | |
| # CI verified them: rendered-rules.mjs exits 0 when Playwright is absent, and | |
| # the workflow did not run the file at all. Not a failure, a construction. | |
| # The recipe was already written in action.yml:61-64 and never ported here. | |
| # | |
| # Delivery condition, from the plan: a flaky gate gets bypassed, and a | |
| # bypassed gate stops protecting against real reds. This job stays | |
| # non-blocking (continue-on-error) until it has run twenty consecutive times | |
| # green on the same revision. Flip continue-on-error to false then, and not | |
| # before. Remove this comment in the same commit. | |
| - name: Install Playwright Chromium | |
| if: always() | |
| run: npx --yes playwright install --with-deps chromium | |
| - name: Browser-verified rules (rendered, three.js, motion probes) | |
| if: always() | |
| continue-on-error: true | |
| run: node tests/rendered-rules.mjs --require-browser | |
| - name: Architecture review numbers hold | |
| if: always() | |
| continue-on-error: true | |
| run: node null-to-hero/tools/check-review-numbers.mjs | |
| - name: Run Python unit tests | |
| if: always() | |
| run: python3 tests/test_design_system.py | |
| - name: Context budget guard | |
| if: always() | |
| run: node null-to-hero/tools/check-context-budget.mjs | |
| - name: Routing guard | |
| if: always() | |
| run: node null-to-hero/tools/check-routing.mjs | |
| - name: Behavior corpus is well formed | |
| if: always() | |
| run: node tests/behavior/run.mjs | |
| - name: Content scrubber self-test | |
| if: always() | |
| run: node null-to-hero/skills/seo/scripts/scrub.mjs --selftest |