The ledger declared "All 38 are now FIXED" while six of those rows were reproducibly partial. A summary sentence is cheap and a reviewer reads it as evidence, so the claim is now derived from a machine-readable record: `docs/operations/adapter-remediation-dispositions.json` carries each finding's disposition and the test paths that hold it, and `check:remediation-ledger` joins that file to the prose, verifies every evidence path exists, and refuses a blanket closure sentence while any row is still open. The shared-abort gate had the same weakness in miniature: it passed when at least one production file imported the primitive, so an unrelated import satisfied it while Image and Resumable kept their own diverging copies. It now requires the four named consumers to resolve their import to the primitive itself, and prints the exact importer set rather than a count. `check:optional-recipes:source` was already failing before this work (52,078 against a 52,000 budget) and the correctness code above pushed it further. Duplicate abort mechanics were consolidated first — Image and Resumable onto the shared primitive, four decoders onto one snapshot helper — and the remainder is code the review asked for, so the budget is reset to 54,600 against a measured 53,810 with that reasoning recorded, rather than the failure being carried forward as if it were green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
165 lines
14 KiB
JSON
165 lines
14 KiB
JSON
{
|
|
"name": "clean-architecture-frontend-template",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"packageManager": "pnpm@11.17.0",
|
|
"engines": {
|
|
"node": ">=24.11.0 <25.0.0",
|
|
"pnpm": ">=11.0.0 <12.0.0"
|
|
},
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "node scripts/build-frontend.ts",
|
|
"build:release-candidate": "corepack pnpm build && corepack pnpm generate:supply-chain && corepack pnpm scan:security && corepack pnpm verify:release && node scripts/verify-supply-chain-artifacts.ts && node scripts/create-release-candidate.ts",
|
|
"preview": "vite preview",
|
|
"lint": "eslint src scripts tests recipes .storybook vite.config.ts vitest.config.ts playwright*.config.ts --max-warnings=0",
|
|
"check:architecture": "node scripts/check-architecture.ts",
|
|
"check:design-system": "node scripts/check-design-system.ts",
|
|
"check:design-system:fixture": "node scripts/check-design-system.ts --fixture",
|
|
"check:i18n": "node scripts/check-i18n.ts",
|
|
"check:i18n:fixture": "node scripts/check-i18n.ts --fixture",
|
|
"check:adapter-inventory": "node scripts/check-adapter-inventory.ts",
|
|
"check:remediation-ledger": "node scripts/check-remediation-ledger.ts",
|
|
"check:diagnostics": "node scripts/check-diagnostics.ts",
|
|
"check:diagnostics:fixture": "node scripts/check-diagnostics.ts --fixture",
|
|
"check:types": "corepack pnpm check:types:app && corepack pnpm check:types:node && corepack pnpm check:types:test && corepack pnpm check:types:recipes && corepack pnpm check:types:web-worker && corepack pnpm check:types:service-worker",
|
|
"check:types:app": "tsc --project tsconfig.app.json",
|
|
"check:types:node": "tsc --project tsconfig.node.json",
|
|
"check:types:test": "tsc --project tsconfig.test.json",
|
|
"check:types:recipes": "node scripts/check-optional-recipe-types.ts",
|
|
"check:types:fixture": "tsc --ignoreConfig --strict --noEmit --target ES2022 --module NodeNext --moduleResolution NodeNext tests/fixtures/typecheck/invalid-port-call.ts",
|
|
"check:types:fixture:ts-port": "tsc --ignoreConfig --strict --noEmit --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-port-implementation.ts",
|
|
"check:types:fixture:ts-result": "tsc --ignoreConfig --strict --noEmit --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-result-narrowing.ts",
|
|
"check:types:fixture:application-output": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-application-output.ts",
|
|
"check:types:fixture:application-input": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-application-input.ts",
|
|
"check:types:fixture:feature-input": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-feature-input.ts",
|
|
"check:types:fixture:failure-kind": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-failure-kind.ts",
|
|
"check:types:fixture:reference-operation": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-reference-operation.ts",
|
|
"check:types:fixture:async-overlay": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-async-overlay.ts",
|
|
"check:types:fixture:route-runtime": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-route-runtime.ts",
|
|
"check:types:fixture:page-action": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler --jsx react-jsx tests/fixtures/typecheck/invalid-page-action.tsx",
|
|
"check:types:fixture:icon-button": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler --jsx react-jsx tests/fixtures/typecheck/invalid-icon-button.tsx",
|
|
"check:types:fixture:i18n-key": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-message-key.ts",
|
|
"check:types:fixture:i18n-params": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-message-params.ts",
|
|
"check:types:fixture:diagnostics": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-diagnostics-port.ts",
|
|
"check:types:fixture:image-resolve-signal": "tsc --ignoreConfig --strict --noEmit --skipLibCheck --target ES2022 --module ESNext --moduleResolution Bundler tests/fixtures/typecheck/invalid-image-cdn-resolve-signal.ts",
|
|
"test:runtime-schema": "vitest run tests/runtime-schema --reporter=default --reporter=junit --outputFile.junit=artifacts/tests/runtime-schema.xml --passWithNoTests",
|
|
"test:unit": "vitest run tests/unit --reporter=default --reporter=junit --outputFile.junit=artifacts/tests/unit.xml",
|
|
"test:component": "vitest run tests/component --reporter=default --reporter=junit --outputFile.junit=artifacts/tests/component.xml",
|
|
"test:integration": "vitest run tests/integration --reporter=default --reporter=junit --outputFile.junit=artifacts/tests/integration.xml",
|
|
"test:http-scenario-catalog": "vitest run tests/integration/http-scenario-catalog.test.ts --reporter=default --maxWorkers=1",
|
|
"test:http-scenario-evidence": "node scripts/run-http-scenario-evidence.ts",
|
|
"test:recipes": "vitest run tests/recipes --reporter=default --reporter=junit --outputFile.junit=artifacts/tests/optional-recipes.xml --passWithNoTests",
|
|
"test:e2e": "playwright test",
|
|
"test:e2e:dev": "playwright test --config playwright.dev.config.ts",
|
|
"test:browser-capabilities": "playwright test --config playwright.capabilities.config.ts",
|
|
"verify:browser-capability-evidence": "node scripts/verify-browser-capability-evidence.ts",
|
|
"storybook": "storybook dev -p 6006",
|
|
"build:storybook": "storybook build -o artifacts/storybook/static",
|
|
"test:storybook": "playwright test --config playwright.storybook.config.ts",
|
|
"test:visual": "playwright test --config playwright.visual.config.ts",
|
|
"test:visual:update": "playwright test --config playwright.visual.config.ts --update-snapshots",
|
|
"check:test-evidence": "node scripts/check-test-evidence.ts",
|
|
"check:test-evidence:browser": "node scripts/check-test-evidence.ts --skip-scenario-executions",
|
|
"check:http-scenario-evidence": "node scripts/check-test-evidence.ts --scenario-only --artifact artifacts/quality/http-scenario-evidence.json",
|
|
"check:http-scenario-evidence:fixture": "node scripts/check-test-evidence.ts --scenario-only --source-root tests/fixtures/test-evidence/scenarios/source --policy tests/fixtures/test-evidence/scenarios/policy.json --catalog tests/fixtures/test-evidence/scenarios/catalog.json --receipt tests/fixtures/test-evidence/scenarios/receipt.json --artifact artifacts/quality/http-scenario-evidence-fixture.json",
|
|
"check:test-evidence:source": "node scripts/check-test-evidence.ts --source-only --artifact artifacts/quality/test-evidence-source.json",
|
|
"check:test-evidence:fixture": "node scripts/check-test-evidence.ts --source-root tests/fixtures/test-evidence/forbidden --artifact artifacts/quality/test-evidence-fixture.json",
|
|
"test:a11y": "playwright test --grep @a11y && node scripts/write-a11y-report.ts",
|
|
"review:a11y-manual": "node scripts/verify-a11y-manual.ts",
|
|
"test:sample-removal": "node scripts/test-sample-removal.ts",
|
|
"test:optional-recipe-removal": "node scripts/test-optional-recipe-removal.ts",
|
|
"test:browser-file-storage-removal": "node scripts/test-browser-file-storage-runtime-removal.ts",
|
|
"test:realtime-removal": "node scripts/test-realtime-runtime-removal.ts",
|
|
"test:reference-feature": "vitest run tests/features/reference-feature --reporter=default --reporter=junit --outputFile.junit=artifacts/tests/reference-feature.xml --passWithNoTests",
|
|
"check:v8-coverage-counter-semantics": "node scripts/check-v8-coverage-counter-semantics.ts",
|
|
"test:coverage": "corepack pnpm check:v8-coverage-counter-semantics && vitest run tests/runtime-schema tests/unit tests/component tests/integration tests/features/reference-feature --coverage --maxWorkers=4 --reporter=default --reporter=junit --outputFile.junit=artifacts/tests/coverage.xml && node scripts/check-risk-coverage.ts",
|
|
"check:coverage:fixture": "node scripts/check-risk-coverage.ts --summary tests/fixtures/coverage/below-threshold.json --artifact artifacts/quality/risk-coverage-fixture.json",
|
|
"test:all": "corepack pnpm test:runtime-schema && corepack pnpm test:unit && corepack pnpm test:component && corepack pnpm test:integration && corepack pnpm test:reference-feature && corepack pnpm test:recipes",
|
|
"verify:lockfile": "corepack pnpm install --frozen-lockfile --ignore-scripts",
|
|
"check:frozen-lockfile:fixture": "node scripts/check-frozen-lockfile-fixture.ts",
|
|
"generate:artifact-schemas": "node scripts/generate-artifact-schemas.ts",
|
|
"check:artifact-schemas": "node scripts/generate-artifact-schemas.ts --check",
|
|
"generate:supply-chain": "node scripts/generate-supply-chain.ts",
|
|
"verify:local-evidence": "node scripts/verify-release-candidate.ts && node scripts/verify-release.ts && node scripts/verify-supply-chain-artifacts.ts && node scripts/verify-archived-local-evidence.ts && node scripts/verify-release-candidate.ts",
|
|
"verify:promotion": "node scripts/verify-exact-promotion-bundle.ts",
|
|
"update:dependency-baseline": "node scripts/update-dependency-baseline.ts",
|
|
"check:supply-chain:fixtures": "node scripts/check-supply-chain-fixtures.ts",
|
|
"check:supply-chain:provider-fixtures": "node scripts/check-supply-chain-provider-fixtures.ts",
|
|
"verify:reproducible-build": "node scripts/verify-reproducible-build.ts",
|
|
"scan:security": "node scripts/security-scan.ts",
|
|
"scan:security:fixture": "node scripts/security-scan.ts --policy tests/fixtures/security/secret-detection/forbidden-policy.json --artifact artifacts/security/scan-fixture.sarif",
|
|
"check:security:fixtures": "node scripts/check-security-fixtures.ts",
|
|
"check:browser-security": "node scripts/check-browser-security.ts",
|
|
"check:browser-file-storage-boundaries": "node scripts/check-browser-file-storage-boundaries.ts",
|
|
"check:realtime-boundaries": "node scripts/check-realtime-boundaries.ts",
|
|
"check:realtime-boundaries:fixture": "node scripts/check-realtime-boundary-fixtures.ts",
|
|
"check:optional-recipes": "node scripts/check-optional-recipes.ts --require-dist",
|
|
"check:optional-recipes:source": "node scripts/check-optional-recipes.ts",
|
|
"check:optional-recipe-fixtures": "node scripts/check-optional-recipe-fixtures.ts",
|
|
"check:registries": "node scripts/check-registries.ts",
|
|
"check:registries:structure": "node scripts/check-registries.ts --no-baseline",
|
|
"check:registries:compatibility-fixtures": "node scripts/check-registry-compatibility-fixtures.ts",
|
|
"check:registries:baseline-fixture": "node scripts/check-registries.ts --approval tests/fixtures/registry/compatibility/tampered-approval.json --artifact artifacts/quality/registry-baseline-fixture.json",
|
|
"check:registries:fixture": "node scripts/check-registries.ts --governance tests/fixtures/registry/forbidden/governance.json --artifact artifacts/quality/registry-fixture.json",
|
|
"check:routes:fixture": "node scripts/check-registries.ts --governance tests/fixtures/registry/routes/governance.json --artifact artifacts/quality/route-registry-fixture.json",
|
|
"verify:compatibility": "node scripts/check-compatibility.ts",
|
|
"verify:release": "node scripts/verify-release.ts",
|
|
"verify:hosting-headers": "node scripts/verify-hosting-headers.ts",
|
|
"check:bundle": "node scripts/generate-supply-chain.ts && node scripts/check-bundle.ts",
|
|
"test:performance": "node scripts/test-performance.ts",
|
|
"collect:web-vitals-evidence": "node scripts/collect-web-vitals-evidence.ts",
|
|
"drill:runbook": "node scripts/drill-runbook.ts",
|
|
"drill:runbooks": "corepack pnpm drill:runbook -- FE-RB-001 && corepack pnpm drill:runbook -- FE-RB-002 && corepack pnpm drill:runbook -- FE-RB-003 && corepack pnpm drill:runbook -- FE-RB-004 && corepack pnpm drill:runbook -- FE-RB-005",
|
|
"ci:gate": "node scripts/run-ci-gate.ts",
|
|
"generate:ci-workflow": "node scripts/generate-ci-workflow.ts",
|
|
"check:ci-workflow": "node scripts/generate-ci-workflow.ts --check",
|
|
"check:ci": "corepack pnpm check:artifact-schemas && node scripts/check-ci-contract.ts && corepack pnpm check:ci-workflow",
|
|
"verify:documentation": "node scripts/verify-documentation-readiness.ts",
|
|
"build:app-only": "vite build && node scripts/generate-build-manifest.ts",
|
|
"generate:contract-set": "node scripts/generate-contract-set.ts",
|
|
"check:types:web-worker": "tsc --project tsconfig.web-worker.json",
|
|
"check:types:service-worker": "tsc --project tsconfig.service-worker.json"
|
|
},
|
|
"dependencies": {
|
|
"@tanstack/react-query": "5.101.4",
|
|
"lucide-react": "1.25.0",
|
|
"react": "19.2.8",
|
|
"react-dom": "19.2.8",
|
|
"react-router-dom": "7.18.1",
|
|
"zod": "4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@axe-core/playwright": "4.12.1",
|
|
"@babel/core": "8.0.1",
|
|
"@babel/eslint-parser": "8.0.1",
|
|
"@babel/plugin-syntax-jsx": "8.0.1",
|
|
"@babel/plugin-syntax-typescript": "8.0.3",
|
|
"@eslint/js": "10.0.1",
|
|
"@playwright/test": "1.62.0",
|
|
"@storybook/addon-a11y": "10.5.4",
|
|
"@storybook/react-vite": "10.5.4",
|
|
"@tailwindcss/vite": "4.3.3",
|
|
"@testing-library/jest-dom": "7.0.0",
|
|
"@testing-library/react": "16.3.2",
|
|
"@testing-library/user-event": "14.6.1",
|
|
"@types/node": "24.13.3",
|
|
"@types/react": "19.2.8",
|
|
"@types/react-dom": "19.2.3",
|
|
"@vitejs/plugin-react": "6.0.4",
|
|
"@vitest/coverage-v8": "4.1.10",
|
|
"dependency-cruiser": "18.1.0",
|
|
"eslint": "10.8.0",
|
|
"eslint-plugin-react-hooks": "7.1.1",
|
|
"globals": "17.7.0",
|
|
"jsdom": "29.1.1",
|
|
"msw": "2.15.0",
|
|
"storybook": "10.5.4",
|
|
"tailwindcss": "4.3.3",
|
|
"typescript": "7.0.2",
|
|
"vite": "8.1.5",
|
|
"vitest": "4.1.10"
|
|
}
|
|
}
|