merge: 合入候选分支(09-17借款/ERP退役、09-18编号、09-19预算并发、完整10-05错误码迁移,均经确认)
# Conflicts: # .agents/skills/trellis-before-dev/SKILL.md # .agents/skills/trellis-brainstorm/SKILL.md # .agents/skills/trellis-continue/SKILL.md # .agents/skills/trellis-start/SKILL.md # .trellis/tasks/08-23-isolated-backup-restore-drill/design.md # .trellis/tasks/08-23-isolated-backup-restore-drill/prd.md # .trellis/tasks/09-05-error-explainability-payment-readiness/prd.md # .trellis/tasks/09-05-error-explainability-payment-readiness/task.json # .trellis/tasks/09-09-existing-deploy-seed-separation/implement.md # .trellis/tasks/archive/2026-09/09-05-trellis-upgrade-rule-cleanup/task.json # .trellis/workflow.md # scripts/qa/error-reason-legacy-baseline.json # server/src/routes/apOperations.js # server/src/routes/portal.js # server/src/routes/todos.js # server/tests/unit/fixtures/error-reason-messages.json # server/tests/unit/routes/apOperations.permissions.test.js
这个提交包含在:
@@ -1,5 +1,646 @@
|
||||
# Implementation Plan:错误可解释性与付款就绪治理
|
||||
|
||||
## B34 本地实现与回归回执
|
||||
|
||||
收尾交接入口为 `artifacts/qa-layout/import-parser-fix-20260917/review-candidate-r2`:仅打包本轮19文件增量、前后SHA、补丁及关键回执;旧G8/K0和历史验收包继续保留并作为引用输入。主会话检查见同证据目录 `main-session-review.md` / `final-verification-r2.json`,候选完整性见包外 `candidate-verification-r2.json`;三task上下文、Trellis/process/docs/敏感/diff与旧材料保护分别登记,不把包完整性或主会话检查冒充独立复核。独立内容复核PENDING、独立重跑NOT_RUN。
|
||||
|
||||
损坏账号导入已按限定方案实现:两个内存解析 await 映射真实库白名单异常为 user.import_file_invalid(400/VALID_001/file=invalid_format);未知异常固定为不带原内容/cause/自定义属性的内部 Error,生产回调继续 500/SYS_001。原文件读取、大小/格式/表头/行数、权限、preview、apply事务与真实哈希顺序保持;全局 error handler 未改。新增一个原因及客户端/固定文案映射。
|
||||
|
||||
最终 product-final-r3:2文件922/922通过,其中68项导入路由、854项原因/客户端合同(不是922个业务场景)。14个真实坏格式路由请求(两入口×7格式)均400、无业务访问或原错误日志;未知异常保持500且日志无合成单元格。合法CSV引号/换行、真实生成XLSX、日期文本/默认、CSV/XLSX 500与501行、原7文件原因及权限先拒通过。读取/DB/事务/哈希故障保留原分类,合法apply仍跑真实bcrypt。首轮23红例已留存;product-final初轮1失败为新增测试误认为apply预览在事务外,按原实现改为事务已进入1次,未改产品事务或削弱业务零写入断言。最终精确匹配再补非语法标点反例,原过程日志保留、不累加统计。
|
||||
|
||||
frontend-build(含typecheck、Vite/PWA)通过;strict为832注册/823迁移/17遗留、主链例外0/findings空,20组self-test通过;4 JS语法通过。旧Browserslist/punycode告警未扩治;17 ERP基线/到期信息未变。证据归 import-parser-fix-20260917;仅主会话本地验证,独立复核PENDING、未部署,后续门禁分类归09-06。
|
||||
|
||||
精确命令:`cd server && npm test -- tests/unit/routes/users.import.test.js tests/unit/scripts/error-reason-client.test.js --maxWorkers=1 --minWorkers=1`;`cd client && npm run build`;`node scripts/qa/check-error-reason-contract.mjs --strict` / `--self-test`。实际由本证据目录 run-local-check.py 在精简环境运行,未读取真实env/npm配置,完整命令与退出值见各command.json。
|
||||
|
||||
## 2026-09-17 B34 实施计划(用户已批准接续)
|
||||
|
||||
本轮先修复损坏账号导入,再切 09-06 对 58 条历史发布门禁观测作在用性分类。沿已批准本地边界执行,不启动 R1、生产/ARM、真实配置密钥备份、旧恢复或提交部署。考勤 D15 仍为非阻塞记录,旧/待精简代码不扩修。
|
||||
|
||||
- [x] B34-1:保护旧差异/冻结材料;核实际 ExcelJS/fast-csv/JSZip/saxes 的可识别格式错误,用真实 multipart 两入口补红例。
|
||||
- [x] B34-2:只在 CSV/XLSX 内存解析 await 处映射白名单格式异常为 400/VALID_001/user.import_file_invalid;未知异常改固定安全内部错误,仍 500。读取/权限/DB/事务/哈希不进入此 catch。
|
||||
- [x] B34-3:原因注册、客户端提示与固定文案夹具同批;坏格式无业务访问、未知异常不带原内容、正常 CSV/XLSX/日期/500行及原大小/表头/权限合同回归。
|
||||
- [x] B34-4:串行跑导入哈希回归及原因用例,再类型/构建、strict/self-test、语法与治理;记录新候选、旧材料保留和独立 PENDING,更新 09-08 协调入口。
|
||||
|
||||
证据目录 import-parser-fix-20260917;入口 169 份旧差异、5797 份旧材料及 HEAD/index 已建立保护基线。实际库版本 ExcelJS 4.4.0、fast-csv parse 4.3.6、JSZip 3.10.1、saxes 5.0.1。7 个真实库合成探针均拒绝;其错误均为无 code 的普通 Error,CSV 未闭合引号含合成单元格标记。按确切消息格式建立局部白名单,不能以包含 csv/xlsx 或任意 Error 作为 400 依据。
|
||||
|
||||
## 2026-09-17 考勤澄清后的当前执行口径
|
||||
|
||||
用户明确“考勤功能在企微”;已核现行产品规则和 AttendancePage 文案,日常考勤由企微承办,OA 保留摘要、解释、同步状态与审计。此前“统一考勤入口待年份规则决策”表述容易误认为还要开发 OA 考勤,在此更正。
|
||||
|
||||
D15 仅保留 OA 摘要查询极低年份的已知观测,不列本轮必修、不等待新的年份规则决策、不阻塞其余工作;既有工资待精简/旧打卡排除继续有效,不删除保留的企微汇总代码,也不标记缺陷已修复。B34 损坏账号导入仍是下一本地优先修复,尚未实施;D16 维持现合同。此次只追加任务说明,旧探针、冻结包、历史记录和产品源码保持。
|
||||
|
||||
## 2026-09-17 三类余项已确认,B34与D15分别规划
|
||||
|
||||
本轮按用户批准完成范围确认,不新增产品改动。新证据acceptance-boundaries-20260917,详见design顶部。9个真实Fastify/合成multipart探针使用AST提取的生产error handler回调及只记布尔的日志桩,不启动app/config/jobs;6个年月探针为真实helper,AP真实where构造保留deleted过滤。
|
||||
|
||||
- [x] B34损坏导入:两入口×三损坏格式共6例500、CSV两例logger收到合成单元格标记;响应无标记且9个探针全部DB调用0。已落安全错误映射/未知异常分流/合法兼容方案,尚未实施修复。
|
||||
- [x] D15低年份:0000/0001/0099偏移,0100/1900/2024正常。旧考勤已有年界/硬关闭、未用shiftMonth及工资待精简路径不扩修;保留统一考勤入口待年份规则决策。
|
||||
- [x] D16 AP:原合法反向ledger范围保留200/有界where,非法日期和pending反向仍拒绝;现有2文件73/73通过,不额外增加范围400。
|
||||
- [x] G8最新候选与K0候选作为两个独立主题交接,运行时输入保持;本轮只改任务/证据,独立结论仍PENDING。
|
||||
|
||||
探针初轮启动失败为本地未安装acorn,改用已有TypeScript AST;次轮把parseMonthRange误从route顶层取出,改为既有__testables导出后通过。只修本轮探针,原产品未变,失败与最终日志分开保存。当前结论是有缺口的行为确认,不是6个500已经修复;G8的503已处理/17排除口径保持。
|
||||
|
||||
## 2026-09-17 G8在用系统与集成合同(实施前)
|
||||
|
||||
入口785注册/778迁移/74遗留、73指纹。按用户最新取舍,ERP专用17处跳过,依据产品设计规则“OA不接ERP,未来也不规划ERP接入”和路线图37行,源码和指纹保留在skipped-obsolete.json。通用outbox支持notification.im,不能与ERP整体丢弃;其4调用及旧builder5处仍处理。其余52处位于实际注册、页面/API或核心服务消费者,普通开关不视为废弃。目标完成57在用/保留路径,不以0为目标;不擅自删旧代码或延基线期限。
|
||||
|
||||
新证据error-debt-g8-20260917,4884旧材料/139旧脏/HEAD/index保护。G7文档误写16 JS语法,实际syntax.log为17,包外在此更正,冻结包不回写。inline独立PENDING,不外联、不读真实配置密钥备份/附件,不提交部署或实施借款。
|
||||
|
||||
### B31保留的系统维护与共享守卫
|
||||
|
||||
配置读取2处与编号5处:enabled筛选、类型输入/不支持类型、指定分类不存在/不匹配/禁用归档;保留expense别名、报销旧序号优先、缺省分类回退/编号递增/原409。工作区2处只改PATCH schema;保留模块可见性规范化及原audit失败容忍。涉密索引4处按create/patch/query/开关解释,原直接UUID Zod保持,不新增权限/索引内容校验或读取真实资料。
|
||||
|
||||
切换route4+service1与迁移dry-run5:id/create/patch/开关、未纳入既有范围;保留关闭gate时放行、启用时按domain/department/entity任一匹配、startsAt逻辑、原创建/更新无新增audit。dry-run只合成multipart CSV,缺文件/类型,原无行或缺表头仍201带failed状态,不写业务主表。不是旧恢复重跑。
|
||||
|
||||
功能开关8处:key/page、update输入及global不允许departmentIds、batch输入/重复key、单/批次版本冲突;保留事务/乐观锁/逐项审计和env硬上限,不扩开关能力。费用预检5处:输入、服务不支持实体;保留权限及各域检查/风险规则;服务后置类型不可由已验路由触发,实际导出函数单测或静态标注。风险5处:query/id/action body、非open,原权限/resolve-dismiss状态及审计保持。
|
||||
|
||||
### B32鉴权与企业微信入口
|
||||
|
||||
auth插件1处不支持实体动作409;保持JWT、角色、资格、403和认证路径,只合成签名与mock人员可测,不代表生产认证。企微8命中:签名URL非法/带凭据/片段、输入、登录query/PC模式、缺入口配置与缺应用凭据、bind输入;保留同源403、原404/401与cookie/state/nonce/returnTo合同,不回显URL或凭据。所有provider一律mock fetch,无真实配置读取;配置入口仅要求corp/agent/redirect,缺应用凭据仍可产生登录跳转;回调取得token时才409。两守卫各自路由负例验证,无外联;URL构造catch因前置z.url不可达仅静态。
|
||||
|
||||
### B33通用消息队列与AI入口
|
||||
|
||||
仅outbox/list/detail/retry及bindings query,保留分页、权限、failed/dead_letter重试资格及审计;retry原只重置pending、不会直接执行投递任务;17 ERP原节点逐字保留。AI两处按三类对象id显式原因、未开放范围409固定提示,保留权限/缓存/provider/mock与脱敏,不接真实模型。页面现有安全resolver或明确错误态保持,不新视觉。
|
||||
|
||||
- [x] B31三方原因及实际路由/服务负例、合法与已有消费者回归。
|
||||
- [x] B32/B33合成鉴权/provider/队列/AI验证,不读取真实配置或外联。
|
||||
- [x] 精确减基线(保留17 ERP)、最终构建/治理/保护新候选,独立PENDING。
|
||||
|
||||
|
||||
### G8验证事实与保留事项
|
||||
|
||||
46新原因,56指纹/57命中精确退出,strict为831注册/822静态迁移/17遗留、17指纹/1源文件,主链例外0、findings空。余17全部为用户排除的ERP专用分支,verify-skipped逐字比对17构造体且最终基线恰等于排除清单。保留原owner/2026-10-05,不把旧分支当新故障、删除代码或默默延期。G1–G7无旧命中;G8本轮57处限定范围完成,扫描非全系统运行故障计数。
|
||||
|
||||
16源behavior-shape PASS,仅错误构造/import/显式原因参数。系统维护59用例通过;企业微信41用例通过(网络全mock);auth新增5例用真实JWT库与本地合成key/mock员工验证,不是生产JWT/真实人员。外部队列重试只改pending并审计,不即时发消息,原ERP_OUTBOX_RETRIED审计名保持不夹带改名。AI已有固定安全错误态/范围提示,不改UI或外联模型。
|
||||
|
||||
发现并记录双层校验:feature PUT Fastify先要求departmentIds,Zod默认不会越过该前置层;schema拒绝路径保留,不伪装内部原因覆盖。key通过无前置params schema的changelog验证;update输入用Unicode码点/UTF-16长度差异触发真实Zod后置限额,原限制不改。缺企微secret不会阻止登录跳转,回调token阶段才409;新增独立路由负例,配置入口缺corp另测。URL构造catch被前置z.url覆盖,只静态。
|
||||
|
||||
首轮系统测试误写URL/method、缺标准envelope、未满足前置JSON Schema,修正夹具后59全绿;企微旧exact详情断言和错误的secret阻断时点假设已纠正,未改产品门禁。最初迁移工具的21 calls日志实际含17显式skip,实际4迁移;后续脚本分开打印,ERP保留由逐字证据证明。阶段数不累加。
|
||||
|
||||
G8最终product-final为19文件1093/1093,含853固定中文映射断言;client-build-final的typecheck/Vite/PWA退出0,原Browserslist告警保留。阶段回归不与1093相加。命令精确参数/退出码及日志保存在本批product-final.command.json/log、client-build-final.command.json/log;本地19文件覆盖不代表整仓、生产、浏览器或独立验收。
|
||||
|
||||
G8收口:24增量JS语法、Trellis/process/docs与两task上下文、敏感/diff均通过;原22文档未登记告警保留。4884旧材料集合/SHA、HEAD/index保持;139旧脏131不变/8接续、31增量。候选error-debt-g8-20260917/review-candidate一次生成,承接G7及所有旧产品/规划输入;独立PENDING。完成上限为本轮限定错误合同本地候选,不提交推送部署归档、不改变官方current状态来虚报整个task完成。
|
||||
|
||||
## 用户最新取舍:在用路径优先(2026-09-17)
|
||||
|
||||
用户明确“旧代码或要精简的代码,不用解决”。从此不以AST清零为验收:已完成改动保留并完成必要验证;后续先核源码注册、页面消费与现行规约,确认FROZEN_CLOSED/弃用/计划移除者记录依据并跳过,普通feature-off不自动等同废弃。旧告警不为绿灯扩大治理。待删除代码不擅自删除、也不把未修计为完成;原基线期限不得静默延期。legacy网页考勤已在此前完成迁移,本次指示后不再扩补其测试或重开功能。G8按在用/保留/弃用重新分类后实施。
|
||||
|
||||
## 2026-09-17 G7查询考勤周报接续(当前入口)
|
||||
|
||||
G6完成并冻结;入口736注册/745迁移/116命中/114指纹,G7八源42处。新证据error-debt-g7-20260917;保护全部旧材料/差异/HEAD/index,inline本地合成,独立PENDING,原外联/配置/真实数据/提交部署/借款边界保持。
|
||||
|
||||
### B29考勤与在岗限定合同(实施前)
|
||||
|
||||
考勤路由9处+服务9处:各clock/month/team/policy/backfill/sync/sync-runs输入与两开关、免打卡日/未签到/补录空值与倒序、策略时间/容差/工时午休上下界及月年范围。保留原400/409、打卡幂等/当前时区、管理员补录允许仅退签/相等时间、31日同步与50员工限额。服务后置year/month、容差、datetime防御在路由已验输入下不可达,只实际函数验证或静态核对,不冒充路由覆盖。策略superRefine不能把新增reasonCode当业务字段错误;沿原字段集合转Zod。企业微信只桩provider,不外联或读配置。
|
||||
|
||||
在岗路由3处+旧共享builder1处:各日期/历史/管理员id与body输入、功能开关、已批准请假覆盖不可自行更改;原历史范围原因保留。迁移全部消费者后移除旧共享builder;管理员原覆盖规则、在岗优先级/可见范围与审计不变。
|
||||
|
||||
补充可达性:featureFlags中legacy attendance环境上限硬编码false,真实门禁测试必须继续409;后续legacy路由守卫仅在明确合成门禁桩下覆盖,不声称功能已开放。新增reasonCode从策略superRefine转字段错误时排除,避免引入伪业务字段。
|
||||
|
||||
- [x] B29三方原因/实际路由和服务负例、权限/合法/幂等回归及精确减基线。
|
||||
- [x] B30周报与只读查询/导出合同、实施和主会话产品回归完成;最终构建/治理与新候选见本批回执。
|
||||
|
||||
|
||||
### B30周报、审计、搜索与导出限定合同(实施前)
|
||||
|
||||
周报7处按保存/提交/query、开关、已提交只读、项目关联开关解释;保留默认周一归一、GET创建草稿及重复提交、20项目/文本限额,项目开关失败前原update已尝试,测试明确无后续项目删除创建,不声称PG回滚。审计2处与搜索3处保留日期倒序/分页、最少2字符/功能开关、权限和原可见性/敏感字段边界。
|
||||
|
||||
导出原8处(其中presence超限已在B29迁移)按各类query/body、仪表板时间倒序、AP待付款创建期间倒序、付款/项目开关、审计时间倒序解释;AP台账ledger反向期间原无拒绝不夹带新规则。默认格式/限额、权限/流式导出/成功审计与已有查询顺序保持。只用合成行生成CSV/XLSX,不读真实资料。所有泛化fallback改为调用点显式原因;不从details推断。
|
||||
|
||||
页面Attendance/TeamPresence/WeeklyReports/GlobalSearch已接resolver;AuditLogsPage三处仍拼原code/message,本批沿既有错误区改用安全resolver,保持交互和样式。
|
||||
|
||||
### G7产品回执与范围调整
|
||||
|
||||
49新原因、41指纹/42命中精确退出;strict为785注册/778静态迁移/74遗留、73指纹/16源文件,主链例外0、findings空,owner/2026-10-05不变。product-final 15文件1078/1078(含807固定文案),不累加阶段数。八源behavior-shape保持原schema/权限/状态/事务/读写,仅去错误构造/import/显式原因参数/已无消费者的可选原因分支;策略Zod收集排除新增reasonCode元数据。
|
||||
|
||||
legacy硬关闭真实门禁保持,39内部考勤用例含显式合成gate和真实共享函数,不代表正式功能开放。周报项目开关失败前原草稿create/update尝试仍在,测试断言无后续关联写入;mock事务不证明PG回滚。审计页面3处改安全resolver,其他页面已消费。
|
||||
|
||||
初轮B29一红为导出旧exact详情缺新增reason;合并首轮14红为在岗测试原无AppError envelope handler、发票导出测试路径写错,修正测试后1078全绿,产品门禁未削弱。用户最新取舍已纳入:后续停用/明确精简路径不再补修。已确认现行产品规则明确不接ERP,G8将保留ERP旧分支并单列,不以扫描清零为目标。
|
||||
|
||||
G7最终收口:client typecheck/Vite/PWA、16增量JS语法、治理与两task上下文/敏感/diff通过,旧22文档/Browserslist告警保持;4368旧材料与HEAD/index保持,133旧脏114不变/19接续,25增量。error-debt-g7-20260917新候选独立PENDING。
|
||||
|
||||
## 2026-09-17 G6审批与委托接续(当前入口)
|
||||
|
||||
G5完成冻结;入口693注册/699迁移/165命中/163指纹,G6四源49处。新证据error-debt-g6-20260917,3862旧保护材料与125旧脏、HEAD/index保持。现有inline边界下只做主会话检查,独立只读复核PENDING;除下方B28a恢复委托既有人物范围的条件组合缺陷外,不改变审批业务规则/权限模型/状态机、不外联或读取真实配置数据,不提交部署或实施借款。
|
||||
|
||||
### B26共享审批合同(实施前)
|
||||
|
||||
utils/workflow15处:流程步骤、业务角色/规则/空链、本人兜底角色及自角色/无可用角色、兜底空链、审批人规则/角色/指定员工/主管上下文/未知类型、主管链不可解析、最终解析防御。原400/409/details及审批快照优先级、财务本人CEO专链、主管解析/10层防御上限与跳过或阻断开关、自审批限制均不改,原已注册财务本人原因不重复迁移。兜底空链和invalid_resolved_assignee在现支持规则/分支下不可达,静态核对,不伪造路由负例;其他守卫由真实共享函数/消费路由回归验证。
|
||||
|
||||
### B27流程定义与审批规则合同(实施前)
|
||||
|
||||
workflowDefinitions11处(含builder)按id/entity、create/patch schema、功能开关、报销投影只读、已发布或归档只读、归档不可发布解释;不改变20步/版本/投影/发布和归档事务。approvalRules6处按create/patch schema、id、金额非有限/倒序、兜底角色、空修改解释;保留合并旧上下界校验、max=null原提前返回、角色白名单、优先级和锁/审计。兜底角色helper只接enum已验body,其错误仅静态覆盖。只换错误合同不修改审批规则,主会话验证不能代替独立审查。
|
||||
|
||||
- [x] B26共享审批三方原因、守卫与快照/执行消费者回归。9文件868/868通过,含B27已登记原因;阶段数不累加。
|
||||
- [x] B27定义/规则三方原因、真实Fastify负例和原合法/权限/冻结回归。3文件790/790通过。
|
||||
- [x] B28委托具体合同及实施完成,保持两组API原权限差异。
|
||||
- [x] G6最终合成回归/前端构建/strict/治理/保护和新候选,独立PENDING。typecheck/Vite/PWA、8 JS语法和治理/task/敏感/diff通过;旧22文档/Browserslist告警保留。3862旧材料与HEAD/index保持,125旧脏116不变/9接续,17增量。
|
||||
|
||||
|
||||
### B28委托合同与B28a范围组合缺陷(实施前)
|
||||
|
||||
delegations17处按legacy create/grant create、id、mine/grants query、有效期倒序、委托人与受托人自身冲突、grant委托人不可用、受托人不可用/缺代提交权限/缺审批权限迁移;validFrom/To后置NaN被严格datetime拦截,保留原因但仅静态覆盖,不收紧或扩展日期规则。保持默认scope=all/validFrom=now、两组API原system.users与system.settings撤销差异、已撤销幂等、角色权限解析及审计。
|
||||
|
||||
B28a发现明确组合缺陷:GET /delegation-grants普通用户baseWhere的本人OR被后展开的有效期OR覆盖,默认includeInactive=false时丢失人员范围。限定把既有baseWhere和原有效期对象放到AND中,includeInactive=true仍只保留baseWhere,管理员筛选不变;这是恢复原本存在的本人范围,不新增角色资格或扩大管理权。先用包含本人/他人、有效/将生效/过期/撤销的内存数据集经真实Fastify复现,再修复;同时测试默认/false/0、true/1、管理筛选及日期边界。没有访问真实委托或人员。此项从错误构造结构不变的结论中单列,独立只读内容复核仍PENDING。
|
||||
|
||||
- [x] B28错误合同和B28a红绿路由验证,保留两组API权限与撤销幂等。4个范围红例经AND组合修复转绿;34个委托用例通过。
|
||||
|
||||
B27页面消费补口:WorkflowDefinitionsPage原四种mutation无onError、列表失败显示空态。复用既有resolveErrorMessage和toast添加创建/保存/发布/归档错误反馈,列表沿现有红色文本样式显示安全提示,失败时不同时显示“暂无流程”;不新增视觉方案。ApprovalRulesPage/DelegationsPage已有resolver,保持。
|
||||
|
||||
### G6产品验证回执
|
||||
|
||||
43新原因,49指纹/49命中精确退出基线;strict为736注册/745静态迁移/116遗留、114指纹/24源文件,主链例外0、findings空,owner/2026-10-05保持。product-final为16文件1014/1014,含758固定文案断言,不累加阶段数。四源behavior-shape PASS,B28a查询组合修复单列例外;其他只改错误构造/import/显式原因参数。
|
||||
|
||||
原无审计的流程定义路由没有新增审计;两个审批后置防御、审批规则enum后置守卫及委托datetime后的NaN守卫不可达,只静态核对。主管解析保留10层防御,不声称遍历全链实测。B28a内存where matcher证明真实Fastify输入的范围组合,不能代替PG、真实认证或独立审查。页面沿既有样式显示安全失败反馈,不新增视觉方案。余G7 42/G8 74;日期低年份/AP反向期间/损坏导入解析、人工节点、真实业务/恢复及独立出口保持开放。
|
||||
|
||||
## 2026-09-17 G5采购资产合同接续(当前入口)
|
||||
|
||||
G4完成并冻结,入口562注册/599迁移/285命中/277指纹;G5七源120处。新证据error-debt-g5-20260917;3365旧材料(含G4新包)与116旧脏保护,官方current和所有本地/独立/真实数据/提交部署边界保持。为先验证共享builder和乐观锁错误合同,本组先合同与预算,再资产、流转/盘点、采购请求;不新增业务规则,不逐批请求授权。
|
||||
|
||||
### B22合同台账与采购预算先行合同
|
||||
|
||||
合同route10处+filter helper1处:create/patch/terminate/correction schema各明确原因;项目关联开关、通用版本冲突、已终止不可改、归档字段锁定、终止条件/并发、纠错状态/并发、续订条件保留旧400/409/details。原UUID直接Zod校验未纳入本批迁移,不改变其响应;终止字段不变量、状态守卫、必须事务审计和恢复归档规则保持。续订原先创建新草稿再抢原版本,冲突可有尝试create,内存事务不证明PG回滚。
|
||||
|
||||
采购预算3处含helper:重复占用和预算池缺失均保持409。前者写前拒绝,后者原先ledger.create后查池,保持失败无额度更新但有流水尝试。confirm只写流水,release预算池缺失原跳过额度修改并继续,均不新增拒绝。全src/tests追调用后移除旧helper/export;原只测helper构造的单测改为真实服务守卫及合法/幂等/缺池行为。
|
||||
|
||||
- [x] B22三方原因、真实Fastify/服务合成负例与既有合同导出/预算消费者回归。7文件696/696通过;15新原因,14处旧命中(含2个旧helper)待同批精确减基线。
|
||||
- [x] B23资产、B24流转/盘点、B25采购请求逐操作补合同后连续处理。
|
||||
- [x] G5最终定向回归、类型构建、strict、治理、保护和新候选,独立PENDING。
|
||||
|
||||
|
||||
### B23资产限定合同(实施前)
|
||||
|
||||
assets29处旧命中:分类/卡片id与list、领用人query、分类/卡片create/patch及脱敏索引导入schema、空修改;文本/哈希/metadata安全边界及逐导入项同类边界;单据分类/资产分类/公司/成本中心/领用人责任人保管人/已批准采购引用;写导入维度必填与目标不存在。按操作显式传原因,不回显敏感字段或索引内容;保留400/404/409及VALID_001(原找不到是VALID_001,不改SYS_404)。
|
||||
|
||||
索引导入原CONFIG_001写开关保持,只有测试进程合成env控制、无真实配置;先安全校验再开关/维度、dryRun优先于write、20项上限/哈希幂等/原审计和只导索引不导文件保持。编号/领用关系/ERP只经mock DB,失败无后续业务写入和成功审计。人员原因由角色调用方显式传入;未新增引用/启停或字段规则。
|
||||
|
||||
- [x] B23原因三方、路由负例/安全拒绝/原权限与正常分类卡片、脱敏索引dry-run/write/幂等回归。6文件698/698;33新原因。
|
||||
|
||||
### B24资产流转和盘点限定合同(实施前)
|
||||
|
||||
assetMovements11处:资产id、领用/归还/调拨schema、已报废归档禁流转、资产/人员不存在或不在职、已有领用/尚未领用、应走归还、无实际调拨变更。人员共用“接收人”原因,原字段employeeId/toEmployeeId保留;不修改先权限后输入、领用记录补建/关闭、状态和通知规则。
|
||||
|
||||
inventoryChecks14处:id/范围id、query、创建/记录schema、范围必填/公司成本中心不存在、盘点不存在、开始/记录/完成状态、资产范围不符、重复资产和缺失资产。保留404 VALID_001与409、location自由文本/all忽略scopeRefId、只查存在不新增启停。记录是逐项先验后upsert,后项重复/缺失/范围错误前可能已写前项,保留原事务位置;测试明确此尝试,不能统称失败零写入或PG回滚。
|
||||
|
||||
- [x] B24逐路由拒绝/原细节、无后续成功审计通知、合法领用归还调拨与盘点创建开始记录完成回归;通知/邮件/dispatcher仅直接协作者桩。2文件720/720,61操作用例与659固定文案断言;27新原因。
|
||||
|
||||
### B25采购申请与附件限定合同(实施前)
|
||||
|
||||
purchaseRequests52处含builder:id/附件id/list、PATCH/归档/附件下载删除schema、预检、数量/单价有限性与下限、公司成本中心供应商单据分类预算池引用/可用/归属、项目关联开关与归档、草稿修改提交/审批中撤回/已批准归档、流程缺失/可审批人、提交维度与明细必需、预算上下文/缺池、上传multipart/文件数量字段大小限额/缺文件/策略错误、下载理由和安全阻断。创建原不接受业务schema、空PATCH原允许、200明细/20归档文件保持;不添加“空修改”或创建必填规则。
|
||||
|
||||
金额原先更新主表、删除明细,再规范化数量/单价;非法有限数/数量低于0.01时已有尝试写删,保留原事务位置并断言无后续createMany/成功审计。单价负值被schema提前拦截,后置min=0防御仅静态覆盖;数量0字符串/0.001数字和巨大数字文本可实测。提交预算冲突前原重算总额写入和风险helper继续发生,不虚报零副作用。并发申请人变化仍映射原无审批人,不更改权限模型。
|
||||
|
||||
附件保留自定义安全message/status、旧details.reason和阻断审计;新增download_blocked不拼原文件内容。上传策略依据PurchaseAttachmentPolicyError的明确reasonCode白名单映射,不从任意details猜测;未知策略固定安全兜底,原unsupported_type原因保持。仅合成Buffer/stream与mock storage;流大小/数量/字段限额先后、历史内容复验、headers和成功审计要求保持,绝不读真实附件或配置。
|
||||
|
||||
- [x] B25原因三方、引用/状态/金额/流程/预算/附件逐分支负例与既有合法/权限/存储安全回归。附件/真实策略75/75;主流程修正测试夹具/旧exact详情断言后75/75。最终同输入合并回归另列。
|
||||
|
||||
### G5当前回执与余额
|
||||
|
||||
最终product-final为19文件1095/1095(含715固定文案断言),client-build-final含typecheck/Vite/PWA、15增量JS语法、治理与两task上下文通过。原Browserslist和22文档告警保留;3365份旧保护材料及HEAD/index保持,116旧脏103不变/13接续、本轮22增量。新候选error-debt-g5-20260917/review-candidate只生成一次,独立PENDING。
|
||||
|
||||
131新原因,精确删除114指纹/120命中;strict为693注册/699静态迁移/165遗留、163指纹/28源文件,主链例外0、findings空,owner/2026-10-05保持。G1–G5扫描范围均无旧调用,余G6审批委托49、G7查询考勤周报42、G8系统集成74。
|
||||
|
||||
七源behavior-shape PASS:仅排除错误builder/import、显式原因参数、采购附件白名单映射及保留message的阻断构造体(另有路由断言),原schema、权限、状态/副作用/事务结构保持。合同UUID仍直接Zod原行为;资产索引仍20条上限、采购200明细/20归档条目及空PATCH保持。
|
||||
|
||||
副作用例外已实测:预算缺池前流水尝试、合同续订冲突前新草稿尝试、盘点后项失败前首项upsert、采购金额失败前主表update及明细delete、采购预算拒绝前总额update和风险helper。测试按无后续操作/成功审计断言,不虚报全失败零写入或PG回滚。通知/审批/预检直接协作者桩和纯合成env不代表真实功能开放。
|
||||
|
||||
页面AssetRegistryPage/InventoryChecksPage/PurchaseRequestsPage及移动采购页面、ContractsRegistryPage/ContractRegistryWorkspacePage均已有安全resolver,无UI改动。初轮迁移工具遇自定义AppError省略属性名statusCode在源码写入前停止,补AST shorthand解析及保留安全message后迁移;原日志记账。B25两红例为新夹具缺合成projectLinkingEnabled、旧exact详情需追加reasonCode,修正测试后通过,未改变产品门禁。
|
||||
|
||||
## 2026-09-17 G4差旅接续(当前入口)
|
||||
|
||||
G3候选与全部证据已冻,官方current不变,入口508注册/544迁移/347命中/339指纹,G4七源62处。新证据error-debt-g4-20260917,旧包/差异/HEAD/index保护;inline本地合成,不外联、不读真实配置备份,不提交推送部署归档或实施借款。
|
||||
|
||||
### B19差旅申请先行合同
|
||||
|
||||
21处AST命中按list/id、create/patch/link-project输入、行程日期时间/倒序、金额、公司/成本中心可用性及归属、空修改、编辑/提交/撤回状态、必需行程、费用预检、工作流缺定义/可审批人、项目关联开关分别明确。保留原400/409/details,审批/预算/事务/锁/切换门禁和审计不改;未提交成功路径不发送通知。decimal helper两个消费者均min=0,负值已由schema拒绝,其后置负值防御只静态覆盖,不虚构路由负例;超大数字文本造成Infinity可在路由实证。
|
||||
|
||||
发现同入口真实缺陷:link-project调用未定义parseUuid,开关通过后必然500。限定替换为本文件现有parseTravelRequestId,补非法id400/无写入、合法id后原输入/404/权限守卫、绑定/解绑成功的合成测试。保留现有canReadTravelRequest范围,不新增项目关系或状态规则,不修改真实开关。
|
||||
|
||||
提交拒绝前可能调用原createRiskFlagsFromPrecheck;测试区分风险标记与后续编号/预算占用/审批/通知副作用,不把mock事务称真实回滚。现有日期/时区规范保持,只补原因不收紧兼容。
|
||||
|
||||
- [x] B19申请原因三方、路由负例和状态/预检/工作流/权限/合法回归,修复未定义id解析器。
|
||||
- [x] 后续B20执行/授权/交易与预算共享、B21对账先补具体合同后连续处理。
|
||||
- [x] G4最终合成回归/类型构建/严格基线/治理/保护及新候选,独立PENDING。
|
||||
|
||||
|
||||
### B20差旅订单、授权、交易与共享预算限定合同(实施前)
|
||||
|
||||
三路由21处加travelPayments2处:导入禁用共用原因,三类各自导入schema/规范化后空列表;授权/交易query;订单付款id/body、非可付状态、已付资料冲突、缺匹配结算交易;交易冻结建议id/body。保留100项上限、按条skipped与幂等、金额/币种精确匹配、付款锁/ERP排队门禁、冻结建议只是记录而非真正冻结,不外联ERP或支付。
|
||||
|
||||
共享预算只替换缺预算池的409,原helper全src/tests无外部消费者,迁移唯一内部调用后删除helper及导出。原顺序先ledger.create再查池再更新额度保持:缺池失败允许已尝试写ledger,测试确认无额度更新,不虚报零写入或真实事务回滚。已有路由消费者用mockDB回归,保留原调用事务边界。
|
||||
|
||||
- [x] B20原因三方、路由拒绝/无后续写入/ERP入队和已有导入/付款/冻结建议回归。
|
||||
- [x] 共享预算授权/冲正缺池及合法/重复/零额路径;结算原仅写ledger、不查池/改额度保持,精确扣基线。
|
||||
|
||||
|
||||
### B21差旅对账限定合同(实施前)
|
||||
|
||||
路由12处和共享服务6处:query/create输入、期间倒序、公司/成本中心缺失/归属、空范围、批次id/条目id、确认备注输入;服务为非草稿批次、条目非待确认/非已确认、自动匹配项不可重开、批次有未确认项。特别保留共享旧builder默认409,schema/id显式400,不能因换builder误降400;引用可用性原只检查存在,不新增启停/归档规则。确认/重开/汇总/结案及ERP outbox幂等和runNow语义保持;仅本地已有桩,不外联ERP。最后消费者迁移后移除共享旧helper及导出/import。
|
||||
|
||||
- [x] B21路由/服务原因和逐守卫负例、原快照/分类/确认重开/结案/ERP入队回归,保持拒绝后无后续修改/成功审计/outbox。
|
||||
|
||||
|
||||
### G4当前回执与余额
|
||||
|
||||
最终client-build-final含typecheck/Vite/PWA、12增量JS语法、Trellis/process/docs与两task上下文通过,原Browserslist和22文档告警保留。2915份旧保护材料精确集合/SHA及HEAD/index保持;109旧脏中97不变/12接续,本轮19增量文件。新候选error-debt-g4-20260917/review-candidate绑定本批输入,独立PENDING。
|
||||
|
||||
B19 5文件634、B20 7文件630、B21 4文件624通过;最终product-final为13文件764/764(含584固定映射断言),阶段数不累加。B19-link-before保留3个500红例;同一路由修复后非法id/绑定/解绑及后续权限、404、输入/开关验证通过。七源结构核对PASS,除该解析器修复外只有错误合同变更。
|
||||
|
||||
新增54原因,精确删62指纹/62命中;strict为562注册/599静态迁移/285遗留、277指纹、35源文件,主链例外0、findings空,owner与2026-10-05保持。G4七源已无本扫描器旧调用。TravelRequestsPage/TravelPaymentTrackCard/TravelReconciliationTab均已消费安全resolver,未增加视觉。
|
||||
|
||||
风险/副作用例外:decimal负值后置防御因schema与两个min=0消费者不可达,仅静态覆盖;超大数字文本Infinity有路由负例。预检/预算/审批/通知用直接协作者桩,提交成功不是完整流程实证;工作流缺失/无审批人前原风险helper仍被调用。授权/冲正缺池前原ledger.create已尝试,结算仍只记ledger;mock DB不证明事务回滚。
|
||||
|
||||
剩余G5采购资产合同120、G6审批委托49、G7查询考勤周报42、G8系统集成74,合计285。原日期低年份/AP反向区间/损坏导入解析及独立/真实业务/恢复/人工节点继续开放。
|
||||
|
||||
|
||||
## 2026-09-17 G3基础资料接续(当前入口)
|
||||
|
||||
入口405注册/477迁移/433命中/425指纹,G3余86。B11–B14已冻,新证据error-debt-g3-20260917;保护旧材料/差异/HEAD/index,inline本地合成,独立PENDING,原外联/配置/真实数据/提交部署/借款边界不变。
|
||||
|
||||
### B15公司、成本中心、单据分类与供应商先行合同
|
||||
|
||||
masterData的25处与suppliers的11处按实际操作迁移:四实体id/list/create/patch/空修改分别明确原因,不用泛化提示清零;重名/当前归档按实体明确。成本中心与供应商引用公司缺失/归档保持400/409;负责人缺失或非在职保留原not_found;父级自引用/缺失/归档/跨公司/循环及公司有成本中心、成本中心有子级归档守卫保持。schema/helper由调用点显式传reason,不从details反推。单据分类不是银行机构;编号规则/默认workflow字段含义不变,不改权限、冻结开关、默认值、大小写/null转换、查询/事务/审计、404和already_archived幂等。
|
||||
|
||||
- [x] B15服务端注册/客户端固定安全文案/夹具三方一致;精确减消失baseline。
|
||||
- [x] 新真实Fastify+mock DB测试覆盖四实体输入/id/重复/归档、所有引用/层级守卫、无后续业务写入/成功审计及合法create/patch/list/archive和幂等;P2002是桩,非真实PG约束/回滚。
|
||||
- [x] 核MasterDataPage错误消费;针对性回归/strict、结构检查通过后,接日历和费用/假别/项目模板;后续子批先补具体操作合同。
|
||||
- [x] G3最终回归/前端类型构建/治理/敏感/diff/保护对账及新冻结候选。
|
||||
|
||||
### B16节假日日历限定合同(实施前)
|
||||
|
||||
日历15处旧命中按id/list/create/patch/空修改、批量日期输入/重复日期、公司引用、编码重复、当前归档与默认日历绑定分别明确原因。复用公司引用原因;归档错误原details包含legalEntityCode保留,但UI只展示固定安全提示,不拼公司代码。保持原500项上限、合法日历日期校验、空数组清空、先验证再删除、事务及默认日历首次赋值;原timezone只检查文本格式,不借原因迁移收紧时区。公司/日历归档、404及归档幂等规则不变。
|
||||
|
||||
- [x] B16原因与真实路由负例/合法日期及默认绑定/归档回归;原403/400/409、无后续写入/成功审计断言、仅mock DB。
|
||||
|
||||
|
||||
|
||||
### B17费用标准、费用类型、假别和报销模板限定合同(实施前)
|
||||
|
||||
四源29处遗留:id/query及create/patch schema分操作原因;费用标准另正金额、费用类型缺失、部门范围缺部门/部门不可用、同类型范围冲突、空修改;费用类型另编码重复与空修改;假别另编码重复;模板另费用类型缺失/停用明细、空修改。保留原details/400/409,标准PATCH原合并范围语义、别名优先级和warn/block规则不变;类型requiresInvoice审计保持;假别半天额度/默认值/嵌套policy更新/普通用户只读启用项以及原允许空PATCH不变,不新增审计;模板50项上限、默认金额和禁用类型整批拒绝、软删除幂等保持。既有主链leave服务不改。
|
||||
|
||||
- [x] B17四源明确原因、三方文案、输入/分支负例无写入及既有合法/权限回归。
|
||||
- [x] 费用标准/模板和假别/费用类型页面核消费,严格基线精确扣减。
|
||||
|
||||
|
||||
### B18项目操作限定合同(实施前)
|
||||
|
||||
projects6处AST命中含共享helper,实际覆盖14个schema操作(项目/成员/里程碑/任务/风险/沟通各create/patch、收口项patch、交付create)、项目与6种子项id、5类开关、列表和豁免备注。为每个操作/开关显式传原因,保留权限/成员可见范围/沟通24小时窗口、状态与审计。日期schema原仅格式校验保持,不借本轮扩日历规则。
|
||||
|
||||
特别边界:收口项PATCH原先在校验itemId/body之前惰性初始化6项清单;本轮保持该顺序。负例断言无后续修改和成功审计,不能笼统称所有失败零写入;另专例证明原初始化仍可发生。已有清单时的失败无初始化写入。各开关仅合成配置/数据库桩验证,不改变真实配置或冻结规则,不冒称功能已开放。
|
||||
|
||||
- [x] B18按操作传入原因和三方文案,开关拒绝先于业务访问、所有schema/id与豁免备注负例及原项目回归。
|
||||
- [x] 项目原守卫/副作用结构核对,明确清单初始化例外、日期旧边界和UI安全resolver。
|
||||
|
||||
|
||||
### G3当前验证及余额
|
||||
|
||||
B15 2文件566、B16 3文件615、B17 5文件579、B18 2文件594均通过;属于不同阶段输入不累加。八源结构对照PASS,新增103注册原因;strict为508注册/544静态迁移/347遗留、339指纹、42源文件,主链例外0、findings空。精确删除86指纹/86命中,原owner/2026-10-05不变。G3所列八源无本扫描器遗留,仍不是全仓故障清零。
|
||||
|
||||
MasterDataPage/SupplierTab/HolidayCalendarTab/ExpenseStandardsPage/ReimbursementTemplatesPage/ProjectsPage/ProjectDetailPage使用既有安全resolver;假别写API没有现有页面消费者,费用类型客户端仅读取,不新增管理UI。项目测试保留先行bootstrap,普通失败无后续目标写入/成功审计;已有清单失败无初始化写入,空清单部分失败仍可初始化6项。不得将mock开关、P2002或内存事务说成真实配置/PG/开放验证。
|
||||
|
||||
最终product-final为8文件811/811(含530安全映射断言);前端typecheck/Vite/PWA、14增量JS语法、Trellis/process/docs、两task上下文通过。原Browserslist与22未登记文档告警保留。2482份旧材料精确集合/SHA、HEAD/index保持,98旧脏中88未变/10接续,本轮21文件增量;新候选error-debt-g3-20260917/review-candidate绑定输入,独立PENDING。
|
||||
|
||||
剩余G4差旅62、G5采购资产合同120、G6审批委托49、G7查询考勤周报42、G8系统集成74,合计347;继续按既有分组逐操作先落合同。低年份/AP区间/损坏导入解析及原人工/独立/真实业务出口保持开放。
|
||||
|
||||
|
||||
## 2026-09-17 B11与G2连续接续(当前入口)
|
||||
|
||||
用户明确批准继续处理剩余错误;官方current/session已核为本task,不采用注入no_task另建任务。入口317注册/398静态迁移/520命中/501指纹;inline实施/检查,旧证据目录与B10冻结包保护,新证据error-debt-b11-g2-20260917。全部原本地/真实数据/远端/提交部署/借款边界不变;分批只作内部检查点,不逐批索要继续。
|
||||
|
||||
### B11先行合同
|
||||
|
||||
- [x] services/budgetPool:6个旧调用归5原因:成本中心缺公司(创建和选池共用)、部门与公司/成本中心维度混用、公司缺成本中心、同成本中心多预算冲突、生效日期无效。保持原400/409/details及成本中心→部门→全局优先级、历史部门/全局多条取首规则和查询顺序。覆盖报销/采购/差旅、feeControl和AI建议调用方;不修改它们的业务守卫。
|
||||
- [x] budgetControlRules:id、query、create/patch输入、成本中心缺公司、费用类型仅报销6原因(原6个命中含构造helper)。保留PATCH原本基于本次body判断的行为,不以本轮原因迁移偷偷合并已有记录来改变规则;schema失败/作用域冲突在读写前拒绝。404/权限/默认值/归档幂等保持。
|
||||
- [x] 服务原因负例、预算真实路由负例、控制规则create/patch/list/archive、权限/成功审计及各既有消费者回归;三方原因文案与精确减基线同批。
|
||||
|
||||
### B12账号与B13部门限定合同(接续前落盘)
|
||||
|
||||
B11已通过8文件428项本地检查;接续B12迁移users的28处旧命中:id/分页、创建/重置密码策略、敏感资料输入/空修改/查看理由/银行不可用、部门与主管引用、自身停用/角色变更、P2002重复、三类批量输入/去重后50人上限、生命周期开关及自动密码生成防御失败。保持PERM_001与VALID_001区分(紧急管理员自身角色为原409,普通管理员仍403),原锁/会话撤销/凭据输出/事务和审计完全不变。密码文案固定安全要求,唯一冲突不展示数据库字段原文。自动生成失败用故障注入验证;hireDate后置防御在严格schema下不可达,沿已有update_input_invalid原因并明确仅静态覆盖,不构造虚假路由证据。
|
||||
|
||||
B13为departments14处旧命中:id/query/create/update/空修改、父级缺失/归档、当前归档、自引用/循环、归档时子部门/在职员工阻断共12原因。保持原400/409、事务内外位置及already_archived无重复写入审计,不改组织层级规则。employeeDirectoryFilters的旧builder导出经全src/tests调用搜索确无消费者,连同无用AppError import移除,1处归为无调用代码清理而非修复业务分支;现有目录/导出回归保留。
|
||||
|
||||
- [x] B12账号三方原因与逐操作负例,原权限/脱敏/创建修改/导入/会话回归;3个既有管理页面/对话框消费resolver不新增视觉。
|
||||
- [x] B13部门路由负例、正例和归档幂等,目录helper调用核对与导出回归。
|
||||
- [x] B12/B13精确减基线后接员工资料/档案(B14),不得把已有扫描归零冒称管理员或冻结功能已开放。
|
||||
|
||||
### B14员工资料、档案与上传限定合同(实施前落盘)
|
||||
|
||||
接续员工路由31个旧命中,按明确操作传入15种schema原因:HR主数据运行/列表、通讯录重试、合同create/patch/delete、培训create/patch、证书create/patch、档案修改和入职/转正/调动/离职;另注册id/功能与同步能力、四种日期区间、合同重复/活动合同不可删除、本人资料字段限制、头像与合同附件各7种文件失败。保持旧status/details、目录权限、日期/null规则、生命周期事件、删除理由、合同审计/存储事务边界;同步测试只用拒绝外联桩或已有mock fetch,不用真实配置。
|
||||
|
||||
上传补充与B6同类的漏口:生产app已有FST_REQ_FILE_TOO_LARGE→400/VALID_001/file=file_too_large映射,但request.file/toBuffer异常绕过路由原因。仅在员工两类上传的这两次读取处捕获该精确异常并追加所属文件过大原因,其余异常原样;头像2MiB/合同10MiB及原生产multipart上限保持。测试实际multipart限额、路由限额、缺失/字段/MIME/空文件/内容不匹配,在存储/业务写入/成功审计前拒绝,合法附件旧回归不变。不借迁移扩文件格式、替换安全检查或读历史附件。
|
||||
|
||||
补充核对:31命中还含一个自定义合同下载阻断构造器(并非通用helper调用);迁移为独立download_blocked原因时保留原安全message、409及attachment详情,保留原阻断审计,无附件头和文件字节返回。只用临时合成损坏文件验证,不读真实历史附件。
|
||||
|
||||
- [x] B14原因三方、显式schema调用、上传精确捕获及逐分支测试。
|
||||
- [x] 员工原日期/权限/资料/档案/附件/同步合成回归与无副作用断言;缺省库/开关守卫保持。
|
||||
- [x] B11–B14最终定向回归/前端构建/strict/治理,更新真实余额和新候选,独立PENDING。
|
||||
|
||||
### G2执行安排
|
||||
|
||||
B11验证后接账号管理(users)、部门(departments)、员工资料/档案/生命周期(employees)和目录内部helper。每个子批先补具体操作/旧status/details/调用方,保持去重后50人上限、批量导入整批拒绝、敏感字段权限与脱敏、锁与会话撤销、角色保护和原必要审计。不能为错误迁移改变审批或角色规则;不可达防御分支单独记录证据,不冒称路由实测覆盖。所有scope以本节逐批落盘合同为准,完整分组沿下方总表。
|
||||
|
||||
### B11–B14当前结果
|
||||
|
||||
连续完成预算共享/控制规则、账号、部门、员工档案及上传错误合同,新增88原因;精确删除76条消失指纹(87次命中),余额433命中/425指纹,50个源文件。G1/G2分组入口已无本扫描器遗留;其中employeeDirectoryFilters的1处是无消费者构造器清理,不记作业务故障修复。strict:405注册、477静态迁移、433遗留、主链例外0、findings空;原owner与2026-10-05不变。
|
||||
|
||||
product-final:22文件775/775,精确参数见同目录command.json;B11 428、B12 534、B13 40、B14 530为阶段输入,不累加。随后附件测试补强活动合同拒删/删除理由/原下载安全message的断言,attachments-final单文件26项为更新后测试输入;产品源码未变。六源behavior-shape检查剔除已审错误构造/原因参数/上传包装后,原守卫、读写参数、权限、事务结构与入口一致;上传精确捕获和下载安全message另由真实Fastify合成测试证明,不能视作独立审查或PG回滚证据。
|
||||
|
||||
账号自动密码失败通过合成随机源故障注入;hireDate后置防御在严格schema下不可达,只沿update_input_invalid静态检查,未声称其路由负例通过。员工HR/通讯录验证仅拒绝外联桩/已有mock fetch;合同下载阻断用临时合成损坏文件,保留必要阻断审计,未读历史附件。初次员工迁移脚本因发现额外自定义下载构造器数量不符而在写入前停止,补入保留message的合同后实施;没有改门禁来凑扫描数。
|
||||
|
||||
最终client-build-final含typecheck/Vite/PWA、15增量JS语法、Trellis/process/docs及两个task上下文通过;原Browserslist和22未登记文档告警保留。旧2091材料精确集合/SHA、HEAD/index保持;91旧脏中76逐字不变、15在本范围继续,本轮22文件增量。候选error-debt-b11-g2-20260917/review-candidate及主会话回执保留;独立PENDING。
|
||||
|
||||
剩余:G3基础资料86、G4差旅62、G5采购资产合同120、G6审批委托49、G7查询考勤周报42、G8系统集成74,合计433。下一按G3现有规划从公司/成本中心等主数据与供应商开始,先落具体操作原因和测试合同。原低年份/AP区间/损坏导入解析决策、09-25等人工节点、真实业务/恢复及独立出口继续开放。
|
||||
|
||||
## 2026-09-17 遗留546处治理总表与B10执行合同(当前入口)
|
||||
|
||||
针对用户“这500多处遗留错误怎么解决”,将剩余工作从笼统计数拆为以下8组。入口为292注册、375静态迁移、546次AST命中、526指纹、58源文件,主链例外0;54次命中在function:build构造函数内,并不等于54个独立问题。546描述旧式错误合同债务,不是546个运行故障;数量、原因码、操作和测试不得一一换算。官方current/session仍为本task;沿用同类本地治理连续授权,不要求逐批再次批准。
|
||||
|
||||
### 完整分组与执行顺序
|
||||
|
||||
以下按源文件归属互斥分组,数目仅作本轮入口基线;每组内先列操作→原status/details→守卫/副作用→原因→客户端消费→测试,再改代码。普通用户入口、管理员入口、冻结/内部入口必须分别标明,不将有源码等同已上线。
|
||||
|
||||
| 顺序 | 文件归属(routes除注明services/utils/plugins外) | 入口命中 | 执行方式 |
|
||||
| --- | --- | ---: | --- |
|
||||
| G1 预算与绩效 | budgets14、performance12、services/budgetPool7、budgetControlRules6 | 39 | B10先完成两个路由26处;剩13处共享预算范围/选池和控制规则另按调用方细化,不顺手改变额度或选池优先级。绩效维持system.settings管理员边界,经理/本人冻结不解开 |
|
||||
| G2 员工与账号 | employees31、users28、departments14、services/employeeDirectoryFilters1 | 74 | 分账号管理/资料档案/生命周期/部门引用四批;保持批量导入及部分失败、脱敏、权限和审计语义 |
|
||||
| G3 基础资料 | masterData25、masterDataSuppliers11、masterDataHolidayCalendars15、expenseStandards11、expenseTypes6、leave-types6、projects6、reimbursementTemplates6 | 86 | 按公司/成本中心、供应商、日历、费用/假别/项目模板四批;覆盖重名、引用不可用、归档/删除守卫,保留各开关 |
|
||||
| G4 差旅 | travelRequests21、travelOrders9、travelReconciliation12、travelAuthorizations5、travelTransactions7、services/travelPayments2、services/travelReconciliation6 | 62 | 申请、执行/授权、交易、对账四批;逐条失败保留合同,不改审批、金额、支付或对账状态 |
|
||||
| G5 采购资产与合同 | purchaseRequests52、assets29、assetMovements11、inventoryChecks14、contractsRegistry10、services/contractRegistryFilters1、services/purchaseBudget3 | 120 | 采购、资产、流转/盘点、合同四批;冻结功能只本地补错误合同,守卫继续先拒绝;不得为测深层分支开放真实入口 |
|
||||
| G6 审批与委托 | utils/workflow15、workflowDefinitions11、approvalRules6、delegations17 | 49 | 共享workflow、定义/规则、委托三批;先追调用方,状态/资格/权限有实质变化则另补方案和只读复核,不将未启用配置域视为上线 |
|
||||
| G7 查询与考勤周报 | attendance9、services/attendance9、presence3、services/presenceHistory1、weeklyReports7、exports8、audit2、search3 | 42 | 考勤/在岗、周报、导出/审计/搜索三批;attendance_v1永久关闭保持;按真实守卫顺序记录可达性,不用mock开关冒充产品开放 |
|
||||
| G8 系统与集成 | integrations22、plugins/auth1、wecomAuth8、confidentialDocRefs4、configRead2、cutover4、featureFlags8、feeControl2、migrationRuns5、riskFlags5、systemWorkspace2、ai1、services/ai/suggestions1、services/cutover1、services/documentSequence5、services/feeControl3 | 74 | 认证、系统配置、集成/迁移、共享服务四批;使用合成配置和拒绝外联桩,禁止读取真实配置或发送企业微信/AI请求;保留敏感错误降级 |
|
||||
| 合计 | 58源文件,文件互斥完整覆盖 | 546 | 约28个实施切片(含B10),切片按实际调用关系可拆合,不是工期或独立缺陷数 |
|
||||
|
||||
每批统一退出条件:①逐操作明确原因及恢复动作;②保持HTTP/VALID_001/原details,只增加reasonCode;③服务端注册、客户端安全文案、固定夹具一致;④实际Fastify路由/服务负例与合法回归,验证应拒绝时无后续业务写入/成功审计(原必要审计保留);⑤确认页面不会覆盖安全resolver提示;⑥只删除已消失指纹,新增/变更无原因调用仍严格失败;⑦新证据另存、旧冻结包/HEAD/index保持。构造helper在最后消费者迁移后才删除,不能删helper或基线来假装清零。未达分支逐项记录入口/原因/后续动作,不获永久豁免。
|
||||
|
||||
完成目标是所有可达操作有可靠错误合同,剩余内部/冻结分支有逐项处置且最终严格门禁无遗留;当前没有全量完成承诺。owner shunli与2026-10-05到期不变;09-25检查实际余额,09-30如必要只提出有理由/范围/新期限的单项延期,10-02查漏,10-05到期失败。未来人工节点未执行、未创建定时任务。低年份Date.UTC、AP反向区间、损坏导入文件解析异常是另外的开放边界,不能被本AST计数代表。
|
||||
|
||||
### B10 本轮限定方案(先落盘再实施)
|
||||
|
||||
仅修改budgets/performance路由现有VALID_001原因、对应三方文本、针对性测试和精确基线;不修改schema/权限/状态转换/事务/锁/范围和冻结策略。预算路由13个拒绝分支:id、列表、创建、修改、空修改、反向区间、部门不存在/归档、公司不存在/不可用、成本中心不存在/不可用/公司不匹配。绩效按id、创建/修改周期输入、评分输入、日期反向、功能关闭、已有活动周期(预检与P2002)、已结束不可改、活动周期仅可结束、草稿不可直接结束、非在职不可评分、非活动周期不可评分注册原因。parseBody由调用方显式传入已注册原因;删除两个无调用legacy builder及对应仅供测试的废弃导出。预算共享服务7处保持原合同,不能称完整预算域清零。
|
||||
|
||||
- [x] B10路由及三方原因映射;BudgetsPage、PerformancePage、EmployeePerformancePanel均已消费安全resolver,页面无需改动。
|
||||
- [x] 路由合成负例保留status/details并断言无后续写入/成功审计;功能和权限拒绝保持;P2002只为桩测试,不称PG并发实证。
|
||||
- [x] 相关日期/预算选池/采购预检/绩效既有回归及客户端固定文案、strict与self-test、前端构建和治理检查。
|
||||
- [x] 更新实际余额、协调入口与新证据/审阅候选;独立复核PENDING,生产/ARM/密钥配置备份/旧恢复/提交推送部署归档/借款边界保持。
|
||||
|
||||
本轮入口保存90旧脏文件、1730旧材料;新证据error-debt-b10-20260917。以下历史回执保持原时点。
|
||||
|
||||
### B10结果与实际余额
|
||||
|
||||
本轮新增25个原因(预算13、绩效12);两路由已无本检查器定义的legacy调用,只删除25个已消失指纹/26次命中。strict为317注册、398静态迁移、520遗留、主链例外0、findings空;501基线指纹,owner/2026-10-05全部原样。剩余G1=13、G2=74、G3=86、G4=62、G5=120、G6=49、G7=42、G8=74,合计520次/56源文件;debt-groups.json验证58个入口文件互斥完整覆盖。预算共享服务仍7处、预算控制规则6处,不以budget域显示0冒称整个预算链完成。
|
||||
|
||||
product-final为7文件414/414,包括新增真实Fastify+mock DB的40项、绩效周期/评分、日期消费者、预算服务、采购预算预检及339项客户端安全映射。初轮413/414唯一失败是新增夹具将既有feature reason误写为force_off,核实后改为flag_force_off,未改生产开关或业务判断。严格self-test20场景通过,包含新增遗留/指纹变化/过期/缺映射/敏感文案等拒绝;5个增量JS语法通过。精确命令和初次失败保留在本轮证据目录,测试数量不与旧575累加。
|
||||
|
||||
最终client-build-final含typecheck、Vite/PWA均退出0;两个task上下文、Trellis/process/docs/敏感/diff通过。原22未登记文档与Browserslist陈旧告警保留,不改依赖。90旧脏中79份字节不变,11份在本范围继续,新增1份测试,共12文件增量;1730旧材料精确集合/SHA、HEAD/index保持。新候选error-debt-b10-20260917/review-candidate的完整性以manifest及candidate-verification.json为准,独立PENDING。
|
||||
|
||||
下一切片为G1余13处:先按resolveBudgetScope→创建,selectBudgetPoolCandidate/resolveApplicableBudgetPoolByContext→消费方,以及budgetControlRules的输入/引用/作用域逐项补操作合同;在原范围/金额规则下迁移,不承诺整文件一次替换。再进入G2四批。其他日期/导入解析决策、未来人工复审和09-08其余W线开放状态不受本轮数量下降抵扣。
|
||||
|
||||
|
||||
## 2026-09-17 连续执行B6/D13/D14及公告提示(当前入口)
|
||||
|
||||
用户要求后续连续完成,不再把单批通过作为停点。本轮官方current已核为本task/session;入口保存81旧脏文件、1352旧证据/冻结材料(含上轮201 payload候选),新证据import-time-contracts-20260917。沿inline实施/检查,独立PENDING;原远端/真实配置数据/提交部署/恢复重跑/借款边界不变。
|
||||
|
||||
- [x] B6:账号导入7原因(文件过大、缺失、扩展名、MIME、缺表头、空文件、500行上限);request.file与toBuffer的FST_REQ_FILE_TOO_LARGE均映射现有生产400/VALID_001/file=file_too_large,保留其他异常。通过实际multipart dry-run/apply两入口验证拒绝早于DB/事务/审计,合法500行与原日期/默认/整批拒绝回归。三方文案不拼文件内容、原始文件名或未白名单字段。
|
||||
- [x] D13:核工资list/generate/issue、工资导出、统一考勤月份外部schema→后置解析。00/13已有400且发生在业务读写前,只补合成证据,不能按regex重复当缺陷。0000–0099因Date.UTC特殊映射涉及可用年份/DB兼容,单列下一限定决策;本轮不改变工资发放或存量年份语义,不改未使用的shiftMonth。
|
||||
- [x] D14:公告原ISO或日期T前缀schema加局部真实日历与有限Date判定,阻断非法日历和不可解析时间;保留有偏移ISO、UTC、无偏移本地时间、秒/毫秒及JS既有24:00滚动兼容,不更改时区解释/nullable/optional/原起止顺序(无新增区间规则)。3字段×create/patch非法无公告读写/审计,合法日期精确持久化,签收保护和权限回归。
|
||||
- [x] B7:顺同一公告入口补create/patch/ack输入、id、list、禁用、缺签收声明、已签后内容保护、不需签收、旧公告声明缺失原因;按旧status/details迁移,不改签收规则。PortalAnnouncementsPage既有创建onError消费安全错误映射,保存/归档失败亦给现有toast反馈,AnnouncementsPage签收失败同用既有安全映射,不新增视觉方案。
|
||||
- [x] B8:接续D13已实证的月份拒绝,迁移工资年月输入/后置月份、工资导出查询/月份、统一考勤月份查询/后置月份4原因;只给对应schema显式传reason,不改其他salary item/profile、旧考勤路由、日期和发放语义;补三方与原details断言及相关helper消费者回归。
|
||||
- [x] B9:工资维护剩余操作按同类授权连续迁移:薪资项create/patch输入、薪资档案输入、工资条修改输入、id、金额格式、薪资项重名/不存在、当月已生成/无活动员工/无启用薪资项/缺有效档案、已发工资条不可改、未生成不能发放/已全部发放。工资UI已经消费resolveErrorMessage,不需改界面;保留所有旧400/409/details(包括缺档案人员最小列表),只显示固定安全文案。补真实路由拒绝与无成功审计/无后续写入断言,P2002仅mock,不能称真实PG约束/回滚实证。迁移完成后移除无调用的本文件legacy builder,其他模块不动。
|
||||
- [x] 原因三方/精确负例/仅减消失baseline,定向服务路由与客户端映射测试;前端typecheck/build、语法/task/治理/敏感/diff,更新既有spec与09-08并保存新候选。阶段内自主修复失败并继续;仍需外部事实的出口真实列明。
|
||||
|
||||
### 连续执行验证回执与开放边界
|
||||
|
||||
最终产品命令product-serial-final为12文件575/575,精确参数见同名command.json/log;覆盖用户写入/列表/CSV/XLSX、公告、工资维护/导出、统一考勤、日期消费者、月份服务及客户端原因固定文案。前面的B6 31、公告364、月份53、工资391是阶段输入,不与575累加。product-final初轮540过/2失败均为CSV/XLSX三次密码哈希用例5000ms超时,当时与客户端构建并行;停止资源竞争后同用例串行1787/1880ms通过,未改超时阈值/密码算法/断言/业务守卫。原失败日志保留。
|
||||
|
||||
strict最终292注册、375静态迁移、546遗留、主链例外0、finding0。新增36原因,删除35条已消失指纹(36次命中),余526指纹;公告/工资路由均无本扫描器定义的legacy调用,其他域仍有债务,不能等同全项目迁移结束。owner/2026-10-05保持。
|
||||
|
||||
D13审阅结论:工资list/generate/issue/导出和统一考勤的00/13守卫已在业务读写前;保持规则,只补证/原因。month-year-probe用合成年月复现0000→1900、0099→1999、0100/2024正确的Date.UTC行为。该低年份问题仍开放:下一设计需定义可用年份(保留公历低年份还是业务年份区间)、对齐工资/考勤/导出/前端和数据库兼容,未读真实历史数据、未以源码探针宣称真实PG结果。不批量改共享日期转换或存量年月。
|
||||
|
||||
本轮最终前端client-build-final包含typecheck、Vite及PWA,退出0;原Browserslist告警保留。14增量JS语法、两个task上下文、Trellis/process/docs/敏感/diff通过,docs仍有原22未登记文件告警。1352份旧材料精确集合/SHA、HEAD/index保持;81旧脏有66份逐字不变、15份在本范围继续,另9份新触及/新增,本轮共24文件增量。主会话检查与完整输入归新候选import-time-contracts-20260917/review-candidate,其manifest绑定逐payload SHA;独立仍PENDING,不修改原task完成/归档元数据。
|
||||
|
||||
后续可连续处理的错误债务优先按已启用页面的下一操作组(预算/绩效、员工档案)继续固定旧status/details和无副作用断言;不以当前批通过要求用户重发“继续”。剩余546是AST命中,非546个独立bug。上传损坏文件/解析器异常尚非B6的7个已迁移分支;需要先确认库异常与安全错误合同再扩入。AP反向区间、低年份规则及原恢复/真实业务出口按各自决策/授权门禁。09-25/09-30/10-02/10-05未来人工节点不提前计完成。
|
||||
|
||||
本轮先落本节方案再实施。D13允许如实得到“已有守卫、补证完成”,不为凑改动新增工资年月限制;D14仅修不可用时间,原有效格式与业务规则保持。B7从已启用公告具体用户操作进入,动态文案仍只走安全映射。
|
||||
|
||||
|
||||
## 2026-09-17 接续D12/B5(本轮执行入口)
|
||||
|
||||
用户继续实施授权沿用;官方current已核为本task/session。入口保留77份旧脏文件与1022份保护材料、HEAD/index;新证据仅写hr-date-read-errors-20260917。inline实施/检查,独立复核PENDING;不外联、不读真实配置/人员/备份,不提交/推送/部署/归档,不实施借款。
|
||||
|
||||
- [x] D12:HR多格式入职日期复用日历谓词;保留分隔符、紧凑日期及秒/毫秒时间戳兼容。明确缺失与非法:缺失仍默认本次now;非法标记整条skipped/invalid_hire_date,固定安全提示,不落原日期。守卫在部门解析之前,dry_run/apply及离线sourceProfiles一致,不产生部门/员工/角色/绑定/主管业务副作用,保留运行/条目审计;现有员工仍不更新hire_date。
|
||||
- [x] D12合成验收:合法闰日/月末和多格式、非法溢出/年份/文本、缺失默认、已有员工、混合批继续;实际run服务+mock DB和fetch拒绝桩,无真实企业微信/PG验证。
|
||||
- [x] B5:限定7原因——员工目录查询/入职日期反向区间;合同查询/到期反向区间/即将到期days;在岗历史反向区间/超过31日。员工与合同导出外层schema使用相同域查询原因,显式传入parseQuery/parseBody,不按details猜原因。保持旧status/details、可见范围、7日默认/31日上限、导出格式;共享legacy写入helper保持。
|
||||
- [x] 三方原因合同与真实路由负例(含CSV/XLSX、外层schema、无查询/成功审计)同步;只删消失baseline指纹,不改owner/2026-10-05。
|
||||
- [x] 定向服务/路由/原因测试、客户端typecheck/build、语法/task/治理/敏感/diff;更新协调摘要/可复用spec,保护材料对账并另冻当前候选。
|
||||
|
||||
### 本轮已验证回执与剩余切片
|
||||
|
||||
- D12:d12-initial命令2文件44/44,其中新增完整同步服务38例;每项仅mock DB/sourceProfiles,fetch拒绝桩从未调用。非法条目仍有运行/item审计,不称“所有写入为零”。
|
||||
- B5:b5-initial命令9文件425/425;客户端固定文本/安全投影、员工两路由及导出、合同直接/导出/expiring、在岗直接/导出和旧admin守卫。export-regression另3文件72/72验证AP/仪表板/工资导出不受共享helper新参数影响。两次不冒称全仓/独立/真实PG或公网验收。
|
||||
- 前端:client-typecheck与client-build命令均退出0;build包含类型检查/Vite/PWA,保留原Browserslist数据陈旧告警,不升级依赖。
|
||||
- 原因strict:256注册、343静态迁移点、582遗留命中、主链例外0、finding0;导出两个动态helper已显式注册校验,不按静态计数虚增覆盖。7个消失baseline已移除,余561指纹,owner/2026-10-05不变。初次strict的两项未注册动态参数及7项stale提示日志保留;随后补注册校验并精确减基线,未放松扫描器。
|
||||
|
||||
下一批先按以下已定位范围接续,未实施项不标完成:
|
||||
|
||||
| 切片 | 源码事实与限定准备 | 实施/验收边界 |
|
||||
| --- | --- | --- |
|
||||
| B6账号导入文件错误 | users读取文件的大小、缺文件、扩展名、MIME、缺表头、空文件、超过行上限7分支;复用users.import.test.js | 先固定原400/details及multipart库实际拒绝顺序,再注册7原因与客户端安全文本/负例;不透传文件名/内容/表头原值,不改原行错误整批拒绝、dry-run审计和密码动态提示 |
|
||||
| D13月份输入审阅 | payroll PAY_MONTH_SCHEMA、attendance月份、exports payslip月份;payroll已有parseMonth后置校验,不能仅按regex算缺陷 | 先列外部schema→parseMonth/UTC转换→读写,确认00/13、默认月份、年份及导出兼容;未审前不改工资生成/发放/考勤语义 |
|
||||
| D14公告datetime审阅 | announcements DATE_TIME_SCHEMA存在ISO解析或日期T前缀兼容 | 先核客户端datetime-local转换和原时区/null/default,再定接受格式与真实时间合法性;不是将date-only谓词套到timestamp |
|
||||
| AP反向区间 | 列表/导出原无400守卫 | 保留现行为,若改变须单独业务验收;不以本批原因迁移新增业务规则 |
|
||||
|
||||
D1–D12所列日期切片的本地实现已补齐,D8是盘点不是产品补丁;这不代表全仓所有时间格式或历史DB异常已解决。错误债务仍582命中/561指纹;09-25/09-30/10-02/10-05人工节点未到且未执行。W1独立、W2交付、W3恢复、W4事件、W7自然业务及W8历史结案仍按09-08保持开放;借款T2–T4未实施。
|
||||
|
||||
本轮收尾:13个增量JS语法、两个受影响task上下文、原因strict、Trellis/process/docs/敏感/diff通过;docs保留原22文件登记告警,前端保留原Browserslist告警。21文件增量中77旧脏有60份字节不变、17份在本范围继续;另4份为新触及/新建源码测试。1022旧证据/冻结材料的精确集合/SHA、HEAD/index保持。新候选为hr-date-read-errors-20260917/review-candidate,manifest与逐payload SHA在该目录登记;主会话检查回执不是独立复核,独立PENDING。旧包仍可追溯,本轮不修改task完成/归档元数据。
|
||||
|
||||
本节先于源码修改落盘。D12是已规划外部日期同类补口,B5只改错误解释;不改权限/状态机/审批/金额/业务区间规则。datetime/月份及AP反向区间仍分开规划,不据测试结果扩大边界。
|
||||
|
||||
|
||||
|
||||
本轮最终收尾:4个受影响task上下文校验、19个增量JS语法、原因码strict、Trellis/process/docs/敏感和diff通过;docs仍为既有22未登记文档告警。537份旧证据/冻结材料精确集合与SHA保持,59份旧脏文件中44份逐字不变、15份按本轮范围继续增量,HEAD及真实index保持。本轮33文件增量已单独保存,主会话只读检查不计独立复核。当前累积产品审阅候选位于local-roadmap-execution-20260917/review-candidate;原K0/两个产品候选保持,独立结论PENDING。520和61分别绑定其命令输入,未声称整仓、真实PG、生产认证或公网验证。
|
||||
|
||||
|
||||
|
||||
## 2026-09-17 连续执行D5–D8与后续本地工作(本地实现/验证通过,待独立复核)
|
||||
|
||||
用户已批准按后期规划连续执行;官方current已回到本task/session。先完成D5–D7日期合同和D8源码盘点,再按可达操作处理错误原因批次;随后回到09-08补事件缺口方案、历史验收映射及借款T1技术定稿。新发现先补本节范围和验收,保持inline实施/检查,独立复核PENDING;不把用户此次授权扩大成生产/ARM、真实密钥/配置/备份、恢复重跑、提交/推送/部署/归档或借款产品实施。
|
||||
|
||||
- [x] 保存59份旧脏文件及旧证据/冻结材料基线,新增证据目录local-roadmap-execution-20260917,旧包不改。
|
||||
补充D5实测决策:CSV解析库会把合法YYYY-MM-DD先转成本地时区Date,再被现有normalizeImportCell转UTC,导致Asia/Shanghai下日期提前一天。导入字段合同均为文本,因此CSV读取显式保留原始单元格文本,后续继续原统一trim/角色/日期/重复校验;不重写XLSX原生日期转换。验收增加CSV/XLSX合法日期精确相等和文本标识前导零。预览原本写SYSTEM_USERS_IMPORT_DRY_RUN审计,保留此审计;apply非法整批拒绝不写业务/成功审计。初轮失败日志保留,不为测试移除原审计。
|
||||
|
||||
- [x] D5:users创建/修改/CSV与XLSX导入hireDate日历校验;保留缺省日期、修改省略、导入原批次语义;非法无写入。
|
||||
- [x] D6a:员工资料、合同、培训、证书逐字段日历校验与负例;保留nullable/optional和原区间冲突。
|
||||
- [x] D6b:入职/转正/调动/离职有效日期及附属日期;逐路由合成验证副作用前拒绝、正常日期和省略行为;不改生命周期规则或权限。
|
||||
- [x] D7:AP直接列表dateFrom/dateTo校验,与既有导出合同一致;反向区间先盘点调用方,本轮保持原规则并单列决策。
|
||||
- [x] D8:按外部输入/内部派生/历史DB值输出剩余消费者矩阵,新缺口先规划再动代码。
|
||||
- [x] 错误原因:先限定用户可达操作和旧status/details,服务端/客户端/夹具/路由负例整组迁移,仅删除消失指纹,原期限不变。
|
||||
- [x] 定向测试、治理、增量审查、资料保留对账和新候选;更新09-08协调入口及后续状态。
|
||||
|
||||
|
||||
D11细化事实:featureFlags.resolveEnvGate对旧attendance_v1固定返回false;team/admin backfill历史入口始终409 env_hard_off,不能通过测试夹具重新启用。共享schema仍加日历谓词,但实际路由验收记录为“禁用守卫保持、零业务访问”;只有attendanceUnified的WeCom同步请求及correction可测试400日历拒绝。未改开关规则、未恢复历史OA打卡。
|
||||
|
||||
D12进一步定位:当前HR主数据只在新建员工消费hireDate,已有员工update不改入职日;不是probation/lastWorking同步。本转换器非法或缺失返回null后创建会默认now,故不能只加日历谓词返回null就声称修复:下一方案必须把“未提供”与“提供但非法”分开,后者按单条同步失败/跳过留安全原因,前者保留既有默认。多格式/时间戳、create/dry-run一致性及零外联合成测试需同批;此项尚未实施。
|
||||
|
||||
### D10/D11继续执行清单(520轮之后)
|
||||
|
||||
按用户连续完成本地同范围工作的授权,先固定6源路由:payroll、budgets、performance、attendance、attendanceCorrections、leave;仅在各外部date-only schema增加真实日历谓词,不改服务转换器、月份/datetime、额度/状态机/权限/审批守卫。D10覆盖salary-profile生效日、budget创建起止、cycle创建/修改;D11覆盖team日期、管理员回填、WeCom同步请求起止(只合成拒绝,不外联)、correction workDate、leave创建/修改/预览/列表起止。新增date-consumers.calendar真实路由负例,原模块路由/服务正例与回归一起跑;预算新增合法闰日/月末和反向区间。所有输入应在业务查询/事务/外联前拒绝,feature/cutover读取按原顺序保留。D12多格式HR同步仍只规划。
|
||||
|
||||
- [x] 6源最小refine与逐入口无副作用用例。
|
||||
- [x] D10/D11及原模块定向回归,9文件61/61通过,不用上一轮520替代。
|
||||
- [x] 更新矩阵/协调状态、最终治理及候选;不重新执行已无输入变化的前端构建。
|
||||
|
||||
D10/D11回执:6源仅schema/refine/import,新date-consumers.calendar与两既有正例测试;最终9文件61/61,精确输入见d10-d11-final.command.json/log。初轮52过/9失败全部为新夹具未设置环境功能开关及对永久禁用旧入口误期望400;已按真实合同修夹具/409断言,未改featureFlags或开关代码。非法启用入口零业务调用/事务,旧入口409及零访问保持;合法薪资/预算/绩效闰日/月末、请假工作日/编辑/范围与考勤修正原审批回归通过。仍mock数据库,未实证真实PG回滚或外部同步。D10/D11实现状态覆盖D8表当时的“待后续”,D12继续待审。
|
||||
|
||||
### 本轮产品验证回执
|
||||
|
||||
D5/D6/D7三源及D9 dashboard共4个路由文件;CSV显式文本映射与日期谓词,B3/B4原因合同保持旧status/details和所有守卫顺序。17文件最终520/520(product-final.command.json/log),客户端typecheck/build均退出0。原因严格检查249注册/336迁移/589遗留、主链例外0、finding0;删除9条已消失baseline指纹后剩568条,owner/期限原样。新增employees.calendar与dashboard.calendar两测试,复用users.write/import与AP权限夹具,其余相关回归沿精确命令记录。
|
||||
|
||||
初轮日期测试109过/5失败:2条预览本来有审计、2条夹具没有输出details、1条CSV合法日期提前一天。修正夹具及实际CSV转换后14文件215通过。后续原因批369过/5失败为既有预期未含reasonCode及夹具新加空details,保留精确旧字段并更新预期后最终17文件520通过;没有改业务守卫使测试变绿。各轮不累加为独立或全仓覆盖。
|
||||
|
||||
### D8源码盘点及同范围后续切片
|
||||
|
||||
本轮检查routes/services中的date-only正则、parseDateOnlyString、resolveEffectiveDate、new Date转换及各外部schema。分类用于确定后续合同,不是全库漏洞数量;原始源命中只存本轮脱敏证据,未查数据库历史值。
|
||||
|
||||
| 分类/切片 | 消费者→转换→后果 | 处理与验收 |
|
||||
| --- | --- | --- |
|
||||
| 已守卫外部 | B1/D1–D7所列报销/付款/差旅/合同/采购/待办/用户/员工/节假日/在岗/导出 | 保留原独立与本地证据边界;不改共享转换器 |
|
||||
| D9 仪表板只读同类补口 | dashboard四GET共用query→UTC上下界→聚合;导出已有守卫而直接读尚缺 | 先日历refine,再保留原反向区间400;新增dashboard.calendar测试覆盖四路由非法零查询、正常UTC边界、省略与403。与下述B3一起执行 |
|
||||
| D10 薪资/预算/绩效 | payroll salary-profile effectiveDate;budgets新建periodStart/End;performance cycle create/patch start/end→生效记录/预算周期/绩效周期 | 待后续限定批:分别复用salary-profile、cycles测试,预算新增聚焦路由;非法不得事务/审计,旧区间和状态守卫原样;不改金额、YYYY-MM或周期推进 |
|
||||
| D11 考勤/修正/请假 | attendance DATE_SCHEMA及parseDateOnly、attendanceCorrections workDate、leave create/edit/preview/list日期,services/leave normalizeDateOnly→考勤与额度 | 待后续限定批:列所有外部消费者后按考勤/请假拆分;无打卡/回填/审批/额度副作用负例,保留datetime/session/工作日计算;不以正则替换代替请假额度回归 |
|
||||
| D12 外部HR同步 | integrations/wecomHrMaster parseDateOnly多格式/紧凑/时间戳→新建员工hireDate(已核现有update不改此字段) | 待本地合成方案,明确非法字段整条/单字段跳过及审计;不访问企业微信或读取真实人员payload,不把normalize等同校验 |
|
||||
| 待审其他格式 | announcements DATE_TIME_SCHEMA兼容前缀、各YYYY-MM月份输入 | 超出date-only本批;分别确认时区/旧兼容与月份范围,再补限定方案,不改宽泛共享解析 |
|
||||
| 内部派生 | portal/currentDateString、employeeStats月初、attendance按年月推导、feeControl内部日期差 | 上游生成或派生,不逐个认定外部缺陷;与未校验外部链分开 |
|
||||
| 历史DB值 | financeLedger输出、employee档案既存日期、invoice/OCR既有日期转换 | 只读源分类;未盘查/修复实际历史值;将来只允许有范围的聚合异常计数 |
|
||||
|
||||
D7区间决策:ApOperationsPage将ledgerDateFrom/To直接发送列表和导出,两个入口原来都没有反向范围400;本轮固定保持旧行为并有回归。若统一拒绝,需要另批同时改列表/导出及界面提示,不能仅改financeLedger共享构造器。
|
||||
|
||||
### B3/B4限定原因合同(本轮执行)
|
||||
|
||||
B3:dashboard查询/反向区间及AP列表查询/功能未开,共4原因;B4:users创建输入、修改输入、工号不可改、空修改及导入错误行,共5原因。仅用buildBusinessValidationError增加reasonCode;原VALID_001、status、details字段、权限/开关/事务顺序保持。服务端注册、客户端固定中文与fixture同步;真实注入断言精确reason与旧details及无业务副作用。导入错误详情不透传到客户端拼接文案,不引用密码/员工资料。原已有动态密码提示不动。只删除实际消失AST指纹,不统一延长期限;未修改权限模型/审批状态机。
|
||||
|
||||
## 2026-09-17 后期治理计划D5–D8与错误债务(仅规划,未实施)
|
||||
|
||||
用户本轮要求详细整理后期工作及剩余量,协调current已切回09-08。D1–D4完成事实与冻结证据不变;本节仅把原“其他日期消费者”落实为3组已定位入口加1轮源码盘点,不据此开始新产品改动。后续各批批准后回到本task实施,原全量验收/借款/远端边界不变。
|
||||
|
||||
### 日期剩余工作:4个计划批次
|
||||
|
||||
| 批次 | 本轮只读确认的入口 | 限定方案与验收 | 依赖/预计投入类型 |
|
||||
| --- | --- | --- | --- |
|
||||
| D5 用户创建/修改/导入 | routes/users.js的create/patch hireDate及CSV每行hireDate仍仅regex;部分末端只拒绝Invalid Date,不能拒绝二月溢出 | 先分别锁定创建缺省日期、修改省略、导入空值/默认与逐行错误合同,再加日历谓词;非法直接输入无用户/角色/审计写入,非法导入按原行错误/批次语义处理,不把已有允许的部分导入改为整批失败 | 待批;复用users.import.test.js,直接写入新增聚焦路由用例;不执行真实员工导入/同步;中等 |
|
||||
| D6 员工资料/生命周期/档案 | routes/employees.js共享DATE_SCHEMA用于profile的hireDate/probationEndDate/lastWorkingDate,入职/转正/调动/离职effectiveDate,合同start/end/terminatedDate,培训start/end、证书obtained/expiryDate | 先形成逐路由矩阵,再按资料/档案与生命周期分子批;保留nullable/optional、结束/开始语义、历史生效约定、权限/事务/审批顺序。非法日期必须在资料、角色/部门、checklist、审计和企业微信任务副作用前拒绝;合法边界与原冲突回归 | 待批;复用employees.patch/profile/training/certificates及既有生命周期测试,缺失用例实施前登记。只用合成身份,企业微信/外联为零;中等且需多子批,不直接替换共享schema后笼统宣称全过 |
|
||||
| D7 AP台账查询与反向区间 | routes/apOperations.js直接查询dateFrom/To仍仅regex;services/financeLedger.js只是转换,D4仅硬化exports入口;台账反向区间原未拒绝 | 先统一列表与导出的date-only输入合同;日历溢出无业务查询/审计。反向区间是否统一400必须核现有UI/调用方及验收后单列批准,再选最小共享入口,保留原权限/可见范围及正常查询结果 | 待批;复用apOperations.permissions和exports.apOperations,加直接查询合法/非法边界;不先改财务数据或金额/付款状态;小至中等 |
|
||||
| D8 其余日期消费者源码盘点 | 上述已定位集合不是全仓穷尽,shared parser及其他转换器仍有未审消费者 | 只读列外部schema→转换→副作用链,分类为已守卫外部、待审外部、内部派生、数据库历史值;每个新发现给路由/字段/风险/定向用例再决定独立批次。历史异常只做以后可申请的聚合盘点方案,本轮不读真实数据 | 待执行的本地调查,范围可先固定;产出写本task,不新建任务/文档系统、不把代码匹配数当漏洞数;实际规模待盘点 |
|
||||
|
||||
以上4批是当前可规划的工作量单位,不等于只剩4个日期字段或4个bug。D6可能按真实消费者继续拆分;D8可能发现新边界,届时增量评估,不修改共享parseDateOnlyString来掩盖未审调用。当前不创建新测试文件或运行产品测试。
|
||||
|
||||
### 错误合同剩余工作与进入条件
|
||||
|
||||
引用D1–D4已执行error-contract.log:240注册、327已迁移、598遗留、主链例外0、finding0;本轮只读核baseline为577 entries/count598,owner全shunli,expiresOn全2026-10-05。58个有遗留的扫描分组;前十purchaseRequests52/users40/employees31/assets29/masterData25/integrations22/travelRequests21/attendance19/payroll18/travelReconciliation18,共275,其余48组323。这里按扫描器分组统计,不把服务与路由重复当作独立产品模块。
|
||||
|
||||
- [ ] 下一原因批先按当前已启用/用户可达操作选路径,优先用户实际可操作且缺安全恢复指引的分支;不能只因某文件命中多就整文件替换。每批固定操作、旧status/details、固定/动态文案与不允许副作用,再审阅实施。
|
||||
- [ ] 服务端原因、客户端窄投影/中文夹具、真实Fastify操作负例作为一组交付;修改权限/状态机/审批资格则退出文案范围另审。
|
||||
- [ ] 只从baseline移除实际消失指纹,不能删仍命中条目或统一延长2026-10-05。workflow工具15项与workflowDefinitions配置11项分开处理。
|
||||
- [ ] 09-25实际重新扫描及复审,09-30必要条目的有理由延期提案,10-02查漏,10-05原门禁;本节统计不抵扣这些未来动作,也没有创建自动任务。
|
||||
|
||||
现有K0/产品独立复核、提交与发布、密钥/恢复、备份事件、自然业务、历史task映射和借款依赖归09-08最新W1–W9表。本次只有后续计划新增,下方D1–D4和B1/B2验证回执原样保留,不能将本节待办状态倒推为已完成批次又未实施。
|
||||
|
||||
## 2026-09-17 D1–D4本地通过(最新入口,待独立复核)
|
||||
|
||||
用户在上一轮已完成B1/B2并补齐D1–D4规划后要求“继续推进”;据此承接这四个同类本地日期批次,沿本task实施,不扩到K1/K2真实操作或借款。官方current回读仍为本task/session,忽略注入no_task。09-25等人工复审节点仍未执行,今日提前推进代码不计其已完成。B1/B2及K0审阅候选原字节保持,独立审查仍PENDING。
|
||||
|
||||
- [x] 复核D1–D4真实消费者/原语义,保存所有旧差异与既有证据目录的文件集合、SHA、HEAD/index基线。
|
||||
- [x] D1:todos创建/修改dueDate在原regex后增加isValidDateOnlyString,nullable/optional和指派权限顺序保持;测非法无读写/通知、有效闰日/月末、null清空/省略保留与原403。
|
||||
- [x] D2:employeeDirectoryFilters与exports员工schema同步校验hireDateFrom/To;测试/users和/employees真实路由与CSV/XLSX导出,非法无员工查询/审计,合法UTC上下界/省略、原反向区间400和权限保持。
|
||||
- [x] D3:masterDataHolidayCalendars整批items日期先验后事务;混入一条非法日期整批拒绝,零delete/create/audit;重复日期409、归档409、无权限403及空数组清空合同保持。仅mock边界,不伪称PG回滚已验。
|
||||
- [x] D4:逐字段修改exports仪表板dateFrom/To与AP pendingCreatedAtFrom/To、ledgerDateFrom/To;保留原DATE_ONLY_SCHEMA、在岗局部校验、审计datetime及工资YYYY-MM,不统一替换所有schema。测非法无业务查询/导出审计、有效闰日/月末/省略及原pending反向区间400。
|
||||
- [x] 跑本批路由定向Vitest和utils/date,并回归上批同文件相关用例;语法、原因码strict、task/Trellis/process/docs/敏感/diff门禁、差异与保护材料对账;保存新审阅候选。
|
||||
- [ ] 独立只读复核、提交/推送/发布另列真实结果,当前不具备授权或结论。
|
||||
|
||||
源码复核细化:AP台账ledgerDate反向区间原来未设置拒绝守卫,本批只校验两端是否真实日历日期,不借输入修复新增区间业务规则;此项另列后续审阅,不宣称所有范围语义已收口。员工目录共享服务同时被/users和/employees消费,纳入同组回归;不修改用户管理其他资料写入/导入日期。
|
||||
|
||||
预计产品变动仅4文件:routes/todos.js、services/employeeDirectoryFilters.js、routes/masterDataHolidayCalendars.js、routes/exports.js。测试复用users.list、exports.employees、exports.apOperations,新增todos.calendar、masterDataHolidayCalendars.calendar与exports.dashboard.calendar。最终命令/结果写入`artifacts/qa-layout/calendar-followup-d1-d4-20260917/`,不覆盖上轮followup-governance-20260917。本批不改客户端映射/依赖/schema,不重复前端构建或此前450项整批;必要重跑以实际新改动和失败为据。
|
||||
|
||||
### D1–D4本地验证回执
|
||||
|
||||
产品改动仅上述4个文件的日期谓词串接及3个import;共享日期转换器、导出基础DATE_ONLY_SCHEMA、审计datetime、工资月份、权限/业务守卫/事务代码均保持。已完成主会话增量源/test审查;非法日历日期不会开始节假日清空/新增事务,也不会触发待办写入/通知或三类导出业务查询/成功审计。nullable/optional、UTC上下界、原重复日期409、归档409、无权限403、已有反向区间400及空数组清空行为均在定向路由用例验证。
|
||||
|
||||
最终同轮命令为server目录下`npm test --`逐项传入todos.calendar、users.list、exports.employees、masterDataHolidayCalendars.calendar、exports.apOperations、exports.dashboard.calendar、todos.errors、exports.contractsRegistry、exports.presence、payroll.exports、utils/date共11文件,参数`--maxWorkers=2 --minWorkers=1`;192/192通过(31.90秒)。准确路径/退出码归新证据目录combined-tests.command.json及combined-tests.log。3份新增测试、3份既有测试追加,包含上批同源回归和共享日期用例,不计为192项全新测试,也不与450累加为全仓覆盖。本次首轮通过,无夹具失败需修订。
|
||||
|
||||
10个本批源码/测试文件node --check退出0。原因码严格检查PASS:registered240/migrated327/legacy598/primaryExceptions0/findings0,基线及所有owner/expiresOn未改。测试仍使用Fastify注入、合成身份和mock DB,不宣称真实数据库事务回滚、生产认证/浏览器或公网已验证;客户端未变,不重复typecheck/build。
|
||||
|
||||
### D1–D4治理与输入保留
|
||||
|
||||
09-05/09-08 task上下文、Trellis治理(23项合同/1242份扫描/14份已登记证据摘要)、process baseline、CURRENT敏感扫描30份/finding0、git diff --check均通过。docs registry零错误,保留1项既有告警(22份未登记文档)。仅更新既有日期规约,不扩大无关清理;客户端/依赖/数据库schema未变,因此不重复前端构建、Prisma或真实DB验证。
|
||||
|
||||
进入时51份旧差异中,仅计划内8份源码/spec/task文件继续增量更新,另43份逐字不变;所有旧任务正文保留,09-05元数据仅notes更新、借款task四文件及planning状态未改。308份既有证据(四恢复包、K0证据及上一轮followup-governance全目录)精确集合/摘要保持,HEAD与真实index保持。本批增量16文件:4源、6测试、1spec、5task文档/摘要;本地对账另证明4源增量仅限定schema refine/import,无业务守卫/事务变化。
|
||||
|
||||
新目录保存incremental.patch、changed-files.json、preservation-result.json、result.json及review-candidate的manifest/逐文件字节SHA。候选绑定上一轮审阅manifest并只覆盖本轮更新输入,现有依赖不打包;必须在同树/匹配输入下重跑精确命令,不能把候选完整性称为独立复核或独立执行通过。主会话inline执行/检查,独立状态仍PENDING。本轮全程仅本地,无生产/ARM访问、真实资料/密钥/配置/备份读取、恢复重跑或提交/推送/部署/归档。
|
||||
|
||||
### 后续入口
|
||||
|
||||
- [ ] 接回K0、B1/B2与D1–D4的真实独立只读结论,分别记录候选摘要/实际重跑,不在inline模式派代理冒充独立身份。D1–D4更改了todos/exports当前输入,新审阅需使用新候选这两文件并联读前批原因码改动;旧候选不回写。
|
||||
- [ ] 09-25按实际AST和可达操作复审剩余598次错误豁免与其他日期消费者;员工资料写入/批量导入及AP台账反向区间规则先核原合同、兼容与业务口径,再给限定批次方案。不将此轮四批收口称全部日期安全。
|
||||
- [ ] K1双角色受控保管状态待事实,实际核验仍NOT_TESTED;K2新绑定未具备,借款仍planning。原自然业务/备份事件验收缺口保持,当前不进入远端或真实数据操作。
|
||||
|
||||
## 2026-09-17 B1/B2本地实施回执(当前入口,未提交/部署)
|
||||
|
||||
用户批准按既有梳理继续;官方current已通过task.py start从08-23切到本task并回读。旧差异、四份恢复冻结包及K0证据已保存基线。本节是本轮新结果,旧日期/提示批次与526项独立证据保持原范围,不计为新通过。
|
||||
|
||||
- [x] 重盘点AST与本批日期消费者:进入时229注册、316已迁移、612遗留、591条基线entries、主链例外0。
|
||||
- [x] B1a:合同、采购、差旅付款/对账及合同查询/导出共享入口严格校验日历日期;无效值在写入前拒绝,保留原nullable/optional和区间业务语义。
|
||||
- [x] B1b:周报原始周日期在周一归一化之前校验;在岗写入、筛选和在岗历史导出局部schema同步处理。
|
||||
- [x] B2:通知、待办、门户11个原因码及客户端固定提示整组迁移;HTTP status、VALID_001、legacy details、权限/开关/投递及事务顺序保持。
|
||||
- [x] 最终同输入定向Vitest:14文件450/450;客户端typecheck/build退出0;后端语法及原因码严格合同通过。
|
||||
- [x] 完成本轮task/Trellis/process/docs/敏感扫描、增量审查、旧差异与冻结材料对账并保存只读候选;回执见本节收口记录。
|
||||
- [ ] 接回真正独立只读复核;主会话inline自检不计独立通过,提交/推送/部署仍需明确授权。
|
||||
- [ ] 09-25复审、09-30必要逐项延期提案、10-02查漏、10-05原门禁;均为人工计划节点,未创建自动定时任务、未提前执行。
|
||||
|
||||
### 本轮改动与验证边界
|
||||
|
||||
B1共8个源文件:routes/contractsRegistry、purchaseRequests、travelOrders、travelReconciliation、weeklyReports、presence、exports及services/contractRegistryFilters。复用isValidDateOnlyString,不修改共享parseDateOnlyString;exports只改PRESENCE_HISTORY_EXPORT_QUERY_SCHEMA,未扩大到所有导出。差旅对账反向区间仍返回原409;无效日历日期返回原输入错误。周报GET可能创建草稿,因此原始日期必须在读/写入口都先校验。
|
||||
|
||||
B2新增notification域6项、todo域4项、portal域1项。服务端注册、客户端映射与固定中文夹具一致;仅移除已消失的14条AST指纹(含未用helper),最终240注册、327已迁移、598遗留、577条entries、主链例外0、findings为0。剩余owner与expiresOn仍逐条保留,全部2026-10-05到期;598不是已修复数,也不是598个已证产品故障。
|
||||
|
||||
最终命令与退出码位于`artifacts/qa-layout/followup-governance-20260917/combined-final.command.json`,日志为`combined-final.log`:contractsRegistry、purchase.project-link、travelOrders、travelReconciliation、presence.admin/history、exports.contractsRegistry/presence、weeklyReports.calendar、utils/date、notifications、todos.errors、portal、scripts/error-reason-client,共14文件450项通过(含262条客户端合同,不累加前序轮次)。新增测试文件为weeklyReports.calendar.test.js与todos.errors.test.js,其余向既有路由测试追加。覆盖溢出/闰日/月末、空值/省略、无写入、精确reason与旧details;missingFields/password/nextAllowedAt正反断言复用已有客户端合同,本轮没有更改动态投影。
|
||||
|
||||
`client-typecheck.command.json`与`client-build.command.json`记录npm run typecheck/build均退出0;build内部也含typecheck,Vite构建成功。仅保留既有Browserslist过期及测试punycode提示,未升级依赖。测试使用真实Fastify注入、合成身份与mock数据库;不是实际数据库/JWT、浏览器或生产业务验收。未改Prisma schema、UI布局或权限模型/审批状态机,无需为本批启动数据库、浏览器或远端验证。
|
||||
|
||||
中途新增夹具/预期失败已保留日志:周报flag需force_on;对账反向区间原为409;通知mock渠道不存Secret,缺钥用例改合成webhook渠道且不发送;portal夹具补合成authorization;todo gate精确原因是flag_force_off。修正测试后完成上述同输入整批450项,未通过更改业务规则绕过失败。初跑与中间测试不累加到最终总数。
|
||||
|
||||
执行采用精简环境、两个本轮空npm配置并仅元数据检查项目无.env系列/.npmrc,不读真实配置。全部证据存入新目录;原K0两份源码、原证据及恢复四包保持。K1/K2具体操作和借款实施没有由本批授权。
|
||||
|
||||
### 日期消费者矩阵与下一批规划(未实施)
|
||||
|
||||
| 分组 | 消费者与事实 | 下一步与验收 |
|
||||
| --- | --- | --- |
|
||||
| 已发布历史批 | 报销、付款批次、差旅申请、资产及发票局部日期 | 沿原发布/独立证据,不重复计本轮通过 |
|
||||
| 本轮B1a | 合同写入与contractRegistryFilters查询/导出、采购交付、差旅付款/对账 | 本地校验与路由回归通过,待独立复核/发布 |
|
||||
| 本轮B1b | weeklyReports原始weekStart、presence写入/查询、在岗历史导出 | 本地通过;周一归一化和反向区间原语义保持 |
|
||||
| 内部派生 | presenceHistory及本批内部当前日期调用 | 按已校验上游/内部生成分类,不称所有parseDateOnlyString调用都安全 |
|
||||
| 下一日期批D1 | todos的create/patch dueDate仍仅regex | 先核nullable/optional与自建/指派权限,复用日期谓词;合成路由测溢出无写入、有效闰日/月末、null清空/省略不改值及原403 |
|
||||
| 下一日期批D2 | employeeDirectoryFilters的hireDateFrom/To及exports员工入口仍仅regex | 共同核列表与导出入口,保留区间/权限合同;非法输入不得查询员工数据或生成导出,补合法边界 |
|
||||
| 下一日期批D3 | masterDataHolidayCalendars的date仍仅regex | 先核管理权限、重复日期与批量原子性;非法日历日期不得进入写入,合法节假日及原冲突语义保持 |
|
||||
| 下一日期批D4 | exports其他域的dateFrom/To、pendingCreatedAtFrom/To、ledgerDateFrom/To | 按schema与实际消费者分域,区分datetime和date-only;不能统一替换DATE_ONLY_SCHEMA后宣称全部安全 |
|
||||
|
||||
D1–D4为补齐的待审范围,不在本轮偷偷实施。负责人shunli,09-25复审时按可达外部入口/风险排序固定每批路径、用例与验收,再实施/检查;涉及资金或权限行为实质变化另审。历史异常数据只读盘点方案须先明确字段聚合/访问范围,当前没有读真实数据或修历史日期。
|
||||
|
||||
### 剩余错误豁免治理(未全量实施)
|
||||
|
||||
- [ ] 09-25重新运行既有AST严格检查,按实际指纹/操作分域;优先仍在用的操作,保留未启用配置域事实,不拿598静态计数替代当日扫描。
|
||||
- [ ] 每个候选批同时绑定服务端原因、客户端窄投影、固定文案与路由无副作用负例;workflow工具路由推导及workflowDefinitions配置分别评审,不混成文案批。
|
||||
- [ ] 09-30只对届时确实未完成且有具体理由的条目提出owner/期限/验收延期方案;10-02查漏,10-05按原门禁执行。不统一延长、不删除仍命中的豁免。
|
||||
|
||||
### 本轮收口与后续进入条件
|
||||
|
||||
五个更新任务(08-23、08-28、09-05、09-08、09-17)的上下文校验退出0;借款task为inline,未新增无用jsonl。Trellis治理PASS(23项合同、1242份扫描、14份既有登记证据摘要),process baseline PASS,CURRENT敏感扫描30份/finding0,docs registry零错误、1项既有告警(22份未登记文档),git diff --check通过;最终23个变动后端JS语法通过。主会话已复核本轮源/test/spec/task增量,没有把既有脏差异作为本轮实现;未修改业务状态机/权限模型,无新增独立审查结论。
|
||||
|
||||
基线24份旧差异中11份task文档/摘要按本轮范围增量更新,其余13份逐字不变;08-23/08-28/09-08旧实施正文及09-05的R1以后历史章节原样保留,09-05 task元数据仅notes变化、借款task.json仍planning。四恢复包86件与K0原证据41件共127份的精确文件集合/摘要、HEAD与真实index前后相同;新增K0审阅候选6件加manifest两份完整,匹配当前K0输入,状态仍PENDING。原有96计数仅保留为历史差异,不改冻结包。
|
||||
|
||||
本轮增量38文件,证据目录内保存incremental.patch、changed-files.json、preservation-result.json、最终命令/日志及只读review-candidate(带文件集合/字节/SHA清单)。候选只证明本地输入和回执可审阅,不是独立复核已通过;独立方需先核manifest,再将B1的原区间/null/周一起点、B2的status/details/秘密抑制/无通知副作用分别审查,重跑另记环境和真实结果。K0独立审查使用旁侧k0-review-candidate,不混成一项通过。
|
||||
|
||||
本批代码保持未提交/未发布;下一步为接回独立只读意见并据具体结论修订,再在明确提交/发布授权范围内推进。K1等待双角色非秘密保管状态与具体核验,K2绑定仍NOT_BOUND,不能复用已消费恢复入口。D1–D4与借款T1–T4均保留待审规划,未实施。未来人工复审节点未提前勾选;未连接生产/ARM、未读真实密钥/配置/备份、未重跑恢复、未制造付款/OCR/通知,未提交/推送/部署/归档。
|
||||
|
||||
## R1内容复核处置(R2修订,未提交/部署)
|
||||
|
||||
R2结果:`npm test -- tests/unit/scripts/error-reason-client.test.js tests/unit/routes/auth.login.test.js tests/unit/routes/workflow.transfer.test.js tests/unit/routes/invoicePool.patch.test.js`四文件311/311(244条客户端契约);typecheck与vite build退出0。修订后visual-portal.spec.ts实际22/22零重试,含新增财务两段href和BX/PB均消失。日志/tmp/followup-r2-unit.log、typecheck/build/browser同前缀;不是R1的471项整批重跑。
|
||||
@@ -408,3 +1049,19 @@ A=优先审查/选迁移;B=业务影响复核;C=延期理由逐模块交审
|
||||
最终同输入验证:`cd server && npm test -- tests/unit/scripts/error-reason-client.test.js tests/unit/routes/auth.login.test.js tests/unit/routes/invoicePool.patch.test.js tests/unit/routes/workflow.batch.test.js`,4文件323/323通过。新增4项(VAT集合、密码策略、非有限日期、催办精确24小时冷却负载);两项已有路由用例加强动态键断言。催办409同时核nextAllowedAt、查询时间窗、无历史/通知/任务写入;只用合成actor/存储替身,不是生产登录链。首轮1项失败是新测试把已有“总金额”误写为“价税合计”,已校正测试预期而未修改产品文案;最终整轮通过。存在Node既有punycode弃用警告,无测试失败。
|
||||
|
||||
流程baseline、Trellis治理及git diff --check通过。本轮仅测试/文档,无运行时代码或schema变化,未重跑前端build/浏览器,未独立复核、提交、推送或发布。扩展票种buyerName、密码新规则的输入覆盖、时区与共享日历校验仍不是这组测试能全量保证的事项。
|
||||
## 2026-09-16 已发布状态与剩余消费者重新分类
|
||||
|
||||
最新日期/动态提示增量已随b1d25d3c发布,独立526项与构建、发布验收沿calendar-contract-release原回执,不把下文历史“未发布”当当前状态。本轮仅本地盘点;check-error-reason-contract.mjs --strict新跑PASS,registered229、migrated316、legacy612、finding0,证据postrelease-recovery-20260916/reasons.json。未重跑526项或修改原因码/到期日。原历史构建措辞“大chunk提示”不准确,实际只有Browserslist提示;冻结包保持原字节,以包外更正为准。
|
||||
|
||||
| 剩余日期消费者 | 输入分类与新静态证据 | 后续验收边界 |
|
||||
| --- | --- | --- |
|
||||
| contractsRegistry | DATE_ONLY_SCHEMA仅regex,外部日期经parseDateOnlyString写入 | 按合同字段逐项加真实日历拒绝,保持nullable/optional,不批改历史 |
|
||||
| purchaseRequests | 外部expectedDeliveryDate,DATE_ONLY_SCHEMA仅regex,后续写expected_delivery_date | 采购日期输入优先;非法日期须在事务/写入前拒绝 |
|
||||
| travelOrders | 外部paymentDate仅regex,进入payment_date写入 | 单列付款日期守卫,保留渠道/凭证/已付冲突规则 |
|
||||
| travelReconciliation | 外部periodStart/periodEnd共享DATE_ONLY_SCHEMA仅regex | 区间两端日历及顺序分别验,不扩大到历史账务修复 |
|
||||
| presence | 外部date/dateFrom/dateTo使用DATE_SCHEMA仅regex,既有查询和写入消费者 | 外部输入优先,不能因某些默认值来自currentDateString就整体标派生安全 |
|
||||
| weeklyReports | 外部weekStart仅regex,先进入周起点计算再查询/写入 | 原始输入先验日历,防归一化掩盖溢出;周一归一规则不改 |
|
||||
| portal | 当前检查到today/currentWeekStart来源于currentDateString及resolveWeekStart | 内部派生优先级低;不能仅凭引用旧解析器宣称存在外部写入漏洞 |
|
||||
| contractRegistryFilters及attendance/employeeStats/feeControl/presenceHistory、观察导出 | 服务/筛选二级消费者 | 必须追上游输入资格,不做全局替换parseDateOnlyString;本轮未完成逐调用点证明 |
|
||||
|
||||
本轮完成分类与新基线盘点,不宣称剩余日期/612次错误均修复。下批优先外部写入(采购/合同/差旅付款/对账)再周报/在岗,服务派生独立追踪;各批需原task方案、入口负例/无写入测试和相应只读复核,不借恢复预检插入未审业务规则改动。09-25复审、09-30必要单项延期方案、10-02查漏、10-05门禁不变,负责人shunli;没有创建定时自动化。
|
||||
|
||||
在新工单中引用
屏蔽一个用户