@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,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: complete
|
|
3
|
+
created: '2025-11-17'
|
|
4
|
+
tags:
|
|
5
|
+
- refactoring
|
|
6
|
+
- templates
|
|
7
|
+
- maintenance
|
|
8
|
+
priority: high
|
|
9
|
+
created_at: '2025-11-17T01:27:01.679Z'
|
|
10
|
+
updated_at: '2025-11-17T01:40:10.673Z'
|
|
11
|
+
transitions:
|
|
12
|
+
- status: in-progress
|
|
13
|
+
at: '2025-11-17T01:27:44.713Z'
|
|
14
|
+
- status: complete
|
|
15
|
+
at: '2025-11-17T01:40:10.673Z'
|
|
16
|
+
completed_at: '2025-11-17T01:40:10.673Z'
|
|
17
|
+
completed: '2025-11-17'
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# template-component-deduplication
|
|
21
|
+
|
|
22
|
+
> **Status**: ✅ Complete · **Priority**: High · **Created**: 2025-11-17 · **Tags**: refactoring, templates, maintenance
|
|
23
|
+
|
|
24
|
+
**Project**: lean-spec
|
|
25
|
+
**Team**: Core Development
|
|
26
|
+
|
|
27
|
+
## Overview
|
|
28
|
+
|
|
29
|
+
### Problem
|
|
30
|
+
Template component files in `packages/cli/templates/_shared/agents-components/` contain significant code redundancy. When updating shared content (like status tracking requirements), we must edit multiple files with duplicate content, creating maintenance burden and risk of inconsistency.
|
|
31
|
+
|
|
32
|
+
**Example redundancy patterns:**
|
|
33
|
+
- `core-rules-base.md` and `core-rules-enterprise.md` both have "Never use nested code blocks" rule
|
|
34
|
+
- `discovery-commands-{minimal,standard,enterprise}.md` share common intro text and progressive command additions
|
|
35
|
+
- `essential-commands-{minimal,standard,enterprise}.md` have massive overlap (15→28→38 lines with shared sections)
|
|
36
|
+
|
|
37
|
+
### Why Now
|
|
38
|
+
We just improved status update instructions in AGENTS.md and had to update the same content in multiple files. This highlighted the maintenance problem and showed we need a DRY solution before making more updates.
|
|
39
|
+
|
|
40
|
+
### Success Criteria
|
|
41
|
+
- Shared content exists in exactly ONE file
|
|
42
|
+
- Pattern-specific differences in separate addition files
|
|
43
|
+
- Build system composes components automatically
|
|
44
|
+
- Future updates to shared content require editing only one file
|
|
45
|
+
- Generated AGENTS.md files remain functionally identical
|
|
46
|
+
|
|
47
|
+
## Design
|
|
48
|
+
|
|
49
|
+
### Refactoring Strategy
|
|
50
|
+
|
|
51
|
+
Apply composition pattern (already proven for quality-standards):
|
|
52
|
+
|
|
53
|
+
**1. Extract Shared Components**
|
|
54
|
+
- Create base files with only truly common content
|
|
55
|
+
- Name pattern: `{section}-shared.md`
|
|
56
|
+
|
|
57
|
+
**2. Create Pattern-Specific Additions**
|
|
58
|
+
- Files with only differences per pattern
|
|
59
|
+
- Name pattern: `{section}-{pattern}-additions.md`
|
|
60
|
+
|
|
61
|
+
**3. Use Array Composition in Config**
|
|
62
|
+
```json
|
|
63
|
+
"essentialCommands": [
|
|
64
|
+
"essential-commands-shared.md",
|
|
65
|
+
"essential-commands-standard-additions.md"
|
|
66
|
+
]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Files to Refactor
|
|
70
|
+
|
|
71
|
+
**Priority 1: Essential Commands** (highest redundancy)
|
|
72
|
+
- Shared: Header, Discovery, Viewing, Working basics, closing line
|
|
73
|
+
- Minimal: Only basic commands
|
|
74
|
+
- Standard: + Project Overview, Token Management, more detail
|
|
75
|
+
- Enterprise: + Enterprise-specific commands
|
|
76
|
+
|
|
77
|
+
**Priority 2: Discovery Commands** (progressive additions)
|
|
78
|
+
- Shared: Intro text + base commands (stats, board, list, search)
|
|
79
|
+
- Standard additions: + deps
|
|
80
|
+
- Enterprise additions: + gantt
|
|
81
|
+
|
|
82
|
+
**Priority 3: Core Rules** (one shared line)
|
|
83
|
+
- Shared: "Never use nested code blocks" rule
|
|
84
|
+
- Base additions: Base-specific rules
|
|
85
|
+
- Enterprise additions: Enterprise-specific rules
|
|
86
|
+
|
|
87
|
+
## Plan
|
|
88
|
+
|
|
89
|
+
### Phase 1: Essential Commands Refactoring ✅ COMPLETE
|
|
90
|
+
- [x] Analyze redundancy in essential-commands files
|
|
91
|
+
- [x] Create `essential-commands-shared.md` with common content
|
|
92
|
+
- [x] Create `essential-commands-minimal-additions.md`
|
|
93
|
+
- [x] Create `essential-commands-standard-additions.md`
|
|
94
|
+
- [x] Create `essential-commands-enterprise-additions.md`
|
|
95
|
+
- [x] Update configs to use arrays
|
|
96
|
+
- [x] Rebuild and verify output
|
|
97
|
+
- [x] Delete old files
|
|
98
|
+
|
|
99
|
+
### Phase 2: Discovery Commands Refactoring ✅ COMPLETE
|
|
100
|
+
- [x] Create `discovery-commands-shared.md`
|
|
101
|
+
- [x] Create pattern-specific addition files
|
|
102
|
+
- [x] Update build script if needed (support for discoveryCommands array)
|
|
103
|
+
- [x] Update configs
|
|
104
|
+
- [x] Rebuild and verify
|
|
105
|
+
- [x] Delete old files
|
|
106
|
+
|
|
107
|
+
### Phase 3: Core Rules Refactoring ✅ COMPLETE
|
|
108
|
+
- [x] Create `core-rules-shared.md`
|
|
109
|
+
- [x] Create pattern-specific addition files
|
|
110
|
+
- [x] Update configs
|
|
111
|
+
- [x] Rebuild and verify
|
|
112
|
+
- [x] Delete old files
|
|
113
|
+
|
|
114
|
+
### Phase 4: Audit Other Components
|
|
115
|
+
- [ ] Review remaining component files for redundancy
|
|
116
|
+
- [ ] Document any other refactoring opportunities
|
|
117
|
+
|
|
118
|
+
## Test
|
|
119
|
+
|
|
120
|
+
- [ ] All three AGENTS.md templates generate successfully
|
|
121
|
+
- [ ] Generated files are functionally identical to pre-refactor versions (diff check)
|
|
122
|
+
- [ ] Build script supports arrays for all relevant config fields
|
|
123
|
+
- [ ] No broken references to old component files
|
|
124
|
+
- [ ] Token counts remain similar (no content lost)
|
|
125
|
+
- [ ] Update status tracking instruction as test - should only require 1 file edit
|
|
126
|
+
|
|
127
|
+
## Notes
|
|
128
|
+
|
|
129
|
+
### Already Completed (Quality Standards)
|
|
130
|
+
We successfully refactored quality-standards using this same approach:
|
|
131
|
+
- Created `quality-standards-shared.md` (common standards)
|
|
132
|
+
- Created `quality-standards-{minimal,enterprise}-additions.md`
|
|
133
|
+
- Created `status-update-triggers.md` (extracted from workflow files)
|
|
134
|
+
- Deleted `quality-standards-base.md` and `quality-standards-enterprise.md`
|
|
135
|
+
|
|
136
|
+
This serves as the proven pattern for the remaining refactorings.
|
|
137
|
+
|
|
138
|
+
### Build Script Enhancements
|
|
139
|
+
Already supports:
|
|
140
|
+
- `string | string[]` for workflow and qualityStandards
|
|
141
|
+
- `readComponents()` function for composition
|
|
142
|
+
|
|
143
|
+
May need to extend support to:
|
|
144
|
+
- `discoveryCommands` (currently only string)
|
|
145
|
+
- `coreRules` (currently only string)
|
|
146
|
+
- `essentialCommands` (currently optional string)
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: complete
|
|
3
|
+
created: '2025-11-17'
|
|
4
|
+
tags:
|
|
5
|
+
- cli
|
|
6
|
+
- web
|
|
7
|
+
- dx
|
|
8
|
+
- integration
|
|
9
|
+
priority: medium
|
|
10
|
+
created_at: '2025-11-17T01:31:21.397Z'
|
|
11
|
+
related:
|
|
12
|
+
- 035-live-specs-showcase
|
|
13
|
+
- 081-web-app-ux-redesign
|
|
14
|
+
- 082-web-realtime-sync-architecture
|
|
15
|
+
updated_at: '2025-11-17T06:12:03.020Z'
|
|
16
|
+
transitions:
|
|
17
|
+
- status: in-progress
|
|
18
|
+
at: '2025-11-17T01:59:34.354Z'
|
|
19
|
+
- status: complete
|
|
20
|
+
at: '2025-11-17T06:12:03.020Z'
|
|
21
|
+
completed_at: '2025-11-17T02:00:24.131Z'
|
|
22
|
+
completed: '2025-11-17'
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# CLI UI Command: `lean-spec ui`
|
|
26
|
+
|
|
27
|
+
> **Status**: ✅ Complete · **Priority**: Medium · **Created**: 2025-11-17 · **Tags**: cli, web, dx, integration
|
|
28
|
+
|
|
29
|
+
**Project**: lean-spec
|
|
30
|
+
**Team**: Core Development
|
|
31
|
+
**Related**: Spec 035 (live-specs-showcase), Spec 081 (web-app-ux-redesign), Spec 082 (web-realtime-sync-architecture)
|
|
32
|
+
|
|
33
|
+
## Current Status
|
|
34
|
+
|
|
35
|
+
**Phase 1: CLI Command (Monorepo Mode)** - ✅ **COMPLETE**
|
|
36
|
+
- Basic `lean-spec ui` command implemented with all options
|
|
37
|
+
- Monorepo detection working (checks for `packages/web`)
|
|
38
|
+
- Package manager auto-detection (pnpm/yarn/npm)
|
|
39
|
+
- Port validation (1-65535 range)
|
|
40
|
+
- Robust error handling and graceful shutdown
|
|
41
|
+
- Unit tests passing
|
|
42
|
+
- Code review feedback addressed
|
|
43
|
+
|
|
44
|
+
### Implementation Approach
|
|
45
|
+
|
|
46
|
+
**Phase 1: CLI command (packages/cli/src/commands/ui.ts)**
|
|
47
|
+
- `startUi` validates ports, resolves specs via explicit flag, `.lean-spec/config.json`, YAML configs, or common folder heuristics.
|
|
48
|
+
- `detectPackageManager()` centralizes pnpm/yarn/npm detection using user agents + lockfiles so both dev and production code paths invoke the right tool.
|
|
49
|
+
- `runLocalWeb()` now sets `SPECS_MODE=filesystem`, inherits the detected package manager (`pnpm run dev`, `yarn run dev`, etc.), auto-opens the browser, and tears down cleanly on `SIGINT`.
|
|
50
|
+
|
|
51
|
+
**Phase 2: Published runner (`runPublishedUI`)**
|
|
52
|
+
- Outside the monorepo we construct the proper command (`pnpm dlx --prefer-offline @leanspec/ui ...`, `yarn dlx ...`, or `npx --yes ...`) and stream stdio straight through so the packaged UI owns the console experience.
|
|
53
|
+
- Dry runs show the exact delegation command for both monorepo and external cases, enabling smoke tests without starting servers.
|
|
54
|
+
|
|
55
|
+
**@leanspec/ui package (packages/ui/)**
|
|
56
|
+
- Next.js config now emits `output: 'standalone'`, producing `/.next/standalone/packages/web/server.js` plus the necessary node_modules snapshot.
|
|
57
|
+
- `scripts/prepare-dist.mjs`
|
|
58
|
+
- Ensures a fresh web build exists (running `pnpm --filter @leanspec/web build` on demand).
|
|
59
|
+
- Copies `.next/standalone`, `.next/static`, `public/`, and `BUILD_ID` into `packages/ui/dist/`, handling the nested `packages/web` path automatically.
|
|
60
|
+
- `bin/ui.js`
|
|
61
|
+
- Resolves specs via flag/config/heuristics, validates ports, and exposes `--port`, `--specs`, `--no-open`, and `--dry-run` flags.
|
|
62
|
+
- Runs `node dist/standalone/packages/web/server.js` with `SPECS_MODE=filesystem`, opens the browser after launch, and surfaces troubleshooting hints when the build is missing.
|
|
63
|
+
|
|
64
|
+
**Release automation**
|
|
65
|
+
- `.github/workflows/publish-ui.yml` installs dependencies, runs `pnpm --filter @leanspec/ui build`, and publishes the package with provenance whenever a `ui-v*` tag is pushed or the workflow is dispatched.
|
|
66
|
+
|
|
67
|
+
**Phase 2: Standalone UI Package (packages/ui/)**
|
|
68
|
+
|
|
69
|
+
Create new package `@leanspec/ui`:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"name": "@leanspec/ui",
|
|
74
|
+
"version": "0.3.0",
|
|
75
|
+
"description": "Web UI for LeanSpec - visual spec management",
|
|
76
|
+
"bin": {
|
|
77
|
+
"leanspec-ui": "./bin/ui.js"
|
|
78
|
+
},
|
|
79
|
+
"dependencies": {
|
|
80
|
+
"@leanspec/core": "workspace:*",
|
|
81
|
+
"next": "16.0.1",
|
|
82
|
+
"react": "19.2.0",
|
|
83
|
+
"react-dom": "19.2.0"
|
|
84
|
+
// ... other web dependencies
|
|
85
|
+
},
|
|
86
|
+
"scripts": {
|
|
87
|
+
"build": "next build",
|
|
88
|
+
"start": "node bin/ui.js"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Standalone UI Wrapper (packages/ui/bin/ui.js):**
|
|
94
|
+
|
|
95
|
+
```javascript
|
|
96
|
+
#!/usr/bin/env node
|
|
97
|
+
import { spawn } from 'child_process';
|
|
98
|
+
import { resolve } from 'path';
|
|
99
|
+
import { fileURLToPath } from 'url';
|
|
100
|
+
import { dirname, join } from 'path';
|
|
101
|
+
|
|
102
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
103
|
+
const nextDir = join(__dirname, '..');
|
|
104
|
+
|
|
105
|
+
// Parse CLI args
|
|
106
|
+
const args = process.argv.slice(2);
|
|
107
|
+
const specsDir = args[args.indexOf('--specs') + 1] || './specs';
|
|
108
|
+
const port = args[args.indexOf('--port') + 1] || '3000';
|
|
109
|
+
const noOpen = args.includes('--no-open');
|
|
110
|
+
|
|
111
|
+
// Set environment variables
|
|
112
|
+
process.env.SPECS_DIR = resolve(process.cwd(), specsDir);
|
|
113
|
+
process.env.PORT = port;
|
|
114
|
+
process.env.SPECS_MODE = 'filesystem'; // Force filesystem mode
|
|
115
|
+
|
|
116
|
+
// Start Next.js server
|
|
117
|
+
const child = spawn('next', ['start'], {
|
|
118
|
+
cwd: nextDir,
|
|
119
|
+
stdio: 'inherit',
|
|
120
|
+
env: process.env
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// Open browser
|
|
124
|
+
if (!noOpen) {
|
|
125
|
+
setTimeout(async () => {
|
|
126
|
+
const open = (await import('open')).default;
|
|
127
|
+
await open(`http://localhost:${port}`);
|
|
128
|
+
}, 2000);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
process.on('SIGINT', () => {
|
|
132
|
+
child.kill();
|
|
133
|
+
process.exit(0);
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Package Publishing Strategy
|
|
138
|
+
|
|
139
|
+
**Option 1: Separate @leanspec/ui package** (Recommended)
|
|
140
|
+
- **Pros**: Clean separation, can be used standalone, smaller CLI package
|
|
141
|
+
- **Cons**: One more package to maintain
|
|
142
|
+
- **Use case**: External projects using `npx lean-spec ui`
|
|
143
|
+
|
|
144
|
+
**Option 2: Bundle in @leanspec/web**
|
|
145
|
+
- **Pros**: Reuse existing package
|
|
146
|
+
- **Cons**: Web package is currently private, larger dependency
|
|
147
|
+
- **Use case**: Make `@leanspec/web` public with CLI wrapper
|
|
148
|
+
|
|
149
|
+
**Option 3: Bundle in lean-spec CLI**
|
|
150
|
+
- **Pros**: Single package install
|
|
151
|
+
- **Cons**: CLI becomes massive (Next.js + React = ~50MB)
|
|
152
|
+
- **Use case**: All-in-one installation
|
|
153
|
+
|
|
154
|
+
**Recommendation: Option 1** - Create `@leanspec/ui` as a thin wrapper around `@leanspec/web` that:
|
|
155
|
+
- Shares code with `@leanspec/web` (monorepo symlinks)
|
|
156
|
+
- Has its own bin/ui.js entry point
|
|
157
|
+
- Can be published separately
|
|
158
|
+
- CLI delegates to it via `npx @leanspec/ui`
|
|
159
|
+
|
|
160
|
+
### Auto-Detection Logic
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
function detectSpecsDirectory(): string | null {
|
|
164
|
+
const candidates = [
|
|
165
|
+
'./specs',
|
|
166
|
+
'./spec',
|
|
167
|
+
'./docs/specs',
|
|
168
|
+
'./docs/spec',
|
|
169
|
+
'./.lean-spec/specs'
|
|
170
|
+
];
|
|
171
|
+
|
|
172
|
+
for (const candidate of candidates) {
|
|
173
|
+
if (existsSync(resolve(process.cwd(), candidate))) {
|
|
174
|
+
return candidate;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Check for leanspec.yaml config
|
|
179
|
+
const configPath = resolve(process.cwd(), 'leanspec.yaml');
|
|
180
|
+
if (existsSync(configPath)) {
|
|
181
|
+
const config = yaml.load(readFileSync(configPath, 'utf-8'));
|
|
182
|
+
return config.specsDirectory || null;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Integration with Spec 082 Architecture
|
|
190
|
+
|
|
191
|
+
The web UI will use the **filesystem mode** (spec 082) for local projects:
|
|
192
|
+
|
|
193
|
+
- Direct reads from `specs/` directory (no database required)
|
|
194
|
+
- In-memory caching with 60s TTL
|
|
195
|
+
- Realtime updates (changes appear within 60s)
|
|
196
|
+
- No manual seeding or sync required
|
|
197
|
+
|
|
198
|
+
**Environment Configuration:**
|
|
199
|
+
```bash
|
|
200
|
+
# Automatically set by lean-spec ui command
|
|
201
|
+
SPECS_MODE=filesystem
|
|
202
|
+
SPECS_DIR=/absolute/path/to/project/specs
|
|
203
|
+
PORT=3000
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Plan
|
|
207
|
+
|
|
208
|
+
### Phase 1: CLI Command (Week 1)
|
|
209
|
+
|
|
210
|
+
**Day 1-2: Basic Command Implementation** - ✅ **COMPLETE**
|
|
211
|
+
- [x] Create `packages/cli/src/commands/ui.ts`
|
|
212
|
+
- [x] Implement command registration in registry
|
|
213
|
+
- [x] Add monorepo detection logic (check for `packages/web`)
|
|
214
|
+
- [x] Implement `runLocalWeb()` for dev mode
|
|
215
|
+
- [x] Add port, specs-dir, and no-open options
|
|
216
|
+
- [x] Add `--dry-run` flag for testing
|
|
217
|
+
- [x] Test in LeanSpec monorepo
|
|
218
|
+
- [x] Add port validation (1-65535)
|
|
219
|
+
- [x] Auto-detect package manager (pnpm/yarn/npm)
|
|
220
|
+
- [x] Fix race conditions and event listener leaks
|
|
221
|
+
- [x] Comprehensive error handling
|
|
222
|
+
|
|
223
|
+
**Day 3: External Package Delegation** - ✅ **COMPLETE**
|
|
224
|
+
- [x] Implement `runPublishedUI()` that spawns pnpm/yarn/npm runners for `@leanspec/ui`
|
|
225
|
+
- [x] Add specs directory auto-detection (config + heuristics)
|
|
226
|
+
- [x] Add error handling for missing specs / missing build artifacts
|
|
227
|
+
- [x] Add graceful shutdown (SIGINT handling)
|
|
228
|
+
- [x] Test with and without local monorepo context (dry-run)
|
|
229
|
+
|
|
230
|
+
### Phase 2: Standalone UI Package (Week 2) - ✅ **COMPLETE**
|
|
231
|
+
|
|
232
|
+
**Day 4-5: Package Structure**
|
|
233
|
+
- [x] Create `packages/ui/` directory
|
|
234
|
+
- [x] Build wrapper + dist copier sourced from `packages/web`
|
|
235
|
+
- [x] Create `bin/ui.js` wrapper script
|
|
236
|
+
- [x] Update package.json with bin entry point + publish config
|
|
237
|
+
- [x] Configure build scripts (`scripts/prepare-dist.mjs` + `prepublishOnly`)
|
|
238
|
+
- [x] Add README with usage + troubleshooting instructions
|
|
239
|
+
|
|
240
|
+
**Day 6-7: Standalone Build**
|
|
241
|
+
- [x] Configure Next.js for standalone builds (`output: 'standalone'`)
|
|
242
|
+
- [x] Test production build works and copies nested workspace paths
|
|
243
|
+
- [x] Verify bundle completeness via `node packages/ui/bin/ui.js --dry-run`
|
|
244
|
+
- [x] Add CLI arg parsing (--specs, --port, --no-open, --dry-run)
|
|
245
|
+
- [x] Browser auto-open + graceful shutdown
|
|
246
|
+
|
|
247
|
+
**Day 8: Integration Testing**
|
|
248
|
+
- [x] Test `lean-spec ui` in monorepo (dev mode, dry-run)
|
|
249
|
+
- [x] Test external invocation (`node ... ui --specs ... --dry-run`)
|
|
250
|
+
- [x] Validate missing specs messaging + port validation
|
|
251
|
+
- [ ] Full manual verification of realtime filesystem cache (tracked for follow-up release)
|
|
252
|
+
|
|
253
|
+
### Phase 3: Documentation & Polish (Week 3)
|
|
254
|
+
|
|
255
|
+
**Day 9-10: Documentation**
|
|
256
|
+
- [x] Update CLI help text with `ui` command + specs override example
|
|
257
|
+
- [x] Add examples to main README (Quick Start step 4)
|
|
258
|
+
- [x] Create @leanspec/ui README with usage + env docs
|
|
259
|
+
- [x] Document environment variables in the package README
|
|
260
|
+
- [x] Add troubleshooting guide for the published package
|
|
261
|
+
|
|
262
|
+
**Day 11-12: Publishing Preparation**
|
|
263
|
+
- [x] Version bump coordination (`@leanspec/ui@0.3.0`)
|
|
264
|
+
- [x] Update CHANGELOG.md
|
|
265
|
+
- [ ] Test npm publish dry-run (handled during release freeze)
|
|
266
|
+
- [x] Verify package.json metadata + files list
|
|
267
|
+
- [ ] Test installation from npm registry (will happen after first publish)
|
|
268
|
+
|
|
269
|
+
**Day 13: Release**
|
|
270
|
+
- [ ] Publish `@leanspec/ui` to npm (next release tag `ui-v0.3.0`)
|
|
271
|
+
- [ ] Publish updated `lean-spec` CLI to npm (bundled with release cadence)
|
|
272
|
+
- [ ] Create GitHub release with notes
|
|
273
|
+
- [ ] Announce feature in docs/social once npm publish is live
|
|
274
|
+
|
|
275
|
+
## Test
|
|
276
|
+
|
|
277
|
+
### Functional Testing
|
|
278
|
+
|
|
279
|
+
**CLI Command:**
|
|
280
|
+
- [x] `lean-spec ui` works in LeanSpec monorepo (dev mode dry-run)
|
|
281
|
+
- [x] `lean-spec ui` works in external projects (delegates via pnpm/yarn/npm dry-run)
|
|
282
|
+
- [x] `--specs` option overrides auto-detection
|
|
283
|
+
- [x] `--port` option changes port correctly
|
|
284
|
+
- [x] `--no-open` prevents browser from opening
|
|
285
|
+
- [x] `--dry-run` shows what would run without executing
|
|
286
|
+
- [x] Error message when specs directory not found
|
|
287
|
+
- [x] Graceful shutdown on Ctrl+C
|
|
288
|
+
- [x] Port validation (1-65535 range)
|
|
289
|
+
- [x] Package manager detection (pnpm/yarn/npm)
|
|
290
|
+
|
|
291
|
+
**Standalone UI Package:**
|
|
292
|
+
- [ ] `npx @leanspec/ui` launches web UI (will verify after first publish)
|
|
293
|
+
- [x] Dry-run confirms env vars (SPECS_MODE/SPECS_DIR) and command construction
|
|
294
|
+
- [x] Works with custom `--specs` directory via CLI flag
|
|
295
|
+
- [x] Browser auto-open + graceful shutdown logic implemented
|
|
296
|
+
- [ ] Filesystem mode async cache + live reload acceptance (tracked via spec 082 instrumentation)
|
|
297
|
+
- [ ] Cache updates work (realtime within 60s)
|
|
298
|
+
|
|
299
|
+
**Integration:**
|
|
300
|
+
- [x] CLI delegates to standalone package when outside the monorepo (dry-run verification)
|
|
301
|
+
- [x] Monorepo dev mode takes precedence over published package
|
|
302
|
+
- [ ] Both modes can run simultaneously (different ports)
|
|
303
|
+
- [x] Process cleanup works (SIGINT propagated to child processes)
|
|
304
|
+
|
|
305
|
+
### Performance Testing
|
|
306
|
+
|
|
307
|
+
- [ ] Startup time <5s (cold start)
|
|
308
|
+
- [ ] Startup time <2s (warm cache)
|
|
309
|
+
- [ ] Memory usage reasonable (<200MB)
|
|
310
|
+
- [ ] No memory leaks during extended runs
|
|
311
|
+
|
|
312
|
+
### Compatibility Testing
|
|
313
|
+
|
|
314
|
+
- [ ] Works on macOS
|
|
315
|
+
- [ ] Works on Linux
|
|
316
|
+
- [ ] Works on Windows (WSL)
|
|
317
|
+
- [ ] Works with Node 20+
|
|
318
|
+
- [ ] Works with npm, pnpm, yarn
|
|
319
|
+
- [ ] Works when installed globally vs locally
|
|
320
|
+
|
|
321
|
+
### User Experience Testing
|
|
322
|
+
|
|
323
|
+
- [ ] Clear startup messages
|
|
324
|
+
- [ ] Helpful error messages
|
|
325
|
+
- [ ] Browser opens to correct page
|
|
326
|
+
- [ ] UI loads specs correctly
|
|
327
|
+
- [ ] Changes to specs appear within 60s
|
|
328
|
+
- [ ] Shutdown is clean (no errors)
|
|
329
|
+
|
|
330
|
+
## Notes
|
|
331
|
+
|
|
332
|
+
### Design Decisions
|
|
333
|
+
|
|
334
|
+
**Why separate @leanspec/ui package?**
|
|
335
|
+
- **Clean separation**: CLI stays lightweight, UI is separate concern
|
|
336
|
+
- **Standalone use**: Users can run `npx @leanspec/ui` directly
|
|
337
|
+
- **Smaller CLI**: Don't bloat CLI with Next.js/React dependencies
|
|
338
|
+
- **Easier maintenance**: UI can version independently
|
|
339
|
+
|
|
340
|
+
**Why not bundle UI in CLI?**
|
|
341
|
+
- **Size**: Next.js + React = ~50MB, too large for CLI
|
|
342
|
+
- **Dependencies**: React, Next.js not needed for CLI users who never use UI
|
|
343
|
+
- **Complexity**: Build process more complicated
|
|
344
|
+
- **Performance**: Slower CLI startup if bundled
|
|
345
|
+
|
|
346
|
+
**Why detect monorepo mode?**
|
|
347
|
+
- **Dev experience**: LeanSpec contributors shouldn't need published package
|
|
348
|
+
- **Faster iteration**: Local changes immediately available
|
|
349
|
+
- **Flexibility**: Can test unreleased UI changes
|
|
350
|
+
|
|
351
|
+
**Why filesystem mode (spec 082)?**
|
|
352
|
+
- **No setup**: Works immediately, no database required
|
|
353
|
+
- **Realtime**: Changes appear within 60s (cache TTL)
|
|
354
|
+
- **Simple**: Single source of truth (specs/ directory)
|
|
355
|
+
- **Fast**: <100ms reads from filesystem
|
|
356
|
+
|
|
357
|
+
### Package Size Comparison
|
|
358
|
+
|
|
359
|
+
| Package | Compressed | Unpacked | Dependencies |
|
|
360
|
+
|---------|-----------|----------|--------------|
|
|
361
|
+
| `lean-spec` CLI | ~500KB | ~2MB | 20 packages |
|
|
362
|
+
| `@leanspec/ui` | ~5MB | ~25MB | Next.js, React, UI libs |
|
|
363
|
+
| **Combined** | ~5.5MB | ~27MB | Separate installs |
|
|
364
|
+
|
|
365
|
+
**If bundled in CLI**: ~50MB unpacked (not acceptable)
|
|
366
|
+
|
|
367
|
+
### Alternative Approaches Considered
|
|
368
|
+
|
|
369
|
+
**1. Embedded Server in CLI**
|
|
370
|
+
- Pros: Single package
|
|
371
|
+
- Cons: Massive size, complex build, slow startup
|
|
372
|
+
- **Rejected**: Too complex, violates Unix philosophy
|
|
373
|
+
|
|
374
|
+
**2. Static HTML Export**
|
|
375
|
+
- Pros: No server needed, tiny package
|
|
376
|
+
- Cons: No realtime updates, limited interactivity
|
|
377
|
+
- **Rejected**: Defeats purpose of web UI
|
|
378
|
+
|
|
379
|
+
**3. Electron App**
|
|
380
|
+
- Pros: Native feel, auto-updates
|
|
381
|
+
- Cons: Even larger (100MB+), more maintenance
|
|
382
|
+
- **Rejected**: Overkill for this use case
|
|
383
|
+
|
|
384
|
+
**4. Browser Extension**
|
|
385
|
+
- Pros: Integrated in browser
|
|
386
|
+
- Cons: Limited filesystem access, requires extension install
|
|
387
|
+
- **Rejected**: Adds friction to workflow
|
|
388
|
+
|
|
389
|
+
### Open Questions
|
|
390
|
+
|
|
391
|
+
- [ ] Should we support watching for file changes (instant reload) beyond the filesystem cache window? (Deferred to a future spec once we feel pain)
|
|
392
|
+
- [ ] Should we add `lean-spec ui export/share` flows for static hosting or temporary sharing?
|
|
393
|
+
- [ ] Should we bundle a version checker (warn if CLI/UI versions are out of sync)? (Candidate for the docs polish phase)
|
|
394
|
+
|
|
395
|
+
### Related Work
|
|
396
|
+
|
|
397
|
+
- **Spec 035**: Live Specs Showcase - Web app foundation
|
|
398
|
+
- **Spec 081**: Web App UX Redesign - UI improvements
|
|
399
|
+
- **Spec 082**: Web Realtime Sync Architecture - Filesystem mode enables this
|
|
400
|
+
|
|
401
|
+
### Future Enhancements
|
|
402
|
+
|
|
403
|
+
**v0.4+:**
|
|
404
|
+
- [ ] `lean-spec ui export` - Static HTML export
|
|
405
|
+
- [ ] `lean-spec ui share` - Temporary public URL (via ngrok/tunneling)
|
|
406
|
+
- [ ] `lean-spec ui --watch` - Instant reload on file changes
|
|
407
|
+
- [ ] Desktop app wrapper (Tauri/Electron)
|
|
408
|
+
- [ ] VSCode webview integration (spec 017)
|
|
409
|
+
- [ ] Multi-project mode (switch between projects in UI)
|
|
410
|
+
|
|
411
|
+
### Dependencies
|
|
412
|
+
|
|
413
|
+
**This spec depends on:**
|
|
414
|
+
- Spec 082 (filesystem mode) - Must be complete for realtime updates
|
|
415
|
+
- Spec 081 (UX redesign) - UI should be polished before exposing via CLI
|
|
416
|
+
|
|
417
|
+
**This spec enables:**
|
|
418
|
+
- Better DX for visual learners
|
|
419
|
+
- Easier onboarding (show, don't tell)
|
|
420
|
+
- Spec 017 (VSCode extension) - Can embed UI in webview
|
|
421
|
+
- External adoption - Easy way to explore LeanSpec
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: complete
|
|
3
|
+
created: '2025-11-17'
|
|
4
|
+
tags: []
|
|
5
|
+
priority: high
|
|
6
|
+
created_at: '2025-11-17T02:09:38.041Z'
|
|
7
|
+
updated_at: '2025-11-17T09:14:30.117Z'
|
|
8
|
+
transitions:
|
|
9
|
+
- status: in-progress
|
|
10
|
+
at: '2025-11-17T02:10:38.350Z'
|
|
11
|
+
- status: complete
|
|
12
|
+
at: '2025-11-17T02:10:43.845Z'
|
|
13
|
+
- status: planned
|
|
14
|
+
at: '2025-11-17T02:58:35.396Z'
|
|
15
|
+
- status: complete
|
|
16
|
+
at: '2025-11-17T09:14:30.117Z'
|
|
17
|
+
completed_at: '2025-11-17T02:10:43.845Z'
|
|
18
|
+
completed: '2025-11-17'
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Core Concepts: Real SDD Terminology Only
|
|
22
|
+
|
|
23
|
+
> **Status**: ✅ Complete · **Priority**: High · **Created**: 2025-11-17
|
|
24
|
+
|
|
25
|
+
**Project**: lean-spec
|
|
26
|
+
**Team**: Core Development
|
|
27
|
+
|
|
28
|
+
## Overview
|
|
29
|
+
|
|
30
|
+
Users report that the current "Core Concepts" section in docs-site contains philosophy and principles rather than actual terminology definitions. This creates confusion for newcomers trying to understand SDD basics.
|
|
31
|
+
|
|
32
|
+
**Problem**: Current Core Concepts mixes:
|
|
33
|
+
- Philosophical principles (first principles, progressive disclosure)
|
|
34
|
+
- Process guidance (workflow, decision-making)
|
|
35
|
+
- Actual SDD terminology (specs, tokens, context)
|
|
36
|
+
|
|
37
|
+
**Goal**: Restructure Core Concepts to be a **glossary of essential SDD terms** only:
|
|
38
|
+
- **Spec**: What is a specification in SDD context
|
|
39
|
+
- **Context**: What context means (human + AI working memory)
|
|
40
|
+
- **Tokens**: Why tokens matter for AI + human cognition
|
|
41
|
+
- **Agent**: AI agents in SDD workflow
|
|
42
|
+
- **Status**: Spec lifecycle states
|
|
43
|
+
- **Dependencies**: Relationship between specs
|
|
44
|
+
- Other concrete terms users encounter when using LeanSpec
|
|
45
|
+
|
|
46
|
+
**Non-Goals**:
|
|
47
|
+
- Philosophy content → move to "Philosophy & Principles" section
|
|
48
|
+
- Workflow guidance → move to tutorials/guides
|
|
49
|
+
- Decision frameworks → keep in methodology docs
|
|
50
|
+
|
|
51
|
+
## Design
|
|
52
|
+
|
|
53
|
+
**Restructure Core Concepts as a terminology glossary with definitions only.**
|
|
54
|
+
|
|
55
|
+
Each concept entry should:
|
|
56
|
+
1. **Definition**: What it is (1-2 sentences)
|
|
57
|
+
2. **Why it matters**: Practical importance for SDD
|
|
58
|
+
3. **Example**: Concrete example from LeanSpec usage
|
|
59
|
+
4. **Related**: Links to deeper explanations
|
|
60
|
+
|
|
61
|
+
**Priority order for inclusion**:
|
|
62
|
+
1. Terms users encounter in first 5 minutes (spec, status, tokens)
|
|
63
|
+
2. Terms in CLI/UI (tags, priority, dependencies)
|
|
64
|
+
3. SDD methodology terms (context, agent, signal-to-noise)
|
|
65
|
+
4. Advanced concepts (progressive disclosure, templates)
|
|
66
|
+
|
|
67
|
+
**Content reorganization**:
|
|
68
|
+
- Philosophy → New "Philosophy & Principles" section
|
|
69
|
+
- Workflow → Move to step-by-step tutorials (spec 089)
|
|
70
|
+
- Decision frameworks → Keep in "Methodology" docs
|
|
71
|
+
|
|
72
|
+
**Term structure template**:
|
|
73
|
+
```markdown
|
|
74
|
+
### [Term Name]
|
|
75
|
+
|
|
76
|
+
**Definition**: [One sentence explanation]
|
|
77
|
+
|
|
78
|
+
**Why it matters**: [Practical importance in SDD workflow]
|
|
79
|
+
|
|
80
|
+
**Example**:
|
|
81
|
+
[Concrete example from LeanSpec usage]
|
|
82
|
+
|
|
83
|
+
**See also**: [Links to related concepts or deeper docs]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Plan
|
|
87
|
+
|
|
88
|
+
- [ ] Audit current Core Concepts docs - identify what's philosophy vs terminology
|
|
89
|
+
- [ ] Create list of essential SDD terms users encounter
|
|
90
|
+
- [ ] Write clean definitions for each term (using template)
|
|
91
|
+
- [ ] Create new "Philosophy & Principles" section in docs
|
|
92
|
+
- [ ] Move philosophical content to new section
|
|
93
|
+
- [ ] Update navigation/sidebar in docs-site
|
|
94
|
+
- [ ] Verify all cross-references still work
|
|
95
|
+
|
|
96
|
+
## Test
|
|
97
|
+
|
|
98
|
+
- [ ] New user can find definition of any term they encounter in first use
|
|
99
|
+
- [ ] Each term has clear, concise definition (no philosophy/principles mixed in)
|
|
100
|
+
- [ ] Examples are concrete and actionable
|
|
101
|
+
- [ ] Philosophy content successfully moved to separate section
|
|
102
|
+
- [ ] All internal doc links still work after reorganization
|
|
103
|
+
|
|
104
|
+
## Notes
|
|
105
|
+
|
|
106
|
+
<!-- Optional: Research findings, alternatives considered, open questions -->
|