From 5d4fc2bbe37d69e30b066c50b91e7897048c1849 Mon Sep 17 00:00:00 2001 From: shunli Date: Sun, 22 Mar 2026 11:31:42 +0800 Subject: [PATCH] =?UTF-8?q?R23-6/R23-7=EF=BC=9A=E6=9B=B4=E6=96=B0=E8=AF=95?= =?UTF-8?q?=E7=82=B9=E6=89=8B=E5=86=8C=E5=B9=B6=E5=AE=8C=E6=88=90=E5=87=86?= =?UTF-8?q?=E5=85=A5=E6=94=B6=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/trialrun/checklist.md | 10 +++++++++ deploy/trialrun/observation-template.md | 17 +++++++++++++++ deploy/trialrun/runbook.md | 21 +++++++++++++++++++ docs/admin-handbook.md | 7 +++++++ docs/employee-quickstart.md | 11 ++++++++++ docs/feature-matrix.md | 12 +++++++++++ ...026-03-22_09-29-14-r23-trial-hardening.csv | 9 ++++++++ 7 files changed, 87 insertions(+) create mode 100644 issues/2026-03-22_09-29-14-r23-trial-hardening.csv diff --git a/deploy/trialrun/checklist.md b/deploy/trialrun/checklist.md index 67419444..79deaec5 100644 --- a/deploy/trialrun/checklist.md +++ b/deploy/trialrun/checklist.md @@ -78,3 +78,13 @@ - [ ] 涉密正文与附件未上传到 OA - [ ] 企业微信提醒仅包含脱敏标题 / 编号 / deeplink - [ ] 员工可从企业微信进入 `Portal`,并继续完成周报、待办、项目更新 + +## R23 试点收口 Checklist +- [ ] `project_communication_log_v1` 已开启并可在项目详情页使用 +- [ ] `project_closure_checklist_v1` 已开启并可自动 bootstrap +- [ ] 管理员已知晓“软约束”策略,不把收口面板误认为硬阻断审批 +- [ ] 员工已知晓“24h 回填”规则 +- [ ] 至少 1 个项目已验证:沟通回填 -> Portal 待跟进统计生效 +- [ ] 至少 1 个项目已验证:收口清单 -> Portal 待收口统计生效 +- [ ] 至少 1 条涉密合同或资料引用已验证搜索边界 +- [ ] 每周五复盘模板中已加入“聊天/表格补流程案例”字段 diff --git a/deploy/trialrun/observation-template.md b/deploy/trialrun/observation-template.md index a95d8130..df297bc3 100644 --- a/deploy/trialrun/observation-template.md +++ b/deploy/trialrun/observation-template.md @@ -39,3 +39,20 @@ - 本周是否达到试点预期:是 / 否 - 若否,主要原因: - 最终验收建议:继续观测 / 可进入验收 + +## R23 试点收口观察补充 +### 1. 客户沟通回填 +- 本周需要回填的项目数: +- 实际按 `24h` 回填的项目数: +- 仍停留在聊天未回填的案例: + +### 2. 项目收口红黄灯 +- 本周待收口项目数: +- 主要待收口来源(交付 / 风险 / 报销 / 差旅 / 合同 / 交接): +- 选择 `waived` 的项目与理由: + +### 3. 平台替代表现 +- 仍靠聊天补流程的次数: +- 仍靠表格补流程的次数: +- 是否出现“员工不知道该回填到哪里”的情况: +- 下周需优化的制度或页面提示: diff --git a/deploy/trialrun/runbook.md b/deploy/trialrun/runbook.md index c148c6b9..dbfea687 100644 --- a/deploy/trialrun/runbook.md +++ b/deploy/trialrun/runbook.md @@ -269,3 +269,24 @@ docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/ - 报销 / 差旅 / 周报挂项目覆盖率 - 是否还存在第二套项目台账或 Excel 主表 - 企业微信通知是否发生敏感字段泄露 + +## 7. R23 试点收口准入步骤 +1. 打开以下功能开关并确认 DB 记录不是 `force_off`: + - `project_domain_v1` + - `project_linking_v1` + - `project_communication_log_v1` + - `project_closure_checklist_v1` + - `confidential_doc_refs_v1` + - `global_search_v1` +2. 抽样创建或选择 1 个真实项目,验证: + - 可以新增客户沟通回填 + - 项目收口清单会自动生成 + - 项目改为 `completed/archived` 时出现软告警而非硬阻断 +3. 抽样验证 1 条涉密合同或资料引用: + - 敏感摘要关键字无法通过全局搜索命中 + - 合同编号或资料编号可以命中 + - 企业微信消息只发“有项目待跟进 / 有项目待收口”脱敏提醒 +4. 向全员宣导两条试点纪律: + - 客户沟通影响项目时 `24h` 内回填 + - 私聊可继续发生,但项目状态不能只留在聊天里 +5. 进入真实 4 周试点前,至少保留一次通过记录:后端测试、前端 build、E2E 全绿截图或日志。 diff --git a/docs/admin-handbook.md b/docs/admin-handbook.md index 46481386..807c1b3e 100644 --- a/docs/admin-handbook.md +++ b/docs/admin-handbook.md @@ -112,3 +112,10 @@ 3. 若启用企业微信入口,补齐:`WECOM_*` 与 `WECOM_ALLOWED_RETURN_HOSTS`。 4. 将 `OPENAPI_DOCS_ENABLED` 保持为 `false`,不要在公网生产暴露文档入口。 5. 定期检查审计日志中的登录失败、Refresh 来源不匹配与涉密资料查看记录。 + +## 16. R23 试点收口纪律 +- 客户沟通如果影响项目计划、交付、报价、风险或下一步动作,必须在 `24h` 内回填到 `项目 -> 客户沟通`。 +- 回填只写结果摘要、下一步动作和下次跟进日期,不粘贴完整聊天记录,不上传私人微信截图。 +- 项目经理每周至少检查一次 `项目 -> 项目收口` 面板,确认红黄灯来源是否已经处理。 +- 若某项收口任务选择 `已豁免`,必须填写理由;豁免不代表永久忽略,只代表本周软约束放行。 +- 试点期每周五复盘一次“仍靠聊天/表格补流程”的案例,并决定是补回填纪律还是补最小功能。 diff --git a/docs/employee-quickstart.md b/docs/employee-quickstart.md index 2f78928e..bf6c22b2 100644 --- a/docs/employee-quickstart.md +++ b/docs/employee-quickstart.md @@ -60,3 +60,14 @@ - 不要把涉密合同正文、涉密附件、敏感报价和成本细节上传到 OA 或企业微信通知里。 - 如果系统里只要求你填合同编号、归档位置、离线档案号,这是正常设计,不是少功能。 - 涉密资料正文继续按公司要求放在内网文件盘、NAS 或离线档案中。 + +## 12. 客户沟通回填规则(R23 试点期) +- 如果你通过私人微信、电话、会议、企业微信或现场沟通拿到了会影响项目推进的结果,请在 `24h` 内回填到 OA。 +- 回填内容只写:沟通日期、渠道、结果摘要、下一步动作、下次跟进日期。 +- 不要把完整聊天记录、截图、敏感报价或涉密正文复制到 OA。 +- 项目是否推进、谁来跟进、下次何时联系,不能只留在聊天里。 + +## 13. 项目收口怎么配合 +- 如果你负责交付、报销、差旅、风险或交接,请关注项目里的“项目收口”面板。 +- 面板里看到待处理项并不代表不能继续推进,而是提醒你尽快补齐留痕。 +- 如果管理员要求你补交付记录、合同归档位置或交接说明,请优先在 OA 里补齐,不要只在群里回复“已处理”。 diff --git a/docs/feature-matrix.md b/docs/feature-matrix.md index 9169660d..6249c683 100644 --- a/docs/feature-matrix.md +++ b/docs/feature-matrix.md @@ -356,3 +356,15 @@ - **R20 项目联动主链**:报销、差旅、周报、待办已支持挂项目;项目详情页可统一查看成员、里程碑、任务、风险、费用、差旅、周报、合同与交付记录。 - **R21 涉密与公网边界**:新增 `ContractRegistry`、`ConfidentialDocumentRef`;OA 只保存元数据和引用路径,Refresh 来源校验与企业微信 IM 脱敏规则已收口到公网安全基线。 - **运行口径**:员工真正操作仍集中在 `hyb-oa`;企业微信只做入口与脱敏提醒;涉密正文与附件继续留在内网文件盘、NAS 或离线档案中。 + +## R23 试点收口与项目治理轻增强 + +| Feature Flag | 默认值 | 作用 | 主要页面 / 路由 | +| --- | --- | --- | --- | +| `project_communication_log_v1` | `force_off` | 在项目详情页记录客户沟通结果摘要、下一步动作与跟进日期;不做聊天归档 | `client/src/pages/ProjectDetailPage.tsx`, `/api/projects/:id/communication-logs` | +| `project_closure_checklist_v1` | `force_off` | 为项目完成/归档提供软约束式收口清单与 Portal 待收口统计 | `client/src/pages/ProjectDetailPage.tsx`, `/api/projects/:id/closure-checklist`, `/api/portal/home` | + +### R23 固定边界 +- `ProjectCommunicationLog` 与 `ProjectClosureChecklistItem` 不进入全文搜索。 +- `confidential` / `restricted` 合同与资料引用不按摘要全文命中搜索,只按编号、项目编号或最小必要标签命中。 +- 企业微信提醒仅发送脱敏标题与 deeplink,不发送沟通摘要、收口备注或涉密标题全文。 diff --git a/issues/2026-03-22_09-29-14-r23-trial-hardening.csv b/issues/2026-03-22_09-29-14-r23-trial-hardening.csv new file mode 100644 index 00000000..06cfff30 --- /dev/null +++ b/issues/2026-03-22_09-29-14-r23-trial-hardening.csv @@ -0,0 +1,9 @@ +ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes +R23-0,R23执行合同建档与边界冻结,创建并校验 R23 试点收口合同并冻结本轮只做项目沟通回填 收口 checklist 涉密边界补强与关键 E2E 的边界,CSV 校验通过且明确本轮不扩展为第二套项目平台或聊天归档,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-22_09-29-14-r23-trial-hardening.csv,manual,DONE,DONE,DONE,issues/2026-03-22_09-29-14-r23-trial-hardening.csv|issues/2026-03-21_23-00-00-r18-r22-unified-internal-workbench.csv,[],默认软约束 24h 回填 企微仅发送脱敏提醒 +R23-1,项目沟通回填模型与API,新增 ProjectCommunicationLog 模型与项目沟通回填接口 建立客户沟通结果最小留痕,项目成员可新增沟通回填 creator在24h内或 owner manager admin 可编辑 且沟通记录不进入全文搜索,cd server && npm run prisma:validate && npm test,manual,DONE,DONE,DONE,server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/projects.js|server/tests,"[""R23-0""]",none +R23-2,项目收口checklist与软告警,新增 ProjectClosureChecklistItem 与项目完成归档前的收口清单和 closureWarning 软告警,checklist 可自动 bootstrap waived 必须备注 项目完成归档时可返回 closureWarning 且不硬阻断,cd server && npm test,manual,DONE,DONE,DONE,server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/projects.js|server/tests,"[""R23-1""]",none +R23-3,项目页与Portal收口面板,在项目详情页和 Portal 上新增沟通回填与收口面板摘要 让员工和老板看到待跟进与待收口红黄灯,项目详情页可维护沟通回填与收口项 Portal 项目摘要显示待跟进和待收口数据,cd client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,client/src/pages/ProjectDetailPage.tsx|client/src/pages/PortalHomePage.tsx|client/src/api/projects.ts|client/src/api/portal.ts,"[""R23-1"",""R23-2""]",none +R23-4,涉密边界补强与通知测试,补强搜索与企微通知的涉密边界 确保沟通摘要和收口备注不进入搜索与企微正文,沟通摘要和 checklist 备注不进企微消息 confidential restricted 不按摘要全文命中搜索,cd server && npm test && ./scripts/regression-im-notifier.sh,manual,DONE,DONE,DONE,server/src/routes/search.js|server/src/services/notifications/imEnqueue.js|server/tests,"[""R23-1"",""R23-2""]",none +R23-5,关键PlaywrightE2E补齐,新增 wecom-entry project-workbench confidential-boundary 三个关键 E2E 作为试点前自动化验收,三个新增 E2E 用例稳定通过并覆盖企微入口 项目工作台 涉密搜索边界,cd client && npm run test:e2e,manual,DONE,DONE,DONE,client/tests/e2e|client/src/pages/LoginPage.tsx|client/src/pages/ProfilePage.tsx|client/src/pages/ProjectDetailPage.tsx,"[""R23-3"",""R23-4""]",none +R23-6,试点制度文档与操作手册,把 24h 回填和项目收口纪律写入管理员与员工手册及 trialrun 文档,管理员和员工手册写入 24h 回填与收口规则 且 observation 模板同步,git diff --check,manual,DONE,DONE,DONE,docs/admin-handbook.md|docs/employee-quickstart.md|deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|deploy/trialrun/observation-template.md|docs/feature-matrix.md,"[""R23-3"",""R23-4""]",none +R23-7,回归与试点准入验收,完成后端 前端 E2E 全量回归并更新 R23 状态 作为进入真实四周试点的准入闸门,主回归 前端 build 与全部 E2E 通过 并可进入真实四周试点,cd server && npm run prisma:validate && npm test && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build && npm run test:e2e,manual,DONE,DONE,DONE,issues/2026-03-22_09-29-14-r23-trial-hardening.csv|server/scripts/regression-all.sh|client/tests/e2e,"[""R23-5"",""R23-6""]",none