@leanspec/ui 0.2.7-dev.20251128020042 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
- package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
- package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +2 -0
- package/.next/standalone/packages/ui/.next/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
- package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
- package/.next/standalone/packages/ui/.next/routes-manifest.json +12 -0
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +18 -18
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +6 -6
- package/.next/standalone/packages/ui/.next/server/app/api/context/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/context/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/context/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/context/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/context/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/context/page/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page/build-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page/next-font-manifest.json +6 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page.js +19 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.rsc +12 -12
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +12 -12
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +9 -9
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +2 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3559376c._.js +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__65667b70._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__803d07f0._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__84cdc14a._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8a9ab1a3._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bdc3963a._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f5c6d6b8._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_context_route_actions_dead6daa.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__12b4eb41._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__69a0d63a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__6e739186._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a4c56419._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b6632d78._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__daee3355._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ead1539c._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_0f9ffe32._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_28fe1532._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_315f3b3a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_959ad3d8._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_9dcf102b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_497c8b73._.js → _b397e94a._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_8272a49c._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_context_page_actions_1a062d48.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_context_context-client_tsx_4ba99a62._.js +12 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_specs-nav-sidebar_tsx_8237ed13._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
- package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
- package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/1eb8283995f370c6.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/336e8e8fc6b0fba8.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/37a1236ed50645a6.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/9d84ba08a41145ec.js +5 -0
- package/.next/standalone/packages/ui/.next/static/chunks/c4b1faff3361a749.js +1 -0
- package/.next/{static/chunks/294dea6dbec43ca6.js → standalone/packages/ui/.next/static/chunks/d7420d2a867e57b5.js} +1 -1
- package/.next/{static/chunks/cca4441cde342ae3.js → standalone/packages/ui/.next/static/chunks/dae403679aae65f4.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/efded9da04c960d8.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/f382932f1a5d6359.js +10 -0
- package/.next/standalone/packages/ui/.next/static/chunks/f43b6e43b4da1a32.css +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/f6dd06e6d22d2d12.js +3 -0
- package/.next/standalone/packages/ui/dist/BUILD_ID +1 -0
- package/.next/standalone/packages/ui/dist/public/f864aa7e7061c0600e35cf3d879b27cf.txt +1 -0
- package/.next/standalone/packages/ui/dist/public/favicon.ico +0 -0
- package/.next/standalone/packages/ui/dist/public/file.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/github-mark-white.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/github-mark.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/globe.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/icon.svg +7 -0
- package/.next/standalone/packages/ui/dist/public/logo-dark-bg.svg +17 -0
- package/.next/standalone/packages/ui/dist/public/logo-with-bg.svg +17 -0
- package/.next/standalone/packages/ui/dist/public/logo.svg +17 -0
- package/.next/standalone/packages/ui/dist/public/next.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/vercel.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/window.svg +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/README.md +196 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +75 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +44 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/014-complete-custom-frontmatter/README.md +175 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/016-github-action/README.md +317 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/017-vscode-extension/README.md +261 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CLI-DESIGN.md +380 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION-EXAMPLES.md +230 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION.md +285 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/IMPLEMENTATION.md +358 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/README.md +303 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/TESTING.md +368 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/VALIDATION-RULES.md +327 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/024-pattern-aware-list-grouping/README.md +117 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/025-template-config-updates/README.md +73 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/026-init-pattern-selection/README.md +109 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/034-copilot-slash-commands/README.md +107 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/ARCHITECTURE.md +244 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/IMPLEMENTATION.md +429 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +302 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/036-pm-integrations/README.md +158 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-AI-ASSISTED.md +359 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-FULL-LIFECYCLE.md +86 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-REAL-FEATURE.md +437 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-SCRIPT.md +365 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-FINAL.md +203 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SESSION-2025-11-06.md +174 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SUMMARY.md +156 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/IMPLEMENTATION.md +183 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/MARKETING.md +229 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/NEXT-STEPS-DEMO.md +243 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/README.md +217 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/SESSION-2025-11-06.md +166 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/TESTING.md +126 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/ACTUAL-IMPLEMENTATION.md +108 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/DESIGN.md +382 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/IMPLEMENTATION.md +144 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/RATIONALE.md +146 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/README.md +208 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/TESTING.md +182 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/047-git-backfill-timestamps/README.md +314 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/FINDINGS.md +113 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/GUIDELINES.md +237 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/README.md +149 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-COMPARISONS.md +175 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-CONSTRAINTS.md +254 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/FIRST-PRINCIPLES.md +376 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-ROADMAP.md +240 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-TOOLS.md +175 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/README.md +374 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/051-docs-system-prompt-principles/README.md +339 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/052-branding-assets/README.md +128 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/053-spec-assets-philosophy/README.md +97 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/DESIGN-DECISIONS.md +93 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/OUTPUT-FORMAT-SPEC.md +146 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/README.md +175 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART1.md +397 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART2.md +342 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS.md +44 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CHANGES.md +150 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CONCERNS-ANALYSIS.md +351 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/DOCS-ALIGNMENT-ANALYSIS.md +238 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/README.md +280 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-DRAFT.md +372 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-REFINED.md +466 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/AUDIT-RESULTS.md +178 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/README.md +174 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/README.md +295 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/VALIDATION-RESULTS.md +487 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/ANALYSIS.md +241 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/DESIGN.md +279 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/IMPLEMENTATION.md +642 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/NOTES.md +125 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/README.md +286 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/ARCHITECTURE.md +392 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/COMMANDS.md +1002 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/CONTEXT-ENGINEERING.md +411 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/IMPLEMENTATION.md +812 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/README.md +504 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/TESTING.md +724 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/060-core-concepts-coherence/README.md +125 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/061-ai-assisted-spec-writing/README.md +299 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/IMPLEMENTATION-PLAN.md +174 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PAGE-SPECIFICATIONS.md +265 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PROBLEM-ANALYSIS.md +36 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/README.md +243 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/SOLUTION-DESIGN.md +82 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/DESIGN.md +338 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/EXAMPLES.md +354 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/IMPLEMENTATION.md +189 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/README.md +119 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/064-docs-site-zh-translation/README.md +170 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/065-v03-planning/README.md +158 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/066-context-economy-thresholds-refinement/README.md +842 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/067-monorepo-core-extraction/README.md +358 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/DESIGN.md +444 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/README.md +357 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/069-token-counting-utils/README.md +551 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/070-mcp-token-counting-tool/README.md +372 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/071-simplified-token-validation/README.md +489 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +285 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/073-template-engine-agents-md/README.md +323 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/074-content-at-creation/README.md +136 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/075-intelligent-search-engine/README.md +399 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/076-programmatic-spec-relationships/README.md +301 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/077-archiving-strategy/README.md +235 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/078-sub-spec-template-system/README.md +303 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/079-cli-alphabetical-organization/README.md +196 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/080-mcp-server-modular-architecture/README.md +388 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +824 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DATABASE.md +111 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DEPLOYMENT.md +69 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/FILESYSTEM.md +77 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/IMPLEMENTATION.md +184 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +496 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/083-web-navigation-performance/README.md +490 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/084-sub-spec-visibility-in-tools/README.md +389 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/085-cli-relationship-commands/README.md +920 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/086-template-component-deduplication/README.md +146 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +607 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +104 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +124 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +129 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +244 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +148 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +54 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/001-typescript-cli-migration/README.md +37 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/002-template-system-redesign/README.md +60 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/003-init-system-redesign/README.md +113 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/README.md +69 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/SUMMARY.md +112 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/005-structured-frontmatter/README.md +229 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/006-pm-visualization-tools/README.md +406 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/007-system-prompt-updates/README.md +168 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/008-commander-migration/README.md +174 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/009-cli-ux-enhancement/README.md +212 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/010-commands-refactor/README.md +249 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/README.md +60 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/TEST_SUMMARY.md +139 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/012-sub-spec-files/README.md +722 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/013-custom-spec-templates/README.md +413 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/015-npm-publishing/README.md +255 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/019-readme-improvement/README.md +252 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/020-documentation-website/README.md +253 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/021-docusaurus-vercel-migration/README.md +612 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/022-flexible-folder-structure/README.md +794 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/DESIGN.md +834 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/README.md +255 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/027-cli-ui-ux-optimization/README.md +454 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/028-cli-ui-modernization/README.md +172 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/IMPLEMENTATION.md +152 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/README.md +95 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/030-created-date-format-bug/README.md +87 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/031-gantt-ux-improvements/README.md +230 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/032-console-log-chalk-security/README.md +89 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/033-mcp-server/README.md +89 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/037-docs-overhaul/README.md +166 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-flat-structure-migration/README.md +276 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-mcp-frontmatter-bug-fix/README.md +122 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-simplify-viewer-commands/README.md +198 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-template-variable-sync/README.md +192 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/040-spec-viewer-commands/README.md +171 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/042-mcp-error-handling/README.md +200 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/044-spec-relationships-clarity/README.md +317 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/DESIGN.md +276 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/IMPLEMENTATION.md +241 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/README.md +139 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/TESTING.md +328 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/050-tool-redesign-first-principles/README.md +400 -0
- package/.next/standalone/packages/ui/dist/static/chunks/0c19c69aa7625475.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/116800b03245a1e5.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/15843a3d7584e314.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/19e80edf527aef5c.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/465954d5af3284a9.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/5abeeb89f1412a80.js +3 -0
- package/.next/standalone/packages/ui/dist/static/chunks/5c2072ad938de8ed.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/6a05a93ec8fa7b83.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/778e42188e450b39.css +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/a02c1f50ff00204f.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/a45464b9776dd88e.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/a6dad97d9634a72d.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/b0ea0ac61604f843.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/c06e85b449720194.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/c557ac675be79771.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/cad005a57ffbb2d3.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/cdf6fe33bc65efbc.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/d12ed5dbe44caed7.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/d1ebe5c1a344f4ca.js +5 -0
- package/.next/standalone/packages/ui/dist/static/chunks/d42cf1682bc46652.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/dde5d8bddd7fbfcf.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/ebd89051637b9a47.js +4 -0
- package/.next/standalone/packages/ui/dist/static/chunks/ec82875d18b29f47.js +2 -0
- package/.next/standalone/packages/ui/dist/static/chunks/f0b701df9769bcc5.js +19 -0
- package/.next/standalone/packages/ui/dist/static/chunks/turbopack-1c09a99f4c9e28d3.js +3 -0
- package/.next/standalone/packages/ui/package.json +2 -1
- package/.next/standalone/packages/ui/server.js +1 -1
- package/.next/standalone/packages/ui/src/app/api/context/route.ts +22 -0
- package/.next/standalone/packages/ui/src/app/context/context-client.tsx +371 -0
- package/.next/standalone/packages/ui/src/app/context/page.tsx +17 -0
- package/.next/standalone/packages/ui/src/app/globals.css +16 -16
- package/.next/standalone/packages/ui/src/app/layout.tsx +1 -7
- package/.next/standalone/packages/ui/src/components/context-file-viewer.tsx +291 -0
- package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +10 -1
- package/.next/standalone/packages/ui/src/components/spec-detail-client.tsx +181 -134
- package/.next/standalone/packages/ui/src/components/spec-detail-wrapper.tsx +20 -0
- package/.next/standalone/packages/ui/src/components/specs-nav-sidebar.tsx +3 -2
- package/.next/standalone/packages/ui/src/components/ui/accordion.tsx +58 -0
- package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +172 -3
- package/.next/standalone/packages/ui/src/lib/specs/types.ts +44 -0
- package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
- package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_buildManifest.js +11 -0
- package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_clientMiddlewareManifest.json +1 -0
- package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_ssgManifest.js +1 -0
- package/.next/static/chunks/1eb8283995f370c6.js +1 -0
- package/.next/static/chunks/336e8e8fc6b0fba8.js +1 -0
- package/.next/static/chunks/37a1236ed50645a6.js +1 -0
- package/.next/static/chunks/9d84ba08a41145ec.js +5 -0
- package/.next/static/chunks/c4b1faff3361a749.js +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/294dea6dbec43ca6.js → static/chunks/d7420d2a867e57b5.js} +1 -1
- package/.next/{standalone/packages/ui/.next/static/chunks/cca4441cde342ae3.js → static/chunks/dae403679aae65f4.js} +1 -1
- package/.next/static/chunks/efded9da04c960d8.js +1 -0
- package/.next/static/chunks/f382932f1a5d6359.js +10 -0
- package/.next/static/chunks/f43b6e43b4da1a32.css +1 -0
- package/.next/static/chunks/f6dd06e6d22d2d12.js +3 -0
- package/package.json +3 -2
- package/.next/standalone/node_modules/.pnpm/source-map@0.8.0-beta.0/node_modules/source-map/package.json +0 -95
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__1d0c2012._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__73f60f12._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a7ae8552._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_14118969._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_4129cc0f._.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/16ff9833ae1bb3ae.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/7590e65bcaa41e8b.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/a803d646487dfc2d.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/b6976cf6c48996e5.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/b845813463167db0.js +0 -5
- package/.next/standalone/packages/ui/.next/static/chunks/bd9893e28f8f6a9a.css +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/d784d84d5b880e48.js +0 -1
- package/.next/static/chunks/16ff9833ae1bb3ae.js +0 -1
- package/.next/static/chunks/7590e65bcaa41e8b.js +0 -1
- package/.next/static/chunks/a803d646487dfc2d.js +0 -3
- package/.next/static/chunks/b6976cf6c48996e5.js +0 -1
- package/.next/static/chunks/b845813463167db0.js +0 -5
- package/.next/static/chunks/bd9893e28f8f6a9a.css +0 -1
- package/.next/static/chunks/d784d84d5b880e48.js +0 -1
- /package/.next/standalone/packages/ui/.next/static/{RV93_WHoymRJ5886d_ry8 → -Mn9iD4O5f_khGd1P3kmB}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/ui/.next/static/{RV93_WHoymRJ5886d_ry8 → -Mn9iD4O5f_khGd1P3kmB}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{RV93_WHoymRJ5886d_ry8 → -Mn9iD4O5f_khGd1P3kmB}/_ssgManifest.js +0 -0
- /package/.next/{static/RV93_WHoymRJ5886d_ry8 → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_buildManifest.js +0 -0
- /package/.next/{static/RV93_WHoymRJ5886d_ry8 → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_clientMiddlewareManifest.json +0 -0
- /package/.next/{static/RV93_WHoymRJ5886d_ry8 → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: complete
|
|
3
|
+
created: '2025-11-02'
|
|
4
|
+
tags:
|
|
5
|
+
- quality
|
|
6
|
+
- validation
|
|
7
|
+
- cli
|
|
8
|
+
- first-principles
|
|
9
|
+
- v0.2.0
|
|
10
|
+
priority: critical
|
|
11
|
+
related:
|
|
12
|
+
- 043-official-launch-02
|
|
13
|
+
- 012-sub-spec-files
|
|
14
|
+
created_at: '2025-11-02T00:00:00Z'
|
|
15
|
+
updated_at: '2025-11-06T07:08:45.538Z'
|
|
16
|
+
transitions:
|
|
17
|
+
- status: in-progress
|
|
18
|
+
at: '2025-11-05T13:35:26.669Z'
|
|
19
|
+
- status: complete
|
|
20
|
+
at: '2025-11-06T07:00:00.000Z'
|
|
21
|
+
completed: '2025-11-06'
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Comprehensive Spec Validation
|
|
25
|
+
|
|
26
|
+
> **Status**: ✅ Complete · **Priority**: Critical · **Created**: 2025-11-02 · **Tags**: quality, validation, cli, first-principles, v0.2.0
|
|
27
|
+
|
|
28
|
+
## Overview
|
|
29
|
+
|
|
30
|
+
Provide comprehensive validation tooling that checks specs for quality issues including structure, frontmatter, content, sequence conflicts, and **file corruption**.
|
|
31
|
+
|
|
32
|
+
**Current State:**
|
|
33
|
+
- ✅ `lean-spec check` exists - checks sequence conflicts only
|
|
34
|
+
- ✅ `lean-spec validate` exists - comprehensive validation framework
|
|
35
|
+
- ✅ **Line count validation** - warns at 300 lines, errors at 400+ lines
|
|
36
|
+
- ✅ **Frontmatter validation** - enforces required fields and valid values
|
|
37
|
+
- ✅ **Structure validation** - duplicate headers, required sections
|
|
38
|
+
- ✅ **Corruption detection** - unclosed code blocks, formatting issues, duplicates
|
|
39
|
+
- ❌ No way to detect stale specs (optional, future phase)
|
|
40
|
+
- ❌ No auto-fix capability (optional, future phase)
|
|
41
|
+
|
|
42
|
+
**Implementation Approach:**
|
|
43
|
+
Both `lean-spec check` and `lean-spec validate` exist as separate commands:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Current commands
|
|
47
|
+
lean-spec check # Check for sequence conflicts
|
|
48
|
+
lean-spec validate [specs...] # Validate specs for quality issues
|
|
49
|
+
lean-spec validate --max-lines 500 # Custom line limit
|
|
50
|
+
|
|
51
|
+
# Planned enhancements
|
|
52
|
+
lean-spec validate --frontmatter # Frontmatter validation
|
|
53
|
+
lean-spec validate --structure # Structure validation
|
|
54
|
+
lean-spec validate --corruption # File corruption detection
|
|
55
|
+
lean-spec validate --sub-specs # Sub-spec validation (spec 012)
|
|
56
|
+
lean-spec validate --all # All validation rules
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Use Cases:**
|
|
60
|
+
1. CI/CD validation (block PRs with invalid specs)
|
|
61
|
+
2. Pre-commit hooks (comprehensive quality checks)
|
|
62
|
+
3. Local validation before creating PR
|
|
63
|
+
4. Detecting stale/abandoned specs
|
|
64
|
+
5. Enforcing team conventions (required fields, valid values)
|
|
65
|
+
6. Quality gates for spec completion
|
|
66
|
+
7. **Detecting corrupted specs from failed edits**
|
|
67
|
+
8. **Validating sub-spec organization per spec 012**
|
|
68
|
+
|
|
69
|
+
**What Success Looks Like:**
|
|
70
|
+
```bash
|
|
71
|
+
$ lean-spec validate --all
|
|
72
|
+
Validating specs...
|
|
73
|
+
|
|
74
|
+
Line Count:
|
|
75
|
+
✓ 043-official-launch-02 (387 lines)
|
|
76
|
+
⚠ 048-spec-complexity-analysis (356 lines - approaching limit)
|
|
77
|
+
✗ 018-spec-validation (455 lines - exceeds limit!)
|
|
78
|
+
→ Consider splitting into sub-specs (see spec 012)
|
|
79
|
+
|
|
80
|
+
Frontmatter:
|
|
81
|
+
✗ 1 spec has invalid frontmatter:
|
|
82
|
+
- specs/043-official-launch-02/README.md
|
|
83
|
+
• Invalid status: "wip" (expected: planned, in-progress, complete, archived)
|
|
84
|
+
|
|
85
|
+
Structure:
|
|
86
|
+
✓ All specs have valid structure
|
|
87
|
+
|
|
88
|
+
Sub-Specs:
|
|
89
|
+
⚠ 1 spec has warnings:
|
|
90
|
+
- specs/018-spec-validation/README.md
|
|
91
|
+
⚠ Sub-spec TESTING.md (421 lines) exceeds 400 line limit
|
|
92
|
+
⚠ Orphaned sub-spec: DEPRECATED.md (not linked from README.md)
|
|
93
|
+
|
|
94
|
+
Corruption:
|
|
95
|
+
✓ All 25 spec(s) passed
|
|
96
|
+
|
|
97
|
+
Results: 25 specs validated, 5 error(s), 6 warning(s)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Recent Improvements (2025-11-05):**
|
|
101
|
+
- ✅ Fixed duplicate detection bug: sliding window was reporting adjacent lines as duplicates
|
|
102
|
+
- ✅ Improved thresholds: 8 lines / 200 chars (was 5/100) for better signal-to-noise
|
|
103
|
+
- ✅ Code blocks now included in duplicate detection (catches actual copy-paste errors)
|
|
104
|
+
- ✅ Removed JSON/YAML validation (code examples show invalid syntax)
|
|
105
|
+
- ✅ Smarter formatting checks: exclude inline code and list markers
|
|
106
|
+
- 📉 Result: Zero false positives, catches only real corruption
|
|
107
|
+
|
|
108
|
+
## Design
|
|
109
|
+
|
|
110
|
+
This spec has been split into focused sub-documents for clarity and maintainability.
|
|
111
|
+
|
|
112
|
+
### Core Documents
|
|
113
|
+
|
|
114
|
+
📋 **[VALIDATION-RULES.md](./VALIDATION-RULES.md)** - What gets validated
|
|
115
|
+
- Frontmatter validation rules
|
|
116
|
+
- Structure validation rules
|
|
117
|
+
- Content validation rules
|
|
118
|
+
- Corruption detection rules
|
|
119
|
+
- Staleness detection rules
|
|
120
|
+
- Auto-fix capabilities
|
|
121
|
+
|
|
122
|
+
🔧 **[CLI-DESIGN.md](./CLI-DESIGN.md)** - Command interface
|
|
123
|
+
- Command syntax and flags
|
|
124
|
+
- Output formats (console, JSON)
|
|
125
|
+
- Backwards compatibility strategy
|
|
126
|
+
- Exit codes
|
|
127
|
+
- CI/CD integration examples
|
|
128
|
+
|
|
129
|
+
⚙️ **[CONFIGURATION.md](./CONFIGURATION.md)** - Configuration schema
|
|
130
|
+
- Complete config options
|
|
131
|
+
- Rule customization
|
|
132
|
+
- Template-specific rules
|
|
133
|
+
- Default configuration
|
|
134
|
+
- Configuration examples
|
|
135
|
+
|
|
136
|
+
📝 **[CONFIGURATION-EXAMPLES.md](./CONFIGURATION-EXAMPLES.md)** - Real-world configuration examples and use cases
|
|
137
|
+
|
|
138
|
+
🗺️ **[IMPLEMENTATION.md](./IMPLEMENTATION.md)** - Implementation plan
|
|
139
|
+
- 8-phase implementation plan
|
|
140
|
+
- Priority and scope decisions
|
|
141
|
+
- Launch strategy (v0.2.0 vs v0.3.0)
|
|
142
|
+
- Dependencies and risks
|
|
143
|
+
- Migration path
|
|
144
|
+
|
|
145
|
+
✅ **[TESTING.md](./TESTING.md)** - Test strategy
|
|
146
|
+
- Test categories and coverage
|
|
147
|
+
- Integration tests
|
|
148
|
+
- Performance tests
|
|
149
|
+
- Manual testing checklist
|
|
150
|
+
|
|
151
|
+
## Design Decision
|
|
152
|
+
|
|
153
|
+
**Implementation Note:** The original design proposed expanding `lean-spec check` into a unified validation command. However, the implementation created a separate `lean-spec validate` command instead, keeping both commands focused:
|
|
154
|
+
|
|
155
|
+
- **`lean-spec check`** - Fast sequence conflict detection
|
|
156
|
+
- **`lean-spec validate`** - Comprehensive quality validation
|
|
157
|
+
|
|
158
|
+
**Rationale for Separate Commands:**
|
|
159
|
+
|
|
160
|
+
1. **Clear separation of concerns:** Sequence checking is fast and targeted; validation is comprehensive
|
|
161
|
+
2. **Performance:** Users can run quick checks without full validation overhead
|
|
162
|
+
3. **Backwards compatible:** Existing `lean-spec check` behavior unchanged
|
|
163
|
+
4. **Incremental adoption:** Can add validation rules without affecting check command
|
|
164
|
+
5. **Clearer intent:** `validate` explicitly signals quality checking
|
|
165
|
+
|
|
166
|
+
**Trade-offs:**
|
|
167
|
+
- Two commands to remember (but both are intuitive)
|
|
168
|
+
- More CLI surface area
|
|
169
|
+
- Better performance and flexibility
|
|
170
|
+
|
|
171
|
+
## Evolution
|
|
172
|
+
|
|
173
|
+
| Version | Commands Available |
|
|
174
|
+
|---------|--------------------|
|
|
175
|
+
| v0.1.0 | `lean-spec check` (sequence conflicts only) |
|
|
176
|
+
| v0.2.0+ | `lean-spec check` (sequences) + `lean-spec validate` (line counts) |
|
|
177
|
+
| v0.3.0+ | Both commands with comprehensive validation rules |
|
|
178
|
+
|
|
179
|
+
## Launch Strategy
|
|
180
|
+
|
|
181
|
+
**v0.2.0 Scope (Current):**
|
|
182
|
+
- ✅ `lean-spec check` for sequence conflicts
|
|
183
|
+
- ✅ `lean-spec validate` with basic framework and line count validation
|
|
184
|
+
- ⏳ Expand validation rules in upcoming phases
|
|
185
|
+
|
|
186
|
+
**v0.3.0 Scope:**
|
|
187
|
+
- **MUST HAVE:** Framework + frontmatter + structure validation
|
|
188
|
+
- **HIGHLY RECOMMENDED:** Corruption detection (addresses real pain point)
|
|
189
|
+
- **SHOULD HAVE:** Auto-fix capability
|
|
190
|
+
- **NICE TO HAVE:** Content and staleness validation
|
|
191
|
+
|
|
192
|
+
**Post-v0.3.0:**
|
|
193
|
+
- Advanced features based on user feedback
|
|
194
|
+
- Custom validation rules
|
|
195
|
+
- Performance optimizations
|
|
196
|
+
|
|
197
|
+
## Implementation Status
|
|
198
|
+
|
|
199
|
+
See [IMPLEMENTATION.md](./IMPLEMENTATION.md) for detailed plan.
|
|
200
|
+
|
|
201
|
+
**Status:** ✅ COMPLETE for v0.2.0 launch
|
|
202
|
+
|
|
203
|
+
**✅ Completed (Phases 1a, 1b, 2, 3, 3.5):**
|
|
204
|
+
- ✅ Validation framework architecture
|
|
205
|
+
- ✅ **Phase 1a:** `LineCountValidator` with warning/error thresholds (300 line warning, 400 line error)
|
|
206
|
+
- ✅ **Phase 1a:** `lean-spec validate` command with `--max-lines` flag
|
|
207
|
+
- ✅ **Phase 1b:** `FrontmatterValidator` for comprehensive frontmatter validation
|
|
208
|
+
- Required fields (status, created)
|
|
209
|
+
- Valid status/priority values
|
|
210
|
+
- Date format validation (ISO 8601)
|
|
211
|
+
- Tags format validation
|
|
212
|
+
- ✅ **Phase 2:** `StructureValidator` for spec structure validation
|
|
213
|
+
- H1 title presence
|
|
214
|
+
- Required sections (Overview, Design)
|
|
215
|
+
- Empty section detection (with subsection handling)
|
|
216
|
+
- Duplicate section header detection
|
|
217
|
+
- ✅ **Phase 3:** `CorruptionValidator` for file corruption detection
|
|
218
|
+
- Unclosed code block detection (visible syntax highlighting issues)
|
|
219
|
+
- Unclosed markdown formatting (bold, italic) in actual content
|
|
220
|
+
- Duplicate content block detection with improved tuning (8 lines, 200 chars)
|
|
221
|
+
- **Code blocks included** in duplicate detection (catches real copy-paste errors)
|
|
222
|
+
- **Bug fix:** Fixed sliding window algorithm reporting adjacent lines
|
|
223
|
+
- **Removed JSON/YAML validation** (examples show invalid syntax intentionally)
|
|
224
|
+
- Code block exclusion for all formatting checks
|
|
225
|
+
- Inline code and list marker exclusion
|
|
226
|
+
- Duplicate detection tuning: 3/50 → 5/100 (reduced false positives)
|
|
227
|
+
- Removed noisy checks (JSON/YAML, table/list validation)
|
|
228
|
+
- **Bug fix:** Fixed sliding window algorithm causing adjacent line false positives
|
|
229
|
+
- **Threshold increase:** 5/100 → 8/200 (block size/min chars) for less sensitivity
|
|
230
|
+
- **Reverted code block filtering:** Now includes code blocks in duplicate detection
|
|
231
|
+
- ✅ **Phase 3.5:** `SubSpecValidator` for sub-spec file validation
|
|
232
|
+
- Sub-spec naming conventions (uppercase .md files)
|
|
233
|
+
- README.md references all sub-specs (orphan detection)
|
|
234
|
+
- Line count validation per sub-spec file (<400 lines)
|
|
235
|
+
- Cross-document reference validation
|
|
236
|
+
- Found real issues: 3 sub-specs exceeding limits in 2 specs
|
|
237
|
+
- ✅ **370 total tests passing** (16 sub-spec + 354 existing)
|
|
238
|
+
- ✅ Documentation and CLI integration
|
|
239
|
+
- ✅ Tested with real repository specs
|
|
240
|
+
|
|
241
|
+
**📊 Current Validation Results (2025-11-05):**
|
|
242
|
+
```bash
|
|
243
|
+
$ lean-spec validate
|
|
244
|
+
Results: 25 specs validated, 5 error(s), 6 warning(s)
|
|
245
|
+
|
|
246
|
+
Errors found:
|
|
247
|
+
- Line count: 3 specs exceed 400 lines (048, 046, 045)
|
|
248
|
+
- Sub-specs: 3 sub-spec files exceed 400 lines (049: 2 files, 018: 1 file)
|
|
249
|
+
- Corruption: ✅ 0 errors (bug fixed, thresholds tuned!)
|
|
250
|
+
|
|
251
|
+
Warnings:
|
|
252
|
+
- Line count: 6 specs between 300-400 lines (approaching limit)
|
|
253
|
+
- Corruption: ✅ 0 warnings (improved from 31 false positives!)
|
|
254
|
+
|
|
255
|
+
All specs: ✅ Frontmatter passed, ✅ Structure passed, ✅ Sub-spec validation working
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**✨ v0.2.0 Scope Complete:**
|
|
259
|
+
Core validation is complete and working! Phases 1-3.5 deliver the essential quality checks including sub-spec validation. Additional phases (content validation, staleness detection, auto-fix) deferred to v0.3.0 based on user feedback.
|
|
260
|
+
|
|
261
|
+
## Quick Links
|
|
262
|
+
|
|
263
|
+
- **Validation Details:** [VALIDATION-RULES.md](./VALIDATION-RULES.md)
|
|
264
|
+
- **CLI Reference:** [CLI-DESIGN.md](./CLI-DESIGN.md)
|
|
265
|
+
- **Configuration:** [CONFIGURATION.md](./CONFIGURATION.md)
|
|
266
|
+
- **Implementation:** [IMPLEMENTATION.md](./IMPLEMENTATION.md)
|
|
267
|
+
- **Testing:** [TESTING.md](./TESTING.md)
|
|
268
|
+
|
|
269
|
+
## Notes
|
|
270
|
+
|
|
271
|
+
**Why This Matters:**
|
|
272
|
+
|
|
273
|
+
This addresses real pain points we've experienced:
|
|
274
|
+
- Spec corruption from failed AI edits
|
|
275
|
+
- Invalid frontmatter causing issues
|
|
276
|
+
- No way to enforce quality standards
|
|
277
|
+
- Manual validation is time-consuming
|
|
278
|
+
|
|
279
|
+
**Performance Goals:**
|
|
280
|
+
- < 1s for 100 specs
|
|
281
|
+
- Parallel checking
|
|
282
|
+
- Incremental mode for auto-check
|
|
283
|
+
- Caching for repeated checks
|
|
284
|
+
|
|
285
|
+
**Integration:**
|
|
286
|
+
```bash
|
|
287
|
+
# CI/CD - Quick sequence check
|
|
288
|
+
lean-spec check
|
|
289
|
+
|
|
290
|
+
# CI/CD - Comprehensive validation
|
|
291
|
+
lean-spec validate --all --format=json
|
|
292
|
+
|
|
293
|
+
# Pre-commit hook - Fast validation
|
|
294
|
+
lean-spec validate --max-lines 400
|
|
295
|
+
|
|
296
|
+
# Manual comprehensive check
|
|
297
|
+
lean-spec validate --all --fix
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**References:**
|
|
301
|
+
- Markdownlint: Markdown linting tool (inspiration)
|
|
302
|
+
- JSON Schema: Validation schema standard
|
|
303
|
+
- YAML Lint: YAML validation patterns
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
# Testing Strategy
|
|
2
|
+
|
|
3
|
+
Comprehensive test plan for the `lean-spec validate` command.
|
|
4
|
+
|
|
5
|
+
**Note:** This spec originally proposed expanding `lean-spec check`, but the implementation created `lean-spec validate` as a separate command.
|
|
6
|
+
|
|
7
|
+
## Test Categories
|
|
8
|
+
|
|
9
|
+
### 1. Frontmatter Validation Tests ✅
|
|
10
|
+
|
|
11
|
+
**Status: Phase 1b Complete - 27 tests passing**
|
|
12
|
+
|
|
13
|
+
**Missing Required Fields:**
|
|
14
|
+
- [x] Detects missing `status` field ✅
|
|
15
|
+
- [x] Detects missing `created` field ✅
|
|
16
|
+
- [x] Passes when all required fields present ✅
|
|
17
|
+
- [x] Detects when no frontmatter exists ✅
|
|
18
|
+
- [ ] Detects missing custom required fields (if configured) - future
|
|
19
|
+
|
|
20
|
+
**Invalid Status Values:**
|
|
21
|
+
- [x] Detects invalid status "wip" ✅
|
|
22
|
+
- [x] Detects invalid status values (any non-standard) ✅
|
|
23
|
+
- [x] Passes valid status "planned" ✅
|
|
24
|
+
- [x] Passes valid status "in-progress" ✅
|
|
25
|
+
- [x] Passes valid status "complete" ✅
|
|
26
|
+
- [x] Passes valid status "archived" ✅
|
|
27
|
+
- [x] Coerces non-string status to string and validates ✅
|
|
28
|
+
|
|
29
|
+
**Invalid Priority Values:**
|
|
30
|
+
- [x] Detects invalid priority "urgent" ✅
|
|
31
|
+
- [x] Detects invalid priority values (any non-standard) ✅
|
|
32
|
+
- [x] Passes valid priority "low" ✅
|
|
33
|
+
- [x] Passes valid priority "medium" ✅
|
|
34
|
+
- [x] Passes valid priority "high" ✅
|
|
35
|
+
- [x] Passes valid priority "critical" ✅
|
|
36
|
+
- [x] Passes when priority is optional and missing ✅
|
|
37
|
+
- [x] Coerces non-string priority to string and validates ✅
|
|
38
|
+
|
|
39
|
+
**Date Format Validation:**
|
|
40
|
+
- [x] Detects invalid date formats (11/05/2025, etc.) ✅
|
|
41
|
+
- [x] Detects invalid date values (2025-99-99) ✅
|
|
42
|
+
- [x] Passes valid date "2025-11-04" ✅
|
|
43
|
+
- [x] Passes valid ISO timestamps (with timezone, milliseconds) ✅
|
|
44
|
+
- [x] Warns for invalid optional date fields (e.g., updated) ✅
|
|
45
|
+
- [x] Fails for non-string/non-date created field ✅
|
|
46
|
+
|
|
47
|
+
**Tags Validation:**
|
|
48
|
+
- [x] Detects tags as string instead of array ✅
|
|
49
|
+
- [x] Accepts tags with various types (YAML parsing) ✅
|
|
50
|
+
- [x] Passes valid tags array ✅
|
|
51
|
+
- [x] Passes empty tags array ✅
|
|
52
|
+
|
|
53
|
+
**YAML Parsing:**
|
|
54
|
+
- [x] Detects malformed YAML frontmatter ✅
|
|
55
|
+
|
|
56
|
+
**Custom Configuration:**
|
|
57
|
+
- [x] Respects custom valid statuses (configurable) ✅
|
|
58
|
+
- [x] Validator metadata (name, description) ✅
|
|
59
|
+
|
|
60
|
+
### 2. Structure Validation Tests
|
|
61
|
+
|
|
62
|
+
**File Requirements:**
|
|
63
|
+
- [ ] Detects missing README.md
|
|
64
|
+
- [ ] Detects invalid YAML frontmatter syntax
|
|
65
|
+
- [ ] Detects missing title (H1 heading)
|
|
66
|
+
- [ ] Passes spec with valid structure
|
|
67
|
+
|
|
68
|
+
**Section Requirements:**
|
|
69
|
+
- [ ] Detects missing required section "Overview"
|
|
70
|
+
- [ ] Detects missing required section "Design"
|
|
71
|
+
- [ ] Detects missing required section "Plan"
|
|
72
|
+
- [ ] Passes when all required sections present
|
|
73
|
+
- [ ] Template-specific section validation
|
|
74
|
+
|
|
75
|
+
**Empty Sections:**
|
|
76
|
+
- [ ] Detects empty required sections (when configured)
|
|
77
|
+
- [ ] Passes sections with only comments (if allowed)
|
|
78
|
+
- [ ] Passes sections with content
|
|
79
|
+
|
|
80
|
+
**Duplicate Sections:**
|
|
81
|
+
- [ ] Detects duplicate "## Plan" sections
|
|
82
|
+
- [ ] Detects duplicate "## Test" sections
|
|
83
|
+
- [ ] Allows same section name at different levels
|
|
84
|
+
- [ ] Passes unique sections
|
|
85
|
+
|
|
86
|
+
### 3. Corruption Detection Tests
|
|
87
|
+
|
|
88
|
+
**Duplicate Sections:**
|
|
89
|
+
- [ ] Detects exact duplicate sections
|
|
90
|
+
- [ ] Detects sections with same name at same level
|
|
91
|
+
- [ ] Reports line numbers of duplicates
|
|
92
|
+
- [ ] Passes specs with unique sections
|
|
93
|
+
|
|
94
|
+
**Code Block Validation:**
|
|
95
|
+
- [ ] Detects unclosed code block (missing closing ```)
|
|
96
|
+
- [ ] Detects extra closing ``` without opening
|
|
97
|
+
- [ ] Detects mismatched code fence lengths
|
|
98
|
+
- [ ] Passes properly closed code blocks
|
|
99
|
+
|
|
100
|
+
**JSON/YAML Validation:**
|
|
101
|
+
- [ ] Detects incomplete JSON in code blocks
|
|
102
|
+
- [ ] Detects invalid JSON syntax
|
|
103
|
+
- [ ] Detects incomplete YAML in frontmatter
|
|
104
|
+
- [ ] Detects invalid YAML syntax
|
|
105
|
+
- [ ] Passes valid JSON blocks
|
|
106
|
+
- [ ] Passes valid YAML blocks
|
|
107
|
+
|
|
108
|
+
**Content Fragments:**
|
|
109
|
+
- [ ] Detects duplicated content blocks
|
|
110
|
+
- [ ] Detects partial duplicates (merge artifacts)
|
|
111
|
+
- [ ] Detects remnants from failed edits
|
|
112
|
+
- [ ] Passes unique content
|
|
113
|
+
|
|
114
|
+
**Markdown Structure:**
|
|
115
|
+
- [ ] Detects malformed lists
|
|
116
|
+
- [ ] Detects broken tables
|
|
117
|
+
- [ ] Detects unclosed formatting (bold, italic)
|
|
118
|
+
- [ ] Passes valid markdown
|
|
119
|
+
|
|
120
|
+
### 4. Content Validation Tests
|
|
121
|
+
|
|
122
|
+
**Minimum Length:**
|
|
123
|
+
- [ ] Detects specs below minimum length
|
|
124
|
+
- [ ] Passes specs above minimum length
|
|
125
|
+
- [ ] Respects configured minimum
|
|
126
|
+
|
|
127
|
+
**TODO/FIXME Detection:**
|
|
128
|
+
- [ ] Detects TODO in complete specs
|
|
129
|
+
- [ ] Detects FIXME in complete specs
|
|
130
|
+
- [ ] Allows TODO in non-complete specs
|
|
131
|
+
- [ ] Passes complete specs without TODO
|
|
132
|
+
|
|
133
|
+
**Link Validation:**
|
|
134
|
+
- [ ] Detects broken internal links
|
|
135
|
+
- [ ] Detects links to non-existent specs
|
|
136
|
+
- [ ] Passes valid internal links
|
|
137
|
+
- [ ] Passes external links (not validated)
|
|
138
|
+
|
|
139
|
+
**Placeholder Text:**
|
|
140
|
+
- [ ] Detects common placeholder patterns
|
|
141
|
+
- [ ] Passes real content
|
|
142
|
+
|
|
143
|
+
### 5. Staleness Tests
|
|
144
|
+
|
|
145
|
+
**In-Progress Specs:**
|
|
146
|
+
- [ ] Warns on in-progress spec > 30 days old
|
|
147
|
+
- [ ] No warning for recent in-progress specs
|
|
148
|
+
- [ ] Respects configured threshold
|
|
149
|
+
|
|
150
|
+
**No Updates:**
|
|
151
|
+
- [ ] Warns on spec with no updates > 90 days
|
|
152
|
+
- [ ] No warning for recently updated specs
|
|
153
|
+
- [ ] Uses git history when available
|
|
154
|
+
- [ ] Falls back to file mtime
|
|
155
|
+
|
|
156
|
+
**Planned Specs:**
|
|
157
|
+
- [ ] Warns on planned spec > 60 days old
|
|
158
|
+
- [ ] No warning for recent planned specs
|
|
159
|
+
|
|
160
|
+
**Archived Specs:**
|
|
161
|
+
- [ ] No staleness warnings for archived specs
|
|
162
|
+
|
|
163
|
+
### 6. Auto-Fix Tests
|
|
164
|
+
|
|
165
|
+
**Frontmatter Fixes:**
|
|
166
|
+
- [ ] Adds missing `status` field with default
|
|
167
|
+
- [ ] Adds missing `created` field with current date
|
|
168
|
+
- [ ] Formats dates to ISO 8601
|
|
169
|
+
- [ ] Sorts frontmatter fields alphabetically
|
|
170
|
+
- [ ] Updates visual badges from frontmatter
|
|
171
|
+
|
|
172
|
+
**Structure Fixes:**
|
|
173
|
+
- [ ] Adds missing required sections as comments
|
|
174
|
+
- [ ] Removes duplicate sections (keeps first)
|
|
175
|
+
|
|
176
|
+
**Corruption Fixes:**
|
|
177
|
+
- [ ] Closes unclosed code blocks
|
|
178
|
+
- [ ] Removes exact duplicate sections
|
|
179
|
+
|
|
180
|
+
**Non-Fixable Issues:**
|
|
181
|
+
- [ ] Reports invalid status (requires manual fix)
|
|
182
|
+
- [ ] Reports empty sections (requires content)
|
|
183
|
+
- [ ] Reports broken links (requires investigation)
|
|
184
|
+
|
|
185
|
+
**Fix Reporting:**
|
|
186
|
+
- [ ] Reports what was fixed
|
|
187
|
+
- [ ] Reports what couldn't be fixed
|
|
188
|
+
- [ ] Doesn't break valid specs
|
|
189
|
+
- [ ] Maintains spec readability
|
|
190
|
+
|
|
191
|
+
### 7. Integration Tests
|
|
192
|
+
|
|
193
|
+
**Multiple Specs:**
|
|
194
|
+
- [ ] Validates all specs in project
|
|
195
|
+
- [ ] Reports aggregate results
|
|
196
|
+
- [ ] Handles large number of specs (100+)
|
|
197
|
+
|
|
198
|
+
**Filtering:**
|
|
199
|
+
- [ ] Filters by status work correctly
|
|
200
|
+
- [ ] Filters by tag work correctly
|
|
201
|
+
- [ ] Filters by priority work correctly
|
|
202
|
+
- [ ] Path pattern filtering works
|
|
203
|
+
|
|
204
|
+
**Output Formats:**
|
|
205
|
+
- [ ] Console output is readable
|
|
206
|
+
- [ ] JSON output is valid
|
|
207
|
+
- [ ] Quiet mode produces minimal output
|
|
208
|
+
- [ ] Verbose mode includes details
|
|
209
|
+
|
|
210
|
+
**Exit Codes:**
|
|
211
|
+
- [ ] Returns 0 when all checks pass
|
|
212
|
+
- [ ] Returns 1 when errors found
|
|
213
|
+
- [ ] Returns 2 when warnings in strict mode
|
|
214
|
+
- [ ] Returns 3 on command error
|
|
215
|
+
|
|
216
|
+
**Configuration:**
|
|
217
|
+
- [ ] Respects custom config
|
|
218
|
+
- [ ] Falls back to defaults
|
|
219
|
+
- [ ] Command-line flags override config
|
|
220
|
+
- [ ] Template-specific rules work
|
|
221
|
+
|
|
222
|
+
**Backwards Compatibility:**
|
|
223
|
+
- [ ] `lean-spec check` (sequence conflicts) behavior unchanged
|
|
224
|
+
- [ ] `lean-spec validate` doesn't interfere with check command
|
|
225
|
+
- [ ] Exit codes follow standard pattern
|
|
226
|
+
- [ ] Output format is consistent
|
|
227
|
+
|
|
228
|
+
### 8. Performance Tests
|
|
229
|
+
|
|
230
|
+
**Speed:**
|
|
231
|
+
- [ ] Validates 10 specs in < 100ms
|
|
232
|
+
- [ ] Validates 100 specs in < 1s
|
|
233
|
+
- [ ] Parallel validation improves performance
|
|
234
|
+
|
|
235
|
+
**Memory:**
|
|
236
|
+
- [ ] Memory usage stays reasonable
|
|
237
|
+
- [ ] No memory leaks with many specs
|
|
238
|
+
|
|
239
|
+
**Caching:**
|
|
240
|
+
- [ ] Cached results speed up repeated checks
|
|
241
|
+
- [ ] Cache invalidation works correctly
|
|
242
|
+
|
|
243
|
+
### 9. Edge Cases
|
|
244
|
+
|
|
245
|
+
**Empty Specs:**
|
|
246
|
+
- [ ] Handles specs with only frontmatter
|
|
247
|
+
- [ ] Handles completely empty files
|
|
248
|
+
|
|
249
|
+
**Large Specs:**
|
|
250
|
+
- [ ] Handles specs > 1000 lines
|
|
251
|
+
- [ ] Handles specs with > 100 sections
|
|
252
|
+
- [ ] Performance doesn't degrade
|
|
253
|
+
|
|
254
|
+
**Special Characters:**
|
|
255
|
+
- [ ] Handles Unicode in frontmatter
|
|
256
|
+
- [ ] Handles special characters in content
|
|
257
|
+
- [ ] Handles emoji in titles
|
|
258
|
+
|
|
259
|
+
**Symlinks:**
|
|
260
|
+
- [ ] Follows symlinks correctly
|
|
261
|
+
- [ ] Detects circular symlinks
|
|
262
|
+
|
|
263
|
+
**Sub-Spec Files:**
|
|
264
|
+
- [ ] Validates specs with sub-files
|
|
265
|
+
- [ ] Checks README.md in multi-file specs
|
|
266
|
+
- [ ] Doesn't validate sub-files as specs
|
|
267
|
+
|
|
268
|
+
## Test Organization
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
src/
|
|
272
|
+
commands/
|
|
273
|
+
check.test.ts # Command-level tests
|
|
274
|
+
validators/
|
|
275
|
+
frontmatter.test.ts # Frontmatter validator tests
|
|
276
|
+
structure.test.ts # Structure validator tests
|
|
277
|
+
corruption.test.ts # Corruption detector tests
|
|
278
|
+
content.test.ts # Content validator tests
|
|
279
|
+
staleness.test.ts # Staleness detector tests
|
|
280
|
+
integration/
|
|
281
|
+
check-integration.test.ts # End-to-end tests
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Test Data
|
|
285
|
+
|
|
286
|
+
```
|
|
287
|
+
test-fixtures/
|
|
288
|
+
valid/
|
|
289
|
+
001-valid-spec/
|
|
290
|
+
README.md # Completely valid spec
|
|
291
|
+
invalid-frontmatter/
|
|
292
|
+
002-missing-status/
|
|
293
|
+
README.md # Missing status field
|
|
294
|
+
003-invalid-status/
|
|
295
|
+
README.md # Invalid status value
|
|
296
|
+
invalid-structure/
|
|
297
|
+
004-missing-sections/
|
|
298
|
+
README.md # Missing required sections
|
|
299
|
+
005-duplicate-sections/
|
|
300
|
+
README.md # Duplicate section headers
|
|
301
|
+
corrupted/
|
|
302
|
+
006-unclosed-code-block/
|
|
303
|
+
README.md # Unclosed code block
|
|
304
|
+
007-invalid-json/
|
|
305
|
+
README.md # Malformed JSON in code block
|
|
306
|
+
008-duplicate-content/
|
|
307
|
+
README.md # Duplicated content
|
|
308
|
+
stale/
|
|
309
|
+
009-old-in-progress/
|
|
310
|
+
README.md # Old in-progress spec
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
## Continuous Testing
|
|
314
|
+
|
|
315
|
+
**Pre-Commit:**
|
|
316
|
+
```bash
|
|
317
|
+
npm test # Run all tests
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**CI/CD:**
|
|
321
|
+
```yaml
|
|
322
|
+
- name: Run tests
|
|
323
|
+
run: npm test
|
|
324
|
+
|
|
325
|
+
- name: Check coverage
|
|
326
|
+
run: npm run test:coverage
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**Test Coverage Goals:**
|
|
330
|
+
- Overall: >80%
|
|
331
|
+
- Validators: >90%
|
|
332
|
+
- Critical paths: 100%
|
|
333
|
+
|
|
334
|
+
## Manual Testing Checklist
|
|
335
|
+
|
|
336
|
+
**Before Release:**
|
|
337
|
+
- [ ] Test on real project (this repo)
|
|
338
|
+
- [ ] Test backwards compatibility
|
|
339
|
+
- [ ] Test performance with 100+ specs
|
|
340
|
+
- [ ] Test all output formats
|
|
341
|
+
- [ ] Test all command-line flags
|
|
342
|
+
- [ ] Test configuration options
|
|
343
|
+
- [ ] Test auto-fix on corrupted specs
|
|
344
|
+
- [ ] Test CI/CD integration
|
|
345
|
+
- [ ] Test pre-commit hook
|
|
346
|
+
|
|
347
|
+
**Dogfooding:**
|
|
348
|
+
- [ ] Use comprehensive checking on lean-spec itself
|
|
349
|
+
- [ ] Fix any issues found
|
|
350
|
+
- [ ] Verify no false positives
|
|
351
|
+
- [ ] Collect user feedback
|
|
352
|
+
|
|
353
|
+
## Test Automation
|
|
354
|
+
|
|
355
|
+
**Snapshot Testing:**
|
|
356
|
+
- Output format snapshots
|
|
357
|
+
- JSON structure snapshots
|
|
358
|
+
- Error message snapshots
|
|
359
|
+
|
|
360
|
+
**Property-Based Testing:**
|
|
361
|
+
- Generate random specs
|
|
362
|
+
- Verify validators don't crash
|
|
363
|
+
- Verify auto-fix doesn't corrupt
|
|
364
|
+
|
|
365
|
+
**Regression Testing:**
|
|
366
|
+
- Save examples of past bugs
|
|
367
|
+
- Ensure fixes remain effective
|
|
368
|
+
- Prevent regressions
|