@leanspec/ui 0.2.7-dev.20251126090633 → 0.2.7
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/@img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
- package/.next/standalone/node_modules/.pnpm/{@img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64 → @img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64}/package.json +7 -13
- package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/README.md +2 -2
- package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/lib/glib-2.0/include/glibconfig.h +8 -9
- package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib} +0 -0
- package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/package.json +5 -11
- 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/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/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.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- 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/page.js.nft.json +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]/specs/[specId]/page.js.nft.json +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/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
- 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/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +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/dist/standalone/packages/web/README.md +196 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/components.json +20 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0000_reflective_thena.sql +59 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0001_fresh_carmella_unuscione.sql +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0000_snapshot.json +427 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0001_snapshot.json +436 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/_journal.json +20 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle.config.ts +10 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/eslint.config.mjs +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/next.config.ts +7 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +83 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/postcss.config.mjs +8 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/f864aa7e7061c0600e35cf3d879b27cf.txt +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/favicon.ico +0 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/file.svg +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/github-mark-white.svg +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/github-mark.svg +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/globe.svg +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/icon.svg +7 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/logo-dark-bg.svg +17 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/logo-with-bg.svg +17 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/logo.svg +17 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/next.svg +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/vercel.svg +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/public/window.svg +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +44 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/[id]/specs/route.ts +23 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/route.ts +19 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/revalidate/route.ts +63 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.test.ts +51 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.ts +171 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/route.ts +36 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/subspecs/[file]/route.ts +46 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/stats/route.ts +19 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/board-client.tsx +162 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/loading.tsx +43 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/page.tsx +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/dashboard-client.tsx +364 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/error.tsx +43 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/globals.css +531 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/home-client.tsx +277 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/layout.tsx +70 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/loading.tsx +87 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/not-found.tsx +27 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/page.tsx +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/loading.tsx +5 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/page.tsx +43 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/page.tsx +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/specs-client.tsx +425 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/page.tsx +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/stats-client.tsx +283 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/back-to-top.tsx +46 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/empty-state.tsx +52 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/main-sidebar.tsx +175 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.test.ts +96 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.tsx +95 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/navigation.tsx +210 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/priority-badge.tsx +53 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/quick-search.tsx +180 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/skeletons.tsx +119 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-dependency-graph.tsx +369 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-client.tsx +372 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-loading-shell.tsx +42 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-wrapper.tsx +70 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-metadata.tsx +136 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-sidebar.tsx +127 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-timeline.tsx +186 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/specs-nav-sidebar.tsx +561 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/status-badge.tsx +53 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/sub-spec-tabs.tsx +143 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/table-of-contents.tsx +130 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-provider.tsx +11 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-toggle.tsx +37 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/avatar.tsx +50 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/badge.tsx +36 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/breadcrumb.tsx +110 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/button.tsx +57 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/card.tsx +76 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/command.tsx +153 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/dialog.tsx +122 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/input.tsx +24 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/select.tsx +159 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/separator.tsx +31 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/skeleton.tsx +15 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tabs.tsx +55 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/toast.tsx +30 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tooltip.tsx +32 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/date-utils.ts +76 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/index.ts +42 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/migrate.ts +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/queries.ts +114 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/schema.ts +123 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/seed.ts +156 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/service-queries.ts +216 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/dependency-graph.ts +105 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/service.ts +120 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/database-source.ts +94 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/filesystem-source.ts +249 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/types.ts +55 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/stores/specs-sidebar-store.ts +152 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/sub-specs.ts +171 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/utils.ts +17 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/types/specs.ts +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/tailwind.config.ts +58 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.json +34 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.tsbuildinfo +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/vitest.config.ts +14 -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 +306 -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 +287 -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 +825 -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 +501 -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 +421 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +106 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +126 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +131 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +254 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +152 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +65 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/094-ai-chatbot-web-integration/README.md +332 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/095-pr-migration-verification/README.md +339 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/096-docs-beginner-first-reorg/README.md +399 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/097-dag-visualization-library/README.md +525 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/098-github-multi-project-integration/README.md +387 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/099-enhanced-dependency-commands-cli-mcp/README.md +613 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/100-release-process-typecheck-failure/README.md +266 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/101-sidebar-scroll-position-drift/README.md +100 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/102-mcp-wrapper-package/README.md +172 -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/package.json +1 -1
- package/.next/standalone/packages/ui/server.js +1 -1
- package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +0 -46
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +0 -221
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +0 -1
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +0 -30
- package/.next/standalone/node_modules/.pnpm/@img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
- /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/lib/index.js +0 -0
- /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/versions.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{gmEkSwWc7AIWzMK9b0WXr → 6nq7WNafPv5Bf_7mWgRQ-}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/ui/.next/static/{gmEkSwWc7AIWzMK9b0WXr → 6nq7WNafPv5Bf_7mWgRQ-}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{gmEkSwWc7AIWzMK9b0WXr → 6nq7WNafPv5Bf_7mWgRQ-}/_ssgManifest.js +0 -0
- /package/.next/static/{gmEkSwWc7AIWzMK9b0WXr → 6nq7WNafPv5Bf_7mWgRQ-}/_buildManifest.js +0 -0
- /package/.next/static/{gmEkSwWc7AIWzMK9b0WXr → 6nq7WNafPv5Bf_7mWgRQ-}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{gmEkSwWc7AIWzMK9b0WXr → 6nq7WNafPv5Bf_7mWgRQ-}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: complete
|
|
3
|
+
created: '2025-11-04'
|
|
4
|
+
completed: '2025-11-07'
|
|
5
|
+
tags:
|
|
6
|
+
- ux
|
|
7
|
+
- visualization
|
|
8
|
+
- analytics
|
|
9
|
+
- launch
|
|
10
|
+
- v0.2.0
|
|
11
|
+
priority: high
|
|
12
|
+
created_at: '2025-11-04T00:00:00Z'
|
|
13
|
+
updated_at: '2025-11-07T03:20:42.284Z'
|
|
14
|
+
completed_at: '2025-11-07T00:00:00Z'
|
|
15
|
+
transitions:
|
|
16
|
+
- status: complete
|
|
17
|
+
at: '2025-11-04T10:21:40.759Z'
|
|
18
|
+
- status: in-progress
|
|
19
|
+
at: '2025-11-06T06:55:31.151Z'
|
|
20
|
+
- status: complete
|
|
21
|
+
at: '2025-11-07T00:00:00Z'
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Unified Analytics & Velocity Tracking
|
|
25
|
+
|
|
26
|
+
> **Status**: ✅ Complete · **Priority**: High · **Created**: 2025-11-04 · **Tags**: ux, visualization, analytics, launch, v0.2.0
|
|
27
|
+
|
|
28
|
+
**Split into sub-specs for Context Economy** - See detailed sections below
|
|
29
|
+
|
|
30
|
+
## Overview
|
|
31
|
+
|
|
32
|
+
Consolidate analytics commands and add velocity tracking to measure SDD effectiveness.
|
|
33
|
+
|
|
34
|
+
### What Was Built
|
|
35
|
+
|
|
36
|
+
1. ✅ **Timestamp tracking** → `created_at`, `updated_at`, `completed_at`, `transitions` in frontmatter
|
|
37
|
+
2. ✅ **Velocity metrics** → Cycle time, throughput, WIP tracking in `utils/velocity.ts`
|
|
38
|
+
3. ✅ **Enhanced stats command** → Added `--velocity`, `--timeline`, `--full` flags
|
|
39
|
+
4. ✅ **Board enhancements** → Integrated velocity summary into board view
|
|
40
|
+
5. ❌ **Dashboard command** → Not implemented (functionality merged into enhanced `stats` and `board` instead)
|
|
41
|
+
|
|
42
|
+
### Why Now?
|
|
43
|
+
|
|
44
|
+
- v0.2.0 launch requires polished, cohesive UX
|
|
45
|
+
- Analytics commands overlap in purpose (both show trends/metrics)
|
|
46
|
+
- Need single entry point for "show me project health"
|
|
47
|
+
- **Velocity is critical metric for SDD adoption** - proves if specs help or hinder
|
|
48
|
+
|
|
49
|
+
### Before vs After
|
|
50
|
+
|
|
51
|
+
**Before (v0.1.x):**
|
|
52
|
+
```bash
|
|
53
|
+
lean-spec stats # Basic metrics only
|
|
54
|
+
lean-spec timeline # Separate timeline view
|
|
55
|
+
lean-spec board # Basic Kanban
|
|
56
|
+
# No velocity tracking
|
|
57
|
+
# No timestamp precision
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**After (v0.2.0):**
|
|
61
|
+
```bash
|
|
62
|
+
# Enhanced Stats Command
|
|
63
|
+
lean-spec stats # Simplified view with insights
|
|
64
|
+
lean-spec stats --timeline # Add timeline section
|
|
65
|
+
lean-spec stats --velocity # Cycle time analysis
|
|
66
|
+
lean-spec stats --full # Everything combined
|
|
67
|
+
|
|
68
|
+
# Enhanced Board Command
|
|
69
|
+
lean-spec board # Now includes velocity summary
|
|
70
|
+
|
|
71
|
+
# Timeline Command
|
|
72
|
+
lean-spec timeline # Still works (not deprecated)
|
|
73
|
+
|
|
74
|
+
# Velocity tracking active
|
|
75
|
+
# Precise timestamps in frontmatter
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Implemented Features
|
|
79
|
+
|
|
80
|
+
### ✅ 1. Timestamp Tracking (Foundation)
|
|
81
|
+
Precise timestamps alongside existing dates enable velocity metrics:
|
|
82
|
+
- `created_at`, `updated_at`, `completed_at` (ISO 8601) - **IMPLEMENTED**
|
|
83
|
+
- Optional `transitions` array for stage duration tracking - **IMPLEMENTED**
|
|
84
|
+
- Backward compatible (infer from dates if missing) - **IMPLEMENTED**
|
|
85
|
+
- Auto-enrichment on create/update operations - **IMPLEMENTED**
|
|
86
|
+
|
|
87
|
+
### ✅ 2. Velocity Metrics
|
|
88
|
+
Comprehensive velocity tracking implemented in `src/utils/velocity.ts`:
|
|
89
|
+
- **Cycle Time**: Created → Completed (avg, median, P90) - **IMPLEMENTED**
|
|
90
|
+
- **Lead Time**: Time in each status from transitions - **IMPLEMENTED**
|
|
91
|
+
- **Throughput**: Specs/week with trend indicators - **IMPLEMENTED**
|
|
92
|
+
- **WIP Tracking**: Current and historical WIP averages - **IMPLEMENTED**
|
|
93
|
+
|
|
94
|
+
### ✅ 3. Enhanced Stats Command
|
|
95
|
+
Completely redesigned stats command with multiple views:
|
|
96
|
+
- `lean-spec stats` → New simplified view with insights (default) - **IMPLEMENTED**
|
|
97
|
+
- `lean-spec stats --timeline` → Add timeline section - **IMPLEMENTED**
|
|
98
|
+
- `lean-spec stats --velocity` → Show cycle time analysis - **IMPLEMENTED**
|
|
99
|
+
- `lean-spec stats --full` → Everything combined (old analytics style) - **IMPLEMENTED**
|
|
100
|
+
- Smart insights and completion tracking - **IMPLEMENTED**
|
|
101
|
+
|
|
102
|
+
### ✅ 4. Board Command Enhancements
|
|
103
|
+
Integrated velocity metrics into board view:
|
|
104
|
+
- Shows velocity summary (cycle time, throughput, WIP) - **IMPLEMENTED**
|
|
105
|
+
- Completion rate and project health - **IMPLEMENTED**
|
|
106
|
+
|
|
107
|
+
### ❌ 5. Dashboard Command (Not Implemented)
|
|
108
|
+
Decision: Instead of creating a separate dashboard command, the functionality was distributed:
|
|
109
|
+
- Enhanced `stats` command provides comprehensive analytics
|
|
110
|
+
- Enhanced `board` command shows velocity summary
|
|
111
|
+
- This keeps the CLI simpler and more focused
|
|
112
|
+
|
|
113
|
+
## Quick Reference
|
|
114
|
+
|
|
115
|
+
### Command Comparison
|
|
116
|
+
|
|
117
|
+
| Command | Purpose | When to Use |
|
|
118
|
+
|---------|---------|-------------|
|
|
119
|
+
| `lean-spec list` | Browse/search specs | Find specific spec, apply filters |
|
|
120
|
+
| `lean-spec board` | Kanban workflow + velocity | Sprint planning, project health |
|
|
121
|
+
| `lean-spec stats` | Comprehensive analytics | Deep metrics, velocity analysis |
|
|
122
|
+
| `lean-spec timeline` | Historical trends | Activity over time |
|
|
123
|
+
|
|
124
|
+
### Stats Output Examples
|
|
125
|
+
|
|
126
|
+
**Simplified view (default):**
|
|
127
|
+
```bash
|
|
128
|
+
lean-spec stats
|
|
129
|
+
# Shows: Overview, Status, Priority Focus, Needs Attention, Velocity Summary
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Velocity analysis:**
|
|
133
|
+
```bash
|
|
134
|
+
lean-spec stats --velocity
|
|
135
|
+
# Shows: Cycle Time, Lead Time, Throughput, WIP metrics
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Full analytics:**
|
|
139
|
+
```bash
|
|
140
|
+
lean-spec stats --full
|
|
141
|
+
# Shows: Everything combined (stats + timeline + velocity)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Sub-Specs
|
|
145
|
+
|
|
146
|
+
Detailed information split for Context Economy (<400 lines per file):
|
|
147
|
+
|
|
148
|
+
- **[DESIGN.md](./DESIGN.md)** - Architecture, timestamp tracking, command structure
|
|
149
|
+
- **[RATIONALE.md](./RATIONALE.md)** - Why velocity matters, design decisions, alternatives
|
|
150
|
+
- **[IMPLEMENTATION.md](./IMPLEMENTATION.md)** - Step-by-step implementation plan with phases
|
|
151
|
+
- **[TESTING.md](./TESTING.md)** - Comprehensive test strategy and success criteria
|
|
152
|
+
- **[ACTUAL-IMPLEMENTATION.md](./ACTUAL-IMPLEMENTATION.md)** - Final implementation details and outcomes
|
|
153
|
+
|
|
154
|
+
## Success Criteria (Achieved)
|
|
155
|
+
|
|
156
|
+
**✅ User Experience:**
|
|
157
|
+
- Stats command now provides clear project insights with simplified default view
|
|
158
|
+
- Needs Attention section highlights critical issues
|
|
159
|
+
- Velocity metrics prove SDD effectiveness
|
|
160
|
+
- No breaking changes for existing users
|
|
161
|
+
|
|
162
|
+
**✅ Technical:**
|
|
163
|
+
- Fast render performance with single spec load
|
|
164
|
+
- Backward compatible (old stats behavior available with `--full`)
|
|
165
|
+
- Clean separation: velocity.ts, completion.ts, insights.ts utilities
|
|
166
|
+
- Comprehensive test coverage
|
|
167
|
+
|
|
168
|
+
**✅ Business:**
|
|
169
|
+
- Velocity metrics demonstrate SDD value objectively
|
|
170
|
+
- Enhanced board/stats commands improve v0.2.0 launch demo
|
|
171
|
+
- Clear analytics for teams to track improvement
|
|
172
|
+
|
|
173
|
+
## Dependencies
|
|
174
|
+
|
|
175
|
+
None - standalone feature for v0.2.0
|
|
176
|
+
|
|
177
|
+
## Implementation Notes
|
|
178
|
+
|
|
179
|
+
### Why Velocity Metrics Matter
|
|
180
|
+
|
|
181
|
+
**Velocity is SDD's feedback loop:**
|
|
182
|
+
- Proves whether specs accelerate or slow development
|
|
183
|
+
- Identifies workflow bottlenecks
|
|
184
|
+
- Tracks team learning curve
|
|
185
|
+
- Makes SDD adoption measurable
|
|
186
|
+
- Provides objective data for process improvement
|
|
187
|
+
|
|
188
|
+
### Design Decisions
|
|
189
|
+
|
|
190
|
+
**Why no separate dashboard command?**
|
|
191
|
+
- Decided against `lean-spec` defaulting to dashboard (keeps help accessible)
|
|
192
|
+
- Enhanced `stats` and `board` commands provide comprehensive views
|
|
193
|
+
- Simpler CLI surface area (fewer commands to learn)
|
|
194
|
+
- Functionality distributed where it makes most sense
|
|
195
|
+
|
|
196
|
+
**Why keep timeline command?**
|
|
197
|
+
- Originally planned for deprecation
|
|
198
|
+
- Decided to keep it as dedicated historical view
|
|
199
|
+
- No user confusion since stats/timeline serve different use cases
|
|
200
|
+
- No breaking changes needed
|
|
201
|
+
|
|
202
|
+
### Future Enhancements
|
|
203
|
+
|
|
204
|
+
- Custom velocity targets via config
|
|
205
|
+
- More granular lead time tracking (by spec type/priority)
|
|
206
|
+
- Velocity trend predictions
|
|
207
|
+
- Export capabilities (JSON, CSV)
|
|
208
|
+
- Integration with CI/CD for automated tracking
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Testing Strategy: Unified Dashboard
|
|
2
|
+
|
|
3
|
+
## Part 0: Timestamp Tracking Tests
|
|
4
|
+
|
|
5
|
+
### Timestamp Generation
|
|
6
|
+
- [ ] New spec gets `created_at` set automatically
|
|
7
|
+
- [ ] `updated_at` updates on any frontmatter change
|
|
8
|
+
- [ ] Status change to complete sets `completed_at`
|
|
9
|
+
- [ ] Transitions array tracks status changes (if enabled)
|
|
10
|
+
|
|
11
|
+
### Migration & Compatibility
|
|
12
|
+
- [ ] Existing specs without timestamps still work
|
|
13
|
+
- [ ] Timestamps inferred from dates (midnight UTC)
|
|
14
|
+
- [ ] Date fields still required (backward compat)
|
|
15
|
+
- [ ] Graceful degradation when timestamps missing
|
|
16
|
+
|
|
17
|
+
### Edge Cases
|
|
18
|
+
- [ ] Spec created and completed same day (timestamps differ)
|
|
19
|
+
- [ ] Manual timestamp editing preserved
|
|
20
|
+
- [ ] Timezone handling consistent (UTC)
|
|
21
|
+
|
|
22
|
+
## Part 1: Enhanced Stats Command Tests
|
|
23
|
+
|
|
24
|
+
### Backward Compatibility
|
|
25
|
+
- [ ] `lean-spec stats` outputs same format as before (no breaking changes)
|
|
26
|
+
- [ ] `lean-spec stats --json` matches existing JSON schema
|
|
27
|
+
- [ ] All existing filter options work (--tag, --assignee, --priority)
|
|
28
|
+
|
|
29
|
+
### New Timeline Integration
|
|
30
|
+
- [ ] `lean-spec stats --timeline` adds timeline section after stats
|
|
31
|
+
- [ ] `lean-spec stats --history` shows full historical view
|
|
32
|
+
- [ ] `lean-spec stats --velocity` shows cycle time analysis
|
|
33
|
+
- [ ] `lean-spec stats --all` combines everything
|
|
34
|
+
- [ ] Timeline data matches previous `lean-spec timeline` output
|
|
35
|
+
|
|
36
|
+
### Velocity Calculations
|
|
37
|
+
- [ ] Cycle time accurate (created_at → completed_at)
|
|
38
|
+
- [ ] Stage durations sum correctly
|
|
39
|
+
- [ ] Throughput matches manual count
|
|
40
|
+
- [ ] WIP calculation correct for any date
|
|
41
|
+
- [ ] Percentiles (P50, P90, P95) accurate
|
|
42
|
+
- [ ] Trend indicators (↑↓→) correct
|
|
43
|
+
|
|
44
|
+
### Velocity Display
|
|
45
|
+
- [ ] Shows average, median cycle time
|
|
46
|
+
- [ ] Compares to configured targets
|
|
47
|
+
- [ ] Stage durations visualized with bars
|
|
48
|
+
- [ ] Throughput trends visible (last 4 weeks)
|
|
49
|
+
- [ ] WIP stays within healthy range
|
|
50
|
+
- [ ] Graceful when no completed specs yet
|
|
51
|
+
|
|
52
|
+
### Edge Cases
|
|
53
|
+
- [ ] Empty project shows helpful message
|
|
54
|
+
- [ ] Project with no dates (no created/completed fields)
|
|
55
|
+
- [ ] Filtered results still show timeline
|
|
56
|
+
- [ ] Very large date ranges don't break layout
|
|
57
|
+
|
|
58
|
+
## Part 2: Dashboard Command Tests
|
|
59
|
+
|
|
60
|
+
### Project States
|
|
61
|
+
|
|
62
|
+
#### Empty Project
|
|
63
|
+
- [ ] Shows "No specs found" with init hint
|
|
64
|
+
- [ ] No sections rendered (clean state)
|
|
65
|
+
- [ ] Suggests `lean-spec init` to get started
|
|
66
|
+
|
|
67
|
+
#### Small Project (< 10 specs)
|
|
68
|
+
- [ ] All in-progress specs visible
|
|
69
|
+
- [ ] Summary shows accurate counts
|
|
70
|
+
- [ ] No truncation needed
|
|
71
|
+
- [ ] All sections proportional
|
|
72
|
+
|
|
73
|
+
#### Medium Project (10-50 specs)
|
|
74
|
+
- [ ] Top 5 in-progress shown by default
|
|
75
|
+
- [ ] `--expand-active` shows all
|
|
76
|
+
- [ ] Top tags displayed (limit 5)
|
|
77
|
+
- [ ] Timeline shows 14 days
|
|
78
|
+
|
|
79
|
+
#### Large Project (100+ specs)
|
|
80
|
+
- [ ] Summary remains concise
|
|
81
|
+
- [ ] Smart prioritization in "Needs Attention"
|
|
82
|
+
- [ ] Performance < 300ms
|
|
83
|
+
- [ ] No visual clutter
|
|
84
|
+
|
|
85
|
+
### Smart Insights Tests
|
|
86
|
+
|
|
87
|
+
#### Overdue Detection
|
|
88
|
+
- [ ] Specs with `due < today` and `status != complete` flagged
|
|
89
|
+
- [ ] Shows count in "Needs Attention"
|
|
90
|
+
- [ ] Lists spec names (limit 3, then "and N more")
|
|
91
|
+
|
|
92
|
+
#### Critical Priority
|
|
93
|
+
- [ ] Critical specs still planned highlighted
|
|
94
|
+
- [ ] Critical in-progress shown prominently
|
|
95
|
+
- [ ] Warning if critical overdue
|
|
96
|
+
|
|
97
|
+
#### Long-Running Detection
|
|
98
|
+
- [ ] In-progress > 14 days flagged with ⚠️
|
|
99
|
+
- [ ] Age shown next to spec name (e.g., "8d")
|
|
100
|
+
- [ ] Helps identify potential bottlenecks
|
|
101
|
+
|
|
102
|
+
#### User Assignment
|
|
103
|
+
- [ ] `--assignee alice` focuses on Alice's work
|
|
104
|
+
- [ ] Git config detection works (if configured)
|
|
105
|
+
- [ ] Shows user's active work first
|
|
106
|
+
|
|
107
|
+
#### Velocity Bottlenecks
|
|
108
|
+
- [ ] Identifies stages with longest average duration
|
|
109
|
+
- [ ] Flags if WIP exceeds target
|
|
110
|
+
- [ ] Warns if throughput declining
|
|
111
|
+
|
|
112
|
+
### Filter Tests
|
|
113
|
+
- [ ] `--tag feature` filters all sections consistently
|
|
114
|
+
- [ ] `--status in-progress` shows only in-progress
|
|
115
|
+
- [ ] `--priority high` shows only high priority
|
|
116
|
+
- [ ] Multiple filters combine with AND logic
|
|
117
|
+
- [ ] Filtered counts accurate in summary
|
|
118
|
+
|
|
119
|
+
### Display Option Tests
|
|
120
|
+
- [ ] `--compact` shows minimal view (health + attention only)
|
|
121
|
+
- [ ] `--expand-active` reveals all in-progress specs
|
|
122
|
+
- [ ] `--json` outputs valid, comprehensive JSON
|
|
123
|
+
- [ ] Unknown options show helpful error
|
|
124
|
+
|
|
125
|
+
### Integration Tests
|
|
126
|
+
|
|
127
|
+
#### Command Flow
|
|
128
|
+
- [ ] `lean-spec` defaults to dashboard
|
|
129
|
+
- [ ] `lean-spec dashboard` explicitly shows dashboard
|
|
130
|
+
- [ ] Dashboard → `lean-spec list` → dashboard (workflow)
|
|
131
|
+
- [ ] Dashboard respects .lean-spec/config.json
|
|
132
|
+
|
|
133
|
+
#### Cross-Command Consistency
|
|
134
|
+
- [ ] Dashboard counts match `lean-spec list` counts
|
|
135
|
+
- [ ] Dashboard stats match `lean-spec stats` output
|
|
136
|
+
- [ ] Dashboard activity matches `lean-spec stats --timeline`
|
|
137
|
+
|
|
138
|
+
### Visual Tests
|
|
139
|
+
|
|
140
|
+
#### Layout
|
|
141
|
+
- [ ] Sections align properly
|
|
142
|
+
- [ ] Box drawing characters render correctly
|
|
143
|
+
- [ ] Colors don't obscure information
|
|
144
|
+
- [ ] Terminal width respected (no wrapping)
|
|
145
|
+
|
|
146
|
+
#### Accessibility
|
|
147
|
+
- [ ] Works without color (NO_COLOR env var)
|
|
148
|
+
- [ ] Unicode fallback for non-supporting terminals
|
|
149
|
+
- [ ] Screen reader compatible (semantic structure)
|
|
150
|
+
|
|
151
|
+
### Performance Tests
|
|
152
|
+
- [ ] 10 specs: < 100ms
|
|
153
|
+
- [ ] 50 specs: < 200ms
|
|
154
|
+
- [ ] 100 specs: < 300ms
|
|
155
|
+
- [ ] 500 specs: < 1s
|
|
156
|
+
- [ ] Single `loadAllSpecs()` call verified
|
|
157
|
+
|
|
158
|
+
### Regression Tests
|
|
159
|
+
- [ ] Existing commands unaffected (list, board, gantt, deps)
|
|
160
|
+
- [ ] `lean-spec stats` backward compatible
|
|
161
|
+
- [ ] JSON output schemas unchanged (where applicable)
|
|
162
|
+
- [ ] All existing tests still pass
|
|
163
|
+
|
|
164
|
+
## Success Criteria
|
|
165
|
+
|
|
166
|
+
### User Experience
|
|
167
|
+
- [ ] New user runs `lean-spec`, immediately understands project state
|
|
168
|
+
- [ ] < 5 seconds to identify what needs attention
|
|
169
|
+
- [ ] Existing users don't notice breaking changes
|
|
170
|
+
- [ ] Smooth migration from timeline to stats --history
|
|
171
|
+
|
|
172
|
+
### Technical
|
|
173
|
+
- [ ] < 300ms render time for 100 specs
|
|
174
|
+
- [ ] Single `loadAllSpecs()` call in dashboard
|
|
175
|
+
- [ ] < 300 lines new code (reuse existing)
|
|
176
|
+
- [ ] No regressions in existing commands
|
|
177
|
+
|
|
178
|
+
### Business
|
|
179
|
+
- [ ] Better demo-ability for v0.2.0 launch
|
|
180
|
+
- [ ] Competitive with OpenSpec UX quality
|
|
181
|
+
- [ ] Reduces support questions about "how to see X"
|
|
182
|
+
- [ ] Positive beta tester feedback
|
package/.next/standalone/packages/ui/dist/standalone/specs/047-git-backfill-timestamps/README.md
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: complete
|
|
3
|
+
created: '2025-11-04'
|
|
4
|
+
tags:
|
|
5
|
+
- enhancement
|
|
6
|
+
- git
|
|
7
|
+
- timestamps
|
|
8
|
+
- analytics
|
|
9
|
+
- migration
|
|
10
|
+
priority: medium
|
|
11
|
+
related:
|
|
12
|
+
- 046-stats-dashboard-refactor
|
|
13
|
+
- 014-complete-custom-frontmatter
|
|
14
|
+
created_at: '2025-11-04T22:58:23+08:00'
|
|
15
|
+
updated_at: '2025-11-04T15:08:31.110Z'
|
|
16
|
+
assignee: Marvin Zhang
|
|
17
|
+
updated: '2025-11-04'
|
|
18
|
+
completed_at: '2025-11-04T15:08:31.110Z'
|
|
19
|
+
completed: '2025-11-04'
|
|
20
|
+
transitions:
|
|
21
|
+
- status: complete
|
|
22
|
+
at: '2025-11-04T15:08:31.110Z'
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Backfill Timestamp Frontmatter from Git History
|
|
26
|
+
|
|
27
|
+
> **Status**: ✅ Complete · **Priority**: Medium · **Created**: 2025-11-04 · **Tags**: enhancement, git, timestamps, analytics, migration
|
|
28
|
+
> **Assignee**: Marvin Zhang · **Reviewer**: TBD
|
|
29
|
+
|
|
30
|
+
**Project**: lean-spec
|
|
31
|
+
**Team**: Core Development
|
|
32
|
+
|
|
33
|
+
## Overview
|
|
34
|
+
|
|
35
|
+
Add a utility command to backfill created_at, updated_at, and completed_at timestamps for existing specs by analyzing their git commit history. This will enable velocity tracking and analytics for all historical specs.
|
|
36
|
+
|
|
37
|
+
**Current State:**
|
|
38
|
+
- ✅ Timestamp fields defined in frontmatter schema (`created_at`, `updated_at`, `completed_at`, `transitions`)
|
|
39
|
+
- ✅ New specs automatically get timestamps via `enrichWithTimestamps()`
|
|
40
|
+
- ❌ Existing specs lack timestamp data (only have date fields: `created`, `completed`)
|
|
41
|
+
- ❌ No way to retroactively populate timestamps from git history
|
|
42
|
+
|
|
43
|
+
**Why This Matters:**
|
|
44
|
+
- **Analytics** - Can't calculate cycle times, lead times, or velocity metrics without timestamps
|
|
45
|
+
- **Historical insight** - Valuable project data is already in git history, just not in frontmatter
|
|
46
|
+
- **Completeness** - New specs get timestamps automatically, but old specs are left behind
|
|
47
|
+
|
|
48
|
+
**Goals:**
|
|
49
|
+
1. Extract first/last commit timestamps from git history for each spec
|
|
50
|
+
2. Backfill `created_at`, `updated_at`, `completed_at` fields where missing
|
|
51
|
+
3. Provide safe, idempotent command that doesn't overwrite existing timestamps
|
|
52
|
+
4. Enable full velocity tracking across entire spec history
|
|
53
|
+
|
|
54
|
+
## Design
|
|
55
|
+
|
|
56
|
+
### Command Interface
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Backfill all specs (timestamps only)
|
|
60
|
+
lean-spec backfill
|
|
61
|
+
|
|
62
|
+
# Backfill with additional fields
|
|
63
|
+
lean-spec backfill --assignee # Add assignee from git author
|
|
64
|
+
lean-spec backfill --transitions # Reconstruct full status history
|
|
65
|
+
lean-spec backfill --all # All available fields
|
|
66
|
+
|
|
67
|
+
# Dry run (show what would be updated)
|
|
68
|
+
lean-spec backfill --dry-run
|
|
69
|
+
|
|
70
|
+
# Backfill specific spec(s)
|
|
71
|
+
lean-spec backfill 014 046
|
|
72
|
+
lean-spec backfill my-feature
|
|
73
|
+
|
|
74
|
+
# Force overwrite existing values (rare case)
|
|
75
|
+
lean-spec backfill --force
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Git Analysis Strategy
|
|
79
|
+
|
|
80
|
+
For each spec's `README.md`:
|
|
81
|
+
|
|
82
|
+
**Core timestamps (always backfilled):**
|
|
83
|
+
|
|
84
|
+
1. **created_at** - Use timestamp from **first commit** that created the file
|
|
85
|
+
```bash
|
|
86
|
+
git log --follow --format="%aI" --diff-filter=A -- specs/XXX-name/README.md | tail -1
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
2. **updated_at** - Use timestamp from **most recent commit**
|
|
90
|
+
```bash
|
|
91
|
+
git log --format="%aI" -n 1 -- specs/XXX-name/README.md
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
3. **completed_at** - Heuristic based on git history:
|
|
95
|
+
- If `status: complete` in frontmatter, use timestamp of commit that changed status to complete
|
|
96
|
+
- Fallback: Use timestamp when `completed` date field was added
|
|
97
|
+
- If neither exists, leave `completed_at` empty
|
|
98
|
+
|
|
99
|
+
**Optional fields (with flags):**
|
|
100
|
+
|
|
101
|
+
4. **assignee** (via `--assignee` flag)
|
|
102
|
+
- Extract from first commit author: `git log --follow --format="%an" --diff-filter=A`
|
|
103
|
+
- Only sets if field is currently empty
|
|
104
|
+
- Use case: Attribute specs to their original authors
|
|
105
|
+
|
|
106
|
+
5. **transitions[]** (via `--transitions` flag)
|
|
107
|
+
- Parse all commits that modified frontmatter `status:` field
|
|
108
|
+
- Build complete status change history: `planned → in-progress → complete`
|
|
109
|
+
- Uses `git log -p` to inspect frontmatter diffs
|
|
110
|
+
- Useful for: Cycle time analysis, understanding workflow patterns
|
|
111
|
+
|
|
112
|
+
6. **updated** date field (automatically synced with `updated_at`)
|
|
113
|
+
- Convert `updated_at` timestamp to YYYY-MM-DD format
|
|
114
|
+
- Keeps date and timestamp fields in sync
|
|
115
|
+
|
|
116
|
+
### Implementation Approach
|
|
117
|
+
|
|
118
|
+
**New file**: `src/commands/backfill-timestamps.ts`
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
interface BackfillResult {
|
|
122
|
+
specPath: string;
|
|
123
|
+
created_at?: string;
|
|
124
|
+
updated_at?: string;
|
|
125
|
+
completed_at?: string;
|
|
126
|
+
assignee?: string;
|
|
127
|
+
transitions?: StatusTransition[];
|
|
128
|
+
source: 'git' | 'existing' | 'skipped';
|
|
129
|
+
reason?: string;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async function backfillTimestamps(
|
|
133
|
+
options: {
|
|
134
|
+
dryRun?: boolean;
|
|
135
|
+
force?: boolean;
|
|
136
|
+
includeAssignee?: boolean;
|
|
137
|
+
includeTransitions?: boolean;
|
|
138
|
+
specs?: string[]; // specific specs to target
|
|
139
|
+
}
|
|
140
|
+
): Promise<BackfillResult[]>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Key functions:**
|
|
144
|
+
|
|
145
|
+
1. `getFirstCommitTimestamp(specPath: string): Promise<string | null>`
|
|
146
|
+
- Uses `git log --follow --diff-filter=A` to find creation timestamp
|
|
147
|
+
|
|
148
|
+
2. `getLastCommitTimestamp(specPath: string): Promise<string | null>`
|
|
149
|
+
- Uses `git log -n 1` to find most recent modification
|
|
150
|
+
|
|
151
|
+
3. `getCompletionTimestamp(specPath: string): Promise<string | null>`
|
|
152
|
+
- Searches commit history for status change to `complete`
|
|
153
|
+
- Uses `git log -p` to inspect frontmatter changes
|
|
154
|
+
|
|
155
|
+
4. `getFirstCommitAuthor(specPath: string): Promise<string | null>` (optional)
|
|
156
|
+
- Extracts author name from first commit
|
|
157
|
+
- Uses `git log --follow --format="%an" --diff-filter=A`
|
|
158
|
+
|
|
159
|
+
5. `parseStatusTransitions(specPath: string): Promise<StatusTransition[]>` (optional)
|
|
160
|
+
- Parses all commits that modified `status:` field
|
|
161
|
+
- Reconstructs full transition history with timestamps
|
|
162
|
+
|
|
163
|
+
6. `applyBackfillUpdates(specPath: string, data: BackfillData, force: boolean)`
|
|
164
|
+
- Only updates missing fields (unless `--force`)
|
|
165
|
+
- Preserves existing timestamps
|
|
166
|
+
- Uses `updateFrontmatter()` from existing API
|
|
167
|
+
|
|
168
|
+
### Safety Measures
|
|
169
|
+
|
|
170
|
+
1. **Idempotent** - Running multiple times doesn't break anything
|
|
171
|
+
2. **Non-destructive** - Never overwrites existing timestamps (unless `--force`)
|
|
172
|
+
3. **Dry-run mode** - Preview changes before applying
|
|
173
|
+
4. **Validation** - Verify git history exists before attempting backfill
|
|
174
|
+
5. **Error handling** - Graceful failures for specs without git history
|
|
175
|
+
|
|
176
|
+
### Edge Cases
|
|
177
|
+
|
|
178
|
+
| Scenario | Behavior |
|
|
179
|
+
|----------|----------|
|
|
180
|
+
| Spec already has timestamps | Skip (unless `--force`) |
|
|
181
|
+
| Spec not in git history | Skip with warning |
|
|
182
|
+
| Git repo not available | Error with clear message |
|
|
183
|
+
| Spec was renamed/moved | Use `--follow` to track history |
|
|
184
|
+
| Multiple completion events | Use first transition to `complete` |
|
|
185
|
+
| Assignee already set | Skip assignee (unless `--force`) |
|
|
186
|
+
| Transitions already exist | Merge with git-derived history |
|
|
187
|
+
| Multiple authors | Use first commit author for assignee |
|
|
188
|
+
|
|
189
|
+
## Plan
|
|
190
|
+
|
|
191
|
+
- [ ] Implement git timestamp extraction utilities
|
|
192
|
+
- [ ] `getFirstCommitTimestamp()` - file creation
|
|
193
|
+
- [ ] `getLastCommitTimestamp()` - last modification
|
|
194
|
+
- [ ] `getCompletionTimestamp()` - status change detection
|
|
195
|
+
- [ ] `getFirstCommitAuthor()` - spec author (optional)
|
|
196
|
+
- [ ] `parseStatusTransitions()` - full status history (optional)
|
|
197
|
+
- [ ] Build backfill command with CLI interface
|
|
198
|
+
- [ ] Support `--dry-run` flag
|
|
199
|
+
- [ ] Support `--force` flag
|
|
200
|
+
- [ ] Support `--assignee` flag (optional backfill)
|
|
201
|
+
- [ ] Support `--transitions` flag (optional backfill)
|
|
202
|
+
- [ ] Support `--all` flag (all optional fields)
|
|
203
|
+
- [ ] Support targeting specific specs
|
|
204
|
+
- [ ] Add safety validations
|
|
205
|
+
- [ ] Check git repo exists
|
|
206
|
+
- [ ] Verify spec file exists in git history
|
|
207
|
+
- [ ] Prevent overwrites unless forced
|
|
208
|
+
- [ ] Integration with existing frontmatter system
|
|
209
|
+
- [ ] Use `updateFrontmatter()` API
|
|
210
|
+
- [ ] Preserve existing timestamp values
|
|
211
|
+
- [ ] Sync `updated` date field with `updated_at`
|
|
212
|
+
- [ ] Add comprehensive tests
|
|
213
|
+
- [ ] Mock git commands
|
|
214
|
+
- [ ] Test dry-run mode
|
|
215
|
+
- [ ] Test idempotency
|
|
216
|
+
- [ ] Test optional flags (assignee, transitions)
|
|
217
|
+
- [ ] Test edge cases (no git history, renamed files)
|
|
218
|
+
- [ ] Documentation
|
|
219
|
+
- [ ] Update CLI reference
|
|
220
|
+
- [ ] Add migration guide section
|
|
221
|
+
- [ ] Document timestamp semantics
|
|
222
|
+
- [ ] Document optional backfill fields
|
|
223
|
+
|
|
224
|
+
## Test
|
|
225
|
+
|
|
226
|
+
**Unit Tests:**
|
|
227
|
+
- [ ] Git timestamp extraction works correctly
|
|
228
|
+
- [ ] Dry-run doesn't modify files
|
|
229
|
+
- [ ] Force flag overwrites existing values
|
|
230
|
+
- [ ] Non-force preserves existing timestamps
|
|
231
|
+
- [ ] Handles missing git history gracefully
|
|
232
|
+
- [ ] Handles renamed/moved specs with `--follow`
|
|
233
|
+
- [ ] Optional flags work correctly (assignee, transitions)
|
|
234
|
+
|
|
235
|
+
**Integration Tests:**
|
|
236
|
+
- [ ] Backfill command updates all specs in test repo
|
|
237
|
+
- [ ] Can target specific specs by name or number
|
|
238
|
+
- [ ] Progress output is clear and informative
|
|
239
|
+
- [ ] Error messages are actionable
|
|
240
|
+
|
|
241
|
+
**Manual Verification:**
|
|
242
|
+
- [ ] Run on lean-spec's own specs (dogfooding)
|
|
243
|
+
- [ ] Verify `lean-spec stats` shows velocity data after backfill
|
|
244
|
+
- [ ] Check that re-running is safe (idempotent)
|
|
245
|
+
|
|
246
|
+
**Expected Output (dry-run):**
|
|
247
|
+
```
|
|
248
|
+
Analyzing git history for 18 specs...
|
|
249
|
+
|
|
250
|
+
046-stats-dashboard-refactor
|
|
251
|
+
created_at: 2025-11-04T12:57:25Z (git)
|
|
252
|
+
updated_at: 2025-11-04T14:18:46Z (git)
|
|
253
|
+
completed_at: 2025-11-04T13:10:54Z (existing)
|
|
254
|
+
assignee: Marvin Zhang (git) [--assignee flag]
|
|
255
|
+
transitions: 3 status changes (git) [--transitions flag]
|
|
256
|
+
|
|
257
|
+
014-complete-custom-frontmatter
|
|
258
|
+
created_at: 2025-11-02T05:11:37Z (git)
|
|
259
|
+
updated_at: 2025-11-04T07:39:49Z (git)
|
|
260
|
+
completed_at: 2025-11-04T07:39:49Z (git - inferred from status)
|
|
261
|
+
assignee: (existing - alice)
|
|
262
|
+
|
|
263
|
+
...
|
|
264
|
+
|
|
265
|
+
Summary:
|
|
266
|
+
18 specs analyzed
|
|
267
|
+
16 would be updated (timestamps)
|
|
268
|
+
5 would get assignee (with --assignee)
|
|
269
|
+
12 would get transitions (with --transitions)
|
|
270
|
+
2 already have complete data
|
|
271
|
+
|
|
272
|
+
Run without --dry-run to apply changes.
|
|
273
|
+
Run with --all to include optional fields.
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
## Notes
|
|
277
|
+
|
|
278
|
+
### Why Not Store in Git Metadata Only?
|
|
279
|
+
|
|
280
|
+
We could just query git history on-demand for analytics, but:
|
|
281
|
+
- ❌ Performance: Git queries are slow for large repos
|
|
282
|
+
- ❌ Portability: Specs lose metadata if moved outside git
|
|
283
|
+
- ❌ Consistency: Frontmatter is source of truth for all metadata
|
|
284
|
+
|
|
285
|
+
### Alternative: Git Hooks
|
|
286
|
+
|
|
287
|
+
Could automatically update `updated_at` on commit via git hooks, but:
|
|
288
|
+
- 👎 Requires setup in every repo
|
|
289
|
+
- 👎 Doesn't help with existing specs
|
|
290
|
+
- 👍 Could complement backfill for ongoing maintenance
|
|
291
|
+
|
|
292
|
+
### Future Enhancements
|
|
293
|
+
|
|
294
|
+
- **Automated backfill on `lean-spec init`** - Offer to backfill when initializing in existing project
|
|
295
|
+
- **Watch mode** - Continuously sync timestamps from git (via git hooks or daemon)
|
|
296
|
+
- **GitHub API integration** - Backfill `issue`, `pr`, `reviewer` from GitHub metadata
|
|
297
|
+
- **Commit message parsing** - Extract additional metadata from commit messages
|
|
298
|
+
- **Multi-author attribution** - Track all contributors, not just first author
|
|
299
|
+
|
|
300
|
+
### Scope Boundaries
|
|
301
|
+
|
|
302
|
+
**Out of scope for v1:**
|
|
303
|
+
- ❌ GitHub API integration (issue/PR linking)
|
|
304
|
+
- ❌ Reviewer inference (no clear git signal)
|
|
305
|
+
- ❌ Epic/milestone extraction (requires external PM tools)
|
|
306
|
+
|
|
307
|
+
**These could be separate features:**
|
|
308
|
+
- `lean-spec sync-github` - Pull issue/PR metadata from GitHub
|
|
309
|
+
- `lean-spec import-pm` - Import epic/milestone from Jira/ADO
|
|
310
|
+
|
|
311
|
+
### Related Specs
|
|
312
|
+
|
|
313
|
+
- **046-stats-dashboard-refactor** - Stats command will benefit from complete timestamp data
|
|
314
|
+
- **014-complete-custom-frontmatter** - Timestamp fields are part of frontmatter schema
|