diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 55d618f..5190973 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -123,3 +123,28 @@ jobs: sys.exit(1) print(f"Validated {len(manifests)} manifest(s) — OK") EOF + + lint: + # Maintainer/CI-only size + module-hygiene gate (constitution Principle I: + # dev tooling, never on the serve/Docker path — same category as + # scripts/build-tailwind.sh). max-lines WARNS (the 1,500-line size ratchet; + # non-blocking), while import-x/no-unresolved + no-cycle HARD-ERROR on the + # ES-module graphs the refactor produces. Exemptions: docs/size-exemptions.md. + name: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + # npm ci runs third-party postinstall scripts; don't leave the token in + # git config for them (this job never pushes). + with: + persist-credentials: false + + - uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: npm ci + + - name: ESLint (size norm + module hygiene) + run: npm run lint diff --git a/.specify/memory/constitution.md b/.specify/memory/constitution.md index db3b68f..0930772 100644 --- a/.specify/memory/constitution.md +++ b/.specify/memory/constitution.md @@ -48,11 +48,30 @@ output is committed, so Docker / desktop / end users never build. New features extend `app.js` and the existing globals (`window.playSong`, `window.showScreen`, `window.createHighway`, `window.feedBack`). +Native ES modules are a first-class, build-free extension mechanism. +Because `