文件
hyb-oa/.trellis/tasks/archive/2026-09/09-05-error-explainability-payment-readiness/implement.md
T
wangsli 750a184b8a
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
归档10-05错误码可解释性与付款就绪任务(09-05-error-explainability-payment-readiness)
591条历史豁免基线已清零,794条新增reasonCode已通过候选分支合并落地至
origin/main(46a70aa5),主链路零例外,无剩余阻塞验收项。
work landed via 已删除的候选分支而非专属分支,故用
--skip-branch-validation 归档。
2026-09-26 09:12:15 +08:00

156 KiB
原始文件 Blame 文件历史

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 仍为非阻塞记录,旧/待精简代码不扩修。

  • B34-1:保护旧差异/冻结材料;核实际 ExcelJS/fast-csv/JSZip/saxes 的可识别格式错误,用真实 multipart 两入口补红例。
  • B34-2:只在 CSV/XLSX 内存解析 await 处映射白名单格式异常为 400/VALID_001/user.import_file_invalid;未知异常改固定安全内部错误,仍 500。读取/权限/DB/事务/哈希不进入此 catch。
  • B34-3:原因注册、客户端提示与固定文案夹具同批;坏格式无业务访问、未知异常不带原内容、正常 CSV/XLSX/日期/500行及原大小/表头/权限合同回归。
  • 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过滤。

  • B34损坏导入:两入口×三损坏格式共6例500、CSV两例logger收到合成单元格标记;响应无标记且9个探针全部DB调用0。已落安全错误映射/未知异常分流/合法兼容方案,尚未实施修复。
  • D15低年份:0000/0001/0099偏移,0100/1900/2024正常。旧考勤已有年界/硬关闭、未用shiftMonth及工资待精简路径不扩修;保留统一考勤入口待年份规则决策。
  • D16 AP:原合法反向ledger范围保留200/有界where,非法日期和pending反向仍拒绝;现有2文件73/73通过,不额外增加范围400。
  • 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或明确错误态保持,不新视觉。

  • B31三方原因及实际路由/服务负例、合法与已有消费者回归。
  • B32/B33合成鉴权/provider/队列/AI验证,不读取真实配置或外联。
  • 精确减基线(保留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转字段错误时排除,避免引入伪业务字段。

  • B29三方原因/实际路由和服务负例、权限/合法/幂等回归及精确减基线。
  • 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,其错误仅静态覆盖。只换错误合同不修改审批规则,主会话验证不能代替独立审查。

  • B26共享审批三方原因、守卫与快照/执行消费者回归。9文件868/868通过,含B27已登记原因;阶段数不累加。
  • B27定义/规则三方原因、真实Fastify负例和原合法/权限/冻结回归。3文件790/790通过。
  • B28委托具体合同及实施完成,保持两组API原权限差异。
  • 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。

  • 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构造的单测改为真实服务守卫及合法/幂等/缺池行为。

  • B22三方原因、真实Fastify/服务合成负例与既有合同导出/预算消费者回归。7文件696/696通过;15新原因,14处旧命中(含2个旧helper)待同批精确减基线。
  • B23资产、B24流转/盘点、B25采购请求逐操作补合同后连续处理。
  • 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,失败无后续业务写入和成功审计。人员原因由角色调用方显式传入;未新增引用/启停或字段规则。

  • 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回滚。

  • 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和成功审计要求保持,绝不读真实附件或配置。

  • 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事务称真实回滚。现有日期/时区规范保持,只补原因不收紧兼容。

  • B19申请原因三方、路由负例和状态/预检/工作流/权限/合法回归,修复未定义id解析器。
  • 后续B20执行/授权/交易与预算共享、B21对账先补具体合同后连续处理。
  • G4最终合成回归/类型构建/严格基线/治理/保护及新候选,独立PENDING。

B20差旅订单、授权、交易与共享预算限定合同(实施前)

三路由21处加travelPayments2处:导入禁用共用原因,三类各自导入schema/规范化后空列表;授权/交易query;订单付款id/body、非可付状态、已付资料冲突、缺匹配结算交易;交易冻结建议id/body。保留100项上限、按条skipped与幂等、金额/币种精确匹配、付款锁/ERP排队门禁、冻结建议只是记录而非真正冻结,不外联ERP或支付。

共享预算只替换缺预算池的409,原helper全src/tests无外部消费者,迁移唯一内部调用后删除helper及导出。原顺序先ledger.create再查池再更新额度保持:缺池失败允许已尝试写ledger,测试确认无额度更新,不虚报零写入或真实事务回滚。已有路由消费者用mockDB回归,保留原调用事务边界。

  • B20原因三方、路由拒绝/无后续写入/ERP入队和已有导入/付款/冻结建议回归。
  • 共享预算授权/冲正缺池及合法/重复/零额路径;结算原仅写ledger、不查池/改额度保持,精确扣基线。

B21差旅对账限定合同(实施前)

路由12处和共享服务6处:query/create输入、期间倒序、公司/成本中心缺失/归属、空范围、批次id/条目id、确认备注输入;服务为非草稿批次、条目非待确认/非已确认、自动匹配项不可重开、批次有未确认项。特别保留共享旧builder默认409,schema/id显式400,不能因换builder误降400;引用可用性原只检查存在,不新增启停/归档规则。确认/重开/汇总/结案及ERP outbox幂等和runNow语义保持;仅本地已有桩,不外联ERP。最后消费者迁移后移除共享旧helper及导出/import。

  • 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幂等。

  • B15服务端注册/客户端固定安全文案/夹具三方一致;精确减消失baseline。
  • 新真实Fastify+mock DB测试覆盖四实体输入/id/重复/归档、所有引用/层级守卫、无后续业务写入/成功审计及合法create/patch/list/archive和幂等;P2002是桩,非真实PG约束/回滚。
  • 核MasterDataPage错误消费;针对性回归/strict、结构检查通过后,接日历和费用/假别/项目模板;后续子批先补具体操作合同。
  • G3最终回归/前端类型构建/治理/敏感/diff/保护对账及新冻结候选。

B16节假日日历限定合同(实施前)

日历15处旧命中按id/list/create/patch/空修改、批量日期输入/重复日期、公司引用、编码重复、当前归档与默认日历绑定分别明确原因。复用公司引用原因;归档错误原details包含legalEntityCode保留,但UI只展示固定安全提示,不拼公司代码。保持原500项上限、合法日历日期校验、空数组清空、先验证再删除、事务及默认日历首次赋值;原timezone只检查文本格式,不借原因迁移收紧时区。公司/日历归档、404及归档幂等规则不变。

  • B16原因与真实路由负例/合法日期及默认绑定/归档回归;原403/400/409、无后续写入/成功审计断言、仅mock DB。

B17费用标准、费用类型、假别和报销模板限定合同(实施前)

四源29处遗留:id/query及create/patch schema分操作原因;费用标准另正金额、费用类型缺失、部门范围缺部门/部门不可用、同类型范围冲突、空修改;费用类型另编码重复与空修改;假别另编码重复;模板另费用类型缺失/停用明细、空修改。保留原details/400/409,标准PATCH原合并范围语义、别名优先级和warn/block规则不变;类型requiresInvoice审计保持;假别半天额度/默认值/嵌套policy更新/普通用户只读启用项以及原允许空PATCH不变,不新增审计;模板50项上限、默认金额和禁用类型整批拒绝、软删除幂等保持。既有主链leave服务不改。

  • B17四源明确原因、三方文案、输入/分支负例无写入及既有合法/权限回归。
  • 费用标准/模板和假别/费用类型页面核消费,严格基线精确扣减。

B18项目操作限定合同(实施前)

projects6处AST命中含共享helper,实际覆盖14个schema操作(项目/成员/里程碑/任务/风险/沟通各create/patch、收口项patch、交付create)、项目与6种子项id、5类开关、列表和豁免备注。为每个操作/开关显式传原因,保留权限/成员可见范围/沟通24小时窗口、状态与审计。日期schema原仅格式校验保持,不借本轮扩日历规则。

特别边界:收口项PATCH原先在校验itemId/body之前惰性初始化6项清单;本轮保持该顺序。负例断言无后续修改和成功审计,不能笼统称所有失败零写入;另专例证明原初始化仍可发生。已有清单时的失败无初始化写入。各开关仅合成配置/数据库桩验证,不改变真实配置或冻结规则,不冒称功能已开放。

  • B18按操作传入原因和三方文案,开关拒绝先于业务访问、所有schema/id与豁免备注负例及原项目回归。
  • 项目原守卫/副作用结构核对,明确清单初始化例外、日期旧边界和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先行合同

  • services/budgetPool:6个旧调用归5原因:成本中心缺公司(创建和选池共用)、部门与公司/成本中心维度混用、公司缺成本中心、同成本中心多预算冲突、生效日期无效。保持原400/409/details及成本中心→部门→全局优先级、历史部门/全局多条取首规则和查询顺序。覆盖报销/采购/差旅、feeControl和AI建议调用方;不修改它们的业务守卫。
  • budgetControlRules:id、query、create/patch输入、成本中心缺公司、费用类型仅报销6原因(原6个命中含构造helper)。保留PATCH原本基于本次body判断的行为,不以本轮原因迁移偷偷合并已有记录来改变规则;schema失败/作用域冲突在读写前拒绝。404/权限/默认值/归档幂等保持。
  • 服务原因负例、预算真实路由负例、控制规则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处归为无调用代码清理而非修复业务分支;现有目录/导出回归保留。

  • B12账号三方原因与逐操作负例,原权限/脱敏/创建修改/导入/会话回归;3个既有管理页面/对话框消费resolver不新增视觉。
  • B13部门路由负例、正例和归档幂等,目录helper调用核对与导出回归。
  • 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详情,保留原阻断审计,无附件头和文件字节返回。只用临时合成损坏文件验证,不读真实历史附件。

  • B14原因三方、显式schema调用、上传精确捕获及逐分支测试。
  • 员工原日期/权限/资料/档案/附件/同步合成回归与无副作用断言;缺省库/开关守卫保持。
  • 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处保持原合同,不能称完整预算域清零。

  • B10路由及三方原因映射;BudgetsPage、PerformancePage、EmployeePerformancePanel均已消费安全resolver,页面无需改动。
  • 路由合成负例保留status/details并断言无后续写入/成功审计;功能和权限拒绝保持;P2002只为桩测试,不称PG并发实证。
  • 相关日期/预算选池/采购预检/绩效既有回归及客户端固定文案、strict与self-test、前端构建和治理检查。
  • 更新实际余额、协调入口与新证据/审阅候选;独立复核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;原远端/真实配置数据/提交部署/恢复重跑/借款边界不变。

  • 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行与原日期/默认/整批拒绝回归。三方文案不拼文件内容、原始文件名或未白名单字段。
  • D13:核工资list/generate/issue、工资导出、统一考勤月份外部schema→后置解析。00/13已有400且发生在业务读写前,只补合成证据,不能按regex重复当缺陷。0000–0099因Date.UTC特殊映射涉及可用年份/DB兼容,单列下一限定决策;本轮不改变工资发放或存量年份语义,不改未使用的shiftMonth。
  • D14:公告原ISO或日期T前缀schema加局部真实日历与有限Date判定,阻断非法日历和不可解析时间;保留有偏移ISO、UTC、无偏移本地时间、秒/毫秒及JS既有24:00滚动兼容,不更改时区解释/nullable/optional/原起止顺序(无新增区间规则)。3字段×create/patch非法无公告读写/审计,合法日期精确持久化,签收保护和权限回归。
  • B7:顺同一公告入口补create/patch/ack输入、id、list、禁用、缺签收声明、已签后内容保护、不需签收、旧公告声明缺失原因;按旧status/details迁移,不改签收规则。PortalAnnouncementsPage既有创建onError消费安全错误映射,保存/归档失败亦给现有toast反馈,AnnouncementsPage签收失败同用既有安全映射,不新增视觉方案。
  • B8:接续D13已实证的月份拒绝,迁移工资年月输入/后置月份、工资导出查询/月份、统一考勤月份查询/后置月份4原因;只给对应schema显式传reason,不改其他salary item/profile、旧考勤路由、日期和发放语义;补三方与原details断言及相关helper消费者回归。
  • B9:工资维护剩余操作按同类授权连续迁移:薪资项create/patch输入、薪资档案输入、工资条修改输入、id、金额格式、薪资项重名/不存在、当月已生成/无活动员工/无启用薪资项/缺有效档案、已发工资条不可改、未生成不能发放/已全部发放。工资UI已经消费resolveErrorMessage,不需改界面;保留所有旧400/409/details(包括缺档案人员最小列表),只显示固定安全文案。补真实路由拒绝与无成功审计/无后续写入断言,P2002仅mock,不能称真实PG约束/回滚实证。迁移完成后移除无调用的本文件legacy builder,其他模块不动。
  • 原因三方/精确负例/仅减消失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;不外联、不读真实配置/人员/备份,不提交/推送/部署/归档,不实施借款。

  • D12:HR多格式入职日期复用日历谓词;保留分隔符、紧凑日期及秒/毫秒时间戳兼容。明确缺失与非法:缺失仍默认本次now;非法标记整条skipped/invalid_hire_date,固定安全提示,不落原日期。守卫在部门解析之前,dry_run/apply及离线sourceProfiles一致,不产生部门/员工/角色/绑定/主管业务副作用,保留运行/条目审计;现有员工仍不更新hire_date。
  • D12合成验收:合法闰日/月末和多格式、非法溢出/年份/文本、缺失默认、已有员工、混合批继续;实际run服务+mock DB和fetch拒绝桩,无真实企业微信/PG验证。
  • B5:限定7原因——员工目录查询/入职日期反向区间;合同查询/到期反向区间/即将到期days;在岗历史反向区间/超过31日。员工与合同导出外层schema使用相同域查询原因,显式传入parseQuery/parseBody,不按details猜原因。保持旧status/details、可见范围、7日默认/31日上限、导出格式;共享legacy写入helper保持。
  • 三方原因合同与真实路由负例(含CSV/XLSX、外层schema、无查询/成功审计)同步;只删消失baseline指纹,不改owner/2026-10-05。
  • 定向服务/路由/原因测试、客户端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、真实密钥/配置/备份、恢复重跑、提交/推送/部署/归档或借款产品实施。

  • 保存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非法整批拒绝不写业务/成功审计。初轮失败日志保留,不为测试移除原审计。

  • D5:users创建/修改/CSV与XLSX导入hireDate日历校验;保留缺省日期、修改省略、导入原批次语义;非法无写入。

  • D6a:员工资料、合同、培训、证书逐字段日历校验与负例;保留nullable/optional和原区间冲突。

  • D6b:入职/转正/调动/离职有效日期及附属日期;逐路由合成验证副作用前拒绝、正常日期和省略行为;不改生命周期规则或权限。

  • D7:AP直接列表dateFrom/dateTo校验,与既有导出合同一致;反向区间先盘点调用方,本轮保持原规则并单列决策。

  • D8:按外部输入/内部派生/历史DB值输出剩余消费者矩阵,新缺口先规划再动代码。

  • 错误原因:先限定用户可达操作和旧status/details,服务端/客户端/夹具/路由负例整组迁移,仅删除消失指纹,原期限不变。

  • 定向测试、治理、增量审查、资料保留对账和新候选;更新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同步仍只规划。

  • 6源最小refine与逐入口无副作用用例。
  • D10/D11及原模块定向回归,9文件61/61通过,不用上一轮520替代。
  • 更新矩阵/协调状态、最终治理及候选;不重新执行已无输入变化的前端构建。

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。

  • 复核D1–D4真实消费者/原语义,保存所有旧差异与既有证据目录的文件集合、SHA、HEAD/index基线。
  • D1:todos创建/修改dueDate在原regex后增加isValidDateOnlyString,nullable/optional和指派权限顺序保持;测非法无读写/通知、有效闰日/月末、null清空/省略保留与原403。
  • D2:employeeDirectoryFilters与exports员工schema同步校验hireDateFrom/To;测试/users和/employees真实路由与CSV/XLSX导出,非法无员工查询/审计,合法UTC上下界/省略、原反向区间400和权限保持。
  • D3:masterDataHolidayCalendars整批items日期先验后事务;混入一条非法日期整批拒绝,零delete/create/audit;重复日期409、归档409、无权限403及空数组清空合同保持。仅mock边界,不伪称PG回滚已验。
  • D4:逐字段修改exports仪表板dateFrom/To与AP pendingCreatedAtFrom/To、ledgerDateFrom/To;保留原DATE_ONLY_SCHEMA、在岗局部校验、审计datetime及工资YYYY-MM,不统一替换所有schema。测非法无业务查询/导出审计、有效闰日/月末/省略及原pending反向区间400。
  • 跑本批路由定向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项独立证据保持原范围,不计为新通过。

  • 重盘点AST与本批日期消费者:进入时229注册、316已迁移、612遗留、591条基线entries、主链例外0。
  • B1a:合同、采购、差旅付款/对账及合同查询/导出共享入口严格校验日历日期;无效值在写入前拒绝,保留原nullable/optional和区间业务语义。
  • B1b:周报原始周日期在周一归一化之前校验;在岗写入、筛选和在岗历史导出局部schema同步处理。
  • B2:通知、待办、门户11个原因码及客户端固定提示整组迁移;HTTP status、VALID_001、legacy details、权限/开关/投递及事务顺序保持。
  • 最终同输入定向Vitest:14文件450/450;客户端typecheck/build退出0;后端语法及原因码严格合同通过。
  • 完成本轮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项整批重跑。

RUN_ISOLATED_DB_TEST=1 RUN_BROWSER_TEST=1 RUN_JOB_QUEUE=1 RUN_ERROR_GUIDANCE_TEST=1 node scripts/qa/test-invoice-first-http.cjs通过PASS_ERROR_GUIDANCE_REAL_AUTH_DB_BROWSER:真实密码登录/JWT、实际发票PATCH携原因码与missingFields、页面显示发票代码/销售方缺失、失败保留ocr_failed,补齐后数据库和页面均变available。fixture是隔离库预置ocr_failed,不声称本次由OCR产生;mock provider无真实云调用。原invoice-ocr-flow全套seed用例本轮未原样运行,其对应修正子流程由此专项覆盖。隔离数据库/合成存储已清理,浏览器及临时preview均关闭,生产未接触。

外部新会话结论有条件通过,未执行测试;包完整性另已核,不能合并成独立运行验收。F1/F2按阻断修复:客户端仅对三个已注册原因投影其允许的动态字段,再复用原文案分支;无动态数据保留注册fallback,不将其他域details带入递归。OCR字段/密码策略使用已知清单,时间只接受有效UTC时间戳,不直接回显未知payload。补同时带reasonCode与真实legacy键的精确内容测试,以及未知/跨域details不泄露反例;invoice-ocr-flow原断言改为实际缺失两字段的完整文案。

F3登记未修债务:共享utils/date日期解析及报销/差旅/资产/付款消费者仍需逐模块审查严格日历校验;本次只修发票的局部函数,不能据此声称共享解析安全。归本任务后续日期输入批次,负责人shunli,09-25复审时给出消费者矩阵、拒绝溢出/闰日/月末/null/时区边界、无写入回归及历史异常只读盘点方案;不改历史记录、不混进本次R2的阻断修复,不延长错误豁免日期。

F4已修:转审输入原因文案同步注册/客户端/固定夹具为10至500字;转审实际守卫未变。F5补财务两段href断言和刷新后BX/PB均消失断言,旧R1表格超出当时实际断言的部分以复核结论为准,新增断言重跑后另记。F6批量逐条错误不携reasonCode登记后续投影债务,不破坏已有跳过键;F7密码登录的401/403/423为既有可区分设计,本次防枚举声明仅适用于邮箱验证码/重置链,不扩称全部登录路径。

R1包及其manifest不变;本轮代码已偏离R1,必须重冻R2后交增量复核。471/27/22是R1记录,不能冒称本次输入通过。

2026-09-15 第三阶段连续收口(本地实施与单元/构建验证通过,未提交/部署)

最终本地结果:19文件471/471通过(/tmp/followup-stage3-tests.log),其中包含发票上传/编辑/选票/文件/查验/差旅关联、七份workflow路由回归、门户、回单独立复核、auth/me/付款账户及237条客户端原因契约。命令为cd server && npm test --后逐个传入上述日志首行登记的19个测试文件;不是全仓测试,也未发送真实OCR。通知管理/IM路由/dispatcher另轮27/27,不能声称实际通知已发送。cd client && npm run typecheck && ./node_modules/.bin/vite build退出0;本轮修改后构建,不复用旧dist。AST229注册/612遗留/零finding、Trellis、process baseline及diff检查通过;docs registry零错误,仍有既有22项未登记告警。浏览器交接测试另记结果。

到期清单收口:paymentAccounts、auth/me、invoicePool主路由及read/verification/shared-schemas、workflow路由的本批VALID_001均已迁移,不为这些路径保留豁免。剩余591条entries/count612仍由原baseline逐条保留owner及2026-10-05到期;utils/workflow15条涉及路由推导,需独立按流程负例评审,workflowDefinitions11条属配置域,不与本次输入修复混交。其他模块保持原逐项责任与期限;09-25复审、09-30有理由的延期提案、10-02查漏均是计划而非已安排自动任务,不允许统一延期,也不把全部技术债宣称完成。

按“尽量一次完成、不重复询问”继续原范围:invoicePool主路由与查验查询schema、workflow路由剩余操作级原因迁移。不是全库612条遗留统一改名,不动workflowDefinitions配置域及utils/workflow审批路由算法。当前AST PASS registered229/migrated316/legacy612;本轮开始695,累计减少83次遗留命中。上述目标路由已无遗留命中,领域workflow仍有utils/workflow等15条,不能把路由清零写成全审批域清零。

发票覆盖上传文件/大小/类型/所属人、修改输入/金额/日期/必填OCR信息、归档、OCR重试和重复例外前置。原PDF专用顶层文案与兼容details保留,原因码走注册builder;不修改OCR默认值、不开启查验、不发送真实发票。审批剩余提示区分已处理、本人不能自审、目标人不可用/不合格、节点异常、业务类型不支持、催办冷却等,守卫条件/顺序/锁/状态不改。

新增日期负例发现真实缺陷:JS Date会把2月30日滚动为3月,且无效月份可能生成Invalid Date。沿本task发票字段输入校验补有限时间值与UTC日期回读一致性;增加非闰年2月29日、2月30日、4月31日、13月拒绝且无写入,以及真实闰日/月末正例。此项是实际输入验证修复,不冒充纯文案更改;不回填历史日期。

中途测试发现builder固定通用顶层message,直接替换PDF两处分支会改变旧API文案;已恢复专用文案且保留原因码。静态门禁不接受动态原因码或直接AppError伪迁移,因此分别使用固定注册builder,不修改门禁或增加豁免。最终联合测试、浏览器交接与构建结果完成后补记,不复用中途失败作为通过。

2026-09-15 后续三域实施(当前权威增量,未提交/未部署)

最终客户端npm run typecheck && ./node_modules/.bin/vite build退出0(/tmp/followup-final-typecheck.log、followup-final-build.log),构建包含本节所有34个新增原因映射。保留既有Browserslist/chunk提示,不新加依赖、不把构建成功称为已发布。

最终同输入回归:cd server && npm test -- tests/unit/routes/auth.login.test.js tests/unit/routes/me.test.js tests/unit/routes/paymentAccounts.test.js tests/unit/routes/invoicePool.bindable.test.js tests/unit/routes/invoicePool.file.test.js tests/unit/routes/invoicePool.verification.test.js tests/unit/routes/workflow.batch.test.js tests/unit/routes/workflow.transfer.test.js tests/unit/routes/workflow.permissions.test.js tests/unit/routes/workflow.return-notifications.test.js tests/unit/routes/workflow.task-detail.test.js tests/unit/routes/portal.test.js tests/unit/services/paymentReceiptManualReview.test.js tests/unit/scripts/error-reason-client.test.js,14文件367/367通过,日志/tmp/followup-final-tests.log。覆盖实际客户端错误解析、认证负例与原业务守卫的合成回归,不是公网/browser/真实JWT新验收。AST、node语法、Trellis治理、process baseline、diff检查通过;docs registry零错误,既有22项未登记告警未扩修。

在已批准D阶段继续完成auth/me、发票查验及审批输入,不另建task。auth/me新增10个原因:输入格式、设备上下文、密码策略、无效内部入口、统一无效验证码及通知设置。缺失/停用/锁定账户与验证码不正确仍返回相同原因,不新增账号枚举;登录、刷新、密码修改与会话事务顺序不变。三条旧测试精确details断言漏加原因码导致初跑失败,修正断言后auth/me连同首批六文件259/259通过,不改业务逻辑绕过测试。

发票查验新增disabled/already_pending/record_missing三个原因并复用invoice_pool.id_invalid;不是OCR开关变更,不启用查验、不新增云端调用。补不存在查验记录、重复排队与无效标识的无写入/无队列反例;两文件201/201通过(含当时191条客户端契约)。审批迁移七个输入parser:意见、转审输入、任务ID、批量同意/退回、催办与统计范围;权限门、状态机、事务与转审资格不变。七个HTTP输入反例均在事务前拒绝;六文件243/243通过(含当时198条客户端契约),包含既有转审、权限、退回通知及详情回归。

最终AST检查PASS:registered190、migrated271、legacy656、findings0;基线634条entries/count656,较本轮开始695减少39次AST遗留命中,日期仍全部2026-10-05。不是已经清完656条;保留invoicePool.js30、shared/schemas1、workflow.js13,workflowDefinitions11仍为未启用配置域,不扩改审批状态/资格。这些余项继续按操作与负例迁移,禁止整文件批量替换或统一延期。

验证日志:/tmp/followup-errors-combined.log、followup-verification-tests.log、followup-workflow-tests.log、followup-final-scan.json。最终同输入合并回归、typecheck/build另记录结果;以上不同轮测试含重叠,不累加宣称独立用例数。没有提交、推送、部署或生产写入;不是独立复核结论。

2026-09-15 第一批实施与验证(未提交/未部署)

按统一计划实际运行既有AST检查器,修复前PASS:registered156、migrated225、legacy695。第一批仅迁移paymentAccounts与invoicePool/read,不改auth/审批状态机或生产数据。

付款账户9个原因涵盖账号/银行输入、完整账号查看理由、无效标识、主体/银行不可用、重复银行编码、银行仍被使用、已有账户不能改公司。发票读取5个原因涵盖筛选分页、选票查询、状态批量查询、不可编辑报销、无效票据标识。保留HTTP status、VALID_001和legacy details;客户端真实resolveErrorMessage与固定中文夹具一起验。未修改解密/查看权限、文件授权、状态或付款逻辑。

移除实际已消除的8条AST豁免,当前665个entries/count687,日期仍全部2026-10-05;新增注册14项,检查PASS registered170/legacy687/findings0。不是只删豁免隐藏旧调用,不把公共helper的一条AST记录当作只有一条业务分支。

最终同轮四文件207/207通过:paymentAccounts13、invoicePool.bindable新增输入负例及既有行为、invoicePool.file文件授权/审计、error-reason-client178;付款账户反例确保未创建/更新/成功审计/通知且不泄漏合成账号。中途发票测试漏解构prisma导致一项测试代码失败,修正后完整四文件重跑207通过,未改业务逻辑绕过失败。客户端typecheck通过,构建另记结果。原auth/me、发票上传/识别核验主路由和workflow仍待后续批次,未声明本task完成。

证据安全日志本机/tmp/followup-error-scan.json、followup-error-after.json、followup-error-wave1-tests.log。未新增真实OCR、生产写入或部署,其他任务旧差异继续隔离;下一批仍沿本task操作级范围,不新建任务。

前端typecheck与vite生产构建最终均退出0,原有chunk体积/Browserslist提示不扩修。node语法、git diff、Trellis治理及process baseline通过;docs registry零错误,保留既有22项未登记文档告警。此轮提示映射由真实客户端resolveErrorMessage测试覆盖,不宣称重跑全部浏览器;权限/状态机未修改。测试/构建日志分别为/tmp/followup-typecheck.log、followup-build.log,产品补丁保持未提交状态。

2026-09-15 统一收口接续

用户采纳一次规划连续实施,协调入口为09-08-reimbursement-payment-closeout/implement.md“六项统一执行计划”。本task承接D,不新建豁免管理系统。已只读重统计:基线673个entries、count合计695、均2026-10-05到期,距09-15为20天;不是695个当前AST命中或产品缺陷。

先用既有检查器区分当前命中/已消除/变动指纹,再逐操作处理paymentAccounts、invoicePool已启用上传/读取/识别核验、auth/me、workflow审批动作;workflowDefinitions配置域不自动纳入。每次同时注册安全原因码、客户端映射、具体提示及禁止副作用断言。09-18首批验证、09-25复审、09-30逐模块延期建议、10-02查漏沿用原节点。延期需具体理由、负责人与验收,不在本轮规划中修改expiresOn。范围内本地实现/重验不逐项询问,最终提交/发布范围集中审批。

2026-09-11 到期治理接续(不统一续期)

本次只读复核现有 AST 基线为 673 条记录,到期仍为 2026-10-05,距 09-11 为 24 天;不是 673 个已证实产品故障。本轮主线修复不改到期日,不重复建立豁免台账。

先按员工首批业务路径排序既有延期域:付款账户维护(paymentAccounts)、发票池读取/识别/核验(invoicePool 系列)、登录/个人资料(auth/me)、审批动作错误(workflow)。这些是下一阶段候选模块名单,不批准整文件替换泛化错误或解冻配置/合同功能;实现时沿注册原因码、客户端映射、具体文本断言三件套按操作迁移。

09-18 验证首批操作迁移;09-25 按模块复审剩余记录;09-30 前逐模块写明未改原因、负责人与新验收点;10-02 查漏。只有有理由的单项/模块延期可交审,禁止到期前统一延长。当前仍全部保留原日期,本轮没有声称已完成余下错误迁移。

0. 开工门

  • 用户复核并批准 PRD、design、implement。
  • 批准后运行 task.py start;inline 模式实施前加载 trellis-before-dev,不派 implement/check sub-agent。
  • 记录开工基线、工作区状态和当前 20 处旧字符串测试命中清单。

1. 原因码合同与 parity

  1. 新增原因码注册表和 reason-aware validation helper;保留顶层 VALID_001 与 legacy details。
  2. 新增客户端 reasonCode 映射与未知错误安全兜底,接入 ApiError.requestId。
  3. 建立 AST/结构化 parity 检查和版本化遗留指纹:基于规范化 AST 节点形状而非源码文本,纯格式化不得改变指纹;注册唯一性、服务端使用、客户端覆盖、孤儿映射、新增遗留、过期例外全部 fail closed。
  4. self-test 覆盖同 key 跨域、未注册、拼写、缺映射、一增一删、结构性指纹变化、纯格式化不变、到期和主链路试图加例外。
  5. 接入既有治理入口;报告只输出相对文件、原因码/域、计数和稳定 finding。

2. 首批主链路迁移

  1. 迁移报销提交/编辑/票据关联的用户可达校验。
  2. 迁移付款创建/复核/回单/登记的用户可达校验。
  3. 迁移请假提交、考勤修正提交的用户可达校验。
  4. 主链路达到零例外;其他存量按域记录 owner/reason/expiresOn,不使用永久目录豁免。
  5. 逐项处置 20 处旧字符串:
    • 客户端 4 个 mock 改为 reasonCode,并断言具体提示/安全兜底;
    • 主链路服务测试断言 exact reasonCode、status 和兼容 details;
    • workflow utility、ERP procurement、budget 等逐项迁移或登记有效遗留;
    • failure_message、批处理 reason 等持久化/内部摘要单独验证兼容,不与 UI 文案混同。

3. 付款 readiness

  1. 抽取共享 resolver,复用快照、部门 gate、账户、占用和 reviewer 事实;搬移 create 条件而非复制。
  2. 候选批量计算单条 readiness,避免 N+1;异常候选仍返回但不可选择。
  3. 增加多选组合只读 readiness API;严格输入,响应仅含安全 blocker。
  4. create 在锁和事务内复用 resolver;失败零 batch/item/成功 audit/notification 副作用。
  5. 覆盖资料或账户变化后的即时重算,不新增持久字段或长期缓存。

4. 付款页面

  1. 扩展 API types;候选行显示就近 blocker,正常行无解释噪音。
  2. 异常候选不可选择并具备可访问原因;有维护权限才显示维护入口。
  3. 多选变化查询组合 readiness;提示紧贴主按钮,按钮禁用、handler 和 create 二次拦截消费同一原因映射。
  4. 并发失败留在动作附近;toast 为补充;未知原因使用 request ID 安全兜底。
  5. PC 覆盖主路径;移动端保持现有能力边界且不显示技术错误。

5. 验证

  • node scripts/qa/check-error-reason-contract.mjs --self-test 与 strict 正常扫描。
  • Server:registry/helper、付款 readiness/route、报销/B2、请假、考勤 focused Vitest;涉及 workflow/状态机时做只读 review。
  • Client:error mapping 测试;付款 Playwright 覆盖正常、三类 0014 缺项、非建行、跨公司、占用、无 reviewer、并发、未知 request ID fallback、键盘/ARIA。
  • cd server && npm run prisma:validate;触达 JS 运行 node --check。
  • cd client && npm run typecheck && npm run build。
  • UI strict/self-test、Trellis governance、敏感信息扫描、git diff --check。
  • 核对 schema/migration/seed/flag/routing 和生产数据修改为零。

6. Spec、提交与部署

  • 实现验证稳定后,把“原因码 + 遗留指纹 + 主链路零例外”和“共享 readiness 多消费者”沉淀到现有 spec,不新建泛化设计文档。
  • spec 明确迁移一条遗留原因码的完整合同:服务端注册、客户端映射、具体内容断言三件缺一不可。
  • 提交建议:A 原因码/parity;B 首批迁移;C 付款 readiness/UI;task 元数据另行回填。
  • commit message 使用中文并引用 [09-05-error-explainability-payment-readiness]。
  • commit、push、provenance、部署分别批准;切换前再次运行 UI strict。
  • 部署保持 SYNC_ENV=0、existing 数据合同,无 migration/schema/seed/flag/routing/资料补录。
  • 部署后核版本、公网文案、合成 readiness/错误投影、B2、maker-checker 和真人单据状态。
  • 不自动创建 0014 批次、不复核、不登记付款;真实业务由授权人员完成。
  • 回滚无需数据库补偿;新客户端遇旧服务端未知码仍须显示可行动兜底。

7. 开工基线与 20 处旧断言处置

2026-09-05 恢复实施;开工 HEAD 为 ab82fe3,仅当前 task 目录未跟踪并已保留。 依据交接中的明确批准幂等执行 task.py start;本会话主会话实施/检查,没有派 implement/check agent。 原生 update_plan 未在工具集中提供,未创建替代 plan;继续以原已批准清单执行。

下表行号是开工前定位,不以当前字符串总数作为完成证据。兼容响应的原始 message 仍可以出现在测试 fixture;用户展示断言必须具体,不能用宽泛正则掩盖。 延期域均由 shunli 负责,遗留 AST 基线到期日为 2026-10-05(UTC);未增添主链路例外。

编号 开工前测试定位 逐项处置
T01 client/tests/e2e/r103-cross-page-ui-consistency.spec.ts:544 采购附件 mock 增加 purchase_attachment.unsupported_type;对应服务端分支、固定中文断言和安全上传浏览器断言一并保留。
T02 client/tests/e2e/r111-invoice-reimbursement-guard.spec.ts:448 提交 mock 改为 reimbursement.items_invoice_item_guard_failed;保留四类精确数量解释、异常字段安全兜底与双端就近提示断言。
T03 client/tests/e2e/r111-invoice-reimbursement-guard.spec.ts:481 明细关联 mock 改为 reimbursement.invoice_invalid_unlinked_item_state;保留准确中文和原子关联断言。
T04 client/tests/e2e/pc-finance-admin-visual-wave4.spec.ts:83 核验 mock 分别登记频控/次数上限原因码;服务端注册、客户端映射、固定内容和 route details 精确断言齐全;旧 VALID_001: UI 前缀断言改为无技术前缀的准确中文,不用正则。
T05 server/tests/unit/utils/workflow.test.js:64 workflow 配置工具延期;保留原准确消息断言,对应 utils/workflow.js 到期指纹。
T06 server/tests/unit/utils/workflow.test.js:65 workflow 空步骤配置延期;保留原断言,对应同文件独立调用指纹。
T07 server/tests/unit/utils/workflow.test.js:87 approval-rule 配置工具延期;保留原断言及到期指纹。
T08 server/tests/unit/utils/workflow.test.js:94 approval-rule 无效配置分支延期;保留原断言及到期指纹。
T09 server/tests/unit/utils/workflow.test.js:112 approval-rule 结构配置分支延期;保留原断言及到期指纹。
T10 server/tests/unit/utils/workflow.test.js:331 缺少 assignee rule 配置延期;保留原断言及到期指纹。
T11 server/tests/unit/utils/workflow.test.js:332 未知 assignee rule 类型延期;保留原断言及到期指纹。
T12 server/tests/unit/services/leave.test.js:50 改为精确 VALID_001、422、leave.leave_invalid_range 与兼容 leave: invalid_range。
T13 server/tests/unit/services/leave.test.js:98 改为精确 VALID_001、422、leave.leave_non_working_range 与兼容 leave: non_working_range。
T14 server/tests/unit/routes/integrations.erp.procurement.test.js:49 ERP procurement 非首批域延期;保留原消息断言与 integrations 模块到期指纹。
T15 server/tests/unit/routes/integrations.erp.procurement.test.js:57 ERP procurement 另一资格分支延期;保留原断言,不扩展集成能力。
T16 server/tests/unit/routes/paymentBatches.reimbursement.test.js:2341 内部持久化 failure_code/failure_message 及 API 字段兼容断言保留;执行风险既有 JSON 仅附加注册原因码、刷新安全说明,不改风险状态;明细/风险卡经专用 helper 展示,历史与未知原因安全兜底,不直接展示原摘要。
T17 server/tests/unit/routes/workflow.batch.test.js:377 内部批处理 reason 兼容断言原样保留;不把批处理摘要冒充用户恢复文案。
T18 server/tests/unit/routes/workflow.permissions.test.js:172 workflow 管理查询域延期;保留准确消息与 routes/workflow.js 到期指纹。
T19 server/tests/unit/budgetPool.service.test.js:28 budget scope 配置域延期;保留原断言与 services/budgetPool.js 到期指纹。
T20 server/tests/unit/budgetPool.service.test.js:75 budget pool 候选配置域延期;保留原断言及到期指纹,不变更预算规则。

8. 实施与只读复核记录

  • 原因码合同接入既有 run-release-gate.sh static 阶段;主链路包含 invoice bind/unbind 与共享 item resolver,不借整目录永久豁免绕过。
  • 候选、组合预检和创建事务复用 loadPaymentCreationFacts 与 resolvePaymentBatchCreationReadiness;候选关系、占用、公司账户、复核人批量读取。 部门 gate 仅在单次事实加载内复用底层 flag 查询,仍调用原判定实现;没有修改 flag。
  • 只读 reviewer 首轮发现两项 P2:未选中时无法切换付款渠道、失效已选项无法取消。 已分别移出渠道选择器的选中条件、允许失效已选项取消,并补浏览器回归。 第二轮只读 review 确认这两项闭环及请求内 gate 查询复用;无新增高置信问题。
  • 系统 Python 缺 xlwt 导致既有银行模板导出测试失败;使用现有隔离测试环境提供的 Python、通过 PAYMENT_ORDER_PYTHON_BIN 运行后恢复通过。未改依赖清单或生产配置。
  • 首轮扩大浏览器运行另包含一个合同只读用例超时,未完成该项归因,未改合同产品逻辑或该断言; 付款、B2、采购与本轮核验反馈改为明确 focused 集重跑,不把无关失败标成通过。
  • 已更新现有 backend/frontend spec;根因归类为跨层合同和传播缺失,而非真实资料补录。
  • 本轮不提交、不 push、不部署、不归档;真实资料和 0014 的任何业务写入均未执行。 部署后 AC12 仍须独立批准与公网证据,不能用本地合成结果替代。
  • 最终检查进一步发现两处付款明细直出旧失败摘要,已按 T16 补齐安全展示转换; 新原因只保存在既有执行风险 JSON 元数据中,未新增 schema、readiness 持久字段或日志机制。 追加只读 review 确认历史兼容、事务和风险状态边界,无新增高置信问题。

9. 本地验证结果(2026-09-05)

验证 结果与边界
AST strict PASS;142 注册原因、199 已迁移使用点、695 遗留调用、主链路例外 0、finding 0。遗留身份同时包含相对文件、operation 和规范化 AST 形状,不能靠移动操作或一增一删抵消。
AST self-test 20 项 PASS;正常跨域与纯格式化退出 0,其余拒绝场景退出 1,包括六类必查失败、主链路加例外、同数替换、别名、具体内容断言缺失、operation 移动、条件式通用码和不安全文案。
扩展服务端 focused 23 文件 / 407 用例 PASS:报销、票据、请假、考勤、付款、readiness、registry/helper 和客户端投影。
后续兼容/新增边界 focused 8 文件 / 309 用例 PASS:包含当轮 75 个付款 route 用例、149 个具体内容/安全投影用例、采购附件和延期域/内部摘要兼容测试;与上一行有交集,不合并虚报数量。
最终摘要投影 focused 4 文件 / 244 用例 PASS:76 付款 route、150 内容/投影、16 readiness、2 helper;新增既有风险元数据更新与历史摘要保护,和前述测试有交集。
Playwright focused 18 个不同用例 PASS(原 17 项 + 最后追加的失败摘要保护 1 项):银行正常提交、现金渠道、三类缺项、非建行、跨公司、占用、无 reviewer、创建并发、移动未知原因排障编号、键盘/ARIA、渠道可达与失效项取消、B2 双端、采购附件、核验错误、PC/移动视口历史失败明细及风险保护。仅本地全合成 API mock。
客户端工程 npm run typecheck、npm run build PASS;未部署构建产物。
服务端工程 Prisma validate、触达 JS/MJS node --check PASS;没有执行 migration 或数据库重置。
治理 UI strict/self-test、process baseline、docs registry、Trellis validate/governance、敏感扫描、git diff --check PASS。
只读 review 首轮两项 P2 已修复;第二轮确认闭环;追加摘要投影与风险元数据复核无新增高置信问题。Reviewer 未写文件、未操作真实数据。
边界核对 schema/migration/seed/flag 实现、前端 routing、真实资料与真实付款写入均为 0;0014 未操作。

复跑入口:node scripts/qa/check-error-reason-contract.mjs --strict 与 --self-test; 服务端测试中的银行模板导出需把 PAYMENT_ORDER_PYTHON_BIN 指向满足现有锁定依赖的隔离测试 Python。 浏览器 focused 文件为 payment-reviewer-permissions.spec.ts、r111-invoice-reimbursement-guard.spec.ts、 r103-cross-page-ui-consistency.spec.ts 和 pc-finance-admin-visual-wave4.spec.ts,筛选本表相关用例; 不得对公网或真实账户套用这些 mock 场景。

10. 独立复核、遗留验证事项与发布授权(2026-09-05)

  • 用户独立复核 PASS:真实调用点注入未注册原因码时 strict 退出 1;向主链路新增例外时 strict 退出 1;确认 readiness 三处共用、20 项 self-test 及格式化指纹稳定。用户确认探针全部还原,基线校验与备份一致。
  • 两个 task 已按完整文件物理分离;本目录仅保留错误可解释性与付款 readiness,Trellis 升级在独立 worktree 待单独审查。原治理文件均与开工 HEAD 一致,分离后原因码及治理门禁通过。
  • 未解决验证事项:首轮扩大浏览器运行的合同只读用例超时,未归因、不计入通过结果,不是已确认的产品缺陷或可永久忽略的 flaky。后续合同域验证前必须单独复现,补充精确用例、失败步骤及环境证据后归类;本任务不得通过放宽断言、重试至绿或混入 focused PASS 关闭它。
  • 用户明确批准本任务提交、push、部署;部署后核验 /ready 与 bundle marker、文案扫描零 findings、0014 候选禁用及缺项原因、创建接口 fail-closed、B2 保持 force_on + global。
  • 生产核验只使用最小脱敏结果,不读取或修改真实银行卡资料;不补录 0014,不执行真实付款。若前置条件变化可能导致创建成功,停止强行创建探针。
  • Task 保持 in_progress;独立复核通过不等于公网 AC12 完成。发布和公网证据待实际执行后回填,不提前标记 PASS,不归档 Trellis 升级任务。

11. 发布与公网验收结果(2026-09-05)

  • 产品提交:a83791263833547fdab7ba6910f190fcccd5e34b,已 push;本任务 42 个文件,未包含 Trellis 升级改动。当前节及验收状态属于后续证据提交,不改变线上产品版本。
  • 按既有入口 production-identity-bootstrap.mjs 先执行只读预检再部署,两次退出均为 0。生产身份验证通过,迁移 reconciliation 前后均 pending=none,回滚窗口 OPEN;应用发布、运行时 smoke 及备份合同刷新通过。未修改部署脚本、schema、migration、seed 或 flag 实现;使用既有部署 init,不将其描述为完全无运维写入。
  • /ready:HTTP 200,buildSha=a83791263833,与产品提交前缀一致。公网 bundle 扫描:scanned=106 focused=2 buildMarker=PASS findings=0。
  • 0014 候选 API:ready=false,原因码精确包含 payment_batch.legal_entity_required、payment_batch.payee_bank_required、payment_batch.payee_account_required。
  • 公网真实浏览器:候选行可见,复选框 disabled;所属公司及银行资料缺项说明就近可见,aria-describedby 正确关联。不是本地 mock 或仅根据 bundle 推断 UI。
  • 创建接口探针:先重新请求组合 readiness,确认三类缺项仍存在且 ready=false 后,才发出用户批准的创建请求;HTTP 409、VALID_001、details.reasonCode=payment_batch.legal_entity_required。未补录资料、未创建成功批次、未执行付款。
  • B2:受控认证只读查询确认 reimbursement_invoice_guard_v1 仍为 force_on + global;未调用 flag 修改接口。
  • 验证账号边界:受控财务测试账号登录 HTTP 403,未重置、恢复或更改权限;上述页面与 API 验收改用可正常登录且有既有权限的受控管理员账号完成。不将本次结果表述为该财务账号登录恢复;该账号可用性待管理员单独核对。
  • 所有公网探针仅输出状态码、原因码和布尔断言;未保存 token、真实银行资料、原始业务响应或包含真实业务内容的截图。临时浏览器均已关闭。
  • AC12 已凭上述真实负向证据勾选。0014 仍需业务人员补所属公司、确认真实开户行并录入真实资料;非建行停止,不得伪填。合同只读超时仍为未归因事项,由 shunli 在下次合同域验证前安排独立复现并归类,不计入本轮通过,不以本次发布关闭。
  • 本 task 发布验收完成,未获归档授权,保留 in_progress 和现有目录;Trellis 升级继续留在独立 worktree,未审、未提交、未部署。

12. 用户复核后的交接与待规划事项(2026-09-05)

  • 用户确认部署后复核 PASS:线上 /ready=a83791263833,复核时工作区干净且 HEAD 与 origin/main 一致。
  • 公司使用事实:用户明确本系统仅供本公司内部使用。付款主体字段用于确定对公付款账户归属,不等同于为外部公司提供多租户服务;是否存在多个付款主体不能仅由“内部使用”推导,后续方案以用户确认的单主体业务事实及有效配置为准。
  • 待规划建议(未批准实施):单公司模式下,在主体归属唯一且有效时自动采用默认主体,保留现有账户归属结构;没有有效主体、多主体或员工已有显式归属冲突时不得猜测、覆盖或按首条记录取值。员工创建时赋值与付款时解析默认值是不同的数据合同,须先选定方案;付款事实加载、账户查询、候选/组合/事务须保持一致,不能只在页面隐藏缺项或只消除 blocker。当前付款路径仍读取员工的主体归属,尚未实现此建议;未全面审计所有员工写入入口,不宣称“全系统没有自动赋值”。
  • 该建议可与单主体体验盘点一起收集,但不作为统一待办实现的前置条件或顺带改动;成本中心、单据分类仅列为待核查项,未确认其冗余,也不删除或擅自隐藏。
  • 0014 当前仍由授权业务人员按顺序补所属公司、向本人确认真实开户行及卡号并直接录入系统;资料不发聊天,非建行停止,不伪填。完成后由业务人员走创建并提交复核、经理/CEO 复核、财务登记付款。本会话不执行这些真实业务动作。
  • 下一项统一待办需求仅以该真实流程的三个交接观察为输入:交给财务组批、交给经理/CEO 复核、交回财务登记付款;每处记录谁交给谁、接收人通过什么现有入口或提醒知道轮到自己、是否需要口头催办。尚未发生的交接不预填结论,不记录真实银行资料。
  • 独立待办仍保留:财务测试账号 403 需要单独解决并补财务身份真实验收(管理员代验不等于该角色验收);合同只读超时需单独复现归因,不计入通过;“三张单的答复”仅作为用户提醒保留,未明确具体单据和答复内容,不自行推断或代答。
  • Trellis 升级另行审查:逐条核对 workflow.md 与 project-governance.md 删除或弱化的规则及理由,独立检查 hooks 行为变化;不以模型升级为整批删除保障的理由。本次仅记录后续事项,不启动新产品任务、不修改配置或真实资料、不自动提交、部署或归档。

13. 2026-09-09 到期豁免后续阶段:清单落地(本地阶段已批准)

用户在综合任务规划后回复“开始实施”。本阶段复用原 task,仅在独立准备 worktree 落地豁免台账和恢复准备;不修改原因码源码、线上配置、基线日期或门禁逻辑,不与 AP/付款产品 diff 混合。责任人沿用原基线 owner,不擅自重新指派;主会话负责技术分流与后续迁移,延期须用户逐模块裁决。

已完成和未完成

  • 已通过实际 AST inventory 按 file + operation + fingerprint 对照 673 条基线、695 次调用、73 文件;每条 observedCount 与 count 一致,0 漂移。baseline SHA-256:ddeeaadfcc8ac267b23159c5803cd6b21f282329ecbd8847a2f79551198f441f。
  • 原因码合同 PASS,20 项 self-test PASS;原 2026-10-05 日期全部保留,主链路零豁免规则不变。所有条目当前仍在源码,没有证据支持本轮直接核销;不把“没有文件漂移”当成每个错误文案已合格。
  • 文件级初分:A:16 文件 / 179 指纹 / 192 次调用;B:25 文件 / 277 指纹 / 280 次调用;C:32 文件 / 217 指纹 / 223 次调用。A 是优先审查与选取迁移,B 是需确认使用/影响,C 是逐模块审查拟延期;三者都不是已批准延期。清单覆盖所有记录,但尚未逐条完成业务语义复核,不冒充 673 条都已裁决。
  • 每条指纹在 artifacts/qa-flow/project-roadmap-execution-20260909/error-disposition.json 保留原 owner、reason、operation、count、到期日、sourceSha256,以及 lane/reviewDue/decision;proposedExpiresOn 全为空、deferralApproved 全为 false。该路径相对于原主工作区,不是这个隔离工作树内的文件。
  • 已核对首批小范围候选:AP 开关关闭及台账查询参数校验、todo 开关关闭、portal 开关关闭(4 个具体 legacy 调用);它们只作迁移设计候选,不改权限及状态规则,不宣称已迁移。用户资料/审批等高频分支按同一表继续细分,不能被这 4 条代替。
  • 特别限制:paymentAccounts.js 的唯一登记是 function:validationError 共享 builder,覆盖多个实际调用原因。不能因“只有 1 条”就在 builder 里硬塞同一个固定 reasonCode;需先区分各调用的业务含义。指纹数不是工作量或用户错误数。

日期和延期裁决

09-11 前逐模块确认本期分支名单;09-18 验证首批迁移;09-25 复审容量;09-30 前逐模块确定是否延期及各自新日期;10-02 查剩余到期项。门禁按 UTC 日期,10-05 00:00 UTC(北京时间 08:00)即判当天到期,不到午夜再处理。不能因为完成这份台账就把日期延长;每份延期需写业务影响、现有兜底、未迁移原因、负责人和新复审日期并获批,不能整包统一延期。

全量文件处置入口

A=优先审查/选迁移;B=业务影响复核;C=延期理由逐模块交审(并非已延期)。所有行原到期日均为 2026-10-05,裁决均未完成;下面数量是指纹条数/实际调用数。

文件 指纹 / 调用 分流 原 owner 首次复核
server/src/plugins/auth.js 1 / 1 A shunli 09-11
server/src/routes/ai.js 1 / 1 C shunli 09-11
server/src/routes/announcements.js 9 / 9 C shunli 09-11
server/src/routes/apOperations.js 2 / 2 A shunli 09-11
server/src/routes/approvalRules.js 6 / 6 B shunli 09-11
server/src/routes/assetMovements.js 11 / 11 C shunli 09-11
server/src/routes/assets.js 28 / 29 C shunli 09-11
server/src/routes/attendance.js 10 / 10 C shunli 09-11
server/src/routes/audit.js 2 / 2 C shunli 09-11
server/src/routes/auth.js 15 / 15 A shunli 09-11
server/src/routes/budgetControlRules.js 6 / 6 B shunli 09-11
server/src/routes/budgets.js 13 / 14 B shunli 09-11
server/src/routes/confidentialDocRefs.js 4 / 4 C shunli 09-11
server/src/routes/configRead.js 2 / 2 C shunli 09-11
server/src/routes/contractsRegistry.js 10 / 10 B shunli 09-11
server/src/routes/cutover.js 4 / 4 C shunli 09-11
server/src/routes/dashboard.js 2 / 2 C shunli 09-11
server/src/routes/delegations.js 17 / 17 C shunli 09-11
server/src/routes/departments.js 14 / 14 B shunli 09-11
server/src/routes/employees.js 25 / 31 A shunli 09-11
server/src/routes/expenseStandards.js 11 / 11 B shunli 09-11
server/src/routes/expenseTypes.js 6 / 6 B shunli 09-11
server/src/routes/exports.js 9 / 9 B shunli 09-11
server/src/routes/featureFlags.js 8 / 8 C shunli 09-11
server/src/routes/feeControl.js 2 / 2 C shunli 09-11
server/src/routes/integrations.js 22 / 22 C shunli 09-11
server/src/routes/inventoryChecks.js 11 / 14 C shunli 09-11
server/src/routes/invoicePool.js 29 / 30 A shunli 09-11
server/src/routes/invoicePool/read.js 7 / 7 A shunli 09-11
server/src/routes/invoicePool/shared/schemas.js 1 / 1 A shunli 09-11
server/src/routes/invoicePool/verification.js 7 / 7 A shunli 09-11
server/src/routes/leave-types.js 6 / 6 C shunli 09-11
server/src/routes/masterData.js 25 / 25 B shunli 09-11
server/src/routes/masterDataHolidayCalendars.js 15 / 15 B shunli 09-11
server/src/routes/masterDataSuppliers.js 11 / 11 B shunli 09-11
server/src/routes/me.js 2 / 2 C shunli 09-11
server/src/routes/migrationRuns.js 5 / 5 C shunli 09-11
server/src/routes/notifications.js 7 / 7 A shunli 09-11
server/src/routes/paymentAccounts.js 1 / 1 A shunli 09-11
server/src/routes/payroll.js 17 / 18 C shunli 09-11
server/src/routes/performance.js 12 / 12 C shunli 09-11
server/src/routes/portal.js 2 / 2 A shunli 09-11
server/src/routes/presence.js 3 / 3 C shunli 09-11
server/src/routes/projects.js 6 / 6 B shunli 09-11
server/src/routes/purchaseRequests.js 50 / 52 B shunli 09-11
server/src/routes/reimbursementTemplates.js 6 / 6 B shunli 09-11
server/src/routes/riskFlags.js 5 / 5 C shunli 09-11
server/src/routes/search.js 3 / 3 C shunli 09-11
server/src/routes/systemWorkspace.js 2 / 2 C shunli 09-11
server/src/routes/todos.js 5 / 5 A shunli 09-11
server/src/routes/travelAuthorizations.js 5 / 5 B shunli 09-11
server/src/routes/travelOrders.js 9 / 9 B shunli 09-11
server/src/routes/travelReconciliation.js 12 / 12 B shunli 09-11
server/src/routes/travelRequests.js 21 / 21 B shunli 09-11
server/src/routes/travelTransactions.js 7 / 7 B shunli 09-11
server/src/routes/users.js 35 / 40 A shunli 09-11
server/src/routes/wecomAuth.js 7 / 8 A shunli 09-11
server/src/routes/weeklyReports.js 7 / 7 C shunli 09-11
server/src/routes/workflow.js 20 / 20 A shunli 09-11
server/src/routes/workflowDefinitions.js 11 / 11 B shunli 09-11
server/src/services/ai/suggestions.js 1 / 1 C shunli 09-11
server/src/services/attendance.js 8 / 9 C shunli 09-11
server/src/services/budgetPool.js 7 / 7 B shunli 09-11
server/src/services/contractRegistryFilters.js 4 / 4 B shunli 09-11
server/src/services/cutover.js 1 / 1 C shunli 09-11
server/src/services/documentSequence.js 5 / 5 B shunli 09-11
server/src/services/employeeDirectoryFilters.js 3 / 3 C shunli 09-11
server/src/services/feeControl.js 3 / 3 C shunli 09-11
server/src/services/presenceHistory.js 3 / 3 C shunli 09-11
server/src/services/purchaseBudget.js 3 / 3 C shunli 09-11
server/src/services/travelPayments.js 2 / 2 B shunli 09-11
server/src/services/travelReconciliation.js 6 / 6 B shunli 09-11
server/src/utils/workflow.js 15 / 15 A shunli 09-11

四项状态

代码 发布 业务验收 等谁/下一步
原功能已交付;本阶段只有台账,没有新产品改动 本轮未发布 台账核对通过,不等于真人错误处理验收 先等待 T0 两笔收口的提交授权;分支细分不需生产访问;延期名单交用户裁决

14. 2026-09-09 首批具体分支与验证要求

用户采纳“推进最小恢复授权,同时完成错误豁免分支清单”的建议。本轮只细化清单,不将该回复扩大为ARM真实恢复、延期审批或产品发布授权。主仓已是b918530;73文件的源码摘要与原清单仍全部一致,清单没有因两笔提交失效。准备worktree仍基于58dcee0,未来实际写代码前须迁移到当时最新已提交基线,不能在旧基线上实施后覆盖已提交的CEO修订。

第一批四个明确调用

下面均为已有legacy调用,原到期日2026-10-05不变,reasonCode/文案为具体迁移方案,尚未修改源码或注册表。不将“功能开关关闭”改成“无权限”,不调整守卫顺序,也不自动开启开关。

文件 / operation 指纹短标识 HTTP保持 拟原因码 拟用户文案
server/src/routes/apOperations.js / function:ensureFeatureEnabled 48951ae2ad49 409 ap_operations.feature_disabled 应付账款暂未开放,请联系管理员确认处理方式。
server/src/routes/apOperations.js / /ap-operations/reimbursement-ledger 4673e0a3f7e9 400 ap_operations.query_invalid 查询条件不符合要求,请检查筛选条件后重试。
server/src/routes/todos.js / function:ensureFeatureEnabled 309a572d3996 409 todo.feature_disabled 待办功能暂未开放,请联系管理员确认处理方式。
server/src/routes/portal.js / function:ensureFeatureEnabled de0048472baa 409 portal.feature_disabled 工作台暂未开放,请联系管理员确认处理方式。

每个分支的结束判据

  • AP关闭:两个GET以及带筛选查询均保持409和原VALID_001/featureFlag/reason,增加精确reasonCode;业务财务查询次数为0。开启时继续验证CEO/manager无权403、finance等合法身份可读,原权限矩阵不退步。
  • AP查询非法:开启功能且有读取权限时无效查询保持400、保留原校验details,增加精确reasonCode,台账业务查询为0;合法查询200,无权身份不因参数非法绕过或改变原403守卫。
  • todo关闭:覆盖所有消费同一guard的入口,不只GET;409、旧details和新增原因码一致,业务读写均不发生;开关开启原合法路径正常。必须补对应路由注入覆盖,本次未发现已有按todos命名的专门路由测试,不能拿portal测试代替。
  • portal关闭:沿已有portal路由测试补精确原因码和业务查询零调用断言;开启后原首页查询不退步,不新增通知或待办业务行为。
  • 前端三个页面已消费统一resolveErrorMessage,仍需用实际ApiError路径断言四句中文,而不只检查注册表有四个字符串;未知原因保留安全兜底,不把details或内部开关名展示给员工。
  • AP现有权限测试的自定义error handler只返回code,不能用它证明details.reasonCode;需使用生产等价响应处理或另建原因码测试,保留原权限断言,不为了绿改成宽泛message匹配。
  • 注册表、客户端映射、中文fixture与真实分支测试必须同步。只移除这四个精确file/operation/fingerprint记录,不按文件删除基线,不改其余expiry。若仅本批四次调用迁移完成且无其他并发变更,预期残余669条记录/691次调用;这个数是未来验收预期,不是当前成果。

尚待细分的部分

第一批只解决四个具体分支,不等于73文件都已形成迁移决定。员工资料、登录、审批解析、票据等优先域继续按真实业务影响细分;paymentAccounts共享validationError需先追到实际调用语义,不能套一个固定原因码完成所谓“1条迁移”。余下记录仍须在既定日期逐模块确认迁移或提出有理由延期;本轮未批准任何延期。

完整四分支记录见原主工作区artifacts/qa-flow/project-roadmap-execution-20260909/error-first-batch-branches.json;原始673条台账不覆盖,保留当前与未来验收预期的区别。

15. 2026-09-25 首批 4 个分支已落码(commit cd01e4bf)

按上节方案原样落地,四处均改为调用 buildBusinessValidationError(reasonCode, details, statusCode),保留原 HTTP 状态码与 featureFlag/reason 等既有 details 字段,只新增精确 reasonCode;不改功能开关判断逻辑、不改权限校验顺序、不调整守卫顺序。

  • ap_operations.feature_disabled(409)、ap_operations.query_invalid(400)、todo.feature_disabled(409)、portal.feature_disabled(409)四条原因码已注册进服务端 errorReasons.js 与客户端 errorReasons.ts,中文文案逐字一致,并同步进 server/tests/unit/fixtures/error-reason-messages.json 的内容断言。
  • scripts/qa/error-reason-legacy-baseline.json 精确移除这 4 条已迁移记录(591→587),未按文件整体删除、未改其余 expiresOn;check-error-reason-contract.mjs 主检查与 --self-test 均 PASS,无 new_legacy/stale_exception/unregistered_reason。
  • apOperations.permissions.test.js:扩展"功能关闭"断言校验 reasonCode 与原 details 共存;新增"功能开启但查询非法"400 用例(断言 ap_operations.query_invalid 且台账业务查询为 0);新增合法查询仍 200 用例。
  • portal.test.js:补齐此前完全空白的"工作台关闭"路径——409、portal.feature_disabled、零业务查询。
  • todos.test.js:新建(此前 todos 路由零测试覆盖,覆盖 GET/POST 两个消费同一 guard 的入口:关闭时 409+reasonCode+零 todoItem 查询,开启时正常放行)。

验证:server 5 个相关测试文件 286/286 通过;client typecheck/build 通过;check-ui-design-rules.mjs --strict、check-trellis-governance.mjs、git diff --check 通过。routes/ 全量回归 872/874,2 个失败在 paymentBatches.reimbursement.test.js 的 BIFF8 导出用例,用 git stash 验证改动前 HEAD 同样失败(既有环境问题,疑似 BIFF8/Python 依赖),与本次改动无关,未在本次范围处理。

剩余 587 条例外记录不变;A/16、B/25、C/32 三档文件仍需逐模块确认迁移或提出有理由延期,本次未扩大范围、未批准任何延期。

2026-09-16 上线后契约补强

后续日期批次方案:共享date工具新增纯isValidDateOnlyString谓词(严格YYYY-MM-DD、有限UTC日期、回读同日),保持旧parseDateOnlyString行为以免无关服务突然抛500;先接报销/付款/差旅申请/资产四路由的既有Zod日期schema,optional/nullable外层语义不变,失败沿原输入错误合同且写入前拒绝。催办复用前端displayFormat的Asia/Shanghai格式并明确“北京时间”,旧details分支也校验UTC形状/有限性,不回显任意字符串。验证单测正反边界、各域实际入口/解析器、无副作用及前端typecheck/build;采购、合同、考勤等剩余消费者继续单列,不冒称所有日期解析债务清零。不迁移或改生产历史日期,不提交/部署本轮未审代码。

日期批次已本地实施:9文件450/450定向回归通过(日期工具/客户端映射/四域验证/报销统计/金额/草稿分类)。付款导出两项首跑因系统Python缺BIFF8依赖返回409,改用已有隔离Python(xlrd2.0.2/xlwt1.3.0)后整轮通过,没有修改生产依赖或产品导出门禁。命令:cd server && PAYMENT_ORDER_PYTHON_BIN=<已有隔离Python> npm test -- tests/unit/utils/date.test.js tests/unit/scripts/error-reason-client.test.js tests/unit/routes/assets.validation.test.js tests/unit/routes/travelRequests.test.js tests/unit/routes/reimbursements.create.test.js tests/unit/routes/paymentBatches.reimbursement.test.js tests/unit/routes/reimbursements.stats.test.js tests/unit/routes/reimbursements.amount-guard.test.js tests/unit/routes/reimbursements.draft-classification.test.js。资产覆盖实际create解析器的4字段无效/闰日/null,不冒充真实DB写入;差旅覆盖PATCH两日期输入前拒绝;报销/付款另有正常日期/清空/无写入反例。催办保留秒且显示北京时间,默认格式消费者仍分钟精度。

消费者盘点:已收口4路由输入schema;invoicePool局部日期函数已有独立严格校验,未重写。contractsRegistry/purchaseRequests/travelOrders/travelReconciliation/weeklyReports/presence/portal、contractRegistryFilters/attendance/employeeStats/feeControl/presenceHistory及export-small-team-observation仍调用旧解析器,需按外部输入与内部派生分类后逐项迁移,不因共享谓词新增就算已修。无生产历史日期扫描/修订;原到期日未改。当前主会话自检不计独立复核,整批新变更待只读内容复核与单独提交/发布批准。

最终增量合并验证:上述9文件再加auth.login、invoicePool.patch、workflow.batch共12文件526/526通过。cd client && npm run typecheck && npm run build退出0;Node语法检查、原因码注册229/遗留612/零finding、process baseline、Trellis治理及git diff --check通过。构建有既有Browserslist数据过期与大chunk提示,未升级依赖或修改拆包。当前未执行浏览器/生产登录业务链,不把旧22项记录当新输入重跑。准备calendar-contract-review-20260916-r1独立只读交审,旧R1/R2交付包保持原字节;本轮不提交或部署,生产仍842c61e6。

842c61e6已部署,公网只读验收通过,发布回执见error-explainability-r2-release。用户批准继续后续工作;本轮先处理独立复核F-1/F-2/F-3的本地测试缺口,不改已上线业务逻辑、不重冻旧包、不自动提交或部署。验收:服务端当前VAT必填集合逐字段投影、密码校验实际输出逐规则投影;路由断言missingFields/password兼容键与具体值;严格UTC形状但非有限日期安全回落。票种扩展、时区展示仍需分别核验,测试覆盖不扩称全集已完成。

最终同输入验证: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;没有创建定时自动化。