--- name: bootstrap-project description: 全新项目从零起步时,按决策清单完成技术栈选型、目录分层与工具链配置;区别于配置工程约定的 setup-dev-skills。 disable-model-invocation: true --- # 项目起步与地基 全新项目从零起步时,按照决策清单建立清晰的技术栈选型、目录分层与工程基线。本 skill 保持**技术栈无关**,不预设也不推荐具体框架名,只提供关键权衡维度,由人做出最终技术决策。 完成本流程后,代码库应当具备可运行的最小脚手架、清晰的目录分工以及一条可本地验证的检查命令。 ## 何时使用、何时跳过 仓库里还没有能运行的骨架(没有可执行入口、没有统一检查命令)时才走完整流程。如果仓库已经有部分决策落地(例如已选定语言和格式化工具,只是缺目录约定),只梳理尚未确定的那组决策,已经确定的直接读取现状,不要重新发起讨论。 ## 执行流程 按顺序逐项梳理三组核心决策。每组决策均通过与用户沟通确认,不可由 agent 默认代行技术栈选型。 ### 1. 技术栈选型 根据产品形态与工程目标评估以下权衡维度,确认语言、运行时与基础库: - **目标形态与交付介质**: - CLI 工具:优先考虑启动时延、单文件打包分发能力与跨平台二进制支持。 - Web 应用与前台界面:优先考虑服务端渲染需求、客户端首屏资源体积与生态成熟度。 - 后端服务与 API:优先考虑并发模型、I/O 密集还是计算密集、长连接或流式通信需求。 - 库与共享包:优先考虑运行时零依赖、类型声明导出及向后兼容机制。 - **生态与团队约束**: - 优先选择团队现有认知范围内能兜底的技术,避免为了尝鲜引入团队无人熟悉的语言或冷门框架。 - 评估生态活跃度、文档质量与三方依赖维护寿命。 - **依赖审视**: - 坚持最小依赖原则。能用标准库解决的不要引入三方包;非必须的元框架先不引入。 **完成标志**:语言、运行时与核心库已与用户确认一致,且这是一个难以逆转的选择(更换代价通常以季度计),用 `domain-modeling` skill 记一条 ADR,避免几个月后有人重新提议换栈却查不到当初为什么这样选。 ### 2. 目录分层与代码放置约定 在真正编写业务前建立目录约定,防止代码随时间演进变为混沌单体: - **核心分层模型**: - **入口层(Entrypoints)**:CLI 命令入口、HTTP 路由处理、事件监听入口。只负责入参解包与响应序列化,不包含业务规则。 - **领域核与业务服务(Core/Domain)**:纯净的业务逻辑、状态流转与领域计算。尽量不依赖任何外部框架、ORM 或特定 SDK。 - **外部适配与基础设施(Adapters/Infrastructure)**:数据库访问、文件系统读写、第三方客户端与网络调用。实现核心层定义的接口。 - **放置约定**: - 垂直切分(按业务特性分组)vs 水平切分(按技术分层分组):小型项目优先水平切分;预见到多独立业务上下文时优先按特性隔离(见 `codebase-design` 中的业务模块说明)。 - 测试放置:单元测试就近放置(同目录或 `__tests__` 镜像目录),端到端或集成测试单独建立根目录放置。 **完成标志**:入口层、领域核、适配层三者的边界能用一句话讲清楚放什么,且已经能对应到实际目录名。目录约定本身不必单独立 ADR;只有当团队后续要在两种切分方式之间反复横跳时,才值得记录为什么选了当前这种。 ### 3. 工具链与工程基线 在写第一行功能代码前,固化开发反馈回路与代码门禁: - **代码风格与格式化**: - 引入零配置或开箱即用的格式化工具,纳入单一自动化命令,消除人工排版分歧。 - **静态检查与类型系统**: - 强类型语言开启严格检查模式;动态语言引入静态 Lint 与类型提示。 - **最小测试环境**: - 配置单元测试运行器与断言库,确保能执行至少一个通过的基准测试。 - **统一反馈命令**: - 必须在项目任务运行器(如 `package.json`、`Makefile`、`Justfile` 等)中沉淀一条统一检查命令(例如 `check` 或 `lint` + `test`)。 - 确保全新检出的工作区在运行该命令时能顺利变绿。 **完成标志**:统一检查命令存在且在全新检出的工作区跑一遍能变绿。这是本 skill 唯一强制要求的可验证产出,不满足就不算完成。 ## 产出与下一步 完成上述三步并在项目根目录生成基础配置与骨架目录后: 1. 运行统一检查命令,验证脚手架基线正常通过。 2. 引导用户进行后续衔接(按需选用,不强制绑定): - 如果需要配置 issue 追踪器、分诊标签与文档规范:告诉用户运行 `/setup-dev-skills`。 - 如果系统涉及全链路(从入口穿透到持久化)需要保留验证打通:告诉用户运行 `/walking-skeleton`。 - 如果已进入特性开发阶段:进入核心主干,从 `/grill-with-docs` 或 `/to-spec` 开始。