@leanspec/ui 0.2.7-dev.20251126100750 → 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 +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +2 -2
- 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/{_6lLNPdRExIaMIs9fFqLK → 6nq7WNafPv5Bf_7mWgRQ-}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/ui/.next/static/{_6lLNPdRExIaMIs9fFqLK → 6nq7WNafPv5Bf_7mWgRQ-}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{_6lLNPdRExIaMIs9fFqLK → 6nq7WNafPv5Bf_7mWgRQ-}/_ssgManifest.js +0 -0
- /package/.next/static/{_6lLNPdRExIaMIs9fFqLK → 6nq7WNafPv5Bf_7mWgRQ-}/_buildManifest.js +0 -0
- /package/.next/static/{_6lLNPdRExIaMIs9fFqLK → 6nq7WNafPv5Bf_7mWgRQ-}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{_6lLNPdRExIaMIs9fFqLK → 6nq7WNafPv5Bf_7mWgRQ-}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: planned
|
|
3
|
+
created: '2025-11-17'
|
|
4
|
+
tags:
|
|
5
|
+
- web
|
|
6
|
+
- github
|
|
7
|
+
- integration
|
|
8
|
+
- v0.3
|
|
9
|
+
priority: high
|
|
10
|
+
created_at: '2025-11-17T08:19:16.821Z'
|
|
11
|
+
depends_on:
|
|
12
|
+
- 082-web-realtime-sync-architecture
|
|
13
|
+
updated_at: '2025-11-17T08:19:22.898Z'
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# GitHub Multi-Project Integration
|
|
17
|
+
|
|
18
|
+
> **Status**: 🗓️ Planned · **Priority**: High · **Created**: 2025-11-17 · **Tags**: web, github, integration, v0.3
|
|
19
|
+
|
|
20
|
+
**Project**: lean-spec
|
|
21
|
+
**Team**: Core Development
|
|
22
|
+
**Depends On**: Spec 082 (web-realtime-sync-architecture)
|
|
23
|
+
|
|
24
|
+
## Overview
|
|
25
|
+
|
|
26
|
+
**The Problem**: LeanSpec Web currently only displays specs from the LeanSpec monorepo itself. We need to support **external GitHub repositories** so teams can showcase their specs on https://lean-spec-web.vercel.app, creating a community discovery platform.
|
|
27
|
+
|
|
28
|
+
**Current Limitation:**
|
|
29
|
+
- Web app only reads local `specs/` directory (filesystem mode from spec 082)
|
|
30
|
+
- No way to add external GitHub repositories
|
|
31
|
+
- Can't showcase how other teams use LeanSpec
|
|
32
|
+
- Misses opportunity for community growth and real-world examples
|
|
33
|
+
|
|
34
|
+
**Why This Matters:**
|
|
35
|
+
- **Community Growth**: Let teams showcase their LeanSpec usage publicly
|
|
36
|
+
- **Social Proof**: Real-world examples help adoption
|
|
37
|
+
- **Discovery**: Find projects using LeanSpec methodology
|
|
38
|
+
- **Validation**: See how different teams adapt the framework
|
|
39
|
+
|
|
40
|
+
**What We Need**: Implement Phase 2 of spec 082's dual-mode architecture:
|
|
41
|
+
1. Database-backed storage for external repo specs
|
|
42
|
+
2. GitHub API integration for syncing specs
|
|
43
|
+
3. Project management UI (add/remove repos)
|
|
44
|
+
4. Scheduled sync with GitHub repos
|
|
45
|
+
5. Multi-project showcase interface
|
|
46
|
+
|
|
47
|
+
## Design
|
|
48
|
+
|
|
49
|
+
### Architecture (from Spec 082)
|
|
50
|
+
|
|
51
|
+
Building on the dual-mode architecture:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
55
|
+
│ Web App (Next.js) │
|
|
56
|
+
├─────────────────────────────────────────────────────────────┤
|
|
57
|
+
│ Unified Service Layer │
|
|
58
|
+
│ (SpecsService - Already Built) │
|
|
59
|
+
├──────────────────────────┬──────────────────────────────────┤
|
|
60
|
+
│ Mode 1: Filesystem │ Mode 2: Database + GitHub │
|
|
61
|
+
│ (LeanSpec specs) │ (External Repos) ← IMPLEMENT │
|
|
62
|
+
│ ✅ COMPLETE │ 🚧 THIS SPEC │
|
|
63
|
+
└──────────────────────────┴──────────────────────────────────┘
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Key Components to Implement:**
|
|
67
|
+
|
|
68
|
+
1. **DatabaseSource** (already stubbed in spec 082)
|
|
69
|
+
- PostgreSQL/SQLite schema for specs and projects
|
|
70
|
+
- Store spec metadata and content
|
|
71
|
+
- Query optimization for performance (<50ms)
|
|
72
|
+
|
|
73
|
+
2. **GitHubSyncService** (new)
|
|
74
|
+
- Octokit integration for GitHub API
|
|
75
|
+
- Discover specs in external repos
|
|
76
|
+
- Parse frontmatter and content
|
|
77
|
+
- Handle rate limits (5000 req/hour)
|
|
78
|
+
- Parallel fetching for performance
|
|
79
|
+
|
|
80
|
+
3. **Project Management UI** (new)
|
|
81
|
+
- Add repository by GitHub URL
|
|
82
|
+
- View sync status and last update
|
|
83
|
+
- Remove/disable projects
|
|
84
|
+
- Sync history and logs
|
|
85
|
+
|
|
86
|
+
4. **Scheduled Sync** (new)
|
|
87
|
+
- Vercel Cron job for periodic sync
|
|
88
|
+
- Configurable intervals (5-60 min)
|
|
89
|
+
- Graceful error handling
|
|
90
|
+
- Sync metrics and monitoring
|
|
91
|
+
|
|
92
|
+
### Database Schema
|
|
93
|
+
|
|
94
|
+
```sql
|
|
95
|
+
-- Projects table (external GitHub repos)
|
|
96
|
+
CREATE TABLE projects (
|
|
97
|
+
id UUID PRIMARY KEY,
|
|
98
|
+
name TEXT NOT NULL,
|
|
99
|
+
github_url TEXT NOT NULL UNIQUE,
|
|
100
|
+
owner TEXT NOT NULL,
|
|
101
|
+
repo TEXT NOT NULL,
|
|
102
|
+
branch TEXT DEFAULT 'main',
|
|
103
|
+
specs_dir TEXT DEFAULT 'specs/',
|
|
104
|
+
enabled BOOLEAN DEFAULT true,
|
|
105
|
+
last_synced_at TIMESTAMP,
|
|
106
|
+
sync_status TEXT, -- 'pending', 'syncing', 'success', 'error'
|
|
107
|
+
sync_error TEXT,
|
|
108
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
109
|
+
updated_at TIMESTAMP DEFAULT NOW()
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
-- Specs table (cached from GitHub)
|
|
113
|
+
CREATE TABLE specs (
|
|
114
|
+
id UUID PRIMARY KEY,
|
|
115
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
116
|
+
sequence INTEGER,
|
|
117
|
+
name TEXT NOT NULL,
|
|
118
|
+
title TEXT,
|
|
119
|
+
content TEXT NOT NULL,
|
|
120
|
+
frontmatter JSONB,
|
|
121
|
+
status TEXT,
|
|
122
|
+
priority TEXT,
|
|
123
|
+
tags TEXT[],
|
|
124
|
+
created_at TIMESTAMP,
|
|
125
|
+
updated_at TIMESTAMP,
|
|
126
|
+
github_path TEXT,
|
|
127
|
+
github_url TEXT,
|
|
128
|
+
UNIQUE(project_id, sequence)
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
-- Sync logs for debugging
|
|
132
|
+
CREATE TABLE sync_logs (
|
|
133
|
+
id UUID PRIMARY KEY,
|
|
134
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
135
|
+
started_at TIMESTAMP,
|
|
136
|
+
completed_at TIMESTAMP,
|
|
137
|
+
status TEXT, -- 'success', 'error', 'partial'
|
|
138
|
+
specs_synced INTEGER,
|
|
139
|
+
error_message TEXT,
|
|
140
|
+
duration_ms INTEGER
|
|
141
|
+
);
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### GitHub Sync Flow
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
// GitHubSyncService implementation
|
|
148
|
+
class GitHubSyncService {
|
|
149
|
+
private octokit: Octokit;
|
|
150
|
+
|
|
151
|
+
async syncProject(project: Project): Promise<SyncResult> {
|
|
152
|
+
const startTime = Date.now();
|
|
153
|
+
|
|
154
|
+
try {
|
|
155
|
+
// 1. Discover spec directories in repo
|
|
156
|
+
const specDirs = await this.discoverSpecs(project);
|
|
157
|
+
|
|
158
|
+
// 2. Fetch specs in parallel (respect rate limits)
|
|
159
|
+
const specs = await this.fetchSpecs(project, specDirs);
|
|
160
|
+
|
|
161
|
+
// 3. Parse frontmatter and content
|
|
162
|
+
const parsed = specs.map(s => this.parseSpec(s));
|
|
163
|
+
|
|
164
|
+
// 4. Update database
|
|
165
|
+
await this.updateDatabase(project.id, parsed);
|
|
166
|
+
|
|
167
|
+
// 5. Log sync result
|
|
168
|
+
return {
|
|
169
|
+
status: 'success',
|
|
170
|
+
specsCount: parsed.length,
|
|
171
|
+
duration: Date.now() - startTime
|
|
172
|
+
};
|
|
173
|
+
} catch (error) {
|
|
174
|
+
await this.logError(project.id, error);
|
|
175
|
+
return { status: 'error', error: error.message };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private async discoverSpecs(project: Project): Promise<string[]> {
|
|
180
|
+
// Use GitHub tree API to find NNN-name directories
|
|
181
|
+
const tree = await this.octokit.git.getTree({
|
|
182
|
+
owner: project.owner,
|
|
183
|
+
repo: project.repo,
|
|
184
|
+
tree_sha: project.branch,
|
|
185
|
+
recursive: 'true'
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
return tree.data.tree
|
|
189
|
+
.filter(item => item.type === 'tree')
|
|
190
|
+
.filter(item => /^\d{3}-[\w-]+$/.test(item.path))
|
|
191
|
+
.map(item => item.path);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Project Management UI
|
|
197
|
+
|
|
198
|
+
**Pages to create:**
|
|
199
|
+
1. `/admin/projects` - List all projects with sync status
|
|
200
|
+
2. `/admin/projects/add` - Add new GitHub repository
|
|
201
|
+
3. `/admin/projects/[id]` - Project details and sync history
|
|
202
|
+
4. `/projects/[id]` - Public view of project specs (multi-project showcase)
|
|
203
|
+
|
|
204
|
+
**UI Components:**
|
|
205
|
+
- Project card with sync status indicator
|
|
206
|
+
- Add project form with validation
|
|
207
|
+
- Sync now button (manual trigger)
|
|
208
|
+
- Sync history timeline
|
|
209
|
+
- Error display with retry option
|
|
210
|
+
|
|
211
|
+
### Performance & Rate Limiting
|
|
212
|
+
|
|
213
|
+
**GitHub API Limits:**
|
|
214
|
+
- 5000 requests/hour (authenticated)
|
|
215
|
+
- ~1 file per request for content fetching
|
|
216
|
+
- Need to batch and parallelize efficiently
|
|
217
|
+
|
|
218
|
+
**Optimization Strategies:**
|
|
219
|
+
1. Use tree API to discover all specs in 1 request
|
|
220
|
+
2. Fetch README.md files in parallel (limit: 10 concurrent)
|
|
221
|
+
3. Cache responses with appropriate TTL
|
|
222
|
+
4. Only sync changed files (compare timestamps/SHA)
|
|
223
|
+
5. Graceful degradation on rate limit hit
|
|
224
|
+
|
|
225
|
+
**Sync Schedule:**
|
|
226
|
+
- Default: Every 30 minutes
|
|
227
|
+
- Configurable per project
|
|
228
|
+
- Manual sync available via UI
|
|
229
|
+
- Webhook support (future Phase 3)
|
|
230
|
+
|
|
231
|
+
## Plan
|
|
232
|
+
|
|
233
|
+
### Phase 1: Database & Schema (Days 1-2)
|
|
234
|
+
- [ ] Set up PostgreSQL on Vercel
|
|
235
|
+
- [ ] Create database migration script
|
|
236
|
+
- [ ] Implement schema (projects, specs, sync_logs)
|
|
237
|
+
- [ ] Add database connection pooling
|
|
238
|
+
- [ ] Test CRUD operations
|
|
239
|
+
|
|
240
|
+
### Phase 2: GitHub Sync Service (Days 3-5)
|
|
241
|
+
- [ ] Implement `GitHubSyncService` class
|
|
242
|
+
- [ ] Add Octokit integration
|
|
243
|
+
- [ ] Implement spec discovery (tree API)
|
|
244
|
+
- [ ] Implement parallel spec fetching
|
|
245
|
+
- [ ] Add frontmatter parsing
|
|
246
|
+
- [ ] Implement rate limit handling
|
|
247
|
+
- [ ] Add error handling and logging
|
|
248
|
+
- [ ] Test with real GitHub repos
|
|
249
|
+
|
|
250
|
+
### Phase 3: Database Source Integration (Day 6)
|
|
251
|
+
- [ ] Implement `DatabaseSource.getAllSpecs(projectId)`
|
|
252
|
+
- [ ] Implement `DatabaseSource.getSpec(projectId, specId)`
|
|
253
|
+
- [ ] Update `SpecsService` routing logic
|
|
254
|
+
- [ ] Add caching layer for database queries
|
|
255
|
+
- [ ] Test database source performance
|
|
256
|
+
|
|
257
|
+
### Phase 4: Project Management UI (Days 7-9)
|
|
258
|
+
- [ ] Create `/admin/projects` list page
|
|
259
|
+
- [ ] Create add project form with validation
|
|
260
|
+
- [ ] Add GitHub URL parser (extract owner/repo)
|
|
261
|
+
- [ ] Implement project CRUD operations
|
|
262
|
+
- [ ] Add sync status indicators
|
|
263
|
+
- [ ] Create project detail page with history
|
|
264
|
+
- [ ] Add manual sync trigger button
|
|
265
|
+
- [ ] Test project management flow
|
|
266
|
+
|
|
267
|
+
### Phase 5: Scheduled Sync (Days 10-11)
|
|
268
|
+
- [ ] Create Vercel Cron endpoint (`/api/cron/sync`)
|
|
269
|
+
- [ ] Configure `vercel.json` with cron schedule
|
|
270
|
+
- [ ] Implement sync job logic (iterate projects)
|
|
271
|
+
- [ ] Add sync queue (prevent concurrent syncs)
|
|
272
|
+
- [ ] Implement sync logging
|
|
273
|
+
- [ ] Add monitoring/alerting
|
|
274
|
+
- [ ] Test cron execution
|
|
275
|
+
|
|
276
|
+
### Phase 6: Multi-Project Showcase (Days 12-13)
|
|
277
|
+
- [ ] Create `/projects` landing page (all projects)
|
|
278
|
+
- [ ] Create `/projects/[id]` project view
|
|
279
|
+
- [ ] Add project selector in navigation
|
|
280
|
+
- [ ] Update board view for multi-project
|
|
281
|
+
- [ ] Update search to support multi-project
|
|
282
|
+
- [ ] Add project metadata display
|
|
283
|
+
- [ ] Test multi-project navigation
|
|
284
|
+
|
|
285
|
+
### Phase 7: Testing & Polish (Days 14-15)
|
|
286
|
+
- [ ] End-to-end testing with 3+ real repos
|
|
287
|
+
- [ ] Performance testing (100+ specs)
|
|
288
|
+
- [ ] Error scenario testing
|
|
289
|
+
- [ ] Rate limit testing
|
|
290
|
+
- [ ] UI/UX polish
|
|
291
|
+
- [ ] Documentation updates
|
|
292
|
+
- [ ] Deploy to production
|
|
293
|
+
|
|
294
|
+
## Test
|
|
295
|
+
|
|
296
|
+
### Database & Schema
|
|
297
|
+
- [ ] Migrations run successfully
|
|
298
|
+
- [ ] Can create/read/update/delete projects
|
|
299
|
+
- [ ] Can store and retrieve specs
|
|
300
|
+
- [ ] Foreign key constraints work
|
|
301
|
+
- [ ] Indexes improve query performance (<50ms)
|
|
302
|
+
|
|
303
|
+
### GitHub Sync Service
|
|
304
|
+
- [ ] Can discover specs in test repo
|
|
305
|
+
- [ ] Fetches all README.md files correctly
|
|
306
|
+
- [ ] Parses frontmatter accurately
|
|
307
|
+
- [ ] Handles repos with no specs gracefully
|
|
308
|
+
- [ ] Rate limiting works (pauses/retries)
|
|
309
|
+
- [ ] Parallel fetching improves performance
|
|
310
|
+
- [ ] Error handling logs properly
|
|
311
|
+
- [ ] Can sync 50+ specs in <30 seconds
|
|
312
|
+
|
|
313
|
+
### Integration
|
|
314
|
+
- [ ] `SpecsService` routes to correct source
|
|
315
|
+
- [ ] Filesystem mode still works (LeanSpec specs)
|
|
316
|
+
- [ ] Database mode works (external repos)
|
|
317
|
+
- [ ] Can switch between projects seamlessly
|
|
318
|
+
- [ ] Cache invalidation works correctly
|
|
319
|
+
|
|
320
|
+
### Project Management UI
|
|
321
|
+
- [ ] Can add new project via form
|
|
322
|
+
- [ ] GitHub URL validation works
|
|
323
|
+
- [ ] Manual sync triggers correctly
|
|
324
|
+
- [ ] Sync status updates in real-time
|
|
325
|
+
- [ ] Error messages display clearly
|
|
326
|
+
- [ ] Can disable/enable projects
|
|
327
|
+
- [ ] Can delete projects (cascades to specs)
|
|
328
|
+
|
|
329
|
+
### Scheduled Sync
|
|
330
|
+
- [ ] Cron job executes on schedule
|
|
331
|
+
- [ ] Syncs all enabled projects
|
|
332
|
+
- [ ] Skips disabled projects
|
|
333
|
+
- [ ] Logs sync results
|
|
334
|
+
- [ ] Handles errors gracefully
|
|
335
|
+
- [ ] Doesn't run concurrent syncs
|
|
336
|
+
|
|
337
|
+
### Multi-Project Showcase
|
|
338
|
+
- [ ] Projects list displays all repos
|
|
339
|
+
- [ ] Project page shows only that project's specs
|
|
340
|
+
- [ ] Navigation between projects works
|
|
341
|
+
- [ ] Search scopes to current project
|
|
342
|
+
- [ ] Board view shows correct project
|
|
343
|
+
- [ ] URLs are shareable and bookmarkable
|
|
344
|
+
|
|
345
|
+
### Performance
|
|
346
|
+
- [ ] Database queries <50ms
|
|
347
|
+
- [ ] GitHub sync <30s for typical repo
|
|
348
|
+
- [ ] Multi-project page loads <200ms
|
|
349
|
+
- [ ] No memory leaks during long syncs
|
|
350
|
+
- [ ] Handles 10+ projects gracefully
|
|
351
|
+
|
|
352
|
+
## Notes
|
|
353
|
+
|
|
354
|
+
### Key Design Decisions
|
|
355
|
+
|
|
356
|
+
**Why Database for External Repos?**
|
|
357
|
+
- GitHub API rate limits (5000 req/hour)
|
|
358
|
+
- API latency too high for good UX (200-500ms per file)
|
|
359
|
+
- Need scheduled sync, not on-demand fetching
|
|
360
|
+
- Enables advanced features (search across projects, analytics)
|
|
361
|
+
|
|
362
|
+
**Why PostgreSQL?**
|
|
363
|
+
- Vercel has native Postgres support
|
|
364
|
+
- Better JSONB support for frontmatter
|
|
365
|
+
- Scales better than SQLite for multi-project
|
|
366
|
+
|
|
367
|
+
**Sync Interval Trade-offs:**
|
|
368
|
+
- **5 min**: More realtime, higher API usage
|
|
369
|
+
- **30 min**: Balanced (recommended)
|
|
370
|
+
- **60 min**: Lower API usage, less fresh
|
|
371
|
+
|
|
372
|
+
**Alternative Considered: Direct GitHub API**
|
|
373
|
+
- Pros: No database, always fresh
|
|
374
|
+
- Cons: Rate limits, slow UX, no caching
|
|
375
|
+
- Decision: Database mode better for multi-project
|
|
376
|
+
|
|
377
|
+
### Future Enhancements (Phase 3)
|
|
378
|
+
- GitHub webhooks for near-realtime sync (<10s)
|
|
379
|
+
- Private repo support (GitHub OAuth)
|
|
380
|
+
- Incremental sync (only changed files)
|
|
381
|
+
- Cross-project search and analytics
|
|
382
|
+
- Featured projects and discovery feed
|
|
383
|
+
|
|
384
|
+
### Related Specs
|
|
385
|
+
- **082**: Dual-mode architecture foundation (complete)
|
|
386
|
+
- **035**: Live specs showcase vision (complete)
|
|
387
|
+
- **068**: Live specs UX enhancements (complete)
|