Carries eight template commits: the provider sandbox actually running, release
admission to a named environment, the product feature manifest with its runtime
kill switch, architecture and documentation rules that match what is enforced,
the removability fixtures, and the browser, visual and performance evidence.
Product identity is unchanged. `package.json` keeps `tech-log-frontend` and the
catalog keeps the Tech Log naming; the home page was not in the delta. The
visual baselines are this product's own — the template's were excluded from the
transplant and these were regenerated here, where the only difference is the
platform overview's new product-feature section.
What this repository gains operationally: `config/runtime/{local,development,
staging,production}.json` with `FE-GATE-027` refusing an artifact whose runtime
document does not match the environment it is being admitted to, and
`FEATURE_OVERRIDES` for taking an installed feature out of service without a
rebuild.
Verified here: eight gates green, build green, visual 5/5, and 1,858 of 1,859
tests in the suites that do not need a sandbox — the one failure passes in
isolation and is a jsdom lazy-chunk timeout under parallel load. The provider
suites cannot run on this machine at all: `kernel.apparmor_restrict_unprivileged
_userns=1` makes `bwrap --unshare-net` fail, reproducible without any code from
either repository.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
167 lines
14 KiB
JSON
167 lines
14 KiB
JSON
{
|
|
"name": "tech-log-frontend",
|
|
"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:profile": "node scripts/generate-runtime-config.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:release-admission": "node scripts/check-release-admission.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"
|
|
}
|
|
}
|