ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes R18-0,R18-R22执行合同建档与边界冻结,创建并校验统一内部业务平台合同 CSV 并冻结企微仅作入口 通知 免登 项目进 OA 涉密正文离线的边界,CSV 校验通过且明确 R18-R22 串行实施范围与不做项,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-21_23-00-00-r18-r22-unified-internal-workbench.csv,manual,DONE,DONE,DONE,issues/2026-03-21_23-00-00-r18-r22-unified-internal-workbench.csv|issues/2026-03-21_12-40-00-r17-small-team-go-live.csv,[],默认采用企业微信自建应用 OAuth 账号绑定 本地密码回退 R18-1,企微配置与身份绑定底座,新增企业微信入口配置 特性开关和 WecomIdentityBinding 持久化 为后续工作台入口和免登提供事实源,支持读取企微入口配置 支持绑定和解绑企业微信身份 且默认关闭开关不影响现有登录,cd server && npm run prisma:validate && npm test,manual,DONE,DONE,DONE,server/prisma/schema.prisma|server/prisma/migrations|server/src/config.js|server/src/services/featureFlags/index.js|server/src/scripts/seed-config.js|server/tests,"[""R18-0""]",none R18-2,企微登录回调与 deeplink 统一化,实现 /api/auth/wecom/config login callback bind unbind 并扩展 deeplink 返回地址白名单与登录回退逻辑,员工可从企微进入 OA 回调失败时可回退账号密码 deeplink 能安全跳转到 OA 对应页面,cd server && npm test && ./scripts/regression-all.sh,manual,DONE,DONE,DONE,server/src/routes/auth.js|server/src/app.js|server/src/utils/signedUrl.js|server/tests,"[""R18-1""]",none R18-3,登录页 Portal 与个人页接入企微入口,在前端登录页 Portal 落地页与个人页加入企微入口和绑定管理 统一企微工作台默认进入 /portal,登录页可展示企微登录按钮 已登录员工可完成绑定解绑 企微工作台打开后默认进入 Portal,cd client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,client/src/pages/LoginPage.tsx|client/src/pages/PortalHomePage.tsx|client/src/pages/ProfilePage.tsx|client/src/api/auth.ts|client/src/router/index.tsx,"[""R18-2""]",none R18-4,企微脱敏通知与 R18 回归,把现有通知模板与企微通道收敛到脱敏策略 仅发送标题 状态 截止时间 责任人和 deeplink 并完成 R18 回归,企微消息不暴露金额明细 合同正文和高敏字段 且现有站内通知和 deeplink 零回归,cd server && npm test && ./scripts/regression-im-notifier.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,server/src/routes/notifications.js|server/src/services/notifications/imEnqueue.js|server/src/services/integrations/im/wecom.js|deploy/trialrun/.env.example|server/tests,"[""R18-2"",""R18-3""]",none R19-1,项目主档 Prisma 模型与开关,新增 Project ProjectMember ProjectMilestone ProjectTask ProjectRisk 枚举与模型 并接入 feature flag 与 seed,数据库可保存轻项目主档 成员 里程碑 任务 风险 且关闭开关时不影响现有业务,cd server && npm run prisma:validate && npm test,manual,DONE,DONE,DONE,server/prisma/schema.prisma|server/prisma/migrations|server/src/services/featureFlags/index.js|server/src/scripts/seed-config.js|server/tests,"[""R18-4""]",none R19-2,项目域后端 API,实现 projects members milestones tasks risks 的列表 创建 更新 归档接口 并补权限与审计,项目经理可维护成员 里程碑 任务 风险 员工可查看本人项目 管理员可归档项目,cd server && npm test && ./scripts/regression-all.sh,manual,DONE,DONE,DONE,server/src/routes/projects.js|server/src/app.js|server/tests,"[""R19-1""]",none R19-3,项目页与详情页前端,新增 ProjectsPage 与 ProjectDetailPage 接入项目列表 成员 里程碑 任务 风险视图 并加入主导航,员工可在 OA 查看本人项目 项目经理可在单页维护里程碑 任务 风险,cd client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,client/src/pages/ProjectsPage.tsx|client/src/pages/ProjectDetailPage.tsx|client/src/api/projects.ts|client/src/router/index.tsx|client/src/components/navigation/NavLinks.tsx,"[""R19-2""]",none R19-4,Portal 搜索与 R19 验收收口,把项目摘要接入 Portal 和全局搜索 并完成项目域专项回归,Portal 能展示我的项目 逾期里程碑 高优任务 风险摘要 搜索可命中项目编号 名称 客户简称 负责人 里程碑和任务,cd server && npm test && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,server/src/routes/portal.js|server/src/routes/search.js|client/src/pages/PortalHomePage.tsx|client/src/components/GlobalSearchDialog.tsx|server/tests|client/tests/e2e,"[""R19-2"",""R19-3""]",none R20-1,项目联动数据模型扩展,为报销 差旅 待办 周报扩展项目关联 并新增 WeeklyReportProjectLink ContractRegistry ProjectDeliveryRecord 模型,项目可成为报销 差旅 周报 待办和合同交付记录的统一关联键,cd server && npm run prisma:validate && npm test,manual,DONE,DONE,DONE,server/prisma/schema.prisma|server/prisma/migrations|server/tests,"[""R19-4""]",合同台账只存元数据 不存正文附件 R20-2,项目联动后端接口,实现 link-project 项目费用摘要 差旅摘要 项目周报 合同台账与交付记录接口 并补业务校验,报销和差旅可绑定项目 项目详情可汇总人 事 费 交付 周报和风险,cd server && npm test && ./scripts/regression-all.sh,manual,DONE,DONE,DONE,server/src/routes/reimbursements.js|server/src/routes/travelRequests.js|server/src/routes/weeklyReports.js|server/src/routes/todos.js|server/src/routes/projects.js|server/src/routes/contractsRegistry.js|server/src/app.js|server/tests,"[""R20-1""]",none R20-3,项目联动前端与合同台账页,在报销 差旅 周报 待办和项目详情页接入项目选择与联动面板 并新增 ContractsRegistryPage,员工可在现有流程里挂项目 管理层可在项目详情页查看统一执行面板 合同台账可维护元数据,cd client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,client/src/pages/ReimbursementsPage.tsx|client/src/pages/TravelRequestsPage.tsx|client/src/pages/WeeklyReportsPage.tsx|client/src/pages/TodosPage.tsx|client/src/pages/ProjectDetailPage.tsx|client/src/pages/ContractsRegistryPage.tsx|client/src/api/projects.ts|client/src/api/contractsRegistry.ts|client/src/router/index.tsx,"[""R20-2""]",none R20-4,R20回归与验收收口,完成项目与审批 出差 报销 周报 待办 合同交付联动后的整体验收,一个项目在 OA 内可查看人 事 费 交付轻量执行面板 且原有请假 报销 差旅 周报零回归,cd server && npm test && ./scripts/regression-workflow-actions.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build && npm run test:e2e,manual,DONE,DONE,DONE,issues/2026-03-21_23-00-00-r18-r22-unified-internal-workbench.csv|server/scripts/regression-all.sh|client/tests/e2e,"[""R20-2"",""R20-3""]",none R21-1,涉密资料引用模型与 API,新增 ConfidentialDocumentRef 与项目文档引用接口 并实现等级控制和查看审计,OA 可保存涉密资料目录 链接 归档位置和离线档案号 但不保存正文附件 且查看高敏引用会写审计,cd server && npm run prisma:validate && npm test,manual,DONE,DONE,DONE,server/prisma/schema.prisma|server/prisma/migrations|server/src/routes/confidentialDocRefs.js|server/src/routes/projects.js|server/src/app.js|server/tests,"[""R20-4""]",none R21-2,搜索与通知的涉密脱敏规则,对合同 项目 文档引用统一增加 confidentiality 过滤和脱敏规则 防止搜索与通知泄露敏感信息,confidential 和 restricted 级对象不会在搜索和企微通知中暴露正文 摘要全文 价格 成本 毛利或高敏客户细节,cd server && npm test && ./scripts/regression-im-notifier.sh,manual,DONE,DONE,DONE,server/src/routes/search.js|server/src/routes/notifications.js|server/src/services/notifications/imEnqueue.js|server/src/services/integrations/im/wecom.js|server/tests,"[""R21-1""]",none R21-3,公网访问安全强化,补齐公网模式下的安全配置与校验 包括 HTTPS CookieSecure 返回地址白名单 登录限流 弱密码拦截和关键会话校验,公网部署下可启用安全基线 企微免登和本地密码并存 且不需要把所有访问强制放到 VPN 后,cd server && npm test && ./scripts/regression-all.sh,manual,DONE,DONE,DONE,server/src/config.js|server/src/routes/auth.js|server/src/plugins/auth.js|deploy/trialrun/.env.example|server/tests,"[""R21-2""]",优先复用现有登录失败锁定与审计能力 不重写整套认证 R21-4,R21文档同步与安全回归,补齐 trialrun runbook checklist 和管理员手册中的公网安全与涉密边界说明 并完成 R21 回归,出差员工可公网访问项目过程数据 涉密正文仍离线且高敏访问边界和审计可追溯,cd server && npm test && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,deploy/trialrun/runbook.md|deploy/trialrun/checklist.md|docs/admin-handbook.md|docs/employee-quickstart.md|docs/feature-matrix.md,"[""R21-1"",""R21-2"",""R21-3""]",none R22-1,项目与合同台账最小导入方案,提供项目台账 成员分工 里程碑 合同登记 风险表的最小导入脚本和映射文档 支持 dry run 与 apply 两步,可把现有表格最小成本导入 OA 且涉密合同正文仍保持离线,cd server && npm test && node src/scripts/import-project-ledgers.js --help && git diff --check,manual,DONE,DONE,DONE,server/src/scripts/import-project-ledgers.js|docs/migration-mapping.md|deploy/trialrun/checklist.md,"[""R21-4""]",导入优先脚本化 不新增重型后台导入平台 R22-2,单平台默认路径与企微优先入口,把小团队默认配置切到 OA 单平台模式 企微作为首选入口 浏览器作为备用 并降噪重复主路径,员工默认从企微工作台进入 OA 浏览器仍可回退 采购 差旅 预算 AP 等不再干扰主导航路径,cd server && npm test && cd ../client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,server/src/scripts/seed-config.js|server/src/routes/systemWorkspace.js|deploy/trialrun/.env.example|client/src/components/navigation/NavLinks.tsx|client/src/pages/PortalHomePage.tsx,"[""R22-1""]",none R22-3,试点观测指标与运营证据,扩展现有 observation 导出与 Portal 摘要 支持登录覆盖率 周报提交率 团队状态覆盖率 项目任务更新率 里程碑按期率 多平台重复录入次数和表格替代率,可连续记录 4 周试点证据并导出管理层可读摘要,cd server && npm test && git diff --check,manual,DONE,DONE,DONE,server/src/scripts/export-small-team-observation.js|server/src/routes/portal.js|deploy/trialrun/observation-template.md|docs/admin-handbook.md,"[""R22-2""]",none R22-4,R22最终验收与关单收口,完成统一平台模式下的主回归 关键 E2E 试点证据汇总与 feature matrix 同步 并关闭本合同,连续 4 周试点证据齐全 员工日常只操作 OA 一个业务系统 企业微信只作入口通知 涉密正文不出公网 主回归与关键 E2E 全绿,cd server && npm run prisma:validate && npm test && ./scripts/regression-workflow-actions.sh && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build && npm run test:e2e,manual,DOING,TODO,TODO,issues/2026-03-21_23-00-00-r18-r22-unified-internal-workbench.csv|docs/feature-matrix.md|client/tests/e2e|server/scripts/regression-all.sh,"[""R22-1"",""R22-2"",""R22-3""]",建议新增 e2e:wecom-entry.spec.ts project-workbench.spec.ts confidential-boundary.spec.ts;真实 4 周试点与最终关单待现场执行;本地代码、回归与 E2E 已就绪