@leanspec/ui 0.2.9-dev.20251205030455 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
- package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
- package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +5 -0
- package/.next/standalone/packages/ui/.next/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
- package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
- package/.next/standalone/packages/ui/.next/routes-manifest.json +40 -0
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js +1 -1
- 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/page_client-reference-manifest.js +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 +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +18 -20
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -20
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +23 -26
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +5 -5
- package/.next/standalone/packages/ui/.next/server/app/api/context/route.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js.nft.json +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]/context/route.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/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]/dependency-graph/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js +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 +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 +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 +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/[id]/tags/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/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 +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]/metadata/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js +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 +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 +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/api/tags/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page.js +4 -3
- package/.next/standalone/packages/ui/.next/server/app/context/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/context/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js +4 -3
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.rsc +24 -25
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +24 -25
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +20 -24
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page.js +4 -3
- package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page.js +4 -3
- package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +5 -0
- package/.next/standalone/packages/ui/.next/server/chunks/284a8_app_api_projects_[id]_specs_[spec]_dependency-graph_route_actions_f18476ed.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_tags_route_actions_40899744.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_specs_[id]_metadata_route_actions_139bb09f.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0afcada7._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0e63a440._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0ec6f9b0._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0edb782a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0fbfea15._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1706515f._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1f037512._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__38780e00._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3a535244._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__41f43652._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__5081ac6f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__526764b2._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__548e27d4._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__71d98924._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__74af400b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8075fe29._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9ce722b4._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9cf3bf21._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2d7cbed._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b1ad8b69._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c7a4906b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__de15d2aa._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e16f7651._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e2fcb5c6._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e8d9903e._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f6936b89._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_projects_[id]_specs_[spec]_metadata_route_actions_35af9a8c.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_tags_route_actions_64625b2c.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__01bfc8ff._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__13f96ef4._.js → [root-of-the-server]__174e1ca1._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__38c56adc._.js → [root-of-the-server]__2d9202e8._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__338c65fe._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__366688dd._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__44b603f9._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__4ec37765._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__69a0d63a._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__7f55abaa._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c158c9a9._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c7735439._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e2c760eb._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__84124d4b._.js → [root-of-the-server]__ead1539c._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ec5b96a5._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_adb9d7cb._.js → _22274047._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_59616aa6._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_5e1484f9._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_8ab6f9ca._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_be836d6a._.js +5 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ec637d7c._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_page_tsx_6e166c8e._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_spec-detail-wrapper_tsx_fd35401c._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
- package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
- package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/0c7bbb59865774a1.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/0fe978002ba489fb.js +3 -0
- package/.next/standalone/packages/ui/.next/static/chunks/1169d4ac8f9df687.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/241b6b1c83610ebf.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/6d7922838a3513a4.js +1 -0
- package/.next/{static/chunks/7a00633903e066b4.js → standalone/packages/ui/.next/static/chunks/781328ee279ffc41.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/937cb3894a606899.js +5 -0
- package/.next/standalone/packages/ui/.next/static/chunks/9cf644b700f37825.css +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/dbce73f7087f2470.js +10 -0
- package/.next/standalone/packages/ui/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
- package/.next/standalone/packages/ui/dist/BUILD_ID +1 -0
- package/.next/standalone/packages/ui/dist/public/f864aa7e7061c0600e35cf3d879b27cf.txt +1 -0
- package/.next/standalone/packages/ui/dist/public/favicon.ico +0 -0
- package/.next/standalone/packages/ui/dist/public/file.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/github-mark-white.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/github-mark.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/globe.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/icon.svg +7 -0
- package/.next/standalone/packages/ui/dist/public/logo-dark-bg.svg +17 -0
- package/.next/standalone/packages/ui/dist/public/logo-with-bg.svg +17 -0
- package/.next/standalone/packages/ui/dist/public/logo.svg +17 -0
- package/.next/standalone/packages/ui/dist/public/next.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/vercel.svg +1 -0
- package/.next/standalone/packages/ui/dist/public/window.svg +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/README.md +196 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +75 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +44 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/014-complete-custom-frontmatter/README.md +175 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/016-github-action/README.md +317 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/017-vscode-extension/README.md +261 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CLI-DESIGN.md +380 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION-EXAMPLES.md +230 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION.md +285 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/IMPLEMENTATION.md +358 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/README.md +303 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/TESTING.md +368 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/VALIDATION-RULES.md +327 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/024-pattern-aware-list-grouping/README.md +117 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/025-template-config-updates/README.md +73 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/026-init-pattern-selection/README.md +109 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/034-copilot-slash-commands/README.md +107 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/ARCHITECTURE.md +244 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/IMPLEMENTATION.md +429 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +302 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/036-pm-integrations/README.md +158 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-AI-ASSISTED.md +359 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-FULL-LIFECYCLE.md +86 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-REAL-FEATURE.md +437 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-SCRIPT.md +365 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-FINAL.md +203 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SESSION-2025-11-06.md +174 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SUMMARY.md +156 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/IMPLEMENTATION.md +183 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/MARKETING.md +229 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/NEXT-STEPS-DEMO.md +243 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/README.md +217 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/SESSION-2025-11-06.md +166 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/TESTING.md +126 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/ACTUAL-IMPLEMENTATION.md +108 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/DESIGN.md +382 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/IMPLEMENTATION.md +144 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/RATIONALE.md +146 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/README.md +208 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/TESTING.md +182 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/047-git-backfill-timestamps/README.md +314 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/FINDINGS.md +113 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/GUIDELINES.md +237 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/README.md +149 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-COMPARISONS.md +175 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-CONSTRAINTS.md +254 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/FIRST-PRINCIPLES.md +376 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-ROADMAP.md +240 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-TOOLS.md +175 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/README.md +374 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/051-docs-system-prompt-principles/README.md +339 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/052-branding-assets/README.md +128 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/053-spec-assets-philosophy/README.md +97 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/DESIGN-DECISIONS.md +93 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/OUTPUT-FORMAT-SPEC.md +146 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/README.md +175 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART1.md +397 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART2.md +342 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS.md +44 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CHANGES.md +150 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CONCERNS-ANALYSIS.md +351 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/DOCS-ALIGNMENT-ANALYSIS.md +238 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/README.md +280 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-DRAFT.md +372 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-REFINED.md +466 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/AUDIT-RESULTS.md +178 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/README.md +174 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/README.md +295 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/VALIDATION-RESULTS.md +487 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/ANALYSIS.md +241 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/DESIGN.md +279 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/IMPLEMENTATION.md +642 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/NOTES.md +125 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/README.md +286 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/ARCHITECTURE.md +392 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/COMMANDS.md +1002 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/CONTEXT-ENGINEERING.md +411 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/IMPLEMENTATION.md +812 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/README.md +504 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/TESTING.md +724 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/060-core-concepts-coherence/README.md +125 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/061-ai-assisted-spec-writing/README.md +299 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/IMPLEMENTATION-PLAN.md +174 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PAGE-SPECIFICATIONS.md +265 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PROBLEM-ANALYSIS.md +36 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/README.md +243 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/SOLUTION-DESIGN.md +82 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/DESIGN.md +338 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/EXAMPLES.md +354 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/IMPLEMENTATION.md +189 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/README.md +119 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/064-docs-site-zh-translation/README.md +170 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/065-v03-planning/README.md +158 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/066-context-economy-thresholds-refinement/README.md +842 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/067-monorepo-core-extraction/README.md +358 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/DESIGN.md +444 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/README.md +357 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/069-token-counting-utils/README.md +551 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/070-mcp-token-counting-tool/README.md +372 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/071-simplified-token-validation/README.md +489 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +285 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/073-template-engine-agents-md/README.md +323 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/074-content-at-creation/README.md +136 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/075-intelligent-search-engine/README.md +399 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/076-programmatic-spec-relationships/README.md +301 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/077-archiving-strategy/README.md +235 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/078-sub-spec-template-system/README.md +303 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/079-cli-alphabetical-organization/README.md +196 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/080-mcp-server-modular-architecture/README.md +388 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +824 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DATABASE.md +111 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DEPLOYMENT.md +69 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/FILESYSTEM.md +77 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/IMPLEMENTATION.md +184 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +496 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/083-web-navigation-performance/README.md +490 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/084-sub-spec-visibility-in-tools/README.md +389 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/085-cli-relationship-commands/README.md +920 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/086-template-component-deduplication/README.md +146 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +607 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +104 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +124 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +129 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +244 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +148 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +54 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/001-typescript-cli-migration/README.md +37 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/002-template-system-redesign/README.md +60 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/003-init-system-redesign/README.md +113 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/README.md +69 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/SUMMARY.md +112 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/005-structured-frontmatter/README.md +229 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/006-pm-visualization-tools/README.md +406 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/007-system-prompt-updates/README.md +168 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/008-commander-migration/README.md +174 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/009-cli-ux-enhancement/README.md +212 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/010-commands-refactor/README.md +249 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/README.md +60 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/TEST_SUMMARY.md +139 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/012-sub-spec-files/README.md +722 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/013-custom-spec-templates/README.md +413 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/015-npm-publishing/README.md +255 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/019-readme-improvement/README.md +252 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/020-documentation-website/README.md +253 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/021-docusaurus-vercel-migration/README.md +612 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/022-flexible-folder-structure/README.md +794 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/DESIGN.md +834 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/README.md +255 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/027-cli-ui-ux-optimization/README.md +454 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/028-cli-ui-modernization/README.md +172 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/IMPLEMENTATION.md +152 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/README.md +95 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/030-created-date-format-bug/README.md +87 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/031-gantt-ux-improvements/README.md +230 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/032-console-log-chalk-security/README.md +89 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/033-mcp-server/README.md +89 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/037-docs-overhaul/README.md +166 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-flat-structure-migration/README.md +276 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-mcp-frontmatter-bug-fix/README.md +122 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-simplify-viewer-commands/README.md +198 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-template-variable-sync/README.md +192 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/040-spec-viewer-commands/README.md +171 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/042-mcp-error-handling/README.md +200 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/044-spec-relationships-clarity/README.md +317 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/DESIGN.md +276 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/IMPLEMENTATION.md +241 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/README.md +139 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/TESTING.md +328 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/archived/050-tool-redesign-first-principles/README.md +400 -0
- package/.next/standalone/packages/ui/dist/static/chunks/0c19c69aa7625475.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/116800b03245a1e5.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/15843a3d7584e314.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/19e80edf527aef5c.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/465954d5af3284a9.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/5abeeb89f1412a80.js +3 -0
- package/.next/standalone/packages/ui/dist/static/chunks/5c2072ad938de8ed.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/6a05a93ec8fa7b83.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/778e42188e450b39.css +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/a02c1f50ff00204f.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/a45464b9776dd88e.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/a6dad97d9634a72d.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/b0ea0ac61604f843.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/c06e85b449720194.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/c557ac675be79771.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/cad005a57ffbb2d3.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/cdf6fe33bc65efbc.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/d12ed5dbe44caed7.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/d1ebe5c1a344f4ca.js +5 -0
- package/.next/standalone/packages/ui/dist/static/chunks/d42cf1682bc46652.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/dde5d8bddd7fbfcf.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/ebd89051637b9a47.js +4 -0
- package/.next/standalone/packages/ui/dist/static/chunks/ec82875d18b29f47.js +2 -0
- package/.next/standalone/packages/ui/dist/static/chunks/f0b701df9769bcc5.js +19 -0
- package/.next/standalone/packages/ui/dist/static/chunks/turbopack-1c09a99f4c9e28d3.js +3 -0
- package/.next/standalone/packages/ui/package.json +1 -1
- package/.next/standalone/packages/ui/server.js +1 -1
- package/.next/standalone/packages/ui/src/app/api/dependencies/route.ts +4 -67
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/dependencies/route.ts +3 -52
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/dependency-graph/route.ts +129 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/metadata/route.ts +170 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/status/route.ts +9 -2
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/tags/route.ts +25 -0
- package/.next/standalone/packages/ui/src/app/api/specs/[id]/metadata/route.ts +184 -0
- package/.next/standalone/packages/ui/src/app/api/tags/route.ts +16 -0
- package/.next/standalone/packages/ui/src/app/context/page.tsx +22 -0
- package/.next/standalone/packages/ui/src/app/dashboard-client.tsx +14 -4
- package/.next/standalone/packages/ui/src/app/dependencies/dependencies-client.tsx +2 -2
- package/.next/standalone/packages/ui/src/app/dependencies/page.tsx +25 -13
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/dependencies/page.tsx +1 -14
- package/.next/standalone/packages/ui/src/app/projects/page.tsx +234 -113
- package/.next/standalone/packages/ui/src/app/specs/[id]/page.tsx +24 -1
- package/.next/standalone/packages/ui/src/app/specs/page.tsx +22 -0
- package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +1 -1
- package/.next/standalone/packages/ui/src/app/stats/page.tsx +22 -0
- package/.next/standalone/packages/ui/src/components/editable-spec-metadata.tsx +152 -0
- package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +6 -0
- package/.next/standalone/packages/ui/src/components/priority-editor.tsx +153 -0
- package/.next/standalone/packages/ui/src/components/project-switcher.tsx +53 -8
- package/.next/standalone/packages/ui/src/components/spec-detail-client.tsx +23 -20
- package/.next/standalone/packages/ui/src/components/status-editor.tsx +153 -0
- package/.next/standalone/packages/ui/src/components/tags-editor.tsx +238 -0
- package/.next/standalone/packages/ui/src/components/ui/command.tsx +1 -1
- package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +151 -15
- package/.next/standalone/packages/ui/src/lib/projects/registry.ts +1 -1
- package/.next/standalone/packages/ui/src/lib/specs/sources/multi-project-source.ts +21 -5
- package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
- package/.next/static/chunks/0c7bbb59865774a1.js +1 -0
- package/.next/static/chunks/0fe978002ba489fb.js +3 -0
- package/.next/static/chunks/1169d4ac8f9df687.js +1 -0
- package/.next/static/chunks/241b6b1c83610ebf.js +1 -0
- package/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
- package/.next/static/chunks/6d7922838a3513a4.js +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/7a00633903e066b4.js → static/chunks/781328ee279ffc41.js} +1 -1
- package/.next/static/chunks/937cb3894a606899.js +5 -0
- package/.next/static/chunks/9cf644b700f37825.css +1 -0
- package/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
- package/.next/static/chunks/dbce73f7087f2470.js +10 -0
- package/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
- package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_buildManifest.js +11 -0
- package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_clientMiddlewareManifest.json +1 -0
- package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_ssgManifest.js +1 -0
- package/package.json +2 -2
- package/.next/standalone/node_modules/.pnpm/source-map@0.8.0-beta.0/node_modules/source-map/package.json +0 -95
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__18aca702._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__27348781._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3a7f0840._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3e17db24._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__6e06fd2a._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__97b99cc0._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9d9758e1._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b212b9bd._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b9c03a57._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e99e7672._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f38a5f20._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__fa8cf2bc._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__53f4506c._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__921689ca._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a9d7fd42._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b27b2469._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b3633d6e._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_03aa8d19._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_28fe1532._.js +0 -5
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_90eed09a._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f9129aae._.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/04de9ed512b8098b.js +0 -10
- package/.next/standalone/packages/ui/.next/static/chunks/3d12a8c3152b526d.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/7931c6cb379305b1.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/7f9a218732be8099.js +0 -5
- package/.next/standalone/packages/ui/.next/static/chunks/8a6e8f3394240dbb.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/8d8c106c6848d15b.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/a640b005f2e15d98.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/a7075a240adea8e8.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/ddb2935cfe5310c7.css +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/f924ae32752e1583.js +0 -1
- package/.next/static/chunks/04de9ed512b8098b.js +0 -10
- package/.next/static/chunks/3d12a8c3152b526d.js +0 -3
- package/.next/static/chunks/7931c6cb379305b1.js +0 -1
- package/.next/static/chunks/7f9a218732be8099.js +0 -5
- package/.next/static/chunks/8a6e8f3394240dbb.js +0 -1
- package/.next/static/chunks/8d8c106c6848d15b.js +0 -1
- package/.next/static/chunks/a640b005f2e15d98.js +0 -1
- package/.next/static/chunks/a7075a240adea8e8.js +0 -1
- package/.next/static/chunks/ddb2935cfe5310c7.css +0 -1
- package/.next/static/chunks/f924ae32752e1583.js +0 -1
- /package/.next/standalone/packages/ui/.next/static/{T8X9UGfigRL0qWZiBHNjy → s9uUE9DnvJD2xIz-iBGMe}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/ui/.next/static/{T8X9UGfigRL0qWZiBHNjy → s9uUE9DnvJD2xIz-iBGMe}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{T8X9UGfigRL0qWZiBHNjy → s9uUE9DnvJD2xIz-iBGMe}/_ssgManifest.js +0 -0
- /package/.next/{static/T8X9UGfigRL0qWZiBHNjy → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_buildManifest.js +0 -0
- /package/.next/{static/T8X9UGfigRL0qWZiBHNjy → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_clientMiddlewareManifest.json +0 -0
- /package/.next/{static/T8X9UGfigRL0qWZiBHNjy → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: complete
|
|
3
|
+
created: 2025-11-03
|
|
4
|
+
tags: [core, ux, multi-user]
|
|
5
|
+
priority: high
|
|
6
|
+
updated: 2025-11-03
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Folder Structure: Polish & Multi-User Support
|
|
10
|
+
|
|
11
|
+
> Polish the flexible folder structure implementation and add simple conflict warnings for multi-user workflows
|
|
12
|
+
|
|
13
|
+
## Status Update (2025-11-03)
|
|
14
|
+
|
|
15
|
+
✅ **Critical items completed:**
|
|
16
|
+
- Date prefix default implementation
|
|
17
|
+
- `lean-spec check` command with conflict detection
|
|
18
|
+
- Auto-check integration across all spec-reading commands
|
|
19
|
+
|
|
20
|
+
📋 **Minor polish issues tracked separately:**
|
|
21
|
+
- [005-pattern-aware-list-grouping](../005-pattern-aware-list-grouping/) - Fix list.ts date grouping
|
|
22
|
+
- [006-template-config-updates](../006-template-config-updates/) - Update template configs
|
|
23
|
+
- [012-init-pattern-selection](../012-init-pattern-selection/) - Add pattern selection to init wizard
|
|
24
|
+
|
|
25
|
+
This spec focused on solving the critical multi-user conflict issue. The minor polish items are now tracked individually for cleaner organization and focused work.
|
|
26
|
+
|
|
27
|
+
## Problem
|
|
28
|
+
|
|
29
|
+
The flexible folder structure (spec 001) is complete and working, but has issues affecting UX and multi-user workflows:
|
|
30
|
+
|
|
31
|
+
### 🚨 Critical: Sequence Conflicts in Multi-User Workflows
|
|
32
|
+
|
|
33
|
+
**Current behavior:**
|
|
34
|
+
```bash
|
|
35
|
+
# User A and User B work on same repo
|
|
36
|
+
User A: lean-spec create feature-a # Gets 001-feature-a
|
|
37
|
+
User B: lean-spec create feature-b # Also gets 001-feature-b (locally)
|
|
38
|
+
|
|
39
|
+
# Both push to git → merge conflict!
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Root cause:** `getGlobalNextSeq()` scans local filesystem only, so two users on different branches get same sequence number.
|
|
43
|
+
|
|
44
|
+
### ⚠️ Minor Polish Issues
|
|
45
|
+
|
|
46
|
+
1. **`list.ts` hardcoded date grouping** - Doesn't adapt to flat or custom patterns
|
|
47
|
+
2. **Template configs use legacy format** - Works but inconsistent
|
|
48
|
+
3. **No pattern selection in `lean-spec init`** - Must manually edit config
|
|
49
|
+
|
|
50
|
+
## Proposal
|
|
51
|
+
|
|
52
|
+
Keep it **lean and simple**: Focus on prevention with good defaults + basic conflict detection.
|
|
53
|
+
|
|
54
|
+
### 1. Use Date Prefix by Default (Prevention)
|
|
55
|
+
|
|
56
|
+
Make `prefix: "{YYYYMMDD}-"` the default for flat pattern:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Result:
|
|
60
|
+
# User A on Nov 3: 20251103-001-feature-a
|
|
61
|
+
# User B on Nov 3: 20251103-002-feature-b # Different sequence
|
|
62
|
+
# User A on Nov 4: 20251104-003-feature-c # Different date
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Benefits:**
|
|
66
|
+
- ✅ Prevents conflicts naturally (date + sequence)
|
|
67
|
+
- ✅ Already implemented, just change default
|
|
68
|
+
- ✅ Chronological sorting automatic
|
|
69
|
+
- ✅ No extra complexity
|
|
70
|
+
|
|
71
|
+
**Trade-off:**
|
|
72
|
+
- Longer folder names (but clearer)
|
|
73
|
+
|
|
74
|
+
### 2. Add Simple Conflict Warning
|
|
75
|
+
|
|
76
|
+
Add `lean-spec check` command that warns about duplicate sequences:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
$ lean-spec check
|
|
80
|
+
⚠️ Sequence conflicts detected:
|
|
81
|
+
Sequence 001:
|
|
82
|
+
- specs/001-feature-a/
|
|
83
|
+
- specs/001-feature-b/
|
|
84
|
+
|
|
85
|
+
Fix manually or use date prefix to prevent conflicts.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Auto-check on relevant commands:**
|
|
89
|
+
|
|
90
|
+
Commands that **should** auto-check (interact with specs):
|
|
91
|
+
- ✅ `lean-spec create` - Just created a spec (might conflict)
|
|
92
|
+
- ✅ `lean-spec list` - Browsing specs
|
|
93
|
+
- ✅ `lean-spec board` - Viewing kanban
|
|
94
|
+
- ✅ `lean-spec update` - Modifying a spec
|
|
95
|
+
- ✅ `lean-spec search` - Searching specs
|
|
96
|
+
- ✅ `lean-spec stats` - Viewing stats
|
|
97
|
+
- ✅ `lean-spec timeline` - Viewing timeline
|
|
98
|
+
- ✅ `lean-spec gantt` - Viewing gantt chart
|
|
99
|
+
- ✅ `lean-spec deps` - Checking dependencies
|
|
100
|
+
- ✅ `lean-spec files` - Viewing spec files
|
|
101
|
+
- ✅ `lean-spec archive` - Archiving a spec
|
|
102
|
+
|
|
103
|
+
Commands that **should NOT** auto-check (don't interact with specs):
|
|
104
|
+
- ❌ `lean-spec init` - Initializing new project (no specs yet)
|
|
105
|
+
- ❌ `lean-spec templates` - Managing templates only
|
|
106
|
+
- ❌ `lean-spec check` - Already checking conflicts
|
|
107
|
+
|
|
108
|
+
**Behavior:**
|
|
109
|
+
- Non-blocking: Shows warning but doesn't fail
|
|
110
|
+
- Contextual: Only shows if conflicts exist
|
|
111
|
+
- Silent mode: Can disable with env var or config
|
|
112
|
+
- Fast: < 10ms overhead
|
|
113
|
+
|
|
114
|
+
**That's it.** No auto-fix, no complex strategies. Users can:
|
|
115
|
+
- Rename folders manually
|
|
116
|
+
- Use date prefix to prevent future conflicts
|
|
117
|
+
- Live with conflicts if they don't care
|
|
118
|
+
|
|
119
|
+
### 3. Pattern-Aware List Grouping
|
|
120
|
+
|
|
121
|
+
Make `lean-spec list` adapt to the configured pattern (flat vs custom).
|
|
122
|
+
|
|
123
|
+
### 4. Update Template Configs
|
|
124
|
+
|
|
125
|
+
Use new config format consistently across all templates.
|
|
126
|
+
|
|
127
|
+
### 5. Pattern Selection in Init
|
|
128
|
+
|
|
129
|
+
Let users choose pattern during `lean-spec init`.
|
|
130
|
+
|
|
131
|
+
## Design
|
|
132
|
+
|
|
133
|
+
See [DESIGN.md](./DESIGN.md) for implementation details.
|
|
134
|
+
|
|
135
|
+
**Summary:**
|
|
136
|
+
1. Update `DEFAULT_CONFIG` to include `prefix: '{YYYYMMDD}-'`
|
|
137
|
+
2. Add `--no-prefix` flag for solo devs who want clean numbers
|
|
138
|
+
3. Implement simple `lean-spec check` command
|
|
139
|
+
4. Auto-check on all spec-reading commands (11 total)
|
|
140
|
+
5. Make `list` command pattern-aware
|
|
141
|
+
6. Update templates
|
|
142
|
+
7. Add pattern selection to init wizard
|
|
143
|
+
|
|
144
|
+
## Plan
|
|
145
|
+
|
|
146
|
+
- [ ] Update default config to use date prefix
|
|
147
|
+
- [ ] Add `--no-prefix` flag to create command
|
|
148
|
+
- [ ] Implement `lean-spec check` (detect only, no auto-fix)
|
|
149
|
+
- [ ] Add auto-check to: create, list, board, update, search, stats, timeline, gantt, deps, files, archive
|
|
150
|
+
- [ ] Add config option to disable auto-check
|
|
151
|
+
- [ ] Fix list grouping to be pattern-aware
|
|
152
|
+
- [ ] Update all template configs
|
|
153
|
+
- [ ] Add pattern selection to init wizard
|
|
154
|
+
- [ ] Update documentation
|
|
155
|
+
- [ ] Add tests for all auto-check integrations
|
|
156
|
+
|
|
157
|
+
## Test
|
|
158
|
+
|
|
159
|
+
- [ ] Date prefix applied by default
|
|
160
|
+
- [ ] `--no-prefix` works for solo devs
|
|
161
|
+
- [ ] `lean-spec check` detects duplicate sequences
|
|
162
|
+
- [ ] Auto-check runs on all 11 spec-reading commands
|
|
163
|
+
- [ ] Auto-check is non-blocking (shows warning only)
|
|
164
|
+
- [ ] Auto-check can be disabled via config
|
|
165
|
+
- [ ] Auto-check doesn't run on init/templates/check commands
|
|
166
|
+
- [ ] List groups correctly for flat/custom patterns
|
|
167
|
+
- [ ] Templates use new format
|
|
168
|
+
- [ ] Init wizard offers pattern choices
|
|
169
|
+
- [ ] All existing tests pass
|
|
170
|
+
|
|
171
|
+
## Success Criteria
|
|
172
|
+
|
|
173
|
+
- [ ] New projects use date prefix by default (prevents conflicts)
|
|
174
|
+
- [ ] Solo devs can opt out with `--no-prefix`
|
|
175
|
+
- [ ] Conflicts detected via `lean-spec check`
|
|
176
|
+
- [ ] Auto-check warns users in relevant commands
|
|
177
|
+
- [ ] Auto-check is non-blocking and can be disabled
|
|
178
|
+
- [ ] List command adapts to pattern
|
|
179
|
+
- [ ] Templates consistent
|
|
180
|
+
- [ ] Init offers pattern selection
|
|
181
|
+
- [ ] Documentation clear and simple
|
|
182
|
+
|
|
183
|
+
## Notes
|
|
184
|
+
|
|
185
|
+
### Why Date Prefix is the Right Default
|
|
186
|
+
|
|
187
|
+
**Pros:**
|
|
188
|
+
- Natural conflict prevention
|
|
189
|
+
- No complexity added
|
|
190
|
+
- Works offline, always
|
|
191
|
+
- Chronological sorting
|
|
192
|
+
- Already implemented
|
|
193
|
+
|
|
194
|
+
**Cons:**
|
|
195
|
+
- Longer folder names
|
|
196
|
+
- But: can opt out with `--no-prefix`
|
|
197
|
+
|
|
198
|
+
### Why Not Auto-Fix?
|
|
199
|
+
|
|
200
|
+
Keep it **lean**:
|
|
201
|
+
- Manual fix is simple (rename folder)
|
|
202
|
+
- Auto-fix adds complexity (strategies, reference updates, etc.)
|
|
203
|
+
- If conflicts are rare (they are with date prefix), manual is fine
|
|
204
|
+
- Users know their context best
|
|
205
|
+
|
|
206
|
+
### Auto-Check Design
|
|
207
|
+
|
|
208
|
+
**When to check:**
|
|
209
|
+
- ✅ After `lean-spec create` - User just created a spec
|
|
210
|
+
- ✅ Before `lean-spec list` - User browsing specs
|
|
211
|
+
- ✅ Before `lean-spec board` - User viewing kanban
|
|
212
|
+
- ✅ Before `lean-spec update` - User modifying spec
|
|
213
|
+
- ✅ Before `lean-spec search` - User searching specs
|
|
214
|
+
- ✅ Before `lean-spec stats` - User viewing statistics
|
|
215
|
+
- ✅ Before `lean-spec timeline` - User viewing timeline
|
|
216
|
+
- ✅ Before `lean-spec gantt` - User viewing gantt chart
|
|
217
|
+
- ✅ Before `lean-spec deps` - User checking dependencies
|
|
218
|
+
- ✅ Before `lean-spec files` - User listing spec files
|
|
219
|
+
- ✅ Before `lean-spec archive` - User archiving spec
|
|
220
|
+
|
|
221
|
+
**When NOT to check:**
|
|
222
|
+
- ❌ `lean-spec init` - No specs exist yet
|
|
223
|
+
- ❌ `lean-spec templates` - Template management only
|
|
224
|
+
- ❌ `lean-spec check` - Already checking
|
|
225
|
+
|
|
226
|
+
**Rationale:**
|
|
227
|
+
Any command that reads/displays/modifies specs should check for conflicts. This gives users visibility into problems at natural interaction points without being intrusive.
|
|
228
|
+
|
|
229
|
+
**How it works:**
|
|
230
|
+
- Fast check (< 10ms for 100s of specs)
|
|
231
|
+
- Non-blocking (shows warning, doesn't fail)
|
|
232
|
+
- Appears at end of output
|
|
233
|
+
- Can disable globally in config
|
|
234
|
+
|
|
235
|
+
**Config option:**
|
|
236
|
+
```json
|
|
237
|
+
{
|
|
238
|
+
"autoCheck": false // Disable auto-check
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
**Example output:**
|
|
243
|
+
```bash
|
|
244
|
+
$ lean-spec create feature-c
|
|
245
|
+
✓ Created: specs/001-feature-c/
|
|
246
|
+
|
|
247
|
+
⚠️ Conflict warning: Sequence 001 used by multiple specs
|
|
248
|
+
Run: lean-spec check
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Backward Compatibility
|
|
252
|
+
|
|
253
|
+
- Existing projects continue working
|
|
254
|
+
- No forced migration
|
|
255
|
+
- Can opt in to date prefix by editing config
|
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: complete
|
|
3
|
+
created: '2025-11-03'
|
|
4
|
+
tags:
|
|
5
|
+
- cli
|
|
6
|
+
- ux
|
|
7
|
+
- enhancement
|
|
8
|
+
priority: high
|
|
9
|
+
completed: '2025-11-03'
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# cli-ui-ux-optimization
|
|
13
|
+
|
|
14
|
+
> **Status**: ✅ Complete · **Priority**: High · **Created**: 2025-11-03 · **Tags**: cli, ux, enhancement
|
|
15
|
+
|
|
16
|
+
**Project**: lean-spec
|
|
17
|
+
**Team**: Core Development
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
The current CLI rendering has inconsistent UI/UX that lacks the polish and richness of modern CLI tools like Python's `rich` library. We want to create a **beautiful, feature-rich terminal experience** using Ink/React while maintaining consistency.
|
|
22
|
+
|
|
23
|
+
**Current Problems:**
|
|
24
|
+
|
|
25
|
+
1. **Inconsistent rendering**: Some commands use plain `console.log`, others use Ink - creating a jarring mix
|
|
26
|
+
2. **Underutilized Ink**: Where we use Ink, we're not leveraging its full power (animations, layouts, interactions)
|
|
27
|
+
3. **Poor visual design**: Awkward borders, fixed widths, cluttered spacing
|
|
28
|
+
4. **Limited interactivity**: No way to navigate, filter, or interact with results
|
|
29
|
+
5. **Missing rich features**: No syntax highlighting, progress indicators, live updates, or animations
|
|
30
|
+
6. **Primitive components**: Current Board/Stats components are basic and don't showcase what's possible
|
|
31
|
+
|
|
32
|
+
**Why now**: Modern CLI tools (GitHub CLI, Vercel CLI, `rich` in Python) set high UX standards. We should match that quality.
|
|
33
|
+
|
|
34
|
+
## Design
|
|
35
|
+
|
|
36
|
+
### Vision: `rich` for Node.js
|
|
37
|
+
|
|
38
|
+
Create a **rich, beautiful CLI experience** inspired by Python's `rich` library:
|
|
39
|
+
|
|
40
|
+
- **Beautiful tables** with automatic column sizing, borders, and alignment
|
|
41
|
+
- **Rich panels** with rounded corners, padding, and titles
|
|
42
|
+
- **Syntax highlighting** for code snippets and file content
|
|
43
|
+
- **Progress bars** and spinners for async operations
|
|
44
|
+
- **Live updating** displays (e.g., real-time build status)
|
|
45
|
+
- **Interactive elements** (arrow keys to navigate, space to select)
|
|
46
|
+
- **Color gradients** and visual flair (when appropriate)
|
|
47
|
+
- **Responsive layouts** that adapt to terminal width
|
|
48
|
+
|
|
49
|
+
### Unified Ink Architecture
|
|
50
|
+
|
|
51
|
+
**ALL commands should use Ink/React** for consistent, rich rendering:
|
|
52
|
+
|
|
53
|
+
Benefits:
|
|
54
|
+
- Beautiful, modern UI with professional polish
|
|
55
|
+
- Interactive features (keyboard navigation, selection)
|
|
56
|
+
- Live updates without re-rendering full screen
|
|
57
|
+
- Component reusability and composition
|
|
58
|
+
- Consistent spacing, colors, and layouts
|
|
59
|
+
- Easy to add animations and transitions
|
|
60
|
+
|
|
61
|
+
### Visual Design Principles
|
|
62
|
+
|
|
63
|
+
**Inspired by `rich` (Python):**
|
|
64
|
+
|
|
65
|
+
1. **Beautiful typography**: Use box-drawing characters, rounded corners, proper spacing
|
|
66
|
+
2. **Smart colors**: Gradients, semantic colors, and theme consistency
|
|
67
|
+
3. **Visual hierarchy**: Clear structure with panels, tables, and sections
|
|
68
|
+
4. **Responsive design**: Adapt to terminal width (80 cols minimum, expand to full width)
|
|
69
|
+
5. **Rich information density**: Show more data in an organized, scannable way
|
|
70
|
+
6. **Smooth interactions**: Animations for transitions, loading states
|
|
71
|
+
|
|
72
|
+
### Component Library
|
|
73
|
+
|
|
74
|
+
Build reusable Ink components:
|
|
75
|
+
|
|
76
|
+
**`<Panel>`** - Rounded box with title, padding, and optional footer
|
|
77
|
+
```tsx
|
|
78
|
+
<Panel title="📊 Spec Statistics" border="rounded" padding={1}>
|
|
79
|
+
{content}
|
|
80
|
+
</Panel>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**`<Table>`** - Auto-sized columns with headers, borders, alignment
|
|
84
|
+
```tsx
|
|
85
|
+
<Table
|
|
86
|
+
columns={[
|
|
87
|
+
{ header: 'Spec', align: 'left', width: 'auto' },
|
|
88
|
+
{ header: 'Status', align: 'center', width: 12 },
|
|
89
|
+
{ header: 'Priority', align: 'left', width: 10 }
|
|
90
|
+
]}
|
|
91
|
+
rows={rows}
|
|
92
|
+
border="rounded"
|
|
93
|
+
/>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**`<ProgressBar>`** - Rich progress indicator with percentage, ETA
|
|
97
|
+
```tsx
|
|
98
|
+
<ProgressBar
|
|
99
|
+
current={15}
|
|
100
|
+
total={26}
|
|
101
|
+
label="Loading specs"
|
|
102
|
+
showPercentage
|
|
103
|
+
showETA
|
|
104
|
+
/>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**`<KeyValueList>`** - Aligned key-value pairs
|
|
108
|
+
```tsx
|
|
109
|
+
<KeyValueList
|
|
110
|
+
items={[
|
|
111
|
+
{ key: 'Status', value: 'In Progress', color: 'yellow' },
|
|
112
|
+
{ key: 'Priority', value: 'High', color: 'red' }
|
|
113
|
+
]}
|
|
114
|
+
keyWidth={15}
|
|
115
|
+
/>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**`<Tree>`** - Hierarchical display with indent lines
|
|
119
|
+
```tsx
|
|
120
|
+
<Tree
|
|
121
|
+
data={specsByDate}
|
|
122
|
+
renderNode={(spec) => <SpecNode spec={spec} />}
|
|
123
|
+
expandable
|
|
124
|
+
/>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**`<Tabs>`** - Multiple views with tab navigation
|
|
128
|
+
```tsx
|
|
129
|
+
<Tabs activeTab={activeTab} onChange={setActiveTab}>
|
|
130
|
+
<Tab name="board" label="📋 Board">
|
|
131
|
+
<Board specs={specs} />
|
|
132
|
+
</Tab>
|
|
133
|
+
<Tab name="list" label="📄 List">
|
|
134
|
+
<SpecList specs={specs} />
|
|
135
|
+
</Tab>
|
|
136
|
+
</Tabs>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Enhanced Commands
|
|
140
|
+
|
|
141
|
+
**`lean-spec list`** - Interactive tree view:
|
|
142
|
+
- Group by date with collapsible sections
|
|
143
|
+
- Filter with `j/k` keys, select with space
|
|
144
|
+
- Show inline previews (first line of spec)
|
|
145
|
+
- Responsive columns that adapt to terminal width
|
|
146
|
+
|
|
147
|
+
**`lean-spec stats`** - Rich dashboard:
|
|
148
|
+
- Multiple panels (status, priority, tags, timeline)
|
|
149
|
+
- Bar charts for distribution
|
|
150
|
+
- Sparklines for trends over time
|
|
151
|
+
- Color gradients for visual appeal
|
|
152
|
+
|
|
153
|
+
**`lean-spec board`** - Enhanced kanban:
|
|
154
|
+
- Prettier cards with rounded corners
|
|
155
|
+
- Syntax-highlighted metadata
|
|
156
|
+
- Drag-and-drop to change status (with arrow keys)
|
|
157
|
+
- Live updates if specs change
|
|
158
|
+
|
|
159
|
+
**`lean-spec search`** - Rich results:
|
|
160
|
+
- Highlight matching text
|
|
161
|
+
- Context snippets with line numbers
|
|
162
|
+
- Preview pane for selected result
|
|
163
|
+
- Fuzzy matching scores
|
|
164
|
+
|
|
165
|
+
**`lean-spec timeline/gantt`** - Visual timeline:
|
|
166
|
+
- Rich ASCII chart with colors
|
|
167
|
+
- Milestone markers
|
|
168
|
+
- Dependencies shown with lines/arrows
|
|
169
|
+
- Zoom controls
|
|
170
|
+
|
|
171
|
+
### Standardized UI Patterns
|
|
172
|
+
|
|
173
|
+
**Panel Headers** (with rounded corners):
|
|
174
|
+
```
|
|
175
|
+
╭─ 📊 Spec Statistics ────────────────────────────────────╮
|
|
176
|
+
│ │
|
|
177
|
+
│ Content here... │
|
|
178
|
+
│ │
|
|
179
|
+
╰──────────────────────────────────────────────────────────╯
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Tables** (auto-sized, aligned):
|
|
183
|
+
```
|
|
184
|
+
╭────────────────────────────┬──────────┬──────────┬────────────────╮
|
|
185
|
+
│ Spec │ Status │ Priority │ Tags │
|
|
186
|
+
├────────────────────────────┼──────────┼──────────┼────────────────┤
|
|
187
|
+
│ 001-auth-system │ ✅ │ high │ api, security │
|
|
188
|
+
│ 002-ui-components │ 🔨 │ medium │ frontend, ui │
|
|
189
|
+
│ 003-performance-opt │ 📅 │ low │ optimization │
|
|
190
|
+
╰────────────────────────────┴──────────┴──────────┴────────────────╯
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Progress Bars**:
|
|
194
|
+
```
|
|
195
|
+
Loading specs ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% (26/26) ⠹
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Hierarchical Lists**:
|
|
199
|
+
```
|
|
200
|
+
📂 20251103/
|
|
201
|
+
├─ 📄 001-feature-a/ ✅ high [api, backend]
|
|
202
|
+
├─ 📄 002-feature-b/ 🔨 medium [frontend]
|
|
203
|
+
└─ 📄 003-feature-c/ 📅 low [docs]
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Status Cards**:
|
|
207
|
+
```
|
|
208
|
+
╭─ 📅 Planned (6) ──────────────╮
|
|
209
|
+
│ │
|
|
210
|
+
│ • auth-system │
|
|
211
|
+
│ [api, security] │
|
|
212
|
+
│ │
|
|
213
|
+
│ • ui-components │
|
|
214
|
+
│ [frontend, ui] │
|
|
215
|
+
│ │
|
|
216
|
+
╰───────────────────────────────╯
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Key-Value Displays**:
|
|
220
|
+
```
|
|
221
|
+
Status: 🔨 In Progress
|
|
222
|
+
Priority: 🔴 High
|
|
223
|
+
Created: 2025-11-03
|
|
224
|
+
Tags: cli, ux, enhancement
|
|
225
|
+
Assignee: @alice
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Additional Ink Libraries
|
|
229
|
+
|
|
230
|
+
Consider integrating:
|
|
231
|
+
|
|
232
|
+
- **ink-box** - Beautiful boxes/panels with borders
|
|
233
|
+
- **ink-gradient** - Gradient text effects
|
|
234
|
+
- **ink-table** - Rich table rendering
|
|
235
|
+
- **ink-spinner** - Enhanced spinners and loading states
|
|
236
|
+
- **ink-select-input** - Interactive selection lists
|
|
237
|
+
- **ink-text-input** - Text input for search/filter
|
|
238
|
+
- **ink-progress-bar** - Progress indicators
|
|
239
|
+
- **ink-big-text** - Large ASCII art text for headers
|
|
240
|
+
|
|
241
|
+
## Plan
|
|
242
|
+
|
|
243
|
+
### Phase 1: Component Library Foundation
|
|
244
|
+
- [x] Audit current rendering patterns
|
|
245
|
+
- [ ] Install additional Ink libraries (ink-box, ink-table, ink-gradient, ink-spinner, etc.)
|
|
246
|
+
- [ ] Create shared component library in `src/components/ui/`:
|
|
247
|
+
- [ ] `Panel.tsx` - Rounded boxes with titles
|
|
248
|
+
- [ ] `Table.tsx` - Auto-sized table with borders
|
|
249
|
+
- [ ] `ProgressBar.tsx` - Rich progress indicator
|
|
250
|
+
- [ ] `KeyValueList.tsx` - Aligned key-value pairs
|
|
251
|
+
- [ ] `Tree.tsx` - Hierarchical tree view
|
|
252
|
+
- [ ] `StatusBadge.tsx` - Styled status indicators
|
|
253
|
+
- [ ] `Card.tsx` - Content cards with metadata
|
|
254
|
+
- [ ] Document component usage patterns
|
|
255
|
+
|
|
256
|
+
### Phase 2: Migrate Commands to Rich UI
|
|
257
|
+
- [ ] Refactor `stats` command:
|
|
258
|
+
- [ ] Multi-panel dashboard layout
|
|
259
|
+
- [ ] Bar charts for distributions
|
|
260
|
+
- [ ] Sparklines for trends
|
|
261
|
+
- [ ] Color gradients
|
|
262
|
+
- [ ] Refactor `board` command:
|
|
263
|
+
- [ ] Beautiful kanban cards with rounded corners
|
|
264
|
+
- [ ] Better column layout
|
|
265
|
+
- [ ] Interactive navigation (arrow keys)
|
|
266
|
+
- [ ] Smooth transitions
|
|
267
|
+
- [ ] Refactor `list` command:
|
|
268
|
+
- [ ] Convert to Ink component
|
|
269
|
+
- [ ] Interactive tree view
|
|
270
|
+
- [ ] Collapsible date groups
|
|
271
|
+
- [ ] Filter/search capabilities
|
|
272
|
+
- [ ] Refactor `search` command:
|
|
273
|
+
- [ ] Rich result cards
|
|
274
|
+
- [ ] Highlighted matches
|
|
275
|
+
- [ ] Preview pane
|
|
276
|
+
- [ ] Navigation controls
|
|
277
|
+
|
|
278
|
+
### Phase 3: Interactive Features
|
|
279
|
+
- [ ] Add keyboard navigation to all commands
|
|
280
|
+
- [ ] Implement selection/multi-select where appropriate
|
|
281
|
+
- [ ] Add live-updating displays (watch mode)
|
|
282
|
+
- [ ] Add interactive filtering (press `/` to filter)
|
|
283
|
+
- [ ] Add help overlays (press `?` for help)
|
|
284
|
+
|
|
285
|
+
### Phase 4: Advanced Visualizations
|
|
286
|
+
- [ ] Enhance `timeline` command with rich ASCII chart
|
|
287
|
+
- [ ] Enhance `gantt` command with colors and dependencies
|
|
288
|
+
- [ ] Add `deps` command visualization (dependency graph)
|
|
289
|
+
- [ ] Add spec preview/quick view feature
|
|
290
|
+
- [ ] Add diff view for spec changes
|
|
291
|
+
|
|
292
|
+
### Phase 5: Polish & Testing
|
|
293
|
+
- [ ] Ensure responsive layouts (80-200+ column terminals)
|
|
294
|
+
- [ ] Test with various terminal emulators
|
|
295
|
+
- [ ] Add loading states and transitions
|
|
296
|
+
- [ ] Performance optimization for large spec counts
|
|
297
|
+
- [ ] Accessibility considerations (high contrast mode)
|
|
298
|
+
|
|
299
|
+
## Test
|
|
300
|
+
|
|
301
|
+
### Visual Quality Tests
|
|
302
|
+
- [ ] All commands render beautifully with rich UI
|
|
303
|
+
- [ ] Tables auto-size correctly and align properly
|
|
304
|
+
- [ ] Panels have proper rounded corners and padding
|
|
305
|
+
- [ ] Colors are vibrant but not overwhelming
|
|
306
|
+
- [ ] Typography is clean and readable
|
|
307
|
+
|
|
308
|
+
### Interactive Tests
|
|
309
|
+
- [ ] Keyboard navigation works (arrow keys, enter, esc)
|
|
310
|
+
- [ ] Selection states are visually clear
|
|
311
|
+
- [ ] Live updates don't cause flicker
|
|
312
|
+
- [ ] Transitions are smooth
|
|
313
|
+
- [ ] Help overlays appear on `?` key
|
|
314
|
+
|
|
315
|
+
### Responsive Tests
|
|
316
|
+
- [ ] Works in 80-column terminal (minimum)
|
|
317
|
+
- [ ] Expands nicely in wide terminals (200+ columns)
|
|
318
|
+
- [ ] Content doesn't overflow or wrap awkwardly
|
|
319
|
+
- [ ] Tables adapt column widths intelligently
|
|
320
|
+
- [ ] Mobile terminal emulators (Termux, etc.)
|
|
321
|
+
|
|
322
|
+
### Terminal Compatibility
|
|
323
|
+
- [ ] iTerm2 (macOS)
|
|
324
|
+
- [ ] Terminal.app (macOS)
|
|
325
|
+
- [ ] Windows Terminal
|
|
326
|
+
- [ ] VS Code integrated terminal
|
|
327
|
+
- [ ] Alacritty, Kitty, WezTerm
|
|
328
|
+
- [ ] tmux/screen sessions
|
|
329
|
+
|
|
330
|
+
### Performance Tests
|
|
331
|
+
- [ ] 50+ specs render smoothly
|
|
332
|
+
- [ ] 100+ specs don't cause lag
|
|
333
|
+
- [ ] Interactive navigation is responsive
|
|
334
|
+
- [ ] Live updates don't impact performance
|
|
335
|
+
- [ ] Memory usage is reasonable
|
|
336
|
+
|
|
337
|
+
### Edge Cases
|
|
338
|
+
- [ ] Empty states look good (no specs)
|
|
339
|
+
- [ ] Single spec displays properly
|
|
340
|
+
- [ ] Very long spec names are truncated nicely
|
|
341
|
+
- [ ] Many tags (10+) display without clutter
|
|
342
|
+
- [ ] Unicode/emoji render correctly
|
|
343
|
+
- [ ] Custom frontmatter fields display well
|
|
344
|
+
|
|
345
|
+
### Integration Tests
|
|
346
|
+
- [ ] All existing tests pass
|
|
347
|
+
- [ ] Output can still be piped/redirected (fallback to plain text)
|
|
348
|
+
- [ ] `--json` flags work alongside rich UI
|
|
349
|
+
- [ ] CI/CD detects non-interactive terminals correctly
|
|
350
|
+
- [ ] Works with `NO_COLOR` environment variable
|
|
351
|
+
|
|
352
|
+
## Notes
|
|
353
|
+
|
|
354
|
+
### Inspiration: Python's `rich` Library
|
|
355
|
+
|
|
356
|
+
Python's `rich` is the gold standard for beautiful CLI UIs. Key features to emulate:
|
|
357
|
+
|
|
358
|
+
- **Rich tables**: Auto-sized, aligned, with beautiful borders
|
|
359
|
+
- **Syntax highlighting**: For code, JSON, YAML, Markdown
|
|
360
|
+
- **Progress bars**: With percentage, ETA, visual appeal
|
|
361
|
+
- **Panels**: Rounded boxes with titles and padding
|
|
362
|
+
- **Tree views**: Hierarchical data with connecting lines
|
|
363
|
+
- **Live displays**: Real-time updating without flicker
|
|
364
|
+
- **Colors & gradients**: Vibrant but tasteful
|
|
365
|
+
- **Typography**: Smart use of box-drawing characters
|
|
366
|
+
|
|
367
|
+
### Ink Ecosystem
|
|
368
|
+
|
|
369
|
+
Existing libraries to leverage:
|
|
370
|
+
|
|
371
|
+
- **ink-box**: Rounded panels and boxes
|
|
372
|
+
- **ink-table**: Feature-rich tables
|
|
373
|
+
- **ink-gradient**: Text gradients
|
|
374
|
+
- **ink-spinner**: Enhanced loading indicators
|
|
375
|
+
- **ink-select-input**: Interactive lists
|
|
376
|
+
- **ink-text-input**: Search/filter inputs
|
|
377
|
+
- **ink-progress-bar**: Progress indicators
|
|
378
|
+
- **ink-link**: Clickable terminal links
|
|
379
|
+
- **ink-testing-library**: Component testing
|
|
380
|
+
|
|
381
|
+
### Design Philosophy
|
|
382
|
+
|
|
383
|
+
**"Rich but tasteful"** - We want beautiful, feature-rich UI that:
|
|
384
|
+
- Delights users with polish and attention to detail
|
|
385
|
+
- Makes information clear and scannable
|
|
386
|
+
- Adds interactivity where it helps productivity
|
|
387
|
+
- Looks professional and modern
|
|
388
|
+
- Stays performant even with lots of data
|
|
389
|
+
|
|
390
|
+
**Not** aiming for:
|
|
391
|
+
- Over-the-top animations or effects
|
|
392
|
+
- Complexity for complexity's sake
|
|
393
|
+
- Slowness or lag
|
|
394
|
+
- Unusable in non-interactive contexts
|
|
395
|
+
|
|
396
|
+
### Current State Analysis
|
|
397
|
+
|
|
398
|
+
**What works:**
|
|
399
|
+
- Basic Ink integration for stats/board
|
|
400
|
+
- Spinner for loading states
|
|
401
|
+
- Color usage for status/priority
|
|
402
|
+
|
|
403
|
+
**What needs improvement:**
|
|
404
|
+
- Limited component reusability
|
|
405
|
+
- Basic layouts (no panels, limited tables)
|
|
406
|
+
- No interactivity (navigation, selection)
|
|
407
|
+
- Inconsistent across commands (list uses console.log)
|
|
408
|
+
- Fixed widths don't adapt to terminal
|
|
409
|
+
- Missing advanced features (syntax highlighting, live updates)
|
|
410
|
+
|
|
411
|
+
### Technical Considerations
|
|
412
|
+
|
|
413
|
+
**Performance:**
|
|
414
|
+
- Ink's React reconciliation is fast enough for our use case
|
|
415
|
+
- Virtual rendering prevents full-screen redraws
|
|
416
|
+
- Component memoization for optimal updates
|
|
417
|
+
|
|
418
|
+
**Compatibility:**
|
|
419
|
+
- Detect interactive vs non-interactive terminals
|
|
420
|
+
- Fallback to plain output for pipes/redirects
|
|
421
|
+
- Support `NO_COLOR` environment variable
|
|
422
|
+
- Handle narrow terminals gracefully (80 col minimum)
|
|
423
|
+
|
|
424
|
+
**Testing:**
|
|
425
|
+
- Use ink-testing-library for component tests
|
|
426
|
+
- Snapshot tests for visual regression
|
|
427
|
+
- Integration tests for command output
|
|
428
|
+
|
|
429
|
+
### Alternatives Considered
|
|
430
|
+
|
|
431
|
+
1. **Blessed** - Lower-level, more complex, less React-like
|
|
432
|
+
2. **Plain chalk/console.log** - Too simple, lacks richness
|
|
433
|
+
3. **Charm's Bubble Tea (Go)** - Wrong language, but great inspiration
|
|
434
|
+
4. **Textual (Python)** - Another Python rich library, good reference
|
|
435
|
+
|
|
436
|
+
### Future Enhancements
|
|
437
|
+
|
|
438
|
+
**Phase 2 (post-launch):**
|
|
439
|
+
- Interactive spec editing (TUI editor)
|
|
440
|
+
- Real-time collaboration indicators
|
|
441
|
+
- Git diff visualization
|
|
442
|
+
- Dependency graph visualization
|
|
443
|
+
- Custom themes/color schemes
|
|
444
|
+
- Plugin system for custom commands
|
|
445
|
+
- Watch mode with live updates
|
|
446
|
+
- Export to HTML/PDF with styling
|
|
447
|
+
|
|
448
|
+
**Advanced features:**
|
|
449
|
+
- Mouse support (click to navigate)
|
|
450
|
+
- Split-pane views
|
|
451
|
+
- Fuzzy search with live preview
|
|
452
|
+
- Animated transitions
|
|
453
|
+
- Sound effects (optional, for fun)
|
|
454
|
+
- ASCII art banners
|