# 已有项目初始化与应用拆分工作流 ## 1. 适用范围 适用于已经存在源码、构建文件、模块、接口、数据库对象、任务或部署配置的项目。目标是在保护现有工作区的前提下建立可信项目上下文,识别真实运行与依赖边界,再形成可渐进实施、可回滚的应用拆分方案。 已有目录或模块名称不能直接视为正确应用边界;代码引用也不等于业务所有权。静态源码只能证明当前实现,运行拓扑、流量、数据规模和生产行为仍需配置、日志、部署资料或用户确认支持。 ## 2. 输入与保护措施 开始时记录: - 当前分支、HEAD、staged、unstaged 和 untracked 状态; - 适用的 `AGENTS.md`、`.craftkit/`、项目说明和贡献规范; - 构建清单、锁文件、源码根、模块、测试和自动化配置; - 数据库、消息、缓存、文件、定时任务和外部系统的非秘密元数据; - 制品、部署单元、环境配置入口和运行依赖; - 已知问题、迁移限制、兼容窗口和不能变更的范围。 不得读取或记录凭据、完整连接串和生产敏感数据。不能为了扫描而构建、启动、迁移或连接外部环境。 ## 3. 执行阶段 ### E0:确认成熟项目模式 1. 使用 `init` 只读探测有效源码、构建文件、现有项目资料和代表性入口。 2. 展示“成熟项目”判断、项目根、工作区状态和拟扫描范围。 3. 多仓或多根目录时,先确认本次拆分主体及关联仓库只读范围。 4. 到达 G0,等待用户确认模式、范围和可使用的运行资料。 ### E1:保守初始化项目资料 1. 完整读取现有 `AGENTS.md` 与 `.craftkit/`,禁止覆盖未知用户章节。 2. 从构建和锁文件提取语言、框架、精确版本、模块和依赖证据。 3. 读取少量代表性的入口、接口、服务、数据访问和测试文件;多种风格并存时不按数量自动裁决。 4. 展示当前项目事实、冲突、疑似历史结构和待确认项。 5. 用户确认后由 `init` 保守合并项目资料,并验证 JSON、索引和忽略规则。 6. 使用 `guidance` 或手工入口顺序验证一项真实项目规则。 ### E2:建立现状基线 从源码和可用运行资料分别建立视图: - 构建视图:模块、依赖方向、公共库和循环依赖; - 调用视图:入口、同步调用、异步消息、批处理和人工步骤; - 数据视图:表、文件、缓存、主数据、写入方和共享访问; - 部署视图:制品、进程、配置、扩缩容、故障域和发布方式; - 组织视图:维护团队、变更频率、审批和支持责任; - 质量视图:测试边界、发布验证、已知风险和观测能力。 每项结论注明证据来源和置信度。无法验证的生产拓扑与流量必须标为待验证。 ### E3:建立目标需求基线 1. 使用 `requirements` 区分当前行为、目标行为、必须保持的兼容和范围外事项。 2. 明确拆分动因,例如独立发布、团队自治、容量、故障隔离、安全边界或技术替换。 3. 为拆分目标设置可测指标,例如依赖减少、发布独立性、故障影响范围或迁移窗口,而不是只写“解耦”。 4. 记录必须继续兼容的调用方、数据格式、作业、报表和运维流程。 5. 到达 G1,由用户确认目标、约束、验收和允许改变的边界。 ### E4:识别候选边界与阻塞耦合 1. 从业务能力和数据所有权出发提出候选边界,再映射当前模块,而不是按目录直接切分。 2. 为每个候选应用列出入口、核心职责、不负责事项、依赖、数据、任务和部署现状。 3. 识别阻塞拆分的耦合:共享写库、跨模块事务、循环调用、共享会话、共享缓存键、文件约定、定时任务、硬编码配置和公共类中的业务逻辑。 4. 区分必须拆除的耦合、迁移期允许的兼容桥和可以长期保留的公共基础能力。 5. 对证据不足的动态调用、反射、配置路由和外部任务安排专项验证。 ### E5:设计目标应用和过渡架构 至少比较以下方案: - 保持现状,仅加强模块边界; - 模块化单体并清理依赖; - 抽取少量高收益独立应用; - 按多个业务能力逐步形成独立应用。 对推荐方案逐项说明业务收益、数据和事务变化、接口成本、部署与观测成本、团队影响、迁移风险和不采用其他方案的理由。应用拆分清单必须包含职责、不负责事项、契约、数据所有权、运行和安全边界。 过渡架构应明确: - 旧入口与新入口的流量切换方式; - 同步接口、事件、批处理或文件交换的适用范围; - 数据迁移、复制、校验、回放和最终切换责任; - 迁移期读写权威、兼容适配层和弃用条件; - 跨边界事务的幂等、补偿、重试和对账方式; - 发生失败时回到旧路径的条件和数据处置方法。 到达 G2,由用户确认目标边界、过渡架构和明确不拆分的部分。 ### E6:细化专项设计 根据批准方案按需执行: - `design-backend`:目标应用内部模块、服务、事务、异常和观测边界; - `design-frontend`:前端应用、路由、状态、共享组件和渐进切换边界; - `design-api`、`prepare-api`:新旧接口、适配层、版本、字段映射和弃用计划; - `design-db`:数据所有权、结构、双读双写风险、迁移、校验和回滚; - `design-workflow`:跨应用状态、任务、超时、撤回、补偿和审计。 所有专项设计必须映射回现有调用方和测试,不得只描述目标结构。 ### E7:制定渐进迁移计划 使用 `plan-change` 将迁移拆为可独立验证的批次。通常按以下顺序评估,但不得机械套用: 1. 增加观测、契约测试和现状回归基线; 2. 收紧原系统内部模块边界并消除高风险循环依赖; 3. 建立目标应用骨架和兼容适配层; 4. 迁移低风险读取或旁路能力; 5. 迁移写入、任务和数据权威; 6. 分批切换调用方和流量; 7. 完成对账、稳定观察、旧路径下线和资料更新。 每个批次必须记录:前置条件、涉及应用、代码与数据范围、兼容方式、验证、观测窗口、停止条件、回滚步骤和不可逆点。未经额外授权,不执行数据库迁移、环境部署或流量切换。 ### E8:形成交付基线 汇总并冻结本轮已批准的:现状事实、目标应用边界、决策记录、专项契约、迁移批次、验证矩阵、风险台账和待确认项。需要后续任务接续时使用 `handoff` 生成交接材料,不把未验证运行行为写成已完成结论。 ## 4. 已有项目交付物 - 保守合并并验证的 `AGENTS.md` 与 `.craftkit/` 项目资料; - 当前模块、调用、数据、部署、组织和质量视图; - 拆分目标、兼容范围和可测验收指标; - 候选应用、阻塞耦合和目标应用职责矩阵; - 目标架构、过渡架构、数据权威和契约清单; - 分批迁移、验证、观测、停止和回滚计划; - 未验证运行事实、外部协调项和不可逆操作清单。 ## 5. 停止条件 遇到以下情况时暂停:无法区分既有改动与本次产物、关键调用或数据写入方未知、生产运行资料与源码冲突、迁移需要未授权的外部系统访问、存在无法回滚的数据变更、关键调用方未纳入范围,或用户尚未批准对应审批门。 ## 6. 可直接复制的总控提示词 ```text 请按《已有项目初始化与应用拆分工作流》推进当前项目。先保护现有工作区,使用 init 只读判断成熟项目模式,展示项目根、分支、已有改动、拟扫描范围和运行资料边界,在 G0 等待我确认。确认后保守合并 AGENTS.md 与 .craftkit 项目资料,建立构建、调用、数据、部署、组织和质量现状视图,再使用 requirements 确认拆分动因、兼容范围和可测目标。 基于真实业务能力、调用链、数据写入方和部署单元提出候选应用,识别共享写库、跨模块事务、循环调用、共享会话、缓存、文件和任务耦合。比较保持现状、模块化单体、抽取少量应用和多应用渐进拆分方案,形成目标架构、过渡架构、数据权威、契约、迁移批次、验证、观测、停止和回滚计划。全过程区分源码事实、运行事实、用户确认、项目规则、设计建议和待验证项;不把目录名称直接视为业务边界。只在 G0、G1、G2、G3、业务决策、权限扩大或高风险副作用处暂停。未经我另行授权,不修改业务代码,不连接外部环境,不迁移数据,不部署,不提交,不推送。 ```