diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f280258..e8e00eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -91,6 +91,15 @@ jobs: working-directory: web run: pnpm typecheck + # web/package.json's "name" field is "ntask" (not @ntask/web), so this + # is the correct --filter target. Blocking, not continue-on-error: the + # lint config and script have been fully working locally with zero + # errors since ntask/web/eslint.config.mjs and web/package.json's + # "lint": "eslint ." script were added — it was simply never invoked in + # CI (P6-E11-W2-S4-T25). + - name: Lint + run: pnpm --filter ntask lint + - name: Unit tests working-directory: web run: pnpm test diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 81726db..24f1476 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -970,6 +970,9 @@ importers: eslint: specifier: ^9.32.0 version: 9.39.5(jiti@2.7.0) + eslint-plugin-react-hooks: + specifier: ^7.1.1 + version: 7.1.1(eslint@9.39.5(jiti@2.7.0)) jest-axe: specifier: ^10.0.0 version: 10.0.0 @@ -5214,6 +5217,12 @@ packages: engines: {node: '>=6.0'} hasBin: true + eslint-plugin-react-hooks@7.1.1: + resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 + eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -8933,6 +8942,12 @@ packages: peerDependencies: zod: ^3.25.28 || ^4 + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} @@ -9039,8 +9054,8 @@ snapshots: '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 @@ -9108,7 +9123,7 @@ snapshots: '@babel/helper-module-imports@7.29.7': dependencies: '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -9169,7 +9184,7 @@ snapshots: '@babel/helpers@7.29.7': dependencies: '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@babel/highlight@7.25.9': dependencies: @@ -9180,7 +9195,7 @@ snapshots: '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@babel/parser@7.29.8': dependencies: @@ -9876,17 +9891,17 @@ snapshots: '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@babel/traverse@7.29.7': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 '@babel/helper-globals': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -10190,7 +10205,7 @@ snapshots: '@expo/xcpretty': 4.4.4 '@react-native/dev-middleware': 0.79.6 '@urql/core': 5.2.0(graphql@16.14.2) - '@urql/exchange-retry': 1.3.2(@urql/core@5.2.0) + '@urql/exchange-retry': 1.3.2(@urql/core@5.2.0(graphql@16.14.2)) accepts: 1.3.8 arg: 5.0.2 better-opn: 3.0.2 @@ -10409,8 +10424,8 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/generator': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@expo/config': 11.0.13 '@expo/env': 1.0.7 '@expo/json-file': 9.1.5 @@ -11561,7 +11576,7 @@ snapshots: '@react-native/codegen@0.79.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 glob: 7.2.3 hermes-parser: 0.25.1 invariant: 2.2.4 @@ -12850,7 +12865,7 @@ snapshots: transitivePeerDependencies: - graphql - '@urql/exchange-retry@1.3.2(@urql/core@5.2.0)': + '@urql/exchange-retry@1.3.2(@urql/core@5.2.0(graphql@16.14.2))': dependencies: '@urql/core': 5.2.0(graphql@16.14.2) wonka: 6.3.6 @@ -14292,6 +14307,17 @@ snapshots: optionalDependencies: source-map: 0.6.1 + eslint-plugin-react-hooks@7.1.1(eslint@9.39.5(jiti@2.7.0)): + dependencies: + '@babel/core': 7.29.7 + '@babel/parser': 7.29.8 + eslint: 9.39.5(jiti@2.7.0) + hermes-parser: 0.25.1 + zod: 3.25.76 + zod-validation-error: 4.0.2(zod@3.25.76) + transitivePeerDependencies: + - supports-color + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 @@ -15539,7 +15565,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@istanbuljs/schema': 0.1.6 istanbul-lib-coverage: 3.2.2 semver: 7.8.4 @@ -15964,7 +15990,7 @@ snapshots: '@babel/generator': 7.29.7 '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -16580,7 +16606,7 @@ snapshots: dependencies: '@babel/traverse': 7.29.7 '@babel/traverse--for-generate-function-map': '@babel/traverse@7.29.8' - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 flow-enums-runtime: 0.0.6 invariant: 2.2.4 metro-symbolicate: 0.82.5 @@ -19332,6 +19358,10 @@ snapshots: dependencies: zod: 3.25.76 + zod-validation-error@4.0.2(zod@3.25.76): + dependencies: + zod: 3.25.76 + zod@3.22.4: {} zod@3.25.76: {} diff --git a/web/package.json b/web/package.json index e2454b8..95f2efe 100644 --- a/web/package.json +++ b/web/package.json @@ -63,6 +63,7 @@ "@vitejs/plugin-react": "^4.7.0", "@vitest/coverage-istanbul": "^3.2.6", "eslint": "^9.32.0", + "eslint-plugin-react-hooks": "^7.1.1", "jest-axe": "^10.0.0", "jsdom": "^25.0.0", "size-limit": "^11.1.6",