@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,382 @@
|
|
|
1
|
+
# Design: Unified Analytics & Dashboard
|
|
2
|
+
|
|
3
|
+
## Architecture
|
|
4
|
+
|
|
5
|
+
### File Structure
|
|
6
|
+
```
|
|
7
|
+
src/commands/
|
|
8
|
+
├── dashboard.ts # NEW: Comprehensive overview
|
|
9
|
+
├── stats.ts # ENHANCED: Merge timeline logic
|
|
10
|
+
├── list.ts # KEEP: Detailed browsing
|
|
11
|
+
├── board.ts # KEEP: Kanban view
|
|
12
|
+
├── gantt.ts # KEEP: Timeline planning
|
|
13
|
+
├── deps.ts # KEEP: Dependencies
|
|
14
|
+
└── timeline.ts # DEPRECATE → merge into stats.ts
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Code Reuse
|
|
18
|
+
- Extract shared visualization helpers to `utils/vis.ts`:
|
|
19
|
+
- `createBar(count, max, width, char)` - reusable bar charts
|
|
20
|
+
- `formatMetric(label, value, color)` - consistent metric display
|
|
21
|
+
- `renderSection(title, content)` - section formatting
|
|
22
|
+
- Dashboard composes high-level summaries from other commands
|
|
23
|
+
- Stats command owns all analytics logic (including timeline)
|
|
24
|
+
|
|
25
|
+
### Performance
|
|
26
|
+
- Dashboard: Single `loadAllSpecs()` for all sections
|
|
27
|
+
- Smart caching between dashboard and other commands
|
|
28
|
+
- Lazy rendering (skip empty sections)
|
|
29
|
+
- Target: < 300ms for 100 specs
|
|
30
|
+
|
|
31
|
+
## Part 0: Timestamp Tracking (Foundation)
|
|
32
|
+
|
|
33
|
+
### Problem
|
|
34
|
+
Current tracking only stores dates (YYYY-MM-DD), not timestamps:
|
|
35
|
+
- Can't calculate precise cycle times
|
|
36
|
+
- Can't distinguish specs completed same day
|
|
37
|
+
- Loses granularity for velocity analysis
|
|
38
|
+
|
|
39
|
+
### Solution
|
|
40
|
+
Add ISO 8601 timestamp fields alongside date fields
|
|
41
|
+
|
|
42
|
+
### Frontmatter Schema Update
|
|
43
|
+
```yaml
|
|
44
|
+
---
|
|
45
|
+
status: in-progress
|
|
46
|
+
created: '2025-11-04' # Keep for human readability
|
|
47
|
+
created_at: '2025-11-04T14:30:00Z' # NEW: Precise timestamp
|
|
48
|
+
updated: '2025-11-04' # Keep for human readability
|
|
49
|
+
updated_at: '2025-11-04T16:45:00Z' # NEW: Precise timestamp
|
|
50
|
+
completed_at: '2025-11-05T10:15:00Z' # NEW: When status changed to complete
|
|
51
|
+
|
|
52
|
+
# Status transition history (optional, for advanced velocity)
|
|
53
|
+
transitions:
|
|
54
|
+
- status: planned
|
|
55
|
+
at: '2025-11-04T14:30:00Z'
|
|
56
|
+
- status: in-progress
|
|
57
|
+
at: '2025-11-04T15:00:00Z'
|
|
58
|
+
- status: complete
|
|
59
|
+
at: '2025-11-05T10:15:00Z'
|
|
60
|
+
---
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Migration Strategy
|
|
64
|
+
- Add new `*_at` fields alongside existing date fields
|
|
65
|
+
- Auto-generate timestamps on spec creation/updates
|
|
66
|
+
- Existing specs: infer timestamps from dates (use midnight UTC)
|
|
67
|
+
- Keep date fields for backward compatibility
|
|
68
|
+
- Make timestamps optional (graceful degradation)
|
|
69
|
+
|
|
70
|
+
### Implementation
|
|
71
|
+
```typescript
|
|
72
|
+
// In frontmatter.ts
|
|
73
|
+
export interface SpecFrontmatter {
|
|
74
|
+
// Existing date fields (keep for compatibility)
|
|
75
|
+
created: string; // YYYY-MM-DD
|
|
76
|
+
updated?: string; // YYYY-MM-DD
|
|
77
|
+
completed?: string; // YYYY-MM-DD
|
|
78
|
+
|
|
79
|
+
// NEW: Precise timestamps
|
|
80
|
+
created_at?: string; // ISO 8601
|
|
81
|
+
updated_at?: string; // ISO 8601
|
|
82
|
+
completed_at?: string; // ISO 8601
|
|
83
|
+
|
|
84
|
+
// NEW: Status transition history (optional)
|
|
85
|
+
transitions?: Array<{
|
|
86
|
+
status: SpecStatus;
|
|
87
|
+
at: string; // ISO 8601
|
|
88
|
+
}>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Auto-generate timestamps on updates
|
|
92
|
+
export function enrichWithTimestamps(
|
|
93
|
+
data: SpecFrontmatter,
|
|
94
|
+
previousData?: SpecFrontmatter
|
|
95
|
+
): void {
|
|
96
|
+
const now = new Date().toISOString();
|
|
97
|
+
|
|
98
|
+
// Set created_at if missing
|
|
99
|
+
if (!data.created_at) {
|
|
100
|
+
data.created_at = data.created
|
|
101
|
+
? `${data.created}T00:00:00Z` // Infer from date
|
|
102
|
+
: now;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Update updated_at on any change
|
|
106
|
+
if (previousData) {
|
|
107
|
+
data.updated_at = now;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Set completed_at when status changes to complete
|
|
111
|
+
if (data.status === 'complete' &&
|
|
112
|
+
previousData?.status !== 'complete' &&
|
|
113
|
+
!data.completed_at) {
|
|
114
|
+
data.completed_at = now;
|
|
115
|
+
data.completed = new Date().toISOString().split('T')[0];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Track transition (optional)
|
|
119
|
+
if (previousData && data.status !== previousData.status) {
|
|
120
|
+
if (!data.transitions) data.transitions = [];
|
|
121
|
+
data.transitions.push({
|
|
122
|
+
status: data.status,
|
|
123
|
+
at: now
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Part 1: Unified Analytics Command
|
|
130
|
+
|
|
131
|
+
### Command Structure
|
|
132
|
+
Keep `lean-spec stats` (backward compatible), enhanced with velocity modes:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
lean-spec stats # Default: current stats (unchanged)
|
|
136
|
+
lean-spec stats --timeline # Add timeline section
|
|
137
|
+
lean-spec stats --history # Full historical view (current timeline command)
|
|
138
|
+
lean-spec stats --velocity # NEW: Cycle time & throughput analysis
|
|
139
|
+
lean-spec stats --all # Everything (stats + timeline + velocity)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Velocity Section Output
|
|
143
|
+
```
|
|
144
|
+
📊 Velocity Metrics (Last 30 Days)
|
|
145
|
+
|
|
146
|
+
Cycle Time (Created → Completed)
|
|
147
|
+
Average: 5.2 days ████████░░░░░░░░░░ (target: 7 days)
|
|
148
|
+
Median: 4.0 days
|
|
149
|
+
P50-P95: 2-12 days
|
|
150
|
+
|
|
151
|
+
Stage Duration
|
|
152
|
+
Planned: 2.1 days ████░░░░░░░░░░░░░░░░
|
|
153
|
+
In-Progress: 3.5 days ██████░░░░░░░░░░░░░░
|
|
154
|
+
|
|
155
|
+
Throughput
|
|
156
|
+
Last 7 days: 3 specs ████████████░░░░░░░░ (up from 2)
|
|
157
|
+
Last 30 days: 12 specs ████████████████████ (target: 10)
|
|
158
|
+
|
|
159
|
+
Work in Progress
|
|
160
|
+
Current WIP: 5 specs (recommended: < 5)
|
|
161
|
+
Average WIP: 4.2 specs
|
|
162
|
+
|
|
163
|
+
Velocity Trend
|
|
164
|
+
Week 1: ████░░ 2 specs
|
|
165
|
+
Week 2: ████░░ 2 specs
|
|
166
|
+
Week 3: ██████ 3 specs ↑ improving
|
|
167
|
+
Week 4: ██████ 3 specs
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Implementation Details
|
|
171
|
+
- Calculate cycle time: `completed_at - created_at`
|
|
172
|
+
- Track stage durations from transitions array
|
|
173
|
+
- Show percentiles (P50, P90, P95) for cycle time distribution
|
|
174
|
+
- Compare to targets (configurable in .lean-spec/config.json)
|
|
175
|
+
- Show trends (last 4 weeks)
|
|
176
|
+
|
|
177
|
+
## Part 2: Dashboard Command (NOT IMPLEMENTED)
|
|
178
|
+
|
|
179
|
+
> **Decision**: Dashboard command was not implemented. Enhanced `stats` and `board` commands provide the needed functionality without adding CLI complexity.
|
|
180
|
+
|
|
181
|
+
### Original Design (for reference):
|
|
182
|
+
|
|
183
|
+
### Command
|
|
184
|
+
`lean-spec` (no args) or `lean-spec dashboard`
|
|
185
|
+
|
|
186
|
+
### Purpose
|
|
187
|
+
Quick project health overview combining:
|
|
188
|
+
- Summary metrics (from stats)
|
|
189
|
+
- Key activity indicators (from timeline)
|
|
190
|
+
- Active work snapshot (from board)
|
|
191
|
+
- Smart insights (what needs attention)
|
|
192
|
+
|
|
193
|
+
### Dashboard Sections
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
╔══════════════════════════════════════════════════════════╗
|
|
197
|
+
║ LeanSpec Dashboard · lean-spec ║
|
|
198
|
+
╚══════════════════════════════════════════════════════════╝
|
|
199
|
+
|
|
200
|
+
📊 Project Health
|
|
201
|
+
Total: 42 specs · 15 in-progress · 20 complete · 5 planned · 2 archived
|
|
202
|
+
Priority: 🔴 2 critical · 🟠 5 high · 🟡 10 medium · 🟢 3 low
|
|
203
|
+
|
|
204
|
+
⚠️ Needs Attention
|
|
205
|
+
• 2 specs overdue (spec-001, spec-003)
|
|
206
|
+
• 3 critical priority specs still planned
|
|
207
|
+
|
|
208
|
+
📈 Recent Activity (Last 14 Days)
|
|
209
|
+
Created: ████████░░░░░░ 8 specs
|
|
210
|
+
Completed: ████░░░░░░░░░░ 4 specs
|
|
211
|
+
Velocity: 2.8 specs/week ↑ trending up
|
|
212
|
+
|
|
213
|
+
⏳ In Progress (5)
|
|
214
|
+
🔴 spec-042-mcp-error-handling @alice #bug #critical (3d)
|
|
215
|
+
🟠 spec-045-unified-dashboard @bob #ux #launch (2d)
|
|
216
|
+
🟡 spec-026-init-pattern @alice #feature (8d ⚠️ long)
|
|
217
|
+
|
|
218
|
+
🏷️ Top Tags
|
|
219
|
+
launch (12) · feature (8) · bug (5) · docs (4)
|
|
220
|
+
|
|
221
|
+
🚀 Velocity Summary
|
|
222
|
+
Avg Cycle Time: 5.2 days (target: 7d)
|
|
223
|
+
Throughput: 2.8 specs/week ↑
|
|
224
|
+
WIP: 5 specs (healthy)
|
|
225
|
+
|
|
226
|
+
─────────────────────────────────────────────────────────────
|
|
227
|
+
💡 Commands: lean-spec list | lean-spec board | lean-spec stats --velocity
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Smart Insights
|
|
231
|
+
- Show overdue specs first
|
|
232
|
+
- Highlight critical priority items
|
|
233
|
+
- Show specs assigned to user (if `--assignee` or git config)
|
|
234
|
+
- Suggest next actions
|
|
235
|
+
|
|
236
|
+
### Display Options
|
|
237
|
+
```bash
|
|
238
|
+
lean-spec # Full dashboard
|
|
239
|
+
lean-spec dashboard # Explicit
|
|
240
|
+
lean-spec --compact # Minimal (just health + attention)
|
|
241
|
+
lean-spec --expand-active # Show all in-progress (not just top 5)
|
|
242
|
+
lean-spec --json # JSON for tooling
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### vs. Individual Commands
|
|
246
|
+
|
|
247
|
+
| Command | Purpose | When to Use |
|
|
248
|
+
|---------|---------|-------------|
|
|
249
|
+
| `lean-spec` | Quick overview | Daily standup, "what's happening?" |
|
|
250
|
+
| `lean-spec list` | Browse/search specs | Find specific spec, apply filters |
|
|
251
|
+
| `lean-spec board` | Kanban workflow | Sprint planning, status changes |
|
|
252
|
+
| `lean-spec gantt` | Timeline planning | Schedule work, see deadlines |
|
|
253
|
+
| `lean-spec stats` | Deep analytics | Metrics review, team performance |
|
|
254
|
+
|
|
255
|
+
## Command Organization Philosophy
|
|
256
|
+
|
|
257
|
+
### PM Commands (keep separate - distinct workflows)
|
|
258
|
+
- `list` - Browse/search/filter specs
|
|
259
|
+
- `board` - Kanban workflow (status changes)
|
|
260
|
+
- `deps` - Dependency visualization
|
|
261
|
+
- `gantt` - Timeline planning (schedule work)
|
|
262
|
+
|
|
263
|
+
### Analytics Commands (consolidate - overlapping purpose)
|
|
264
|
+
- `stats` - Current metrics + historical trends
|
|
265
|
+
- `timeline` - Redundant with stats (merge in)
|
|
266
|
+
|
|
267
|
+
### Dashboard (new - quick overview)
|
|
268
|
+
- `lean-spec` - Glanceable project health
|
|
269
|
+
- Entry point for daily use
|
|
270
|
+
- Directs to PM commands for detail
|
|
271
|
+
|
|
272
|
+
This organization makes sense because:
|
|
273
|
+
- PM commands have distinct UX patterns (kanban, graph, gantt chart)
|
|
274
|
+
- Analytics commands both show "numbers over time"
|
|
275
|
+
- Dashboard is a meta-view (doesn't replace PM commands)
|
|
276
|
+
|
|
277
|
+
## Why Merge Stats + Timeline?
|
|
278
|
+
|
|
279
|
+
### Current Redundancy
|
|
280
|
+
- Both load all specs
|
|
281
|
+
- Both show date-based trends
|
|
282
|
+
- Both have bar charts
|
|
283
|
+
- Both support same filters
|
|
284
|
+
- Both output similar visualizations
|
|
285
|
+
|
|
286
|
+
### Differences
|
|
287
|
+
- `stats` - emphasizes current state (status, priority, tags)
|
|
288
|
+
- `timeline` - emphasizes historical change (created/completed over time)
|
|
289
|
+
|
|
290
|
+
### Solution
|
|
291
|
+
Make `stats` the comprehensive analytics command:
|
|
292
|
+
- Default: current stats (backward compatible)
|
|
293
|
+
- `--timeline`: add timeline section
|
|
294
|
+
- `--history`: timeline-focused view
|
|
295
|
+
|
|
296
|
+
## Smart Insights Algorithm
|
|
297
|
+
|
|
298
|
+
"Needs Attention" section prioritizes:
|
|
299
|
+
|
|
300
|
+
1. **Overdue & Critical** - highest urgency
|
|
301
|
+
```typescript
|
|
302
|
+
spec.frontmatter.due < today &&
|
|
303
|
+
spec.frontmatter.status != 'complete' &&
|
|
304
|
+
spec.frontmatter.priority == 'critical'
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
2. **Overdue & In-Progress** - likely blockers
|
|
308
|
+
```typescript
|
|
309
|
+
spec.frontmatter.due < today &&
|
|
310
|
+
spec.frontmatter.status == 'in-progress'
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
3. **Critical & Planned** - not started yet
|
|
314
|
+
```typescript
|
|
315
|
+
spec.frontmatter.priority == 'critical' &&
|
|
316
|
+
spec.frontmatter.status == 'planned'
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
4. **Long-running In-Progress** - potential stalls
|
|
320
|
+
```typescript
|
|
321
|
+
spec.frontmatter.status == 'in-progress' &&
|
|
322
|
+
daysSince(spec.frontmatter.updated) > 14
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
Show top 3-5 items max, then "and N more need attention"
|
|
326
|
+
|
|
327
|
+
## Why `lean-spec` Should Default to Dashboard
|
|
328
|
+
|
|
329
|
+
### Current behavior
|
|
330
|
+
`lean-spec` shows help
|
|
331
|
+
|
|
332
|
+
### Proposed
|
|
333
|
+
`lean-spec` shows dashboard
|
|
334
|
+
|
|
335
|
+
### Reasoning
|
|
336
|
+
- Help still accessible via `lean-spec --help`
|
|
337
|
+
- Dashboard is most frequently needed view
|
|
338
|
+
- Matches modern CLI patterns (gh, git status at root)
|
|
339
|
+
- Better new user experience (show, don't tell)
|
|
340
|
+
- OpenSpec uses `openspec view` as primary command
|
|
341
|
+
|
|
342
|
+
### User flow
|
|
343
|
+
```bash
|
|
344
|
+
cd my-project
|
|
345
|
+
lean-spec # Quick overview (dashboard)
|
|
346
|
+
# See something interesting...
|
|
347
|
+
lean-spec list --tag bug # Drill down
|
|
348
|
+
lean-spec board # Change status
|
|
349
|
+
lean-spec # Check dashboard again
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## Velocity Configuration
|
|
353
|
+
|
|
354
|
+
Add to `.lean-spec/config.json`:
|
|
355
|
+
|
|
356
|
+
```json
|
|
357
|
+
{
|
|
358
|
+
"velocity": {
|
|
359
|
+
"enabled": true,
|
|
360
|
+
"targets": {
|
|
361
|
+
"cycle_time_days": 7,
|
|
362
|
+
"throughput_per_month": 10,
|
|
363
|
+
"max_wip": 5
|
|
364
|
+
},
|
|
365
|
+
"alerts": {
|
|
366
|
+
"long_running_days": 14,
|
|
367
|
+
"overdue_critical": true
|
|
368
|
+
},
|
|
369
|
+
"tracking": {
|
|
370
|
+
"use_timestamps": true,
|
|
371
|
+
"track_transitions": true
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Defaults (if not configured)
|
|
378
|
+
- Cycle time target: 7 days
|
|
379
|
+
- Max WIP: 5 concurrent specs
|
|
380
|
+
- Long-running threshold: 14 days
|
|
381
|
+
- Timestamps: auto-enabled
|
|
382
|
+
- Transitions: optional (off by default)
|
package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/IMPLEMENTATION.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Implementation Plan: Unified Dashboard
|
|
2
|
+
|
|
3
|
+
## Part 0: Timestamp Tracking (Week 1)
|
|
4
|
+
|
|
5
|
+
Foundation for velocity metrics:
|
|
6
|
+
|
|
7
|
+
- [ ] Update `SpecFrontmatter` interface with timestamp fields
|
|
8
|
+
- [ ] Add `created_at?: string` (ISO 8601)
|
|
9
|
+
- [ ] Add `updated_at?: string` (ISO 8601)
|
|
10
|
+
- [ ] Add `completed_at?: string` (ISO 8601)
|
|
11
|
+
- [ ] Add `transitions?: Array<{status, at}>` (optional)
|
|
12
|
+
- [ ] Create `enrichWithTimestamps()` helper
|
|
13
|
+
- [ ] Auto-generate `created_at` on spec creation
|
|
14
|
+
- [ ] Update `updated_at` on any frontmatter change
|
|
15
|
+
- [ ] Set `completed_at` when status → complete
|
|
16
|
+
- [ ] Track status transitions (optional)
|
|
17
|
+
- [ ] Update `create.ts` to set initial timestamps
|
|
18
|
+
- [ ] Update `update.ts` to maintain timestamps
|
|
19
|
+
- [ ] Migration: Infer timestamps from dates for existing specs
|
|
20
|
+
- [ ] Add tests for timestamp generation logic
|
|
21
|
+
|
|
22
|
+
## Part 1: Unified Analytics (Week 1-2)
|
|
23
|
+
|
|
24
|
+
### Part A: Merge timeline into stats
|
|
25
|
+
- [ ] Create `utils/vis.ts` with shared visualization helpers
|
|
26
|
+
- [ ] `createBar(count, max, width, char)` - reusable bar charts
|
|
27
|
+
- [ ] `formatMetric(label, value, color)` - metric formatting
|
|
28
|
+
- [ ] Date range helpers
|
|
29
|
+
- [ ] Enhance `stats.ts` with timeline functionality
|
|
30
|
+
- [ ] Add `--timeline` flag (show timeline section after stats)
|
|
31
|
+
- [ ] Add `--history` flag (full timeline focus, like current timeline)
|
|
32
|
+
- [ ] Add `--velocity` flag (NEW: cycle time analysis)
|
|
33
|
+
- [ ] Add `--all` flag (everything combined)
|
|
34
|
+
- [ ] Keep default behavior (current stats only)
|
|
35
|
+
- [ ] Extract bar chart logic from both commands to `utils/vis.ts`
|
|
36
|
+
- [ ] Update tests for enhanced stats command
|
|
37
|
+
- [ ] Mark `timeline.ts` as deprecated (but keep working)
|
|
38
|
+
|
|
39
|
+
### Part B: Velocity Calculations
|
|
40
|
+
- [ ] Create `utils/velocity.ts` with velocity analysis
|
|
41
|
+
- [ ] `calculateCycleTime(spec)` - created_at → completed_at
|
|
42
|
+
- [ ] `calculateStageDuration(spec, status)` - time in each status
|
|
43
|
+
- [ ] `calculateThroughput(specs, period)` - specs per week/month
|
|
44
|
+
- [ ] `calculateWIP(specs, date)` - active specs at point in time
|
|
45
|
+
- [ ] `calculatePercentiles(times, [50, 90, 95])` - distribution
|
|
46
|
+
- [ ] Implement velocity section rendering
|
|
47
|
+
- [ ] Cycle time: avg, median, P50-P95
|
|
48
|
+
- [ ] Stage durations with bars
|
|
49
|
+
- [ ] Throughput with trend indicators
|
|
50
|
+
- [ ] WIP metrics
|
|
51
|
+
- [ ] Weekly velocity trend (last 4 weeks)
|
|
52
|
+
- [ ] Add configurable targets in config.json
|
|
53
|
+
- [ ] `velocity.target_cycle_time: 7` (days)
|
|
54
|
+
- [ ] `velocity.target_throughput: 10` (specs/month)
|
|
55
|
+
- [ ] `velocity.max_wip: 5` (concurrent specs)
|
|
56
|
+
|
|
57
|
+
### Part C: Testing
|
|
58
|
+
- [ ] Test `lean-spec stats` (default behavior unchanged)
|
|
59
|
+
- [ ] Test `lean-spec stats --timeline` (integrated view)
|
|
60
|
+
- [ ] Test `lean-spec stats --history` (full timeline)
|
|
61
|
+
- [ ] Test `lean-spec stats --velocity` (cycle time analysis)
|
|
62
|
+
- [ ] Test `lean-spec stats --all` (comprehensive)
|
|
63
|
+
- [ ] Test velocity calculations with mock data
|
|
64
|
+
- [ ] Test graceful degradation (specs without timestamps)
|
|
65
|
+
- [ ] Verify backward compatibility
|
|
66
|
+
|
|
67
|
+
## Part 2: Dashboard Command (Week 2)
|
|
68
|
+
|
|
69
|
+
### Part A: Core dashboard implementation
|
|
70
|
+
- [ ] Create `src/commands/dashboard.ts`
|
|
71
|
+
- [ ] Implement Summary section (project health)
|
|
72
|
+
- [ ] Implement Needs Attention section (smart insights)
|
|
73
|
+
- [ ] Implement Recent Activity section (14-day sparkline + velocity)
|
|
74
|
+
- [ ] Implement In Progress section (top active specs with age)
|
|
75
|
+
- [ ] Implement Quick Stats section (tags, assignees)
|
|
76
|
+
- [ ] Implement Velocity Summary section (cycle time, throughput, WIP)
|
|
77
|
+
- [ ] Add helpful footer with command hints
|
|
78
|
+
|
|
79
|
+
### Part B: CLI integration
|
|
80
|
+
- [ ] Make `lean-spec` (no args) default to dashboard
|
|
81
|
+
- [ ] Add explicit `lean-spec dashboard` command
|
|
82
|
+
- [ ] Support all filter options (--tag, --status, etc.)
|
|
83
|
+
- [ ] Add display options (--compact, --expand-active)
|
|
84
|
+
- [ ] Add JSON output mode (--json)
|
|
85
|
+
|
|
86
|
+
### Part C: Smart insights
|
|
87
|
+
- [ ] Detect overdue specs (due < today, status != complete)
|
|
88
|
+
- [ ] Highlight critical priority specs
|
|
89
|
+
- [ ] Show user's assigned work (from git config or --assignee)
|
|
90
|
+
- [ ] Flag long-running in-progress specs (> 14 days)
|
|
91
|
+
- [ ] Identify velocity bottlenecks (slow stages)
|
|
92
|
+
- [ ] Suggest next actions based on state
|
|
93
|
+
|
|
94
|
+
## Phase 3: Testing & Polish (Week 2-3)
|
|
95
|
+
|
|
96
|
+
### Unit tests
|
|
97
|
+
- [ ] Dashboard section rendering
|
|
98
|
+
- [ ] Smart insights logic
|
|
99
|
+
- [ ] Filter application
|
|
100
|
+
- [ ] JSON output structure
|
|
101
|
+
|
|
102
|
+
### Integration tests
|
|
103
|
+
- [ ] Empty project (show helpful init message)
|
|
104
|
+
- [ ] Small project (< 10 specs)
|
|
105
|
+
- [ ] Medium project (10-50 specs)
|
|
106
|
+
- [ ] Large project (100+ specs)
|
|
107
|
+
- [ ] With all filter combinations
|
|
108
|
+
- [ ] With display options
|
|
109
|
+
|
|
110
|
+
### Visual regression
|
|
111
|
+
- [ ] Compare dashboard output across sizes
|
|
112
|
+
- [ ] Verify Unicode characters render correctly
|
|
113
|
+
- [ ] Test color output (with/without color support)
|
|
114
|
+
- [ ] Test terminal width handling
|
|
115
|
+
|
|
116
|
+
## Phase 4: Documentation (Week 3)
|
|
117
|
+
|
|
118
|
+
### README updates
|
|
119
|
+
- [ ] Feature dashboard as primary command
|
|
120
|
+
- [ ] Add dashboard screenshot/GIF
|
|
121
|
+
- [ ] Update command reference table
|
|
122
|
+
- [ ] Show dashboard → drill-down workflow
|
|
123
|
+
|
|
124
|
+
### AGENTS.md updates
|
|
125
|
+
- [ ] Update AI instructions to use dashboard first
|
|
126
|
+
- [ ] Document `lean-spec stats --timeline` pattern
|
|
127
|
+
- [ ] Update command examples
|
|
128
|
+
|
|
129
|
+
### Help text
|
|
130
|
+
- [ ] Update `lean-spec --help` to show dashboard first
|
|
131
|
+
- [ ] Add examples to `lean-spec dashboard --help`
|
|
132
|
+
- [ ] Update `lean-spec stats --help` with new flags
|
|
133
|
+
|
|
134
|
+
## Phase 5: Migration & Deprecation (v0.3.0)
|
|
135
|
+
|
|
136
|
+
### Add deprecation warnings
|
|
137
|
+
- [ ] `lean-spec timeline` → "Use 'lean-spec stats --history' instead"
|
|
138
|
+
- [ ] Show migration hints in output
|
|
139
|
+
- [ ] Update CHANGELOG with deprecation notice
|
|
140
|
+
|
|
141
|
+
### Remove in v0.4.0
|
|
142
|
+
- [ ] Delete `src/commands/timeline.ts`
|
|
143
|
+
- [ ] Remove from CLI registration
|
|
144
|
+
- [ ] Archive any timeline-specific tests
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Rationale: Why Velocity Tracking Matters for SDD
|
|
2
|
+
|
|
3
|
+
## The SDD Adoption Challenge
|
|
4
|
+
|
|
5
|
+
Teams wonder: "Does writing specs slow us down?"
|
|
6
|
+
- Need data to prove SDD value, not just gut feel
|
|
7
|
+
- Velocity metrics provide objective measurement
|
|
8
|
+
- Makes SDD adoption measurable and defensible
|
|
9
|
+
|
|
10
|
+
## What Velocity Reveals
|
|
11
|
+
|
|
12
|
+
### 1. Cycle Time (Created → Completed)
|
|
13
|
+
- **Shorter** = specs help clarify work faster
|
|
14
|
+
- **Longer** = specs might be too detailed or not actionable
|
|
15
|
+
- **Target**: < 7 days (configurable per team)
|
|
16
|
+
|
|
17
|
+
### 2. Stage Duration (Time in each status)
|
|
18
|
+
- **Long "Planned"** = analysis paralysis or unclear specs
|
|
19
|
+
- **Long "In-Progress"** = implementation blockers or scope creep
|
|
20
|
+
- **Helps identify process bottlenecks**
|
|
21
|
+
|
|
22
|
+
### 3. Throughput (Specs completed per period)
|
|
23
|
+
- **Increasing** = team getting better with SDD
|
|
24
|
+
- **Stable** = sustainable pace
|
|
25
|
+
- **Decreasing** = investigate blockers
|
|
26
|
+
|
|
27
|
+
### 4. WIP Limits (Concurrent active specs)
|
|
28
|
+
- **Too high (>5)** = context switching overhead
|
|
29
|
+
- **Too low (<2)** = might not be using SDD effectively
|
|
30
|
+
- **Kanban principle**: limit WIP to improve flow
|
|
31
|
+
|
|
32
|
+
## Using Velocity to Improve
|
|
33
|
+
|
|
34
|
+
- **Weekly review**: "Why did spec-X take 12 days?"
|
|
35
|
+
- **Identify patterns**: Do certain types take longer?
|
|
36
|
+
- **Adjust**: Simplify spec templates, add more detail, etc.
|
|
37
|
+
- **Prove ROI**: "Our cycle time dropped 40% after adopting SDD"
|
|
38
|
+
|
|
39
|
+
## Why Velocity is Critical for SDD
|
|
40
|
+
|
|
41
|
+
Velocity is not just a metric—it's the feedback loop that makes SDD a learning system:
|
|
42
|
+
|
|
43
|
+
1. **Proves whether specs accelerate or slow down development**
|
|
44
|
+
2. **Identifies workflow bottlenecks** (long planned→in-progress, or in-progress→complete)
|
|
45
|
+
3. **Tracks team learning curve with SDD over time**
|
|
46
|
+
4. **Provides data for continuous improvement**
|
|
47
|
+
5. **Makes SDD adoption measurable and defensible to stakeholders**
|
|
48
|
+
|
|
49
|
+
## Timestamp vs Date Trade-offs
|
|
50
|
+
|
|
51
|
+
| Approach | Pros | Cons |
|
|
52
|
+
|----------|------|------|
|
|
53
|
+
| **Date only** (current) | Simple, human-readable | Imprecise, can't distinguish same-day events |
|
|
54
|
+
| **Timestamp** (proposed) | Precise, enables velocity metrics | More complex, harder to edit manually |
|
|
55
|
+
| **Hybrid** (this spec) | Best of both: human dates + precise timestamps | Requires both fields, migration needed |
|
|
56
|
+
|
|
57
|
+
### Decision: Hybrid Approach
|
|
58
|
+
- Keep `created: YYYY-MM-DD` (human-readable, required)
|
|
59
|
+
- Add `created_at: ISO8601` (precise, auto-generated)
|
|
60
|
+
- Graceful degradation: velocity works with dates if timestamps missing
|
|
61
|
+
- Migration: infer timestamps from dates for existing specs
|
|
62
|
+
|
|
63
|
+
## Dashboard Design Inspiration
|
|
64
|
+
|
|
65
|
+
### OpenSpec's Approach
|
|
66
|
+
```typescript
|
|
67
|
+
// OpenSpec view.ts structure
|
|
68
|
+
- Summary (specs count, changes count, task progress)
|
|
69
|
+
- Active Changes (with progress bars)
|
|
70
|
+
- Completed Changes
|
|
71
|
+
- Specifications (sorted by requirement count)
|
|
72
|
+
- Footer (helpful hints)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Our Adaptation
|
|
76
|
+
```typescript
|
|
77
|
+
// LeanSpec dashboard.ts structure
|
|
78
|
+
- Project Health (total, status, priority)
|
|
79
|
+
- Needs Attention (smart insights: overdue, critical)
|
|
80
|
+
- Recent Activity (14-day sparkline)
|
|
81
|
+
- In Progress (top 5 active specs)
|
|
82
|
+
- Quick Stats (top tags, assignees)
|
|
83
|
+
- Footer (command hints)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Key Differences
|
|
87
|
+
- We focus on "needs attention" (actionable)
|
|
88
|
+
- We don't have "changes" concept (simpler)
|
|
89
|
+
- We emphasize priority more (critical path)
|
|
90
|
+
- We show assignee workload
|
|
91
|
+
|
|
92
|
+
## Migration for Existing Users
|
|
93
|
+
|
|
94
|
+
### v0.2.0 Release Notes
|
|
95
|
+
```markdown
|
|
96
|
+
## New: Dashboard Command
|
|
97
|
+
|
|
98
|
+
Run `lean-spec` (no arguments) to see a comprehensive project overview!
|
|
99
|
+
|
|
100
|
+
The dashboard combines summary stats, recent activity, and active work
|
|
101
|
+
into a single glanceable view. Perfect for daily standup or checking
|
|
102
|
+
project health.
|
|
103
|
+
|
|
104
|
+
Individual commands (list, board, gantt, stats) remain unchanged.
|
|
105
|
+
|
|
106
|
+
## Enhanced: Stats Command
|
|
107
|
+
|
|
108
|
+
`lean-spec stats` now supports timeline views:
|
|
109
|
+
- `lean-spec stats --timeline` - add 14-day activity
|
|
110
|
+
- `lean-spec stats --history` - full historical view
|
|
111
|
+
- `lean-spec stats` - current stats only (unchanged)
|
|
112
|
+
|
|
113
|
+
The standalone `lean-spec timeline` command is deprecated and will be
|
|
114
|
+
removed in v0.4.0. Use `lean-spec stats --history` instead.
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Alternatives Considered
|
|
118
|
+
|
|
119
|
+
### Option A: Separate analytics command
|
|
120
|
+
```bash
|
|
121
|
+
lean-spec analytics # New command
|
|
122
|
+
lean-spec analytics --stats # Current stats
|
|
123
|
+
lean-spec analytics --timeline # Timeline view
|
|
124
|
+
```
|
|
125
|
+
- ✅ Clear namespace
|
|
126
|
+
- ❌ More typing
|
|
127
|
+
- ❌ Breaks backward compatibility
|
|
128
|
+
|
|
129
|
+
### Option B: Enhance stats (This Spec)
|
|
130
|
+
```bash
|
|
131
|
+
lean-spec stats # Current behavior (default)
|
|
132
|
+
lean-spec stats --timeline # Add timeline
|
|
133
|
+
lean-spec stats --history # Full timeline focus
|
|
134
|
+
```
|
|
135
|
+
- ✅ Backward compatible
|
|
136
|
+
- ✅ Less typing
|
|
137
|
+
- ✅ Intuitive progressive disclosure
|
|
138
|
+
- ❌ Stats name doesn't perfectly fit timeline
|
|
139
|
+
|
|
140
|
+
### Option C: Keep separate
|
|
141
|
+
- ✅ No breaking changes
|
|
142
|
+
- ❌ Redundant code
|
|
143
|
+
- ❌ User confusion (which to use?)
|
|
144
|
+
|
|
145
|
+
### Decision: Option B
|
|
146
|
+
Best balance of compatibility and consolidation
|