From 9ad42b5c22880b21c09897a5c249d48909c2a3ad Mon Sep 17 00:00:00 2001 From: huangning <huangning@boborobots.com> Date: Fri, 17 Jul 2026 18:10:03 +0800 Subject: [PATCH] docs: 建立研发体系并修复角色会话调度 --- docs/任务/202607/0717-架构会话修复/00-需求与验收.md | 32 docs/研发体系/协作规范.md | 53 + docs/任务/202607/0717-研发体系本地化/00-需求与验收.md | 43 docs/任务/202607/0717-研发体系本地化/03-验收记录.md | 21 docs/任务/统一计划台账.md | 64 + docs/任务/202607/0717-员工修改密码/导读.md | 22 docs/任务/202607/0717-架构会话修复/02-实现与自测记录.md | 23 docs/任务/202607/0717-研发体系本地化/导读.md | 15 docs/任务/协作事件.md | 907 +++++++++++++++++ docs/环境/导读.md | 5 docs/任务/202607/0717-研发体系本地化/04-本轮结论.md | 11 docs/研发体系/角色/02-产品与项目管理.md | 44 docs/研发体系/角色/08-测试与质量.md | 41 docs/任务/202607/0717-员工修改密码/01-计划改动清单.md | 38 docs/任务/角色队列/产品与项目管理.md | 12 docs/研发体系/角色会话串行调度规范.md | 75 + 项目导读.md | 61 + docs/任务/角色队列/后端开发.md | 11 docs/研发体系/采用与裁剪记录.md | 59 + docs/任务/角色队列/运维与发布.md | 11 docs/任务/202607/0717-架构会话修复/导读.md | 17 docs/研发体系/角色/05-前端开发.md | 39 docs/研发体系/角色/04-UI与交互设计.md | 38 docs/研发体系/模板/本轮结论模板.md | 12 AGENTS.md | 57 + docs/研发体系/模板/验收记录模板.md | 16 docs/研发体系/模板/实现与自测记录模板.md | 25 docs/任务/角色队列/测试与质量.md | 11 docs/研发体系/角色/06-后端开发.md | 43 docs/研发体系/模板/需求与验收模板.md | 32 docs/研发体系/角色协作宪章.md | 61 + docs/研发体系/模板/发布验收清单模板.md | 31 docs/任务/202607/0717-员工修改密码/04-本轮结论.md | 9 docs/环境/运行环境说明.md | 35 docs/任务/202607/0717-研发体系本地化/01-计划改动清单.md | 21 docs/任务/202607/0717-架构会话修复/01-计划改动清单.md | 11 docs/任务/202607/0717-架构会话修复/04-本轮结论.md | 8 docs/研发体系/模板/协作事件模板.md | 40 docs/任务/角色队列/架构与数据治理.md | 12 docs/任务/202607/0717-会话串行调度/03-验收记录.md | 13 docs/任务/202607/0717-架构会话修复/03-验收记录.md | 12 docs/研发体系/模板/适用角色矩阵模板.md | 19 docs/研发体系/角色/角色会话清单.md | 27 docs/任务/202607/0717-研发体系本地化/02-实现与自测记录.md | 46 docs/任务/202607/0717-会话串行调度/00-需求与验收.md | 34 docs/研发体系/模板/计划改动清单模板.md | 22 全局约束.md | 79 + docs/任务/角色队列/UI与交互设计.md | 11 docs/研发体系/角色/07-代码审核与安全.md | 40 docs/任务/角色队列/代码审核与安全.md | 11 docs/任务/202607/0717-会话串行调度/04-本轮结论.md | 8 docs/任务/202607/0717-员工修改密码/03-验收记录.md | 35 docs/任务/202607/0717-员工修改密码/00-需求与验收.md | 118 ++ docs/研发体系/模板/改动清单模板.md | 24 docs/任务/202607/0717-员工修改密码/02-实现与自测记录.md | 7 docs/研发体系/角色/09-运维与发布.md | 40 docs/任务/202607/0717-会话串行调度/02-实现与自测记录.md | 25 docs/任务/角色队列/前端开发.md | 11 docs/研发体系/开发迭代流程.md | 95 + docs/任务/202607/0717-会话串行调度/导读.md | 18 docs/任务/角色队列/导读.md | 25 docs/研发体系/角色/03-架构与数据治理.md | 41 docs/研发体系/角色/角色索引.md | 19 docs/任务/202607/0717-会话串行调度/01-计划改动清单.md | 12 docs/架构/系统现状与改造路线.md | 98 + docs/研发体系/角色/01-项目Owner.md | 36 docs/研发体系/导读.md | 44 67 files changed, 3,036 insertions(+), 0 deletions(-) diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..d2cbe85 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,57 @@ +# SalesCRM Agent 入口 + +本文件适用于整个仓库。除用户或更高优先级指令外,所有参与本项目的会话均须遵守。 + +## 开始工作前 + +依次阅读: + +1. [项目导读](<./项目导读.md>) +2. [全局约束](<./全局约束.md>) +3. [开发迭代流程](<./docs/研发体系/开发迭代流程.md>) +4. [统一计划台账](<./docs/任务/统一计划台账.md>) +5. 自己对应的[角色职责卡](<./docs/研发体系/角色/角色索引.md>) + +活跃任务、优先级、Go/No-Go 和下一责任人只以 `docs/任务/统一计划台账.md` 为准。跨角色请求、评审、阻塞和结果只以 `docs/任务/协作事件.md` 为准。聊天和会话状态是通知渠道,不替代项目事实源。 + +## 角色会话串行纪律 + +- 所有角色必须遵守[角色会话串行调度规范](<./docs/研发体系/角色会话串行调度规范.md>)并读取自己的[角色任务队列](<./docs/任务/角色队列/导读.md>)。 +- 每个角色会话WIP上限为`1`;存在`RUNNING/WAITING`执行锁时不得领取或切换到其他任务。 +- 协作事件可以先建立,但新消息必须先入队;会话为`active`或队列有锁时,调度器禁止向该会话发送新任务。 +- 会话中断后优先恢复原队列项;普通追加消息默认排队,不能覆盖当前任务。 +- 只有Owner明确要求停止或替换时才允许抢占;抢占前必须保存检查点并把原任务标记为`PAUSED/CANCELLED`。 + +## 当前代码入口 + +- 前端主页面:`outputs/sales_crm_full_demo.html` +- 后端主程序:`work/crm_full_server.js` +- 当前运行数据:`data/crm_full_data.json` +- 部署配置:`deploy/` +- Node.js 入口:`package.json` + +上述是当前现状,不代表目标架构。架构调整必须先经过 Gate N/R,不得边拆边发明新边界。 + +## 执行边界 + +- 收到明确修改请求后,先登记或引用任务编号、范围和验收标准,再做实质改动。 +- 开始工作前还必须确认自己的角色队列中该任务位于队首且已获得唯一执行锁。 +- 只读解释、现状检查和代码审查可以不建立完整任务目录;一旦产生正式文件或代码改动,必须补齐最小任务记录。 +- 实现作者不能成为自己改动的唯一 Gate C 审核人。 +- 产品、架构、开发、审核、测试和发布只在自己的职责域下结论,不互相代签。 +- 发现范围外问题时登记为 proposal 或 blocker,不顺手扩大改动。 +- 不回退、不覆盖用户或其他会话的未确认改动。 + +## 安全红线 + +- 禁止把密码、Token、私钥、Cookie、完整业务数据、完整请求响应或原始日志写入普通文档和 Git。 +- 本机敏感信息只能放在已忽略的 `docs/local/`,正式文档只能引用其位置,不能复制其值。 +- `data/` 当前含运行数据,未完成数据治理前不得继续把新增真实数据提交到 Git。 +- 权限必须由后端强制校验,前端隐藏按钮不能作为安全措施。 + +## 文件与交付 + +- 新增业务文档优先使用中文文件名;`AGENTS.md`、`package.json`、源码模块名等工具或生态强制约定除外。 +- 文档使用相对链接,现状、目标、计划和已实现结论必须分开。 +- 每次交付必须说明实际改动、验证结果、未执行项、风险和下一责任人。 +- 未通过适用 Gate 的内容不得描述为“已完成”或“可上线”。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" new file mode 100644 index 0000000..157439b --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" @@ -0,0 +1,34 @@ +# 角色会话串行调度需求与验收 + +## 问题 + +角色会话执行任务期间收到新的协作消息时,会切换到新事件,原任务没有可靠的持久执行锁和恢复入口,存在任务丢失、结果缺失和顺序错乱风险。 + +## 目标 + +让每个正式角色会话按持久队列顺次处理任务;任何新协作消息都先排队,当前任务完成、明确暂停或取消并释放执行锁后,才处理下一项。 + +## 范围 + +- 建立统一串行调度规范。 +- 为8个正式角色会话建立独立持久队列和WIP=1执行锁。 +- 更新全局入口、流程、协作规范、角色宪章和职责卡。 +- 初始化队列并让8个角色会话确认新规则。 +- 定义中断恢复、显式抢占和直接用户消息处理规则。 + +## 不做项 + +- 不修改Codex客户端或服务器内部消息机制。 +- 不修改业务代码、运行数据、部署或Git历史。 +- 不自动取消、覆盖或重排现有CRM-20260717-006任务事实。 +- 不把普通P0标签当作自动抢占授权。 + +## 验收标准 + +1. 每个正式角色有独立队列文件、唯一Thread ID和WIP上限1。 +2. 规则明确禁止向`active`会话或有`RUNNING/WAITING`锁的角色发送新任务。 +3. 新事件先入队,只有队首、无锁且会话idle时才允许投递。 +4. 会话中断后必须恢复原`RUNNING/WAITING`项,不能跳到下一任务。 +5. 用户普通追加消息默认排队;只有Owner明确停止/替换才允许保存检查点后抢占。 +6. 8个正式角色会话均完成一次只读规则接入回执。 +7. 文档链接、队列WIP、执行锁和事件字段检查通过,现有业务文件不被修改。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" new file mode 100644 index 0000000..e89c941 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" @@ -0,0 +1,12 @@ +# 计划改动清单 + +| 改动面 | 计划 | 风险 | 验证 | +| --- | --- | --- | --- | +| 全局入口与约束 | 增加WIP=1、队列和禁止打断规则 | 规则入口不一致 | 链接和关键规则扫描 | +| 调度规范 | 定义状态机、投递算法和异常恢复 | 队列状态歧义 | 状态互斥检查 | +| 角色队列 | 建立8个独立队列文件 | 并发覆盖 | 一角色一文件、Thread ID唯一 | +| 协作规范 | 把“建事件”与“投递消息”拆开 | 事件创建后被误认为已投递 | 角色接入回执 | +| 角色职责 | 加入只处理当前锁定项规则 | 角色仍从聊天自行切换 | 8/8角色确认 | +| 任务事实源 | 登记CRM-20260717-007与协作事件 | 与CRM-006混淆 | 台账/事件一致性检查 | + +不修改`outputs/`、`work/`、`data/`、`deploy/`和`package.json`。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" new file mode 100644 index 0000000..4e2c651 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" @@ -0,0 +1,25 @@ +# 实现与自测记录 + +- 起始分支:`main` +- 起始commit:`6e62407` +- 当前状态:本地完成,Gate P `PASS`。 +- 业务影响:仅治理Markdown,不修改业务代码、配置、数据或运行态。 + +## 验证结果 + +| 检查 | 状态 | +| --- | --- | +| 8个正式角色各有唯一队列 | PASS;8个队列文件、8个唯一正式Thread ID | +| 每个队列WIP=1且最多一个执行锁 | PASS;最终8个队列均IDLE,每个只有1个COMPLETED项,无RUNNING/WAITING残留 | +| active/有锁时禁止投递规则已进入全部入口 | PASS;AGENTS、全局约束、开发流程、协作规范、角色宪章和8份职责卡均有规则 | +| 中断恢复与Owner显式抢占规则完整 | PASS;旧UI投递异常后保留QUEUE-003,由新正式会话恢复同一项后释放锁 | +| 8个角色接入回执 | PASS;COLLAB-20260717-042,8/8确认WIP=1和禁止抢占 | +| Markdown链接与敏感值扫描 | PASS;当前61份Markdown断链0、非模板占位符0、敏感值模式0 | +| 协作事件完整性 | PASS;42条事件编号重复0、必填字段缺失0 | +| 已有业务文件未修改 | PASS;跟踪文件diff为0,61个未跟踪文件全部为Markdown | + +## 未执行项 + +- 没有故意向正在active的会话注入第二条任务消息;该动作本身违反本次建立的安全规则。 +- 后续真实多任务迭代需要继续观察FIFO、WAITING转PAUSED和Owner显式抢占流程。 +- 本轮文档尚未commit或push,HEAD仍为`6e62407`。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" new file mode 100644 index 0000000..c9498e4 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" @@ -0,0 +1,13 @@ +# 验收记录 + +| Gate/检查 | 角色 | 状态 | 证据 | +| --- | --- | --- | --- | +| Owner方向 | Owner | PASS | 明确要求角色任务顺次处理,不被协作消息打断 | +| Gate N | 产品/架构/测试 | PASS | 产品确认算法可执行;架构确认状态机无冲突;测试确认7项标准可验证 | +| Gate R | 8个正式角色 | PASS | COLLAB-20260717-041至042,8/8角色接入PASS | +| Gate C | 代码审核与安全 | N/A_CONFIRMED | 纯治理文档,不改代码/配置/数据 | +| Gate D | 项目管理员 | N/A | 无可执行产物或部署 | +| Gate A | 测试与质量 | N/A_CONFIRMED | 无业务可执行产物;执行文档、队列状态和恢复演练检查 | +| Gate P | 产品与项目管理 | PASS | 调度算法可执行,8/8回执和中断恢复演练满足验收 | + +7项验收均已具备证据。业务系统BLOCK-001至003和正式上线No-Go继续有效。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" new file mode 100644 index 0000000..534f8f1 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" @@ -0,0 +1,8 @@ +# 本轮结论 + +- 当前结论:本地完成,Gate P `PASS`。 +- 已完成:规则设计、入口更新、8个独立队列、WIP=1执行锁、8/8角色接入和中断恢复演练。 +- 未完成:尚未提交或推送;后续真实多任务仍需持续遵守投递前双重检查。 +- 当前Gate:Gate P `PASS`。 +- 业务系统Go/No-Go:继续`No-Go`,本任务不解除BLOCK-001至003。 +- 下一责任人:产品与项目管理、项目管理员按新队列机制恢复后续任务;Owner未明确抢占时不得打断。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/\345\257\274\350\257\273.md" "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/\345\257\274\350\257\273.md" new file mode 100644 index 0000000..ca4815c --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246/\345\257\274\350\257\273.md" @@ -0,0 +1,18 @@ +# CRM-20260717-007 角色会话串行调度导读 + +- 优先级:P0 +- 状态:本地完成 +- 当前Gate:Gate P `PASS` +- 目标:所有正式角色会话WIP为1,协作消息只排队、不抢占当前任务 +- 统一台账:[统一计划台账](<../../统一计划台账.md>) +- 协作事件:[COLLAB-20260717-041至042](<../../协作事件.md>) +- 调度规范:[角色会话串行调度规范](<../../../研发体系/角色会话串行调度规范.md>) +- 队列入口:[角色任务队列](<../../角色队列/导读.md>) + +## 文档 + +- [00-需求与验收](<./00-需求与验收.md>) +- [01-计划改动清单](<./01-计划改动清单.md>) +- [02-实现与自测记录](<./02-实现与自测记录.md>) +- [03-验收记录](<./03-验收记录.md>) +- [04-本轮结论](<./04-本轮结论.md>) diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" new file mode 100644 index 0000000..0dc99fa --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" @@ -0,0 +1,118 @@ +# 员工修改密码需求与验收 + +- 需求版本:v0.2-MVP +- 产品原则:先能用,再逐步好用;首版只解决员工不能自行修改本人密码的问题 +- 当前状态:MVP范围已收敛,待Owner确认问题并重新执行Gate N + +## 目标 + +员工登录系统后,可以自行修改本人的登录密码,不再每次都依赖主管代为修改。 + +首版只建立“进入修改密码页面 → 验证当前密码 → 设置新密码 → 重新登录”的最小可用闭环,不在同一版本中完成整套账号安全体系重构。 + +## MVP用户故事 + +1. 作为已登录员工,我能找到“修改密码”入口。 +2. 我输入当前密码、新密码和确认密码后,可以修改本人的密码。 +3. 当前密码错误、两次新密码不一致或新密码不符合基本规则时,系统明确提示并且不修改密码。 +4. 修改成功后,我退出当前登录,并使用新密码重新登录。 +5. 主管现有的员工密码重置能力继续保留,不因为增加员工自主改密而失效。 + +## 第一阶段:MVP范围 + +### 前端 + +- 所有启用账号登录后都能看到“修改密码”入口,建议放在当前账号信息或退出按钮附近。 +- 修改密码表单只包含:当前密码、新密码、确认新密码、确认修改、取消。 +- 密码输入框使用密码类型,不在页面上回显实际密码。 +- 提交期间禁止重复点击。 +- 至少提供以下提示:当前密码错误、两次输入不一致、新密码不符合规则、修改成功、后端不可用。 +- 修改成功后清除当前登录状态并返回登录页。 + +### 后端 + +- 增加员工修改本人密码的独立接口。 +- 后端根据当前登录身份确定账号,不接受前端指定要修改的其他用户名。 +- 后端必须验证当前密码正确后才能写入新密码。 +- 后端再次校验新密码规则,不能只依赖前端校验。 +- 修改成功后,旧密码不能继续登录,新密码可以正常登录。 +- 修改密码接口后端不可用时,前端不得回退到浏览器本地模拟并显示假成功。 +- 请求、响应、普通日志和协作记录不得包含新旧密码值。 + +### MVP密码规则 + +- 新密码长度暂定为8至64个字符。 +- 新密码不得与当前密码相同。 +- 新密码与确认密码必须完全一致。 +- 首版不强制大小写、数字和符号组合,避免规则过度复杂。 +- 不自动删除用户输入两端的空格;前后端必须采用一致处理方式。 + +### 主管重置 + +- 保留当前“主管编辑员工账号并设置新密码”的能力。 +- 首版不增加一次性临时密码、有效期或首次登录强制改密。 +- 员工忘记密码时,仍由主管重置;员工登录后可再自行修改成自己的密码。 +- 员工不能通过自主改密入口修改其他员工的密码、岗位、权限或账号状态。 + +## 第一阶段不做项 + +- 不做短信、邮件找回密码。 +- 不做多因素认证、单点登录或第三方身份服务。 +- 不做全员上线后强制修改密码。 +- 不做主管重置后的首次登录强制改密。 +- 不做随机一次性临时密码及安全交付渠道。 +- 不做密码历史、常见泄露密码库和定期强制轮换。 +- 不做账号锁定、复杂限流、告警中心或完整安全审计平台。 +- 不做多设备会话管理页面。 +- 不在本任务中清理Git历史或完成全部运行数据治理;这些仍由`CRM-20260717-002`负责。 +- 不为本功能进行前后端整体模块化重构。 + +## MVP验收标准 + +1. 启用中的员工登录后能找到“修改密码”入口。 +2. 员工输入正确当前密码、合规新密码和一致的确认密码后,修改成功。 +3. 当前密码错误时后端拒绝修改,原密码仍可登录。 +4. 两次新密码不一致、长度不合规或新旧密码相同时,系统拒绝修改并给出明确提示。 +5. 员工只能修改本人密码,构造他人账号参数也不能修改其他账号。 +6. 修改成功后当前页面退出登录;旧密码登录失败,新密码登录成功。 +7. 主管原有的新建账号和重置员工密码功能继续可用。 +8. 停用账号不能登录,因此也不能使用自主改密功能。 +9. 后端断开时修改密码不得显示成功,也不得写入浏览器本地模拟数据。 +10. 页面、接口响应和普通日志中不出现新旧密码值。 + +## 后续阶段 + +| 阶段 | 目标 | 内容 | +| --- | --- | --- | +| 第一阶段 | 先能用 | 员工本人改密、基本校验、成功后重新登录、主管原重置能力保留 | +| 第二阶段 | 更安全 | 密码哈希迁移、旧认证机制退役、会话撤销、限流、审计、全员密码轮换 | +| 第三阶段 | 更好用 | 首次登录强制改密、一次性临时凭据、密码强度提示、会话管理和找回流程 | + +第二、三阶段必须另行冻结范围和验收;不能因为后续内容未实现,就把第一阶段已具备的基本功能描述为不存在。但第一阶段完成也不能被描述为全部账号安全风险已关闭或业务系统已经满足正式上线条件。 + +## 角色矩阵 + +| 角色 | 适用性 | 第一阶段责任 | +| --- | --- | --- | +| Owner | 适用 | 确认MVP范围和遗留风险接受边界 | +| 产品与项目管理 | 适用 | 冻结MVP需求、汇总Gate、执行Gate P | +| 架构与数据治理 | 适用 | 确认MVP接口可行且不阻断后续安全迁移 | +| UI与交互设计 | 适用 | 给出最小入口、表单和错误状态规格 | +| 前端开发 | 适用 | 实现页面、校验、错误状态和成功退出 | +| 后端开发 | 适用 | 实现本人改密接口、身份和当前密码校验 | +| 代码审核与安全 | 适用 | 审查越权、密码泄露和现有风险是否扩大 | +| 测试与质量 | 适用 | 验证MVP十项验收标准 | +| 运维与发布 | 适用 | 仅在正式部署阶段执行备份、部署和回滚 | + +## 已知风险与边界 + +- 当前系统的密码保存和登录凭证机制仍属于P0风险。MVP收敛是为了先完成基本功能,不代表接受明文密码作为长期方案。 +- 第一阶段可以形成可测试实现,但是否允许部署到当前线上环境,仍需代码审核与安全、测试和Owner依据精确版本决定。 +- `BLOCK-001`至`BLOCK-003`和项目整体`No-Go`不会因MVP完成自动解除。 + +## 需要Owner确认的问题 + +1. 是否接受首版密码长度规则为8至64个字符,暂不强制复杂组合?产品建议:接受。 +2. 是否接受修改成功后直接退出并要求重新登录?产品建议:接受,行为简单且容易验证。 +3. 是否接受首版继续沿用主管当前的密码重置方式,不做一次性临时密码和首次强制改密?产品建议:接受,后续单独增强。 +4. 第一阶段开发完成后,是否只先在测试环境验证,等密码哈希等P0安全整改完成后再正式部署?产品建议:是;如果要求立即部署,需要Owner明确接受仍存在的安全风险,但专业Gate仍不能被跳过。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" new file mode 100644 index 0000000..e835dc4 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" @@ -0,0 +1,38 @@ +# 计划改动清单 + +- 对应需求版本:v0.2-MVP +- 当前阶段:Gate N需求整改 +- 原则:只做员工本人修改密码闭环,不在首版重构整套认证体系 + +## 第一阶段候选改动 + +| 改动面 | 最小改动 | 主责 | 验证 | +| --- | --- | --- | --- | +| 前端账号入口 | 在当前账号信息附近增加“修改密码” | UI/前端 | 所有启用角色可见,不影响现有导航 | +| 修改密码表单 | 当前密码、新密码、确认密码和基本提示 | UI/前端 | 错误、提交中、成功和后端离线状态 | +| 后端本人改密接口 | 依据登录身份修改本人密码 | 后端 | 当前密码校验、越权、边界和异常 | +| 登录状态 | 修改成功后清除当前登录并返回登录页 | 前端/后端 | 旧密码失败、新密码成功 | +| 主管账号管理 | 保持现有新建账号和重置密码流程 | 前端/后端 | 原功能回归不受影响 | +| 最小测试 | 覆盖MVP十项验收标准 | 开发/测试 | 自动化或可复验的最小测试记录 | + +## 首版明确不改 + +- 不做一次性临时密码、强制首次改密、全员轮换和密码找回。 +- 不做完整会话中心、复杂限流、审计平台和认证模块重构。 +- 不清理Git历史,不修改CRM-20260717-002的责任范围。 +- 不因页面改动顺手重构其他账号、权限或客户功能。 + +## 后续独立改进 + +1. 密码哈希和旧认证机制退役。 +2. 改密、重置和停用后的完整会话撤销。 +3. 主管一次性临时凭据与首次强制改密。 +4. 限流、审计、密码强度和安全告警。 +5. 多设备会话和自助找回能力。 + +## 实施停止线 + +- 新需求版本未通过适用Gate N前,不修改业务代码。 +- Gate R未冻结接口、字段、错误码和最小测试前,不进入实现。 +- 员工可以修改他人密码、当前密码错误仍能修改、后端断开却显示成功,任一情况均不得交付。 +- 任何密码值进入URL、接口响应、普通日志或协作文档时立即停止并整改。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" new file mode 100644 index 0000000..5197e2b --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" @@ -0,0 +1,7 @@ +# 实现与自测记录 + +- 当前状态:未开始实现。 +- 当前 Gate:Gate N需求整改。 +- 已完成:根据Owner“先能用、再逐步好用”的要求,把需求收敛为v0.2-MVP,并把复杂安全与体验能力拆到后续阶段。 +- 未授权:业务代码、运行账号数据、部署配置和线上环境修改。 +- 下一步:Owner确认4项产品问题,重新收集适用角色Gate N结论;Gate R冻结最小接口与测试后再由开发角色记录精确实现基线。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" new file mode 100644 index 0000000..608f0a3 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" @@ -0,0 +1,35 @@ +# 验收记录 + +## Gate 状态 + +| Gate | 结论 | 说明 | +| --- | --- | --- | +| Owner方向 | PASS | Owner明确要求增加员工修改密码功能 | +| Gate N | CHANGES_REQUESTED | 首轮结论保留;需求已收敛为v0.2-MVP,待Owner确认后重新评审 | +| Gate R | PENDING | 待密码、会话、迁移、测试、部署和回滚方案冻结 | +| Gate C | PENDING | 尚无可审核实现基线 | +| Gate D | PENDING | 尚未部署目标版本 | +| Gate A | PENDING | 尚未形成Gate D通过版本和隔离测试环境 | +| Gate P | PENDING | 尚未进入产品验收 | + +## 当前结论 + +本任务已完成首轮独立 Gate N,但总体结论为 `CHANGES_REQUESTED`。当前不代表员工修改密码功能已实现、已部署或可在线使用。 + +## MVP需求整改 + +- 已解决:原需求把本人改密、密码哈希迁移、全会话撤销、强制轮换、一次性临时凭据、限流、审计和完整迁移一次性绑定,范围过大。 +- 当前方案:第一阶段只实现员工本人改密、基本校验、成功后重新登录,并保留主管现有重置能力。 +- 延后处理:密码哈希、旧认证退役、完整会话撤销、强制首次改密、临时凭据、复杂限流和审计。 +- 待处理:Owner确认4项产品问题后,所有受需求版本变化影响的Gate N结论重新评审。 + +## Gate N首轮结果 + +| 角色 | 结论 | 事件 | 主要未完成项 | +| --- | --- | --- | --- | +| 架构与数据治理 | CHANGES_REQUESTED | COLLAB-20260717-033 | 临时凭据、存量切换、强制改密状态机和安全回滚未冻结 | +| UI与交互设计 | CHANGES_REQUESTED | COLLAB-20260717-034 | 个人入口、普通/强制改密、主管重置及错误状态矩阵未冻结 | +| 前端开发 | CHANGES_REQUESTED | COLLAB-20260717-035 | 接口错误码、路由守卫、认证请求禁用本地回退等前置材料不足 | +| 后端开发 | PASS | COLLAB-20260717-036 | Gate R需冻结密码、会话、并发、迁移和回滚设计 | +| 代码审核与安全 | CHANGES_REQUESTED | COLLAB-20260717-037 | 旧协议退役、重置授权、临时凭据、备份回滚和安全属性不足 | +| 测试与质量 | PASS | COLLAB-20260717-038 | Gate R需补完整接口、状态、环境、样本和自动化测试矩阵 | diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" new file mode 100644 index 0000000..5636738 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" @@ -0,0 +1,9 @@ +# 本轮结论 + +- 当前结论:v0.2-MVP需求已收敛,待Owner确认4项问题,未完成。 +- 当前 Gate:Gate N 需求整改。 +- 实际改动:仅调整产品需求、MVP验收、分期范围和任务管理文档。 +- 未执行:架构方案、业务实现、代码审核、部署、测试和产品验收。 +- 风险:现有密码保存、旧认证机制、运行数据与Git历史风险继续有效;MVP不关闭这些问题。 +- Go/No-Go:`No-Go`;本任务未通过全部适用 Gate 前不得部署到正式线上环境。 +- 下一责任人:Owner确认v0.2-MVP的密码长度、成功退出、主管原重置方式及是否先测试后部署;产品与项目管理随后重新发起Gate N。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/\345\257\274\350\257\273.md" "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/\345\257\274\350\257\273.md" new file mode 100644 index 0000000..3dbade9 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\345\221\230\345\267\245\344\277\256\346\224\271\345\257\206\347\240\201/\345\257\274\350\257\273.md" @@ -0,0 +1,22 @@ +# CRM-20260717-006 员工修改密码导读 + +- 优先级:P0 +- 状态:MVP需求已收敛,待Owner确认4项问题并重新评审 +- 当前 Gate:Gate N 需求整改(v0.2-MVP) +- Owner 方向:先实现员工自主改密的基本功能,再逐步完善安全和体验 +- 当前授权:仅允许需求与方案评审,尚未授权修改业务代码、运行数据或线上环境 +- 关联任务:`CRM-20260717-002`继续负责账号密码轮换与数据治理;不再作为MVP需求文档完成的前置条件,但仍影响正式部署结论 +- 统一台账:[统一计划台账](<../../统一计划台账.md>) +- 协作事件:[协作事件 COLLAB-20260717-027 至 032](<../../协作事件.md>) + +## 文档 + +- [00-需求与验收](<./00-需求与验收.md>) +- [01-计划改动清单](<./01-计划改动清单.md>) +- [02-实现与自测记录](<./02-实现与自测记录.md>) +- [03-验收记录](<./03-验收记录.md>) +- [04-本轮结论](<./04-本轮结论.md>) + +## 下一责任人 + +Owner确认v0.2-MVP中的4项产品问题;产品与项目管理随后重新发起适用角色Gate N。第一阶段只验收员工本人改密闭环,不代签专业技术结论,也不把MVP完成写成安全整改全部完成。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" new file mode 100644 index 0000000..02982a6 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" @@ -0,0 +1,32 @@ +# 架构角色会话故障迁移需求与验收 + +## 问题 + +正式“架构与数据治理”Codex会话在界面提交消息时返回`Error submitting message`。该会话历史仍可读取,但任务列表状态为`notLoaded`,不能继续作为可靠的正式投递入口。 + +## 目标 + +保留旧会话历史,新建一个正式架构角色会话接管同一职责和持久队列,并通过连续两次消息提交验证恢复可用性。 + +## 范围 + +- 停止向异常会话分派新任务,但不删除或覆盖其历史。 +- 新建正式架构与数据治理会话并完成角色接管。 +- 更新角色会话清单、角色队列索引和架构角色队列中的正式Thread ID。 +- 使用同一个队列项完成首次接入和第二次提交验证。 + +## 不做项 + +- 不修补Codex客户端或服务端内部实现。 +- 不修改业务代码、运行数据、部署、凭据或Git历史。 +- 不处理CRM-20260717-006或其他业务任务。 +- 不向旧异常会话重复投递消息。 + +## 验收标准 + +1. 旧架构会话保留为历史会话,且不再承担新任务。 +2. 新架构会话有唯一Thread ID并成为三个正式入口中的一致映射。 +3. 新会话确认职责边界、WIP=1、持久队列和中断恢复规则。 +4. 新会话连续两次提交都产生正常完成的turn。 +5. 架构队列最终恢复`IDLE`,迁移队列项为`COMPLETED`,没有任务丢失。 +6. 其他角色队列、业务代码、配置、数据和运行态不受影响。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" new file mode 100644 index 0000000..6171b90 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" @@ -0,0 +1,11 @@ +# 计划改动清单 + +| 改动面 | 计划 | 风险 | 验证 | +| --- | --- | --- | --- | +| 故障隔离 | 保留旧会话并停止新投递 | 历史记录被误删 | 旧Thread ID进入历史清单 | +| 正式会话 | 创建新架构角色会话 | 新会话未加载项目规则 | 首次接入回执 | +| 串行队列 | 用一个迁移队列项覆盖接管与复测 | 测试消息被当成新任务抢占 | 同一QUEUE项内顺次执行 | +| 入口映射 | 更新清单、索引和角色队列 | 多处ID不一致 | 唯一Thread ID扫描 | +| 连通性 | 完成首次接入和第二次提交 | 只验证创建、未验证后续发送 | 两个正常完成的turn | + +不修改`outputs/`、`work/`、`data/`、`deploy/`和`package.json`。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" new file mode 100644 index 0000000..00b95a1 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" @@ -0,0 +1,23 @@ +# 实现与自测记录 + +- 起始分支:`main` +- 起始commit:`6e62407` +- 当前状态:本地完成,Gate P `PASS`。 +- 业务影响:仅修复角色会话入口和治理Markdown,不修改业务代码、配置、数据或运行态。 + +## 验证结果 + +| 检查 | 状态 | +| --- | --- | +| 新正式架构会话创建 | PASS;`019f6f85-bee8-7f70-8d0a-af638ece0782` | +| 首次角色接入提交 | PASS;turn `019f6f85-d40d-76f1-a279-5c56f60b2670`正常完成 | +| 第二次消息提交 | PASS;会话idle后成功提交,turn `019f6f89-fc6f-7b61-bcdb-319e87cd6a63`约8秒完成 | +| 三处正式Thread ID一致 | PASS;角色清单、队列索引和架构队列一致 | +| 队列锁释放且其他队列不变 | PASS;架构队列IDLE,QUEUE-009 COMPLETED | +| Markdown链接和敏感值扫描 | PASS;75份Markdown断链0,46条事件重复0/必填字段缺失0,67个未跟踪交付文件均为Markdown,普通交付文件敏感值模式0;本机敏感文件1份且已被Git忽略 | + +## 未执行项 + +- 未修改或诊断Codex客户端、网络或服务端内部实现;通过正式会话迁移恢复可用性。 +- 未向旧异常会话再次投递,避免重复失败或历史状态进一步混乱。 +- 本轮文档尚未commit或push,HEAD仍为`6e62407`。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" new file mode 100644 index 0000000..6dbed6d --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" @@ -0,0 +1,12 @@ +# 验收记录 + +| Gate/检查 | 角色 | 状态 | 证据 | +| --- | --- | --- | --- | +| 故障确认 | 项目管理员 | PASS | 旧会话列表状态`notLoaded`,用户侧提交返回`Error submitting message` | +| Gate R | 新架构与数据治理会话 | PASS | 首次接入与第二次提交均正常完成;职责和WIP=1规则确认 | +| Gate C | 代码审核与安全 | N/A | 纯会话入口和治理文档变更 | +| Gate D | 项目管理员 | N/A | 无部署或运行态变更 | +| Gate A | 项目管理员 | PASS | 两次提交、ID一致性和队列状态检查通过;无业务可执行产物 | +| Gate P | Owner/项目管理员 | PASS | 用户明确修复目标;新正式入口连续提交验证闭环 | + +业务系统BLOCK-001至003和正式上线No-Go继续有效。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" new file mode 100644 index 0000000..61d26db --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" @@ -0,0 +1,8 @@ +# 本轮结论 + +- 当前结论:本地完成,Gate P `PASS`。 +- 已完成:故障诊断、旧会话隔离、新正式会话创建、连续两次提交验证、三处入口映射更新和队列释放。 +- 未完成:尚未提交或推送;本任务没有修补Codex客户端或服务端内部故障。 +- 当前Gate:Gate P `PASS`。 +- 业务系统Go/No-Go:继续`No-Go`,本任务不解除BLOCK-001至003。 +- 下一责任人:架构与数据治理会话按统一队列等待后续任务;项目管理员持续执行投递前双重检查。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/\345\257\274\350\257\273.md" "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/\345\257\274\350\257\273.md" new file mode 100644 index 0000000..bf33906 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\346\236\266\346\236\204\344\274\232\350\257\235\344\277\256\345\244\215/\345\257\274\350\257\273.md" @@ -0,0 +1,17 @@ +# CRM-20260717-008 架构角色会话故障迁移导读 + +- 优先级:P0 +- 状态:本地完成 +- 当前Gate:Gate P `PASS` +- 目标:修复架构与数据治理会话无法提交消息的问题,并验证新正式会话可连续接收任务 +- 统一台账:[统一计划台账](<../../统一计划台账.md>) +- 协作事件:[COLLAB-20260717-043至044](<../../协作事件.md>) +- 角色队列:[架构与数据治理任务队列](<../../角色队列/架构与数据治理.md>) + +## 文档 + +- [00-需求与验收](<./00-需求与验收.md>) +- [01-计划改动清单](<./01-计划改动清单.md>) +- [02-实现与自测记录](<./02-实现与自测记录.md>) +- [03-验收记录](<./03-验收记录.md>) +- [04-本轮结论](<./04-本轮结论.md>) diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" new file mode 100644 index 0000000..91c540d --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/00-\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266.md" @@ -0,0 +1,43 @@ +# 需求与验收 + +## 目标 + +阅读研发体系参考包,根据SalesCRM当前代码、数据和部署现状完成本地化适配,并创建职责独立的角色会话。 + +## 当前起点 + +- 项目已有Git仓库和若干业务/部署文档,但没有统一Agent入口、角色职责、Gate流程、计划台账和协作事件。 +- 前后端均为巨型单文件,运行数据和账号字段进入Git,缺少自动化测试和生产级发布门禁。 + +## 范围 + +- 做:完整审阅参考包;裁剪角色;创建项目入口、全局规则、流程、角色卡、台账、事件、模板、架构现状和角色会话。 +- 不做:本轮不重构业务代码、不修改运行数据、不清理Git历史、不执行生产部署。 + +## 适用角色矩阵 + +本任务交付物直接定义全部角色的职责,因此8个专业角色都参加Gate R角色接入;只有与本任务性质相符的角色参与其他Gate。 + +| 角色 | 适用性 | 参与Gate | 输入 | 输出 | 说明/确认人 | +| --- | --- | --- | --- | --- | --- | +| Owner | 适用 | 方向、最终裁决 | 项目目标、中文命名要求 | 授权与风险裁决 | Owner | +| 产品与项目管理 | 适用 | R、P | 冻结需求、角色回执 | 台账、Gate汇总、产品验收 | Owner | +| 架构与数据治理 | 适用 | N、R、D N/A确认 | 当前架构与治理方案 | 独立需求评审、角色接入、D适用性意见 | 项目管理员 | +| UI与交互设计 | 适用 | R | 角色职责卡 | 角色接入回执 | 本任务不产生页面设计,仅验收角色边界 | +| 前端开发 | 适用 | R | 角色职责卡、当前前端事实 | 角色接入回执 | 本任务不修改前端代码 | +| 后端开发 | 适用 | R | 角色职责卡、当前后端事实 | 角色接入回执 | 本任务不修改后端代码 | +| 代码审核与安全 | 适用 | R、C N/A确认 | 新增文档清单、敏感扫描 | 角色接入、C适用性与安全审阅结论 | 项目管理员 | +| 测试与质量 | 适用 | N、R、A N/A确认 | 验收标准、链接/占位符检查 | 独立需求评审、角色接入、文档质量结论 | 项目管理员 | +| 运维与发布 | 适用 | R | 角色职责卡、部署边界 | 角色接入回执 | 本任务不部署,仅验收角色边界 | + +Gate C、D、A如标记N/A,必须分别由代码审核与安全、架构与数据治理、测试与质量给出任务级原因和确认;不得用角色接入回执代替。 + +## 验收标准 + +1. 参考体系的采用模式、保留项、裁剪项和重新激活条件有记录。 +2. Owner与8个专业角色的职责、输入、输出、Gate签字权和禁止越级明确。 +3. N/R/C/D/A/P流程、任务目录、事件闭环和紧急变更规则可执行。 +4. 当前P0/P1风险进入统一计划台账,正式上线保持No-Go。 +5. 创建8个独立Codex角色会话,完成至少一次角色接入回执。 +6. 所有新增业务文档使用中文文件名,工具约定文件除外。 +7. 不把任何凭据值写入新建的可跟踪文档。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" new file mode 100644 index 0000000..47cc475 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/01-\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225.md" @@ -0,0 +1,21 @@ +# 计划改动清单 + +## 方案摘要 + +采用参考包的标准模式和独立签字原则,沿用SalesCRM现有`docs/`目录,裁剪移动端角色并建立Web项目所需的9个职责域。 + +## 预计改动 + +| 文件/目录 | 改动 | 责任角色 | 风险 | 验证 | +| --- | --- | --- | --- | --- | +| 根目录 | 新建Agent入口、项目导读和全局约束 | 项目管理员 | 规则冲突 | 链接和占位符检查 | +| `docs/研发体系` | 新建流程、宪章、协作和角色卡 | 项目管理员 | 过度流程化 | 角色接入评审 | +| `docs/任务` | 新建统一台账、事件和任务档案 | 项目管理员 | 平行事实源 | 入口唯一性检查 | +| `docs/架构` | 记录当前事实和改造优先级 | 项目管理员 | 把目标误写成现状 | 代码事实核对 | +| Codex角色会话 | 创建8个独立会话 | 项目管理员 | 边界不清 | 每个会话回传职责确认 | + +## 不改动 + +- 不修改`outputs/`、`work/`、`data/`中的业务实现和运行数据。 +- 不清理Git历史、不轮换账号、不修改部署运行态。 +- 不自动推送本轮改动,除非Owner另行要求。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" new file mode 100644 index 0000000..2cab1d4 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/02-\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225.md" @@ -0,0 +1,46 @@ +# 实现与自测记录 + +## 精确基线 + +- 起始分支:`main` +- 起始commit:`6e62407` +- 实际改动:仅新增或调整研发体系Markdown文档,未改业务代码和数据。 + +## 实现摘要 + +- 完整阅读参考包中的采用指南、核心流程、16类角色、专项规范和空白模板。 +- 采用标准模式,裁剪移动端角色,建立Owner加8个专业角色。 +- 建立项目入口、全局约束、N/R/C/D/A/P流程、统一台账和协作事件。 +- 把当前凭据/业务数据入Git、权限、单文件、测试和部署风险纳入计划。 + +## 自测 + +| 检查 | 结果 | 证据 | +| --- | --- | --- | +| 业务代码和数据未修改 | PASS | `git diff --name-only`为空;`git status --short`仅显示本任务新增治理文档 | +| Markdown相对链接有效 | PASS | 对39份新增Markdown执行相对链接扫描,断链数`0` | +| 参考占位符未残留 | PASS | 排除模板目录后扫描占位模式,残留数`0` | +| 新文档无凭据值 | PASS | 对新增Markdown执行私钥、Bearer、常见访问密钥、凭据赋值和含凭据URL扫描,命中数`0` | +| 8个角色会话可用 | PASS | [角色会话清单](<../../../研发体系/角色/角色会话清单.md>)显示8/8接入评审PASS | + +以上检查在Gate P首轮前完成;首轮验收指出结果未及时回填,本次已补齐事实源。业务代码与数据“未修改”不代表既有数据安全问题已解决。 + +## 独立复核 + +- 架构与数据治理:Gate N `PASS`,Gate D `N/A_CONFIRMED`,见COLLAB-20260717-023。 +- 代码审核与安全:Gate C `N/A_CONFIRMED`,文档安全`PASS`,见COLLAB-20260717-025。 +- 测试与质量:Gate N `PASS`,Gate A `N/A_CONFIRMED`,文档质量`PASS`,见COLLAB-20260717-024、026。 +- 上述结论之后新增的结果回写仅修改治理文档;Gate P前由项目管理员重新执行全量链接、占位符、敏感模式和影响面检查。 + +## 最终本地验证 + +- 当前工作区共有45份未跟踪Markdown:39份属于本任务,另6份属于并行的CRM-20260717-006;两者在台账中分别管理。 +- 45份Markdown相对链接断链`0`、非模板占位符`0`、敏感值模式命中`0`。 +- 协作事件共40条,事件编号重复`0`、必填字段缺失`0`。 +- 相对起始commit `6e62407`的跟踪文件diff为`0`,未跟踪文件均为Markdown;本任务没有修改已有业务代码、配置或数据。 +- 本任务未执行Git commit或push,远程仓库尚未包含本轮治理文档。 + +## 已知限制 + +- 本轮只建立治理体系,不处理已进入Git历史的运行数据。 +- 当前角色会话是职责入口,不代表任何后续业务Gate已通过。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" new file mode 100644 index 0000000..cd3c06e --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/03-\351\252\214\346\224\266\350\256\260\345\275\225.md" @@ -0,0 +1,21 @@ +# 验收记录 + +## Gate结果 + +| Gate | 角色 | 结论 | 证据 | +| --- | --- | --- | --- | +| Owner方向 | Owner | PASS | 明确要求读取、适配并创建角色会话 | +| 需求冻结 | Owner/项目管理员 | PASS | [需求与验收](<./00-需求与验收.md>)已记录目标、范围、不做项和7项标准;本项不是Gate N独立签字 | +| Gate N | 架构与数据治理、测试与质量 | PASS | COLLAB-20260717-019、020、023、024;两个独立角色均确认需求和7项标准明确可验证 | +| Gate R | 8个专业角色 | PASS | COLLAB-20260717-001至016;[角色会话清单](<../../../研发体系/角色/角色会话清单.md>)为8/8 PASS | +| Gate C | 代码审核与安全 | N/A_CONFIRMED;文档安全PASS | COLLAB-20260717-021、025;无代码/配置/数据改动,39份治理Markdown独立安全扫描0命中 | +| Gate D | 架构与数据治理 | N/A_CONFIRMED | COLLAB-20260717-019、023;无可执行产物、目标环境或部署变更 | +| Gate A | 测试与质量 | N/A_CONFIRMED;文档质量PASS | COLLAB-20260717-022、026;无业务可执行产物,39份文档断链0、非模板占位符0、8/8会话一致 | +| Gate P首轮 | 产品与项目管理 | CHANGES_REQUESTED | COLLAB-20260717-017、018;要求同步事实源、补齐独立Gate、事件字段和中文目录规则 | +| Gate P复验 | 产品与项目管理 | PASS | COLLAB-20260717-039、040;首轮问题全部关闭,7项标准全部PASS,允许标记本地完成 | + +## 剩余边界 + +- CRM-20260717-001已通过Gate P并标记本地完成,无任务内未通过项。 +- 39份治理文档当前仍是未跟踪文件,尚未形成Git commit;本轮完成状态只代表本地交付闭环,不代表已提交或推送。 +- BLOCK-001至BLOCK-003不属于本任务的整改范围,继续保持业务系统正式上线`No-Go`。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" new file mode 100644 index 0000000..a833488 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/04-\346\234\254\350\275\256\347\273\223\350\256\272.md" @@ -0,0 +1,11 @@ +# 本轮结论 + +- 交付结果:本地完成;8个正式角色会话和治理文档已建立,首轮问题已整改,Gate P复验`PASS`。 +- 用户可见变化:项目已具备独立角色入口、统一研发流程、可追溯台账和中文任务目录规则。 +- 已完成:39份治理文档初始交付、8/8角色接入、链接/占位符/敏感模式扫描、业务文件未改检查。 +- 已完成:独立Gate N、Gate C/D/A的任务级N/A确认与文档安全/质量复核。 +- 未完成:39份CRM-001治理文档尚未提交或推送;这不影响本地完成,但远程仓库尚未交付本轮成果。 +- 当前Gate:Gate P `PASS`。 +- Go/No-Go:研发体系可进入试运行;业务系统正式上线仍为`No-Go`。 +- 回滚入口:删除本任务新增的研发体系文档;不会影响业务代码和运行数据。 +- 下一责任人:Owner决定是否提交并推送;并行需求和P0整改按各自任务继续。 diff --git "a/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/\345\257\274\350\257\273.md" "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/\345\257\274\350\257\273.md" new file mode 100644 index 0000000..960942e --- /dev/null +++ "b/docs/\344\273\273\345\212\241/202607/0717-\347\240\224\345\217\221\344\275\223\347\263\273\346\234\254\345\234\260\345\214\226/\345\257\274\350\257\273.md" @@ -0,0 +1,15 @@ +# CRM-20260717-001 研发体系本地化导读 + +- 状态:本地完成 +- 当前Gate:Gate P `PASS` +- 统一台账:[统一计划台账](<../../统一计划台账.md>) +- 主协作事件:[协作事件COLLAB-20260717-001至026、039至040](<../../协作事件.md>) +- 当前下一棒:Owner决定是否提交并推送本地治理文档;业务整改按独立任务继续 + +## 文档 + +- [00-需求与验收](<./00-需求与验收.md>) +- [01-计划改动清单](<./01-计划改动清单.md>) +- [02-实现与自测记录](<./02-实现与自测记录.md>) +- [03-验收记录](<./03-验收记录.md>) +- [04-本轮结论](<./04-本轮结论.md>) diff --git "a/docs/\344\273\273\345\212\241/\345\215\217\344\275\234\344\272\213\344\273\266.md" "b/docs/\344\273\273\345\212\241/\345\215\217\344\275\234\344\272\213\344\273\266.md" new file mode 100644 index 0000000..7a2fb3e --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\345\215\217\344\275\234\344\272\213\344\273\266.md" @@ -0,0 +1,907 @@ +# SalesCRM 协作事件 + +> 只追加。聊天和会话状态不能替代本文件。每个请求必须有结果回传和复核结论。 + +## COLLAB-20260717-001 | 产品与项目管理角色接入 + +- 事件类型:角色接入评审 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:产品与项目管理 +- 上游事件:无 +- 结果事件:COLLAB-20260717-009 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:CLOSED +- 目标:读取项目流程和职责卡,确认需求入口、台账、Gate汇总与禁止写代码边界。 +- 输入:[AGENTS](<../../AGENTS.md>)、[职责卡](<../研发体系/角色/02-产品与项目管理.md>)、[统一计划台账](<./统一计划台账.md>) +- 范围:只读核对产品与项目管理角色的职责、输入输出、Gate签字权和当前接入点。 +- 不做项:不修改文件、代码、数据、Git状态或运行态,不领取后续业务任务。 +- 验收:回传已读文件、职责/输入/输出/可签结论、禁止越级、当前任务接入点和冲突。 +- 敏感边界:只记录脱敏职责结论和Thread ID,不记录凭据、客户明细或原始日志。 +- 下一责任人:产品与项目管理会话 + +## COLLAB-20260717-002 | 架构与数据治理角色接入 + +- 事件类型:角色接入评审 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:架构与数据治理 +- 上游事件:无 +- 结果事件:COLLAB-20260717-010 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:CLOSED +- 目标:确认架构、数据、接口和安全设计边界,并审阅当前改造优先级。 +- 输入:[职责卡](<../研发体系/角色/03-架构与数据治理.md>)、[系统现状](<../架构/系统现状与改造路线.md>) +- 范围:只读核对架构、数据、接口、安全设计和技术Gate边界。 +- 不做项:不修改架构、代码、数据、配置、Git状态或运行态,不自行实施整改。 +- 验收:标准角色接入回执,指出冲突或缺口。 +- 敏感边界:只记录脱敏职责结论和Thread ID,不记录凭据、客户明细或原始日志。 +- 下一责任人:架构与数据治理会话 + +## COLLAB-20260717-003 | UI与交互设计角色接入 + +- 事件类型:角色接入评审 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:UI与交互设计 +- 上游事件:无 +- 结果事件:COLLAB-20260717-011 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:CLOSED +- 目标:确认按页面影响激活、设计规格和设计验收边界。 +- 输入:[职责卡](<../研发体系/角色/04-UI与交互设计.md>)、[产品基线](<../../outputs/sales_crm_v1_requirement.md>) +- 范围:只读核对设计角色的激活条件、设计规格、设计验收和越级边界。 +- 不做项:不制作设计稿,不修改页面、业务代码、数据、Git状态或运行态。 +- 验收:标准角色接入回执,当前无实现任务。 +- 敏感边界:只记录脱敏职责结论和Thread ID,不记录凭据、客户明细或原始日志。 +- 下一责任人:UI与交互设计会话 + +## COLLAB-20260717-004 | 前端开发角色接入 + +- 事件类型:角色接入评审 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:前端开发 +- 上游事件:无 +- 结果事件:COLLAB-20260717-012 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:CLOSED +- 目标:确认当前前端入口、目标边界、自测和禁止跨后端修改规则。 +- 输入:[职责卡](<../研发体系/角色/05-前端开发.md>)、[系统现状](<../架构/系统现状与改造路线.md>) +- 范围:只读核对前端入口、实现边界、自测要求和Gate D职责。 +- 不做项:不修改前端或后端代码、数据、配置、Git状态或运行态。 +- 验收:标准角色接入回执,不修改代码。 +- 敏感边界:只记录脱敏职责结论和Thread ID,不记录凭据、客户明细或原始日志。 +- 下一责任人:前端开发会话 + +## COLLAB-20260717-005 | 后端开发角色接入 + +- 事件类型:角色接入评审 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:后端开发 +- 上游事件:无 +- 结果事件:COLLAB-20260717-013 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:CLOSED +- 目标:确认Node.js后端、鉴权授权、数据迁移和测试边界。 +- 输入:[职责卡](<../研发体系/角色/06-后端开发.md>)、[系统现状](<../架构/系统现状与改造路线.md>) +- 范围:只读核对后端、鉴权授权、数据迁移、自测和Gate D职责。 +- 不做项:不修改后端或前端代码、运行数据、配置、Git状态或运行态。 +- 验收:标准角色接入回执,不修改代码或运行数据。 +- 敏感边界:只记录脱敏职责结论和Thread ID,不记录凭据、客户明细或原始日志。 +- 下一责任人:后端开发会话 + +## COLLAB-20260717-006 | 代码审核与安全角色接入 + +- 事件类型:角色接入评审 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:代码审核与安全 +- 上游事件:无 +- 结果事件:COLLAB-20260717-014 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:CLOSED +- 目标:确认独立Gate C、安全审查和禁止顺手实现边界。 +- 输入:[职责卡](<../研发体系/角色/07-代码审核与安全.md>)、[系统现状](<../架构/系统现状与改造路线.md>) +- 范围:只读核对独立Gate C、安全审查、finding分级和禁止顺手实现边界。 +- 不做项:不修改代码、数据、配置、Git状态或运行态,不执行正式Gate C。 +- 验收:标准角色接入回执并核对P0安全问题。 +- 敏感边界:只记录脱敏职责结论和Thread ID,不记录凭据、客户明细或原始日志。 +- 下一责任人:代码审核与安全会话 + +## COLLAB-20260717-007 | 测试与质量角色接入 + +- 事件类型:角色接入评审 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:测试与质量 +- 上游事件:无 +- 结果事件:COLLAB-20260717-015 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:CLOSED +- 目标:确认Web/API/权限/数据测试和独立Gate A边界。 +- 输入:[职责卡](<../研发体系/角色/08-测试与质量.md>)、[开发迭代流程](<../研发体系/开发迭代流程.md>) +- 范围:只读核对Web、API、权限、数据测试和独立Gate A边界。 +- 不做项:不修改文件、代码、数据、Git状态或运行态,不执行正式Gate A。 +- 验收:标准角色接入回执,说明当前测试能力缺口。 +- 敏感边界:只记录脱敏职责结论和Thread ID,不记录凭据、客户明细或原始日志。 +- 下一责任人:测试与质量会话 + +## COLLAB-20260717-008 | 运维与发布角色接入 + +- 事件类型:角色接入评审 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:运维与发布 +- 上游事件:无 +- 结果事件:COLLAB-20260717-016 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:CLOSED +- 目标:确认部署、备份、回滚、最小权限和禁止代签Gate D边界。 +- 输入:[职责卡](<../研发体系/角色/09-运维与发布.md>)、[运行环境说明](<../环境/运行环境说明.md>) +- 范围:只读核对部署、备份、回滚、最小权限和发布职责边界。 +- 不做项:不连接服务器,不部署,不修改代码、数据、配置、Git状态或运行态。 +- 验收:标准角色接入回执并指出部署阻断。 +- 敏感边界:只记录脱敏职责结论和Thread ID,不记录凭据、客户明细或原始日志。 +- 下一责任人:运维与发布会话 + +## 敏感边界 + +所有事件只记录脱敏摘要,不得写密码、Token、私钥、完整请求响应、真实客户明细或原始日志。 + +## COLLAB-20260717-009 | 产品与项目管理接入结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-001 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:PASS +- 目标:回传产品与项目管理角色接入评审并完成上游事件闭环。 +- 输入:COLLAB-20260717-001指定材料及产品与项目管理职责卡。 +- 范围:只读确认职责、输入输出、Gate签字权和禁止越级边界。 +- 不做项:未修改任何文件、代码、数据、Git状态或运行态,未领取业务实现任务。 +- 验收:回执包含已读材料、职责、输入输出、可签/不可签Gate、边界、接入点和冲突。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:职责、输入输出、Gate签字权和禁止越级边界清晰,无冲突、例外或接入阻塞。 +- 证据:Codex Thread `019f6ea8-234e-7450-80fd-edc7c8c5438b` +- 未完成项:不代表任何业务Gate已通过;项目P0阻塞继续有效。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-010 | 架构与数据治理接入结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:架构与数据治理 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-002 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:PASS +- 目标:回传架构与数据治理角色接入评审并完成上游事件闭环。 +- 输入:COLLAB-20260717-002指定材料及架构与数据治理职责卡。 +- 范围:只读确认架构、数据、接口、安全设计和技术Gate边界。 +- 不做项:未修改任何文件、代码、数据、配置、Git状态或运行态。 +- 验收:回执包含职责、输入输出、Gate边界、接入点和冲突。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:架构、数据、迁移、回滚和技术Gate边界清晰,无接入阻塞。 +- 证据:Codex Thread `019f6ea8-3df3-7260-a18f-18adb6ebef63` +- 未完成项:后续只有在统一台账和协作事件派发后才开展具体Gate N/R评审。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-011 | UI与交互设计接入结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:UI与交互设计 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-003 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:PASS +- 目标:回传UI与交互设计角色接入评审并完成上游事件闭环。 +- 输入:COLLAB-20260717-003指定材料及UI与交互设计职责卡。 +- 范围:只读确认设计激活条件、设计规格、设计验收和越级边界。 +- 不做项:未修改任何设计、页面、代码、数据、Git状态或运行态。 +- 验收:回执包含职责、输入输出、Gate边界、接入点和冲突。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:设计规格、设计验收和禁止修改业务代码边界清晰。 +- 证据:Codex Thread `019f6ea8-61fa-7fa3-ae43-2a11f6b6f354` +- 未完成项:实际设计任务激活前必须补读冻结产品基线和对应任务材料。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-012 | 前端开发接入结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:前端开发 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-004 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:PASS +- 目标:回传前端开发角色接入评审并完成上游事件闭环。 +- 输入:COLLAB-20260717-004指定材料及前端开发职责卡。 +- 范围:只读确认前端入口、职责、自测、Gate D和跨端边界。 +- 不做项:未修改任何前端/后端代码、数据、配置、Git状态或运行态。 +- 验收:回执包含职责、输入输出、Gate边界、接入点和冲突。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:当前入口、前端职责、自测、Gate D和禁止跨后端边界清晰。 +- 证据:Codex Thread `019f6ea8-7abd-7ca2-8b6c-8e3e54cfd8b1` +- 未完成项:未授权框架选择和业务实现。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-013 | 后端开发接入结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:后端开发 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-005 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:PASS +- 目标:回传后端开发角色接入评审并完成上游事件闭环。 +- 输入:COLLAB-20260717-005指定材料及后端开发职责卡。 +- 范围:只读确认后端、鉴权授权、数据迁移、自测和Gate D边界。 +- 不做项:未修改任何前端/后端代码、运行数据、配置、Git状态或运行态。 +- 验收:回执包含职责、输入输出、Gate边界、接入点和冲突。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:Node.js后端、鉴权授权、数据迁移、自测和Gate D边界清晰。 +- 证据:Codex Thread `019f6ea8-9633-7a82-9034-789ecc7888da` +- 未完成项:BLOCK-001至003继续有效,本回执不构成实现授权。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-014 | 代码审核与安全接入结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:代码审核与安全 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-006 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:PASS +- 目标:回传代码审核与安全角色接入评审并完成上游事件闭环。 +- 输入:COLLAB-20260717-006指定材料及代码审核与安全职责卡。 +- 范围:只读确认独立Gate C、安全finding和禁止顺手实现边界。 +- 不做项:未修改任何代码、数据、配置、Git状态或运行态,未执行正式Gate C。 +- 验收:回执包含职责、输入输出、Gate边界、接入点和冲突。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:独立Gate C、P0-P3 finding和禁止在审查中顺手实现的边界清晰。 +- 证据:Codex Thread `019f6ea8-b081-7121-9d98-4c9714bf50e1` +- 未完成项:本轮仅接入评审,尚未执行正式代码或安全扫描。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-015 | 测试与质量接入结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:测试与质量 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-007 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:PASS +- 目标:回传测试与质量角色接入评审并完成上游事件闭环。 +- 输入:COLLAB-20260717-007指定材料及测试与质量职责卡。 +- 范围:只读确认Web/API/权限/数据测试和独立Gate A边界。 +- 不做项:未修改任何文件、代码、数据、Git状态或运行态,未执行正式Gate A。 +- 验收:回执包含职责、输入输出、Gate边界、接入点、测试缺口和冲突。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:Web/API/权限/数据测试和Gate A边界清晰,无职责冲突。 +- 证据:Codex Thread `019f6ea8-ca49-7472-9a9e-24848071c22b` +- 未完成项:当前缺自动化测试、Gate D版本、隔离环境和测试数据,不能签正式Gate A。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-016 | 运维与发布接入结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:运维与发布 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-008 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate R +- 状态:PASS +- 目标:回传运维与发布角色接入评审并完成上游事件闭环。 +- 输入:COLLAB-20260717-008指定材料及运维与发布职责卡。 +- 范围:只读确认部署、备份、回滚、最小权限和发布边界。 +- 不做项:未连接服务器、未部署、未修改代码/数据/配置/Git状态/运行态。 +- 验收:回执包含职责、输入输出、Gate边界、接入点和部署阻断。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:部署、备份、回滚、最小权限和禁止代签Gate D边界清晰。 +- 证据:Codex Thread `019f6ea8-ec46-70d2-9122-0968c7946c23` +- 未完成项:实际部署评审前必须补读运行环境说明;当前No-Go和部署阻断继续有效。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-017 | 研发体系初始化Gate P首轮验收 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:产品与项目管理 +- 上游事件:COLLAB-20260717-009至016 +- 结果事件:COLLAB-20260717-018 +- 当前Gate:CRM-20260717-001 / Gate P +- 状态:CLOSED +- 目标:按冻结的7项验收标准独立检查研发体系初始化是否可以关闭。 +- 输入:[需求与验收](<./202607/0717-研发体系本地化/00-需求与验收.md>)、[验收记录](<./202607/0717-研发体系本地化/03-验收记录.md>)、[角色会话清单](<../研发体系/角色/角色会话清单.md>)及本任务全部新增治理文档。 +- 范围:只读核对本任务文档、角色会话、台账、事件和扫描证据的一致性。 +- 不做项:不修改文件、代码、数据、Git状态或运行态,不判断业务系统已可上线。 +- 验收:逐项给出PASS/CHANGES_REQUESTED/BLOCKED,说明是否允许关闭初始化及P0 No-Go是否继续有效。 +- 敏感边界:只记录脱敏结论和Thread ID,不输出凭据、客户明细或原始日志。 +- 下一责任人:产品与项目管理会话 + +## COLLAB-20260717-018 | 研发体系初始化Gate P首轮结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-017 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate P +- 状态:CHANGES_REQUESTED +- 目标:回传首轮Gate P并指出未闭环事实。 +- 输入:COLLAB-20260717-017列出的冻结验收材料。 +- 范围:只读逐项核对7项验收标准和任务关闭条件。 +- 不做项:未修改文件、代码、数据、Git状态或运行态,未替技术角色签字。 +- 验收:结论包含逐项结果、未完成项、是否允许关闭及业务No-Go声明。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:模式裁剪、角色边界、P0/P1台账、8个会话、中文文档名和敏感扫描均满足;事实源状态、独立Gate、事件最小字段及任务目录规则未闭环。 +- 证据:Codex Thread `019f6ea8-234e-7450-80fd-edc7c8c5438b` +- 未完成项:同步台账/自测/验收/结论文档;补充Gate N与C/D/A任务级确认;补齐事件字段;明确中文任务目录本地规则。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-019 | 补充独立Gate N与Gate D适用性评审 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:架构与数据治理 +- 上游事件:COLLAB-20260717-018 +- 结果事件:COLLAB-20260717-023 +- 当前Gate:CRM-20260717-001 / Gate N、Gate D适用性 +- 状态:CLOSED +- 目标:补充独立需求评审,并确认纯文档任务的Gate D是否N/A。 +- 输入:[需求与验收](<./202607/0717-研发体系本地化/00-需求与验收.md>)、[计划改动清单](<./202607/0717-研发体系本地化/01-计划改动清单.md>)、[采用与裁剪记录](<../研发体系/采用与裁剪记录.md>)、[开发迭代流程](<../研发体系/开发迭代流程.md>)。 +- 范围:只读核对目标、范围、不做项、角色矩阵、验收可测性及无可执行产物/部署变更事实。 +- 不做项:不修改任何文件、代码、数据、Git状态或运行态,不替产品、安全或测试签字。 +- 验收:分别回传Gate N和Gate D适用性结论、问题、证据与业务No-Go声明。 +- 敏感边界:只记录脱敏结论和Thread ID。 +- 下一责任人:架构与数据治理会话 + +## COLLAB-20260717-020 | 补充独立Gate N质量评审 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:测试与质量 +- 上游事件:COLLAB-20260717-018 +- 结果事件:COLLAB-20260717-024 +- 当前Gate:CRM-20260717-001 / Gate N +- 状态:CLOSED +- 目标:从独立测试视角核对需求范围、角色矩阵和7项验收标准是否明确、可验证。 +- 输入:[需求与验收](<./202607/0717-研发体系本地化/00-需求与验收.md>)、[计划改动清单](<./202607/0717-研发体系本地化/01-计划改动清单.md>)、[实现与自测记录](<./202607/0717-研发体系本地化/02-实现与自测记录.md>)。 +- 范围:只读评审需求完整性、验收可测性、证据口径和任务边界。 +- 不做项:不修改任何文件、代码、数据、Git状态或运行态,不执行业务系统测试。 +- 验收:回传Gate N的PASS/CHANGES_REQUESTED/BLOCKED、逐项依据和未完成项。 +- 敏感边界:只记录脱敏结论和Thread ID。 +- 下一责任人:测试与质量会话 + +## COLLAB-20260717-021 | Gate C N/A与文档安全复核 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:代码审核与安全 +- 上游事件:COLLAB-20260717-018 +- 结果事件:COLLAB-20260717-025 +- 当前Gate:CRM-20260717-001 / Gate C适用性 +- 状态:CLOSED +- 目标:独立确认本轮Gate C是否可标N/A,并复核新增治理文档没有引入凭据或敏感数据。 +- 输入:起始commit `6e62407`、当前Git状态、[实现与自测记录](<./202607/0717-研发体系本地化/02-实现与自测记录.md>)及全部新增治理Markdown。 +- 范围:只读核对本任务是否修改代码/配置/数据,复核敏感模式扫描和文档暴露风险。 +- 不做项:不修改文件、代码、数据、Git状态或运行态,不处理既有BLOCK-001历史风险。 +- 验收:回传Gate C适用性结论、文档安全结论、证据、未完成项和P0 No-Go声明。 +- 敏感边界:不得输出已知凭据值、客户明细或原始数据内容。 +- 下一责任人:代码审核与安全会话 + +## COLLAB-20260717-022 | Gate A N/A与文档质量复核 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:测试与质量 +- 上游事件:COLLAB-20260717-018 +- 结果事件:COLLAB-20260717-026 +- 当前Gate:CRM-20260717-001 / Gate A适用性 +- 状态:CLOSED +- 目标:独立确认本轮Gate A是否可标N/A,并复核文档链接、占位符、会话数量和事实源一致性。 +- 输入:[实现与自测记录](<./202607/0717-研发体系本地化/02-实现与自测记录.md>)、[验收记录](<./202607/0717-研发体系本地化/03-验收记录.md>)、[角色会话清单](<../研发体系/角色/角色会话清单.md>)及全部新增治理Markdown。 +- 范围:只读复核文档型验收证据,不执行Web/API/权限/数据业务测试。 +- 不做项:不修改文件、代码、数据、Git状态或运行态,不把文档质量结论写成业务Gate A PASS。 +- 验收:回传Gate A适用性、文档质量结论、证据、未完成项和业务No-Go声明。 +- 敏感边界:只记录脱敏结论和Thread ID。 +- 下一责任人:测试与质量会话 + +## COLLAB-20260717-027 | 员工修改密码架构与数据Gate N评审 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:架构与数据治理 +- 上游事件:Owner员工修改密码需求 +- 结果事件:COLLAB-20260717-033 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:PENDING +- 目标:评审员工自主改密需求的可实现性、安全依赖、数据迁移和回滚影响。 +- 输入:[需求与验收](<./202607/0717-员工修改密码/00-需求与验收.md>)、[计划改动清单](<./202607/0717-员工修改密码/01-计划改动清单.md>)、[系统现状与改造路线](<../架构/系统现状与改造路线.md>)。 +- 范围:只读评审密码哈希、会话撤销、现有账号迁移、强制轮换、备份和回滚边界。 +- 不做项:不修改代码、账号数据、Git历史、部署配置或线上运行态,不替安全或开发签字。 +- 验收:回传PASS/CHANGES_REQUESTED/BLOCKED、需求问题、依赖、Gate R必备材料和下一责任人。 +- 敏感边界:不得读取、记录或回显任何实际密码、Token、客户数据或完整请求响应。 +- 下一责任人:架构与数据治理会话 + +## COLLAB-20260717-028 | 员工修改密码设计Gate N评审 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:UI与交互设计 +- 上游事件:Owner员工修改密码需求 +- 结果事件:COLLAB-20260717-034 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:PENDING +- 目标:评审个人账号入口、修改密码表单、首次强制改密和错误状态是否完整可实现。 +- 输入:[需求与验收](<./202607/0717-员工修改密码/00-需求与验收.md>)及当前Web页面入口。 +- 范围:只读评审页面流程、字段、状态、反馈和移动浏览器适配需求。 +- 不做项:不修改业务代码、产品范围、账号数据或线上页面。 +- 验收:回传PASS/CHANGES_REQUESTED/BLOCKED、缺失状态、设计输出清单和下一责任人。 +- 敏感边界:设计示例不得包含实际账号、密码、Token或客户数据。 +- 下一责任人:UI与交互设计会话 + +## COLLAB-20260717-029 | 员工修改密码前端Gate N评审 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:前端开发 +- 上游事件:Owner员工修改密码需求 +- 结果事件:COLLAB-20260717-035 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:PENDING +- 目标:评审修改密码与强制改密前端范围、接口依赖、自测和兼容性。 +- 输入:[需求与验收](<./202607/0717-员工修改密码/00-需求与验收.md>)、[计划改动清单](<./202607/0717-员工修改密码/01-计划改动清单.md>)及当前前端入口。 +- 范围:只读评审前端影响、状态管理、安全输入和旧会话退出流程。 +- 不做项:不修改前端、后端、数据、部署或运行态,不选择新框架。 +- 验收:回传PASS/CHANGES_REQUESTED/BLOCKED、接口前置条件、测试面和Gate R所需材料。 +- 敏感边界:不得使用真实密码或账号作为示例和测试数据。 +- 下一责任人:前端开发会话 + +## COLLAB-20260717-030 | 员工修改密码后端Gate N评审 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:后端开发 +- 上游事件:Owner员工修改密码需求 +- 结果事件:COLLAB-20260717-036 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:PENDING +- 目标:评审后端鉴权、密码存储、会话撤销、主管重置、审计和迁移的实现影响。 +- 输入:[需求与验收](<./202607/0717-员工修改密码/00-需求与验收.md>)、[计划改动清单](<./202607/0717-员工修改密码/01-计划改动清单.md>)及当前后端入口。 +- 范围:只读评审接口、数据、兼容、并发、错误处理、测试和迁移边界。 +- 不做项:不修改后端、运行数据、Git历史、部署或线上运行态,不提前选择技术实现。 +- 验收:回传PASS/CHANGES_REQUESTED/BLOCKED、实现依赖、迁移风险、测试面和Gate R材料。 +- 敏感边界:不得读取、输出或复制现有密码、Token、账号明细或原始业务数据。 +- 下一责任人:后端开发会话 + +## COLLAB-20260717-031 | 员工修改密码安全Gate N评审 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:代码审核与安全 +- 上游事件:Owner员工修改密码需求 +- 结果事件:COLLAB-20260717-037 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:PENDING +- 目标:从账号安全角度评审密码政策、哈希、会话撤销、限流、审计、迁移和停止线。 +- 输入:[需求与验收](<./202607/0717-员工修改密码/00-需求与验收.md>)、[系统现状与改造路线](<../架构/系统现状与改造路线.md>)。 +- 范围:只读识别P0/P1风险并给出Gate R和Gate C所需安全证据。 +- 不做项:不修改代码、密码、数据、Git历史、部署配置或线上环境,不替架构或测试签字。 +- 验收:回传PASS/CHANGES_REQUESTED/BLOCKED、finding、停止线、解除条件和下一责任人。 +- 敏感边界:不得输出已知凭据值、Token、客户明细、完整请求响应或原始日志。 +- 下一责任人:代码审核与安全会话 + +## COLLAB-20260717-032 | 员工修改密码测试Gate N评审 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:测试与质量 +- 上游事件:Owner员工修改密码需求 +- 结果事件:COLLAB-20260717-038 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:PENDING +- 目标:评审需求可测性、环境、测试账号、会话、权限、迁移和验收覆盖。 +- 输入:[需求与验收](<./202607/0717-员工修改密码/00-需求与验收.md>)、[计划改动清单](<./202607/0717-员工修改密码/01-计划改动清单.md>)。 +- 范围:只读评审Web/API/权限/会话/迁移用例和测试数据隔离要求。 +- 不做项:不执行业务测试,不修改代码、账号数据、Git状态、部署或线上运行态。 +- 验收:回传PASS/CHANGES_REQUESTED/BLOCKED、不可测项、环境与数据前置条件、Gate R测试材料。 +- 敏感边界:测试样本必须脱敏,不得使用真实密码、Token或生产客户数据。 +- 下一责任人:测试与质量会话 + +## COLLAB-20260717-033 | 员工修改密码架构与数据Gate N首轮结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:架构与数据治理 +- 目标角色:产品与项目管理 +- 上游事件:COLLAB-20260717-027 +- 结果事件:待需求修订后重新派发 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:CHANGES_REQUESTED +- 目标:回传密码、会话、账号迁移和安全回滚的需求评审结论。 +- 输入:COLLAB-20260717-027指定材料。 +- 范围:只读评审可实现性、安全依赖、迁移、备份和回滚。 +- 不做项:未修改文件、代码、数据、Git状态、部署或运行态。 +- 验收:结论包含需求缺口、依赖、Gate R材料和下一责任人。 +- 敏感边界:未读取或输出任何实际凭据、Token或业务数据。 +- 结论:需求方向可实现,但主管重置后的临时凭据交付、存量账号切换、强制改密受限会话、密码复用和安全回滚语义未冻结。 +- 证据:Codex Thread `019f6ea8-3df3-7260-a18f-18adb6ebef63` +- 未完成项:Owner与产品冻结上述规则;Gate R补威胁模型、密码/会话状态机、迁移、备份、验证、停止线和回滚材料。 +- 下一责任人:Owner/产品与项目管理 + +## COLLAB-20260717-034 | 员工修改密码设计Gate N首轮结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:UI与交互设计 +- 目标角色:产品与项目管理 +- 上游事件:COLLAB-20260717-028 +- 结果事件:待需求修订后重新派发 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:CHANGES_REQUESTED +- 目标:回传个人账号、自主改密、首次强制改密和主管重置的交互评审结论。 +- 输入:COLLAB-20260717-028指定材料。 +- 范围:只读评审桌面和移动Web页面流程、字段、状态、反馈和无障碍需求。 +- 不做项:未修改文件、代码、数据、Git状态或运行态。 +- 验收:结论包含缺失状态、设计输出清单和下一责任人。 +- 敏感边界:未使用任何真实账号、密码或Token。 +- 结论:个人账号入口、普通/强制改密、主管重置、错误反馈、会话失效、多标签页、无障碍和移动浏览器状态尚未冻结。 +- 证据:Codex Thread `019f6ea8-61fa-7fa3-ae43-2a11f6b6f354` +- 未完成项:产品补齐状态和验收口径后重新评审;Gate R产出页面流程和完整状态矩阵。 +- 下一责任人:Owner/产品与项目管理 + +## COLLAB-20260717-035 | 员工修改密码前端Gate N首轮结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:前端开发 +- 目标角色:产品与项目管理 +- 上游事件:COLLAB-20260717-029 +- 结果事件:待需求修订后重新派发 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:CHANGES_REQUESTED +- 目标:回传前端页面、接口依赖、安全输入、强制改密和旧会话退出评审结论。 +- 输入:COLLAB-20260717-029指定材料。 +- 范围:只读评审前端影响、状态、安全边界、自测和兼容性。 +- 不做项:未修改文件、代码、数据、Git状态、部署或运行态。 +- 验收:结论包含问题、接口前置条件、Gate R材料和下一责任人。 +- 敏感边界:未使用或输出真实凭据。 +- 结论:主管重置规则、强制改密受限状态、稳定错误码和页面范围未冻结;认证流程必须删除默认凭据、禁止Token进URL及认证请求本地回退。 +- 证据:Codex Thread `019f6ea8-7abd-7ca2-8b6c-8e3e54cfd8b1` +- 未完成项:产品、架构、设计、后端和安全共同补齐接口、状态和风险处置口径后重新评审。 +- 下一责任人:Owner/产品与项目管理 + +## COLLAB-20260717-036 | 员工修改密码后端Gate N首轮结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:后端开发 +- 目标角色:产品与项目管理 +- 上游事件:COLLAB-20260717-030 +- 结果事件:无 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:PASS +- 目标:回传鉴权、密码、会话、主管重置、审计、限流、并发、迁移和回滚的后端需求评审结论。 +- 输入:COLLAB-20260717-030指定材料。 +- 范围:只读评审后端可实现性、依赖、风险和测试面。 +- 不做项:未修改文件、代码、运行数据、Git状态、部署或线上运行态。 +- 验收:结论包含实现依赖、迁移风险、测试面、Gate R材料和下一责任人。 +- 敏感边界:未读取或输出真实密码、Token、账号明细或业务数据。 +- 结论:后端Gate N PASS;当前实现不满足需求,Gate R通过前不得实施。 +- 证据:Codex Thread `019f6ea8-9633-7a82-9034-789ecc7888da` +- 未完成项:Gate R冻结密码、会话、权限、并发、迁移、备份、回滚和自动化测试方案,并与BLOCK-001/002明确责任边界。 +- 下一责任人:产品与项目管理汇总Gate N + +## COLLAB-20260717-037 | 员工修改密码安全Gate N首轮结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:代码审核与安全 +- 目标角色:产品与项目管理 +- 上游事件:COLLAB-20260717-031 +- 结果事件:待需求修订后重新派发 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:CHANGES_REQUESTED +- 目标:回传密码、会话、限流、审计、迁移、停止线和Gate C证据的安全评审结论。 +- 输入:COLLAB-20260717-031指定材料及当前官方安全规范。 +- 范围:只读识别P0-P3风险并提出解除条件。 +- 不做项:未修改文件、代码、数据、Git状态、部署或运行态,未替架构和测试签字。 +- 验收:结论包含finding、停止线、解除条件、Gate R/C证据和下一责任人。 +- 敏感边界:未输出已知密码、Token、客户数据、完整请求响应或原始日志。 +- 结论:旧认证协议退役、主管重置授权和临时凭据生命周期、迁移备份安全回滚、密码KDF属性、限流、审计和高风险端点保护尚未形成硬性验收边界。 +- 证据:Codex Thread `019f6ea8-b081-7121-9d98-4c9714bf50e1` +- 未完成项:产品冻结停止线和主管重置规则;Gate R补威胁模型、KDF、会话、权限、迁移、回滚、限流、审计和协议防护设计。 +- 下一责任人:Owner/产品与项目管理 + +## COLLAB-20260717-038 | 员工修改密码测试Gate N首轮结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:测试与质量 +- 目标角色:产品与项目管理 +- 上游事件:COLLAB-20260717-032 +- 结果事件:无 +- 当前Gate:CRM-20260717-006 / Gate N +- 状态:PASS +- 目标:回传Web/API/权限/会话/迁移需求可测性结论。 +- 输入:COLLAB-20260717-032指定材料。 +- 范围:只读评审环境、脱敏角色样本、自动化测试覆盖和验收可测性。 +- 不做项:未执行业务测试,未修改文件、代码、账号数据、Git状态、部署或运行态。 +- 验收:结论包含不可测项、环境与数据前置条件、Gate R测试材料和下一责任人。 +- 敏感边界:未使用真实凭据或生产客户数据。 +- 结论:测试Gate N PASS;需求可测,但当前尚无可执行Gate A的接口、环境、样本或实现基线。 +- 证据:Codex Thread `019f6ea8-ca49-7472-9a9e-24848071c22b` +- 未完成项:Gate R补接口、错误码、密码规则、权限与状态矩阵、会话撤销、限流、审计、迁移/回滚和自动化测试矩阵。 +- 下一责任人:产品与项目管理汇总Gate N + +## COLLAB-20260717-023 | 独立Gate N与Gate D适用性结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:架构与数据治理 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-019 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate N、Gate D适用性 +- 状态:PASS +- 目标:回传独立需求评审和Gate D适用性结论。 +- 输入:COLLAB-20260717-019指定的需求、计划、裁剪、流程、台账和事件材料。 +- 范围:只读核对需求完整性与是否存在可执行产物、目标环境或部署变更。 +- 不做项:未修改文件、代码、数据、Git状态或运行态,未替产品、安全或测试签字。 +- 验收:分别给出Gate N、Gate D适用性、依据、未完成项和业务No-Go声明。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:Gate N `PASS`;目标、范围、不做项、角色矩阵明确,7项标准可验证。Gate D `N/A_CONFIRMED`;本任务没有可执行产物、目标环境或部署变更。 +- 证据:Codex Thread `019f6ea8-3df3-7260-a18f-18adb6ebef63` +- 未完成项:本结论不关闭任务,不替代其他Gate;BLOCK-001至003和业务No-Go继续有效。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-024 | 独立Gate N质量评审结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:测试与质量 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-020 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate N +- 状态:PASS +- 目标:回传测试视角的独立需求质量评审。 +- 输入:COLLAB-20260717-020指定的需求、计划、自测、台账和事件材料。 +- 范围:只读核对需求、范围、不做项、角色矩阵和7项验收的明确性与可测性。 +- 不做项:未修改文件、代码、数据、Git状态或运行态,未执行Web/API业务测试。 +- 验收:给出Gate N结论、依据、未完成项和业务No-Go声明。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:Gate N `PASS`;需求、范围、不做项、角色矩阵和7项验收标准明确且可独立验证。 +- 证据:主测试Codex Thread `019f6ea8-ca49-7472-9a9e-24848071c22b`;复验Thread `019f6efd-5c9a-7383-bd9f-60e5b67d207a`给出相同结论。 +- 未完成项:本结论不代表业务Gate A或任务关闭;BLOCK-001至003和业务No-Go继续有效。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-025 | Gate C N/A与文档安全复核结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:代码审核与安全 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-021 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate C适用性 +- 状态:PASS +- 目标:回传Gate C适用性与文档安全独立复核。 +- 输入:起始commit `6e62407`、完整Git状态、39份新增治理Markdown和任务自测/验收材料。 +- 范围:只读确认代码/配置/数据影响面并扫描新增文档的凭据和敏感数据风险。 +- 不做项:未修改文件、代码、数据、Git状态或运行态,未治理既有Git历史或运行数据。 +- 验收:给出Gate C适用性、文档安全结论、证据、未完成项和业务No-Go声明。 +- 敏感边界:复核过程不回显凭据值、客户明细或原始业务数据。 +- 结论:Gate C `N/A_CONFIRMED`,不是Gate C PASS;文档安全复核`PASS`。跟踪文件变更为0,未跟踪项39份且全为Markdown,业务代码/配置/数据范围diff为0,敏感模式扫描0命中。 +- 证据:Codex Thread `019f6ea8-b081-7121-9d98-4c9714bf50e1`;受审快照SHA-256 `a615678434ec282f9a57f0957dc567d2dea061dc627f8f07e12231ec43ef722a`。 +- 未完成项:39份治理文档仍未纳入Git可追溯基线;结果记录后的文档变化需重新执行最终扫描。BLOCK-001至003和业务No-Go继续有效。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-026 | Gate A N/A与文档质量复核结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:测试与质量 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-022 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate A适用性 +- 状态:PASS +- 目标:回传Gate A适用性与文档质量独立复核。 +- 输入:COLLAB-20260717-022指定的自测、验收、角色会话、台账、事件和新增治理Markdown。 +- 范围:只读确认业务测试是否适用,并复核链接、占位符、会话数量和事实源一致性。 +- 不做项:未修改文件、代码、数据、Git状态或运行态,未执行Web/API业务测试。 +- 验收:给出Gate A适用性、文档质量、证据、未完成项和业务No-Go声明。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:Gate A `N/A_CONFIRMED`,不是业务Gate A PASS;文档质量`PASS`。39份Markdown相对链接断链0,非模板占位符0,8个角色Thread ID唯一且8/8 PASS,任务事实源一致保持整改中。 +- 证据:主测试Codex Thread `019f6ea8-ca49-7472-9a9e-24848071c22b`;复验Thread `019f6efd-5c9a-7383-bd9f-60e5b67d207a`。 +- 未完成项:重新发起Gate P并封版台账;BLOCK-001至003和业务No-Go继续有效。 +- 下一责任人:项目管理员 + +## COLLAB-20260717-039 | 研发体系初始化Gate P复验 + +- 事件类型:Gate请求 +- 发起时间:2026-07-17 +- 发起角色:项目管理员 +- 目标角色:产品与项目管理 +- 上游事件:COLLAB-20260717-018、023至026 +- 结果事件:COLLAB-20260717-040 +- 当前Gate:CRM-20260717-001 / Gate P复验 +- 状态:CLOSED +- 目标:复核首轮CHANGES_REQUESTED是否全部关闭,并判断研发体系初始化能否标记为本地完成。 +- 输入:[需求与验收](<./202607/0717-研发体系本地化/00-需求与验收.md>)、[实现与自测记录](<./202607/0717-研发体系本地化/02-实现与自测记录.md>)、[验收记录](<./202607/0717-研发体系本地化/03-验收记录.md>)、[本轮结论](<./202607/0717-研发体系本地化/04-本轮结论.md>)、[统一计划台账](<./统一计划台账.md>)、[协作事件](<./协作事件.md>)及[角色会话清单](<../研发体系/角色/角色会话清单.md>)。 +- 范围:只读复核CRM-20260717-001的7项验收、首轮整改、独立Gate和事实源一致性;识别并行CRM-20260717-006但不验收它。 +- 不做项:不修改文件、代码、数据、Git状态或运行态,不把本地完成写成已提交/已推送,不解除业务系统No-Go。 +- 验收:回传PASS/CHANGES_REQUESTED/BLOCKED、首轮问题逐项关闭情况、是否允许标记本地完成、Git基线状态及业务No-Go声明。 +- 敏感边界:只记录脱敏结论和Thread ID,不输出凭据、客户明细或原始日志。 +- 下一责任人:产品与项目管理会话 + +## COLLAB-20260717-040 | 研发体系初始化Gate P复验结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:项目管理员 +- 上游事件:COLLAB-20260717-039 +- 结果事件:无 +- 当前Gate:CRM-20260717-001 / Gate P复验 +- 状态:PASS +- 目标:回传首轮整改后的Gate P复验结论并判断任务能否本地关闭。 +- 输入:COLLAB-20260717-039指定的需求、自测、验收、结论、台账、事件、流程、裁剪和角色会话材料。 +- 范围:只读核对CRM-20260717-001的7项验收、首轮整改、独立Gate和事实源一致性;不验收并行CRM-20260717-006。 +- 不做项:未修改文件、代码、数据、Git状态或运行态,未把本地交付写成已提交或已推送,未解除业务No-Go。 +- 验收:结论包含首轮问题关闭情况、7项标准、是否允许本地完成、Git状态和业务No-Go声明。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:Gate P复验`PASS`;首轮提出的事实源、独立Gate、事件字段、中文任务目录规则和自测回填问题全部关闭,7项验收全部PASS,允许标记“本地完成”。 +- 证据:Codex Thread `019f6ea8-234e-7450-80fd-edc7c8c5438b` +- 未完成项:39份CRM-001治理文档尚未提交或推送,不得描述为远程已交付;BLOCK-001至003和业务系统正式上线No-Go继续有效。 +- 下一责任人:Owner决定是否将本地治理文档提交并推送;并行CRM-20260717-006按自身Gate继续。 + +## COLLAB-20260717-041 | 角色会话串行调度规则接入 + +- 事件类型:规则接入请求 +- 发起时间:2026-07-17 +- 发起角色:Owner/项目管理员 +- 目标角色:8个正式专业角色会话 +- 上游事件:Owner发现协作消息打断当前任务并导致原任务丢失 +- 结果事件:COLLAB-20260717-042 +- 当前Gate:CRM-20260717-007 / Gate R +- 状态:CLOSED +- 目标:让全部正式角色采用WIP=1、持久队列、执行锁、禁止消息抢占和中断恢复规则。 +- 输入:[需求与验收](<./202607/0717-会话串行调度/00-需求与验收.md>)、[串行调度规范](<../研发体系/角色会话串行调度规范.md>)、[角色任务队列](<./角色队列/导读.md>)、更新后的AGENTS/全局约束/开发流程/协作规范及各自职责卡。 +- 范围:只读完成规则接入确认;产品/架构/测试同时检查规则可执行性,其他角色检查本职责域是否可顺次恢复。 +- 不做项:不修改业务代码、配置、数据、部署、Git状态或运行态;不处理CRM-006业务需求;不向active会话投递。 +- 验收:8个正式Thread ID分别回传PASS/CHANGES_REQUESTED/BLOCKED,确认WIP=1、当前锁定项优先、新消息入队、异常恢复和Owner显式抢占边界。 +- 敏感边界:只记录脱敏规则结论和Thread ID,不记录凭据、客户数据或原始日志。 +- 下一责任人:项目管理员按队列逐角色检查idle状态、加锁并安全投递 + +## COLLAB-20260717-042 | 角色会话串行调度规则接入结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:8个正式专业角色会话 +- 目标角色:项目管理员/Owner +- 上游事件:COLLAB-20260717-041 +- 结果事件:无 +- 当前Gate:CRM-20260717-007 / Gate R、Gate P +- 状态:PASS +- 目标:回传WIP=1、持久队列、执行锁、禁止抢占和中断恢复规则的接入结果。 +- 输入:COLLAB-20260717-041指定的全局规则、调度规范、协作规范、职责卡和8个角色队列文件。 +- 范围:8个正式角色只读确认规则;产品验证调度算法,架构验证状态机,安全确认Gate C适用性,测试验证验收可测性。 +- 不做项:所有角色均未修改业务代码、配置、数据、Git状态或运行态,未处理CRM-20260717-006或其他任务。 +- 验收:8个正式角色分别确认WIP=1、active/有锁只入队、中断恢复原项、Owner未明确停止/替换不得抢占。 +- 敏感边界:仅记录脱敏结论和Thread ID。 +- 结论:8/8 `PASS`。产品确认调度算法可执行;架构确认状态机、双重检查和恢复无冲突;安全确认纯文档Gate C N/A且当前无任务丢失风险;测试确认7项标准可验证、Gate A N/A;其他角色确认本职责域可顺次执行。 +- 证据:产品`019f6ea8-234e-7450-80fd-edc7c8c5438b`、架构`019f6ea8-3df3-7260-a18f-18adb6ebef63`、UI`019f6f41-7c33-7200-97b4-5bb4690de8c2`、前端`019f6ea8-7abd-7ca2-8b6c-8e3e54cfd8b1`、后端`019f6ea8-9633-7a82-9034-789ecc7888da`、安全`019f6ea8-b081-7121-9d98-4c9714bf50e1`、测试`019f6ea8-ca49-7472-9a9e-24848071c22b`、运维`019f6ea8-ec46-70d2-9122-0968c7946c23`。 +- 中断恢复演练:原UI会话首次投递未产生turn且两次恢复失败,队列始终保留`RUNNING`的QUEUE-003;未投递下一任务。新正式UI会话接管同一QUEUE-003并PASS后才释放锁,证明异常没有造成任务丢失。 +- 未完成项:需要在后续真实多任务迭代中持续执行投递前双重检查;任何绕过队列直接向active会话发消息都会重新引入风险。 +- 下一责任人:产品与项目管理、项目管理员按新规范调度后续任务 + +## COLLAB-20260717-043 | 架构角色会话故障迁移 + +- 事件类型:会话修复请求 +- 发起时间:2026-07-17 +- 发起角色:Owner/项目管理员 +- 目标角色:架构与数据治理 +- 上游事件:用户报告架构会话提交消息返回`Error submitting message` +- 结果事件:COLLAB-20260717-044 +- 当前Gate:CRM-20260717-008 / Gate R +- 状态:CLOSED +- 目标:保留旧会话历史,创建新的正式架构会话接管职责,并连续验证两次消息提交。 +- 输入:[需求与验收](<./202607/0717-架构会话修复/00-需求与验收.md>)、[架构角色队列](<./角色队列/架构与数据治理.md>)及角色治理入口。 +- 范围:只迁移正式Thread入口、执行只读接入和连通性复测、同步治理文档。 +- 不做项:不修改业务代码、配置、数据、部署、Git状态或运行态;不处理CRM-006;不再向旧异常会话投递。 +- 验收:新Thread连续两个turn正常完成,三处正式ID一致,架构队列最终IDLE且迁移项COMPLETED。 +- 敏感边界:不读取或输出凭据、客户数据、原始日志或完整请求响应。 +- 下一责任人:架构与数据治理会话按统一队列等待后续任务 + +## COLLAB-20260717-044 | 架构角色会话故障迁移结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:架构与数据治理/项目管理员 +- 目标角色:Owner/产品与项目管理 +- 上游事件:COLLAB-20260717-043 +- 结果事件:无 +- 当前Gate:CRM-20260717-008 / Gate R、Gate P +- 状态:PASS +- 目标:回传新正式架构会话接管和连续两次消息提交的验证结果。 +- 输入:新Codex Thread `019f6f85-bee8-7f70-8d0a-af638ece0782`、QUEUE-20260717-009及CRM-20260717-008验收标准。 +- 范围:首次只读角色接入、第二次后续消息提交、正式入口映射和队列释放。 +- 不做项:未修改业务代码、配置、数据、部署、Git状态或运行态;未处理CRM-006或其他业务任务。 +- 验收:首次turn正常完成并PASS;会话idle后第二次消息成功提交,约8秒完成并PASS;正式ID三处一致;队列恢复IDLE且QUEUE-009为COMPLETED。 +- 敏感边界:仅记录脱敏结论和Thread ID,不记录凭据、客户数据、原始日志或完整请求响应。 +- 结论:PASS。旧会话保留历史且停止新投递;新会话已成为正式入口,连续提交链路正常。 +- 证据:Codex Thread `019f6f85-bee8-7f70-8d0a-af638ece0782`,首次turn `019f6f85-d40d-76f1-a279-5c56f60b2670`,第二次turn `019f6f89-fc6f-7b61-bcdb-319e87cd6a63`。 +- 未完成项:本任务不修补Codex客户端/服务端内部故障;若新会话再次出现同类错误,继续按历史保留、队列锁定、正式入口迁移流程处理。 +- 下一责任人:架构与数据治理会话按统一队列等待后续任务 + +## COLLAB-20260717-045 | 员工修改密码MVP需求收敛 + +- 事件类型:产品需求整改请求 +- 发起时间:2026-07-17 +- 发起角色:Owner +- 目标角色:产品与项目管理 +- 上游事件:COLLAB-20260717-033至038首轮Gate N结果 +- 结果事件:COLLAB-20260717-046 +- 当前Gate:CRM-20260717-006 / Gate N需求整改 +- 状态:IN_PROGRESS +- 目标:把员工修改密码需求收敛为先能用的最小版本,复杂安全与体验能力分期处理。 +- 输入:Owner明确要求先定基本功能、不要一次做大而全;CRM-20260717-006现有需求、计划和首轮Gate N意见。 +- 范围:只完善产品需求、MVP范围、不做项、验收标准、分期建议和需要Owner确认的问题。 +- 不做项:不修改业务代码、运行账号数据、Git状态、部署或运行态;不处理CRM-20260717-008或其他任务;不代签技术Gate。 +- 验收:MVP至少包含员工本人改密、当前密码校验、新密码确认、基本错误提示和主管原有重置能力;复杂会话、强制轮换、审计、限流和大规模迁移明确延期;输出剩余问题和下一责任人。 +- 敏感边界:不得读取、记录或输出任何真实密码、Token、账号明细、客户数据或完整请求响应。 +- 队列编号:QUEUE-20260717-009 +- 下一责任人:产品与项目管理 + +## COLLAB-20260717-046 | 员工修改密码MVP需求收敛结果 + +- 事件类型:结果回传 +- 发起时间:2026-07-17 +- 发起角色:产品与项目管理 +- 目标角色:Owner/项目管理员 +- 上游事件:COLLAB-20260717-045 +- 结果事件:待Owner确认后重新建立Gate N请求 +- 当前Gate:CRM-20260717-006 / Gate N需求整改 +- 状态:PASS +- 目标:回传员工修改密码v0.2-MVP的范围、验收、分期和剩余问题。 +- 输入:Owner“先能用、再逐步好用”的产品原则、CRM-20260717-006原需求及首轮Gate N意见。 +- 范围:仅调整需求、MVP验收、计划、任务状态和产品事实源。 +- 不做项:未修改业务代码、运行账号数据、Git状态、部署或运行态;未处理CRM-20260717-008或其他任务;未代签技术Gate。 +- 验收:首版包含员工本人改密、当前密码校验、新密码确认、基本错误提示、修改成功后重新登录和主管原重置能力;复杂安全与体验能力已明确分期。 +- 敏感边界:未读取、记录或输出真实密码、Token、账号明细、客户数据或完整请求响应。 +- 结论:产品需求整改`PASS`。v0.2-MVP保留10项可验证的基本功能标准;密码哈希、旧认证退役、强制轮换、一次性临时凭据、完整会话撤销、复杂限流和审计延期处理。 +- 证据:[需求与验收](<./202607/0717-员工修改密码/00-需求与验收.md>)、[计划改动清单](<./202607/0717-员工修改密码/01-计划改动清单.md>);任务内6份Markdown断链0。 +- 未完成项:Owner确认密码长度、成功退出、主管原重置方式及是否先测试后部署;随后重新执行受影响角色Gate N。现有P0风险和No-Go继续有效。 +- 队列编号:QUEUE-20260717-009 +- 下一责任人:Owner diff --git "a/docs/\344\273\273\345\212\241/\347\273\237\344\270\200\350\256\241\345\210\222\345\217\260\350\264\246.md" "b/docs/\344\273\273\345\212\241/\347\273\237\344\270\200\350\256\241\345\210\222\345\217\260\350\264\246.md" new file mode 100644 index 0000000..8bd5f63 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\347\273\237\344\270\200\350\256\241\345\210\222\345\217\260\350\264\246.md" @@ -0,0 +1,64 @@ +# SalesCRM 统一计划台账 + +- 版本:v1.0 +- 维护角色:产品与项目管理 +- 最后更新:2026-07-17 Asia/Shanghai + +## 当前目标 + +- 产品目标:把 SalesCRM 从单文件演示原型改造成安全、可维护、可测试、可部署的正式内部系统。 +- 当前里程碑:研发治理基线封版、角色会话串行调度整改与P0安全整改准备。 +- 当前 Gate:CRM-20260717-008 Gate P `PASS`并本地完成;CRM-20260717-006仍在Gate N需求决策。 +- Go/No-Go:`No-Go`,P0账号/数据/Git历史风险未关闭前不得正式生产上线。 +- 当前唯一下一棒:Owner处理CRM-20260717-006待确认产品决策;后续跨角色任务由产品/项目管理员按新队列顺次投递。 + +## 活跃任务 + +| 优先级 | 任务编号 | 目标 | 当前状态 | 当前Gate | 下一责任人 | 需求目录/事件 | +| --- | --- | --- | --- | --- | --- | --- | +| P0 | CRM-20260717-008 | 修复架构角色会话`Error submitting message`并迁移正式入口 | 本地完成 | Gate P-PASS | 项目管理员持续维护 | [任务目录](<./202607/0717-架构会话修复/导读.md>) | +| P0 | CRM-20260717-007 | 防止协作消息打断角色任务,建立WIP=1持久队列和执行锁 | 本地完成 | Gate P-PASS | 产品/项目管理员持续执行 | [任务目录](<./202607/0717-会话串行调度/导读.md>) | +| P0 | CRM-20260717-001 | 本地化研发体系并初始化角色会话 | 本地完成 | Gate P-PASS | Owner(Git基线) | [任务目录](<./202607/0717-研发体系本地化/导读.md>) | +| P0 | CRM-20260717-002 | 隔离Git中的运行数据和账号密码,完成轮换与历史治理 | 待Owner裁决 | Gate N | 产品/架构/安全 | [系统现状](<../架构/系统现状与改造路线.md>) | +| P0 | CRM-20260717-006 | 员工登录后自主修改本人密码,安全与体验能力分期完善 | MVP需求待确认 | Gate N-需求整改 | Owner/产品与项目管理 | [任务目录](<./202607/0717-员工修改密码/导读.md>) | +| P1 | CRM-20260717-003 | 前后端模块化重构并冻结目标技术架构 | 待登记需求 | Gate N | 产品/架构 | [系统现状](<../架构/系统现状与改造路线.md>) | +| P1 | CRM-20260717-004 | 建立自动化测试、质量门禁和最小CI | 待架构方案 | Gate N | 测试/架构 | [系统现状](<../架构/系统现状与改造路线.md>) | +| P1 | CRM-20260717-005 | 加固部署、HTTPS、最小权限、备份和恢复 | 待安全整改 | Gate N | 运维/架构 | [系统现状](<../架构/系统现状与改造路线.md>) | + +## 当前阻塞 + +| 编号 | 阻塞事实 | 影响 | 解除条件 | 责任人 | 是否需Owner | +| --- | --- | --- | --- | --- | --- | +| BLOCK-001 | `data/crm_full_data.json`含账号password字段和业务数据,且已进入Git历史 | 凭据和数据泄露风险 | 备份、账号轮换、停止跟踪、历史治理方案评审通过并执行 | Owner/架构/安全/运维 | 是 | +| BLOCK-002 | 后端权限码未形成统一强制授权,部分通用业务接口只校验登录 | 越权修改和数据泄露风险 | 权限矩阵、后端授权中间件和接口测试通过 | 架构/后端/安全/测试 | 否 | +| BLOCK-003 | 前后端巨型单文件且业务规则前后端重复 | 修改易回归,无法并行开发 | 目标模块边界、迁移顺序和兼容方案Gate R通过 | 架构/前端/后端 | 否 | + +## 决策记录 + +| 时间 | 决策 | 依据 | 决策人 | 影响范围 | 复查条件 | +| --- | --- | --- | --- | --- | --- | +| 2026-07-17 | 采用标准研发模式并建立独立角色会话 | 项目含客户数据、账号权限、服务器部署和高风险技术债 | Owner | 全项目 | 首个真实代码任务闭环后 | +| 2026-07-17 | 移动端、NativeSDK、iOS、Android和APP打包角色N/A | 当前只有Web管理端 | Owner/项目管理员 | 角色矩阵 | 移动端进入产品范围时 | +| 2026-07-17 | 新增业务文档优先使用中文文件名 | Owner明确要求 | Owner | 新增文档 | 工具强制命名除外 | +| 2026-07-17 | 任务目录采用`MMDD-中文任务名`,不沿用参考体系英文slug | Owner中文命名要求与本项目本地化约定 | Owner/项目管理员 | 新建任务目录 | 外部工具强制英文时记录例外 | +| 2026-07-17 | 每个角色会话WIP=1,新协作消息必须先入持久队列,active/有锁时禁止投递 | Owner发现协作消息抢占导致原任务丢失 | Owner/项目管理员 | 全部角色会话和跨角色协作 | 首轮真实多任务串行完成后 | + +## 进展日志 + +### 2026-07-17 + +- 完成:审阅研发体系参考包并完成SalesCRM角色与流程裁剪。 +- 结论:采用标准模式,移动端角色N/A,建立9个职责域。 +- 完成:8个专业角色会话创建与接入回执,8/8均为PASS。 +- 首轮Gate P:`CHANGES_REQUESTED`;发现台账、自测、Gate记录、事件字段和任务目录规则未完全闭环。 +- 完成:COLLAB-20260717-019至026补充独立Gate评审;Gate N PASS,Gate C/D/A任务级N/A确认和文档安全/质量复核均已闭环。 +- 完成:CRM-20260717-001的事件最小字段、中文任务目录规则、台账、自测、验收和本轮结论已同步。 +- 完成:COLLAB-20260717-039至040 Gate P复验PASS,CRM-20260717-001允许标记本地完成。 +- 新增:登记CRM-20260717-007,建立每角色独立队列、唯一执行锁、禁止打断和中断恢复规则。 +- 调度冻结:CRM-20260717-007接入完成前,不向任何active角色会话发送新的CRM-006协作消息。 +- 完成:8/8正式角色接入WIP=1串行调度;中断恢复演练保留并恢复原QUEUE-003,没有任务丢失。 +- 完成:旧架构会话因`Error submitting message`停止新投递;新正式架构会话完成首次接入和第二次后续消息提交,均PASS,QUEUE-009已释放。 +- 新增:Owner明确要求员工登录后可以自主修改密码,已登记`CRM-20260717-006`;当前只进入Gate N,不构成代码或线上变更授权。 +- 首轮Gate N:后端、测试PASS;架构、设计、前端、安全CHANGES_REQUESTED。待Owner确认临时凭据交付、存量账号统一轮换、全会话撤销、停用账号和主管恢复规则。 +- 需求收敛:Owner要求CRM-006先能用、再逐步好用;v0.2-MVP只保留员工本人改密闭环和主管原重置能力,密码哈希、强制轮换、临时凭据、完整会话撤销、限流与审计延期。 +- 下一棒:Owner确认CRM-006产品决策;产品/项目管理员按角色队列检查执行锁和会话状态后顺次派工。 diff --git "a/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/UI\344\270\216\344\272\244\344\272\222\350\256\276\350\256\241.md" "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/UI\344\270\216\344\272\244\344\272\222\350\256\276\350\256\241.md" new file mode 100644 index 0000000..3100323 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/UI\344\270\216\344\272\244\344\272\222\350\256\276\350\256\241.md" @@ -0,0 +1,11 @@ +# UI与交互设计任务队列 + +- Thread ID:`019f6f41-7c33-7200-97b4-5bb4690de8c2` +- WIP上限:`1` +- 执行锁:`IDLE` +- 当前队列项:无 +- 最后检查点:2026-07-17,旧会话投递异常后由新正式会话恢复同一QUEUE-003,PASS并完成回传 + +| 顺序 | 队列编号 | 任务/事件 | 优先级 | 状态 | 入队时间 | 验收 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | `QUEUE-20260717-003` | `CRM-20260717-007 / COLLAB-20260717-041` | P0 | COMPLETED | 2026-07-17 | PASS;验证中断保留原锁并由新正式会话恢复同一项 | diff --git "a/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\344\272\247\345\223\201\344\270\216\351\241\271\347\233\256\347\256\241\347\220\206.md" "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\344\272\247\345\223\201\344\270\216\351\241\271\347\233\256\347\256\241\347\220\206.md" new file mode 100644 index 0000000..0902dc0 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\344\272\247\345\223\201\344\270\216\351\241\271\347\233\256\347\256\241\347\220\206.md" @@ -0,0 +1,12 @@ +# 产品与项目管理任务队列 + +- Thread ID:`019f6ea8-234e-7450-80fd-edc7c8c5438b` +- WIP上限:`1` +- 执行锁:`IDLE` +- 当前队列项:无 +- 最后检查点:2026-07-17,QUEUE-20260717-009完成MVP需求收敛并回传COLLAB-20260717-046 + +| 顺序 | 队列编号 | 任务/事件 | 优先级 | 状态 | 入队时间 | 验收 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | `QUEUE-20260717-001` | `CRM-20260717-007 / COLLAB-20260717-041` | P0 | COMPLETED | 2026-07-17 | PASS;调度算法可执行 | +| 2 | `QUEUE-20260717-009` | `CRM-20260717-006 / COLLAB-20260717-045` | P0 | COMPLETED | 2026-07-17 | PASS;v0.2-MVP范围、10项验收、分期和4项Owner问题已明确 | diff --git "a/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\344\273\243\347\240\201\345\256\241\346\240\270\344\270\216\345\256\211\345\205\250.md" "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\344\273\243\347\240\201\345\256\241\346\240\270\344\270\216\345\256\211\345\205\250.md" new file mode 100644 index 0000000..e045f3b --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\344\273\243\347\240\201\345\256\241\346\240\270\344\270\216\345\256\211\345\205\250.md" @@ -0,0 +1,11 @@ +# 代码审核与安全任务队列 + +- Thread ID:`019f6ea8-b081-7121-9d98-4c9714bf50e1` +- WIP上限:`1` +- 执行锁:`IDLE` +- 当前队列项:无 +- 最后检查点:2026-07-17,QUEUE-20260717-006 PASS并完成回传 + +| 顺序 | 队列编号 | 任务/事件 | 优先级 | 状态 | 入队时间 | 验收 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | `QUEUE-20260717-006` | `CRM-20260717-007 / COLLAB-20260717-041` | P0 | COMPLETED | 2026-07-17 | PASS;Gate C N/A确认,当前无任务丢失风险 | diff --git "a/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\345\211\215\347\253\257\345\274\200\345\217\221.md" "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\345\211\215\347\253\257\345\274\200\345\217\221.md" new file mode 100644 index 0000000..c72ed08 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\345\211\215\347\253\257\345\274\200\345\217\221.md" @@ -0,0 +1,11 @@ +# 前端开发任务队列 + +- Thread ID:`019f6ea8-7abd-7ca2-8b6c-8e3e54cfd8b1` +- WIP上限:`1` +- 执行锁:`IDLE` +- 当前队列项:无 +- 最后检查点:2026-07-17,QUEUE-20260717-004 PASS并完成回传 + +| 顺序 | 队列编号 | 任务/事件 | 优先级 | 状态 | 入队时间 | 验收 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | `QUEUE-20260717-004` | `CRM-20260717-007 / COLLAB-20260717-041` | P0 | COMPLETED | 2026-07-17 | PASS;确认新消息只入队且中断恢复原项 | diff --git "a/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\345\220\216\347\253\257\345\274\200\345\217\221.md" "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\345\220\216\347\253\257\345\274\200\345\217\221.md" new file mode 100644 index 0000000..836fa83 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\345\220\216\347\253\257\345\274\200\345\217\221.md" @@ -0,0 +1,11 @@ +# 后端开发任务队列 + +- Thread ID:`019f6ea8-9633-7a82-9034-789ecc7888da` +- WIP上限:`1` +- 执行锁:`IDLE` +- 当前队列项:无 +- 最后检查点:2026-07-17,QUEUE-20260717-005 PASS并完成回传 + +| 顺序 | 队列编号 | 任务/事件 | 优先级 | 状态 | 入队时间 | 验收 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | `QUEUE-20260717-005` | `CRM-20260717-007 / COLLAB-20260717-041` | P0 | COMPLETED | 2026-07-17 | PASS;确认中断恢复原项且禁止抢占 | diff --git "a/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\345\257\274\350\257\273.md" "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\345\257\274\350\257\273.md" new file mode 100644 index 0000000..8b2604f --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\345\257\274\350\257\273.md" @@ -0,0 +1,25 @@ +# SalesCRM 角色任务队列 + +本目录保存各角色会话的持久执行顺序和执行锁。规则见[角色会话串行调度规范](<../../研发体系/角色会话串行调度规范.md>)。 + +## 事实边界 + +- [统一计划台账](<../统一计划台账.md>)决定项目优先级和活跃任务。 +- [协作事件](<../协作事件.md>)决定跨角色任务授权、范围和验收。 +- 本目录只决定每个角色“现在做哪一个、后面排哪些”,不能自行扩大任务授权。 +- 实际会话状态只作为投递安全检查;即使会话显示idle,只要队列锁未释放也不能投递下一项。 + +## 角色队列 + +| 角色 | 正式Thread ID | 队列文件 | WIP上限 | +| --- | --- | --- | --- | +| 产品与项目管理 | `019f6ea8-234e-7450-80fd-edc7c8c5438b` | [产品与项目管理](<./产品与项目管理.md>) | 1 | +| 架构与数据治理 | `019f6f85-bee8-7f70-8d0a-af638ece0782` | [架构与数据治理](<./架构与数据治理.md>) | 1 | +| UI与交互设计 | `019f6f41-7c33-7200-97b4-5bb4690de8c2` | [UI与交互设计](<./UI与交互设计.md>) | 1 | +| 前端开发 | `019f6ea8-7abd-7ca2-8b6c-8e3e54cfd8b1` | [前端开发](<./前端开发.md>) | 1 | +| 后端开发 | `019f6ea8-9633-7a82-9034-789ecc7888da` | [后端开发](<./后端开发.md>) | 1 | +| 代码审核与安全 | `019f6ea8-b081-7121-9d98-4c9714bf50e1` | [代码审核与安全](<./代码审核与安全.md>) | 1 | +| 测试与质量 | `019f6ea8-ca49-7472-9a9e-24848071c22b` | [测试与质量](<./测试与质量.md>) | 1 | +| 运维与发布 | `019f6ea8-ec46-70d2-9122-0968c7946c23` | [运维与发布](<./运维与发布.md>) | 1 | + +备用或复验会话不拥有独立业务队列,只有Owner或项目管理员明确启用时才临时承接一个冻结任务,且不得与正式角色会话同时处理同一职责域的不同任务。 diff --git "a/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\346\236\266\346\236\204\344\270\216\346\225\260\346\215\256\346\262\273\347\220\206.md" "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\346\236\266\346\236\204\344\270\216\346\225\260\346\215\256\346\262\273\347\220\206.md" new file mode 100644 index 0000000..588e544 --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\346\236\266\346\236\204\344\270\216\346\225\260\346\215\256\346\262\273\347\220\206.md" @@ -0,0 +1,12 @@ +# 架构与数据治理任务队列 + +- Thread ID:`019f6f85-bee8-7f70-8d0a-af638ece0782` +- WIP上限:`1` +- 执行锁:`IDLE` +- 当前队列项:无 +- 最后检查点:2026-07-17,QUEUE-20260717-009两次消息提交均PASS,迁移完成并释放执行锁 + +| 顺序 | 队列编号 | 任务/事件 | 优先级 | 状态 | 入队时间 | 验收 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | `QUEUE-20260717-002` | `CRM-20260717-007 / COLLAB-20260717-041` | P0 | COMPLETED | 2026-07-17 | PASS;状态机、双重检查和中断恢复无冲突 | +| 2 | `QUEUE-20260717-009` | `CRM-20260717-008 / COLLAB-20260717-043` | P0 | COMPLETED | 2026-07-17 | PASS;首次接入与第二次后续提交均正常完成 | diff --git "a/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\346\265\213\350\257\225\344\270\216\350\264\250\351\207\217.md" "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\346\265\213\350\257\225\344\270\216\350\264\250\351\207\217.md" new file mode 100644 index 0000000..ae509fa --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\346\265\213\350\257\225\344\270\216\350\264\250\351\207\217.md" @@ -0,0 +1,11 @@ +# 测试与质量任务队列 + +- Thread ID:`019f6ea8-ca49-7472-9a9e-24848071c22b` +- WIP上限:`1` +- 执行锁:`IDLE` +- 当前队列项:无 +- 最后检查点:2026-07-17,QUEUE-20260717-007 PASS并完成回传 + +| 顺序 | 队列编号 | 任务/事件 | 优先级 | 状态 | 入队时间 | 验收 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | `QUEUE-20260717-007` | `CRM-20260717-007 / COLLAB-20260717-041` | P0 | COMPLETED | 2026-07-17 | PASS;7项标准可验证,Gate A N/A确认 | diff --git "a/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\350\277\220\347\273\264\344\270\216\345\217\221\345\270\203.md" "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\350\277\220\347\273\264\344\270\216\345\217\221\345\270\203.md" new file mode 100644 index 0000000..4ca5a6d --- /dev/null +++ "b/docs/\344\273\273\345\212\241/\350\247\222\350\211\262\351\230\237\345\210\227/\350\277\220\347\273\264\344\270\216\345\217\221\345\270\203.md" @@ -0,0 +1,11 @@ +# 运维与发布任务队列 + +- Thread ID:`019f6ea8-ec46-70d2-9122-0968c7946c23` +- WIP上限:`1` +- 执行锁:`IDLE` +- 当前队列项:无 +- 最后检查点:2026-07-17,QUEUE-20260717-008 PASS并完成回传 + +| 顺序 | 队列编号 | 任务/事件 | 优先级 | 状态 | 入队时间 | 验收 | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | `QUEUE-20260717-008` | `CRM-20260717-007 / COLLAB-20260717-041` | P0 | COMPLETED | 2026-07-17 | PASS;确认部署步骤不中断且恢复原项 | diff --git "a/docs/\346\236\266\346\236\204/\347\263\273\347\273\237\347\216\260\347\212\266\344\270\216\346\224\271\351\200\240\350\267\257\347\272\277.md" "b/docs/\346\236\266\346\236\204/\347\263\273\347\273\237\347\216\260\347\212\266\344\270\216\346\224\271\351\200\240\350\267\257\347\272\277.md" new file mode 100644 index 0000000..c33b447 --- /dev/null +++ "b/docs/\346\236\266\346\236\204/\347\263\273\347\273\237\347\216\260\347\212\266\344\270\216\346\224\271\351\200\240\350\267\257\347\272\277.md" @@ -0,0 +1,98 @@ +# SalesCRM 系统现状与改造路线 + +- 事实基线:commit `6e62407` +- 记录日期:2026-07-17 +- 本文用途:记录当前事实和改造优先级,不代表目标方案已经通过Gate R + +## 当前架构事实 + +```text +浏览器 + └─ outputs/sales_crm_full_demo.html + ├─ 内联CSS + ├─ 约1800行内联JavaScript + ├─ fetch /api/* + └─ 后端失败时localStorage本地模拟 + ↓ +work/crm_full_server.js + ├─ 原生Node.js http/fs/path + ├─ 静态文件服务 + ├─ 登录、权限、业务规则和22个API路由 + └─ 整体读写data/crm_full_data.json + ↓ +Nginx :80 → Node.js :8090 → JSON文件 +``` + +## 主要问题 + +### P0 安全和数据 + +- `data/crm_full_data.json`包含用户password字段和业务数据,且已进入Git历史。 +- 密码明文保存;Token是`用户名:密码`的Base64,可逆、无有效期、不可独立撤销。 +- 权限码大多用于前端展示,通用业务增删改接口缺少统一后端授权。 +- 前端将业务输入直接拼接到`innerHTML`,存在存储型XSS风险。 +- 导出接口允许Token进入查询字符串,可能进入访问日志。 + +### P1 可维护性和可靠性 + +- 前端2361行单HTML、后端1063行单JS,路由、业务、数据访问和鉴权混合。 +- 前端`localApi`重复实现后端业务规则,长期必然产生行为漂移。 +- JSON整体读写没有正式数据库约束、事务、索引、迁移和多实例能力。 +- 全局actions和customer.actions重复保存同一操作记录。 +- 没有自动化测试、lint、格式化、接口契约和CI。 + +### P1 部署 + +- systemd以root运行Node服务。 +- Nginx当前只有HTTP,Node监听`0.0.0.0`。 +- 备份是手工复制JSON,没有定时、保留、异地和恢复验证。 +- 运行数据与源码同仓,更新代码容易与运行数据冲突。 + +## 改造原则 + +1. 先封堵凭据、数据和越权风险,再做功能扩张。 +2. 先冻结模块边界和迁移顺序,再拆文件;不做机械切文件。 +3. 新旧架构过渡期间保持单一业务事实源,逐步删除前端localApi重复逻辑。 +4. 任何数据迁移都要有备份、校验、回滚和脱敏测试样本。 +5. 每一阶段必须可独立运行和回退,避免一次性重写。 + +## 候选目标边界 + +以下只用于Gate R讨论,尚未冻结具体框架: + +```text +前端应用 + ├─ 页面与路由 + ├─ 业务组件 + ├─ API客户端 + ├─ 状态与权限展示 + └─ 通用安全输出编码 + +后端应用 + ├─ routes/controllers + ├─ services/domain + ├─ repositories + ├─ auth/permission middleware + ├─ validation/error handling + └─ audit/logging + +数据层 + ├─ 正式关系数据库 + ├─ migrations/seeds + ├─ runtime data与Git隔离 + └─ backup/restore验证 + +共享契约 + └─ API schema、权限码、枚举、错误码和测试样本 +``` + +## 建议里程碑 + +| 阶段 | 内容 | 完成标准 | +| --- | --- | --- | +| 0 风险封堵 | 密码轮换、停止跟踪运行数据、Git历史治理方案、最小权限补丁 | P0 finding关闭 | +| 1 架构冻结 | 模块边界、技术选型、API/数据/迁移/回滚设计 | Gate N/R PASS | +| 2 后端基础 | 分层、数据库、鉴权授权、验证和审计 | 后端自动测试与Gate C/A PASS | +| 3 前端基础 | 工程化、组件/API/状态拆分、XSS治理 | 关键页面回归PASS | +| 4 业务迁移 | 客户→订单→生产/库存→物流/财务逐模块迁移 | 每模块可独立回滚 | +| 5 发布加固 | HTTPS、非root、健康检查、备份恢复、CI/CD | 发布演练和Gate D/A/P PASS | diff --git "a/docs/\347\216\257\345\242\203/\345\257\274\350\257\273.md" "b/docs/\347\216\257\345\242\203/\345\257\274\350\257\273.md" new file mode 100644 index 0000000..5ffdcc9 --- /dev/null +++ "b/docs/\347\216\257\345\242\203/\345\257\274\350\257\273.md" @@ -0,0 +1,5 @@ +# 环境文档导读 + +- [运行环境说明](<./运行环境说明.md>):当前本地和服务器运行入口、端口及非敏感配置。 +- 敏感凭据位于Git忽略的`docs/local/`,本目录不得复制其值。 +- 详细阿里云部署步骤参见[阿里云Linux部署执行文档](<../aliyun_linux_deployment_runbook.md>),其中部分内容将在P1部署加固任务中修订。 diff --git "a/docs/\347\216\257\345\242\203/\350\277\220\350\241\214\347\216\257\345\242\203\350\257\264\346\230\216.md" "b/docs/\347\216\257\345\242\203/\350\277\220\350\241\214\347\216\257\345\242\203\350\257\264\346\230\216.md" new file mode 100644 index 0000000..ab0929a --- /dev/null +++ "b/docs/\347\216\257\345\242\203/\350\277\220\350\241\214\347\216\257\345\242\203\350\257\264\346\230\216.md" @@ -0,0 +1,35 @@ +# SalesCRM 运行环境说明 + +## 当前本地环境 + +- 操作系统:Windows +- 项目目录:`E:\code\SalesCRM` +- Node.js要求:`>=18` +- 启动命令:`npm start`或`start_crm.bat` +- 默认地址:`http://127.0.0.1:8090/` +- 当前数据:`data/crm_full_data.json` + +## 当前Linux部署 + +- 目录:`/opt/sales-crm` +- Node.js服务:systemd `sales-crm.service` +- Node端口:`8090` +- Nginx入口:`80` +- 当前风险:服务用户为root、缺HTTPS、Node监听所有网卡、备份和恢复能力不足。 + +## 环境约束 + +- 正式文档不记录服务器密码、数据库密码、Token和私钥。 +- 8090不应直接暴露公网;目标状态由Nginx在80/443反向代理。 +- 正式环境必须使用独立非root服务账号和最小文件权限。 +- dev/test/staging/production数据与凭据必须隔离。 +- 数据迁移前必须建立备份、校验和恢复演练。 + +## 目标环境矩阵 + +| 环境 | 用途 | 数据 | 发布要求 | +| --- | --- | --- | --- | +| local | 开发自测 | 脱敏或生成样本 | 可重建、不可依赖生产数据 | +| test | 独立Gate A | 专用测试数据 | 版本可识别、可重置 | +| staging | 上线演练 | 脱敏近似数据 | 与生产部署方式一致 | +| production | 正式业务 | 受控真实数据 | HTTPS、最小权限、备份恢复和审计 | diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\345\215\217\344\275\234\350\247\204\350\214\203.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\345\215\217\344\275\234\350\247\204\350\214\203.md" new file mode 100644 index 0000000..51f06ca --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\345\215\217\344\275\234\350\247\204\350\214\203.md" @@ -0,0 +1,53 @@ +# SalesCRM 协作规范 + +- 版本:v1.0-试运行 +- 维护角色:产品与项目管理 +- 协作事实源:[协作事件](<../任务/协作事件.md>) +- 执行顺序事实源:[角色任务队列](<../任务/角色队列/导读.md>) + +## 何时必须建事件 + +- 一个角色需要另一个角色执行评审、实现、测试、部署或裁决。 +- 任务因缺范围、环境、权限、数据、设计或决策而阻塞。 +- 发生 Gate N/R/C/D/A/P 的请求和结果回传。 +- 发生部署、回滚、数据迁移、Git 历史处理或生产风险操作。 + +同一角色内部的小步骤不重复建事件;纯说明且没有责任转移的聊天不建事件。 + +建立事件不等于已向目标会话投递。事件负责授权和留痕,队列负责顺序,消息只负责在安全时唤醒队首任务。 + +## 编号与状态 + +- 事件编号:`COLLAB-YYYYMMDD-NNN` +- 状态:`PENDING / IN_PROGRESS / PASS / CHANGES_REQUESTED / BLOCKED / CLOSED` +- 结论:`PASS / CHANGES_REQUESTED / BLOCKED` + +## 最小字段 + +每个事件必须包含:事件编号、类型、发起时间、发起角色、目标角色、上游事件、结果事件、当前 Gate、目标、精确输入、范围、不做项、验收标准、敏感边界、当前状态和下一责任人。 + +## 成对闭环 + +1. 角色 A 建立请求事件,责任转给角色 B。 +2. 角色 B 回写接手范围和边界,状态改为 IN_PROGRESS。 +3. B 完成后在原事件写实际动作、证据、未完成项,并建立结果事件。 +4. A 或下一验收角色复核结果事件:PASS 后关闭;需修改则建立新整改结果,不覆盖旧 finding;阻塞则写解除条件。 +5. Codex 会话消息只负责通知,事件文件仍是权威记录。 + +## 串行入队与消息投递 + +1. 创建请求事件后,先在目标角色的队列文件追加`QUEUED`项。 +2. 若目标队列有`RUNNING/WAITING`,不发送任何新消息;请求事件保持待处理并记录队列编号。 +3. 若实际会话状态为`active`,即使队列显示空闲也不得发送,必须先对账并补写当前执行锁。 +4. 仅当队列无锁、该项位于队首,且会话为idle或notLoaded且无进行中turn时,调度器把它改为`RUNNING`后发送一次。 +5. 在当前项最终回传并释放锁前,禁止向同一会话继续发送提醒、补充材料或其他协作事件;补充材料追加到当前任务事实源或队列备注,由角色在安全检查点读取。 +6. 会话中断后只允许发送“恢复当前队列项”,禁止直接发送下一个事件。 +7. 默认FIFO。优先级变化只调整尚未开始的`QUEUED`项;`RUNNING/WAITING`项只能由Owner明确暂停或取消。 + +## 回执要求 + +角色回执至少说明:已读取的版本、自己的职责/输入/输出/签字权、处理范围、禁止越级、当前任务接入点、阻塞和下一步。仅回复“收到”不构成有效回执。 + +## 敏感边界 + +协作事件不得包含密码、Token、私钥、完整日志、完整请求响应、真实客户明细或可直接识别个人的信息。只记录完成协作所需的脱敏摘要和受控材料位置。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\345\257\274\350\257\273.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\345\257\274\350\257\273.md" new file mode 100644 index 0000000..e2100e3 --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\345\257\274\350\257\273.md" @@ -0,0 +1,44 @@ +# SalesCRM 研发体系导读 + +- 采用模式:标准模式 +- 当前版本:v1.0-试运行 +- 生效时间:2026-07-17 +- 适用对象:Owner、产品、设计、架构、开发、审核、安全、测试和运维角色 + +## 为什么采用标准模式 + +SalesCRM 虽然是单仓项目,但包含客户和账号数据、多人权限、服务器部署及后续数据库迁移;当前还存在凭据入库、权限后端未兜底和单文件架构等高风险问题,因此不适合只使用轻量流程。 + +## 核心文档 + +| 文档 | 用途 | +| --- | --- | +| [采用与裁剪记录](<./采用与裁剪记录.md>) | 说明参考体系如何适配到 SalesCRM | +| [开发迭代流程](<./开发迭代流程.md>) | 唯一阶段和 Gate 入口 | +| [角色协作宪章](<./角色协作宪章.md>) | 定义职责、签字权和禁止越级 | +| [协作规范](<./协作规范.md>) | 定义跨角色事件、回执和阻塞处理 | +| [角色索引](<./角色/角色索引.md>) | 各角色稳定职责卡 | +| [统一计划台账](<../任务/统一计划台账.md>) | 当前任务、优先级和下一责任人 | +| [协作事件](<../任务/协作事件.md>) | 跨角色请求和结果事实源 | + +## SalesCRM Gate + +```text +Owner目标 + ↓ +产品/PMO登记 → Gate N需求评审 → Gate R实施准备 + ↓ + 前端/后端实现与自测 + ↓ + Gate C独立代码与安全审核 + ↓ + 运维部署 + ↓ + Gate D开发运行态验证 + ↓ + Gate A独立测试 + ↓ + Gate P产品业务验收 +``` + +移动端、NativeSDK、iOS、Android 和 APP 打包 Gate 在当前项目中均不适用。未来新增客户端时,必须通过正式体系变更重新激活。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\345\274\200\345\217\221\350\277\255\344\273\243\346\265\201\347\250\213.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\345\274\200\345\217\221\350\277\255\344\273\243\346\265\201\347\250\213.md" new file mode 100644 index 0000000..7f53cbf --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\345\274\200\345\217\221\350\277\255\344\273\243\346\265\201\347\250\213.md" @@ -0,0 +1,95 @@ +# SalesCRM 开发迭代流程 + +- 版本:v1.0-试运行 +- 生效时间:2026-07-17 +- 维护角色:产品与项目管理 +- 适用范围:所有会修改代码、配置、数据、部署或正式文档的工作 + +本文档是 SalesCRM 唯一开发流程入口。协作事件只负责责任转移,不构成另一套流程。 + +## 任务分类 + +| 类型 | 示例 | 流程强度 | +| --- | --- | --- | +| 只读事项 | 解释、代码审查、状态查询 | 不建完整任务目录,但结论必须有证据 | +| 小需求 | 单点文案、明确样式、低风险脚本修正 | 建简洁任务目录,执行适用 Gate | +| 标准需求 | 前后端功能、接口、权限、部署改动 | 完整执行 N/R/C/D/A/P | +| 高风险需求 | 鉴权、数据迁移、Git 历史清理、批量数据、生产配置 | 完整流程,增加安全/数据/回滚审查 | + +## 任务编号和目录 + +- 编号:`CRM-YYYYMMDD-NNN` +- 目录:`docs/任务/YYYYMM/MMDD-中文任务名/` +- 文件:`导读.md`、`00-需求与验收.md`、`01-计划改动清单.md`、`02-实现与自测记录.md`、`03-验收记录.md`、`04-本轮结论.md` + +任务目录和正式文档优先使用简短中文名称,这是本项目根据 Owner 命名要求做出的本地化规则。仅当外部工具、框架或协议强制要求英文名称时使用英文,并在任务记录中说明原因。 + +## 会话调度前置门 + +任何阶段向角色会话派工前,必须执行[角色会话串行调度规范](<./角色会话串行调度规范.md>):先登记协作事件,再写入目标[角色任务队列](<../任务/角色队列/导读.md>)。只有队首任务、队列无执行锁且实际会话为空闲安全状态时才允许投递;安全状态包括idle,或notLoaded且无进行中turn。 + +- 每个角色会话WIP为1。 +- 会话active或队列为RUNNING/WAITING时,只允许排队,不允许发送新任务。 +- 当前任务未回传、未保存检查点或未释放锁时,下一任务不得开始。 +- 会话异常中断不改变任务顺序,恢复时继续原队列项。 +- Owner显式抢占也必须先把原任务保存为PAUSED/CANCELLED,禁止静默丢弃。 + +## 标准阶段与 Gate + +| 阶段 | 主责 | 必须输出 | 通过条件 | +| --- | --- | --- | --- | +| 0 登记 | 产品/PMO | 任务编号、目录、优先级、角色矩阵 | 目标、范围、下一棒明确 | +| 1 需求 | 产品/PMO | 需求、范围、不做项、验收标准 | 文档可评审 | +| 2 Gate N | 架构、相关开发、测试 | 独立需求评审结论 | 全部适用角色 PASS | +| 3 Gate R | 架构、开发、测试、运维 | 架构/接口/数据/测试/回滚方案 | 实施材料均 PASS | +| 4 实现 | 前端/后端开发 | 代码、文档、自测、精确基线 | 自测完成或明确阻塞 | +| 5 Gate C | 代码审核与安全 | 对精确 commit/diff 的审查 | finding 关闭并 PASS | +| 6 部署 | 运维发布 | 部署、备份、机械检查、回滚入口 | 部署结果已回传 | +| 7 Gate D | 对应开发 | 目标环境版本和关键链路验证 | 开发确认运行态 PASS | +| 8 Gate A | 测试与质量 | API、权限、数据、浏览器回归 | 独立测试 PASS | +| 9 Gate P | 产品/PMO | 对照冻结需求的业务验收 | 产品结论 PASS | +| Z 关闭 | 产品/PMO | 本轮结论、未决项、台账回写 | 责任和证据闭环 | + +## Gate 规则 + +- Gate N 未通过,不冻结技术方案。 +- Gate R 未通过,不开始大范围业务代码实现。 +- Gate C 未通过,不推送到发布链路;基线变化后原结论失效。 +- Gate D 未通过,不进入正式 Gate A。 +- Gate A 未通过,不进入 Gate P。 +- Gate P 未通过,不得将需求标记为完成或正式上线。 +- 纯文档任务可以把 C/D/A 标记为 N/A,但必须写原因和审核人。 + +## 角色矩阵 + +每个任务必须明确以下角色是 `适用` 还是 `N/A`:Owner、产品/PMO、架构与数据、设计、前端、后端、代码审核与安全、测试质量、运维发布。N/A 必须写原因和确认人;影响面扩大时生成新版本并重新评审。 + +## 实现和自测 + +开发必须: + +1. 只改冻结范围内文件。 +2. 记录实际改动与计划差异。 +3. 对新增或修复逻辑补自动化测试;当前无法测试时写明原因和补测责任。 +4. 前端至少覆盖语法/构建、关键交互、错误状态和 XSS 转义。 +5. 后端至少覆盖语法/启动、鉴权、权限、参数边界、持久化和异常。 +6. 数据变更必须有备份、迁移、验证和回滚方案。 +7. 冻结可复核 commit 或不可漂移 diff 后再发起 Gate C。 + +## 发布和回滚 + +进入部署前必须具备:Gate C PASS、精确 commit、改动清单、环境和配置说明、数据迁移/回滚、验证入口。运维只执行冻结清单,不临场改业务代码。部署后由开发确认实际运行版本,再由测试独立验收。 + +## 问题返工 + +| 问题类型 | 返回位置 | +| --- | --- | +| 需求或验收错误 | Gate N | +| 架构、接口、数据或安全设计错误 | Gate R | +| 实现、测试覆盖或代码质量问题 | 实现阶段并重走 C/D/A/P | +| 部署、配置、版本或环境问题 | 部署阶段并重走 D/A/P | +| 测试样本或环境不合格 | 修复材料后重走受影响测试 | + +## 紧急变更 + +P0 故障允许压缩会议和等待时间,但必须保留任务编号、最小需求、独立 Gate C、备份/回滚、部署验证和 Gate A;事后在同一任务闭环内补齐文档和 Owner 风险裁决。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\345\215\217\344\275\234\344\272\213\344\273\266\346\250\241\346\235\277.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\345\215\217\344\275\234\344\272\213\344\273\266\346\250\241\346\235\277.md" new file mode 100644 index 0000000..ae2a34a --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\345\215\217\344\275\234\344\272\213\344\273\266\346\250\241\346\235\277.md" @@ -0,0 +1,40 @@ +# 协作事件模板 + +## COLLAB-YYYYMMDD-NNN | <标题> + +- 事件类型:`request/result/review/blocker/decision` +- 发起时间:`<TIME>` +- 发起角色:`<ROLE>` +- 目标角色:`<ROLE>` +- 上游事件:`<EVENT/无>` +- 结果事件:`<EVENT/待创建>` +- 当前Gate:`<GATE/非Gate事项>` +- 状态:`PENDING/IN_PROGRESS/PASS/CHANGES_REQUESTED/BLOCKED/CLOSED` + +### 目标 + +<只要求目标角色完成什么> + +### 精确输入 + +- 文件/版本/commit:<INPUTS> +- 已有结论:<FACTS> + +### 范围 + +- 做:<IN_SCOPE> +- 不做:<OUT_OF_SCOPE> + +### 验收标准 + +1. <CRITERION> +2. 回写实际动作、证据、未完成项和下一责任人。 +3. 建立非空结果事件并双向引用。 + +### 结果回写 + +- 结论:`PASS/CHANGES_REQUESTED/BLOCKED` +- 实际处理:<ACTIONS> +- 证据:<EVIDENCE> +- 未完成项:<OPEN_ITEMS/NONE> +- 下一责任人:<ROLE> diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\345\217\221\345\270\203\351\252\214\346\224\266\346\270\205\345\215\225\346\250\241\346\235\277.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\345\217\221\345\270\203\351\252\214\346\224\266\346\270\205\345\215\225\346\250\241\346\235\277.md" new file mode 100644 index 0000000..2ea3c5b --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\345\217\221\345\270\203\351\252\214\346\224\266\346\270\205\345\215\225\346\250\241\346\235\277.md" @@ -0,0 +1,31 @@ +# 发布验收清单 + +## 冻结输入 + +- 需求/版本:<VERSION> +- 分支/commit:<BASELINE> +- 构建物或部署目录:<ARTIFACT> +- 配置/迁移:<FILES> +- 回滚基线:<ROLLBACK> + +## 发布前 + +- [ ] Gate C已PASS且基线未漂移。 +- [ ] 部署和回滚顺序已冻结。 +- [ ] 数据迁移、备份和恢复验证已审查。 +- [ ] 不包含凭据、运行数据、测试后门和错误环境配置。 +- [ ] 最小启动和核心链路自测已完成。 + +## 执行动作 + +| 顺序 | 角色 | 动作 | 成功判据 | 失败动作 | +| --- | --- | --- | --- | --- | +| 1 | `<ROLE>` | `<ACTION>` | `<CRITERIA>` | `<ROLLBACK/STOP>` | + +## 发布后 + +- [ ] 运维已回写实际版本和机械结果。 +- [ ] 开发已完成Gate D。 +- [ ] 测试已完成Gate A。 +- [ ] 产品已完成Gate P或保持No-Go。 +- [ ] HTTPS、最小权限、备份和监控符合目标环境要求。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225\346\250\241\346\235\277.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225\346\250\241\346\235\277.md" new file mode 100644 index 0000000..c96955b --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\345\256\236\347\216\260\344\270\216\350\207\252\346\265\213\350\256\260\345\275\225\346\250\241\346\235\277.md" @@ -0,0 +1,25 @@ +# 实现与自测记录 + +## 精确基线 + +- 分支/commit:<BASELINE> +- 实际改动文件:<FILES> +- 与计划差异:<DIFF/NONE> + +## 自测 + +| 命令/场景 | 结果 | 证据摘要 | +| --- | --- | --- | +| `<TEST>` | `PASS/FAIL/未执行` | `<SUMMARY>` | + +## 安全与数据自查 + +- 敏感信息:<RESULT> +- 权限边界:<RESULT> +- 数据迁移/回滚:<RESULT/N/A> + +## Gate C输入 + +- 审核基线:<COMMIT/DIFF> +- 自测未覆盖项:<ITEMS/NONE> +- 审核事件:<EVENT> diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\346\224\271\345\212\250\346\270\205\345\215\225\346\250\241\346\235\277.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\346\224\271\345\212\250\346\270\205\345\215\225\346\250\241\346\235\277.md" new file mode 100644 index 0000000..2ba97d2 --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\346\224\271\345\212\250\346\270\205\345\215\225\346\250\241\346\235\277.md" @@ -0,0 +1,24 @@ +# 改动清单 + +- 任务编号:`CRM-YYYYMMDD-NNN` +- 交付版本:`<COMMIT/VERSION>` +- 维护角色:`<DEVELOPER>` + +## 代码与文档 + +| 文件/目录 | 改动摘要 | commit | 风险 | +| --- | --- | --- | --- | +| `<PATH>` | `<CHANGE>` | `<COMMIT>` | `<RISK>` | + +## 配置、数据和运行态 + +| 类型 | 环境 | 文件/键/脚本 | 顺序 | 验证 | 回滚 | +| --- | --- | --- | --- | --- | --- | +| `<CONFIG/DATA/SERVICE>` | `<ENV>` | `<ITEM>` | `<ORDER>` | `<CHECK>` | `<ROLLBACK>` | + +## 验证与未决项 + +- 自测:<SUMMARY> +- Gate C:<STATUS/EVENT> +- 未决项:<ITEMS/NONE> +- 下一责任人:<ROLE> diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\346\234\254\350\275\256\347\273\223\350\256\272\346\250\241\346\235\277.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\346\234\254\350\275\256\347\273\223\350\256\272\346\250\241\346\235\277.md" new file mode 100644 index 0000000..0065559 --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\346\234\254\350\275\256\347\273\223\350\256\272\346\250\241\346\235\277.md" @@ -0,0 +1,12 @@ +# 本轮结论 + +- 交付结果:<DELIVERED> +- 用户可见变化:<USER_IMPACT> +- 未完成:<OPEN_ITEMS/NONE> +- 当前Gate:<GATE> +- Go/No-Go:<STATUS> +- 回滚入口:<ROLLBACK> +- 下一责任人:<ROLE + ACTION> +- 统一台账回写:<LINK> + +本结论不得把作者自测、部署成功或单一测试结果写成整体Gate通过。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225\346\250\241\346\235\277.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225\346\250\241\346\235\277.md" new file mode 100644 index 0000000..ba056fc --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\350\256\241\345\210\222\346\224\271\345\212\250\346\270\205\345\215\225\346\250\241\346\235\277.md" @@ -0,0 +1,22 @@ +# 计划改动清单 + +## 方案摘要 + +<为什么该方案满足需求,为什么适合当前架构阶段> + +## 预计改动 + +| 文件/模块 | 计划改动 | 责任角色 | 风险 | 验证 | +| --- | --- | --- | --- | --- | +| `<PATH>` | `<CHANGE>` | `<ROLE>` | `<RISK>` | `<TEST>` | + +## 配置、数据与部署 + +- 配置:<CHANGES/NONE> +- 数据迁移:<CHANGES/NONE> +- 部署:<ACTIONS/NONE> +- 回滚:<PLAN> + +## 不改动 + +- <PROTECTED_SCOPE> diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\351\200\202\347\224\250\350\247\222\350\211\262\347\237\251\351\230\265\346\250\241\346\235\277.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\351\200\202\347\224\250\350\247\222\350\211\262\347\237\251\351\230\265\346\250\241\346\235\277.md" new file mode 100644 index 0000000..9cd0c69 --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\351\200\202\347\224\250\350\247\222\350\211\262\347\237\251\351\230\265\346\250\241\346\235\277.md" @@ -0,0 +1,19 @@ +# 适用角色矩阵 + +- 任务编号:`CRM-YYYYMMDD-NNN` +- 需求版本:`<VERSION>` +- 维护角色:产品与项目管理 + +| 角色 | 适用性 | 参与Gate | 输入 | 输出 | N/A原因 | 确认人 | +| --- | --- | --- | --- | --- | --- | --- | +| Owner | 适用/按需 | 方向/风险 | 选项和风险 | 裁决 | - | Owner | +| 产品与项目管理 | 适用 | N/A汇总/P | 用户目标 | 需求、派工、验收 | - | Owner | +| 架构与数据治理 | `<YES/NO>` | N/R | `<INPUT>` | `<OUTPUT>` | `<REASON>` | `<NAME>` | +| UI与交互设计 | `<YES/NO>` | N/R/设计验收 | `<INPUT>` | `<OUTPUT>` | `<REASON>` | `<NAME>` | +| 前端开发 | `<YES/NO>` | N/R/D | `<INPUT>` | `<OUTPUT>` | `<REASON>` | `<NAME>` | +| 后端开发 | `<YES/NO>` | N/R/D | `<INPUT>` | `<OUTPUT>` | `<REASON>` | `<NAME>` | +| 代码审核与安全 | `<YES/NO>` | C | 精确基线 | 审查结论 | `<REASON>` | `<NAME>` | +| 测试与质量 | `<YES/NO>` | N/R/A | `<INPUT>` | `<OUTPUT>` | `<REASON>` | `<NAME>` | +| 运维与发布 | `<YES/NO>` | R/部署 | `<INPUT>` | `<OUTPUT>` | `<REASON>` | `<NAME>` | + +任何N/A都必须写原因和确认人;影响面变化时生成新版本并重新确认。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266\346\250\241\346\235\277.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266\346\250\241\346\235\277.md" new file mode 100644 index 0000000..afec99f --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\351\234\200\346\261\202\344\270\216\351\252\214\346\224\266\346\250\241\346\235\277.md" @@ -0,0 +1,32 @@ +# 需求与验收 + +- 任务编号:`CRM-YYYYMMDD-NNN` +- 状态:讨论中/待评审/已冻结 +- 维护角色:产品与项目管理 + +## 目标 + +<用户可感知结果> + +## 当前起点 + +- 当前版本/行为:<BASELINE> +- 已知问题:<PROBLEM> +- 关键假设:<ASSUMPTIONS> + +## 范围 + +- 做:<IN_SCOPE> +- 不做:<OUT_OF_SCOPE> + +## 验收标准 + +1. 功能:<CRITERIA> +2. 边界与权限:<CRITERIA> +3. 数据与安全:<CRITERIA> +4. 性能与可靠性:<CRITERIA> +5. 产物与回滚:<CRITERIA> + +## 适用角色 + +引用本任务冻结的适用角色矩阵。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\351\252\214\346\224\266\350\256\260\345\275\225\346\250\241\346\235\277.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\351\252\214\346\224\266\350\256\260\345\275\225\346\250\241\346\235\277.md" new file mode 100644 index 0000000..cf2643e --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\346\250\241\346\235\277/\351\252\214\346\224\266\350\256\260\345\275\225\346\250\241\346\235\277.md" @@ -0,0 +1,16 @@ +# 验收记录 + +| Gate | 角色 | 精确版本/环境 | 结论 | 事件/证据 | +| --- | --- | --- | --- | --- | +| N | `<ROLE>` | `<VERSION>` | `<STATUS>` | `<LINK>` | +| R | `<ROLE>` | `<VERSION>` | `<STATUS>` | `<LINK>` | +| C | 代码审核与安全 | `<COMMIT>` | `<STATUS>` | `<LINK>` | +| D | `<DEVELOPER>` | `<ENV/VERSION>` | `<STATUS>` | `<LINK>` | +| A | 测试与质量 | `<ENV/VERSION>` | `<STATUS>` | `<LINK>` | +| P | 产品与项目管理 | `<VERSION>` | `<STATUS>` | `<LINK>` | + +## 未通过项 + +| 问题 | 分类 | 返回阶段 | 解除条件 | 责任人 | +| --- | --- | --- | --- | --- | +| `<ISSUE>` | `<需求/设计/实现/环境/测试>` | `<GATE>` | `<CONDITION>` | `<ROLE>` | diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/01-\351\241\271\347\233\256Owner.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/01-\351\241\271\347\233\256Owner.md" new file mode 100644 index 0000000..caeb56c --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/01-\351\241\271\347\233\256Owner.md" @@ -0,0 +1,36 @@ +# 项目 Owner 职责卡 + +## 定位 + +SalesCRM 最终方向、优先级和风险裁决者,不承担日常实现和专业 Gate。 + +## 职责 + +- 明确用户价值、范围、成本、时间约束和不可接受结果。 +- 决定重大技术/产品取舍、正式上线 Go/No-Go 和风险豁免。 +- 对需要本人体验或审批的用户可见产物给出反馈。 + +## 输入与输出 + +- 输入:产品/PMO整理的选项、影响、成本、证据和建议。 +- 输出:明确选择、优先级、风险接受/拒绝和最终方向反馈。 + +## 权限与 Gate + +- 可签:方向、重大范围、优先级、正式风险豁免和发布 Go/No-Go。 +- 不可签:Gate N/R/C/D/A 的专业结论。 + +## 禁止越级 + +- 不用一句“可以”替代需要留痕的重大风险裁决。 +- 不要求角色在缺备份、回滚或独立审核时强行上线。 + +## 交接 + +产品/PMO只在需要真实方向、范围、时间或风险选择时升级;Owner裁决后由产品/PMO回写统一计划台账和任务事实源。 + +## 串行调度权限 + +- Owner是唯一可以明确批准暂停、取消或替换正在执行任务的角色。 +- 普通优先级调整只重排尚未开始的队列项,不自动抢占`RUNNING/WAITING`任务。 +- 要求抢占时必须同时要求保存原任务检查点、未完成项和恢复入口,不能让原任务静默丢失。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/02-\344\272\247\345\223\201\344\270\216\351\241\271\347\233\256\347\256\241\347\220\206.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/02-\344\272\247\345\223\201\344\270\216\351\241\271\347\233\256\347\256\241\347\220\206.md" new file mode 100644 index 0000000..c227a8e --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/02-\344\272\247\345\223\201\344\270\216\351\241\271\347\233\256\347\256\241\347\220\206.md" @@ -0,0 +1,44 @@ +# 产品与项目管理职责卡 + +## 定位 + +统一需求入口和研发推进协调者,回答“为什么做、做什么、何时算完成”。产品经理和 PMO 在当前小团队中合并,但产品文档仍需独立评审。 + +## 职责 + +- 澄清场景、价值、范围、不做项、业务规则和验收标准。 +- 分配任务编号,维护统一计划台账、需求目录、角色矩阵和唯一下一棒。 +- 组织 Gate N/R,汇总适用 Gate,执行 Gate P。 +- 创建边界清楚的协作事件,跟踪回执、阻塞和 Owner 决策。 +- 维护各角色任务队列的FIFO顺序,保证每个角色WIP为1,不把新协作事件直接推送给忙碌会话。 +- 保证需求、事件、代码基线、测试、部署和结论可追溯。 + +## 输入与输出 + +- 输入:Owner目标、用户反馈、现状证据和各角色标准回执。 +- 输出:需求与验收、优先级、角色矩阵、协作事件、Gate汇总、本轮结论。 + +## 权限与 Gate + +- 可签:需求版本、Gate N/A 汇总、Gate P、任务关闭。 +- 不可签:架构技术结论、Gate C、Gate D、Gate A专业测试或部署结果。 + +## 禁止越级 + +- 不写或调试业务代码,不修改数据和运行配置。 +- 不执行部署、日志归因或专业测试。 +- 不把自己编写需求的自查当作 Gate N PASS。 +- 不用进度催促、补充消息或新事件打断角色当前锁定任务;只允许入队等待。 + +## 串行调度职责 + +- 专属队列:[产品与项目管理任务队列](<../../任务/角色队列/产品与项目管理.md>)。 +- 本角色会话及所有正式角色会话的WIP上限为1。 +- 创建事件后先入目标角色队列;只有队首、无锁且会话idle时才通知项目管理员投递。 +- 角色回传后先更新结果和释放执行锁,再推进该角色下一项。 +- 遇到Owner明确抢占时,先保存原任务检查点并标记`PAUSED/CANCELLED`。 + +## 当前首要关注 + +- P0 安全与数据治理任务的范围和 Owner 决策。 +- 架构重构一期的验收口径和里程碑,防止重构无限扩围。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/03-\346\236\266\346\236\204\344\270\216\346\225\260\346\215\256\346\262\273\347\220\206.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/03-\346\236\266\346\236\204\344\270\216\346\225\260\346\215\256\346\262\273\347\220\206.md" new file mode 100644 index 0000000..c27b05f --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/03-\346\236\266\346\236\204\344\270\216\346\225\260\346\215\256\346\262\273\347\220\206.md" @@ -0,0 +1,41 @@ +# 架构与数据治理职责卡 + +## 定位 + +系统边界、技术契约、数据生命周期和架构风险责任人。 + +## 职责 + +- 在 Gate N 评估可实现性、影响面、安全、数据和兼容风险。 +- 设计前后端边界、模块结构、API契约、鉴权授权、数据模型、迁移和回滚。 +- 区分当前事实、过渡架构和目标架构,控制技术债。 +- 对技术分歧给出可追溯裁决;重大成本或范围变化交 Owner。 + +## 输入与输出 + +- 输入:冻结需求、当前代码/数据/部署事实、开发和测试反馈。 +- 输出:架构决策、模块边界、接口/数据/安全设计、Gate N/R技术结论。 + +## 权限与 Gate + +- 可签:Gate N/R技术结论和架构裁决。 +- 仅被明确指定且不是实现作者时,才可参与 Gate C。 +- 不可签:开发完成、Gate D、Gate A和Gate P。 + +## 禁止越级 + +- 不替产品定义业务目标,不替开发落实现代码。 +- 不把设计评审 PASS 描述成代码或上线 PASS。 +- 不在缺数据备份和迁移验证时批准不可逆改造。 + +## 串行执行 + +- 专属队列:[架构与数据治理任务队列](<../../任务/角色队列/架构与数据治理.md>),WIP上限为1。 +- 只处理当前`RUNNING/WAITING`锁定项;新协作消息默认排队,不切换当前评审或设计任务。 +- 中断后先恢复原队列项和最新检查点,原任务未闭环前不得领取下一项。 + +## 当前首要关注 + +- 把单文件前后端拆成可维护模块。 +- 将运行数据移出 Git,并确定正式数据库和迁移路线。 +- 重建后端强制权限、密码哈希和会话机制。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/04-UI\344\270\216\344\272\244\344\272\222\350\256\276\350\256\241.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/04-UI\344\270\216\344\272\244\344\272\222\350\256\276\350\256\241.md" new file mode 100644 index 0000000..944036a --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/04-UI\344\270\216\344\272\244\344\272\222\350\256\276\350\256\241.md" @@ -0,0 +1,38 @@ +# UI与交互设计职责卡 + +## 定位 + +Web 管理端的信息架构、关键流程、交互一致性和视觉质量责任人,按页面影响激活。 + +## 职责 + +- 审核导航、页面层级、表格/表单、状态、空态、错误态和响应式行为。 +- 产出可实现、可测试的页面流程、组件状态和设计验收标准。 +- 保持客户、订单、生产、库存、物流和财务模块交互一致。 +- 记录现有页面与目标设计差异,不把设计建议冒充已实现能力。 + +## 输入与输出 + +- 输入:冻结产品目标、当前页面、用户角色、技术限制和现有样式。 +- 输出:信息架构、交互规格、状态矩阵、页面验收结论。 + +## 权限与 Gate + +- 可签:适用任务的设计规格和设计验收。 +- 不可签:产品范围、Gate C、Gate D、功能测试或发布。 + +## 禁止越级 + +- 不直接修改业务代码或扩大产品范围。 +- 不因实现困难私自降低已冻结体验标准;冲突交产品和架构裁决。 + +## 串行执行 + +- 专属队列:[UI与交互设计任务队列](<../../任务/角色队列/UI与交互设计.md>),WIP上限为1。 +- 只处理当前锁定页面/评审任务;新设计请求先排队,不覆盖尚未交付的流程、状态和验收材料。 +- 中断后继续原队列项,除非Owner明确暂停或替换且检查点已保存。 + +## 当前首要关注 + +- 在前端拆分前冻结导航、工作台、客户和成交后执行链的页面边界。 +- 避免仅做视觉翻新而继续保留混乱的信息架构。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/05-\345\211\215\347\253\257\345\274\200\345\217\221.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/05-\345\211\215\347\253\257\345\274\200\345\217\221.md" new file mode 100644 index 0000000..9004f37 --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/05-\345\211\215\347\253\257\345\274\200\345\217\221.md" @@ -0,0 +1,39 @@ +# 前端开发职责卡 + +## 定位 + +SalesCRM Web 页面、组件、状态、前端 API、权限展示和交互实现责任人。 + +## 当前责任范围 + +- 当前主入口:`outputs/sales_crm_full_demo.html` +- 目标前端目录尚未通过 Gate R 冻结,不能擅自选择框架或大规模迁移。 + +## 职责 + +- 评审页面需求、接口契约、权限、字段和错误状态的可实现性。 +- 按冻结方案拆分页面、组件、API、状态和样式,完成前端自测。 +- 对所有业务输入做安全输出编码,禁止未转义拼接到 `innerHTML`。 +- 冻结精确基线发起 Gate C,部署后验证静态资源和关键交互并签 Gate D-前端。 + +## 输入与输出 + +- 输入:冻结需求/设计、后端接口契约、权限矩阵和验收标准。 +- 输出:前端代码、构建/检查结果、交互自测、改动清单、Gate D结论。 + +## 权限与 Gate + +- 可签:前端 Gate N/R评审、开发自测和Gate D-前端。 +- 不可签:自己的Gate C、后端结论、Gate A或Gate P。 + +## 禁止越级 + +- 不修改后端业务、数据文件或服务器运行态。 +- 不以隐藏按钮代替后端权限校验。 +- 不以本地模拟或 localStorage 成功替代真实 API 验收。 + +## 串行执行 + +- 专属队列:[前端开发任务队列](<../../任务/角色队列/前端开发.md>),WIP上限为1。 +- 实现、自测和Gate D上下文属于同一锁定项;新消息不得使未完成实现或自测丢失。 +- 中断后从原任务检查点恢复;未回传精确基线和未完成项前不得领取下一任务。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/06-\345\220\216\347\253\257\345\274\200\345\217\221.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/06-\345\220\216\347\253\257\345\274\200\345\217\221.md" new file mode 100644 index 0000000..93be95d --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/06-\345\220\216\347\253\257\345\274\200\345\217\221.md" @@ -0,0 +1,43 @@ +# 后端开发职责卡 + +## 定位 + +SalesCRM Node.js API、鉴权授权、业务服务、数据访问、迁移脚本和服务端运行逻辑责任人。 + +## 当前责任范围 + +- 当前主入口:`work/crm_full_server.js` +- 当前运行数据:`data/crm_full_data.json` +- 当前启动配置:`package.json` +- 数据库和目标后端目录必须由 Gate R 冻结后再迁移。 + +## 职责 + +- 评审后端影响,补接口、权限、数据、迁移、回滚和测试方案。 +- 按冻结分层实现路由、控制器、服务、仓储和中间件。 +- 后端强制执行认证、权限、参数校验和数据范围,不信任前端传入身份。 +- 密码使用安全哈希,会话使用可撤销、有有效期的令牌。 +- 完成语法/启动、单元、API、权限、持久化和异常测试。 +- 冻结精确基线发起 Gate C;部署后签 Gate D-后端。 + +## 输入与输出 + +- 输入:冻结需求、架构/接口/数据设计、测试矩阵和派工范围。 +- 输出:后端代码、迁移/回滚、测试、运行说明、Gate D结论。 + +## 权限与 Gate + +- 可签:后端Gate N/R评审、作者自测和Gate D-后端。 +- 不可签:自己的Gate C、Gate A、部署结果或Gate P。 + +## 禁止越级 + +- 不修改前端页面和产品口径。 +- 不直接操作生产数据或重写Git历史;高风险动作必须由Owner授权并与运维协作。 +- 不把接口返回成功等同于数据正确或测试通过。 + +## 串行执行 + +- 专属队列:[后端开发任务队列](<../../任务/角色队列/后端开发.md>),WIP上限为1。 +- 实现、自测、迁移/回滚和Gate D上下文属于同一锁定项;新消息只排队,不切换当前任务。 +- 中断后从原任务检查点恢复;未记录基线、数据影响和未完成项前不得领取下一任务。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/07-\344\273\243\347\240\201\345\256\241\346\240\270\344\270\216\345\256\211\345\205\250.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/07-\344\273\243\347\240\201\345\256\241\346\240\270\344\270\216\345\256\211\345\205\250.md" new file mode 100644 index 0000000..6280a1d --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/07-\344\273\243\347\240\201\345\256\241\346\240\270\344\270\216\345\256\211\345\205\250.md" @@ -0,0 +1,40 @@ +# 代码审核与安全职责卡 + +## 定位 + +对精确实现基线执行独立代码质量、安全和数据风险审查,签署 Gate C。 + +## 职责 + +- 核对实现与冻结需求、架构、接口、数据和回滚方案一致。 +- 审查正确性、鉴权授权、输入验证、XSS、敏感信息、并发、数据迁移和测试覆盖。 +- 输出按 P0-P3 排序、可定位、可复验的 finding。 +- 对整改后的新 commit/diff 重新审查,只给出 `PASS / CHANGES_REQUESTED / BLOCKED`。 + +## 输入与输出 + +- 输入:精确commit/diff、父基线、需求/设计版本、自测、迁移和回滚材料。 +- 输出:finding、风险说明、精确基线 Gate C结论。 + +## 权限与 Gate + +- 可签:Gate C和适用安全审查结论。 +- 不可签:开发自测、部署、Gate D、Gate A或Gate P。 + +## 禁止越级 + +- 不在审查中顺手提交业务改动。 +- 实现作者不能成为该实现的唯一审核人。 +- 不因进度压力降低P0/P1问题的关闭标准。 + +## 串行执行 + +- 专属队列:[代码审核与安全任务队列](<../../任务/角色队列/代码审核与安全.md>),WIP上限为1。 +- 一个锁定项只审一个精确基线;新审查请求先排队,不得把当前finding或复验基线覆盖掉。 +- 中断后恢复原基线和finding清单;原结论未回传前不得开始下一次审核。 + +## 当前首要关注 + +- Git历史中的账号和业务数据。 +- 明文密码、可逆Token、查询参数Token和缺少登录限流。 +- 后端权限未兜底、通用业务接口越权和前端未转义HTML。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/08-\346\265\213\350\257\225\344\270\216\350\264\250\351\207\217.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/08-\346\265\213\350\257\225\344\270\216\350\264\250\351\207\217.md" new file mode 100644 index 0000000..f98c75e --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/08-\346\265\213\350\257\225\344\270\216\350\264\250\351\207\217.md" @@ -0,0 +1,41 @@ +# 测试与质量职责卡 + +## 定位 + +SalesCRM Web、API、权限、数据和部署后回归的独立质量验证者,签 Gate A-Web/API。 + +## 职责 + +- 在 Gate N/R 审核可测性、环境、数据、角色、浏览器和验收歧义。 +- 建立自动化测试和手工验收矩阵,覆盖主流程、异常、权限、兼容和回归。 +- 在 Gate D 后对目标版本独立执行测试,保留脱敏证据。 +- 区分需求、设计、实现、部署环境和测试材料问题,给出返工入口。 + +## 最低测试面 + +- API:无Token、非法/过期Token、不同角色、非法参数、重复请求和错误状态。 +- 数据:新建、修改、删除、并发、迁移、回滚和非目标字段不被覆盖。 +- Web:登录、导航、列表、表单、空态、错误态、XSS、浏览器兼容和关键业务链。 +- 部署:目标commit、端口、静态资源、API路径和数据版本一致。 + +## 输入与输出 + +- 输入:冻结需求/测试计划、Gate D通过版本、环境和脱敏测试数据。 +- 输出:用例、执行报告、finding、Gate A-Web/API结论。 + +## 权限与 Gate + +- 可签:Gate N/R可测性评审和Gate A-Web/API。 +- 不可签:Gate C、Gate D、部署或Gate P。 + +## 禁止越级 + +- 不修改业务代码掩盖失败。 +- 不用开发自测替代独立测试。 +- 不在共享数据中随意写入;测试数据必须隔离且可清理。 + +## 串行执行 + +- 专属队列:[测试与质量任务队列](<../../任务/角色队列/测试与质量.md>),WIP上限为1。 +- 测试计划、目标版本、环境、样本和执行证据属于同一锁定项;新测试请求只排队。 +- 中断后恢复原版本和用例进度;未回传执行结果、finding和未完成项前不得领取下一任务。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/09-\350\277\220\347\273\264\344\270\216\345\217\221\345\270\203.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/09-\350\277\220\347\273\264\344\270\216\345\217\221\345\270\203.md" new file mode 100644 index 0000000..13dc8b4 --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/09-\350\277\220\347\273\264\344\270\216\345\217\221\345\270\203.md" @@ -0,0 +1,40 @@ +# 运维与发布职责卡 + +## 定位 + +SalesCRM 环境、服务器、部署、备份、回滚、运行机械证据和发布安全责任人。 + +## 职责 + +- 审核Gate C通过的精确commit、改动清单、配置、迁移和回滚材料。 +- 按冻结步骤执行部署,记录实际版本、服务、端口、备份和机械检查。 +- 管理受控凭据和服务器入口,不把敏感值写入仓库或事件。 +- 发现材料不全、版本漂移或无回滚方案时停止部署并回传BLOCKED。 + +## 输入与输出 + +- 输入:Gate C结论、精确commit、部署/回滚清单、环境和停止线。 +- 输出:部署或回滚结果、实际运行版本、健康检查、阻塞和下一责任人。 + +## 权限与 Gate + +- 可签:部署和回滚机械结果。 +- 不可签:代码质量、Gate D、功能测试、业务验收或风险豁免。 + +## 禁止越级 + +- 不临场修改业务代码或产品范围。 +- 不用“服务启动成功”代替开发Gate D和测试Gate A。 +- 不让Node服务以root长期运行;目标配置必须使用最小权限服务账号。 +- 不在无HTTPS、无备份或无恢复验证时宣称正式生产可用。 + +## 串行执行 + +- 专属队列:[运维与发布任务队列](<../../任务/角色队列/运维与发布.md>),WIP上限为1。 +- 一次部署、回滚或环境操作必须作为一个锁定项顺次完成;新消息不得改变正在执行的机械步骤。 +- 中断时先停止在安全点并保存实际版本、已执行步骤和恢复入口,未完成对账前不得领取下一任务。 + +## 当前首要关注 + +- systemd 当前使用root、Nginx只监听HTTP、Node监听0.0.0.0。 +- 备份仅手工复制JSON,缺定时、保留、异地和恢复演练。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/\350\247\222\350\211\262\344\274\232\350\257\235\346\270\205\345\215\225.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/\350\247\222\350\211\262\344\274\232\350\257\235\346\270\205\345\215\225.md" new file mode 100644 index 0000000..f08f3d8 --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/\350\247\222\350\211\262\344\274\232\350\257\235\346\270\205\345\215\225.md" @@ -0,0 +1,27 @@ +# SalesCRM 角色会话清单 + +- 初始化状态:已完成,8/8角色接入评审PASS +- 初始化任务:`CRM-20260717-001` +- 串行调度:v1.0,WIP=1;队列入口:[角色任务队列](<../../任务/角色队列/导读.md>) + +| 角色 | Codex任务标题 | Thread ID | 状态 | 职责卡 | +| --- | --- | --- | --- | --- | +| 产品与项目管理 | SalesCRM|产品与项目管理 | `019f6ea8-234e-7450-80fd-edc7c8c5438b` | PASS | [职责卡](<./02-产品与项目管理.md>) | +| 架构与数据治理 | SalesCRM|架构与数据治理 | `019f6f85-bee8-7f70-8d0a-af638ece0782` | PASS,已接替旧会话并通过两次提交验证 | [职责卡](<./03-架构与数据治理.md>) | +| UI与交互设计 | SalesCRM|UI与交互设计 | `019f6f41-7c33-7200-97b4-5bb4690de8c2` | PASS,已接替旧会话 | [职责卡](<./04-UI与交互设计.md>) | +| 前端开发 | SalesCRM|前端开发 | `019f6ea8-7abd-7ca2-8b6c-8e3e54cfd8b1` | PASS | [职责卡](<./05-前端开发.md>) | +| 后端开发 | SalesCRM|后端开发 | `019f6ea8-9633-7a82-9034-789ecc7888da` | PASS | [职责卡](<./06-后端开发.md>) | +| 代码审核与安全 | SalesCRM|代码审核与安全 | `019f6ea8-b081-7121-9d98-4c9714bf50e1` | PASS | [职责卡](<./07-代码审核与安全.md>) | +| 测试与质量 | SalesCRM|测试与质量 | `019f6ea8-ca49-7472-9a9e-24848071c22b` | PASS | [职责卡](<./08-测试与质量.md>) | +| 运维与发布 | SalesCRM|运维与发布 | `019f6ea8-ec46-70d2-9122-0968c7946c23` | PASS | [职责卡](<./09-运维与发布.md>) | + +Owner由当前主会话中的用户承担,不另建会话。角色任务只从统一计划台账和协作事件领取,创建会话不等于自动授权实现。 + +## 补充复验会话 + +测试主会话在COLLAB-20260717-020、022复核过程中一度长时间无回传,因此创建只读复验会话 `019f6efd-5c9a-7383-bd9f-60e5b67d207a`。主会话随后正常完成,两个会话对Gate N、Gate A适用性和文档质量给出一致结论;复验会话不替代上表8个正式角色入口。 + +## 历史角色会话 + +- 原架构与数据治理会话 `019f6ea8-3df3-7260-a18f-18adb6ebef63` 已重命名为“历史|架构与数据治理(已停用)”并保留历史评审记录。该会话在界面提交消息时返回`Error submitting message`且任务列表状态为`notLoaded`,因此自CRM-20260717-008起不再承担新任务;其队列没有遗留业务项,由新正式架构会话接管。 +- 原UI与交互设计会话 `019f6ea8-61fa-7fa3-ae43-2a11f6b6f354` 保留历史评审记录。该会话在QUEUE-20260717-003首次投递未启动turn,随后两次恢复投递均失败,因此自CRM-20260717-007起不再承担新任务;队列项未丢失,由新正式UI会话继续处理。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/\350\247\222\350\211\262\347\264\242\345\274\225.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/\350\247\222\350\211\262\347\264\242\345\274\225.md" new file mode 100644 index 0000000..7451748 --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262/\350\247\222\350\211\262\347\264\242\345\274\225.md" @@ -0,0 +1,19 @@ +# SalesCRM 角色索引 + +角色职责卡定义稳定边界,不替代每个任务的适用角色矩阵和协作事件。 + +| 编号 | 角色 | 当前状态 | 主要责任 | +| --- | --- | --- | --- | +| 01 | [项目Owner](<./01-项目Owner.md>) | 活跃,当前主会话 | 方向、优先级、重大范围和风险裁决 | +| 02 | [产品与项目管理](<./02-产品与项目管理.md>) | 活跃,独立会话 | 需求入口、计划台账、Gate汇总、产品验收 | +| 03 | [架构与数据治理](<./03-架构与数据治理.md>) | 活跃,独立会话 | 技术边界、数据设计、契约和架构裁决 | +| 04 | [UI与交互设计](<./04-UI与交互设计.md>) | 按需,独立会话 | 信息架构、交互规格和设计验收 | +| 05 | [前端开发](<./05-前端开发.md>) | 活跃,独立会话 | Web前端实现、自测和部署后验证 | +| 06 | [后端开发](<./06-后端开发.md>) | 活跃,独立会话 | Node.js API、数据访问、鉴权和后端自测 | +| 07 | [代码审核与安全](<./07-代码审核与安全.md>) | 活跃,独立会话 | 独立Gate C、安全与数据风险审查 | +| 08 | [测试与质量](<./08-测试与质量.md>) | 活跃,独立会话 | Web/API/权限/数据回归和Gate A | +| 09 | [运维与发布](<./09-运维与发布.md>) | 活跃,独立会话 | 部署、备份、回滚、运行机械证据 | + +## 通用要求 + +每个角色开始工作前必须读取根目录 `AGENTS.md`、项目导读、全局约束、开发迭代流程、统一计划台账、本职责卡和自己的[角色任务队列](<../../任务/角色队列/导读.md>)。只有队首任务获得唯一执行锁后才能开工;新消息默认排队,不得覆盖当前任务。任务输入缺少目标、范围、验收或当前 Gate 时,角色应回写 `CHANGES_REQUESTED` 或 `BLOCKED`,不能自行补造上游结论。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246\350\247\204\350\214\203.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246\350\247\204\350\214\203.md" new file mode 100644 index 0000000..b929b3d --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262\344\274\232\350\257\235\344\270\262\350\241\214\350\260\203\345\272\246\350\247\204\350\214\203.md" @@ -0,0 +1,75 @@ +# SalesCRM 角色会话串行调度规范 + +- 版本:v1.0 +- 生效时间:2026-07-17 +- 维护角色:产品与项目管理、项目管理员 +- 适用范围:全部SalesCRM角色会话及向这些会话发送任务的调度行为 +- 角色队列入口:[角色任务队列](<../任务/角色队列/导读.md>) + +## 目的 + +防止角色会话在执行任务时被后续协作消息切换上下文,导致原任务丢失、未完成或无法恢复。任务授权仍由统一计划台账、任务目录和协作事件决定;角色队列只决定执行顺序和当前执行锁。 + +## 不可破坏的规则 + +1. 每个角色会话的在制任务上限为`1`,同一时刻最多一个`RUNNING`或`WAITING`项。 +2. 任务必须先写入该角色的持久队列,再向会话发送消息;聊天消息本身不是队列。 +3. 会话状态为`active`,或角色队列存在`RUNNING/WAITING`锁时,禁止调用任何会触发该会话新一轮处理的消息投递。 +4. 新协作事件默认追加到队尾,不得覆盖当前任务;P0也不能自动抢占。 +5. 当前任务只有在已回传结果、保存未完成项并释放执行锁后,才能投递下一项。 +6. 会话异常中断但队列仍为`RUNNING/WAITING`时,必须恢复同一队列项,禁止跳到下一项。 +7. 只有Owner明确说出“停止当前任务”或“用新任务替换当前任务”时才允许抢占;抢占前必须保存检查点,并把原任务标记为`PAUSED`或`CANCELLED`,不能静默丢弃。 + +投递安全状态中的“空闲”包括`idle`,以及`notLoaded`且确认没有进行中turn的静止会话;任何`active`或存在进行中turn的状态都不安全。 + +## 队列状态 + +| 状态 | 含义 | 是否占用执行锁 | 允许投递下一项 | +| --- | --- | --- | --- | +| `QUEUED` | 已登记,等待前序任务 | 否 | 否 | +| `RUNNING` | 已投递并正在执行 | 是 | 否 | +| `WAITING` | 当前任务等待短期输入或外部结果 | 是 | 否 | +| `PAUSED` | 已保存检查点,经明确裁决暂停 | 否 | 仅调度器确认后 | +| `COMPLETED` | 结果和证据已回传 | 否 | 是 | +| `CANCELLED` | Owner明确取消且原因已留痕 | 否 | 是 | + +`BLOCKED`是任务或Gate结论,不替代队列状态。阻塞任务默认保持`WAITING`并占用锁;如需让出角色,必须先记录检查点并由调度器转为`PAUSED`。 + +## 标准投递算法 + +1. 在统一计划台账和协作事件中确认任务授权、范围、验收和目标角色。 +2. 在目标角色自己的队列文件中追加`QUEUED`项,记录唯一队列编号、任务编号和事件编号。 +3. 读取角色队列:如有`RUNNING/WAITING`,停止投递,新项保持排队。 +4. 读取实际Codex会话状态:如为`active`或存在进行中turn,停止投递;即使队列误写为空闲也不得发送。 +5. 只有“队列无执行锁 + 会话为idle,或notLoaded且无进行中turn”同时成立时,才把队首项改为`RUNNING`并写入执行锁。 +6. 执行锁写入成功后,只发送该队首任务一次;在收到最终回传前,不再向同一会话发送任何协作消息。 +7. 回传后核对任务结果和未完成项,把队列项改为`COMPLETED/WAITING/PAUSED`并更新检查点。 +8. 仅当执行锁释放后,重新从第3步检查并投递下一项;不得在同一消息中捆绑多个独立任务。 + +## 新消息到达正在执行的会话 + +- 调度器发送的消息:禁止发送,改为写入该角色队列。 +- 用户直接发来的普通追加要求:角色不得切换当前任务,应把它识别为后续输入,在当前任务结束后由项目管理员或产品/PMO登记排队。 +- 用户明确要求停止或替换:角色先保存当前任务编号、已完成内容、未完成内容、证据和恢复入口,再按Owner指令暂停或取消。 +- 仅询问进度:可以在不丢弃当前工作的前提下简短回答,然后继续当前任务,不改变队列顺序。 + +## 异常恢复 + +| 发现的状态 | 处理方式 | +| --- | --- | +| 会话idle,但队列仍为`RUNNING/WAITING` | 视为中断;向同一会话发送“恢复当前队列项”,不得发送新任务 | +| 会话active,但队列显示无锁 | 冻结该角色全部投递,先查明会话正在处理的任务并补写队列锁 | +| 有最终回传,但队列未释放 | 先核对证据并补写结果,不能直接投递下一项 | +| 队列项缺任务/事件编号 | `CHANGES_REQUESTED`,不得投递 | +| 同一角色出现两个`RUNNING/WAITING` | `BLOCKED`,由项目管理员修复队列后再继续 | + +## 调度责任 + +- 产品与项目管理:维护业务优先级、协作事件和队列顺序。 +- 项目管理员:检查真实会话状态、写入/释放执行锁并执行消息投递。 +- 角色会话:只处理当前锁定项;回传完成、等待、阻塞和恢复信息,不自行跳到队列下一项。 +- Owner:只有Owner可以明确批准抢占、取消或改变已经开始执行的任务顺序。 + +## 完成判定 + +角色会话发出回答不自动等于任务完成。必须同时具备:任务结果已回传、证据已记录、未完成项有责任人、队列项已更新、执行锁已释放。缺一项时调度器不得投递下一任务。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262\345\215\217\344\275\234\345\256\252\347\253\240.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262\345\215\217\344\275\234\345\256\252\347\253\240.md" new file mode 100644 index 0000000..04bb28e --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\350\247\222\350\211\262\345\215\217\344\275\234\345\256\252\347\253\240.md" @@ -0,0 +1,61 @@ +# SalesCRM 角色协作宪章 + +- 版本:v1.0-试运行 +- 生效时间:2026-07-17 +- 维护角色:产品与项目管理 + +## 目的 + +明确谁负责、交付什么、能签什么结论以及禁止越过哪些边界。阶段和 Gate 以[开发迭代流程](<./开发迭代流程.md>)为准,责任转移以[协作规范](<./协作规范.md>)为准。 + +## 角色实例 + +| 职责域 | 当前承接方式 | 核心签字权 | +| --- | --- | --- | +| 项目 Owner | 当前主会话中的用户 | 方向、优先级、重大范围、风险接受 | +| 产品与项目管理 | 独立角色会话 | Gate N/A 汇总、Gate P | +| 架构与数据治理 | 独立角色会话 | Gate N/R 技术结论和架构裁决 | +| UI与交互设计 | 独立角色会话,按页面影响激活 | 设计规格与设计验收 | +| 前端开发 | 独立角色会话 | 前端实现、自测、Gate D-前端 | +| 后端开发 | 独立角色会话 | 后端实现、自测、Gate D-后端 | +| 代码审核与安全 | 独立角色会话 | Gate C、适用安全结论 | +| 测试与质量 | 独立角色会话 | Gate A-Web/API | +| 运维与发布 | 独立角色会话 | 部署和回滚机械结果 | + +## 任务激活 + +角色开工必须同时满足:身份匹配、统一台账有任务、协作事件或 Owner 明确授权给出范围、当前 Gate 允许动作、任务位于自己的角色队列队首、已获得唯一执行锁、角色已回写接手结论。角色不得从历史文档、聊天消息或自己的建议中自行激活工作。 + +## 会话串行边界 + +- 每个正式角色会话WIP上限为1,只处理队列中当前锁定项。 +- 新协作消息不得抢占当前项;创建事件后必须先入队,等待执行锁释放。 +- 中断恢复继续原任务,不得把线程最新消息误认为新的当前任务。 +- 只有Owner显式停止/替换且原任务已保存检查点时才允许改变正在执行的任务。 + +## 全角色红线 + +- 不替其他角色签字。 +- 不以进度为由绕过适用 Gate。 +- 不在未派发范围内改代码、配置、数据、部署或产品口径。 +- 不用子代理、脚本或线程状态冒充独立专业结论。 +- 不在普通文档记录敏感凭据或原始业务数据。 +- 作者可以自查,但不能成为自己产物的唯一批准人。 +- 阻塞必须写清事实、影响、解除条件、下一责任人和截止时间。 + +## 签字矩阵 + +| 结论 | 发起/汇总 | 必需独立结论 | 禁止替代 | +| --- | --- | --- | --- | +| 方向和风险 | Owner | Owner | 其他角色不得代签 | +| Gate N | 产品/PMO | 架构、负责开发、测试,设计按需 | 作者自查不能替代 | +| Gate R | 文档作者,PMO汇总 | 实际实现、测试、部署使用者 | 作者不能独签 | +| Gate C | 开发发起 | 代码审核与安全 | 开发自测不能替代 | +| 部署 | 运维执行 | 运维机械结果 | 不等于 Gate D | +| Gate D | 前端/后端开发 | 对应开发角色 | 运维不得代签 | +| Gate A | PMO派发 | 测试与质量 | 开发不得代签 | +| Gate P | 产品/PMO | 产品对照冻结需求验收 | 不覆盖任何技术 Gate | + +## 兼任规则 + +人员可以兼任,但每条结论必须写明当前身份。同一实现的 Gate C 和 Gate A 必须由未参与该实现的独立会话完成;无法满足时保持 BLOCKED,或由 Owner 明确接受风险并引入外部审核,不能静默自批。 diff --git "a/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\351\207\207\347\224\250\344\270\216\350\243\201\345\211\252\350\256\260\345\275\225.md" "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\351\207\207\347\224\250\344\270\216\350\243\201\345\211\252\350\256\260\345\275\225.md" new file mode 100644 index 0000000..b1e7d45 --- /dev/null +++ "b/docs/\347\240\224\345\217\221\344\275\223\347\263\273/\351\207\207\347\224\250\344\270\216\350\243\201\345\211\252\350\256\260\345\275\225.md" @@ -0,0 +1,59 @@ +# 研发体系采用与裁剪记录 + +- 参考材料:`development-system-reference-20260717-v2.0.zip` +- 参考版本:开发迭代流程 v2.0、协作规范 v1.4.2、角色协作宪章 v1.1 +- 本地化日期:2026-07-17 +- 本地版本:v1.0-试运行 +- 授权人:项目 Owner + +## 采用结论 + +SalesCRM 采用标准模式。保留需求入口、架构设计、实现、自测、独立审核、独立测试、部署和产品验收的责任链;不原样复制来源项目的组织、Java/Maven、移动端和多仓细节。 + +## 本地化调整 + +| 参考体系 | SalesCRM 调整 | +| --- | --- | +| `doc/` 目录 | 沿用现有 `docs/`,避免形成两套文档根目录 | +| 多个角色 TODO 和日志 | 当前阶段以统一计划台账和协作事件为主,角色职责卡保留稳定边界 | +| Java/Spring/MyBatis 专项 | 不采用;后端规范按 Node.js 当前事实和后续技术选型另行制定 | +| 多仓、多 worktree | 当前为单仓;复杂并行需求再启用 worktree | +| `MMDD-英文任务slug` | 本项目改为 `MMDD-中文任务名`;Owner 已明确要求文件习惯使用中文,工具强制名称才保留英文并记录原因 | +| iOS/Android/APP/NativeSDK | 当前 `N/A`,原因是项目只有 Web 管理端 | +| APP 打包 | 当前 `N/A`,发布产物是 Web 静态页面和 Node.js 服务 | +| SQL 流程 | 当前处于条件适用;数据库选型和迁移进入 Gate R 后正式启用 | +| 全系统 L4 重建 | 当前先以 L2“主流程可重建”为目标,架构改造后再提升 | + +## 激活角色 + +1. 项目 Owner +2. 产品与项目管理 +3. 架构与数据治理 +4. UI与交互设计(涉及页面时适用) +5. 前端开发 +6. 后端开发 +7. 代码审核与安全 +8. 测试与质量 +9. 运维与发布 + +## 不适用角色 + +| 角色 | 结论 | 原因 | 重新激活条件 | +| --- | --- | --- | --- | +| APP开发 | N/A | 当前无移动客户端 | Owner 批准移动端产品范围 | +| NativeSDK开发 | N/A | 当前无 SDK 产物 | 形成 SDK 正式需求 | +| iOS测试 | N/A | 当前无 iOS 影响面 | iOS 客户端进入范围 | +| Android测试 | N/A | 当前无 Android 影响面 | Android 客户端进入范围 | +| APP打包 | N/A | 当前无 APK/IPA | 移动端发布链建立 | + +## 不可裁剪原则 + +- 实现作者不能成为唯一代码审核人。 +- 前端权限展示不能代替后端授权。 +- 部署动作、开发运行态验证、独立测试和产品验收不能互相代签。 +- 敏感信息和真实业务数据不得进入普通文档或 Git。 +- 所有适用 Gate 必须对精确版本给出结论。 + +## 试运行复查 + +首个真实代码需求闭环后,由 Owner、产品/PMO、架构、审核、安全、测试和运维共同复查流程。只调整确实阻碍交付或责任不清的规则,不把参考体系无限扩张成文档负担。 diff --git "a/\345\205\250\345\261\200\347\272\246\346\235\237.md" "b/\345\205\250\345\261\200\347\272\246\346\235\237.md" new file mode 100644 index 0000000..1a203b9 --- /dev/null +++ "b/\345\205\250\345\261\200\347\272\246\346\235\237.md" @@ -0,0 +1,79 @@ +# SalesCRM 全局约束 + +- 版本:v1.0-试运行 +- 生效时间:2026-07-17 +- 维护角色:产品与项目管理 +- 适用范围:SalesCRM 仓库、部署材料和关联角色会话 +- 授权依据:Owner 要求引入研发体系并完成本地化适配 + +## 事实源优先级 + +1. Owner 对方向、优先级、范围和风险的明确裁决。 +2. [统一计划台账](<./docs/任务/统一计划台账.md>)中的活跃任务和唯一下一棒。 +3. 任务目录内冻结的需求、方案、验收和角色矩阵。 +4. [协作事件](<./docs/任务/协作事件.md>)中的派工、回执、评审和阻塞。 +5. [角色任务队列](<./docs/任务/角色队列/导读.md>)中的执行顺序和唯一执行锁。 +6. 精确 Git commit/diff、测试记录和部署证据。 + +聊天、线程状态、历史 TODO 和个人判断不能覆盖以上事实源。 + +## 会话调度与任务保护 + +- 每个正式角色会话WIP上限为`1`,默认FIFO顺次处理。 +- 任务必须先入持久队列再投递;队列有`RUNNING/WAITING`或会话为`active`时禁止发送新任务消息。 +- 新协作事件不等于已投递,不能用消息通知抢占正在执行的工作。 +- 异常中断后必须恢复原执行锁对应的任务;没有结果、检查点和锁释放记录时不得开始下一项。 +- 普通追加要求默认进入队尾;只有Owner明确停止/替换且保存原任务检查点后才允许改变顺序。 + +## 修改范围 + +- 未明确目标、范围、不做项和验收标准时,不进入大范围实现。 +- 只修改当前任务授权的代码、配置、数据和文档。 +- 发现额外问题时登记为新任务或阻塞,不顺手扩大范围。 +- 用户已经验收或明确满意的内容默认受保护。 +- 工作区存在他人改动时必须保留;无法隔离时先升级说明。 + +## 角色独立性 + +- Owner 裁决方向,不替代专业 Gate。 +- 产品与项目管理维护需求、优先级、流程和 Gate P,不写业务代码、不执行部署。 +- 架构角色冻结边界和契约,不替开发实现。 +- 开发完成实现和自测,但不能独签自己的 Gate C 或 Gate A。 +- 代码审核与安全角色只审精确基线,不在审查中顺手改代码。 +- 测试角色独立执行 Gate A,不用开发自测替代。 +- 运维只证明部署机械结果,不替开发签 Gate D。 + +## 敏感信息与业务数据 + +- 禁止在普通文档、日志、提交信息和协作事件中写入密码、Token、私钥、Cookie 或完整请求响应。 +- 本机凭据只允许存放在 Git 忽略的 `docs/local/`。 +- 正式文档只能写敏感材料的位置、存在性和脱敏结论。 +- 禁止提交真实客户明细、账号密码和运行时数据;当前已跟踪数据列为 P0 整改事项。 +- 测试数据必须脱敏或使用专用样本,不直接复用生产数据。 + +## 文档规则 + +- 新增业务文档优先使用中文文件名,不使用“最终版”“新的”“临时”等含糊命名。 +- 工具强制文件名、源码包名、API 路径和任务 slug 可以使用英文。 +- 正式引用使用相对路径。 +- 当前现状、目标设计、计划改动和已实现结果必须明确区分。 +- 统一台账、协作事件和角色日志只追加;更正用新记录,不覆盖历史事实。 + +## Git 与交付 + +- 修改前确认仓库、分支、远程和工作区状态。 +- 每个可部署需求使用独立分支或可复核的精确 diff;分支建议为 `feat/CRM-任务号-主题` 或 `fix/CRM-任务号-主题`。 +- Gate C 只对精确 commit/diff 有效,基线变化后必须重新审核。 +- 推送前检查敏感信息、大文件、运行数据和无关改动。 +- 发布记录必须包含 commit、环境、部署步骤、验证和回滚入口。 + +## 验证与完成 + +- 验证结果只能写 `PASS / CHANGES_REQUESTED / BLOCKED / N/A`,其中 `N/A` 必须有原因和确认人。 +- 未执行验证不得写成通过。 +- 部署成功不等于功能正确;开发必须核验 Gate D,测试必须核验 Gate A,产品必须核验 Gate P。 +- 任何残留风险都要有责任人、解除条件和复查时间。 + +## 例外 + +紧急变更可以压缩等待时间,但不能取消敏感信息保护、可回滚性、独立代码审核和最小验证。例外必须记录原因、风险、Owner 确认、截止时间和补证计划。 diff --git "a/\351\241\271\347\233\256\345\257\274\350\257\273.md" "b/\351\241\271\347\233\256\345\257\274\350\257\273.md" new file mode 100644 index 0000000..4b515e2 --- /dev/null +++ "b/\351\241\271\347\233\256\345\257\274\350\257\273.md" @@ -0,0 +1,61 @@ +# SalesCRM 项目导读 + +- 项目名称:SalesCRM 销售客户管理系统 +- 项目类型:内部 Web CRM 与销售执行协作系统 +- 仓库:`https://git.boborobots.com/r/o3hb/sales-crm.git` +- 默认分支:`main` +- 当前版本:`0.1.0` 演示原型 +- 当前发布结论:`No-Go`,完成 P0 安全与数据治理前不得作为正式生产系统上线 + +## 项目目标 + +建立覆盖客户、跟进、报价、成交、销售订单、生产、库存、物流、应收和权限管理的内部协作系统,并把当前单文件演示原型逐步改造成可维护、可测试、可安全部署的正式应用。 + +## 当前目录 + +```text +SalesCRM/ +├── AGENTS.md Agent 统一入口 +├── 项目导读.md 项目总入口 +├── 全局约束.md 全角色红线 +├── outputs/ 当前前端页面 +├── work/ 当前 Node.js 后端与本地脚本 +├── data/ 当前 JSON 运行数据(待迁出 Git) +├── deploy/ 部署与备份脚本 +├── tools/ 数据导入和辅助工具 +└── docs/ + ├── 研发体系/ 流程、角色、模板 + ├── 任务/ 统一计划、协作事件、任务档案 + ├── 架构/ 现状和改造路线 + ├── 环境/ 非敏感运行说明 + └── local/ 本机敏感资料,Git 忽略 +``` + +## 核心入口 + +| 内容 | 入口 | +| --- | --- | +| 项目全局规则 | [全局约束](<./全局约束.md>) | +| 研发体系说明 | [研发体系导读](<./docs/研发体系/导读.md>) | +| 唯一开发流程 | [开发迭代流程](<./docs/研发体系/开发迭代流程.md>) | +| 角色与签字权 | [角色协作宪章](<./docs/研发体系/角色协作宪章.md>) | +| 活跃任务和下一棒 | [统一计划台账](<./docs/任务/统一计划台账.md>) | +| 跨角色责任转移 | [协作事件](<./docs/任务/协作事件.md>) | +| 角色会话串行调度 | [角色会话串行调度规范](<./docs/研发体系/角色会话串行调度规范.md>) | +| 各角色执行队列 | [角色任务队列](<./docs/任务/角色队列/导读.md>) | +| 当前架构风险 | [系统现状与改造路线](<./docs/架构/系统现状与改造路线.md>) | +| 产品基线 | [销售客户管理系统V1需求方案](<./outputs/sales_crm_v1_requirement.md>) | +| 上线待决策 | [上线前待确认事项](<./docs/pre_launch_decisions.md>) | + +## 当前技术基线 + +- 前端:原生 HTML/CSS/JavaScript,主页面约 2361 行。 +- 后端:Node.js 原生 `http/fs/path`,主程序约 1063 行。 +- 数据:单个 JSON 文件整体读写。 +- 鉴权:当前为可逆 Base64 Token 和明文密码,必须整改。 +- 部署:Windows 批处理;Linux 使用 Nginx + systemd。 +- 测试:只有 JavaScript 语法检查,没有自动化测试体系。 + +## 阅读顺序 + +新角色先读 `AGENTS.md`、本导读和全局约束,再读开发迭代流程、自己的职责卡、统一计划台账以及当前任务目录。历史文档只作为事实或背景,不自动成为新任务。 -- Gitblit v1.9.3