@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,338 @@
|
|
|
1
|
+
# Design: Migration Command
|
|
2
|
+
|
|
3
|
+
Technical design for `lean-spec migrate` command.
|
|
4
|
+
|
|
5
|
+
## Command Interface
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Show generic migration instructions
|
|
9
|
+
lean-spec migrate <input-path>
|
|
10
|
+
lean-spec migrate ./docs/adr/
|
|
11
|
+
lean-spec migrate ./docs/rfcs/
|
|
12
|
+
lean-spec migrate ./specs/linear-export/
|
|
13
|
+
|
|
14
|
+
# AI-assisted migration (AI figures out the format)
|
|
15
|
+
lean-spec migrate <input-path> --with copilot
|
|
16
|
+
lean-spec migrate <input-path> --with claude
|
|
17
|
+
lean-spec migrate <input-path> --with gemini
|
|
18
|
+
|
|
19
|
+
# Options
|
|
20
|
+
lean-spec migrate <input-path> --dry-run # Preview without changes
|
|
21
|
+
lean-spec migrate <input-path> --batch-size 10 # Process N docs at a time
|
|
22
|
+
lean-spec migrate <input-path> --skip-validation # Don't validate after
|
|
23
|
+
lean-spec migrate <input-path> --backfill # Auto-run backfill after migration
|
|
24
|
+
|
|
25
|
+
# After migration: Backfill metadata from git history
|
|
26
|
+
lean-spec backfill # Timestamps only
|
|
27
|
+
lean-spec backfill --assignee # Include assignee from git author
|
|
28
|
+
lean-spec backfill --all # All available metadata
|
|
29
|
+
lean-spec backfill --dry-run # Preview what would be backfilled
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Supported Sources
|
|
33
|
+
|
|
34
|
+
**Primary Sources** (mainstream SDD tools):
|
|
35
|
+
|
|
36
|
+
1. **[OpenSpec](https://github.com/Fission-AI/OpenSpec)**
|
|
37
|
+
- **Source path**: `openspec/specs/` (current state) + `openspec/changes/archive/` (completed changes)
|
|
38
|
+
- **Folder structure**: Separate directories for specs and changes
|
|
39
|
+
- **Migration challenge**: Merge specs + completed changes into single `specs/` directory
|
|
40
|
+
- **File organization**: Each capability in separate folder with spec.md
|
|
41
|
+
|
|
42
|
+
2. **[GitHub spec-kit](https://github.com/github/spec-kit)**
|
|
43
|
+
- **Source path**: `.specify/specs/` (note the dot-prefix!)
|
|
44
|
+
- **Folder structure**: `###-feature-name/` (numbered features)
|
|
45
|
+
- **Migration challenge**: Already numbered, but has multiple files per feature (spec.md, plan.md, tasks.md, etc.)
|
|
46
|
+
- **File organization**: Multi-file per feature, consolidate or preserve as sub-specs
|
|
47
|
+
|
|
48
|
+
3. **Document Collections** - Various folder-based specs
|
|
49
|
+
- **Source path**: Varies (e.g., `docs/adr/`, `rfcs/`, etc.)
|
|
50
|
+
- **Folder structure**: Varies widely (ADR: `docs/adr/####-title.md`, RFC: `rfcs/0042-name.md`)
|
|
51
|
+
- **Migration challenge**: Flat folders → structured `specs/###-name/` hierarchy
|
|
52
|
+
- **File organization**: Single files → folder-based organization
|
|
53
|
+
|
|
54
|
+
**External Systems** (cautious approach):
|
|
55
|
+
- **Linear, Jira, Confluence, Notion**: Support **exported documents only**
|
|
56
|
+
- **Rationale**: API integration requires authentication, API keys, rate limiting, and ongoing maintenance
|
|
57
|
+
- **Migration path**: Export to markdown/JSON, then migrate those files
|
|
58
|
+
- **No direct API integration**: Keeps tool simple, secure, and maintenance-free
|
|
59
|
+
|
|
60
|
+
**Key Migration Tasks:**
|
|
61
|
+
1. **Frontmatter generation** (PRIMARY CHALLENGE): Use `lean-spec backfill` to extract:
|
|
62
|
+
- `status` - from git history or document content
|
|
63
|
+
- `priority` - infer from labels/tags or set default
|
|
64
|
+
- `tags` - extract from existing metadata or directory structure
|
|
65
|
+
- `created_at`, `updated_at`, `completed_at` - from git commits
|
|
66
|
+
- `assignee` - from git author with `--assignee` flag
|
|
67
|
+
2. **Folder reorganization** (VARIES BY SOURCE):
|
|
68
|
+
- **spec-kit**: Already compatible! Keep `specs/###-name/` as-is
|
|
69
|
+
- **OpenSpec**: Merge `openspec/specs/` + `openspec/changes/archive/` → `specs/###-name/`
|
|
70
|
+
- **ADR/RFC**: Flat files → folder hierarchy with renumbering
|
|
71
|
+
3. **Content preservation**: Keep as-is (LeanSpec doesn't enforce format)
|
|
72
|
+
4. **System prompts**: Optionally migrate AGENTS.md, .cursorrules for AI continuity
|
|
73
|
+
|
|
74
|
+
## Migration Modes
|
|
75
|
+
|
|
76
|
+
### Mode 1: Instruction-Based (Default)
|
|
77
|
+
|
|
78
|
+
Outputs generic migration prompt for user to copy to any AI tool:
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
# LeanSpec Migration Instructions
|
|
82
|
+
|
|
83
|
+
## Source Location
|
|
84
|
+
./docs/adr/ (23 documents found)
|
|
85
|
+
|
|
86
|
+
## Migration Prompt
|
|
87
|
+
Copy this prompt to your AI assistant (Copilot, Claude, ChatGPT, etc.):
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
You are helping migrate specification documents to LeanSpec format.
|
|
92
|
+
|
|
93
|
+
**Source:** ./docs/adr/
|
|
94
|
+
|
|
95
|
+
**Your Task:**
|
|
96
|
+
1. Analyze the source documents to understand their format and structure
|
|
97
|
+
2. For each document, extract:
|
|
98
|
+
- Title/name
|
|
99
|
+
- Status (map to: planned, in-progress, complete, archived)
|
|
100
|
+
- Creation date
|
|
101
|
+
- Priority (if present)
|
|
102
|
+
- Main content sections
|
|
103
|
+
- Relationships to other documents
|
|
104
|
+
|
|
105
|
+
3. Migrate each document by running these commands:
|
|
106
|
+
|
|
107
|
+
# Create spec
|
|
108
|
+
lean-spec create <name>
|
|
109
|
+
|
|
110
|
+
# Set metadata (NEVER edit frontmatter manually)
|
|
111
|
+
lean-spec update <name> --status <status>
|
|
112
|
+
lean-spec update <name> --priority <priority>
|
|
113
|
+
lean-spec update <name> --tags <tag1,tag2>
|
|
114
|
+
|
|
115
|
+
# Edit content with your preferred tool
|
|
116
|
+
# Map original sections to LeanSpec structure:
|
|
117
|
+
# - Overview: Problem statement and context
|
|
118
|
+
# - Design: Technical approach and decisions
|
|
119
|
+
# - Plan: Implementation steps (if applicable)
|
|
120
|
+
# - Test: Validation criteria (if applicable)
|
|
121
|
+
# - Notes: Additional context, trade-offs, alternatives
|
|
122
|
+
|
|
123
|
+
4. After migration, run:
|
|
124
|
+
|
|
125
|
+
lean-spec validate # Check for issues
|
|
126
|
+
lean-spec board # Verify migration
|
|
127
|
+
|
|
128
|
+
**Important Rules:**
|
|
129
|
+
- Preserve decision rationale and context
|
|
130
|
+
- Map status appropriately to LeanSpec states
|
|
131
|
+
- Link related specs using `related` field (manual frontmatter edit)
|
|
132
|
+
- Follow LeanSpec first principles: clarity over completeness
|
|
133
|
+
- Keep specs under 400 lines (split if needed)
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Mode 2: AI-Assisted Automation
|
|
139
|
+
|
|
140
|
+
When `--with <provider>` specified, fully automated:
|
|
141
|
+
|
|
142
|
+
**Pre-flight Checks:**
|
|
143
|
+
```typescript
|
|
144
|
+
interface AIToolCheck {
|
|
145
|
+
provider: 'copilot' | 'claude' | 'gemini';
|
|
146
|
+
cliCommand: string;
|
|
147
|
+
installed: boolean;
|
|
148
|
+
version?: string;
|
|
149
|
+
compatible: boolean;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
async function verifyAITool(provider: string): Promise<AIToolCheck> {
|
|
153
|
+
const tools = {
|
|
154
|
+
copilot: 'github-copilot-cli',
|
|
155
|
+
claude: 'claude',
|
|
156
|
+
gemini: 'gemini-cli'
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const command = tools[provider];
|
|
160
|
+
const installed = await checkInstalled(command);
|
|
161
|
+
|
|
162
|
+
if (!installed) {
|
|
163
|
+
throw new Error(
|
|
164
|
+
`${provider} CLI not found. Install: npm install -g ${command}`
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const version = await getVersion(command);
|
|
169
|
+
const compatible = checkCompatibility(version);
|
|
170
|
+
|
|
171
|
+
return { provider, cliCommand: command, installed, version, compatible };
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Migration Execution:**
|
|
176
|
+
```typescript
|
|
177
|
+
interface MigrationConfig {
|
|
178
|
+
inputPath: string;
|
|
179
|
+
aiProvider: 'copilot' | 'claude' | 'gemini';
|
|
180
|
+
dryRun?: boolean;
|
|
181
|
+
batchSize?: number;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async function migrateWithAI(config: MigrationConfig) {
|
|
185
|
+
// 1. Verify AI tool
|
|
186
|
+
const aiTool = await verifyAITool(config.aiProvider);
|
|
187
|
+
|
|
188
|
+
// 2. Scan source documents (format-agnostic)
|
|
189
|
+
const docs = await scanDocuments(config.inputPath);
|
|
190
|
+
|
|
191
|
+
// 3. Generate generic migration prompt
|
|
192
|
+
const batches = chunk(docs, config.batchSize || 10);
|
|
193
|
+
|
|
194
|
+
for (const batch of batches) {
|
|
195
|
+
const prompt = generateMigrationPrompt(batch);
|
|
196
|
+
|
|
197
|
+
// 4. Execute via AI CLI
|
|
198
|
+
await executeAICLI(aiTool.cliCommand, prompt);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// 5. Validate results
|
|
202
|
+
await runValidation();
|
|
203
|
+
|
|
204
|
+
// 6. Generate migration report
|
|
205
|
+
return generateReport();
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function generateMigrationPrompt(docs: string[]): string {
|
|
209
|
+
return `
|
|
210
|
+
Migrate these documents to LeanSpec format.
|
|
211
|
+
|
|
212
|
+
SOURCE DOCUMENTS:
|
|
213
|
+
${docs.map(d => d.content).join('\n---\n')}
|
|
214
|
+
|
|
215
|
+
TASK:
|
|
216
|
+
1. Analyze document format and structure
|
|
217
|
+
2. Extract metadata (title, status, dates, priority)
|
|
218
|
+
3. For each document, execute:
|
|
219
|
+
- lean-spec create <name>
|
|
220
|
+
- lean-spec update <name> --status <status>
|
|
221
|
+
- lean-spec update <name> --priority <priority>
|
|
222
|
+
- lean-spec update <name> --tags <tags>
|
|
223
|
+
- Edit content to match LeanSpec structure
|
|
224
|
+
|
|
225
|
+
4. Preserve decision rationale and relationships
|
|
226
|
+
5. Keep specs under 400 lines
|
|
227
|
+
|
|
228
|
+
Execute migration commands now.
|
|
229
|
+
`;
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## AI Provider Integration
|
|
234
|
+
|
|
235
|
+
**AI CLI Tool Registry:**
|
|
236
|
+
```typescript
|
|
237
|
+
interface AICliTool {
|
|
238
|
+
name: 'copilot' | 'claude' | 'gemini';
|
|
239
|
+
cliCommand: string;
|
|
240
|
+
installCmd: string;
|
|
241
|
+
versionCmd: string;
|
|
242
|
+
minVersion: string;
|
|
243
|
+
executePattern: (prompt: string) => string;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const AI_CLI_TOOLS: Record<string, AICliTool> = {
|
|
247
|
+
copilot: {
|
|
248
|
+
name: 'copilot',
|
|
249
|
+
cliCommand: 'github-copilot-cli',
|
|
250
|
+
installCmd: 'npm install -g @githubnext/github-copilot-cli',
|
|
251
|
+
versionCmd: 'github-copilot-cli --version',
|
|
252
|
+
minVersion: '0.1.0',
|
|
253
|
+
executePattern: (prompt) => `echo "${prompt}" | github-copilot-cli --execute`
|
|
254
|
+
},
|
|
255
|
+
claude: {
|
|
256
|
+
name: 'claude',
|
|
257
|
+
cliCommand: 'claude',
|
|
258
|
+
installCmd: 'pip install claude-cli',
|
|
259
|
+
versionCmd: 'claude --version',
|
|
260
|
+
minVersion: '1.0.0',
|
|
261
|
+
executePattern: (prompt) => `claude --prompt "${prompt}" --execute`
|
|
262
|
+
},
|
|
263
|
+
gemini: {
|
|
264
|
+
name: 'gemini',
|
|
265
|
+
cliCommand: 'gemini-cli',
|
|
266
|
+
installCmd: 'npm install -g @google/gemini-cli',
|
|
267
|
+
versionCmd: 'gemini-cli --version',
|
|
268
|
+
minVersion: '1.0.0',
|
|
269
|
+
executePattern: (prompt) => `gemini-cli --prompt "${prompt}" --auto`
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
**Pre-flight Verification:**
|
|
275
|
+
```typescript
|
|
276
|
+
async function verifyAndExecute(provider: string, inputPath: string) {
|
|
277
|
+
const tool = AI_CLI_TOOLS[provider];
|
|
278
|
+
|
|
279
|
+
// 1. Check if installed
|
|
280
|
+
const installed = await commandExists(tool.cliCommand);
|
|
281
|
+
if (!installed) {
|
|
282
|
+
console.error(`❌ ${tool.name} CLI not found`);
|
|
283
|
+
console.error(` Install: ${tool.installCmd}`);
|
|
284
|
+
process.exit(1);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// 2. Check version
|
|
288
|
+
const version = await getVersion(tool.versionCmd);
|
|
289
|
+
if (!satisfiesVersion(version, tool.minVersion)) {
|
|
290
|
+
console.error(`❌ ${tool.name} version ${version} too old`);
|
|
291
|
+
console.error(` Required: >=${tool.minVersion}`);
|
|
292
|
+
process.exit(1);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
console.log(`✓ ${tool.name} CLI verified (v${version})`);
|
|
296
|
+
|
|
297
|
+
// 3. Execute migration
|
|
298
|
+
await executeMigration(tool, inputPath);
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Error Handling
|
|
303
|
+
|
|
304
|
+
**Common Error Scenarios:**
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# AI CLI not found
|
|
308
|
+
$ lean-spec migrate ./docs/adr --with copilot
|
|
309
|
+
❌ copilot CLI not found
|
|
310
|
+
Install: npm install -g @githubnext/github-copilot-cli
|
|
311
|
+
Or run without --with flag for manual instructions
|
|
312
|
+
|
|
313
|
+
# AI CLI outdated
|
|
314
|
+
$ lean-spec migrate ./docs/adr --with claude
|
|
315
|
+
❌ claude version 0.5.0 too old
|
|
316
|
+
Required: >=1.0.0
|
|
317
|
+
Update: pip install --upgrade claude-cli
|
|
318
|
+
|
|
319
|
+
# No documents found
|
|
320
|
+
$ lean-spec migrate ./docs/empty --with gemini
|
|
321
|
+
❌ No documents found in ./docs/empty
|
|
322
|
+
Check path and try again
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Error Handling Strategy:**
|
|
326
|
+
- **Dry run first**: Preview changes before applying
|
|
327
|
+
- **Validation**: Run `lean-spec validate` after migration
|
|
328
|
+
- **Rollback**: Keep source docs unchanged
|
|
329
|
+
- **Conflict resolution**: Detect duplicate names/IDs, prompt user
|
|
330
|
+
- **Partial migration**: Continue on errors, report summary
|
|
331
|
+
|
|
332
|
+
## Migration Examples
|
|
333
|
+
|
|
334
|
+
See [EXAMPLES.md](./EXAMPLES.md) for detailed folder reorganization examples showing:
|
|
335
|
+
- Source folder structure from each tool
|
|
336
|
+
- Target LeanSpec folder structure
|
|
337
|
+
- AI commands to reorganize files
|
|
338
|
+
- What stays the same (content) vs what changes (organization)
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
# Migration Examples: Metadata & Folder Organization
|
|
2
|
+
|
|
3
|
+
The key migration challenges vary by source tool:
|
|
4
|
+
1. **Metadata/Frontmatter** (ALL sources) - Use `lean-spec backfill`
|
|
5
|
+
2. **Folder organization** (OpenSpec, ADR) - Reorganize into `specs/###-name/`
|
|
6
|
+
3. **spec-kit** - Already compatible! Just needs frontmatter
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Example 1: spec-kit → LeanSpec (Easiest Migration)
|
|
11
|
+
|
|
12
|
+
### Source Structure (spec-kit)
|
|
13
|
+
|
|
14
|
+
**Source path**: `.specify/specs/` (not `specs/`!)
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
.specify/
|
|
18
|
+
└── specs/
|
|
19
|
+
├── 001-task-management/
|
|
20
|
+
│ ├── spec.md # Feature specification
|
|
21
|
+
│ ├── plan.md # Implementation plan
|
|
22
|
+
│ ├── tasks.md # Task list
|
|
23
|
+
│ └── contracts/
|
|
24
|
+
│ └── api.yml
|
|
25
|
+
├── 002-user-authentication/
|
|
26
|
+
│ ├── spec.md
|
|
27
|
+
│ └── plan.md
|
|
28
|
+
└── 003-notifications/
|
|
29
|
+
└── spec.md
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Target Structure (LeanSpec)
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
specs/
|
|
36
|
+
├── 001-task-management/ # ✅ Already compatible!
|
|
37
|
+
│ ├── README.md # Rename: spec.md → README.md
|
|
38
|
+
│ ├── plan.md # ✅ Keep as-is (sub-spec)
|
|
39
|
+
│ ├── tasks.md # ✅ Keep as-is (sub-spec)
|
|
40
|
+
│ └── contracts/ # ✅ Keep as-is
|
|
41
|
+
│ └── api.yml
|
|
42
|
+
├── 002-user-authentication/ # ✅ Already compatible!
|
|
43
|
+
│ ├── README.md
|
|
44
|
+
│ └── plan.md
|
|
45
|
+
└── 003-notifications/ # ✅ Already compatible!
|
|
46
|
+
└── README.md
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Migration Process
|
|
50
|
+
|
|
51
|
+
**Folder reorganization**: Move from `.specify/specs/` to `specs/` and rename spec.md → README.md
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Move and rename in one go
|
|
55
|
+
mv .specify/specs specs/
|
|
56
|
+
find specs -name 'spec.md' -execdir mv {} README.md \;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Metadata generation** (PRIMARY CHALLENGE): Use `lean-spec backfill`
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Generate frontmatter from git history
|
|
63
|
+
lean-spec backfill --assignee --all
|
|
64
|
+
|
|
65
|
+
# This extracts:
|
|
66
|
+
# - created_at: from first git commit
|
|
67
|
+
# - updated_at: from last git commit
|
|
68
|
+
# - completed_at: from status change to complete
|
|
69
|
+
# - assignee: from git author
|
|
70
|
+
# - status: inferred from git/content (defaults to 'planned')
|
|
71
|
+
# - priority: defaults to 'medium' (can manually adjust after)
|
|
72
|
+
# - tags: extracted from folder name or defaults (can manually adjust after)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Result**: Each spec now has frontmatter:
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
---
|
|
79
|
+
status: complete
|
|
80
|
+
created_at: '2024-03-15T10:23:45Z'
|
|
81
|
+
updated_at: '2024-11-08T14:30:12Z'
|
|
82
|
+
completed_at: '2024-03-20T16:45:00Z'
|
|
83
|
+
assignee: Alice Chen
|
|
84
|
+
priority: high
|
|
85
|
+
tags:
|
|
86
|
+
- product
|
|
87
|
+
- mvp
|
|
88
|
+
---
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Key Point**: spec-kit already has the right folder structure! Migration is mostly about metadata.
|
|
92
|
+
|
|
93
|
+
### Source Structure (OpenSpec)
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
openspec/
|
|
97
|
+
├── specs/ # Current state
|
|
98
|
+
│ ├── auth/spec.md
|
|
99
|
+
│ ├── api-gateway/spec.md
|
|
100
|
+
│ └── user-management/spec.md
|
|
101
|
+
└── changes/archive/ # Completed changes
|
|
102
|
+
└── 2024-11-15-oauth-integration/
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Target Structure (LeanSpec)
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
specs/
|
|
109
|
+
├── 001-user-authentication/README.md
|
|
110
|
+
├── 002-api-gateway/README.md
|
|
111
|
+
└── 003-user-management/README.md
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Migration Process
|
|
115
|
+
|
|
116
|
+
**Folder reorganization**: Merge specs/ + changes/archive/
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Copy specs, merge archived changes, renumber, rename spec.md → README.md
|
|
120
|
+
cp -r openspec/specs/* specs/
|
|
121
|
+
mv specs/auth specs/001-user-authentication
|
|
122
|
+
mv specs/api-gateway specs/002-api-gateway
|
|
123
|
+
find specs -name 'spec.md' -execdir mv {} README.md \;
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Metadata**: `lean-spec backfill --assignee --all`
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Example 2: OpenSpec → LeanSpec (Moderate Complexity)
|
|
130
|
+
|
|
131
|
+
### Source Structure (spec-kit)
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
specs/
|
|
135
|
+
├── 001-task-management/
|
|
136
|
+
│ ├── spec.md # Feature specification
|
|
137
|
+
│ ├── plan.md # Implementation plan
|
|
138
|
+
│ ├── tasks.md # Task list
|
|
139
|
+
│ ├── research.md # Technical research
|
|
140
|
+
│ ├── data-model.md # Data models
|
|
141
|
+
│ └── contracts/ # API contracts
|
|
142
|
+
│ ├── tasks-api.yml
|
|
143
|
+
│ └── projects-api.yml
|
|
144
|
+
├── 002-user-authentication/
|
|
145
|
+
│ ├── spec.md
|
|
146
|
+
│ ├── plan.md
|
|
147
|
+
│ └── tasks.md
|
|
148
|
+
└── 003-notifications/
|
|
149
|
+
├── spec.md
|
|
150
|
+
└── plan.md
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Target Structure (LeanSpec)
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
specs/
|
|
157
|
+
├── 001-task-management/
|
|
158
|
+
│ ├── README.md # Main spec (from spec.md)
|
|
159
|
+
│ ├── IMPLEMENTATION.md # Optional: from plan.md + tasks.md
|
|
160
|
+
│ ├── DESIGN.md # Optional: from data-model.md
|
|
161
|
+
│ └── contracts/ # Preserved as-is
|
|
162
|
+
│ ├── tasks-api.yml
|
|
163
|
+
│ └── projects-api.yml
|
|
164
|
+
├── 002-user-authentication/
|
|
165
|
+
│ ├── README.md
|
|
166
|
+
│ └── IMPLEMENTATION.md
|
|
167
|
+
└── 003-notifications/
|
|
168
|
+
└── README.md
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Migration Process
|
|
172
|
+
|
|
173
|
+
**AI Analysis:**
|
|
174
|
+
- spec-kit already uses sequential numbering—preserve it
|
|
175
|
+
- Multiple files per feature—decide: merge or keep as sub-specs
|
|
176
|
+
- Contracts folder—preserve structure
|
|
177
|
+
- Already has feature branches—extract metadata
|
|
178
|
+
|
|
179
|
+
**AI Execution:**
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# Option 1: Keep sub-specs (complex features)
|
|
183
|
+
lean-spec create task-management
|
|
184
|
+
# AI copies spec.md → README.md
|
|
185
|
+
# AI copies plan.md + tasks.md → IMPLEMENTATION.md (merged)
|
|
186
|
+
# AI copies data-model.md → DESIGN.md
|
|
187
|
+
# AI preserves contracts/ folder
|
|
188
|
+
lean-spec update task-management --status complete --tags product,mvp
|
|
189
|
+
|
|
190
|
+
# Option 2: Single file (simple features)
|
|
191
|
+
lean-spec create user-authentication
|
|
192
|
+
# AI merges spec.md + plan.md into single README.md
|
|
193
|
+
lean-spec update user-authentication --status complete --tags auth,security
|
|
194
|
+
|
|
195
|
+
# Option 3: Minimal (very simple features)
|
|
196
|
+
lean-spec create notifications
|
|
197
|
+
# AI copies spec.md → README.md only
|
|
198
|
+
lean-spec update notifications --status in-progress --tags product
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Key Points:**
|
|
202
|
+
- Numbering preserved (001 → 001)
|
|
203
|
+
- Multi-file decision: merge vs sub-specs depends on complexity
|
|
204
|
+
- Content stays mostly intact
|
|
205
|
+
- Frontmatter added for metadata
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Example 3: ADR Collection → LeanSpec
|
|
210
|
+
|
|
211
|
+
### Source Structure (ADR)
|
|
212
|
+
|
|
213
|
+
### Source Structure (ADR)
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
docs/
|
|
217
|
+
└── adr/
|
|
218
|
+
├── 0001-use-microservices.md
|
|
219
|
+
├── 0042-event-sourcing-audit.md
|
|
220
|
+
├── 0105-graphql-api.md
|
|
221
|
+
└── 0203-kubernetes-deployment.md
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Target Structure (LeanSpec)
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
specs/
|
|
228
|
+
├── 001-use-microservices/
|
|
229
|
+
│ └── README.md
|
|
230
|
+
├── 002-event-sourcing-audit/
|
|
231
|
+
│ └── README.md
|
|
232
|
+
├── 003-graphql-api/
|
|
233
|
+
│ └── README.md
|
|
234
|
+
└── 004-kubernetes-deployment/
|
|
235
|
+
└── README.md
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Migration Process
|
|
239
|
+
|
|
240
|
+
**Folder reorganization**: Flat → hierarchy with renumbering
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
# Create folder for each ADR, renumber sequentially
|
|
244
|
+
mkdir -p specs/001-use-microservices
|
|
245
|
+
mv docs/adr/0001-use-microservices.md specs/001-use-microservices/README.md
|
|
246
|
+
|
|
247
|
+
mkdir -p specs/002-event-sourcing-audit
|
|
248
|
+
mv docs/adr/0042-event-sourcing-audit.md specs/002-event-sourcing-audit/README.md
|
|
249
|
+
# ... repeat for all ADRs
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Metadata**: `lean-spec backfill --assignee --all`
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Summary: Migration Complexity by Source
|
|
257
|
+
|
|
258
|
+
### spec-kit (Easiest) ✅
|
|
259
|
+
- **Folder structure**: Already compatible! Just rename spec.md → README.md
|
|
260
|
+
- **Challenge**: Metadata/frontmatter only
|
|
261
|
+
- **Solution**: `lean-spec backfill`
|
|
262
|
+
- **Time**: < 5 minutes for 20 specs
|
|
263
|
+
|
|
264
|
+
### OpenSpec (Moderate) ⚠️
|
|
265
|
+
- **Folder structure**: Merge specs/ + changes/archive/ directories
|
|
266
|
+
- **Challenge**: Folder merge + metadata
|
|
267
|
+
- **Solution**: Manual merge + `lean-spec backfill`
|
|
268
|
+
- **Time**: 15-30 minutes for 20 specs
|
|
269
|
+
|
|
270
|
+
### ADR/RFC (Complex) 🔴
|
|
271
|
+
- **Folder structure**: Flat files → folder hierarchy
|
|
272
|
+
- **Challenge**: Complete reorganization + metadata
|
|
273
|
+
- **Solution**: Reorganize + `lean-spec backfill`
|
|
274
|
+
- **Time**: 30-60 minutes for 20 specs
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Real Migration Work: Metadata Is the Challenge
|
|
279
|
+
|
|
280
|
+
### What Actually Needs Migration
|
|
281
|
+
|
|
282
|
+
1. **Frontmatter (ALL sources - PRIMARY CHALLENGE)**:
|
|
283
|
+
- Extract timestamps from git: `lean-spec backfill`
|
|
284
|
+
- Infer status from content/history
|
|
285
|
+
- Set priority (defaults to 'medium')
|
|
286
|
+
- Extract/create tags
|
|
287
|
+
- Get assignee from git author
|
|
288
|
+
|
|
289
|
+
2. **Folder structure (OpenSpec, ADR only)**:
|
|
290
|
+
- OpenSpec: Merge two directories
|
|
291
|
+
- ADR: Flat → hierarchy
|
|
292
|
+
- spec-kit: Already compatible!
|
|
293
|
+
|
|
294
|
+
3. **Content (NEVER changes)**:
|
|
295
|
+
- LeanSpec is flexible about content format
|
|
296
|
+
- Keep existing writing style
|
|
297
|
+
- No format conversion needed
|
|
298
|
+
|
|
299
|
+
### The `lean-spec backfill` Command
|
|
300
|
+
|
|
301
|
+
This is the key tool for migration:
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
# Basic: Extract timestamps from git history
|
|
305
|
+
lean-spec backfill
|
|
306
|
+
|
|
307
|
+
# With assignee from git author
|
|
308
|
+
lean-spec backfill --assignee
|
|
309
|
+
|
|
310
|
+
# Full metadata extraction
|
|
311
|
+
lean-spec backfill --all
|
|
312
|
+
|
|
313
|
+
# Preview before applying
|
|
314
|
+
lean-spec backfill --dry-run
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
**What it extracts from git**:
|
|
318
|
+
- `created_at` - First commit timestamp
|
|
319
|
+
- `updated_at` - Last commit timestamp
|
|
320
|
+
- `completed_at` - When status changed to 'complete'
|
|
321
|
+
- `assignee` - First commit author (with `--assignee`)
|
|
322
|
+
- `transitions` - Full status change history (with `--transitions`)
|
|
323
|
+
|
|
324
|
+
**What you set manually after**:
|
|
325
|
+
- `priority` - Defaults to 'medium', adjust with `lean-spec update --priority`
|
|
326
|
+
- `tags` - Defaults from folder names, adjust with `lean-spec update --tags`
|
|
327
|
+
- `status` - Inferred from content/history, adjust if needed
|
|
328
|
+
|
|
329
|
+
See [spec 047-git-backfill-timestamps](../047-git-backfill-timestamps/) for complete `backfill` documentation.
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## System Prompts: AGENTS.md Migration
|
|
334
|
+
|
|
335
|
+
Don't forget to migrate AI guidance files:
|
|
336
|
+
|
|
337
|
+
```
|
|
338
|
+
# Source tools often have:
|
|
339
|
+
openspec/AGENTS.md
|
|
340
|
+
.cursorrules
|
|
341
|
+
.github/copilot-instructions.md
|
|
342
|
+
|
|
343
|
+
# LeanSpec uses:
|
|
344
|
+
AGENTS.md (in project root)
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**Migration strategy**:
|
|
348
|
+
1. Review existing AI guidance from source tool
|
|
349
|
+
2. Preserve project-specific conventions
|
|
350
|
+
3. Merge with LeanSpec AGENTS.md template
|
|
351
|
+
4. Update commands (openspec → lean-spec)
|
|
352
|
+
5. Keep team workflows intact
|
|
353
|
+
|
|
354
|
+
This ensures AI agents maintain continuity during transition.
|