完善借款、编号、付款与预算并发及验收(09-06-release-gate-integrity)
汇总已落盘的借款本金与还款、兼容历史编号的周期化编号、付款责任与回单核验、报销进度和排序、PWA/采购事务、错误原因与日期校验及ERP退役。 统一共享预算池锁序和锁后判断,恢复差旅原预算选择,补原因码固定夹具及反向完整性检查。 纳入配套迁移、测试、受管QA、分层验收合同、规约及任务记录;原始证据留在ignored artifacts。 关联任务:09-17-company-loan-principal-repayment、09-17-erp-exclusive-retirement、09-18-reimbursement-periodic-numbering、09-08-reimbursement-payment-closeout、09-18-local-concurrency-product-fixes、09-19-budget-pool-concurrency、09-05-error-explainability-payment-readiness。 预算补审由Claude定向验证2文件928项通过,原4446/28及r6结果仍仅对应各自历史输入;本轮未重跑测试。 完整新候选门禁、R1真实入口接入与12项公网义务仍开放。生产编号未启用、差旅仍冻结;不推送、不部署,不宣称发布资格。
这个提交包含在:
@@ -1,5 +1,110 @@
|
||||
# 隔离备份恢复演练设计
|
||||
|
||||
## 2026-09-19 关联消费者边界(文档澄清,无执行)
|
||||
|
||||
K0 的7类输出仅验证加解密合同,不验证脱敏显示,也不等于所有 crypto 消费者的异常/null 分支均安全。Claude 的静态 PASS 按此范围接收;原合成运行和冻结包保持。
|
||||
|
||||
通知迁移脚本 `server/src/scripts/migrate-notification-channel-secrets.js` 顶层加载 dotenv/config,创建 Prisma 并连接库;--encrypt/--decrypt 都会逐条 update,后者还会将解密值写回旧明文字段。因此仅可只读源码盘点,禁止在 K0 或默认只读 K2 中 import/require/运行,也不能把其执行当作密钥验证。K1只证明保管可用性,不涉及该工具。
|
||||
|
||||
未来 K2 的字段绑定若包含通知渠道,需按来源 schema 明确 config_json 中的适用加密字段和只读样本上限,验证出口仍仅类别/数量/通过-失败-不适用;旧明文、空字段或不适用字段不能冒充解密通过。不修改通知渠道记录、不启动发送服务;真实迁移/轮换另立经审阅和批准的操作方案,不与只读恢复验收捆绑。
|
||||
|
||||
## 2026-09-17 K0/K1/K2:原密钥恢复最小设计(K0已批准,K1/K2另批)
|
||||
|
||||
源码依据:`server/src/config.js:143`字段密钥缺省空;`server/src/services/crypto/index.js:8`解析base64后要求32字节,原格式为AES-256-GCM的`v1:`载荷。此格式不含key id,不能由数据库推导原密钥;32字节只证明长度,不证明生成方式或随机性。沿用`deploy/trialrun/env-recovery-classification.json`的preserve_original及现有runbook,不改分类、生产密钥或产品加密协议。
|
||||
|
||||
K0:只加载生产加密函数与本地模板/分类,不加载真实.env。用临时合成密钥/密文覆盖正确、缺失、错误、篡改、空字段和不可解析输入;验证脚本捕获异常后只报固定类别,不调用可能带原始异常的日志分支。保管合同只记录双角色可用状态;本地模拟保管成功不能写成K1通过。不改已冻R3/app-check的“非空密钥拒绝”,新增验证只在新独立补件中实现并复核,禁止覆盖旧包使旧批准扩大。
|
||||
|
||||
本地落点:`scripts/qa/check-sensitive-recovery-contract.cjs`与`server/tests/unit/services/sensitiveRecoveryContract.test.js`。入口仅在内存生成合成材料,拒绝命令行参数,不读取环境密钥/配置/备份;直接复用生产`resolveFieldEncryptionKey`、`encryptStringOrThrow`与`decryptStringOrThrow`。生产解密返回null不等于成功:空字段是NOT_TESTED,畸形非空值是STOP;错误密钥或认证篡改异常只转固定DECRYPTION_FAILED,不使用带原始Error日志的safe分支。PASS要求合成明文精确匹配,报告保留真实来源UNKNOWN、custody/realDataDecryption为NOT_TESTED。此补件不是K2真实输入接口;不增加产品加密协议、严格编码或业务字段格式的覆盖声明。临时Buffer清零不代表JavaScript字符串或进程内存已获安全擦除保证,真实秘密载体仍须另审。
|
||||
|
||||
K1:实际保管渠道优先复用既有仓库外共享保管或加密封存,由管理员与公司责任人取用;若无渠道,只提交最小建立方案,不能先创建或导出Secret。原值如需在受控环境内比对,只输出match/mismatch/unavailable,不输出独立密钥摘要、密文示例、账户或保管路径。未批准前只整理空白检查清单,不搜索秘密值或历史命令。记录保管能力,不要求用户证明未知生成历史。
|
||||
|
||||
K2准入:K0通过、K1具备可用原密钥、安全注入方式经过独立只读审查,并得到具体一次操作批准后才执行。重新核最新合格源/镜像/平台/时效/容量;上次影子库已删除,不为省事复用已消费入口。若需要重建影子库,明确计入新批准范围,不称为只补一个无需恢复的按钮。
|
||||
|
||||
拟定隔离边界:不发布宿主端口,非root/只读根/无外网、禁后台任务和持久日志;不把Secret放进命令参数、Docker环境元数据、源码、输出或普通备份。经批准由管理员通过短时只读秘密挂载或等价受保护内存输入提供原密钥,最终选择及跨主机传输方式必须在K2绑定审查中明确,不能将这两种机制当作都已获批。关闭xtrace/core dump,失败也精确清理本轮秘密载体和影子资源,不删除原保管副本。
|
||||
|
||||
从恢复库只读选取批准字段类别/数量的密文;验证认证解密及既有格式约束,只输出类别级数量、通过/失败/不适用,不回显明文、尾号或原始异常。只读DB身份、禁止通知/OCR/外联与停止条件沿原合同;未纳入字段类别保持NOT_TESTED。历史缺件、真实密码登录及完整RTO边界与解密结果分开,不因K2成功把全部灾备改为PASS。
|
||||
|
||||
回退不是换密钥:本计划不改生产配置/密文,失败处置为停止、销毁本轮受控临时载体并保留脱敏失败原因;旧备份、旧钥和旧制品不动。若必须修改产品注入接口或密文协议才能安全执行,则暂停K2并另审该变更,不在演练现场临时补代码。
|
||||
|
||||
## 2026-09-17 K1操作提案与K2绑定清单(准备,未执行)
|
||||
|
||||
K1先由系统管理员和公司责任人在既有受控保管界面分别核验该保管项是否可取用;代理不接触密钥值,不打开真实配置、不搜索shell历史、不建立新传输通道。进入前列明两类操作者、既有渠道类别、核验时间窗口、仅可用性检查范围和暴露风险;取得该具体范围批准后才实际访问。每个角色只回传AVAILABLE/UNAVAILABLE及时间,双角色同一原值的匹配仍为NOT_TESTED,K1可用不等于备份可解密。若仅有一人/原主机保管或无法取得,则停止并提出仓库外共享保管或加密封存的另审建立方案,不能自行复制或换钥。
|
||||
|
||||
K2先填下列绑定项;目前均未取得新现场事实,不能将旧R3参数或过期源填入当作现成方案。
|
||||
|
||||
| 绑定项 | 必需事实与进入条件 | 当前状态 |
|
||||
| --- | --- | --- |
|
||||
| 备份与制品 | 最新合格成对源、manifest/来源版本/实际目录、同源镜像及平台、新鲜度与容量 | NOT_BOUND |
|
||||
| 适用字段 | 按来源schema列出实际存在的加密字段类别及只读样本上限;银行/身份/通知/核对材料分别说明,零适用样本为NOT_TESTED | NOT_BOUND |
|
||||
| 读取身份 | 专属只读DB权限;不启动任务、OCR、通知或业务写入,无外网、无宿主端口 | NOT_BOUND |
|
||||
| 秘密输入 | 管理员提供短时只读挂载或受保护内存输入,选择一种并审查传输;禁argv、Docker环境元数据、持久日志、core dump | NOT_BOUND |
|
||||
| 验证出口 | 仅类别/数量/PASS-FAIL-NOT_TESTED;错钥/损坏停止且无原异常/密文/明文/密钥摘要 | NOT_BOUND |
|
||||
| 资源与清理 | 一次性资源精确身份、异常清理、秘密载体销毁与原保管副本保留;清理失败保留未完成状态 | NOT_BOUND |
|
||||
| 审阅与授权 | 候选摘要绑定独立只读意见、具体一次新恢复范围与批准;重建影子库计入范围 | PENDING |
|
||||
|
||||
本地源码显示存在银行账户、身份、通知与付款核对相关加密用途;具体源schema和实际非空字段尚未核实,不把当前HEAD字段集合当作未来备份覆盖证明。完整附件、历史缺件、原密码登录与完整RTO仍分别验收。
|
||||
|
||||
## 2026-09-17 b1新源匹配ARM64镜像准备(已获构建批准)
|
||||
|
||||
用户已明确批准本节固定b1源码的ARM64镜像构建。批准仅涵盖构建及输入/产物元数据验证,不启动应用、不部署、不恢复、不读生产密钥、不删除旧制品;不再重复索取同范围批准。08:45 CST构建及元数据回读已完成,详情见implement最新回执。
|
||||
|
||||
最新已核ARM自然源manifest d9a23d59…、来源提交b1d25d3c9939c0020e7b4f75868cd97c35c16ba8/树a9f1c8abd16b260d23ee38508b3ff3c51710371e;生产原image9a9d2dfd…为amd64,ARM没有对应可证明制品,不能以旧b7的arm64镜像替代。两源码的实际部署Dockerfile、依赖锁、BIFF8 requirements与71项迁移集合/校验和相同,应用源码仍不同。
|
||||
|
||||
本轮批准一次b1原生ARM64镜像构建:仅导出该固定提交的client/server/scripts/部署Dockerfile/.dockerignore,不含工作树差异、.env、密钥、真实备份或业务资料;沿前次已验方式,将唯一FROM固定到已在ARM的node@sha256:c610fcdfb1d5b4740dd70c284ed3cb16bb857e0f7166196e36a5501df7a3aa32,其余Dockerfile不改。执行前再核base身份/平台和可用资源,不擅自拉另一base或启用仿真;构建所需依赖网络与后续恢复禁外联网络分开。
|
||||
|
||||
只创建本轮专属b1镜像/构建缓存及必要临时源码上下文,固定BUILD_SHA/VITE_BUILD_SHA与OCI revision;登记源码逐件/锁文件/构建上下文/镜像摘要,构建上限30分钟,失败保留脱敏回执、不自动重试。保留旧b7镜像/正式归档/共享缓存,不prune。产物只代表同源码跨平台重建,不是原amd64字节复原;不启动OA服务、不恢复数据库、不部署、不读生产字段密钥或修改业务状态。
|
||||
|
||||
成功后按新制品身份完成源/目录/应用配置重绑及补充验证;R3独立内容复核和执行时fresh preflight仍不可跳过。本节固定新版本构建已经另获批准;不把构建批准延伸为任意版本构建、应用启动或立即恢复,原一次受限恢复仍受复核/绑定/现场门禁约束。
|
||||
|
||||
## 2026-09-17 已批准:已确认历史缺件单列验收
|
||||
|
||||
当前R2实际恢复在附件引用检查停止,数据库/清理/后验PASS。现已找到09-11原处置证据和当前只读回读:精确一条manual归档发票,无七类业务关联;旧决定仅“文档标记并保留”。09-17用户已明确批准以下最小验收增量;不把当前生产扫描冒充冻结副本的最终归因,独立复核仍在执行前。
|
||||
|
||||
1. R2包与本次NO_GO回执永久保留。新候选需重新冻结并做增量复核,不直接修改已审包或复用已消费入口;源/镜像/生产版本及24小时门禁仍执行时核验,源变化或过期停止重新绑定。
|
||||
2. 历史例外只绑定recordIdentity 363834359af7b655648a2562b80559fa132093ffefaabcddb8cc827a7505a3aa和pathIdentity b22a116257e8b2e3922ee32f366935260c16bebc7fd93dcd672febb7d1fdbc5f,以及原处置证据SHA256;仅承认原件不存在,不接受替换成不同大小/哈希的文件、外部存储、非法路径或重复目标。
|
||||
3. 在本轮恢复副本重新验证恰好一条目标、manual归档与归档时间、报销/明细/差旅关联为空,以及其他四类附件表均未引用同路径;任何条件不成立仍NO_GO。其他所有引用继续安全路径/存在/适用大小/SHA检查;不按archived泛化过滤、不剔除检查行、不修补数据库或伪造文件。
|
||||
4. 输出总引用数、原始不一致数、明确已接受缺件数与未知不一致数,并保留原校验结果;只有已接受缺件恰好为这一条且未知不一致为0才允许继续既有影子应用只读验收。已有哈希的其余文件必须实际核完,不以当前生产61条元数据正常替代。
|
||||
5. 附件结果记为“存在一条已接受历史缺件”,不得写完整性PASS;即使DB/其余附件/app均成功,整体只给包含历史缺件与解密未验的PARTIAL。不新增生产写入、真实密码登录、云调用或敏感解密范围;无hash字段及请假附件覆盖限制保留。
|
||||
6. 本地定向验证覆盖精确例外通过、身份/归档/关联漂移拒绝、新缺件/大小/摘要不一致拒绝、未知路径或多个目标拒绝、保留原始计数及失败停止、清理/后验;独立增量复核后才生成新的单次管理员入口。此提案批准可合并本地实施与上述一次受限恢复,不为相同范围反复索取批准;实际sudo仍需管理员终端交互。
|
||||
|
||||
## 2026-09-16 单次隔离恢复审批清单(待批准,非执行回执)
|
||||
|
||||
本节将P2收敛为有限范围的一次演练,不包含生产回滚/部署。来源为已核ARM自然批次manifest 0913782f84bf7253a8ea1a24e727f8c20a6a637c58737b5df767331809dd2f4e,build b7d2285d、树0ef8f7d5597b1fc425888596241d041585aaccab;应用固定ARM64 image 1d4d70f843976e327106d53d13d45118e22372ac6e71cbe7db96953315b4fed3,PostgreSQL固定已核PG_MAJOR=16的ARM64 image c05eced0bdb41ea9b95a656472a6aa4d50cad0d8a2e33d14eb1c53fd6204f2ae。两者启动前再核身份,不用tag代替digest。源创建于09-15T18:30:05Z,执行时超过24小时则停止并重新绑定最新源/镜像,不自动回退或套用旧批准。
|
||||
|
||||
### 一次批准的允许动作
|
||||
|
||||
1. 由具备ARM归档读取权限的执行方式复核固定根身份、三文件集合/摘要、最新性、生产ready及ARM监控;读取归档头计算解压体积,不向开发机传输真实备份。允许本轮私有副本、影子DB/storage、两个隔离运行容器及必要的一次性验证工具;禁止访问其他业务目录或挂载Docker socket到容器。
|
||||
2. 创建带唯一runId标签的内部网络和专属空卷,均不发布宿主端口、不加现有网络。DB恢复使用原restore-db.sh的shadow/数据库精确名称/容器ID门禁;附件使用原restore-storage.sh和引用校验器,恢复失败或引用不一致即停,不排除“测试件”。来源迁移名称/校验和从固定提交生成,核固定12类表及附件聚合,不输出业务字段。
|
||||
3. 恢复完成后,仅在影子库创建临时只读LOGIN角色:非superuser/createdb/createrole/replication,授CONNECT、必要schema USAGE和SELECT,不授序列使用或DML;影子库撤销PUBLIC的CREATE/TEMP权限并设置角色默认只读事务。此处权限DDL属于明确允许的影子环境准备,不声称“恢复后全部零DDL”;不改任何员工、角色业务表、付款状态或原备份。
|
||||
4. 应用环境从空白allowlist组装,使用本轮随机且互不相同的JWT_SECRET、AUTH_CODE_PEPPER和影子DB口令;不读取生产.env/密钥。NODE_ENV=production、TRUST_PROXY_HOPS=1、JOBS_ENABLED=false、OCR_PROVIDER=off、STORAGE_DRIVER=local;EMAIL/WECOM/ERP_SYNC/TRAVEL_SYNC/IM_NOTIFIER/OIDC/OTEL_TRACES/AI_ASSIST等启用项均关闭,未列出的外部Secret/URL不传入。FIELD_ENCRYPTION_KEY保持缺省空值,不用随机密钥伪装可解历史数据。internal网络为主要禁外联防线,不改宿主防火墙/DNS。
|
||||
5. 原镜像默认入口启动应用;根文件系统只读、附件卷只读并预建storage目录,专属/tmp可写;不运行migrate/seed/worker。应用使用非root、cap-drop=ALL、no-new-privileges,DB按官方入口所需权限独立配置。日志不持久化真实请求/响应,docker log-driver=none,探针只输出状态/计数;若需诊断,仅脱敏错误类别,不回传原件、账户或完整payload。
|
||||
6. 在隔离容器内访问/ready和实际GET /api/reimbursements?scope=own&page=1&pageSize=1:用影子JWT签名秘密生成不超过120秒的测试token,subject/tokenVersion取恢复库中确有报销及expense.view_own资格的active身份,不改其密码/角色,不授管理员通配。只读比较响应数量/选中记录与同身份DB期望,不打印记录内容;匿名请求应401。此项明确是“影子签发凭证+真实认证中间件/权限+恢复库读取”,不是员工真实密码登录、SSO、浏览器验收或生产JWT链路。没有合格身份则APP_READ_BLOCKED,不造账号或扩权。
|
||||
7. 完成或失败均删除本轮精确ID/标签匹配的运行容器、临时凭证、私有副本/卷和网络,保留正式归档、构建镜像及共享缓存;不prune、不改sudoers、不长期安装runner。复核源摘要/元数据、生产ready和ARMtimer,清理失败记录cleanupPending,不出整体PASS。清理为逻辑移除,不宣称物理安全擦除。
|
||||
|
||||
### 资源和停止门禁
|
||||
|
||||
目标新测可用内存10.24GiB、磁盘87.91GiB、2 CPU,仅为规划参考。启动前要求MemAvailable至少6GiB、磁盘至少20GiB。采用专属容量受限tmpfs卷:DB数据2GiB、附件512MiB、归档副本128MiB;先核tar普通文件展开总量不超过附件限额,DB超容直接失败不自动扩容。DB容器memory=2560MiB、memory-swap同值、cpu=1、pids=256;应用memory=1024MiB、memory-swap同值、cpu=1、pids=256;临时工具顺序运行,memory=512MiB、cpu=1、pids=128。不能实现容量上限则前置停止,不把容量监测误写成硬限制。实际宿主swap及tmpfs支持须预检,既有宿主配置不改。
|
||||
|
||||
总时限30分钟(超时停止本轮任务并清理),DB恢复最多10分钟、应用就绪最多120秒、单个只读SQL最多20秒/锁等待5秒。资源达到上限、OOM、镜像/源身份变化、归档不安全、出现外部存储引用/缺件或任何未计划写入时停止;不为了通过而扩大范围。RTO分别记录复制/DB/附件/应用/清理耗时,RPO取恢复开始减备份createdAt,不以镜像构建耗时冒充恢复耗时。
|
||||
|
||||
### 结果边界与批准前本地验证
|
||||
|
||||
输出DB_RESTORE、STORAGE_REFERENCES、APP_HEALTH、APP_AUTHENTICATED_READ、SENSITIVE_DECRYPTION、cleanup分别状态。因本清单明确不使用生产字段密钥,SENSITIVE_DECRYPTION固定NOT_TESTED,整项完整应用灾备验收保留PARTIAL,不把其余阶段PASS合成为全量恢复通过;后续敏感字段恢复要独立设计受控密钥使用,不再次向用户索要密钥值。
|
||||
|
||||
原版本源码静态核实:认证只读取employee/roles并检查token_version,报销列表及委托读取为SELECT链;index→buildApp入口有storage mkdir、startJobs,JOBS_ENABLED=false才提前退出,tracing关闭才不启动SDK。已用原config源码和全新合成秘密执行纯配置验证,9项后台/外部开关关闭、OCR off、字段密钥空值PASS;此验证未初始化应用或数据库。实际网络隔离、资源/DB权限、匿名拒绝、带凭证读取与异常清理仍须先做本地合成合同验证,再冻结执行器摘要供已批准范围执行,不能将当前文档称为已可直接运行的恢复脚本。
|
||||
|
||||
## 2026-09-16 设计接续与前置决策
|
||||
|
||||
本节优先于旧单纯DB/storage阶段“不启动OA server”的约束。方案仍以ARM隔离为首选,不迁往个人开发机或生产宿主;应用容器是单次恢复申请中的第三阶段,不是当前已获授权的操作。
|
||||
|
||||
1. P1先核源build/image/platform和ARM平台。镜像与源提交不匹配、缺少匹配平台镜像或ARM不能执行时停止应用阶段;不自动启用跨架构仿真。需要同提交匹配平台构建或其他隔离目标时另列来源/依赖/构建证据及批准范围。
|
||||
2. 用原backup-all/restore-db/restore-storage工具及现有校验器,不新建通用runner。固定私有临时副本、专属空卷/网络/容器名,无宿主端口、无生产数据挂载、不接现有业务网络;应用仅连本轮影子库与只读附件副本。采用专属internal网络及已核应用配置同时阻止OCR/邮件/企微/ERP/支付/队列/cron等出站或后台写入,不改宿主共享防火墙、DNS或生产服务。
|
||||
3. 隔离库恢复阶段可写,完成后应用验证使用最小权限只读连接;禁migrate/seed/任务启动。逐一确认启动入口没有隐式写入前再启动。需要身份/解密的读取检查先设计受控方式、纳入审批;缺条件时只报已验证阶段,不伪造APP_PASS。
|
||||
4. 资源预算基线为已有“批次总字节数5倍+2GiB”,再计镜像归档/解包空间、实际storage解压体积及DB膨胀估计;取保守较大值,不能把压缩包5倍当容量保证。申请时给出CPU/内存/磁盘/超时硬上限、停止水位,精确数值由目标只读测量后冻结,不套用旧89GiB。达到上限先停止本轮写入,再按精确资源清单处置,不清旧备份腾空间。
|
||||
5. 清理仅指本轮创建、标签/ID均匹配的容器、网络、卷和临时副本;禁止prune/通配删除、删除正式源归档、既有镜像或共享卷。失败也走清理,若清理未完成记录cleanupPending并停止,不把资源残留当演练通过。
|
||||
|
||||
无副作用只读核验与恢复写操作分开申请,最终源/目标身份仅进受控ignored操作材料;任务文档只存脱敏标识、摘要和结论。
|
||||
|
||||
## 设计结论
|
||||
|
||||
采用“ARM 最新正式日归档 + 本轮私有临时副本 + 无宿主端口的一次性 PostgreSQL 16 + 空附件目录”的数据恢复方案。腾讯云生产只做演练前后公网 `/ready` 读取,不执行任何远端生产写操作;开发机不接收真实备份。
|
||||
|
||||
@@ -1,5 +1,298 @@
|
||||
# 隔离备份恢复演练实施计划
|
||||
|
||||
## 2026-09-19 K0 独立补审接收(最新)
|
||||
|
||||
- [x] 接回 b1rubx7qf 原报告 `artifacts/qa-governance/business-followup-claude-review-20260919T023537Z.txt`:K0 **PASS_STATIC_CONTENT_REVIEW**。reviewer 只读源码与既有合成测试,未运行测试、未核候选 SHA、未访问真实资料。
|
||||
- [x] 主会话另核原候选 manifest 自摘要、6件冻结文件和当前3个代码/测试输入一致;这不是 reviewer 运行证据。原候选的 PENDING 保留为交审时点状态,本段和新增接收回执记录最新状态,不重签冻结包。
|
||||
- [x] 在 PRD/design 明确脱敏不在K0合同;通知密钥迁移入口会读配置、连库并批量写入,排除在K0/K1/K2默认执行之外。未来K2通知字段只按绑定方案只读验密,真实迁移另批;本轮未 import 或执行迁移脚本。
|
||||
- [ ] K1双角色原密钥可取用的非秘密事实、K2新绑定与具体操作批准仍待取得;K0 PASS不替代它们,旧恢复不重跑。
|
||||
|
||||
两项审查观察已通过明确范围完成文档处置,不将未测脱敏、其他crypto消费者或真实通知解密改写为PASS。本轮仅任务文档/元数据,无产品修改或新增测试计数;完整implement历史、已消费恢复入口与原PARTIAL均保留。证据:artifacts/qa-governance/business-followup-reception-20260919。
|
||||
|
||||
## 2026-09-18 后续清单接回
|
||||
|
||||
09-06本轮仅本地在用门禁重验,并将K1非秘密保管事实、K2新源/制品/字段/资源/注入清理绑定列入retained-gates-closeout-20260917/independent-and-external-readiness.json。K0独立复核仍PENDING,K1/K2真实事实未查;没有连接生产/ARM、读取真实配置密钥备份或重跑旧恢复。借款及付款本地通过不抵扣保管/真实解密条件,原PARTIAL和历史缺件事实保持。
|
||||
|
||||
## 2026-09-17 后续推进:K1/K2准备与独立复核交接
|
||||
|
||||
用户要求按已梳理顺序继续,并补齐缺失规划。本轮授权落实为本地准备与已规划治理;具体保管核验、原密钥取用和新恢复绑定尚无事实,不据此开放生产/ARM或重跑旧入口。K0主会话通过保持,独立审查在inline模式下仍PENDING,不能通过另派检查代理代替真实独立身份。
|
||||
|
||||
- [x] 固定K0源码、生产crypto依赖和本task合同形成新只读审阅候选,保存文件摘要与审阅清单;不覆盖K0原证据或旧恢复四包。
|
||||
- [ ] 接回独立审阅意见:核生产函数复用、错误/空值分流、禁输出秘密及原异常、无外部输入/环境读取、合成与真实结果分离;审阅方重跑须单列环境/命令/结果与候选摘要。
|
||||
- [ ] 接回双角色保管渠道类别/可用状态的非秘密陈述;用户陈述只记REPORTED,实际取用仍NOT_TESTED。
|
||||
- [ ] 按下述设计审阅具体K1操作;渠道不可用时仅提出补建方案,不先导出/转移/生成Secret。
|
||||
- [ ] 具备K1事实后填写K2源/制品/字段与资源绑定清单,独立只读审查后取得一次新操作批准;缺任一项不生成可运行远端命令。
|
||||
|
||||
K0审阅候选位于`artifacts/qa-layout/followup-governance-20260917/k0-review-candidate/`。本轮后续本地B1/B2移至09-05,K1/K2与独立复核保持明确待办,不把等待条件写成任务全完成。
|
||||
|
||||
## 2026-09-17 K0本地合同已实施,K1/K2另批
|
||||
|
||||
规划来自09-08顶部优先级表;用户本轮明确批准仅K0本地合同检查与合成验证,旧一次恢复完成事实不变。官方current已从09-08通过task.py start切到本task并回读为当前会话来源;task仍in_progress,不代表K1/K2敏感操作获批。
|
||||
|
||||
- [x] 审阅本task顶部PRD/design,取得K0本地实施批准后切官方current到本task并核执行树差异。
|
||||
- [x] 运行现有`node deploy/trialrun/validate-env-contract.js`,核preserve_original、双角色保管要求和来源/保管/可恢复三个不同结论;只读模板/代码。
|
||||
- [x] 新增最小合成恢复合同测试`server/tests/unit/services/sensitiveRecoveryContract.test.js`及独立本地补件`scripts/qa/check-sensitive-recovery-contract.cjs`,覆盖缺钥/错钥/篡改/空值/成功与输出脱敏;复用生产crypto函数,不改旧冻结runner。
|
||||
- [x] 执行`cd server && npm test -- tests/unit/services/sensitiveRecoveryContract.test.js --maxWorkers=2 --minWorkers=1`及涉及脚本的语法检查、环境合同/Trellis/process/敏感扫描;具体新增文件及结果见下方回执。
|
||||
- [x] 输出K0本地回执和K1无秘密值的保管检查清单。K1访问或建立保管渠道前单独列操作者、范围与风险申请,不要求用户回忆密钥。
|
||||
- [ ] K1具备条件后准备K2新源/制品/字段类别数量/资源/秘密注入及清理绑定包,独立只读复核后集中请求一次具体操作批准;K0通过不预先批准K2。
|
||||
- [ ] 真正执行后只登记实际分项和清理结果;错误/不可用/无样本分别停止或NOT_TESTED,未完成条件不勾选。
|
||||
|
||||
本地阶段不用sudo,不连接生产/ARM,不读取真实密钥、密文或备份。若K1/K2等待管理员操作或具体绑定,回到09-08协调并推进09-05治理;不反复让用户运行旧恢复入口。提交/推送/部署及所有真实数据/秘密操作仍另批。
|
||||
|
||||
### K0本地回执
|
||||
|
||||
- 工作树沿用已指定的20260911-detail-layout;进入时HEAD为b1d25d3c、detached,官方current为09-08的session-fallback。初始18份脏文档/元数据及借款planning任务四文件已在ignored本地证据保存原字节/差异基线,不接管借款实施。
|
||||
- 现有环境合同PASS:config键150、模板及分类键均166;FIELD_ENCRYPTION_KEY仍为preserve_original,双角色仓库外保管要求与来源/保管/真实恢复三种结论保持独立。没有加载生产配置。
|
||||
- 新增30项定向测试PASS(1文件);合成CLI的7类矩阵PASS。覆盖缺失/无效密钥、有效长度错钥、IV/tag/密文三个位置篡改、空/null/缺字段、畸形/未知版本/类型、明文不匹配、原始异常抑制、无日志和CLI无输入/无回显边界。7类CLI检查也是这30项中的覆盖,不累加为37个不同测试。两新增JS文件node --check通过。
|
||||
- 执行使用精简子进程环境;仅做元数据检查确认工作树根和server无Vite会自动加载的.env系列及项目.npmrc,npm用户/全局配置使用本轮新建空文件。首次把二者都指向同一空设备被npm以double-loading拒绝,测试尚未开始;拆为两个空文件后30项通过,未读取真实配置。保留启动失败日志,不将其计为产品失败或测试通过。
|
||||
- 四份旧冻结包逐项核对manifest、登记字节数/SHA及精确文件集合均PASS:R1为17+2=19、R2为19+2=21、R3为28+2=30、绑定执行包14+2=16,合计86。09-08上轮文字写96,与本次现场计数不同;本轮未发现任何manifest登记件缺失,不推断历史多计原因,也不改旧记录或冻结字节。
|
||||
- 新证据归`artifacts/qa-layout/sensitive-recovery-k0-20260917/`,只存本地合同摘要、验证日志及既有非秘密差异基线;没有真实数据/密钥材料。原恢复的PARTIAL、历史缺件1、密钥来源UNKNOWN、真实解密NOT_TESTED继续保留。
|
||||
- 收口检查:task validate、Trellis治理(23项task合同、1242份Trellis文件敏感扫描)、process baseline、CURRENT事实源敏感扫描(30份、finding=0)及git diff --check通过。docs registry为0错误、1项既有告警(22份未登记文档),未修理无关文档。未改schema/产品代码,不运行Prisma、前端构建、浏览器或旧恢复测试。当前规约已覆盖保管/恢复边界,本轮细化合同留在本task,不扩写原有脏spec。
|
||||
- 范围对账:本轮仅新增上述2份本地QA/测试源码,增量更新本task的PRD/design/implement/task notes及09-08入口implement;其余17份初始文件(含借款四文件)原字节不变,五份更新文件的既有非K0内容保留。四包86件集合/摘要、HEAD及真实index不变;当前指针留08-23供接续,不自动切入下一实施段。
|
||||
- 主会话inline实施/检查,未派子代理;独立只读复核仍PENDING,尤其K2真实执行绑定方案尚不存在。本地通过不代表公网验收或K1/K2放行;未连接生产/ARM、未重跑旧恢复、未提交/推送/部署/归档。
|
||||
|
||||
### K1保管检查清单(空白,未访问)
|
||||
|
||||
只填角色、渠道类别、验证时间和可用状态;不填姓名/账号、Secret及摘要、保管地址/目录或原始凭据。来源历史仍UNKNOWN,可用性必须经另批实际核验。
|
||||
|
||||
| 角色 | 渠道类别 | 验证时间 | 可用状态 |
|
||||
| --- | --- | --- | --- |
|
||||
| 系统管理员 | 待批准核验(未访问) | 未验证 | NOT_TESTED |
|
||||
| 公司责任人 | 待批准核验(未访问) | 未验证 | NOT_TESTED |
|
||||
|
||||
- [ ] 在访问或建立保管渠道前,明确操作者角色、仅可用性核验的范围、暴露风险与批准;不由代理查历史命令或让用户发送明文。
|
||||
- [ ] 另批后确认两个角色各自有仓库外受控取用渠道,且不只依赖原主机或单人记忆;只记录渠道类别(共享保管/加密封存/不可用),不导出Secret作为证据。
|
||||
- [ ] 无渠道或原密钥不可用则STOP并提出最小后续方案,不创建新钥替代,不将K0合成成功记为保管成功。
|
||||
- [ ] K2另行绑定新鲜源/制品/字段类别数量/秘密注入/清理及独立只读复核,再取得具体一次操作批准;旧入口不再使用。
|
||||
|
||||
## 2026-09-17 09:33 CST实际恢复完成:按批准范围结束,整体PARTIAL
|
||||
|
||||
用户通过新单次入口完成真实ARM影子恢复。本地manual-bound-restore-result.txt唯一JSON与用户回传的观测时间、review/execution/source三摘要及分项结果核对一致,已脱离终端地址/密码提示保存real-bound-restore-result.json,executor=USER_MANUAL_SUDO。最终PARTIAL_KNOWN_MISSING_AND_SENSITIVE_DECRYPTION_NOT_TESTED,failedStage=null、restoreStarted=true;这不是完整灾备PASS,也不是新的NO_GO。
|
||||
|
||||
| 分项 | 本轮实测 | 边界 |
|
||||
| --- | --- | --- |
|
||||
| 现场预检 | PASS,1.167秒;RPO25372秒(7小时2分52秒) | 新源d9a23d59…、b1d25d3c、匹配ARM镜像;24小时/最新性/资源门实际通过 |
|
||||
| 准备/数据库 | PASS,1.455/2.677秒 | 真实备份恢复到一次性PG16;71项完整迁移映射核对通过,12类关键表可读 |
|
||||
| 附件 | PARTIAL,0.873秒;62条引用/1原始不一致/1已接受历史缺件/0未知不一致/0外部引用 | 原严格校验器未过滤归档件;恢复副本重核精确身份/归档时间/七类零关联/实际缺失;其余引用在适用大小/SHA范围内无新异常,非所有文件均有SHA字段 |
|
||||
| 应用 | PASS_SHADOW_AUTHENTICATED_READ,8.542秒 | 实际镜像健康、匿名拒绝、影子凭据通过真实认证/权限后只读列表与恢复库行身份一致,DB只读权限成立;非真实密码/浏览器验收 |
|
||||
| 清理/后验 | PASS/PASS,cleanupPending=false,productionWrites=false | 正式归档元数据与摘要、生产ready、监控timer后验通过;只删除本轮影子资源,不改生产或历史缺件 |
|
||||
|
||||
attachmentCount=62是归档/解包普通文件数,不等于62条引用全存在,不能抵消引用中的历史缺件。缺件处置SHA仍5ed1e910…,完整值见实际回执;原R2的09-16 NO_GO及R3冻结包、绑定执行包原字节保留,不改历史结果。两类包的“未执行”是冻结时刻事实,当前执行状态以本节及绑定三摘要的实际回执为准。
|
||||
|
||||
时间口径:准备+数据库+附件阶段小计5.005秒,加入应用为13.547秒,含预检的已报阶段合计14.714秒;未独立记录清理/后验耗时或精确启动时刻,不将小计称完整RTO/切换RTO,不宣称满足未约定SLA。RPO为现场测值,不是备份频率或业务允许丢失窗口的承诺。
|
||||
|
||||
01:36Z主会话补做只读元数据后验PASS:单次入口暂存目录已移除,restore-run标签容器0/网络0、临时恢复目录0;备份dead-man与公网健康timer均active/enabled;公网ready仍b1d25d3c。仅元数据与公开健康读取,无新容器、恢复、备份内容读取、生产Secret/业务写入;证据real-bound-restore-postcheck.json。新入口已消费,不重新暂存、不重跑、不再索取本次授权。
|
||||
|
||||
当前结论:本次批准的受限演练执行/分项验收/清理已完成。完整附件恢复仍有一条已接受且未找回的历史缺件;SENSITIVE_DECRYPTION=NOT_TESTED、生产密钥来源UNKNOWN、保管/恢复能力没有被此次验证证明。后续如验证敏感字段恢复,应另做受控密钥保管与灾备方案,不索要聊天明文、不自行换新密钥;不为清单全绿删除引用或重复实际恢复。AC4完整附件及AC5完整计时/同源滞后指标保留未全满足,task维持in_progress,不自动归档/提交/推送/部署;09-08其他自然业务和到期治理不随本轮结案。
|
||||
|
||||
本轮只核实际回执、执行只读元数据后验并更新任务/操作手册;任务校验、Trellis(含敏感扫描)/process/docs及diff通过,两级冻结包文件集/逐件摘要未变。未重跑原104项或新增产品测试计数;原54项独立单测与R3静态内容审查继续按原范围记录。本次运行出口已关闭,不再要求用户执行命令。
|
||||
|
||||
## 2026-09-17 09:28 CST:R3新源绑定包已冻结并暂存,待管理员单次恢复
|
||||
|
||||
用户交互sudo回执PASS_SOURCE_DIRECTORY_BINDING_OBSERVATION_NOT_EXECUTION,01:18:40Z实测:固定源d9a23d59…、b1d25d3c,年龄6.81小时,DB/storage摘要/字节与归档元数据/timer前后均通过。实际runId为auto-20260916T183002Z、相对目录hyb-oa-backup-auto-20260916T183002Z,完整目录身份3cd4b78f…;createdAt18:30:04不能替代runId的18:30:02。rootIdentity1201d50a…与批准值一致;87.84GiB可用磁盘,memoryGiB11.68是物理总量,不冒称MemAvailable,执行前另核可用内存。
|
||||
|
||||
本轮继续既有批准内的执行输入定稿:
|
||||
- [x] 从本地原始终端回执提取唯一JSON并与用户回传关键身份核对,保存脱敏USER_MANUAL_SUDO证据。
|
||||
- [x] 重新只读核生产ready/固定ARM镜像版本/资源;从b1提交生成完整71项migration映射并与R3核对,不凭数量假设相同。
|
||||
- [x] 新建绑定执行包,原R3代码/helper/历史例外/migrations保持字节或完整映射不变,仅新bundle的源build、manifest、实际batchName及appImage更新;review/execution两级摘要绑定,不改原R3/R2。
|
||||
- [x] 沿原一次性入口与暂存方式准备新封装,定向测摘要篡改拒绝、白名单重绑、PARTIAL/NO_GO与清理后验出口;不重用09-16已消费入口,不在生成/传输阶段调用Session.execute。
|
||||
- [x] 冻结/校验通过后普通用户暂存并回读一致,交付交互sudo单次恢复命令。实际root现场preflight通过后才写影子资源;源过期/变化仍停止,绝不自动回退或扩例外。
|
||||
- [x] 管理员执行新入口,接回实际DB/附件/应用/清理/后验结果并分项判定;详见09:33 CST最新记录,整体保留PARTIAL。
|
||||
|
||||
此回执本身未创建容器、未恢复/解包、未修改生产;不把它升级为真实恢复PASS。既有一次受限恢复批准不重复询问,最终敏感解密仍NOT_TESTED,有历史缺件时最高PARTIAL_KNOWN_MISSING_AND_SENSITIVE_DECRYPTION_NOT_TESTED。
|
||||
|
||||
01:22Z新增只读前提PASS:生产ready仍b1d25d3c,ARM app5d279fef…/db c05eced0…分别核实linux/arm64及BUILD_SHA/PG_MAJOR16;可用内存10.25GiB、磁盘87.84GiB、swap0。b1来源71项迁移名及逐件SHA组成映射与R3完全相等,规范化映射SHA8adf634b…,不是只对数量。该观察不替代实际执行时preflight,未新建容器或读生产Secret。
|
||||
|
||||
新绑定包restore-once-execution-20260917-r3-b1:14登记文件+manifest两份,执行manifest SHA f7cf4d62f58f540f950570518568f70aa1f44db328f58a769566f7e5a5e4acce;review-manifest仍33001f58…。原R3执行器及四helper逐字相同,原review-bundle保留;新bundle只改plan的appImage/batchName/build/manifestSha256四项和executionBinding,完整迁移映射/历史处置/其他计划不变。新包独立状态为PASSED_STATIC_R3_CODE_ONLY,封装/绑定增量只有主会话检查,不伪称已独立审新入口。
|
||||
|
||||
新入口approved-bound-restore-entry.py为170741字节、SHA011b42bd282b7fccc8ee0953c034da66973e28e222cf1c0db3948a326437db2e;装载先核执行manifest及全部payload,再核R3原manifest/code/helpers/旧bundle、白名单变更及源/镜像/配置/迁移证据,之后才取得Session类。12项入口合同通过,含每份payload篡改拒绝、装载零外部调用、非白名单改动/目录和摘要漂移/配置或迁移变动拒绝、两类成功仍PARTIAL、清理/后验失败非零。
|
||||
|
||||
01:28Z仅普通用户暂存新入口,上传摘要及另次回读一致;暂存目录身份8e34a582…,无真实数据,rootExecuted/restoreStarted均false。新shell run-approved-bound-restore.sh SHA55589a0424b445a5632bb5a0906da58b8691a01793a17171bcf1ae4cf2cc33fa,输出manual-bound-restore-result.txt,TTY/sudo/严格host-key/noclobber单次门;root loader再核入口摘要和实际暂存目录身份,先消耗入口并移除专属空目录再执行。4项传输合同通过:正确摘要只消费本入口、篡改/错目录不执行、意外文件保留且不执行;旧暂存/旧入口未触碰。暂存文件有意保留等待管理员,不称已清理完毕;真实执行前会移除。
|
||||
|
||||
管理员应在项目根运行artifacts/isolated-worktrees/20260911-detail-layout/artifacts/qa-layout/postrelease-recovery-20260917/run-approved-bound-restore.sh。这是已授权的真实影子恢复,不是只读选源;先现场预检,任何新增不一致/源变化或超龄都停止,不自动重跑。即使成功仍保留历史缺件/解密未验PARTIAL;正式归档、生产数据/配置/权限、旧镜像零修改,未提交/推送/部署。
|
||||
|
||||
最终主会话整批104/104通过(4.757秒,原88+新封装12+传输4),不新增独立通过计数;源R3/新执行包文件集、逐件摘要、入口/shell摘要和语法、Trellis/process/docs及diff门禁均通过。bound-final-check.json状态READY_FOR_MANUAL_SUDO_FRESH_PREFLIGHT,实际rootExecuted/restoreStarted仍false;HEAD/index不变,暂存无真实数据并等待一次消费,未把暂存当成恢复成功。
|
||||
|
||||
## 2026-09-17 09:11 CST配置专项通过,目录绑定只读入口已备
|
||||
|
||||
用户要求继续推进。本会话找到并读取restore-once-r3-claude-review-20260917T005959Z.txt完整外部报告:六项静态内容审查通过、无阻断项;与先前用户转回的独立完整性及54项重跑分开登记。报告明确未运行测试/未重算哈希/未做真实恢复,不能把三类不同证据混成一个独立执行结论。冻结R3不改,外部报告摘要另附补件记录。
|
||||
|
||||
三条信息项按已知接受登记,不为清理卫生改动重写已审候选:F1先核历史目标后核总失配数,额外失配仍NO_GO;F2只读探针存在不可达production分支,硬编码arm使之不可达;F3测试跨目录fallback,本包必需文件齐全/摘要已核,实际不触发。后续收敛时再处理,不扩大历史例外。
|
||||
|
||||
本轮清单(已有受限恢复准备范围,不是新恢复启动授权):
|
||||
- [x] 用固定b1镜像的一次性network=none、只读根、非root、禁日志/挂载的工具容器运行原配置检查器和冻结app-check非空密钥拒绝分支;只用新生成合成秘密,不启动HTTP服务、不连DB、不读备份/生产Secret,精确清理。
|
||||
- [x] 原R3只读选源探针保持不变,另备最小增量的目录绑定探针,输出实际runId/相对batchName并绑定已核源manifest/版本;超龄/漂移/完整性失败仍停,不从createdAt推导目录。
|
||||
- [x] 验证并生成交互sudo只读入口;root读取不能由代理绕权限或索要密码,无管理员回执前保持SOURCE_DIRECTORY_BINDING_PENDING。
|
||||
- [ ] 接回目录身份后再冻结全量新bundle/执行输入,现场preflight后才恢复;不重用旧一次入口,不修改R2/R3字节或提前宣称恢复PASS。
|
||||
|
||||
外部完整内容报告SHA256 fd58e49199f4172cb3e3544c35f909b7424dae6bc422feb597c5a560631fa07b,已读取原件;静态内容PASS与用户转回的54项独立重跑分别有据,后者原日志仍未取得。本轮不改包内PENDING字节,以本节及binding-preparation.json附录标注PASSED_STATIC。不是全恢复验收,新增准备器未包含在该外部内容审查范围。
|
||||
|
||||
01:10:49–01:11:08Z实际ARM固定image5d279fef…纯配置专项exit0:原check-image-config.cjs SHA41d213ec…、config SHA a3b62630…、冻结app-check SHA7e56f081…一致,真实镜像依赖、无替身;字段密钥缺省空、合成非空值被app-check拒绝,未启动HTTP应用/DB、未读取真实备份/生产Secret。工具容器512MiB内存/同值swap上限、1CPU/pids128、非root/只读根/cap-drop ALL/no-new-privileges、network none、无挂载/宿主端口、log-driver none,启动前及结束后实际inspect核验;精确ID/label清理PASS、cleanupPending=false,回执arm-image-b1-config-check.json。
|
||||
|
||||
目录绑定补件source_binding_probe.py在原R3探针外另存,source-binding.delta.diff可重放:增加实际runId、相对batchName与完整路径摘要;只观察最新规范批次,不向旧源回退,规范名下最新symlink/非目录拒绝;不重复镜像全盘盘点。最终要求固定manifest d9a23d59…、b1版本/原amd64 sourceImage、时效≤24h、DB/storage完整性与归档/timer未变,成功仅为PASS_SOURCE_DIRECTORY_BINDING_OBSERVATION_NOT_EXECUTION,绝不写成已恢复或可跳过preflight。原R3不可达production分支保留,不借此清理已审代码。
|
||||
|
||||
只读入口read-arm-source-binding.sh绑定probe SHA e6f9cd8517c7860ad19ee00d86b2b21b4ef3704e17c3abf434fb2dd913c4ccb6;自身SHA b9c3f4724e460eb1560d69a5369a952cbce660e030425fa701907d47830063a8。前后摘要闸、StrictHostKeyChecking、交互TTY、输出noclobber;仅内存传入sudo python3 -I,无远端安装/容器/解包/恢复。与已消费refresh-arm-source.sh为不同输出,不改旧入口。尚未执行root探针、无实际runId证据;用户在项目根运行该入口并回传JSON后才可定稿bundle,不猜目录秒数。
|
||||
|
||||
新增5项配置隔离单测、10项目录绑定单测、4项入口合同全部通过,合并此前69项为88/88(4.571秒,主会话);命令为PYTHONDONTWRITEBYTECODE=1 python3 -B -m unittest discover -s artifacts/qa-layout/postrelease-recovery-20260917 -p 'test_*.py' -v。测试均合成,只有上述配置专项启动过无网工具容器;新源未解包、无真实恢复/敏感解密/业务写入/提交/推送/部署。R3的30件字节和manifest33001f58…再次核对不变,原19项PG不重跑、不冒增独立计数。
|
||||
|
||||
## 2026-09-17 R3独立完整性/54项重跑回执已接回,内容审查仍进行中
|
||||
|
||||
用户转回独立执行方报告:R3 manifest33001f58…自摘要、28份登记文件摘要/字节数/文件集、前驱R2 076078be…、R2执行器/manifest及五份helper/原测试字节保留、两份delta重放均PASS。独立方在包外以PYTHONDONTWRITEBYTECODE=1/python3 -B先导入unittest/unittest.mock,再discover全部test_*.py;EXIT0、54项、4.557秒,23+28+3与交付日志逐名一致。包内30件跑前后摘要不变、无pycache;日志仍在独立方scratchpad,摘要短标afa5c7d9…,本会话未取得日志原件,不冒称亲自独立执行或已验日志全摘要。
|
||||
|
||||
本会话仅重新核本地R3完整manifest及28份文件摘要/字节,均一致,未重跑这54项、未新增测试通过计数。转述中历史处置摘要简写尾部与实算值不同,完整值以包内5ed1e910408b32d336235729850cb35238bb3ee15b587618c0a56417f2bee8fd为准;原manifest校验及处置文件均未变,不按简写修改冻结身份。
|
||||
|
||||
当前分项:包完整性独立PASS;54项单测独立重跑PASS(用户转述回执);内容审查IN_PROGRESS,外部会话b1ferktxd尚未给结论。19项最小合成PostgreSQL合同仍仅主会话执行,独立方只读元数据未重跑;b1构建新增15项同样不是本次独立54项范围。冻结包内independentContentReview=PENDING保持,审查进度在包外本节登记,不提前写成整体放行。
|
||||
|
||||
继续等待内容审查结论,同时保留新源runId/实际目录绑定、新镜像实际配置专项、重冻执行输入及现场fresh preflight门禁;这份中间回执不授权跳过任一项,不生成或运行第二次恢复入口。未改R3/R2、源码、生产或ARM资源,未提交/推送/部署;用户无需重复批准既有范围。
|
||||
|
||||
## 2026-09-17 08:45 CST:b1原生ARM64构建完成(未启动/未恢复)
|
||||
|
||||
本轮用户批准固定b1d25d3c/树a9f1c8ab与既有node digest的同源码ARM64镜像构建,不包含部署、应用启动、真实恢复或Secret读取。主会话直接实施和检查,不派实现/检查子代理、不冒充独立复核。复用本task清单,不改原R2/R3冻结包或已消费恢复入口。
|
||||
|
||||
- [x] 准备独立的一次性b1构建器,验证源码/归档/固定base与资源停止门禁;不依赖b7旧失败回执。
|
||||
- [x] ARM现场核base/平台及至少6GiB可用内存、20GiB磁盘,固定30分钟构建时限;失败记账、不自动重试、不prune。
|
||||
- [x] 产物平台、BUILD_SHA、OCI revision及未启动应用/旧制品保留元数据核验,保存源码/锁/上下文/日志/镜像摘要。
|
||||
- [x] 更新本task与09-08协调记录,保留R3独立复核及新源最终绑定待办,不把构建称为恢复PASS。
|
||||
|
||||
实际一次构建exit0,00:44:10–00:45:16Z全程66.691秒(含源码准备/SSH预检/后验,不是恢复RTO)。产物sha256:5d279fefadee0e6d8d0e9f13c80a521165d495d2a141679ca276aeba51489d79、1075296688字节,linux/arm64,BUILD_SHA/OCI revision均为固定b1提交;镜像无FIELD_ENCRYPTION_KEY/DATABASE_URL/JWT_SECRET/AUTH_CODE_PEPPER非空配置,容器数0,旧b7镜像保留。后验内存可用10.23GiB、磁盘87.84GiB、swap0,未清共享缓存;构建日志9处CACHED,因此不声称全新依赖安装或原amd64制品字节复原。
|
||||
|
||||
输入1103份固定Git文件,只有部署Dockerfile首个node FROM改为批准digest;原Dockerfile SHA1699c6aa…、修改后26b5a2b2…,三份依赖锁摘要与原批准记录一致。gzip上下文2371581字节、SHA8cfab7a816ced0fe330d9b3202cb2a8165439885f019efa7a36de9b0d6ba7767,逐源列表SHA6b0d5f62…,构建日志SHAbec77d0a…;完整值留在postrelease-recovery-20260917/arm-build-b1-result.json及source-hashes文件。仅源码上下文通过stdin传往ARM,无真实备份或生产配置传输。
|
||||
|
||||
本地新增15项保护单测通过,合并原54项为69/69;最初两例mock把docker inspect数组写成对象导致测试失败,已仅修测试夹具并保留初次失败日志,未因此发生ARM构建重试。覆盖归档范围/路径/链接/秘密文件、FROM最小替换、固定base/资源/产物身份、失败预检不build、已有回执拒重跑、构建失败不重试及成功不启动应用。主会话执行,不算独立复核;未新增DB集成、浏览器或应用运行计数。task/Trellis/process/diff通过,R3 manifest33001f58…及28登记文件共30件原字节保持。
|
||||
|
||||
剩余门禁:R3外部内容复核仍PENDING;取得新源同manifest的runId/实际目录身份后重冻执行输入,补新镜像实际配置专项,再现场重核源/最新性/资源。当前源有效期至09-17T18:30:04Z;超龄则重新核源,不回用旧b7、不改R3冻结字节。没有生成新恢复入口,没有第二次真实恢复、生产访问/写入、Secret读取、部署、提交或推送。
|
||||
|
||||
## 2026-09-17 08:15 CST新源只读回执已接回:数据源完整,b1匹配镜像待批准准备
|
||||
|
||||
用户手工sudo只读回执与本地脚本输出JSON核对一致,已脱离终端地址/密码提示保存arm-fresh-source-readback.json(executor=USER_MANUAL_SUDO)。ARM固定根身份1201d50a…一致,最新自然源createdAt=2026-09-16T18:30:04Z,manifest SHA256 d9a23d59fb31e3807ed720efb89a4219c466763551e6aa897a5532c40d496b65,来源b1d25d3c,实测5.75小时;DB3186135字节、storage17880399字节,均通过manifest摘要/字节检查,源元数据与timer前后未变。旧09-15源29.75小时超龄,不回退。此结果是配对归档完整性,不是新源已恢复或应用PASS。
|
||||
|
||||
新源sourceImage=9a9d2dfd…与当前生产image、BUILD_SHA只读核验一致,原制品linux/amd64,ARM清单不含此image。ARM97个image ID与上一轮版本盘点完全相同,只有b7对应1d4d70f8…,没有可证明对应b1的ARM64应用镜像。普通账号资源再读MemAvailable10.25GiB、Docker余87.88GiB、2CPU、swap关闭;只读,无build/pull/load/恢复或配置更改。
|
||||
|
||||
本地来源树a9f1c8abd16b260d23ee38508b3ff3c51710371e;b1与b7的71项migration名称及校验和全相同。实际部署Dockerfile deploy/trialrun/Dockerfile、.dockerignore、前后端package-lock及BIFF8 requirements逐字相同。最初兼容性探针误以server/Dockerfile作检查路径,不能证明实际Dockerfile;已以fresh-source-build-inputs.json对真实五个路径逐个Git blob比对补正,原回执不冒称该项充分。schema/构建入口一致不等于应用镜像版本可混用。
|
||||
|
||||
下一项单独受保护动作是b1同源码ARM64镜像构建,范围见design新节;未获此构建批准,不执行Docker build或仿真、不读取Secret。R3内容复核仍PENDING,manifest33001f58…保持原字节;新源绑定/制品身份另行附包,不把R3的PENDING_NEW_SOURCE改一字段当放行。当前只读回执未输出runId/实际目录名,不能由createdAt推导;后续绑定须从已核manifest.runId或同摘要目录现场取证,未取得前不猜测可执行batchName。
|
||||
|
||||
新源24小时有效期到2026-09-17T18:30:04Z(北京时间09-18 02:30:04),实际执行仍重新核最新性/完整性/资源/生产版本;过期或新源变化则停止重新绑定。已批准的精确历史例外和一次受限恢复不重复索取,匹配新源码制品的构建须单列明确批准。证据均在postrelease-recovery-20260917,未提交/推送/部署。
|
||||
|
||||
## 2026-09-17 精确历史例外实施(已批准,未重跑恢复)
|
||||
|
||||
用户批准本地修订、测试并独立复核后一次受限恢复,不重复索取同范围批准。执行顺序:保存R2/原NO_GO→工作副本实现精确归档身份/七类关联/真实缺失校验→沿用原严格校验器,保留全部引用和原不一致计数→单测与真实合成PG查询验证→冻结增量供独立复核。例外成功也只给PARTIAL,新增不一致仍阻断应用;不改产品代码或生产记录。
|
||||
|
||||
本轮北京时间09-17晨间接续,旧固定源已过24小时,原入口已消费且不可重用。只读刷新最新自然源事实,不把旧ARM镜像当成新备份匹配镜像,不启动实际恢复或擅自构建新制品。R3若绑定前提未齐,仅作为不可执行的内容交审包,清楚标出source binding待补,不伪装READY。
|
||||
|
||||
实施完成:原严格附件helper保持原字节和全量输入,执行器仅修改preflight/verify_storage/execute三个既有方法,新增处置证据/精确查询/实际缺失三方法;其余14方法AST相同。先记录rawMismatches,再在恢复库验证唯一记录/路径、manual归档且归档早于备份、七类关联全部false,检查实际文件不存在且路径无符号链接/非法父节点。只有一条明确历史缺失且无其他不一致才继续app,storage及整体保留PARTIAL;若原严格检查零不一致则不虚构例外。未绑定源的bundle在preflight以SOURCE_BINDING_PENDING拒绝,不生成恢复启动器。
|
||||
|
||||
验证:主会话54/54(原23源码未改+例外28+只读选源3)通过,冻结副本再跑同54项亦通过,不计108个不同测试;真实本地PostgreSQL16最小合成schema验证19项,含实际新SQL/原helper、长路径base64、七类关联、身份/时间/重复、额外缺件与大小/SHA、空SHA、只读拒写,临时容器及文件清理PASS。未运行R3完整app/JWT/真实恢复,不把最小schema验证称生产全库复验。syntax、task validate、Trellis/process、敏感扫描及diff门禁通过,docs仍0 errors/22项未登记警告,不处理无关文档。
|
||||
|
||||
只读刷新:普通生产账号读取归档ACCESS_UNAVAILABLE,生产build仍b1d25d3c,timer本自然周期success/0;这不证明新的成对备份完整。ARM镜像元数据盘点集合未变,仅已知b7的1d4d70f8…匹配,没有可证明对应b1的镜像。新自然备份build/manifest仍待ARM管理员只读回执,禁止推测后直接重建或套旧镜像;本轮没有新增ARM镜像/容器或真实恢复。
|
||||
|
||||
R3交审包artifacts/qa-layout/restore-once-review-20260917-r3已冻结28份登记文件,manifest SHA256 33001f5894ab48c99cac92c388837fcb1b5c549536f0ee29ccedb010d1017100,指回R2 076078be…;两份差分重放与快照一致、逐文件摘要/字节检查PASS,权限644。状态CONTENT_REVIEW_ONLY_SOURCE_REBINDING_PENDING,independentContentReview=PENDING;本会话主会话检查不冒充独立复核,不派检查子代理。bundle仍保存过期R2计划作审计参考,并有PENDING_NEW_SOURCE执行闸,不可直接修改字段后运行;重绑须重新冻结执行输入。
|
||||
|
||||
管理员只读选源入口postrelease-recovery-20260917/refresh-arm-source.sh已准备,probe SHA e835bc0155aba978447822cab781f488fe0cde85dbdadf8166caa7088295218b,shell SHA 7d7202b8198d16950e1fcbb411b00652cc574fff27e445c70644efabb5886000。复用前次只读探针,强制ARM/root和固定归档根身份,以hash校验的内存代码运行;不在远端落文件、不解包/建容器/恢复,不读字段密钥,不改sudoers。需要用户终端交互sudo取得新源事实,与独立内容复核可并行;本地真实恢复入口仍未生成,原NO_GO和冻结R2未改。下一步接回这两项外部证据后处理匹配镜像/重新绑定,不再要求重复批准已明确的历史例外。
|
||||
|
||||
## 2026-09-16 实际受限恢复:NO_GO / ATTACHMENT_REFERENCE_MISMATCH
|
||||
|
||||
用户通过交互sudo执行一次固定入口,14:54:53Z返回:preflight 4.169秒、prepare 1.453秒、database 2.607秒均PASS;恢复源0913782f…、复核manifest076078be…,RPO73482秒(20.41小时)。来源迁移集合/校验和及12表读取通过,数据库已实际恢复,不再标NOT_RUN;在storage阶段附件引用校验返回不一致,application未运行,敏感解密NOT_TESTED,整体NO_GO。storage解包/普通文件计数已过才会到该失败码,但不能据此把引用或逐件内容判PASS。该码聚合了空/不安全路径、缺件、大小或SHA不一致、外部存储等情况,回执没有数量/类别,不能直接断言“缺了一件”或“就是旧测试附件”。
|
||||
|
||||
本次cleanup=PASS、cleanupPending=false、postcheck=PASS、productionWrites=false;即原源摘要/元数据、生产ready和timer后验通过。影子库及附件副本已清理,未执行应用验收;失败阶段自身时长未记录,不能推算完整RTO。原入口已消费,不盲重试,不为了推进删除引用/修改原件/过滤归档项或重写R2。
|
||||
|
||||
下一步仅先保存原始脱敏回执、核代码判定与历史已批准治理证据,并在原只读授权内核当前生产附件路径/存在/大小及治理关联摘要;不读取原件正文、不额外调用云服务、不开第二轮恢复。当前生产状态只能用于归因线索,不能冒充本次冻结备份DB的复现。若需要重建影子库才能定因,先列出一次诊断所需的最小新增范围和证据,不复用已消费的单次入口。
|
||||
|
||||
14:59Z当前生产只读扫描62条引用(发票44、报销附件16、付款回单2、采购/请假0),存在/大小检查仅发现一条invoice_pool原件缺失,pathIdentity=b22a1162…与09-11旧缺件完全相同,其余61条元数据检查通过;未读文件正文/重算内容SHA,因此不能排除本次冻结备份另有内容不一致。15:01Z单条只读复核:recordIdentity=36383435…同旧记录,manual归档发生在源备份之前、该行备份后未更新,报销/明细/差旅/报销附件/采购附件/付款回单/请假七类关联均false。两次运行生产容器身份/启动时间不变,未写业务或重新恢复。
|
||||
|
||||
已找回此前未在本副本定位到的原始处置证据:另一20260910-reimbursement-payment-integration副本的qa-flow/20260911-invoice-reference-readonly/provenance/historical-missing-disposition.json(SHA256 5ed1e910408b32d336235729850cb35238bb3ee15b587618c0a56417f2bee8fd)及disposition-precheck-result.json(9a0b99c051d423b254e67ba5c17f5e40579ec4176c2d5697504fcda8c38c6414)。09-11原决定是DOCUMENTED_MARK_KEEP_ARCHIVED_RECORD,仅在task/证据标记,未修改生产记录/UI、未删文件或更改校验器,并明确原恢复overall仍NO_GO。当前发现与这条历史处置一致,但它不等于“任何归档件均可忽略”,也没有批准把原完整性验收改成PASS。
|
||||
|
||||
下一步建议见design拟议补充:仅对此精确记录/路径登记一个有条件的历史缺件例外,保留原始不一致计数和PARTIAL结论;在恢复副本确认七类关联及无其他不一致后才继续应用只读验收。此项改变当前遇任何引用不一致即停止的门禁,另需一次明确批准,包含本地修订/定向验证/重新冻结并复核后一次受限恢复;未批准前不修改R2或执行第二轮。当前PAUSED_PENDING_NARROW_ACCEPTANCE_DECISION,不重复索要旧单次批准。
|
||||
|
||||
## 2026-09-16 独立23项重跑接回,接续管理员现场入口
|
||||
|
||||
用户转回独立执行方回执:Python3.9.2,包外先导入unittest/unittest.mock,再discover冻结test_restore_once.py;23项、exit0、0.088秒。21份文件(19登记及manifest两件)运行前后摘要相同,无新增pyc;用例名与原日志一致。日志由独立方保存在其scratchpad,本会话仅接收用户转述,没有取得原始日志全文,不将本地自检冒充这次独立执行。
|
||||
|
||||
独立单测门禁已满足;内容结论仍为有条件通过,现场源/最新性/manifest、资源及生产前后检查只能由实际执行回执解除。执行前条件2已有包外源config与非空fail-closed补件,本轮再用固定ARM镜像实际config和冻结app-check补无真实资料的隔离验证;不读生产字段密钥。附件Finding1/2的范围限制沿上一节,纳入最终验收纪要,不改冻结R2字节。
|
||||
|
||||
接续清单:核R2全部摘要→实际镜像配置专项→将原执行器和bundle按manifest原字节封装为摘要固定入口→本地检查入口只调用已审Session→普通用户暂存与回读→用户交互sudo运行。现场预检在任何真实恢复前执行;固定源超过2026-09-16T18:30:05Z或最新性/版本/资源变化立即停止,不自动换源、不放宽门禁。受限恢复授权不重复索取;本轮不提交/推送/归档/部署。
|
||||
|
||||
14:46:33–14:46:57Z实际ARM配置专项通过:固定image 1d4d70f8…中的config字节SHA与来源相同,镜像未设置字段密钥、getConfig缺省为空;以合成非空值运行冻结app-check原字节和实际依赖(无边界替身),返回APP_READ_FAILED/exit1,外层断言exit0。专属配置工具容器network=none、非root、只读根、512MiB/1CPU/pids128、无宿主挂载/持久日志,精确清理PASS。未启动OA服务、读取真实备份或生产密钥;这是主会话现场补证,不新增独立测试计数。回执arm-image-config-check.json。
|
||||
|
||||
14:50:28Z入口普通用户暂存完成,独立一次传输后回读摘要相同;未sudo、未执行真实源preflight或恢复。入口SHA256 e2f57c3e0429fa581acb9f31f5baf29193d94c6a9e61c6c57823beb98c669653,将R2 manifest、restore_once.py和bundle原字节嵌入;再次校验内嵌摘要/四helper后,仅调用原Session.execute,保留信号/30分钟边界,NO_GO映射非零退出,不重写原门禁。root加载器先核入口摘要,再消费唯一暂存脚本并删除空目录,然后从已校验内存执行;失败不自动重试。手工入口为postrelease-recovery-20260916/run-approved-restore.sh,回执entry-staging.json,暂存仅代码、无真实资料。审查状态通过包外本节接续,冻结包仍21份、076078be…不改。
|
||||
|
||||
主会话新增入口专项6项与传输/摘要先于执行及精确自清理2项通过,使用unittest/unittest.mock预导入后discover两个test文件;不合并为原23项独立通过数。脚本bash -n、两个task validate、Trellis治理/process及git diff --check通过;文档审计errors=0,既有22份未登记文档警告不在本轮修复。当前READY_FOR_MANUAL_SUDO_PREFLIGHT:现场预检本身只读,通过后才准备容器/网络并恢复;受权限边界限制必须由用户在终端输入sudo密码,不在聊天获取密码或改sudoers。真实DB/storage/app验收仍NOT_RUN,配置专项不是APP_READONLY通过;完整解密仍NOT_TESTED。稳定边界由现有配对恢复规约覆盖,本轮不另改spec。
|
||||
|
||||
## 2026-09-16 R2外部内容结论接回:有条件通过,证据门禁未解除
|
||||
|
||||
已收到外部报告restore-once-r2-claude-review-20260916T141328Z.txt及用户独立完整性核验:19/19摘要/字节、manifest 076078be…、R1链和bundle四个可执行件一致。内容审查有条件通过,无阻断性代码缺陷;Finding4仍要求独立执行证据,不能将其隐去写成无条件放行。当前CONDITIONAL_PASS_PENDING_EXECUTION_EVIDENCE:需原独立会话重跑23项单测,管理员真实执行前在ARM当场重验源/最新性/manifest和环境,不能沿用13:28–14:03旧快照。
|
||||
|
||||
补齐Finding2依赖(报告执行前条件2,不是附件Finding2):包外source-config-b7d2285d.js来自git show b7d2285d,SHA256 a3b62630cb05935194e0297dedbd82e38f6fd4fa4f7042a2ca4ca2e2baeff1c4,与镜像构建登记的server/src/config.js摘要一致,FIELD_ENCRYPTION_KEY缺省为空。ARM目标镜像只读inspect确认镜像环境没有该变量;不代表尚未启动的真实影子容器已经验收。check-key-fail-closed.mjs使用原config和冻结app-check断言,以全新合成非空值验证APP_READ_FAILED、exit1,DB与网络调用均0;边界依赖替身,不是实际容器重跑。证据key-fail-closed.json明确MAIN_SESSION/independentExecution=false,没有读取生产字段密钥。
|
||||
|
||||
附件覆盖限制明确接受并写入后续验收纪要:file_sha256为空时只能验证安全路径、存在性及可用大小,不能证明该条业务引用的内容哈希一致;leave_requests无size/sha字段,只核路径与存在。归档整体SHA一致不补出原本不存在的逐件业务哈希。tmpfs未加noexec列为已知低风险加固项,保留冻结字节,不为非阻断项未经复核修改R2。
|
||||
|
||||
两处事实澄清:该备份采集时来源是b7d2285d,b1d25d3c是后来演练时要求保持的生产版本,并非用b1备份冒充b7;两提交migration目录再次静态diff为空。publicOrigin仅由ARM宿主控制器做已批准的生产/ready前后只读探测,不传给隔离应用或影子DB,不能把宿主健康观察误读为允许影子应用访问公网。
|
||||
|
||||
本次R2 19份文件重核仍全匹配,manifest保持076078be…,补件全在包外,没有恢复真实备份、没有新增应用启动、配置变更或生产业务写入。原受限演练授权不重复索取;补证完成后再给管理员执行命令,源过24小时/版本变化仍停,不绕门禁。
|
||||
|
||||
## 2026-09-16 受限演练已授权:适配/合成验证完成,真实执行待独立复核
|
||||
|
||||
用户已明确批准design所列受限演练,不再重复索取同范围批准。本轮完成ignored的一次性restore_once.py编排与app-check.cjs,复用与b7d2285d逐字相同的restore-db/storage/附件校验器;未改产品代码或安装长期runner/sudoers。源时效、根/manifest/文件集、链接/容量、镜像digest、内部网络、无端口、只读挂载/权限、超时和精确清理均有门禁;生产只读ready前后核验。
|
||||
|
||||
验证:本地主会话23项安全单测PASS,既有offhost runner合同32条PASS输出(含汇总,非32项独立产品用例);ARM上使用已批准镜像创建纯合成库,执行实际来源迁移SQL并登记合成迁移摘要、生成部门/员工/角色/报销/长路径附件,经pg_dump→原DB恢复脚本→迁移/12表聚合→原storage恢复/引用/摘要检查;缺失引用负例拒绝;实际app/匿名401/短期影子JWT/只读权限/行身份比对通过,清理PASS。最终synthetic-full-final-result.json的restoreStarted=true仅指合成库,realBackupRead=false。全程未接触生产字段密钥、真实银行资料、真实备份解包或生产业务写入。
|
||||
|
||||
首轮单测加载失败是本目录inspect.py遮蔽Python标准库inspect;修正测试入口为先导入unittest/unittest.mock再discover,旧探针未改。旧日志保留不作通过证据。首次ARM合成验证为应用/权限链,最终补足实际dump/restore/附件长路径和缺失反例;各阶段回执区分,不把主会话自检当独立验收。合成使用DB容器内tmpfs,root宿主tmpfs挂载路径未运行;SIGKILL/断电/断网、真实副本恢复和敏感字段解密仍未验证。失败阶段自身时长未完整捕获,不声称完整失败RTO/SLA。
|
||||
|
||||
交审入口artifacts/qa-layout/restore-once-review-20260916-r2,manifest SHA256 076078be37dcd3c03c4be9b3413904b01fe1ac86f1bf34b34db88cc240334b05,19份登记文件逐项摘要/字节数复核一致,文件权限644。独立只读复核PENDING;受inline工具边界限制未派实现/检查子代理,不虚报外部结论。包内README列出5项审查重点和全部未覆盖,包内不含真实备份/密码/JWT/字段密钥。
|
||||
|
||||
R1先冻结后交叉核对发现配置误将createdAt的18:30:05当runId末尾;生产只读按精确manifest查到唯一runId=auto-20260915T183002Z。R2只修正bundle的batchName并补来源回执,指回R1哈希,执行器/测试源码未变、R1未重写、不新增测试计数。R1禁止用于执行;真实运行仍会在ARM验证最新目录/同manifest,不能以生产回读代替ARM检验。
|
||||
|
||||
当前没有执行真实入口。下一步接回对R2的独立只读结论,解决实质阻断后提供摘要固定的ARM管理员命令;普通账号仍无法读归档/sudo非交互不可用,不能偷偷扩权。真实开始前固定源过24小时或生产/最新批次变化即停止,重新绑定来源/镜像;现有批准不授权绕过门禁。敏感字段解密保持NOT_TESTED,最终受限成功也只记PARTIAL。
|
||||
|
||||
## 2026-09-16 P2单次操作范围准备完成,待授权及合成合同验证
|
||||
|
||||
本轮按用户批准准备清单,没有继续创建远端资源或启动镜像。已在design最新节固定manifest/来源树/两个ARM64镜像、30分钟总时限、只读DB身份、内部网络/禁外联、容量与内存/CPU上限、失败停止及精确清理规则。ARM补充只读资源观察为MemAvailable10.24GiB、磁盘87.91GiB/2CPU,执行前需重取。
|
||||
|
||||
认证采取明确披露的影子短期签发token+恢复库现有合格身份,仅调用已静态审查的报销列表own范围及匿名拒绝,不写员工密码/角色,也不声称真实密码登录。为此允许的影子DB权限DDL与恢复数据核验分阶段,应用无DML/CREATE/TEMP权限;缺合格身份不造数据。不读取生产字段密钥,因此敏感字段解密NOT_TESTED、完整应用灾备结论仍PARTIAL;这条需要随单次批准清单明确告知,不隐藏为已完成。
|
||||
|
||||
配置专项check-shadow-config.mjs执行原b7d2285d config源码、空白环境及随机合成JWT/pepper,结果shadow-config-check.json为PASS_SOURCE_CONFIG_ONLY,未连DB/未启动app。源码检查涉及index/app/auth/reimbursements/delegation/tracing/crypto,原restore-db/storage及附件校验器继续复用。未执行现有真实数据runner或冒用旧安装/sudoers授权。
|
||||
|
||||
下一门禁:用户批准design所列受限演练范围后,完成相应执行器适配及本地合成安全合同检查、只读复核/冻结,再提供需ARM管理员权限的精确命令;若源已过24小时或模型前提变化停止重新绑定。当前是方案可审,不是脚本已验收,不将未满足的权限/网络/资源测试写成PASS。实际恢复、运行应用与源文件读取仍未开始。
|
||||
|
||||
## 2026-09-16 已授权ARM64镜像准备完成(非恢复验收)
|
||||
|
||||
用户明确批准本次ARM镜像构建。13:26–13:29Z执行:从固定b7d2285d8d1a2a912222917f7c74067f8bd9f810/树0ef8f7d5597b1fc425888596241d041585aaccab导出1102个构建所需文件,不含工作树差异、生产.env/业务密钥/真实备份。拉取ARM64 node:22-alpine后,将原Dockerfile唯一FROM替换为已解析的node@sha256:c610fcdfb1d5b4740dd70c284ed3cb16bb857e0f7166196e36a5501df7a3aa32;原/派生Dockerfile、三个lockfile、源码逐文件和上下文摘要均登记。该Dockerfile派生只为固定基础镜像,不改Git源码。
|
||||
|
||||
首轮构建器在输入识别阶段报ambiguous Dockerfile source,exit1;只读确认拟产物不存在,没有盲目重试。保留首轮回执后,将相同源码tar改为有明确签名的gzip tar并做本地解包文件计数校验,再进行一次修正构建;未重复拉取基础镜像。R2 exit0,npm ci及Vite构建完成。产物image sha256:1d4d70f843976e327106d53d13d45118e22372ac6e71cbe7db96953315b4fed3,linux/arm64,大小1075264677字节;BUILD_SHA及OCI revision均为固定来源提交。
|
||||
|
||||
独立一次元数据回读(仍主会话执行,不冒充外部审查)确认相同image/平台/版本,引用该镜像的容器数量0,目标盘余87.91GiB。无应用启动、备份读取/恢复、生产连接、业务写入、仿真或部署;未清共享缓存/旧镜像。保留已批准新镜像及本轮基础镜像/构建缓存,不将其当临时残留自动prune。
|
||||
|
||||
结果ARM64_IMAGE_BUILT_IDENTITY_VERIFIED_NOT_RUNTIME_TESTED。这是同源码跨平台重建,不是原amd64制品字节复原;npm锁及Python哈希约束已保留,但基础系统依赖、平台包和构建时下载不宣称与历史生产完全相同。未运行产品单测、应用健康/业务读取/解密或DB/storage恢复,不能升级为APP_PASS或恢复任务完成。
|
||||
|
||||
证据位于artifacts/qa-layout/postrelease-recovery-20260916:build-arm.py及首轮arm-build-result.json/log;build-arm-r2.py、arm-build-r2-result.json、arm-build-r2.log、arm-build-r2-source-hashes.json、arm-build-readback.json。下一步按已批准恢复设计准备具体清单,重核源时效、原件引用治理、只读身份/解密、禁外联和资源门禁;真实恢复及应用运行仍待专项授权,不沿用此次镜像构建批准。
|
||||
|
||||
## 2026-09-16 ARM人工回执接回及镜像版本只读核验
|
||||
|
||||
13:16:49Z用户在ARM手工sudo执行已登记摘要的只读探针,回执已脱离密码提示/SSH尾部单独保存为postrelease-recovery-20260916/arm-user-readback.json,executor=USER_MANUAL_SUDO。最近两个自然批次manifest与生产逐一相同,DB/storage字节及SHA256通过且归档元数据未变。最新b7d2285d源18.78小时,目标剩余89.38GiB、内存11.68GiB、2 CPU;这些是该时点值,不自动授权恢复或修改访问权限。
|
||||
|
||||
随后按用户批准以普通账号只读检查95个本地镜像的BUILD_SHA及OCI revision:90个arm64、5个amd64,均没有符合提交格式的上述标记;源image 48dfa8e4…不在集合内。结论NO_PROVEN_MATCHING_APP_IMAGE,不等同于证明95个镜像均不含对应源码。ARM64 PostgreSQL标记PG_MAJOR=16的镜像c05eced0…存在,但尚未启动/运行验证。证据image-versions.py/json,镜像集合前后不变,无构建、pull、load或容器创建。
|
||||
|
||||
本地确认b7d2285d来源树0ef8f7d5597b1fc425888596241d041585aaccab,是当前b1d25d3c祖先,二者migration目录无差异;不据此把当前应用替换为备份匹配应用。恢复源最新时效仍须在实际执行前重验。
|
||||
|
||||
下一受保护操作建议单列为ARM64应用镜像准备:经批准后传输该来源提交的脱敏构建上下文,按来源Dockerfile在ARM原生构建,固定BUILD_SHA/VITE_BUILD_SHA并登记基础镜像digest、lockfile、构建输入/产物摘要;无需读取或传入生产.env、业务密钥、真实DB/附件。新产物属于同源码跨平台重建,不是原amd64制品复原;基础镜像与依赖差异必须披露。只创建本轮专属构建目录/镜像,不启动OA、不恢复真实数据、不启用仿真、不清理共享缓存或其他镜像。构建网络用于获批的镜像/依赖下载,与后续禁外联恢复网络分开。尚未取得该构建写入批准,未开始构建。
|
||||
|
||||
镜像准备后才可冻结完整恢复清单;只读应用身份/必要解密、所有后台与外联关闭、资源硬限制仍待核定。恢复数据写入继续另批,不能把本轮95个镜像元数据检查当应用恢复PASS。
|
||||
|
||||
## 2026-09-16 待执行清单(最新)
|
||||
|
||||
当前PLANNED_NOT_AUTHORIZED_FOR_RESTORE;不因b1d25d3c已上线就关闭恢复缺口。09-15历史8d源方案不再默认执行,按本task最新PRD/设计和09-08的P1→P3接续。
|
||||
|
||||
- [ ] 接收P1新时点只读结果:源manifest/字节/SHA、自然或手工、所在节点、年龄、源build/image/platform、ARM容量与权限。归档损坏/传输缺失/源码未知分别归因。
|
||||
- [ ] 选定一个源和匹配镜像;核应用启动入口、后台任务与出站关闭、只读身份/解密条件,列未满足前提而不读取生产Secret。
|
||||
- [ ] 冻结一次操作清单并集中请求批准:必要的源复制/镜像加载、专属临时副本/卷/内部网络/容器、资源及超时上限、DB/附件恢复、应用只读检查、仅本轮资源清理;不包含生产业务写入、旧件治理、监控修改或测试通知。
|
||||
- [ ] 获批后再核源与目标无漂移、生产ready基线;开始计时并执行单次DB恢复,非零停止后续阶段,核迁移集合/校验和与关键表聚合,不硬编码旧66/68数量。
|
||||
- [ ] 恢复storage临时副本并核安全路径、引用存在性、适用大小/SHA;缺件细分源缺失/传输不全/校验器误判,无批准治理证据不排除记录。无存量摘要时明确仅存在性验证。
|
||||
- [ ] 以匹配平台/来源应用执行已批准的只读验收,分别记录health和业务读取/必要解密;不可用则APP_BLOCKED/PARTIAL,禁止DB PASS顶替。
|
||||
- [ ] 核原归档未变、生产前后健康、精确资源清理回执;分段记录DB/storage/app耗时与总RTO、源时点相对演练起点RPO,未计时字段不猜测。
|
||||
- [ ] 汇总一次结论:各阶段PASS/FAIL/NOT_TESTED、异常类别、清理及生产影响;仅全部合同通过才标本次演练PASS,08-28两个自然周期另验,不混结案。
|
||||
|
||||
等待真实恢复批准期间只做本地方案/校验器审查或已授权只读核验,不重复OCR、发布或创建新备份来制造完成证据。
|
||||
|
||||
## 2026-09-15 简单配对恢复的集中批准边界(未执行)
|
||||
|
||||
不新增runner。已知可识别的历史输入为receipt-followup-release回滚备份:manifest `56a9addf57556580c46205ae8e68b01a8e23a45ae7757d4cfce9ec9c92660c86`、来源8d08d46d;对应镜像归档SHA256 `d17d7efaef073b5cc6b78f1ce2a73e938835e4910946c83e855b48e61780541b`,历史回读通过。它不是已核最新自然备份,不能报24小时内,也不能换成b7或当前本地代码假装同源恢复。
|
||||
@@ -237,3 +530,12 @@
|
||||
- 本任务涉及真实备份数据和远端运维边界。执行完成后做一次只读复核,重点确认:生产零变更、归档未修改、RTO/RPO 口径正确、附件验证没有漏项、敏感内容未进入证据、临时对象已清理。
|
||||
- 若现有脚本需要修改,回到规划阶段补充设计和新的批准;不得在远端临时放宽 shadow/路径/确认门禁。
|
||||
- 门禁通过后用中文 commit 引用 `08-23-isolated-backup-restore-drill`,是否推送仍按用户当时授权执行。
|
||||
## 2026-09-16 恢复前置实施:HOLD_ACCESS_AND_PLATFORM
|
||||
|
||||
已按批准执行只读预检,不是恢复执行授权。生产最新自然源b7d2285d(09-15T18:30:05Z,manifest 0913782f84bf7253a8ea1a24e727f8c20a6a637c58737b5df767331809dd2f4e)实测18.34小时、DB/storage完整;源image 48dfa8e4…实测linux/amd64,生产x86_64,目标ARM实测aarch64。ARM归档不可读、sudo非交互不可用,容量/完整性/镜像集合NOT_VERIFIED。不能以生产容量27.39GiB替代ARM容量;不能承诺原生产镜像能在ARM运行。当前DB_RESTORE/STORAGE_REFERENCES/APP_READONLY均NOT_RUN,cleanupPending=false(未创建资源)。
|
||||
|
||||
本地启动合同检查:Dockerfile默认npm start→node src/index.js,未在该入口发现migrate/seed;app会mkdir(storageDir)且无条件调用startJobs,后者仅JOBS_ENABLED=false提前退出,默认是开启。恢复应用必须显式关闭jobs并预建专用存储目录;镜像启动命令、全部插件/外联配置、只读身份和必要解密还需按最终源提交复核,不能用当前HEAD片段代替源镜像的完整启动审查。不加载生产.env,不把OCR_PROVIDER=off当禁止所有后台任务的替代。
|
||||
|
||||
集中申请的前置清单:①以有权限方式只读核ARM两个自然批次及容量/镜像;②匹配源与平台,若只存在amd64原镜像则另提同提交arm64构建或已批准的其他隔离目标,禁止隐式仿真/改用生产宿主;③据实测冻结资源预算、只读应用身份、禁外联配置、清理ID范围及停止条件;④取得该具体范围的一次恢复写入批准。源若超过24小时重新选最新合格批次,不固守本次历史摘要。前两项未解决前不生成看似可直接执行的恢复命令。
|
||||
|
||||
证据归artifacts/qa-layout/postrelease-recovery-20260916;此次公网末次/ready为b1d25d3c且PASS。尚无DB恢复、附件引用、解密或应用恢复通过证据,恢复任务保持进行中。
|
||||
|
||||
@@ -1,5 +1,46 @@
|
||||
# 隔离备份恢复演练
|
||||
|
||||
## 2026-09-19 K0 独立静态复核与范围澄清
|
||||
|
||||
K0 加解密合成合同经 Claude 定向静态复核 PASS,未新增运行时或真实恢复结果。它不覆盖 `maskBankAccount`、`maskIdNumber`、`maskKeepEnds` 的脱敏正确性,不能作为“敏感字段完整闸门”引用;本轮不扩建脱敏测试或修改产品函数。
|
||||
|
||||
`server/src/scripts/migrate-notification-channel-secrets.js` 会读取配置、连接目标数据库并批量改写通知渠道密钥字段;它属于数据迁移工具,明确排除在 K0 以及 K1/K2 的默认执行范围之外,不得为恢复验证运行或导入该入口。未来 K2 若选择通知类加密字段,只按另批绑定方案只读验证适用密文;无适用样本记 NOT_TESTED。迁移、轮换、明文回写或真实通知均需独立方案与明确授权,不由恢复批准附带取得。
|
||||
|
||||
## 2026-09-17 原密钥保管与敏感恢复后续规划
|
||||
|
||||
本增量的K0本地合同检查与合成验证已于本日另获批准并完成;K1/K2仍仅规划,原受限演练已经结束且不可重跑。目标从“追查密钥何时生成”改为“原密钥是否有受控保管及能否恢复对应敏感字段”;来源UNKNOWN可以继续如实记录,不能用生成新密钥替代原密钥或把格式合法等同于高熵来源已证实。
|
||||
|
||||
范围分三段:K0仅本地源码/环境分类合同与合成密文验证;K1另批后只核实际保管可用性;K2再绑定具体新鲜源、制品、隔离目标及受限原密钥注入方案并另批实际恢复。已有环境恢复分类与双角色保管规约复用,不新建密钥平台、不将.env装进普通数据备份。
|
||||
|
||||
新增验收(不替代原AC4/AC5):
|
||||
- [x] K0:本地缺密钥、错误密钥、篡改密文均停止;正确合成密钥成功,输出不含密钥/密钥摘要/密文/明文或原始异常,生产未访问。30项定向测试及7类合成检查通过;只证明本地合同,不证明真实密钥或数据可恢复。
|
||||
- [ ] K1:管理员与公司责任人均有受控取用原密钥的渠道,非仅依赖原主机或单人记忆;记录角色/渠道类别/验证时间/可用状态,不保存值或保管位置细节。
|
||||
- [ ] K2:在另批的隔离范围验证选定备份中实际存在的加密字段,原密钥匹配、适用字段解密检查和清理分列有据;没有适用密文时记NOT_TESTED,不拿合成通过替代。
|
||||
|
||||
任何保管、原密钥取用/转移、真实备份读取和恢复均非本次K0授权。无法安全取得原密钥时停止真实验证,报告影响与待批方案,不读取shell历史、不索要聊天明文、不擅自轮换。实际执行方案必须重新独立只读复核;本次主会话检查不计为独立复核。
|
||||
|
||||
## 2026-09-17 本次受限演练实际结果
|
||||
|
||||
已获批准的一次R3绑定恢复于01:33Z完成:DB及影子认证只读应用PASS;附件62引用中仅精确已接受历史缺件1、未知不一致0;清理及源/生产/监控后验PASS。整体PARTIAL_KNOWN_MISSING_AND_SENSITIVE_DECRYPTION_NOT_TESTED,RPO7小时2分52秒。原始全量附件标准及完整计时指标未因此豁免,敏感字段解密未验;本次无需再执行,task保留未覆盖范围,不自动归档。详情与三摘要绑定证据见implement最新节。
|
||||
|
||||
## 2026-09-17 单条历史缺件例外(已批准)
|
||||
|
||||
本日后续另获固定b1d25d3c源码的ARM64镜像构建批准,仅构建及元数据验证,不部署、不启动应用、不恢复、不读生产密钥。匹配制品已构建不代表R3独立复核或最终恢复源绑定完成,详见design/implement最新节;其他版本/范围不自动授权。
|
||||
|
||||
用户批准按design的精确身份/七类零关联条件修订验收、测试并独立复核后再执行一次受限恢复。本增量仅允许将指定历史缺件作为已接受但仍未恢复的事实,逐项报告原始不一致数、已接受数、未知数;其他缺件/大小/摘要/路径异常仍阻断,不能把任意归档件排除。原R2与NO_GO不改,最终最高结论保留历史缺件及解密未验的PARTIAL。生产零写入、资源/网络/清理边界不变。
|
||||
|
||||
09-15旧源现已超过24小时,禁止重用旧入口或放宽新鲜度;先完成本地修订和只读选源事实,实际重跑必须重新绑定新鲜源与同来源镜像并经复核。源/平台/风险实质变化时说明差异,未解决之前不生成可执行入口。当前批准不授权任意镜像构建、生产密钥读取或新备份写入。
|
||||
|
||||
## 2026-09-16 配对恢复规划增量(当前优先合同)
|
||||
|
||||
关联09-08总任务P1/P2/P3。先读取08-28的新自然备份/异机完整性事实,再冻结单次演练输入;本轮只更新规划,没有恢复授权。优先ARM最新合格正式日归档,不把09-15固定8d历史方案或09-16生产同机手工备份当默认源;若需使用后者,必须另外明确向ARM复制的范围并重新核源副本。未知/超龄/损坏不得静默换源。
|
||||
|
||||
恢复覆盖分为DB_RESTORE、STORAGE_REFERENCES、APP_READONLY三个独立结果;下文旧“不启动OA server”仅属于最初数据恢复阶段,本增量允许将匹配应用的一次性启动纳入拟申请范围,但未批准之前不启动。应用镜像必须绑定源build并核平台;生产镜像能归档不代表在ARM可运行,不默认仿真或随意换最新镜像。
|
||||
|
||||
应用只读验收的访问身份、字段解密能力、禁后台任务/外联配置必须先可证明安全。临时登录/数据库凭据只用于隔离环境且不得复用生产.env;若恢复数据的密钥不可安全提供或身份条件不满足,则记录APP_BLOCKED或APP_PARTIAL及原因,不用随机替换业务加密密钥、仅/ready成功或DB PASS代替全应用可恢复。密钥来源未知与是否获批安全使用为不同问题,不要求用户把值发给代理。
|
||||
|
||||
本task只有三项实际验收与清理/生产无影响证据齐全才可宣布本次配对演练完成;是否符合业务RTO另按预先确认的目标判断,不能仅因记录了耗时就认定满足SLA。历史缺失附件保留原引用,不在恢复演练中代做生产治理或删除。
|
||||
|
||||
## Goal
|
||||
|
||||
在不覆盖、不暂停腾讯云生产 OA 的前提下,使用 ARM 备份机上最新的完整异机批次完成一次数据库与附件的隔离影子恢复,证明“备份存在”进一步达到“最新成对数据备份可恢复”,并记录实测数据恢复 RTO、RPO 和脱敏证据。
|
||||
@@ -61,13 +102,13 @@
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [ ] AC1:ARM 最新正式日批次通过文件集、manifest、字节数和 SHA-256 校验,来源构建是当前构建的祖先或相同,且实测 RPO 不超过 24 小时;是否已形成当前构建同源恢复点单独记录。
|
||||
- [ ] AC2:腾讯云生产在演练前后 `/ready` 均正常,生产容器、数据库、附件、配置、timer 和业务数据零写入、零重启、零切换。
|
||||
- [ ] AC3:一次性 PostgreSQL 16 影子库无宿主端口,数据库恢复成功;恢复 migration 集合与 manifest 来源提交一致且无失败/未知项,来源与当前 migration 差异已明确;固定 12 类关键表均可读并形成仅含数量的脱敏摘要。
|
||||
- [x] AC1:ARM 最新正式日批次通过文件集、manifest、字节数和 SHA-256 校验,来源构建是当前构建的祖先或相同,且实测 RPO 不超过 24 小时;是否已形成当前构建同源恢复点单独记录。
|
||||
- [x] AC2:腾讯云生产在演练前后 `/ready` 均正常,本次操作对生产容器、数据库、附件、配置、timer 和业务数据零写入、零重启、零切换。
|
||||
- [x] AC3:一次性 PostgreSQL 16 影子库无宿主端口,数据库恢复成功;恢复 migration 集合与 manifest 来源提交一致且无失败/未知项,来源与当前 migration 差异已明确;固定 12 类关键表均可读并形成仅含数量的脱敏摘要。
|
||||
- [ ] AC4:附件安全恢复成功,归档与解包普通文件数一致;所有纳入范围的本地附件引用均安全且存在,适用的哈希/大小核对无不一致。
|
||||
- [ ] AC5:记录本轮数据恢复 RTO、RPO、同源恢复点可用滞后、开始/结束时间、失败点或 finding、Go/Pause/No-Go 结论;即使恢复未开始也保留已观测空窗,不把任何指标表述为完整应用灾备 RTO 或 SLA。
|
||||
- [ ] AC6:演练结束后本轮容器、端口、网络和临时数据全部清理,ARM 正式归档与现有 dead-man/健康监控不受影响。
|
||||
- [ ] AC7:任务校验、Trellis 治理、流程合同、文档审计、敏感扫描和 `git diff --check` 通过;证据不含敏感信息。
|
||||
- [x] AC6:演练结束后本轮容器、端口、网络和临时数据全部清理,ARM 正式归档与现有 dead-man/健康监控不受影响。
|
||||
- [x] AC7:任务校验、Trellis 治理、流程合同、文档审计、敏感扫描和 `git diff --check` 通过;证据不含敏感信息。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
@@ -79,7 +120,7 @@
|
||||
|
||||
## Blocking Open Questions
|
||||
|
||||
- 无。构建门禁已裁决为“来源提交是当前构建祖先或相同 + 批次年龄不超过 24 小时”;实施仍需用户审阅本次修订后的最终规划摘要并再次明确批准。
|
||||
- 本次受限演练已批准并完成,入口已消费,不再申请同范围重跑。完整密钥保管/敏感解密恢复、历史缺件及完整计时覆盖仍按顶部结果保留;未来新增实质恢复范围需另行规划,不复用本次单次授权。
|
||||
|
||||
## Test Plan
|
||||
|
||||
|
||||
@@ -21,6 +21,24 @@
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "2026-08-28:恢复演练保持 in_progress/P2,但被 P1 operations 事件 08-28-production-arm-backup-transfer-incident 阻塞。该事件负责生产到 ARM 传输链修复、生产容量处置、告警响应计时和连续两个自然调度周期验证;在新原子批次形成并重新通过 24 小时身份门禁前,本任务不得继续实际恢复。既有恢复候选 SHA 仍有效,无需因事件任务重新渲染。",
|
||||
"meta": {}
|
||||
"notes": "2026-09-17:已获批准的R3新源受限ARM影子恢复完成,源d9a23d59/b1d25d3c、执行manifest f7cf4d62。DB/影子认证只读应用PASS;62引用仅1条已接受历史缺件、未知不一致0;cleanup/postcheck PASS,补只读后验无临时资源残留,生产未改。整体PARTIAL_KNOWN_MISSING_AND_SENSITIVE_DECRYPTION_NOT_TESTED,RPO25372秒;旧NO_GO保留,新入口已消费、不重跑。本次操作清单完成,完整附件、敏感解密/密钥保管及完整RTO指标未全验,保持in_progress,不自动归档/提交/推送/部署。 本日后续K0另获本地实施批准:官方current已切本task,新增独立合成补件与30项定向测试通过,环境分类166键通过;未读取真实密钥/配置/备份或连接生产/ARM。K1双角色保管与K2真实解密仍NOT_TESTED、独立复核PENDING,原PARTIAL及历史缺件不变;旧冻结包现场86件完整保留,96件旧文字计数差异单列。无提交/推送/部署或借款实施。",
|
||||
"meta": {
|
||||
"k0IndependentReview20260919": {
|
||||
"status": "PASS_STATIC_CONTENT_REVIEW",
|
||||
"report": "artifacts/qa-governance/business-followup-claude-review-20260919T023537Z.txt",
|
||||
"reportSha256": "b48e5f53340e139e5a97b5fdcb6d7003881a80a8a08d4004d01aaa6a759d2d0b",
|
||||
"reviewerTestsRun": false,
|
||||
"reviewerShaRecomputed": false,
|
||||
"mainSessionFrozenManifestVerified": true,
|
||||
"mainSessionFrozenFilesVerified": 6,
|
||||
"mainSessionCurrentCodeInputsMatch": 3,
|
||||
"maskingCovered": false,
|
||||
"notificationMigrationExecution": "EXCLUDED_FROM_K0_K1_K2_DEFAULT_SCOPE",
|
||||
"notificationK2ReadOnlyValidation": "ONLY_IF_EXPLICITLY_BOUND_AND_AUTHORIZED",
|
||||
"k1": "NOT_TESTED",
|
||||
"k2": "NOT_TESTED",
|
||||
"evidence": "artifacts/qa-governance/business-followup-reception-20260919",
|
||||
"oldReceiptsPreserved": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,62 @@
|
||||
# 生产到 ARM 备份传输中断实施计划
|
||||
|
||||
|
||||
## 2026-09-17 结案缺口与最小补证方案(本地整理,未执行远端观察)
|
||||
|
||||
据09-08后期W4推进,复用本task既有调查器和历史脱敏结果,不重跑旧调查/恢复。两自然日期09-14/09-15副本完整性已由既有记录证实,09-16源又有同源绑定;不再把“等待两份副本”当剩余工作。自然恢复不证明根因修复;本次只把AC的剩余证据和停止线列清。
|
||||
|
||||
| AC | 已有支持/缺口 | 下一步最小取证及判定 |
|
||||
| --- | --- | --- |
|
||||
| AC1 | 原生产完整批次/单点分类、成功prune/失败保留、partial不同停止位置有据;真实rsync码和可靠传输时长NOT_AVAILABLE,不能推定单一根因 | 可保留“历史不可测、根因未收敛”的明确裁决;以后只有同次自然失败才提取绑定运行的退出码/阶段专属时钟。没有新异常不建议为追根因重传 |
|
||||
| AC2 | 本地分类器修复已验证;未实施传输/生产容量修复 | 需审阅结案口径:若无需传输修改,明确接受观察性结案条件;若容量不足,先给具体最小处置/回滚清单再批准,不能勾为修复完成 |
|
||||
| AC3 | 两自然日期完整原子副本已有manifest/集合/字节/SHA证明 | 复用原证据,未来不重复消耗同一等待条件;本轮未刷新时效 |
|
||||
| AC4 | 既有daily/watchdog/dead-man部分状态与后验记录;跨两周期service结果配对未齐 | 下次获批只读观察同时取timer active、最近运行开始/结束、Result、exit及最新归档身份摘要;active本身不是success |
|
||||
| AC5 | 两日期完整性已有;两个自然周期各自partial/容量趋势未齐 | 优先找同窗口既有脱敏聚合;不足时只补下一两个自然周期相同字段,不手工补跑。每周期记录新增完成批次数、partial件数/总字节、空闲字节,缺历史基点标NOT_MEASURED |
|
||||
| AC6 | 原10GiB可用不是经核的峰值预算,也不是当前容量事实 | 同批准只读观察取可用字节、受管保留批次总量、自然构建/备份峰值;预算=一次完整新批次实测额外峰值+经审阅安全余量。峰值或余量未定记UNKNOWN,不用最新压缩包大小替代双份DB/附件/镜像的峰值 |
|
||||
| AC7 | 发送调用与人工确认分开合同已有;缺自然事件响应样本 | 责任人shunli协调系统管理员与公司责任人;自然告警仅记录发送时间、首个确认时间与延迟、是否升级;无事件=NOT_TRIGGERED;无确认=NOT_ACKNOWLEDGED,不能把sent当阅读,不发测试通知 |
|
||||
| AC8 | 本地工具/治理与交叉引用已有 | 本轮更新后再跑task/Trellis/process/docs/敏感/diff;不替代上面远端项 |
|
||||
|
||||
合并只读观察的输入门禁:固定两个自然周期、既有allowlist调查器版本、双方角色与授权范围;输出仅时间、布尔/分类、计数、字节和脱敏运行标识,不含Secret、地址、真实目录或原始日志。本轮不生成可直接执行的远端命令,也不读真实配置。观察发现无合格新鲜批次、空间不足下一次预算、partial增长或监控失败时记录对应风险并停止扩读;修复、清理、改timer、补传、告警发送分别另批。原恢复PARTIAL和旧入口已消费不变。
|
||||
|
||||
当前仍有AC1/2/4/5/6/7共6项缺口或裁决,AC3/AC8有范围内证据;不按表格存在性批量勾原PRD。下一可执行动作是接回非秘密观察事实/具体授权,当前主会话继续其他本地工作。
|
||||
|
||||
|
||||
## 2026-09-17 原AC本地证据映射(未新增远端操作)
|
||||
|
||||
按09-08协调规划仅复用已存PRD/实施回执,不连接生产/ARM、不读真实配置/备份、不重传/清理/改timer,不重新跑恢复。此表是原验收对账,不修改PRD复选框,也不把已有局部证据升级为全部结案。
|
||||
|
||||
| 原验收 | 现有本地记录支持的事实 | 尚缺与后续计划 |
|
||||
| --- | --- | --- |
|
||||
| AC1 | 08-28记录有完整本地恢复点、清理保留语义、partial聚合与different修订、空间及wait_natural建议 | rsync原始码/传输时长NOT_AVAILABLE,未收敛单一根因;保留未测原因,不从旧mtime/通用exit补造。新异常再按原调查范围审阅 |
|
||||
| AC2 | 链路曾自然恢复,有后续完整副本 | 无可绑定的最小修复/回滚/容量处置闭环证据,不能称已实施修复;出现可证缺陷或预算不足后再提交具体变更方案 |
|
||||
| AC3 | 09-16人工只读回执证明09-14/09-15自然批次manifest、DB/storage字节/SHA及原归档元数据一致 | 该子项已有证据,不再无理由等待两个日期;本轮仅引用arm-user-readback.json,不新读备份 |
|
||||
| AC4 | 09-16生产及ARM回执有timer/service success/0与新鲜度观察 | 不代表每个自然周期三组监控全部逐项验收;整理原同窗观察可覆盖部分,缺项待有授权的限定观察 |
|
||||
| AC5 | 两个自然日期的新完整副本已证 | 每周期partial数量/聚合字节、监控与双方容量趋势未形成完整成对记录;不得以两个归档摘要替代整个AC5 |
|
||||
| AC6 | 已有不同时间点容量观察 | 一个完整新批次实际峰值+安全余量的审阅预算及两个周期趋势仍不齐;先按现有聚合数据拟预算,必要取数另列范围,不主动扩容/清理 |
|
||||
| AC7 | 既有告警响应计时合同要求,历史首次知晓时间不可补造 | 启用状态和自然告警/恢复样本、人工确认锚点尚无完整闭环;未触发或无证据如实区分,不发送测试消息 |
|
||||
| AC8 | 与08-23交叉引用保留,本轮按更新文档执行本地task/治理/流程/文档/敏感/diff门禁 | 本地门禁通过不替代AC1–AC7;实际结果归09-05本轮收口回执 |
|
||||
|
||||
原事件保持开放,责任人shunli。下一结案入口是逐项补齐可用旧证据,再针对剩余字段固定最小观察/预算方案;根因仍不可得时保留限制或另审验收处置,不为全绿重传、改历史记录或批量归档。
|
||||
|
||||
## 2026-09-16 人工只读回执:两个自然批次异机完整性通过
|
||||
|
||||
用户13:16:49Z在ARM以sudo运行已固定摘要探针,回执来源USER_MANUAL_SUDO。09-15与09-14两份自然批次manifest与12:50Z生产回执逐一相同,数据库/附件字节和SHA256全部匹配,归档元数据未变;最新年龄18.78小时,前一批42.78小时为正常历史批次,不以旧批超过24小时判最新副本陈旧。ARMtimer active、service success/0且检查前后不变,目标盘余89.38GiB。
|
||||
|
||||
两个连续自然日期的异机完整性证据已补齐;这证明这两份副本已到达且完整,不重建当时传输过程/失败持续时间,不替代PRD其他根因、修复和验收要求,不自动归档事件。普通账号访问限制仍存在,不再将其误写成此次人工核验也未完成。规范化回执位于postrelease-recovery-20260916/arm-user-readback.json;没有生产/ARM配置变更、重传、归档修改或恢复。
|
||||
|
||||
## 2026-09-16 最新自然备份只读核验计划
|
||||
|
||||
归属09-08总任务P1,为08-23配对恢复选源提供事实。本轮仅规划,未连接远端;历史2026-08-28调查结论不等于本日链路仍健康或仍故障。现生产发布b1d25d3c;09-16手工842c61e6备份仅已知同机存在,不能抵消异机传输/自然周期验收。
|
||||
|
||||
- [ ] 确认只读访问范围与权限,记录生产/ARM同一观察窗口;读取既有受控合同确定目标和状态来源,不靠历史日志猜地址/路径。
|
||||
- [ ] 分别选生产与ARM正式目录的最新自然complete批次,核manifest规范、文件集合/类型、大小/SHA、来源build/image及年龄;核同批对应关系。手工/周备份/partial分开,不拿目录mtime替代createdAt。
|
||||
- [ ] 分列“最新自然批次时效≤24h”“异机完整性”“当前发布同源恢复点是否已形成”;祖先构建但同源镜像可恢复不等于坏备份,当前发布滞后另记finding。
|
||||
- [ ] 核daily/watchdog/dead-man的现有timer、最近退出状态与脱敏告警状态;失败退出码只在能绑定同次传输时归因,不凭service通用exit推断rsync故障。不发消息、不restart或修配置。
|
||||
- [ ] 记录双方容量、既有partial数量/聚合体积及变化;没有前一可靠观察就记趋势NOT_MEASURED。向08-23提供ARM平台/资源能力事实,不读取原件/数据库业务内容。
|
||||
- [ ] 有一个合格最新批次可支持08-23准备单次恢复;事件结案仍须两次连续自然周期各自新批次及完整性/监控/容量证据。历史档案可追溯则复核利用,不要求无理由多等两个周期;缺证据才等下一自然周期。
|
||||
|
||||
若失败,先提交一份最小故障分类和拟操作范围;手工重传、源复制、镜像加载、清理、参数修改与告警发送都另批,不将只读计划默认为修复许可。产出附回09-08及08-23,避免另开事件任务或重复建工具。
|
||||
|
||||
## Phase 0:规划与授权
|
||||
|
||||
- [x] 创建 P1、`operations` Trellis task,记录来源事件和与恢复演练的阻塞关系。
|
||||
@@ -88,3 +145,10 @@
|
||||
- `node scripts/qa/audit-docs.mjs --check-registry`
|
||||
- `node scripts/qa/check-sensitive-content.mjs`
|
||||
- `git diff --check`
|
||||
## 2026-09-16 新时点只读实施
|
||||
|
||||
12:50Z核生产最近两个自然批次:09-15T18:30:05Z(b7d2285d,manifest 0913782f84bf7253a8ea1a24e727f8c20a6a637c58737b5df767331809dd2f4e)和09-14T18:30:05Z(229867f5),两者database/storage字节与SHA256均匹配、归档元数据未变。最新年龄18.34小时;生产盘余27.39GiB、备份timer active、service success/0、容器运行身份前后不变。不是当前b1d25d3c的同源自然备份,手工备份未混入自然批次。
|
||||
|
||||
ARM可SSH且普通账号可读systemd状态:deadman timer active、service success/0;正式归档目录访问被拒,非交互sudo不可用。结论ACCESS_UNAVAILABLE,不是PATH_NOT_FOUND,不是异机副本损坏,也不是完整性PASS。没有安装探针、改权限/定时器、重传、清理或触发告警。两个连续自然周期的异机独立完整性证据仍未取得,事件不结案。
|
||||
|
||||
证据:artifacts/qa-layout/postrelease-recovery-20260916中的production.json、arm.json、arm-unprivileged.json;下一步需具备归档只读权限的执行方式,再重取同一时点双方批次摘要。生产端通过不能替代异机端,通过一次也不能覆盖两个自然周期要求。
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
# 报销状态空隙与财务处理视角:设计
|
||||
|
||||
## 2026-09-17 当前页进度与报销编号排序修复
|
||||
|
||||
源码定位:ReimbursementApprovalAdapter的actionMutation成功仅失效workflow查询并refetchTask;ProcessingProgress却取独立的[reimbursements,id]查询,且pending时关闭focus重取。因此补同一动作结束后的报销详情失效;已处理冲突也重取任务与源详情,通用错误不伪造状态。保留服务器结果、不新增轮询、不改全局缓存或审批状态机。
|
||||
|
||||
付款loadBatchWithItems以created_at/id装载,组批同一时间的随机UUID不等于单号。仅在mapBatch响应投影阶段复制报销items后按entity_code自然升序、id稳定兜底;未知/旧差旅保持原顺序。不能改查询装载/锁定/execute内部顺序,否则可能改变voucher_prefix的序号含义。创建、列表、详情、动作响应复用同一投影,明细关联与金额不变。测试用乱序编号并验证输入items未变;浏览器验证PC/手机实际审批后节点更新。
|
||||
|
||||
## 2026-09-12 财务本人报销CEO一次审批方案
|
||||
|
||||
发布现状:229867f5已于本轮授权后部署,公网及运行镜像合成验收通过,详见implement顶部及finance-owner-release最新回执。下段“候选未部署”等为发布准备时点记录;安全回退限制继续有效,在途快照不自动修改。
|
||||
|
||||
发布准备补充:用户已授权并完成31ab9fbb同源配对备份及独立镜像,新连接尺寸/SHA回读通过;候选仍229867f5,未部署。具体回退选择为保守的“先停应用写入并排空事务,重查新步骤快照/任务全部为0才可在另批后退旧镜像;否则保持应用暂停、数据库与附件原样保留,前向修复或另审兼容候选”。不得先查询0后继续放流量再回退,也不得以删单/恢复旧库让计数归零。当前仅server/db运行、新步骤计数0是观察而非故障时保证。停服/旧版切换未执行且须另批;这不是无停机回退承诺。操作步骤及新鲜证据见artifacts/qa-layout/finance-owner-release/README.md。
|
||||
|
||||
状态:已批准本地实施,取代上一版无人可批才替代且保留三步的草案。边界仅报销;不全局改变请假、采购等流程。
|
||||
|
||||
1. 在报销快照构建前形成完整申请人集合(owner_id、submitter_id),与审批执行端的申请人认定一致。候选人须active且未归档,并排除所有申请人;委托的实际操作者与principal仍执行既有自审守卫,不以委托创造绕过路径。
|
||||
|
||||
@@ -1,5 +1,67 @@
|
||||
## 2026-09-17 本批最终本地验证
|
||||
|
||||
付款待办已显示当前可复核/办理姓名、站内提醒对象及企微个人发送事实。`paymentResponsibility`9/9,最终借款桌面/手机正式登录浏览器同样验证姓名;多通知接收人的单anchor成功不冒称全部送达。真实批次未查询,不能给出其真实待办姓名或宣称个人消息送达。财务原地进度15/15与排序回归保留;借款及ERP改动后的付款128/128、最终前端typecheck/build通过。F4接续已执行;独立复核PENDING、未部署。保护回执与本批候选见借款implement当前入口。
|
||||
|
||||
## 2026-09-17 付款待办人员与通知可见性追加
|
||||
|
||||
用户截图指出付款复核未显示待办人,询问企微是否通知到个人。沿既有付款职责补只读投影:当前可复核/办理人员、原站内提醒对象及脱敏企微发送结果。待办资格与提醒接收人分开,不把优先通知对象误作唯一审批人;不改变现有独立复核权限和CEO优先单人通知规则。
|
||||
|
||||
`wecom_app_sent`才显示个人消息已发送(不代表已读);mock、群通知、无绑定接收人及无记录均不能显示个人送达。只读取本地源码和合成验证,不查询生产账号、配置或通知日志,不发送真实消息。截图该批次的具体待办姓名及真实发送结果尚未核验。
|
||||
|
||||
## 2026-09-17 两处真人反馈本地回执
|
||||
|
||||
财务审批成功、退回、转审及已被处理冲突均重读独立报销详情查询,普通失败不伪造进度;付款响应仅对报销按单号自然升序投影,同号按ID兜底,不改变锁定、执行或凭证序号。
|
||||
|
||||
本批基线及证据:`artifacts/qa-layout/payment-feedback-loan-slim-20260917`。付款定向回归 `payment-route-green-r2` 3文件157/157;浏览器 `progress-green-r2` 15/15,涵盖桌面/手机五类原地处理结果与5个原有场景;typecheck/build通过。首轮2个BIFF8环境失败经选用已有固定依赖Python后通过,转审两例测试身份不符合既有权限已修正合成身份,未放宽产品权限。红绿轮次不累计。当前后续借款正在修改付款共享消费者,其新增回归另记借款task,不能引用早期157作为最终借款验收。
|
||||
|
||||
无提交、部署、公网验证。F4的本轮最终保护核验和独立复核仍待完成。
|
||||
|
||||
# 报销状态空隙与财务处理视角:实施计划
|
||||
|
||||
## 2026-09-17 当前优先批次:即时进度与报销单号排序
|
||||
|
||||
官方current已切本task并回读;用户明确要求修复的两处反馈按既有详情一致性范围接续。保护基线177旧差异/6447旧材料,证据payment-feedback-loan-slim-20260917;不改旧冻结包,不访问生产/ARM、真实配置密钥资料。
|
||||
|
||||
- [x] F1:用PC/手机合成审批证明无刷新仍旧的进度,覆盖通过、退回/转审和已处理冲突;补本页源详情重新查询,不伪造通过。
|
||||
- [x] F2:补多报销乱序路由反例;响应层按单号自然升序及稳定ID兜底,验证读取不改原内部顺序/金额/映射,保留差旅顺序。
|
||||
- [x] F3:定向路由/浏览器、前端类型构建、语法/治理/差异与保留检查;主会话检查与独立PENDING分列,不把本地修复当已上线。
|
||||
- [x] F4:将借款优先级接回09-17既有方案,首批精简先清点ERP专属/共享依赖;不让历史39观测重验挤占本次真人问题。
|
||||
|
||||
## 2026-09-12 待付款交接只读核对
|
||||
|
||||
用户批准执行下一步。14:01:56Z生产229867f5只读结果:唯一approved且未付报销已关联reviewed批次,明细pending,已复核、未记录执行,制单导出计数5,未归档回单0。创建人持finance,复核人持ceo且不同于创建人;无需重复组批或复核。只查询单号和状态元数据,不读金额/快照/银行资料/回单内容,不调用导出、解密或业务写接口。RepeatableRead只读事务与10秒语句超时,显式ROLLBACK;check-payment-handoff.py语法及远端执行退出0,证据payment-handoff-result.json。
|
||||
|
||||
下一位处理人为财务:先核实银行实际交易状态,不能把系统pending或无回单当作未转账;已到账则上传真实回单并完成付款登记,未付款才在确认无重复交易后进行真实网银付款。导出5次不证明银行接受或付款成功;本轮不操作网银、不补造回单、不代改paid。首次银行导入接受性仍需授权操作人员核验,这属于真实资金操作边界而非让员工代做软件回归。
|
||||
|
||||
## 2026-09-12 发布后旧在途只读核对
|
||||
|
||||
用户同意继续旧在途只读核对。13:54:06Z读取生产229867f5,使用RepeatableRead只读事务、10秒语句超时及显式ROLLBACK,仅回传聚合状态;未读金额、票据、银行资料或凭据,未登录真人账号、修改业务数据或历史快照。证据为finance-owner-release/check-inflight.py及inflight-result.json,脚本语法检查和远端执行均退出0。
|
||||
|
||||
全部workflow pending实例0、pending任务0,财务归属人submitted/reviewing单据0;当前不存在需要迁移的待审批流程,不据此保证未来所有单据无异常。未删除报销状态为approved且未付1、draft1、paid1、rejected3。未读取付款批次状态,不将approved未付等同于尚未组批,也不宣称待付款已完成。
|
||||
|
||||
本项闭合,无需改旧流程。下一步优先只读核对这1张待付款单与付款批次的当前关联/复核/回单状态,明确下一位处理人;3张退回单由归属人按退回意见修改重提,软件回归仍由执行端承担。真实银行导入接受性、真实付款及完整恢复等既有独立缺口仍未被本次聚合查询覆盖。
|
||||
|
||||
## 2026-09-12 财务本人报销发布闭合
|
||||
|
||||
用户明确批准229867f5部署并由执行端验证,已执行existing正式路径且退出0。执行前新连接重新核同源备份/独立镜像、时效、生产身份与空间;发布前后迁移pending=none,备份合同刷新通过。公网ready/build及首页通过,106资源扫描无finding,数据库未重启、环境摘要未变。
|
||||
|
||||
运行镜像审批相关8文件摘要匹配,6项纯合成mock事务快照检查通过;付款相关6文件摘要及合成BIFF8生成/读回通过。没有生产数据库测试连接、真人登录、业务写入或真实付款;部署前519单测与41组隔离HTTP/桌面手机验证按同源输入复用,不冒充本轮公网真实业务闭环。
|
||||
|
||||
现生产229867f5,发布clone/远端候选一致。本轮源代码无新增变更,仅在本地更新发布事实文档,尚未另行提交这些记录;不重建已部署候选。证据以finance-owner-release的execution-result.json、acceptance-result.json、approval-acceptance.json、generator-acceptance.json和README最新章节为准。以下准备阶段未部署表述均为历史时点。
|
||||
|
||||
本增量完成,主任务不归档;新提交/合法重提应用新规则,在途不自动重写。后续按已定准入主线收口真实账号与旧在途流程的只读核对、银行导入及完整恢复等独立缺口,不让员工代做软件回归,不擅自扩大生产写入范围。
|
||||
|
||||
## 2026-09-12 发布退路补齐(已获独立授权并完成,尚未部署)
|
||||
|
||||
- 当前候选229867f5已提交推送;本轮仅新增授权的备份/独立镜像文件与本地回退方案记录,运行时及已推送候选未改变。
|
||||
- 生产31ab9fbb同源数据库/附件备份已生成,新连接回读尺寸/SHA及24小时内时效通过;独立镜像1119412224字节,配置与14层、权限及新连接SHA回读通过。旧退路全部保留,未更新自动last-success、未异机传输、未docker load。
|
||||
- 镜像保存后约32.68GiB可用;应用/数据库身份与启动时间、环境摘要未变,公网ready=200。无业务数据写入、无停服、无部署;不把配对备份的哈希通过写成完整恢复演练通过。
|
||||
- 安全回退采用design所述写入隔离后的条件分流;出现任何新步骤快照即不得简单退旧版,保留数据并前向修复/另审兼容版本,可能需要停服。当前只读计数0不作为未来切换凭证。
|
||||
- 执行器仅复用已核脚本、重新绑定BUILD/IMAGE和随机制品身份,Python compile检查通过;未重跑或新增一次519项单测/41组场景计数。本轮task方案/进度为本地未提交文档,不替换已推送发布候选。
|
||||
- 下一步须用户对229867f5及上述回退限制另批部署;实际执行前重新核生产变化、备份时效、磁盘与制品完整性,部署后由执行端验收,不让员工代测。当前主任务不归档。
|
||||
|
||||
本轮证据:finance-owner-release下backup-result.json、backup-readback.json、image-result.json、image-readback.json、rollback-boundary.json、runtime-after-preparation.json及ready-after-preparation.json;README记录现状、授权及安全处置步骤,不覆盖原只读预检回执。
|
||||
|
||||
## 2026-09-12 本人报销修复执行清单(已授权提交/推送及只读预检,部署另批)
|
||||
|
||||
用户在本地验收后明确批准提交、推送与只读发布预检。本轮不部署、不补写生产备份/镜像、不清理服务器、不改真实数据;执行回执保存于既有artifacts/qa-layout/finance-owner-release,提交/推送实际状态以Git及该回执为准。下文“未提交”等表述保留为本地验收时点记录,不代表后续发布准备尚未执行。
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# 报销状态空隙与财务处理视角
|
||||
|
||||
## 2026-09-17 真人反馈:审批后进度刷新与付款明细顺序
|
||||
|
||||
用户要求修复财务复核通过后当前页进度仍旧、同批多报销明细未按单号排序。沿本task既有详情一致性范围本地实施,先于借款与精简;不读取真人单据、不重放真实审批。
|
||||
|
||||
验收:PC/手机同文档审批成功后,报销处理进度消费新的服务端详情,不需刷新/切页/重新聚焦;退回、转审及已被处理冲突同样重取权威状态,不能把写入失败乐观画成通过。付款列表/详情DTO的报销items按报销编号自然升序、同号按稳定ID兜底,原数组/写入/锁序/凭证编号/导出顺序保持;既有批次无需数据迁移。补三个单据的乱序反例和当前页刷新正反例,保留原权限/副作用断言。仅本地合成验证,提交推送部署仍另批。
|
||||
|
||||
## 2026-09-12 财务本人报销闭环(已批准本地实施)
|
||||
|
||||
用户已批准本地实施和验证:财务本人报销由CEO一次审批,财务创建付款批次、CEO独立复核;提交/推送/部署及生产写入另批。复用当前任务。隔离验证已复现本人报销死结,不据此宣称真人单据已阻断。
|
||||
|
||||
@@ -21,6 +21,6 @@
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "09-12上轮确认生产及本地基线31ab9fbb,付款创建删除过滤已发布。财务本人报销CEO一次审批、付款独立复核及转交/委托资格约束本地完成,519项不同单测、最终41组隔离HTTP/桌面手机场景通过,独立只读复核两项发现闭合。用户已授权本候选提交/推送及只读发布预检,实际执行状态见Git及artifacts/qa-layout/finance-owner-release回执,部署/生产退路补写/清理另批。旧镜像缺新CEO守卫,已有新快照后不能直接退镜像继续处理。命令、覆盖限制和中间失败见implement;银行导入、完整恢复等其他准入缺口仍未闭合,不自动归档。",
|
||||
"notes": "2026-09-17状态摘要核对:财务本人报销CEO一次审批及转交/委托资格修复已随229867f5发布,finance-owner-release已有公网只读验收;Git确认包含于最近已核发布b1d25d3c,不再待部署。519项单测、41组隔离HTTP/桌面手机场景及独立只读复核沿原证据,不计本轮重跑;付款独立复核仍保留。旧在途只读核对已完成,历史未提交事实记录不等于代码未上线;出现新快照后仍不能直接退到缺资格守卫的旧镜像。原全量验收未据此补勾,状态保持in_progress,阶段/遗留归属见09-08-reimbursement-payment-closeout/implement.md顶部;本轮仅纠正摘要,不提交/推送/归档/部署。",
|
||||
"meta": {}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,148 @@
|
||||
# Design:错误可解释性与付款就绪治理
|
||||
|
||||
## B34 实施前解析器分类补充
|
||||
|
||||
实际依赖合成观测见 import-parser-fix-20260917/library-observations.json。仅普通 Error 的确切格式进入白名单:fast-csv 默认引号未闭合/引号后缺分隔符;JSZip 非 ZIP 的完整固定提示/缺少中央目录结尾;saxes 带行列前缀的未匹配闭合标签、未定义实体、无引号属性值。白名单按 CSV/XLSX 分开,未知消息、非 Error、TypeError、带其他内部故障形态均保留 500,并替换为无原异常引用/cause/自定义属性的固定 Error。白名单不声称覆盖依赖的所有损坏输入,新增格式须有真实库复现。
|
||||
|
||||
catch 只包两个解析 await,不包表格归一化、toBuffer、preview 或 apply。合法 CSV 的 map 原样保留文本,正常 XLSX 仍使用现库。测试抽取 app.js 原 error-handler 回调作响应/日志核验,不 import app/config 或启动 DB/jobs;合法导入继续跑原真实哈希测试,不用 mock 哈希换绿。
|
||||
|
||||
## 2026-09-17 考勤职责与 D15 优先级更正
|
||||
|
||||
依据用户“考勤功能在企微”的澄清,以及 docs/产品设计规则.md 的主办边界与考勤页规则,日常考勤由企微承办。client/src/pages/AttendancePage.tsx 已明确 OA 只展示摘要、解释、同步状态和审计;/attendance/monthly 是 OA 侧汇总查询,不是日常打卡入口。源码保留入口不能证明生产启用或真实使用。
|
||||
|
||||
下方 D15 的低年份观测继续保留,但退出当前必修/待决策清单,作为非阻塞技术记录。2000–2100 方案未获采纳,不实施新年份限制、不恢复旧 OA 打卡、不扩修待精简工资。今后只有摘要查询出现明确业务需求或实际故障证据时再评估;不能把此项处置扩大为删除企微同步、摘要或审计能力。B34 与 D16 原处置保持。
|
||||
|
||||
## 2026-09-17 三类余项的在用性与限定方案(已完成确认,产品未改)
|
||||
|
||||
本次批准为范围确认及先行规划,采用acceptance-boundaries-20260917/boundary-observations.json的合成观测,不把问题复现算修复通过。未新读真实配置/使用量,所称在用入口表示当前产品/源码保留入口,不证明今天的生产开关或使用频次。
|
||||
|
||||
### B34 损坏账号导入:下一本地优先修复方案
|
||||
|
||||
账号管理CSV/XLSX导入仍为保留能力,不属于ERP或工资待精简分支。routes/users的dry-run/apply共用readUserImportPayload:文件尺寸/扩展名/MIME已验证,但ExcelJS的csv.read与xlsx.load异常未映射。原错误handler对非AppError返回500/SYS_001并记录原err;合成未闭合引号CSV、非ZIP XLSX、截断XLSX在两入口共6例均500,CSV两例原err.message含合成单元格标记。9个路由探针(另含两空表头文件及权限拒绝)全部数据库调用0,接口无标记泄露。此为可解释性和日志边界缺口,不声称真实内容已经泄露。
|
||||
|
||||
限定修改范围:users解析边界、新原因的server/client/固定夹具三方,以及users.import定向回归;不修改全局error handler、所有导入器、上传限额、员工权限或apply事务。拟新增user.import_file_invalid,400/VALID_001、details仅固定file=invalid_format,用户提示重新导出CSV/XLSX;不包含文件名、sheet/cell、原解析异常/cause或数据行。现有missing_headers/empty/row_limit_exceeded/大小错误及其优先级保持。
|
||||
|
||||
实施步骤:先以实际依赖可识别的CSV语法和ZIP/XML格式错误建立白名单及反例,只在内存buffer解析两个await处翻译;未知解析器/程序异常继续500,但换成无原message/cause的固定内部错误后交日志,不能把任意故障伪装成输入错。toBuffer读取故障、权限、事务/数据库/哈希异常不得被这个catch吞掉。可识别异常策略须在写产品前用现有版本补齐,不能仅按任意message包含csv/xlsx猜测,也不全局catch所有Error返回400。
|
||||
|
||||
验收矩阵:dry-run/apply × 未闭合引号CSV/非ZIP/截断XLSX/坏XML;合法带引号换行CSV和真实生成XLSX/日期文本/空值/500与501行保持;原7个文件原因/413来源映射保持;权限拒绝先于解析;未知异常仍500且日志/响应均无合成单元格或原exception,读取失败不改分类;格式失败不开始preview/transaction/员工部门角色/成功审计。合法apply仍跑原真实哈希用例,串行避免旧超时。验证users.import、errors-client固定映射、strict/self-test、node --check、前端typecheck/build与治理。没有新数据库结构、外联或真实导入。
|
||||
|
||||
### D15 极低年份:分开旧代码与保留入口
|
||||
|
||||
parsePayMonth及统一考勤parseMonthRange对0000/0001/0099分别映射1900/1901/1999,0100/1900/2024正常;共享date-only字符串解析保留字面低年份。旧attendance服务buildMonthRange已有2000–2100限制且attendance_v1硬关闭,不存在该低年份入口,不能为验证打开它;未使用shiftMonth也不扩修。工资属于既有retirement-review候选,按用户取舍本轮不补修工资/工资导出。
|
||||
|
||||
统一考勤/attendance/monthly仍有页面/route入口,不能整文件以旧考勤名义排除;此为只读查询年月与边界不一致,保留低优先级决策。推荐后续仅该外部年月采用与旧业务月查询一致的2000–2100明确范围;这是新接受年份规则,须单独确认后才写代码。备选为保留四位公历年份并正确构造UTC界限,需另核0000/真实PG支持与跨世纪闰年,不宜未经决策全局替换Date.UTC。均不改历史年月/日期,不推断生产存在低年份数据。
|
||||
|
||||
### D16 AP反向区间:范围确认后维持现合同
|
||||
|
||||
ApOperationsPage将ledgerDateFrom/To分别传列表与导出,共用financeLedger构造gte/lte。两端为有效日期但from>to时继续200,谓词同时成立无匹配;不交换日期、不忽略其中一端,deleted_at过滤仍保留。73项现有AP列表/导出回归通过;探针只实测共享where构造,不冒称真实PG空集。日期本身非法仍400,pendingCreatedAt反向范围的原400与ledger不是同一合同。
|
||||
|
||||
当前不列为必须修复项。若以后需要输入体验提示,必须同批覆盖页面、列表、CSV/XLSX导出及原因三方,把200改400作为显式需求;不可只在共享where偷偷改变规则。不新建视觉方案、不改权限/金额/写入,也不需真实数据验证本次保持结论。
|
||||
|
||||
## G8按在用路径收口
|
||||
|
||||
按implement顶部B31–B33合同处理57处,17处ERP旧分支按用户最新指示跳过并保留源码/基线。其依据为产品设计规则61/89及企微路线图37;通用outbox有notification.im消费者不整文件跳过。当前权限/状态/编号/开关/认证业务规则保持,只本地合成。所有旧材料保护、独立PENDING,不读真实配置密钥/外联/提交部署或实施借款。
|
||||
|
||||
|
||||
## G7本地错误合同接续
|
||||
|
||||
查询考勤周报八源42处,按implement顶部B29/B30逐操作合同实施;三方固定提示、精确减基线、实际路由/服务负例和合法回归、页面安全消费及保护新候选。legacy考勤硬关闭保持,内部路由用合成门禁桩分层验证;周报项目开关失败前原update尝试保持。独立PENDING,不扩权限/状态规则,原真实数据/外联/提交部署边界不变。
|
||||
|
||||
## G6实现边界
|
||||
|
||||
共享审批原步骤/角色/兜底/人员上下文守卫分别注册原因,动态主管失败沿固定安全提示,不拼角色ID或链内容。流程定义与审批规则schema由调用方显式传原因;原快照、权限、锁、状态、发布/审计和金额规则保持。不可达防御仅静态核对,不通过改规则制造测试覆盖。B28a仅把委托本人范围和有效期筛选从覆盖式object spread改为AND组合,保留每一原谓词及管理权限来源;结构核验显式单列此处,路由内存过滤负例证明普通用户不会得到他人有效委托。
|
||||
|
||||
## Bug Analysis: 委托列表同名OR覆盖
|
||||
|
||||
### 1. Root Cause Category
|
||||
- **Category**: E/D - 隐含对象合并假设与测试缺口。
|
||||
- **Specific Cause**: 期望本人范围OR与有效期OR同时成立,但后置spread按键覆盖前者;原默认includeInactive=false触发。
|
||||
|
||||
### 2. Why Fixes Failed
|
||||
无历史修复证据,不编造失败史。本轮先保留4个真实Fastify/合成内存过滤红例,唯一AND组合修复后8个范围用例及全34项委托用例通过。
|
||||
|
||||
### 3. Prevention Mechanisms
|
||||
| Priority | Mechanism | Specific Action | Status |
|
||||
| --- | --- | --- | --- |
|
||||
| P0 | 结构 | 两个已有谓词放入AND,保留管理权及原日期边界 | DONE |
|
||||
| P0 | 回归 | 默认/false/0与true/1、本人/他人、管理员过滤、开始/结束等时边界 | DONE |
|
||||
| P1 | 规约 | backend-fastify-prisma记录同名OR合并与消费where的测试要求 | DONE |
|
||||
|
||||
### 4. Systematic Expansion
|
||||
本轮只对baseWhere/scopeWhere/permissionWhere传播作源码定位,未做全仓授权审计,不声称不存在其他组合问题。无通用查询框架改造;后续可见性条件变更应保留权限对象并组合筛选。模拟findMany不能无条件返回固定列表来证明数据隔离。
|
||||
|
||||
### 5. Knowledge Capture
|
||||
- [x] 更新现有后端spec、当前design与implement;无新计划系统。
|
||||
- [x] 本仓无src/templates/markdown/spec目录,不生成Trellis工具模板。
|
||||
- [ ] 独立只读内容复核PENDING;遵照用户不提交要求,不执行技能默认commit。
|
||||
|
||||
## G5接续设计
|
||||
|
||||
合同schema由四操作显式传原因,版本/终止/归档/纠错/续订守卫保留status和事务位置。采购预算先写流水后查池、release缺池继续的原语义不改,默认409显式传给新builder;仅无剩余消费者时删除旧导出。测试区分已尝试写入、无后续额度/成功审计和mock事务恢复,不能冒称真实PG回滚。
|
||||
|
||||
资产分类/卡片/索引schema和人员角色原因由调用方明确给出;流转与盘点原状态和循环写入位置保持。采购上传策略仅用既有PurchaseAttachmentPolicyError.reasonCode白名单映射(未知用固定安全兜底),下载构造保留旧message/status/details.reason与必要审计。AST批量迁移需识别shorthand statusCode属性,不能因缺initializer误用默认400;本批通过下载409及原文案路由断言证明。采购金额规范化前原主表update/明细delete和预算前原重算写入不改变。
|
||||
|
||||
## G4差旅实现设计
|
||||
|
||||
申请list/id、create/patch/link-project输入及既有状态/财务维度/预检/流程分支分别注册原因。link-project原parseUuid无定义,三个真实Fastify合成用例先复现非法/绑定/解绑均500,再用parseTravelRequestId修复并回归原404/403/开关守卫;不新增项目关系或状态限制。CJS语法检查不能发现运行时未定义函数,保留这组路由回归作为防复发证据。
|
||||
|
||||
订单/授权/交易导入共享禁用原因,各类schema和空归一化分别解释;标记付款保持精确结算交易匹配,冻结建议仍只记录建议。travelPayments缺池保留409,授权/冲正先ledger再查池,结算原仅ledger不查池/改额度。对账路由与服务旧helper默认409,迁移均显式保持;只有原schema/id错误400,原存在性校验不额外限制启停。原helper全部消费者迁移后删export/import。
|
||||
|
||||
七源结构检查仅排除错误构造/原因参数及已单测的ID解析器修复,原权限/状态/副作用顺序/事务保持。主会话本地证据,独立PENDING。通知、预算、流程参与者只用桩,ERP仅mock DB outbox,不声称真实发送、PG回滚或开关开放。
|
||||
|
||||
## G3基础资料实现设计
|
||||
|
||||
共享schema由调用方显式给操作原因;动态参数经getErrorReason校验,所有原因在服务端、客户端固定映射与断言夹具三方登记。四主数据实体各有id/list/create/patch/空修改原因,跨模块相同公司引用拒绝复用原因;原编码规范化、层级/归档和P2002映射范围保持。日历日期替换保持500项、空数组清空、默认日历绑定与先验后删顺序。
|
||||
|
||||
费用标准保留合并旧范围后校验的PATCH语义,假别保留原空PATCH和嵌套policy更新,模板保留50项、禁用类型原索引详情及软删除幂等。项目14种schema、7类id、5类开关、列表和豁免备注分别明确;收口项原先初始化再验id/body顺序保持并单独合成实证。项目日期仍只有原格式校验,本轮不扩日历规则或真实功能开放。八源AST去除错误构造/原因参数后业务结构一致,只作主会话辅助证据。页面沿既有安全resolver;假别写API无现有页面调用、费用类型仅有读取客户端,不能声称完成这些管理页面。
|
||||
|
||||
## B11–B14实现边界
|
||||
|
||||
预算范围和选池沿用原优先级,控制规则PATCH仍按提交body判断;账号唯一冲突详情继续兼容但客户端不拼数据库字段,密码策略与角色/会话操作不改。部门层级/归档只替换错误构造;员工各schema由调用方显式传入注册原因,分别标识合同、培训、证书和生命周期操作。
|
||||
|
||||
withUploadSizeReason仅包住员工上传request.file与toBuffer,精确捕获FST_REQ_FILE_TOO_LARGE→原400/VALID_001/file=file_too_large,其他异常原样。合同下载构造器使用注册原因后恢复原安全message“合同附件未通过安全校验”,409及阻断审计保留,不泄露文件字节。六源AST结构对照证实原守卫、数据访问、权限和事务未变;这些为主会话本地证据,独立仍PENDING。
|
||||
|
||||
## B10路由原因与全量分组
|
||||
|
||||
预算13分支使用显式budget原因;绩效12原因中parseBody由创建/修改/评分操作显式传入,并通过getErrorReason校验,已有活动周期预检和P2002共用同一原因。移除两个无消费者的legacy builder,不改预算共享服务、schema、状态判断或守卫顺序。页面复用既有resolver;P2002测试只证明异常映射,不证明真实PG并发约束。全部546处按implement顶部互斥文件组持续收敛,详细操作合同在每批实施前补齐。
|
||||
|
||||
## B6/D13/D14/B7–B9连续本地设计
|
||||
|
||||
B6保持上传原生产400合同,分别捕获取得filePart与消费toBuffer时的文件过大异常;7原因不涉及文件名/内容拼接,其他异常原样。D13证实月份00/13已有后置拒绝,只补路由/UTC月界证据;低年份Date.UTC映射另列,并未改可用年份范围。D14在公告原schema候选之后检查本地日期部分与finite Date,避免仅验ISO前缀;不拿UTC日与输入日相等作时区校验,因此跨UTC日期偏移仍合法,原无偏移/24:00滚动兼容保留。
|
||||
|
||||
B7–B9把公告和工资现有拒绝分支按操作注册原因;parseBody所需原因由每个调用方显式传入,删除这两个文件已无消费者的legacy builder;attendance/exports则保留可选原因,防止给其他域贴错提示。原权限、状态判断、数据库查询/锁/事务/金额规范化代码不变。公告创建/更新/归档/签收复用既有安全resolveErrorMessage及toast;工资页面本来已消费resolver,无额外UI改造。P2002冲突只是数据库桩测试,不虚报真实并发/回滚。累计新增36原因,审阅与恢复/生产交付门禁继续分开。
|
||||
|
||||
|
||||
## 2026-09-17 D12/B5实现设计
|
||||
|
||||
D12将HR原多格式转换与日历有效性分开:canonical日期用既有isValidDateOnlyString判定,normalizer同时保留hireDateInvalid,不能将非法null解释为缺失。processProfile在原缺必填/非active守卫之后、resolveDepartment之前整条skipped/invalid_hire_date;对直接注入sourceProfiles的hireDate再校验。合法来源、新建缺省now及现有员工不改hire_date保持;运行/item审计允许,业务实体和主管同步不得消费非法项。
|
||||
|
||||
B5按明确操作选择7原因。合同和在岗共享legacy错误helper还被写入/冲突使用,故只迁移筛选服务具体分支;员工/合同导出外层schema另显式传域原因,经getErrorReason校验后调用business builder。其余导出不传参数,保持旧合同;不按details动态推断、不改变导出/权限/31天规则。原因注册/client/fixture及只减的baseline作为同批审阅输入。
|
||||
|
||||
|
||||
## 2026-09-17 D1–D4执行边界
|
||||
|
||||
沿implement中已落盘的四批日期规划继续,统一复用日历谓词但仅在各已核外部schema串接refine,保留原regex、nullable/optional、权限守卫及业务写入顺序。todos两处dueDate、员工共享筛选及导出、节假日整批items、仪表板与AP导出日期分别验证;导出共用DATE_ONLY_SCHEMA保持旧定义,其他域不能被无意扩修。
|
||||
|
||||
非法节假日必须在解析整批时拒绝,事务/清空/新增/审计均未调用;合法批次仍按原事务写入,不以mock声称真实数据库回滚。AP pending反向区间保留400;ledger反向区间原无拒绝守卫,另待范围规则审阅,不在本批改变。员工/users与/employees共享服务,权限判断原顺序及最小目录DTO保持;日期输入修复不授权读取或修改真实员工资料。
|
||||
|
||||
验收为本地合成Fastify路由与已有回归、语法/合同及治理检查;不会启动真实DB、读取环境配置或触发消息。新结果/候选按新目录保存;上一轮候选与未提交修改继续保留,不把主会话自检计为独立复核。
|
||||
|
||||
## 2026-09-17 B1/B2小批设计
|
||||
|
||||
B1沿既有isValidDateOnlyString窄谓词:在四个高风险外部路由的原字符串regex之后refine,再保留原optional/nullable外层;区间先保证两端都是实际日历日期,再走原顺序约束。周报必须在周一归一化之前验原始输入,在岗按写入/查询各入口追踪。服务层二级消费者只有查明外部来源才补闸,不统一改转换器或批改存量。
|
||||
|
||||
B1每组锁定原HTTP状态、权限、workflow及事务调用次数;无效日期不能进入写入、通知或成功审计。日期函数已有测试复用,并补各真实路由负例,避免只测正则/复制schema。合同/采购等冻结业务只修输入契约,不开入口或改开关。
|
||||
|
||||
B2按现有检查器的实际指纹/上下文分组,不把612次历史计数当作待修bug总数。新迁移采用buildBusinessValidationError,保留status/code/details;动态OCR字段、密码规则和催办时间沿已审窄投影及服务端负载合同,不以注册静态句覆盖动态指导。异常正文、银行数据和未白名单字段不能进入提示。
|
||||
|
||||
回退按单一小批补丁进行,不新增迁移、不改历史数据;原因码、客户端映射、固定文案夹具、对应测试和只减不增的基线处置作为同一交付单元。新发现需要修改审批资格、状态机或付款语义时停止并另审,不藏在提示治理中。到期延期只允许逐项理由/负责人/复验条件经批准后变更,禁止集中改日期。
|
||||
|
||||
### 本轮落点与审查边界
|
||||
|
||||
B1a四路由加合同查询共享服务`contractRegistryFilters`;该服务也接合同导出,属于已证实外部输入,复用同一守卫。B1b两路由加`exports`的PRESENCE_HISTORY_EXPORT_QUERY_SCHEMA,限定在岗导出日期,不改所有导出共用日期schema。`presenceHistory`仍只处理由已校验入口或内部当前日期传入的值;其他导出/待办等日期另列后续消费者,不在本批临时扩修。
|
||||
|
||||
B2当前扫描229注册/316已迁移/612遗留、主链例外0。选取通知列表/渠道管理、员工待办及门户开关提示这一小批,逐固定原因码迁移原调用,不更改通知投递、权限、状态或业务开关;门户未使用的通用validation helper可删除。三方文案与真实路由负例整批校验,仅移除实际消失的AST指纹,原owner/expiresOn逐条保留。通知测试使用现有合成渠道,不调用真实企业微信。待办日期溢出属于另一个输入批次,先登记,不借提示迁移扩大行为。
|
||||
|
||||
## 1. 总体边界
|
||||
|
||||
本任务不把全部 `VALID_001` 重构成新异常体系。保留 HTTP status、顶层 code 和既有 details,在已迁移错误中增加稳定 `details.reasonCode`,用注册表、遗留指纹基线和 focused 测试形成只增不退的 ratchet。
|
||||
|
||||
@@ -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项整批重跑。
|
||||
@@ -258,3 +899,19 @@ R1包及其manifest不变;本轮代码已偏离R1,必须重冻R2后交增量
|
||||
最终同输入验证:`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;没有创建定时自动化。
|
||||
|
||||
@@ -1,5 +1,88 @@
|
||||
# 错误可解释性与付款就绪治理
|
||||
|
||||
## B34 当前验收状态
|
||||
|
||||
用户批准接续后,损坏账号导入的限定修复已完成本地合成验证:已复现白名单格式返回固定400提示,未知解析故障继续500且不记录原解析内容;权限、文件限制、合法导入、日期文本与事务保持。最终68项导入加854项原因合同断言通过,前端typecheck/build及原因strict/self-test通过,详见implement最新回执。此结论不等于独立复核、真实导入或上线;下方“尚未实施”保留原时点,D15非阻塞、D16现合同及17 ERP排除不变。
|
||||
|
||||
## 2026-09-17 用户澄清:考勤由企业微信承办
|
||||
|
||||
用户明确“考勤功能在企微”。按现行产品规则,打卡、请假、补卡、外出、加班由企微承办;OA 保留月度摘要、异常解释、同步状态及审计,不恢复旧 OA 打卡。此前 D15 是 OA 摘要查询的极低年份技术观测,不是企微考勤故障,也不是新建 OA 考勤的需求。
|
||||
|
||||
D15 不列为本轮必须修复或阻塞收尾的项目;原 2000–2100 建议仅为未采纳的技术备选,不再作为等待用户决定的必办项。保留观测和现有代码,不把它记为已修复,也不由此认定所有企微摘要/同步代码均已废弃。B34 账号导入仍为下一本地修复优先项。
|
||||
|
||||
## 2026-09-17 剩余边界确认结果
|
||||
|
||||
W6三类余项已完成本地范围确认,产品源码未更改。损坏账号CSV/XLSX在两入口仍返回500且CSV异常可将合成单元格交给日志,列为B34优先修复方案;具体错误白名单、固定安全提示与未知内部异常分流见design。低年份D15将工资待精简路径排除,统一考勤保留入口只读偏移另待接受年份决策。AP反向ledger区间D16保持现有200及有界查询,不作为必须修复项;非法日期/其他区间原拒绝保持。
|
||||
|
||||
本轮验收为合成行为证据、在用/排除依据与限定实施方案,不把characterization通过记成缺陷已修复。旧17处ERP排除与原人工复审日期不变;不修改原AC勾选、不提交部署或访问真实数据。
|
||||
|
||||
## G8按在用路径收口
|
||||
|
||||
按implement顶部B31–B33合同处理57处,17处ERP旧分支按用户最新指示跳过并保留源码/基线。其依据为产品设计规则61/89及企微路线图37;通用outbox有notification.im消费者不整文件跳过。当前权限/状态/编号/开关/认证业务规则保持,只本地合成。所有旧材料保护、独立PENDING,不读真实配置密钥/外联/提交部署或实施借款。
|
||||
|
||||
|
||||
## G7本地错误合同接续
|
||||
|
||||
查询考勤周报八源42处,按implement顶部B29/B30逐操作合同实施;三方固定提示、精确减基线、实际路由/服务负例和合法回归、页面安全消费及保护新候选。legacy考勤硬关闭保持,内部路由用合成门禁桩分层验证;周报项目开关失败前原update尝试保持。独立PENDING,不扩权限/状态规则,原真实数据/外联/提交部署边界不变。
|
||||
|
||||
## G6验收补充
|
||||
|
||||
共享审批工具、流程定义、审批规则和委托仅迁移原错误合同,保留原status/details、角色/自审批/快照/主管链规则及事务副作用位置。明确不可达防御与本地mock边界,另限定修复委托列表有效期OR覆盖本人范围OR的组合缺陷:两者AND同时生效,恢复原有范围而不新增管理权;须有合成数据红绿路由证据。具体操作与验收以implement为准;独立只读复核PENDING。
|
||||
|
||||
## G5验收补充
|
||||
|
||||
延续120处采购/资产/流转盘点/合同与共享预算错误合同治理,仅新增明确原因和固定安全提示,原状态/权限/冻结/附件安全及业务写入顺序保持。具体子批先行合同与进展以implement顶部为准;仅本地合成,不以扫描数代替分支或真实业务验收。
|
||||
|
||||
## G4差旅验收补充
|
||||
|
||||
B19–B21覆盖申请、订单、授权、交易及共享预算和对账错误合同。保留原400/409/details、审批/付款/预算规则、锁/事务、按条导入跳过与幂等、ERP排队门禁及敏感文案固定映射。另修复申请关联项目误调用未定义parseUuid导致500,复用本文件已有id解析器,原可见/绑定规则不改。缺预算池前原ledger尝试、工作流拒绝前原风险处理继续明确记账,不虚报零写入或真实回滚。
|
||||
|
||||
## G3基础资料验收补充
|
||||
|
||||
B15–B18覆盖公司/成本中心/单据分类/供应商、日历、费用标准/类型、假别、模板及项目逐操作错误合同。仅补稳定原因与固定安全提示,保持原400/409/details、权限、开关、状态、金额/日期schema、默认值/null和事务审计。项目收口项的原先行惰性初始化例外明确记录:拒绝后不修改目标项、不记成功审计,不承诺所有拒绝零写入。旧详情中的公司代码及无效费用类型列表不用于拼UI文案。仅合成测试,具体合同与验收状态见implement顶部。
|
||||
|
||||
## B11–B14连续本地验收
|
||||
|
||||
覆盖预算范围/选池与控制规则、员工账号/部门、员工资料/生命周期/合同培训证书及头像/合同附件错误解释。保留旧HTTP、VALID_001、详情字段与权限/冻结/事务/业务规则,三方原因及可恢复提示同批。员工文件读取只捕获既有生产映射的FST_REQ_FILE_TOO_LARGE并补原因,原文件限额/格式/内容检查和下载阻断安全message/审计保持。原目录无调用helper清理与不可达日期防御分支单独记录,测试只用合成资料和离线桩,详细合同以implement顶部为准。
|
||||
|
||||
## B10及剩余546处治理
|
||||
|
||||
按implement顶部8组总表连续处理同类本地错误合同。B10限定预算/绩效路由原拒绝条件,保留管理员权限、经理/本人冻结、预算范围/额度和事务状态;只补25个明确原因及安全恢复提示。覆盖原status/details、无后续写入/成功审计、正常与权限回归,三方文案和严格基线同批验证。共享预算服务仍单列未完成,不能称整个预算域清零。
|
||||
|
||||
## B6/D13/D14/B7接续验收
|
||||
|
||||
连续完成账号导入文件7原因、月份后置守卫补证/具体提示、公告三日期字段合法性与公告操作原因/现有页面错误反馈,并收齐工资维护现有校验原因。共36原因,业务拒绝条件不变。原status/details、导入事务/预览审计、工资生成发放规则、公告时区/缺省/签收保护保持;非法上传或公告时间不进入业务写入。月份00/13已有校验不能重复宣称修复,低年份Date.UTC偏移另列决策。精确合同与状态以implement最新入口为准,不扩大到真实业务或借款实施。
|
||||
|
||||
## 本轮D12/B5验收补充
|
||||
|
||||
继续执行已批准的本地日期与错误治理:HR入职日期缺失保留默认,提供但非法必须整条跳过并保留安全审计,在部门/账号/角色/身份/主管写入之前拒绝;已有员工不新增入职日更新。员工目录、合同筛选(含对应导出外层输入)及在岗历史范围共7原因,兼容原status/details与默认范围。以本轮implement顶部为当前限定合同;旧“D12尚未实施”为历史时点,完成状态以本轮回执为准。仅合成数据与离线桩;独立/发布不由主会话本地验证抵扣。
|
||||
|
||||
|
||||
## 2026-09-17 连续本地治理范围(当前合同)
|
||||
|
||||
用户已批准按后期规划连续推进。继D1–D4后,实施D5用户创建/修改/CSV/XLSX入职日、D6员工资料/生命周期/档案、D7 AP直接列表、D8余项盘点、D9仪表板直接读、D10薪资/预算/绩效、D11考勤修正/请假和同步请求日期。仅本地输入校验,保留原权限、开关、状态机、额度/区间/默认日期和nullable/optional;旧attendance_v1固定关闭不被解冻。CSV须保留合法日期及文本标识原值,非法apply整批无业务写入,dry-run原审计保留。
|
||||
|
||||
B3/B4限于dashboard/AP查询/开关及账号创建/修改/工号不可改/空修改/导入错误行9原因;旧VALID_001、status/details保持,客户端具体安全文本、固定夹具和真实路由负例同批。剩余豁免只删消失指纹,原owner/2026-10-05不变。
|
||||
|
||||
验收按D5–D9/B3/B4最终17文件520项及后续D10/D11的9文件61项分列,两组不冒称全仓/独立/真实DB或公网。前端typecheck/build通过;完整记录/初跑失败/精确命令归implement及新证据目录。D12外部HR多格式日期须先分清缺失默认与非法跳过,尚未实施;datetime/月份、AP反向区间改变、历史数据修订和借款实现不在本批。旧批次/冻结材料保留,提交发布另按门禁。
|
||||
|
||||
|
||||
## 2026-09-17 D1–D4本地接续范围
|
||||
|
||||
用户在D1–D4规划落盘后要求继续推进,本轮仅落实待办dueDate、员工目录及导出的hireDate筛选、节假日批量日期、仪表板/AP导出date-only字段。无效日历日期须在写入/业务导出查询前拒绝,原nullable/optional、权限、重复/归档冲突及区间语义保持;CSV/XLSX共同验证。完整结果见implement顶部,未来09-25人工复审与剩余错误豁免仍开放。
|
||||
|
||||
不扩大共享parseDateOnlyString转换、员工资料写入/导入、审计datetime、工资月份或AP台账反向区间规则;不修改客户端/迁移/生产。B1/B2原候选保留,本次新输入另冻供独立审查,不将旧450项验证冒称覆盖新输入。
|
||||
|
||||
## 2026-09-17 后续治理范围(本地实施已批准,已发布批次不重做)
|
||||
|
||||
按09-08优先级表承接B1/B2。B1先覆盖contractsRegistry、purchaseRequests、travelOrders、travelReconciliation的外部日期,再覆盖weeklyReports/presence;只加输入日历守卫,不开放冻结模块、不改审批/付款规则、历史数据或旧parseDateOnlyString转换约定。内部派生日期逐调用点追上游资格,不因引用旧解析器就整文件替换。
|
||||
|
||||
B2先用现有AST门禁盘点当前豁免及用户可达操作,再处理确实未迁移的常用路径;已发布paymentAccounts/invoicePool/auth/workflow提示不重复实施。每项必须同时有服务端原因码、兼容details、客户端具体文案及动态字段/无副作用断言;保留逐条批处理失败原合同,不靠宽泛正则或删基线隐藏问题。
|
||||
|
||||
新增小批验收:非法日历输入在事务/写入前拒绝,闰日/月末/null/省略及原区间/周起点语义保持;新原因码三方文本一致,动态字段投影仍安全,主链路零新增例外;受影响真实路由/客户端定向测试通过并经相应只读审查。09-25复审、09-30必要单项延期提案、10-02查漏、10-05原到期门禁不变,责任人shunli;本轮未创建定时任务、不延期。
|
||||
|
||||
用户已于本日批准按梳理继续,本节既有B1/B2小批进入本地实施;新增schema/业务规则、整库历史修订、生产写入和发布不在范围。与08-23受保护操作等待解耦,不要求完整灾备全部通过才能做本地治理。
|
||||
|
||||
## Goal
|
||||
|
||||
把“系统知道为什么不能继续、真人只看到参数校验失败”的缺陷从逐页补文案改成可持续的错误合同,并以付款批次为第一个完整样板:财务在点击前就知道付款资料是否齐全、缺什么、由谁补;点击后的服务端二次校验与页面提示必须来自同一份实时判断。
|
||||
|
||||
@@ -28,6 +28,6 @@
|
||||
"client/src/pages/PaymentBatchesPage.tsx",
|
||||
"scripts/qa"
|
||||
],
|
||||
"notes": "来源:真实单据 0014 创建付款批次时第三次出现‘参数校验失败’;生产只读诊断确认未创建批次,员工付款资料缺失且错误未被客户端解释。2026-09-05 最终规划已获用户批准实施;交接复核重点:门禁六类 self-test 真失败、主链路零例外且禁止新增例外、付款候选与创建共享同一 readiness resolver、20 处旧断言逐项处置且不得使用宽泛正则。0014 真实资料补录与付款不属于本 task 自动操作范围。",
|
||||
"notes": "2026-09-17当前:G8保留路径错误合同已收敛,520入口处理503、排除ERP17;1093最终合成与构建证据保持、独立PENDING。后续本轮只确认B34损坏导入、D15低年份和D16 AP反向区间;9导入探针DB零调用,6损坏文件仍500/CSV日志含合成标记,修复方案已落design但未实施;工资待精简不补、统一考勤年份规则待定、AP原语义保持且73回归通过。旧D12待实施/589余额属于历史记录,不再作为当前状态。\nD10/D11接续:6源日期schema,9文件61/61;旧考勤保持409关闭。D12仍待独立输入策略,前批17文件520结果有效。\n2026-09-17连续本地:D5-D9/CSV日期时区修复及9原因,17文件520通过、前端typecheck/build通过;589遗留/568指纹,独立PENDING,未提交发布。新日期D10-D12见implement。\n2026-09-17继续推进已落盘D1–D4:待办dueDate、员工目录/导出hireDate、节假日批量及仪表板/AP导出日历校验共4个源文件本地完成,11文件192项定向测试及10文件语法通过。原B1/B2的450项/typecheck/build为上一输入结果,不计本轮。AST仍240注册/327迁移/598遗留、577条基线entries、主链例外0,2026-10-05到期保持。官方current仍本task/in_progress;新候选独立复核PENDING,未提交/推送/部署,K1/K2及借款实施未执行。最新入口implement顶部,保留历史commit锚点。",
|
||||
"meta": {}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,180 @@
|
||||
## 2026-09-19 r5-fixed-r1登录复用边界
|
||||
|
||||
四完整文件31项30通过/1失败,采购整链、R75及视觉25项全部通过;付款在经理复核登录后按已有redirect参数返回付款页,而共享login仍应验portal。最小修正仅允许显式reuseLoginPage且当前为无search/hash的规范/login时省略goto;带redirect的登录页必须走原goto('/login')清除返回目标。保留真实表单和portal/profile断言、全部付款下游及300秒;不修改认证产品或接受任意登录落点。原失败保留,类型检查后相同四完整文件复验,再从static完整候选。
|
||||
|
||||
## 2026-09-19 G20 r5三项续修(原预算/并发/断言)
|
||||
|
||||
g20-full-r5历时5916.547秒;static/后端4428+1原条件跳过/8组启用服务回归均通过。浏览器372=367通过、采购保存失败1、视觉admin与付款链超时2、视觉手机后继未执行2,零重试。环境/source/repository/owner清理PASS。R75整文件与新旧BX/PB消费者通过,不据局部绿关闭N5/G20。
|
||||
|
||||
1. 采购PATCH保存P2028归09-18-local-concurrency-product-fixes P10,锁/校验/写入审计/5000ms不变,只移出非判定用途的响应关系读取。
|
||||
2. 视觉admin14/15完成,最后audit页耗尽180秒;管理员页累计导航56.768s、到达20.062s、quiet12.177s、截图95.145s、metrics2.838s(含超时附近结束的阶段日志,不当作独占CPU计量)。保留7组、33页、每组180秒、全部PNG/原断言/原workers/零重试;visibleRouteLink用Playwright同语义:visible+first一次查询;目标文档HTTP读取和已确定的真实链接点击并行并全部await;准确URL仍先验,之后独立到达断言Promise.allSettled并按原顺序抛首个失败,确保原5条正反例不弱化。不跳过字体/动画,不降画质,不用DOM伪导航。
|
||||
3. 付款链在299556ms才到执行:已完成提交、双审批、组批、独立复核、回单人工核验。原300秒保持;保留所有角色转换的真实表单登录/登出和全部业务断言,只消除财务审批结束后立即以同一财务身份登出再登录。共享login默认行为不改,允许本helper显式复用登出后已到达的/login页,仍逐项填表、提交、验证portal和身份入口。审批进度及最终只读DOM检查可并行全部await;3种审计只读查询并行仍逐项校验原字段。保留财务原地进度不reload、不得制单人复核/无回单执行、付款/核销/AP/归档与ERP拒绝全部断言。
|
||||
|
||||
先专用类型/原18条视觉守卫与原四完整文件procurement-flow、project-wide-visual、R75、payment-flow同配置定向,再冻结完整输入从static新候选。当前只是最小续修设计,未改预算、分母分类或验收范围,属于已批准在用修复/重复前置优化;不需要再次确认同一授权。
|
||||
|
||||
浏览器保护例外:旧GStreamer自动生成registry字节变化,旧baseline保留且不得改写为PASS;改写文件已复制留证,其余旧12137文件/HEAD/index不变。后续运行用本轮物理独占浏览器副本(非硬链接),不安装/下载。原字节恢复仅在找到校验匹配源时执行,不能猜造恢复。
|
||||
|
||||
## 2026-09-18 真实会话前置与冻结入口修正
|
||||
|
||||
直连正例必须等待目标路径和真实页面标题,排除错误页/登录后才导航下一文档。仅not.toHaveURL(/403/)会在认证bootstrap之前通过,并可能中断refresh;本轮观测旧有REFRESH_REUSE_DETECTED,补就绪后未再出现且付款整链通过。差旅沿已批准冻结合同改验拒绝,不能放行产品来满足原假阳性测试。
|
||||
|
||||
全页面视觉只审页面矩阵,匿名/login继续UI观测;已有createAuthenticatedBrowserStorageState走正式服务端登录,为每个独立角色+视口单独建立真实session,状态仅在内存传递给该context。目标页仍需浏览器真实bootstrap及全部原到达/HTTP/权限/视觉检查,不在两个context复制同一refresh凭证,不伪造令牌、mock认证、删页面或增预算。这样减少矩阵外重复portal登录装载,非修改认证行为。
|
||||
|
||||
## 2026-09-18 浏览器四未过最小修正
|
||||
|
||||
编号本地服务验收完成后回本task承接浏览器。DG7宽度矩阵是同一角色、同一不变合成数据的视口验收,复用一次登录但每个宽度仍从首页执行全部断言和截图;不同角色不共享。R3相同角色的拒绝、允许及退役404可在该角色独立context内顺序验证,保持五角色和所有路径,减少重复登录。目标文档HTTP探测需Accept: text/html,与浏览器文档请求一致;不能删除探测或放宽404。付款链只记录受控code/status及合成审计事件种类以确定AUTH_004原因,token、cookie、原始payload不进入输出;无证据不修改认证产品或补自动重登。
|
||||
|
||||
## G20 生命周期测试启动开销修正(2026-09-18)
|
||||
|
||||
原36命令完整链交错对照:默认Node为2.295–2.520秒,single-threaded为2.998–3.572秒,trace完全相同;其他启动参数同样无收益,均不采用。每次冷启动约63ms,重复启动是已测量开销,但不声称完整运行的宿主调度波动已消失。
|
||||
|
||||
最小改为每例一个仅本地Unix socket假命令服务,运行在现有Vitest进程;轻量Python标准库shim传递原argv/按需stdin/退出码,复用原CJS解析器、Compose依赖分析和命令语义。临时目录及socket独占,无TCP监听,private PATH/白名单与未知命令97保留。timeout记录后由shim直接exec原GNU timeout,hung inspect等待随socket断开取消;不得在服务端阻塞后续deadline。每例结束先关闭服务和连接,再删除自己的临时目录。生产部署源码、测试workers/预算/重试和全部断言不变。原完整链、独立四类源码变异、真实deadline、unknown command与部署安全回归必须全过,再验一次完整门禁。
|
||||
|
||||
## G20 WebKit 原生在线环境修正(2026-09-18)
|
||||
|
||||
实测官方 WebKit 26.0 在原无默认路由命名空间中 navigator.onLine=false;setOffline(false)也不改变原生值。只含本轮同命名空间veth对的 default dev qaonline scope link 则原生true,主动setOffline(true)后false。此为Linux WebKit网络发现差异,不修改navigator、不改业务离线保护,不增加公网/生产连接。
|
||||
|
||||
最小环境实现:仍只允许lo/qaonline/qapeer;新增恰好一条无gateway/via/multipath的链路默认路由,仅指向本轮qaonline。加强核验veth类型、两个ifindex独立且link或link_index互为对端且无跨namespace对端,拒绝其他接口/外部网关/IPv6默认路由。唯一链路两端都在独占namespace,无法通向宿主或公网。原“禁止全部默认路由”实现细节替换为“只允许已证明封闭内部对端的链路默认路由”;隔离边界和无外联要求保持。
|
||||
|
||||
原生空白页探针同时检查Chromium/WebKit及浏览器进程namespace;任一离线在昂贵业务验收前失败。增加拓扑反例与独占namespace合成不可达地址检查;不连接真实公网。原生在线证据和测试context中的主动离线仿真分别记录。旧结果绑定旧策略,不改写。
|
||||
|
||||
## G20 共享回执最小落地设计(本地机制,2026-09-18)
|
||||
|
||||
复用原 stage_static / stage_full_local,新增 run-release-gate.sh verify-candidate 无部署分支,现有 ci-release/all/deploy/生产 bootstrap 不接新强制消费(R1启用另批)。共享模块 release-gate-result.mjs 负责当前源码/策略/工具链、独占记录、阶段开始结束与失败、结果引用及重新推导资格;run-release-gate.sh 的两阶段仍是唯一执行定义。
|
||||
|
||||
1. 运行目录必须为空且在 artifacts/release-gate 内,先持久 INCOMPLETE;stage记录固定 static/full-local 顺序、开始/结束/退出;full-local内部固定inputs/database/prisma/server-unit/typecheck/client-build/server-start/accounts/workflow-actions/server-regressions/browser-server/browser阶段通过同一记录器写 full-local-stages.json。失败退出/中断保留未完成,不将结束收集错误转为通过。
|
||||
2. sourceSnapshot 复用全仓已跟踪/index及产品/测试/规约摘要,补完整未跟踪输入与QA/部署/包锁/config工具链策略摘要;阶段前后、最终验证当前快照一致。dirty允许本地诊断结果,但deploymentEligible=false。来源不接受只比commit而忽略dirty内容。
|
||||
3. 成功判定依赖真实 static/full-local阶段结束及原退出,full-local环境result(mode full-local、当前policy、原生/guest namespace事实、cleanups、sourceBeforeAfter),G19完整发现重算与全部本地逐项执行、预先witness/acceptance归属。复用G19验证,不从候选回执自报expected。原live/frozen12+2按G19处理,公网仍NOT_RUN_LOCAL/交付INCOMPLETE。
|
||||
4. 记录只保留相对路径、hash、工具版本、筛选参数与逐项安全身份/状态;不复制业务原文或敏感env。读取仅本轮已验证独占文件;symlink/越界/截断/旧schema拒绝,引用绑定实际摘要。报告仍不是防伪签名,首次部署须独立重跑。
|
||||
5. 离线verify以同候选clean状态及完整阶段/环境/覆盖重新推导发布前资格;普通dirty本地运行的验证可证明localChecksPassed,但以PARTIAL/非零结束且不发布。不创建绕过开关,不改local-candidate的严格判定。INCOMPLETE/FAIL/PARTIAL/PASS明确区分。
|
||||
6. project-wide既有两个skip开关前置验证精确值、非空reason/operator/approvalRef;获批诊断记PARTIAL/退出2/未跑阶段,普通verify-candidate拒绝。批准引用结构不替代真实授权。只在fake工具验证project-wide,不运行其live readiness。
|
||||
7. 验证:缺/旧/错profile、阶段缺失/跳过/错误顺序、工具/输入变化、dirty、missing/unknown/duplicate/retry/xfail、原生/guest/清理漂移、伪通过均拒绝;源码变异移除验证/放宽阶段或skip必须使反例变红。执行既有部署生命周期/安全回归,真实部署命令计数0。
|
||||
|
||||
本地完整运行不据已有定向结果拼接;若为记录器引入源码变化,最终完整验证必须绑定最终代码。WebKit v2105是当前Debian11可用的官方冻结运行时,只证明该版本,不能宣称最新版Safari/真机企微兼容。
|
||||
|
||||
## G18 验证后归属
|
||||
|
||||
票据URL修复及当前OCR/R108/33路由矩阵已验;PWA原生控制器生命周期和采购最小写事务详见09-18-local-concurrency-product-fixes的PRD/design。原四文件并发4/4、完整认证/OCR18/18通过,不能推成旧full-r2全绿。12 live/2 frozen分层已批准并按G19实现;WebKit、R1、独立与真实业务/发布保持原边界。证据只归相应输入,诊断预载与无预载验证分列。
|
||||
|
||||
当前受管合成 runner 为既有底层回归设置 TRAVEL_SYNC_ENABLED=true;因此 G19 不把“所有入站同步关闭”冒称本地实测冻结。新增整例验证现行员工/财务权限拒绝及付款 blocker,不改变该合成配置。关闭开关的 409 属既有路由单测合同,与实际环境分列。
|
||||
|
||||
### G19 实现细节
|
||||
|
||||
保留 6 个旧 spec 原字节,新增 travel-freeze-protection.spec.ts 两项。受控 JSON 清单按 file/id/title/project/repeat 标识 14 个保留旧身份,并核源码 SHA;新同文件用例没有登记即失败。其他发现默认为本地必须执行。完整发现的文件集合仍来自源码扫描,执行集合从核验结果导出精确文件正则,不使用调用者 grep/清单;当前例外文件中不能混入本地用例而被整文件漏掉。普通 runner 执行后检查每项结果,失败退出同时保留结果。定向模式保持无资格。
|
||||
|
||||
本地覆盖计划记录 sourceSnapshot 的 commit/digest 与合同摘要;结束核输入不变。公网回执验证以原始 Playwright 逐项结果和 live profile/同候选绑定为条件,预先不得标 PASS;验收工具无外联能力,不接入部署入口。这里只解决分层覆盖,R1 的完整阶段、环境、干净候选与发布入口强制消费仍单列。
|
||||
|
||||
## 2026-09-18 G19 分层验收(用户已明确批准,实施中)
|
||||
|
||||
用户批准:12 条公网用例作为同一候选发布后必跑项;2 条冻结差旅保留原源码与历史结果,改验冻结保护。本地通过不代表公网/完整交付通过,不授权部署、恢复差旅或真实操作。此增量替代 R2 的“排除集合为空”,不重写旧 full-r2 失败。
|
||||
|
||||
- [x] G19a:全体非 manual 用例继续真实发现,固定 12 live+2 frozen 的用例身份、原因、责任角色、必跑入口和原源码摘要;未指派实际负责人明确待定。
|
||||
- [x] G19b:由完整发现与受控合同生成本地执行文件集合,登记用例级覆盖;拒绝遗漏、身份漂移、未知/重复、跳过、重试与 expected-failure。禁止调用者筛选普通本地集合。
|
||||
- [x] G19c:新增两条冻结保护整例,验证现行合成角色入口/正式 API 拒绝、共享付款差旅 blocker 与入站导入权限拒绝;不改权限,不执行旧差旅链。
|
||||
- [x] G19d:公网义务在本地保持 NOT_RUN_LOCAL,绑定候选提交与源码摘要;公网用例结果只能由同候选、live profile、完整逐项通过报告兑现。验收回执不自授部署或发布资格。
|
||||
- [x] G19e:增加漏例/新增未知归属/漂移/伪通过/候选不匹配/真实 runner 选择等反例,运行本地冻结保护,更新 spec/协调 task 与新候选;独立仍 PENDING。
|
||||
|
||||
WebKit 下载问题仍待答复,完整普通门禁未通过;R1 机制后续与真实强制消费启用分开,不启用发布入口。所有旧差异、失败材料与冻结包保持。
|
||||
|
||||
## G18 OCR 实测暴露的最小产品修复(2026-09-18)
|
||||
|
||||
g18-corrected-visual-r1:R108 整例通过(8 个移动观测、无发现),OCR 缺字段识别及横幅已通过,但人工修正按钮在180秒内反复被卸载;执行记录有56次 DOM detached,终态回到列表。源码两组 effect 分别 local state→URL、URL→local state,并同时依赖双方;上传选中票据时会交叉回写。此为在用票据详情状态同步缺陷,不是缺权限或OCR规则错误。
|
||||
|
||||
在已批准 G18 现行修正流程验收内,最小修复只涉及 InvoicePoolPage:从 URL 读取 detailInvoiceId,所有选择/返回动作只更新 URL 且保留其他查询参数,删除双向 effect 与重复返回写入。保留 replace 导航语义、全部查询/编辑/权限合同,不调整OCR、状态机或产品视觉。原 E2E 红例保留,修后必须不刷新/force-click 完成缺字段拒绝→补齐可用,增加URL选中与返回列表再进入验证;运行前端typecheck/build及受影响浏览器检查。相同模式只定位记录,不顺手改其他页面。
|
||||
|
||||
视觉首轮目标到达还需纠正:portal使用既有portal-work-summary锚点,动态报销使用各自workspace;其余已知页面标题不降级。4xx错误页模拟响应显式UTF-8,确保反例精确击中原到达断言;增加同源API403/404观测为失败发现,避免仅页头可见冒充有效页面。
|
||||
|
||||
## G18 最小落地合同(2026-09-18)
|
||||
|
||||
沿 implement 顶部 G18a–e 执行。OCR 能力必须由启动同一服务的 runner 派生并用行为验证,外部标志不得伪造;R108 使用在用报销审批,初始化失败不转 skip;视觉矩阵明确列出真实系统路由,检查授权角色与目标到达,错误页不算页面覆盖。保留原并发、预算、零重试和完整发现。只更新测试/QA/现有矩阵,不修改业务权限或视觉样式;可靠性先取得可归属观测再修复。外部与独立复核边界不变。
|
||||
|
||||
## G17 落地与 G18 后续边界(2026-09-18 最新入口)
|
||||
|
||||
G16 前置已实施并执行普通完整门禁;下方“以上未执行”属于当时计划。本轮 G17 按 implement 完成当前测试合同修复和限定实测:合同列表链接反例、当前删除/明确关联、mock API/SW 边界、通知非差旅夹具、采购保存/预检/提交、管理范围查询、重复付款整例归并。原 full-r2 失败和后续定向成功分别绑定来源;普通全量资格未取得。
|
||||
|
||||
主会话反例不是独立审阅。PWA/资产/采购/视觉定向通过不能证明完整并发失败的唯一根因;原事务、审计、预算、并发和重试合同保持。项目视觉矩阵中的 `/system/*` 当前为字面地址,报告只支持实际 20 路由项;进一步展开/授权到达检查归 G18,不能拿该结果宣称全部系统页覆盖。完整发现的 wrapper 末尾临时 SHA 采集失败按告警原样保留,枚举及覆盖校验有效,但不是完整门禁回执。
|
||||
|
||||
G18 的 OCR 能力绑定、R108 当前移动夹具/输出隔离、矩阵真路由与角色到达,以及并发时序诊断先以最小合同细化;不恢复冻结业务或制定新产品视觉方案。WebKit 下载申请仍待答复,原“不联网安装”边界继续;12 live、冻结差旅、R1 启用和所有外部事实/操作分别处理。精确退出条件及六组余项见 implement 顶部。
|
||||
|
||||
## G16 后续完整门禁准备(2026-09-18 已批准执行,进度见 implement)
|
||||
|
||||
在本轮定向结果冻结后,先补WebKit运行环境;将已验证的单所有者合成改密前置接入普通full-local须保持其fail-fast、全部非manual发现、零重试、PWA输入和完整回执,不把retained-local改名作为完整门禁。四条当前排除观测须逐项登记旧流程退役或冻结处置及替代合同;冻结差旅不能当废弃代码擅删。原服务端场景8与经理缺口先查现行合同和可达性再确定最小修复,不默认放宽组织或审批规则。原AC7补同合成状态的管理身份正向对照与独立反例完整门禁。以上未执行,不据定向通过启用R1或取得发布资格。
|
||||
|
||||
G16 首次完整运行在旧直接付款成功预期处失败。最小补充为共享受管的 retained-server-local 固定套件选择、普通回归前 guest probe、forbid-only,以及直接付款按实际 batch-required 合同验拒绝与零写入;完整资格不接受该定向结果。具体失败和分支边界见 implement 顶部。
|
||||
|
||||
独立审阅与外部事实按本轮independent-and-external-readiness.json办理:当前QA和上批产品分别审阅;指定真实批次身份/企微结果仅在另批生产只读范围核;真实银行接受性另验;K1只有非秘密角色/渠道陈述时记REPORTED,K2须新的源/制品/字段/资源/注入清理绑定与独立批准。旧恢复不再运行。
|
||||
|
||||
real-cases-r6 两条付款主链与进度3/3通过,角色入口矩阵1失败:当前前后端hasFinanceRole均保留admin兼容入口。最后只将admin的AP/付款入口改为可见,补正式API批次复核403(显式经理/负责人角色守卫),继续保留admin非业务审批人和管理聚合审计入口验收。非本轮新权限决定。
|
||||
|
||||
## G13 第五轮与最终验收补件(2026-09-18)
|
||||
|
||||
real-cases-r5 为1通过/4失败,手机交互整例通过。财务审批实际同页已显示“通过”,测试误定位申请详情标识;应定位reimbursement-approval-processing-progress并检查completed/处理人/通过/无处理中。管理员审计入口位于管理聚合页;管理员正向入口与经理/财务负向权限必须分别检查。旧“非审批环节”视觉标签已无,改验正式workflow恰有2步与3个独立付款阶段,不删业务区分。
|
||||
|
||||
共享付款流程对照原例补回付款后字段只读、回单不可上传/作废、可下载、正式paid状态和付款/上传审计元数据。两条主链受共享辅助文件影响均需重验。r4在浏览器前为纠正文案主动中止:内层dropdb因代理退出失败,外层owner核验后容器/临时目录均移除,环境按INVALID/中断保留,无业务结果。
|
||||
|
||||
## G13 第三轮实测纠正(2026-09-18)
|
||||
|
||||
real-cases-r3 完整13条为8通过/5失败,零重试/跳过,环境清理和输入完整性PASS;PWA真实A/B同profile升级已通过。继续只补5个实际失败及共享辅助流程触达项。
|
||||
|
||||
正式小额报销由approval_rules的manager→finance动态投影,不采用seed日志中的通用workflow_definition一步CEO链。测试读取真实task/步骤ID,经理和财务依次UI审批,并检查财务通过后的同页进度,不改产品或seed。以下较早“一步审批”描述是已纠正的测试假设。
|
||||
|
||||
经理只有组织只读管理项,无主数据/银行账户;财务有组织、主数据、银行账户。两者管理写权限拒绝保留。手机发票添加成功后页面保留成功消息,须点“返回报销单”;不要求自动关闭。预览使用有效合成PDF,验证UI签名请求、弹窗和正式签名文件200/inline/PDF/原字节一致;headless原生PDF渲染不据about:blank判断通过或失败,也不宣称已验原生阅读器。
|
||||
|
||||
## G13 第二轮停点与定向补验(2026-09-18)
|
||||
|
||||
real-cases-r2 被信号中断,未生成完整 Playwright JSON;环境清理和源码/仓库完整性 PASS,不从过程日志补造用例 PASS。下一轮仍覆盖其全部 13 条选择,不把日志中的局部通过抵扣完整结果。
|
||||
|
||||
- PC/手机 OCR 完成后仅默认勾选,测试必须选择唯一既有合成明细,再明确点击添加;继续检查票据关联和明细数量,不能为旧“自动添加”标题恢复旧产品行为。
|
||||
- 管理聚合入口按当前子权限展示;经理/财务验证组织、主数据等只读入口,并验证账号、审批规则、流程定义、审计不可见,保留后端拒绝检查。
|
||||
- 项目 Portal 使用应用 Asia/Shanghai 日历日;合成跟进日期对齐该口径,增加正式保存请求和首页汇总检查,不删除跟进卡验收。
|
||||
- 手机请假使用现行完整企微说明,继续断言日常 OA 表单不存在。
|
||||
|
||||
两条保留报销付款主链路复用同一测试辅助流程,集中维护现行详情、一步审批和回单核销;各自保留原测试身份,主链路额外验证票据预览。合成企业/员工银行信息由正式API写入当前独占库,固定公开虚构账号,仅限受管loopback;不得读取真实资料。回单使用有效合成PDF及正式人工更正→独立复核,不注入paid状态、不关闭核验。
|
||||
|
||||
# G13/G15 首轮真实认证重验后的测试对齐方案
|
||||
|
||||
在 real-cases-r1 完成并核 sourceSnapshot 之前不修改输入。仅改已证实漂移的在用测试/共享页面对象,不改产品、种子审批定义或权限。
|
||||
|
||||
1. 公告:h1+exact 避免与真实创建的公告标题歧义;保持创建、团队状态和角色首页断言。
|
||||
2. 权限直连:退役 ERP 前端应显示404,后端各角色均404,不能继续验证ERP管理成功;经理付款读取/复核入口按当前权限保留,AP列表/台账/导出拒绝仍检查。移动审批退回按钮按当前标识断言无权角色不可见。
|
||||
3. 报销页面对象:使用当前独占详情workspace、明细/票据证据与操作面板,不恢复旧overview/summary组件。上传后验证明确票据ID出现在证据区及关联明细;草稿明细由测试显式填写,不能依赖已替代的空单自动建明细。
|
||||
4. 主链路:沿合成seed现有总经理一步审批、财务制单、非制单人独立复核、回单验证与核销;不更改seed为旧经理/财务链。保留发票预览、关联、付款状态、回单/付款审计、AP与票据归档,移除ERP成功分支与ERP开关。
|
||||
5. 其余首轮失败按实际停点区分定位漂移、无效历史合同、环境不足和产品问题;没有证据不提前改预期。原58身份和失败事实不可回写;当前替代验收逐条记录,不能以删断言/skip减少分母。
|
||||
|
||||
只重跑受影响失败用例和必要依赖;已经通过且输入未变的结果复用。WebKit缺失仍单列未验证;普通full-local、R1与独立review不据此关闭。
|
||||
|
||||
PWA首轮停在serviceWorker.ready:进一步核实际构建常量,若受管NODE_ENV=test让Vite输出DEV=true,则仅在构建子进程固定production,并保留应用服务test模式。必须以双构建真实SW升级重新验证,不注入手动注册或放宽超时。
|
||||
|
||||
# 部署门禁完整性设计草案
|
||||
|
||||
### G12执行细化:一次性合成账号与限定受管重验
|
||||
|
||||
复用`full-local-environment`的namespace、无外部路由、独占PG及owner清理,给`run-web-gates.sh`增加明确的`retained-local`诊断模式。必须显式提供本地spec清单;报告标注focused、normalReleaseEligible=false,不改变普通full-local的无筛选分母。限定模式不读取共享真实环境配置、不联网安装,不运行旧恢复。
|
||||
|
||||
本轮空库seed为8个现有合成角色注入运行内随机初始密码,仍must_change_password=true;由单一预置进程通过正式登录→验证改密要求→change-password→旧密码拒绝→新密码登录完成初始化。新密码沿当前用例已有公开合成fixture值,必须不同于本轮初始值;不是把已修改账号回改种子初始密码,也不通过SQL清标记。运行后销毁独占库,不把会话凭据写入证据。所有业务测试启动前初始化一次,不在并发login helper里写密码。
|
||||
|
||||
首次浏览器登录/改密页面另用合成用例验证;管理入口/业务前置差异逐项登记。页面mock与真实认证分开出具回执,历史观测身份映射保持。两个旧截图输出改为运行独占目录,旧冻结截图不动。
|
||||
|
||||
## 2026-09-17 历史观测到当前合同的分类方法
|
||||
|
||||
### 下一批环境前置与验收方案
|
||||
|
||||
58条分类后,本轮重验15条原观测;4条旧日常OA请假/冻结差旅不修,39条保留项尚未整例重验。39条按依赖排程:25登录前置、10页面/fixture、1合同详情只读、1已修AP整例、1WebKit报销离线、1PWA升级。是观测处置数,不是独立缺陷或开发工作量。
|
||||
|
||||
1. 登录合成生命周期:先核受管一次性DB的seed→首次登录→强制改密→再登录合同,保留must_change_password=true与生产禁止seed的守卫。设计运行独占的已改密合成账号集,集中向测试提供凭据;不得并发套件修改同一账号、回改初始密码、直接SQL清除改密标记或给业务测试注入生产会话。只在零外联、独占合成DB/服务来源核验通过后运行,失败时保留/change-password或/login的原因,不放宽/portal断言掩盖前置。
|
||||
2. 页面/fixture:当前待重验观测为6、14–16、22–24、38–39、51。先核witness合同与当前页面层级、付款默认视图、审批详情动作和固定安全提示;混合旧视觉样本不得恢复待精简模块或旧布局。每个保留业务断言先对应现合同,再用合成输入恢复;截图必须另根,不覆盖旧归档。涉及新视觉判断时遵照现行设计技能边界,不擅自改产品样式。
|
||||
3. 合同只读阶段B:在保留当前权限前提下从列表进入详情,继续证明新增/编辑/续约/归档不可用,并以隔离反例证明断言能发现泄露;不因旧“更多”定位移除后两项断言。原主合同阶段B完整反例门禁仍未完成。
|
||||
4. AP整例:已有09-07发布与路由/导出73项证据仅支持特定修复。登录前置就绪后原权限直连整例重验,经理仅付款复核职责仍拒绝AP全量读取,不把200作为新预期。
|
||||
5. WebKit与PWA:本地Chromium可用、WebKit执行文件缺失;不联网安装或用Chromium模拟通过代替WebKit结果。PWA保留真实生产构建与旧新版本/同profile/SW升级验收,当前只读静态mock服务器明确block SW,不能用其PASS抵扣PWA。先补环境合同,独立记录升级与清理结果。
|
||||
|
||||
本节为已批准后续工作的细化计划,尚未实施上述账号生命周期/未运行项;R1、完整发布资格和独立结论不随本地子集通过解禁。真实环境/凭据、生产/ARM、恢复、提交部署及借款保持原边界。
|
||||
|
||||
只读接回主checkout的managed-diagnostic-20260907-04/results/browser-failure-inventory.json及同次本地合成Playwright报告,核54失败/4超时、58条身份与原SHA。仅输出相对源码位置、失败层次、当前合同依据、在用性、最小下一步;不复制原始DOM/payload或完整机器路径,不读生产日志。逐例检查当前源码,前置失败不能证明后续业务断言有错;源码已有修复不能把旧结果直接改PASS。
|
||||
|
||||
R12当前断言要求未知VALID_001回显原message,与09-05安全错误合同冲突。保留共享resolver与禁止普通页面直接拼内部码/原异常的检查,将该例改为未知原因的固定安全兜底、合法requestId、已注册导入原因提示及未知原因不回显。无新增UI或权限行为;直接运行Playwright中的纯源码/函数用例,不启动浏览器、服务或DB。先保留当前失败,再验修后结果,输出目录独立、retries=0,不覆盖旧报告。
|
||||
|
||||
其他分组须先落实施边界,不能因有旧测试就恢复企微主办/待精简的OA业务,不能为变绿删掉权限或付款断言;涉及真实DB流程或环境前提的项先区分必要环境与业务证据,R1和公网发布资格保持未完成。
|
||||
|
||||
## 11. 归档截图保护与全仓回执增量(已批准)
|
||||
|
||||
- 先以独立副本和 SHA 保全四张本次运行截图,再仅恢复这四个 worktree 文件;保留全部 14 个已跟踪历史证据及其原登记摘要,不改 index。
|
||||
@@ -265,3 +440,27 @@ Correct:当前候选策略定义环境 → 受管 runner 创建并实测 →
|
||||
按 implement.md 的追加阶段,用 status_matches 集中四处状态判断;grep 直接读取 here-string,不使用 printf 生产者或提前退出模式。退出 0/1 分别代表匹配/不匹配,其余退出码立即停止。保留日志、SQL 查询、候选 allowlist、迁移和回滚判定顺序。
|
||||
|
||||
回归直接提取现有源码状态解析与未知迁移拒绝分支;注入真实观察到的 producer=141,并恢复旧谓词做负向变异。长输出与四处 matcher 工具错误单列;原多子进程远端 fixture 使用有界 15 秒测试预算,非生产超时修改。产品差异单独保存在 preflight-fix 工作树;与 seed 的组合验证只用一次性本地测试副本,不能称为已集成或新发布候选。
|
||||
|
||||
## 2026-09-18 G20 第四轮终态与续修
|
||||
|
||||
g20-full-r4 FAIL,5768.636秒;static239.024秒PASS,内部11阶段PASS;后端4367通过/1原条件跳过,8组启用服务回归通过/7组原关闭不计通过;浏览器351项=342通过/5失败/3超时/1串行后继未执行,零重试。环境、source/repository未变和owner清理PASS。资产及账号创建两处P2028由09-18-local-concurrency-product-fixes接最小修复;当前不是全量通过。
|
||||
|
||||
QA续修保持原分母、预算、并发和断言:DG7确认停在登录输入框,改为自动等待既定账号入口;R92导航后回登录,user-onboarding提交改密后失去会话,核路由mock与SW/refresh会话边界;PA6确认第7次角色登录耗尽180秒,同角色PC/移动复用一次独立会话,保留全部角色/入口/管理菜单/API403;全页面180秒只到9/33页,利用真实应用导航减少重复装载,保留25PC+8移动/14系统页、目标文档HTTP、实际URL/标题及全部视觉/错误断言。报销付款整链300秒超时但无精确动作栈,先增加安全阶段诊断和查实际停点,不先猜产品根因或放宽预算。R75后继跳过随原整文件重验,不能当通过。
|
||||
|
||||
顺序:产品边界红/绿与相关回归→各在用QA夹具/冗余前置修复→原完整文件定向验证→冻结输入、从static开始新完整候选。定向通过不拼接旧完整结果,主会话检查不抵扣独立PENDING。原失败、322项旧差异及29目录9762旧文件保护不变。
|
||||
## 2026-09-18 两项阻塞接续:阶段诊断
|
||||
|
||||
诊断原33路由180秒用例已走完PC,进入移动报销列表时耗尽预算;阶段合计导航34.355秒、到达29.535秒、安静窗口26.177秒、固定额外等待8.327秒、截图45.074秒。原expect.poll默认间隔使已满足500ms安静窗口的普通页约858—894ms后才继续,其后还固定再等300ms。最小QA调整:安静条件仍是全部本次HTTP请求settled且连续500ms,poll间隔改50/100ms精确采样;删除该条件之后重复的300ms固定等待,截图仍用原Playwright字体/布局就绪与完整截图,不改动画、画面、HTTP/权限/视觉断言或33页/180秒/并发。保留阶段日志检查实际耗时,正式运行无诊断预载。该优化本身不宣称全部负载都能在预算内完成。
|
||||
|
||||
用户同意按报销提交→全页面→新完整验收推进。本轮在原全页面auditPage增加安全阶段耗时:导航(含目标文档)、到达、请求安静窗口、原等待、截图、DOM指标,另在navigateForAudit细分链接查找/管理页转场/文档请求/点击。仅记录已脱敏路由、阶段和耗时,不改变任何页面、断言、预算或并发。与P9的原R75整文件在同一受管合成环境诊断一次;产品源码保持原输入。诊断预载仅归本轮ignored artifacts,独占owner/namespace/无外联核验后才启用,之后正式验证不带预载。
|
||||
## 已批准:全页面巡检按角色与终端分组(2026-09-18 实施)
|
||||
|
||||
p9-fixed-r3的三个完整文件11项10通过/1视觉超时,607.746秒;环境/输入/owner清理PASS、零重试、服务端1347响应/0未处理异常。R75四项和付款主链281.132秒均通过;视觉180秒仅完成15页,其导航38.002秒、到达34.353秒、安静窗口16.069秒、截图45.634秒。前轮较少并行工作下走完PC进入移动仍超时,说明已移除的重复等待不足以解决这个把33页面串在单一用例中的累计预算问题;不能把它归为某个产品链接错误。
|
||||
|
||||
建议将现有矩阵按既有角色与终端拆为7组(PC匿名/员工/财务/经理/管理员,移动员工/经理),每组仍180秒及原expect预算/零重试,浏览器配置workers不变。共用本文件的合成动态路由准备并单列耗时;每组独立真实会话、不共享refresh令牌,保持原逐页HTTP/准确到达/无403或404/请求安静500ms/截图/DOM视觉与文案检查。没有删页面、降低图像质量、禁用动画或修改产品样式。
|
||||
|
||||
全套报告必须校验计划25PC+8移动与实际33条唯一路由/终端/角色完全对应,重复、缺失、未到达、失败或跳过任一组都不能放行;保留现有5条到达正反例。普通门禁重新发现这组用例身份,仍将所有分组作为同一固定候选、同一完整运行的必跑项,不合并历史定向结果。另加本地覆盖漏项/重复/失败反例,防止拆组后局部绿。
|
||||
|
||||
用户已明确批准本节分层预算:全部33页按7组、每组180秒,同一完整运行全部必过。该批准覆盖旧累计180秒约束,不改变其他测试预算、workers、零重试或页面断言。
|
||||
|
||||
实现约束:7个原生测试放在同一serial组,仅本文件保持原逐页顺序,不改变全局并发;beforeAll一次准备动态路由并独立记录耗时。每组页数分别1/7/1/1/15/7/1,启动时对照矩阵校验;每页完成截图与全部DOM检查后才登记完成。afterEach记录真实测试终态,afterAll校验计划/完成精确集合及全部组passed;失败的后继组保留pending,不由后续到达反例写回PASS。新增纯覆盖正反例随原5条到达测试一起运行。整体门禁重新发现真实身份/分母,不合并历史轮次。
|
||||
|
||||
@@ -1,5 +1,602 @@
|
||||
## 2026-09-19 用户已授权主会话执行两笔本地提交(最新)
|
||||
|
||||
用户明确要求“提交就你来提交吧,不用发给claude了”。主会话接管最终分组及本地提交,之前Claude打包请求不再等待执行;授权限本地提交,不含推送、R1启用、部署、生产编号或真实业务动作。
|
||||
|
||||
提交前核对当前392个路径与只读盘点清单一致、暂存区空;建立本地分支codex/20260919-reviewed-candidate保存原detached工作树候选。按两组提交:纯Trellis升级/知识精简及其任务记录;其余关联业务、测试/QA、业务规约及任务记录。两份有效JSONL与Python测试夹具纳入,22项原删除保留;artifacts及个人日志不纳入。完整路径/摘要、实际提交SHA和收尾状态记入artifacts/qa-governance/local-commits-20260919,不覆盖旧回执。
|
||||
|
||||
首笔治理提交已完成:729d9057(25文件);其余367个文件由本次集成提交保存。提交完整SHA和最终干净状态以本轮result.json为准。
|
||||
|
||||
本轮不重跑测试,只核对提交范围、内容摘要及差异格式。928项独立验证与历史4446/28等结果保持各自输入归属;提交不会把原FAIL/130变成PASS。B1完整新候选门禁、B2 R1接入及B3部署后公网义务仍开放,提交完成不代表发布资格或整个发布任务完成。
|
||||
|
||||
## 2026-09-19 发布准备盘点已接回:提交分组决策(已确定)
|
||||
|
||||
已核Claude的release-preparation-claude-20260919T050016Z报告与清单。392条为该盘点时点;B1当前候选完整门禁未通过、B2真实发布R1未接入、B3部署后12项公网未验,分别保留对应边界;预算补丁不再是阻塞。当前未授权提交/推送、R1启用或部署。
|
||||
|
||||
主会话决定:两份JSONL都有真实有效引用(implement2条/check1条),随所属任务纳入;deployment-command-client.py为现有生命周期测试直接依赖的Python3标准库夹具,跟测试纳入,不作为生产/BIFF8依赖;提交计划从10笔改为2笔(纯Trellis治理及记录;其余关联业务/测试/QA/规约及记录),混合文件整体归后者,不拆共享文件hunk。原删除分项应为7源码+14ERP测试+1旧e2e=22,原证据不改写。
|
||||
|
||||
Claude下一步只生成最终两组精确路径/SHA/中文说明与唯一覆盖核对,不执行提交或测试。交接:artifacts/qa-governance/release-commit-packaging-claude-request-20260919.md。待范围明确且相应授权到位后安排执行;R1源码变更先于最终候选完整验收,避免先全量再改候选。用户要求机械执行/测试交Claude,主会话负责取舍与接收。
|
||||
|
||||
## 2026-09-19 下一步分工:Claude整理发布准备包(交接记录)
|
||||
|
||||
用户要求机械执行交Claude,主会话负责范围/风险/验收决策。预算本地修复及独立复核已完成;先让Claude限定只读整理拟提交文件与任务归属、当前候选证据关联、R1接入及12公网/编号启用的既有前置项,不重新审已通过的预算补丁,不运行测试。
|
||||
|
||||
交接:artifacts/qa-governance/release-preparation-claude-request-20260919.md。此时为HANDOFF_READY,尚未收到执行结果。产出具体提交/发布准备清单后再处理决策和已有授权边界;不提前跑另一轮全量,不视本计划为提交/推送/部署/生产编号启用授权。只新增ignored报告与机器文件清单,Claude不改源码、任务或原证据。
|
||||
|
||||
## 2026-09-19 预算补丁独立复核与定向测试完成(已完成阶段)
|
||||
|
||||
Claude已执行两份限定测试:2文件928项通过、0跳过、exit0;主会话核对报告、原始日志及补丁before/after各10份SHA一致。差旅选择口径与原因码夹具两项必修均关闭,预算补丁状态LOCAL_VERIFIED_INDEPENDENT_REVIEWED,无需重复相同测试或补审。
|
||||
|
||||
预算任务B7完成,B6发布完整门禁延期不补勾;累计其他业务未读范围与外部义务不因此变成整体PASS。旧预算候选原始FAIL/exit130、旧4446/28及中止浏览器日志保持原输入归属;deploymentEligible=false,无提交推送部署。证据:artifacts/qa-governance/budget-pool-concurrency-20260919/review-fixes-20260919/claude-result-reception.json。本次仅回填任务记录。
|
||||
|
||||
## 2026-09-19 预算独立补审两项修正已落地,测试交 Claude(交接时点)
|
||||
|
||||
budget-pool-claude-review-20260919T043257Z.txt 已接回:锁/事务/完整性等分项PASS,两项必修。主会话已恢复差旅submit原预算上下文(移除新增departmentId),加强精确上下文及部门/全局并存测试;新增budget.pool_changed固定夹具,并补全部用户原因码的注册→夹具完整性断言。不是预算政策调整,不碰历史数据。
|
||||
|
||||
按用户明确分工,修复后仅两份定向测试交Claude执行;主会话不继续测试、不重跑全量/浏览器。修正前新增断言红例4失败/923通过,修正后尚未运行,独立通过待确认。证据与精确命令:artifacts/qa-governance/budget-pool-concurrency-20260919/review-fixes-20260919/claude-test-request.md。原4446及原30文件审查对应修正前输入,原包/回执不改写;当前整树无发布资格。
|
||||
|
||||
## 2026-09-19 预算修复本地验证完成;重复全量浏览器已中止(首批本地验证记录)
|
||||
|
||||
用户明确指出本轮后端预算修复后重复全量浏览器过于浪费,主会话据此停止 budget-full-r1 剩余浏览器并清理受管环境。已完成的后端225文件4446项通过/1原条件跳过、8个启用服务回归组、审批动作、Prisma及前端typecheck/build保留;针对性真实PG28项与单测526项结果保留,不再重复。实际接口/事务覆盖已足够支持本补丁本地结论,没有追加浏览器运行。
|
||||
|
||||
浏览器29通过/4中断/339未运行,零重试;原始整轮FAIL/exit130,localChecksPassed=false,不能称完整本地通过。环境PASS、source/repository不变、owner容器/scratch清理完成。发布前完整门禁、33页/7组及12公网义务仍保留,待准备发布时集中执行,不以旧r6抵扣。
|
||||
|
||||
修复状态LOCAL_VERIFIED_REVIEW_PENDING,实际补丁Claude只读复核待回。新增证据及交审请求:artifacts/qa-governance/budget-pool-concurrency-20260919。后续任务记录/证据变化不触发业务全量重跑。无提交推送部署或真实外部动作。
|
||||
|
||||
## 2026-09-19 预算并发补丁定向验证完成,待新完整候选(运行前记录)
|
||||
|
||||
用户明确批准 09-19-budget-pool-concurrency 方案。已统一报销/采购/冻结差旅的池锁与锁后预算判断,处理授权→预算锁序及 Decimal 额度边界;真实隔离 PG 28/28、受影响单测 33 文件 526 项通过。证据:artifacts/qa-governance/budget-pool-concurrency-20260919。独立发现仍保留原 FAIL,修复状态为 TARGETED_LOCAL_VERIFIED_FULL_GATE_PENDING,实际补丁的独立审查未通过前不关闭 finding。
|
||||
|
||||
现冻结新候选,从 static 完整重验;旧 g20-full-r6 的 4437/372 仅代表历史输入,不能抵扣当前代码。保留全部分层验收、33页/7组、并发、预算和零重试。浏览器用已有缓存的独占物理副本,无下载。旧 registry 保护例外与 CSV NOT_RUN 不改写;无提交推送部署或公网/生产/真实业务动作。
|
||||
|
||||
## 2026-09-19 业务定向补审已接回:预算并发缺陷待修(接收时点,历史)
|
||||
|
||||
已读取 `artifacts/qa-governance/business-followup-claude-review-20260919T023537Z.txt` 全文(9566字节)。b1rubx7qf 已完成,不再记为“审阅仍在跑”;本报告是只读源码/既有测试文件核对,没有新运行时测试。
|
||||
|
||||
- P9 feeControl 合并读取:PASS;报销已审写路径锁序及 submit 事务内重验:PASS;不据此宣称 workflow snapshot 内部及所有撤回/付款/关联分支均已逐行覆盖。
|
||||
- 预算池并发:FAIL,主会话源码核对确认。报销提交、purchaseBudget 占用/释放及 travelPayments 增减共四处先无锁读、后写绝对 used_amount;这些计数片段与 HEAD 旧实现相同,不归因为 P9 新增。独立任务 `.trellis/tasks/09-19-budget-pool-concurrency/` 已落 PRD/design/implement,仅 planning,实施待批准;问题尚未修复。采购权威预检当前在事务外,是同一修复必须覆盖的陈旧判断路径。
|
||||
- K0 加解密合成合同:独立静态 PASS。主会话另核冻结 manifest、6件文件以及当前3个代码/测试输入一致;不归为 reviewer 重算或真实恢复验证。脱敏不在合同内、通知密钥迁移脚本不在 K0/K1/K2 默认执行范围,澄清见 08-23 最新三份任务文档。
|
||||
- 累计业务独立复核为 PARTIAL_WITH_BLOCKING_FINDING;不是整体 PASS。未读的 workflow snapshot、部分路由业务分支及其余 crypto 消费者仍按实际风险列项,不要求无目的重审整个仓库。
|
||||
|
||||
本轮只完成报告接收、原有任务回填、K0 范围澄清和新修复规划;不改产品/测试,不重跑旧4437/372或恢复,不改旧失败/冻结包。旧 r6 的历史通过记录保留,但当前已知预算缺陷单列为发布前待修;deploymentEligible=false,12项公网、生产编号、真实银行接受性和K1/K2仍保持原边界。新增证据:artifacts/qa-governance/business-followup-reception-20260919。
|
||||
|
||||
## 2026-09-19 Claude 累计业务审阅接收(部分覆盖,历史)
|
||||
|
||||
用户提供 Claude 独立只读报告,称借款核心资金路径、编号关键路径、付款责任/通知事实投影和 ERP 删除引用检查无阻断发现;PWA/采购仅部分覆盖。借款页面为抽读,费用控制与报销并发段未逐段审完,K0 合同未补读。因此累计业务独立复核记 PARTIAL,不把“有条件通过”当作完整 PASS;原 4437/372 验收不重复运行。
|
||||
|
||||
主会话核对意见后的处置:
|
||||
|
||||
1. 银行客户序号形态改变属生产编号启用前的外部接受性待验项,保留明确确认义务;本地长度/字符集通过不证明银行接受,不因此改旧编号或材料。
|
||||
2. eligibleLoanReviewers 返回单人用于新申请通知接收人,不是唯一审批人绑定。paymentResponsibility 读取时按当前资格列全部可复核人;review 路由重验当前操作者,不要求其在旧通知名单中。故“离职后被指派而无法改由其他人复核”的缺陷未成立;人员变化后的主动补提醒未验证,不擅自增加全员通知或新转派机制。
|
||||
3. PURCHASE_REQUEST_SUBMITTED 的事务外 audit 与当前 HEAD 原代码逐字一致;有 catch + fastify.log.error,不能称静默丢失。审计失败不回滚业务是既有风险,本轮不扩大为事务语义变更或旧代码修复。
|
||||
4. 1076 个业务输入与 r6 相同表示该快照之后代码未漂移,不代表它们相对 HEAD 干净;整树 dirty 包括已存在于 r6 的未提交业务改动,不能归因于仅任务/文档/artifacts。
|
||||
|
||||
下一轮 Claude 定向补审:feeControl.js 预算/标准口径;reimbursements.js 并发、锁序、事务内判定/审计;08-23 K0 合同与本地检查覆盖。先补这三项明确缺口,再按实际覆盖确认是否还有未读消费者/页面/迁移。主会话核对不抵扣独立复核;发布 R1、12 项公网、编号启用和真实业务证据继续保持原授权边界。
|
||||
|
||||
Trellis 0.6.17 的独立 PASS 单列于 09-05 任务,不移用为业务 PASS。反馈核对证据见 artifacts/qa-governance/trellis-0617-review-followup-20260919;未改业务代码或原始交审包。
|
||||
|
||||
## 2026-09-19 独立核实反馈已确认(限数量与证据归属)
|
||||
|
||||
用户后续独立核实并确认:r6后端4437通过/1原条件跳过,旧4428来自P10之前;UTC/北京时间换算、阶段先后和累计diff基线争议已闭合。用户另报告当前purchase-request.errors.test.js复跑75 passed、EXIT=0、SHA为2b9ec41d…;此项按用户提供的复核结果登记,不冒称主会话新跑或已取得该次原始日志。
|
||||
|
||||
用户同时确认33页/7组、372/372浏览器零跳过/零重试,以及386=372本地+12公网+2冻结与证据一致。此次独立核实范围为测试数量、时序和证据归属;当前累计业务实现的完整独立只读review仍PENDING。
|
||||
|
||||
发布边界保持:dirty、运行后task记录变动,deploymentEligible=false、currentTreeCoveredByOldReceipt=false、productionNumberingActivated=false。旧WebKit派生registry baseline FAIL与历史CSV校验工具NOT_RUN两条例外保留,无新增漂移。原始回执及增量包不改写,详细SHA核对仍见review-provenance-20260919.json。本次仅更新任务记录。
|
||||
|
||||
## 2026-09-19 外部审查反馈:运行归属与差分基线核对
|
||||
|
||||
用户提供的审查正确指出历史backend-full-result.json记4428、r6记4437及当前整树无发布资格;但“同一候选、r6后又改产品测试”的推断不成立。以下统一北京时间(UTC+08:00),以原始阶段时间和内容SHA为依据,不以dirty/untracked或diff生成mtime推断改动时点。
|
||||
|
||||
1. 旧独立全量日志Start at为23:52:35,结束文件mtime为09-19 00:01:32,537.01秒,4428通过/1原跳过,采购错误测试66项。旧644输入摘要与r6相比恰好两处变化:purchaseRequests.js和purchase-request.errors.test.js,属于之后的P10修复,不能当作同一候选。
|
||||
2. 采购测试最后修改为09-19 01:55:08;r6回执startedAt为09-18T18:25:05.724Z,即09-19 02:25:05。其server-unit阶段为09-19 02:32:17—02:40:55,晚于该修改,4437通过/1原跳过、采购错误测试75项。9项差值是P10新增边界用例。
|
||||
3. 争议测试的旧SHA为c681dc09…;r6环境回执sourceBefore、sourceAfter、r6收口输入清单和当前均为2b9ec41d…(完整SHA见机器回执)。环境证据SHA与原release-result引用一致。当前1162条产品/测试/QA/spec快照(含22条原删除项)与r6前后摘要相同,新增/缺失/改变均0;1076个收口代码输入也无变化。untracked已被正式快照的--others覆盖。
|
||||
4. final-incremental-review.diff在03:58生成,但其基线由build-final-review.py明确为本轮开始prior-files快照,未在其中的文件使用HEAD/新文件基线;不是r6结束后的差异。25文件中10个产品/测试文件及2个spec的最终SHA全部已包含于r6开始前。当前已跟踪的运行后差异仅5个task记录,原“task-only closeout records”与产品摘要不矛盾;新增task记录与完整工作树发布资格仍须分列。
|
||||
|
||||
对外准确口径:**r6冻结代码后端4437项通过、浏览器372/372;当前相关代码输入与该运行一致。当前整树含后续task记录且仍dirty,不具有发布资格。** 不用旧4428覆盖较新的4437,也不将dirty等同于受测代码漂移。此前摘要应更明确标注r6身份、时区与差分基线;本次补充说明,不重跑未变化的全套、不改产品/测试或任何原始证据。
|
||||
|
||||
独占核对回执:artifacts/qa-layout/submit-visual-closeout-20260918/review-provenance-20260919.json,保存UTC/北京时间、输入对照、12项非task增量与r6摘要、原证据SHA。原final-review-candidate、final-incremental-review.diff和两轮后端结果全部保留。已收到用户转述的局部独立审查,完整独立review仍PENDING;本次只更新本task核对记录,无提交推送部署或生产读取。
|
||||
|
||||
## 2026-09-19 本地完整验收通过(当前入口)
|
||||
|
||||
g20-full-r6从static开始完成同一冻结候选的普通完整运行:总5128.987秒,static226.728秒PASS、full-local4895.264秒PASS,内部12阶段全部PASS。后端224文件4437通过/1原条件跳过;8启用服务组通过,7原关闭组不计通过。发现386=372本地+12公网+2冻结,372浏览器全部通过,零失败/跳过/重试。环境/source/repository/owner容器与scratch清理PASS。
|
||||
|
||||
33页与33PNG完整,7组全过、覆盖问题/findings为空;管理员组177.291秒,接近原180秒上限,只证明本轮实测。采购主链125.161秒;付款helper业务步骤264.491秒,原始Playwright整例记录373.383秒(含前后开销;未独立拆分该差额),保留原300秒用例设置与全部断言,不将两种计时混写。R75四项、新旧BX/PB消费者、PWA更新、WebKit离线与冻结保护都纳入本轮372项。
|
||||
|
||||
回执PARTIAL/exit2,localChecksPassed=true、deploymentEligible=false,唯一资格问题dirty_candidate;不是公网或完整发布通过。同环境离线verify仍PARTIAL且372项/10个witness通过;首次误用CI=1的检查wrapper被正确拒绝(候选CI未设置、4 workers),原拒绝保留,未修改验证器或候选来掩盖。
|
||||
|
||||
旧材料仍有已披露的一处WebKit派生registry字节变化,原保护FAIL保留,原baseline未改;r6没有新增漂移,其余12137旧文件、HEAD/index和352旧差异快照保持。后续WebKit用本轮物理独占副本。原字节尚未找到,不伪造恢复或将保护写为全PASS。
|
||||
|
||||
本次完整回执绑定运行时冻结输入;结束后只补task的状态、验收与后续规划记录,不改已验产品/测试代码。后续文档摘要与运行时不同,旧回执不冒充更新后整树的发布证明。独立只读review受inline限制保持PENDING,无提交推送部署/归档、生产编号启用或真实操作。证据根:artifacts/qa-layout/submit-visual-closeout-20260918,入口g20-full-r6.summary.json、g20-full-r6-highlights.json及r6-offline-verification-matching-env.json。
|
||||
|
||||
G20a/b/c/d本地实现和验证完成;G20e的本地记录/交审包完成,独立复核、R1真实强制消费及外部授权仍开放。最终增量入口final-review-candidate.json、final-incremental-review.diff、final-checks.json。
|
||||
|
||||
### 已完成与剩余
|
||||
|
||||
- [x] 本地在用修复、7组视觉实现、定向31/31及新完整候选372/372;编号N5的本地兼容验收完成。
|
||||
- [x] P6/P7/P9/P10产品边界与各原整链、P8完整负载验证完成;保护异常和独立复核单列,不将二者勾选为通过。
|
||||
- [x] 本轮状态/增量只读交审包与治理收口;现行process/docs/Trellis/sensitive及task/diff检查通过,22个原未登记文档提示保留。历史CSV校验脚本缺失,替代路径检索无结果,本轮未改CSV,该项记NOT_RUN而非PASS;不扩大为旧工具修复、提交或归档。
|
||||
- [ ] 独立只读复核:覆盖当前累计候选及本轮增量,主会话检查不得抵扣。
|
||||
- [ ] R1真实发布入口强制消费、干净候选提交/完整重验及部署:按现有design另获明确授权;部署后同候选12项公网义务全部完成才可宣布公网可测。
|
||||
- [ ] 编号生产只读摘要、启用日期及启用:另获批准,旧号/旧草稿/银行引用保持;线上策略仍未开启。
|
||||
- [ ] 真实银行接受性、指定范围外的当前处理人/企微个人送达事实、K1保管/K2新绑定及自然业务证据:按各原task分别授权;旧恢复不重跑。
|
||||
- [ ] 旧WebKit派生索引保护异常:只可用SHA匹配的原字节恢复,或保留明确例外;不扩读真实备份、不重签原冻结包。
|
||||
|
||||
下方均为历史阶段记录,未勾选的旧阶段条目不覆盖本段实测状态;任务整体保持in_progress。
|
||||
|
||||
## 2026-09-19 四文件定向通过,接完整候选r6(当前入口)
|
||||
|
||||
r5-fixed-r2四完整文件31/31通过,浏览器约5.5分钟、受管总571.747秒,零跳过/重试;采购整链、R75四项、付款提交至归档全链及视觉25项通过。付款约244.773秒,保持300秒;视觉7组各180秒、25PC+8手机/33PNG全部完成、覆盖问题与findings为空。环境/source/repository/owner清理PASS。原r5完整FAIL与r5-fixed-r1登录跳转失败均保留,不拼接为完整通过。
|
||||
|
||||
P10采购提交后读取边界167/167及QA专用类型已通过;登录仅在无query/hash的规范/login复用,保留原表单/portal/profile断言。下一g20-full-r6从static开始普通完整候选,全部源码/测试/task/spec/docs冻结,只写本轮ignored证据;N5/G20及产品完整负载验收仍待终态,独立PENDING、生产编号未启用。
|
||||
|
||||
旧WebKit派生registry保护异常保留,原baseline不改;后续运行使用本轮独立WebKit副本,不下载或安装。禁止将一处已知漂移描述为全部旧材料零变化;无提交推送部署或真实操作。
|
||||
|
||||
## 2026-09-19 r5-fixed-r1结果及最小边界修正
|
||||
|
||||
四完整文件31项30通过/1失败,585.544秒;采购主链、R75四项、视觉25项通过,零重试/跳过,环境/输入/owner清理PASS。付款新复用逻辑保留了/login?redirect的返回目标,与原portal断言冲突;按design仅复用无query/hash的规范登录页,带返回目标仍用原goto清除。边界修正后的专用类型检查及diff检查通过;下一r5-fixed-r2相同四文件复验,全部受管输入冻结;未开始新的完整候选,不拼接定向结果。
|
||||
|
||||
## 2026-09-19 当前入口:r5终态与三项续修
|
||||
|
||||
完整候选FAIL:5916.547秒,static247.910秒PASS,内部11前置阶段通过;后端4428通过/1原跳过,8启用服务回归通过。发现386=372本地+12公网+2冻结;浏览器367通过/1失败/2超时/2串行未执行,零重试。环境/source/repository/owner清理PASS。
|
||||
|
||||
- [x] 09-18产品P10采购PATCH响应读取最小修复与边界回归;五文件167/167通过,原实现4条红例保留。
|
||||
- [x] 视觉独立检查/RPC冗余、付款同角色重复登录与独立只读检查优化已实施;专用tsc通过,原7组及所有预算/断言/worker保持,浏览器尚待验证。
|
||||
- [ ] r5-fixed-r1执行采购、视觉、R75和付款四个原完整文件定向;通过后从static完整新候选,不拼接r5通过结果。运行期间全部受管输入冻结。
|
||||
- [ ] 治理、保护异常、最新候选和独立PENDING交接;生产未启用。
|
||||
|
||||
R75四项、新旧BX/PB和合同只读实际页面正反例已在本轮完整负载通过。全页面仍INCOMPLETE:24/33、管理员14/15,手机后继未执行;付款执行及下游未在300秒内完成。保护检查只有旧WebKit派生registry自动改写,原FAIL与字节副本留存,原baseline不改;业务冻结材料与HEAD/index保持。详情及不变量见design顶部。
|
||||
|
||||
## 2026-09-19 当前执行入口:7组定向通过,进入完整候选
|
||||
|
||||
用户明确批准:33页拆为7组、各180秒,保留原断言/截图/并发/零重试,同一完整运行全部必过,增加缺页/重复/失败组拒绝。后续按本段执行,下面旧180秒累计约束为历史记录。
|
||||
|
||||
- [x] 实施7组原生测试、一次合成准备、完整审完记录及精确覆盖校验,保留5条到达正反例。
|
||||
- [x] 专用类型检查、覆盖13/13及视觉整文件25/25通过,33页/33截图精确齐全。
|
||||
- [ ] 冻结输入,从static开始执行普通完整候选;真实发现分母,不拼接定向结果。
|
||||
- [ ] 协调P9/N5/G20、治理/旧材料保护与候选交接;独立PENDING,生产未启用。
|
||||
|
||||
本轮完整后端回归已通过:224文件4428项通过、1原条件跳过,537.01秒;server/src、server/tests、server/prisma及scripts/qa共644输入结束后校验零变化;P9原R75及报销付款整链已在p9-fixed-r3通过,原视觉超时仍保留。
|
||||
|
||||
grouped-visual-r1完整文件25/25通过(7真实组+13覆盖正反例+5原到达用例),浏览器91.788秒、受管总352.799秒;25PC+8移动全部审完,33PNG、findings为空、覆盖问题为空,环境/输入/owner清理PASS,零跳过/重试。旧34目录12138文件零增删改,HEAD/index未变。接下来g20-full-r5从static执行普通完整候选,源码/测试/task/spec/docs全冻结,只写本轮ignored证据;本地结果不抵扣独立或公网义务。
|
||||
|
||||
## 2026-09-18 编号消费者最终回执与G20余额
|
||||
|
||||
numbering-consumer-final已结束:报销新旧号PC/手机列表、搜索、详情1/1通过(17.756秒),受管总耗时268.462秒;source/repository/candidate不变、owner容器及scratch清理PASS,零重试。付款新旧号消费者最终版本保留browser-r3通过(18.517秒)。付款列表/详情自然排序完整单测129/129通过(15.66秒);五个相关浏览器文件专用类型检查通过。最终六个测试源码摘要在final-code-inputs.json,后续文档收口不变更测试输入。
|
||||
|
||||
本轮已解决DG7/R3重复登录前置、直连正例未等认证页面就绪、视觉文档缺Accept:text/html、旧员工差旅允许预期及新增编号测试定位/枚举问题。DG7七宽度、五角色权限整文件、编号消费者和真实合成付款链分别取得通过证据;这些结果属于各自输入和选择集合,不能相加成普通完整通过。此前AUTH_004及全部失败记录保留,browser-r2五角色观测无重放事件不等于排除全部认证风险。
|
||||
|
||||
剩余本地工作按以下顺序,方案已有部分沿用,新增部分先补design再改代码:
|
||||
|
||||
1. 全页面巡检:按已落盘阶段采样继续分离实际导航/装载/API/截图耗时;33路由、原180秒及原并发/零重试保持。当前13/33仅是到达进度,findings为空不代表矩阵通过。
|
||||
2. P9报销提交:在09-18-local-concurrency-product-fixes核清P2028边界,先定稿最小方案与确定性回归,再优化;不将出现时点当作编号根因,不直接提高事务超时。之后重验R75原整文件及两个后继。
|
||||
3. 两项定向通过后冻结完整输入,从static开始执行普通full-local,发现集合须纳入两条新增编号用例;不能沿用旧351分母或拼接本轮绿灯。
|
||||
4. 完整结果和独立只读复核分列;生产摘要/启用、真实R1、提交推送部署及同候选12条公网义务按原授权边界办理。
|
||||
|
||||
本次增量审阅包保持normalReleaseEligible=false、独立PENDING;旧候选、失败和冻结证据不覆盖。不因编号专项通过关闭N5、G20或归档task。
|
||||
|
||||
## 2026-09-18 browser-r3 收口与编号最终小修
|
||||
|
||||
四文件51项49通过、1失败、1超时,673.807秒,零重试/零skip;环境、输入、owner清理PASS。R3五角色与员工可用页面/冻结差旅拒绝整文件通过;付款编号混合来源整例再次通过。新BX消费者已通过PC两种号码及移动旧号可见,最后错误为测试把移动标题div当heading;合成失败截图清楚保留原号,产品没有丢编号。按实际组件将移动号定位到既有header内精确文本,PC仍验证精确h1,再仅重验此变动用例。
|
||||
|
||||
全页面仍180秒超时,13/33到达,停在管理首页转主数据链接;逐截图时间保留(首PC登录页后到门户22.43秒、普通页面约6—11秒、角色首屏约16—24秒)。没有证据将其写成单个链接缺陷或提升预算。后续需逐阶段采样区分真实点击/装载/API/截图成本并保留全部33页;普通完整G20仍待该项及P9报销提交事务修复,不盲重跑。
|
||||
|
||||
编号服务端列表/详情原自然排序回归保留原3条旧号与同号ID次序,增加月号0002/0010/10000,验证混排精确ID/号码/金额对应及原数组零改写、读取零写入/审计。只扩测试,无产品源码变化;运行完整付款路由单测。此前编号完整后端/PG及browser-r2付款整链按原输入记录,不改写成此时的新完整候选。
|
||||
|
||||
## 2026-09-18 browser-r2 终态与分组续修
|
||||
|
||||
64项为58通过、3失败、1超时、2串行后继跳过,1004.412秒;环境/source/repository/owner清理PASS,零重试。报销审批→财务原地进度→付款复核/执行→回单→核销/AP整链通过(254.846秒);付款新旧编号/混合来源浏览器消费者通过(60.191秒)。整个观测窗口五合成角色tokenVersion均保持1,未记录REFRESH_REUSE_DETECTED;不声称已排除所有认证风险。
|
||||
|
||||
最小QA续修已规划:员工旧允许列表里的差旅与已批准冻结合同冲突,改明确拒绝该原路径,保留票据/合同可用正例;新BX详情断言接实际PC标题“报销单 <编号>”与移动标题原号;付款合成fixture nextStep改为真实first_review枚举。全页面已超越原9页但仍180秒超时;改用已有正式认证storage-state helper为每个角色/视口分别取得独立真实会话,直接到首个矩阵页面,保留匿名登录页UI与全部33路由、文档HTTP/到达/403/404/截图/视觉断言,不共享refresh cookie、不伪造登录或放宽预算。先类型检查,再四受影响整文件定向复验;付款整链源码未变可保留本轮结果,定向仍不冒充新完整候选。
|
||||
|
||||
另发现R75通知的报销提交500:真实server输出为P2028,原5000ms事务在5412ms后的workflowHistory.create失败(reimbursements提交事务),不是AUTH_004。只读提取安全code/时间/源码位置,不复制原payload。本轮编号客户端验收不扩大为调整审批事务/预算;按既有09-18-local-concurrency-product-fixes接独立最小方案:确认新取号是否参与此已编号提交、锁等待与事务内重复查询/CPU边界,保留失败,用确定性回归证明再优化,并保持原权限/审批/审计/预算。新完整G20必须等其修复及R75整文件通过后,从static重跑,不能盲重跑或用付款整链绿抵扣。
|
||||
|
||||
## 2026-09-18 本轮 browser-r1 结果及证据续修
|
||||
|
||||
八文件34项:29通过、1超时、2失败、2串行后继跳过,零重试,698.271秒。DG7七宽度、R3五角色原失败整例通过;全页面文档404已消失但仍超时,9/33已到达且最后在登录页。R75通知和付款主链均AUTH_004,旧失败保留。环境、输入不变、owner清理PASS。
|
||||
|
||||
已在本轮拥有的无网络合成库只读取证,经理出现REFRESH_REUSE_DETECTED且tokenVersion从1变2;对应直连允许路径仅not.toHaveURL(/403/)立即进入下一文档,未等待认证恢复和页面加载完成。修为目标路径、真实h1、非403/404/登录共同就绪后再走下一项;加强断言,不改产品认证。下一轮验证是否消除该干扰,不能先写已证明唯一根因。付款后置诊断未到达,失败提前到提交后读取;后续API错误继续保留。
|
||||
|
||||
编号N5补两条浏览器消费者检查:PC/手机旧新BX列表详情/完整搜索,以及付款候选原样query/组批entityId、新旧PB详情、混合明细原顺序与UUID链接。响应为明确合成fixture,不冒充真实PG分配或审批付款;真实链仍由原完整付款用例及隔离PG分别证明。新增用例进入普通完整发现,不替换原分母。运行前先补类型检查,之后原九文件整例定向复验。
|
||||
|
||||
## 2026-09-18 编号完成后的浏览器验收接续
|
||||
|
||||
官方current回到本task。已保全352项旧差异、31目录11427份历史证据(含编号本地审阅包),本轮独占根为numbering-browser-closeout-20260918。原g20-affected-r1四未过保留,编号N5未勾选;先最小修复后原整文件定向,随后从static重新完整候选。
|
||||
|
||||
- [ ] DG7七种宽度共用同一合成员工会话,仍逐宽度完整验证全部原页面、截图及断言;减少七次登录重复前置,不缩宽度或放宽预算。
|
||||
- [ ] R3按五个独立角色各一次登录,同角色复用页面完成全部原403/404及经理付款入口断言,不减少角色和路径。
|
||||
- [ ] 全页面目标文档请求明确Accept: text/html,保留真实文档状态及当前路由/页面/错误/视觉检查。
|
||||
- [ ] 付款失败已提取安全错误码AUTH_004;先以阶段内401诊断和合成审计确认,不将猜测写成logout根因,不自动刷新API令牌掩盖失效。
|
||||
- [ ] 编号混合格式浏览器验收;原G20完整重跑及独立复核另列。本轮不改权限/认证产品、生产规则、并发/重试/预算,不连接生产或发布。
|
||||
|
||||
## 2026-09-18 编号实施接续(本轮最新)
|
||||
|
||||
用户已明确授权复核编号矩阵适合后实施。官方current进入09-18-reimbursement-periodic-numbering;新计数/策略及创建入口本地已实现;完整后端4412通过/1原跳过,之后策略边界补验456/456及隔离PG复验通过;迁移默认不启用、旧编号/未编号草稿归属及银行引用保留。该任务证据单独存business-numbering-20260918,未覆盖本task的任何失败/冻结包。原G20四未过、后续完整门禁、独立PENDING与公网义务保持,不把编号单测/PG通过折算为G20通过。未提交推送部署、未读取生产编号分布或启用线上策略。
|
||||
|
||||
## G20 八文件定向结果与编号调研续项
|
||||
|
||||
g20-affected-r1结束FAIL,806.364秒;34项30通过、2超时、2失败,零重试。环境/source/repository/owner清理PASS。资产、R75原整文件、PA6角色矩阵、R92与onboarding通过;DG7首页整例和R3直连整例超时,全页面文档请求缺text/html Accept触发404,付款整链在财务通过后的API会话读取失败。阶段日志已证明发票popup完成,不再猜该处卡住。原失败保留;后续需逐项证据修复,再从static完整候选,当前不能全量结案。
|
||||
|
||||
用户已选报销按月,随后新增要求调研全部在用编号及国内财务/OA/ERP惯例,结合不足10人科技初创公司。归属09-18-reimbursement-periodic-numbering,当前只读调研/更新规划,尚未改编号代码;其他编号实施范围待定,不将调研视为生产改号授权。
|
||||
|
||||
## G20 QA前置修正完成,开始原整文件定向验证
|
||||
|
||||
DG7固定企微优先夹具的账号入口改为自动等待;R92/onboarding路由mock显式阻断SW绕过,R92会话仅在登录后refresh成功。PA6同角色PC/移动复用单次登录,四角色隔离、所有入口数组逐字保留、原管理员复核403保持。全页面优先真实可见链接/管理首页,SPA仍单独验证目标文档HTTP及原URL/标题/403/404/视觉合同;逐导航请求完成并稳定500ms才截图,不用旧document网络状态代表新页面就绪。核心付款整链仅增加固定阶段/耗时日志,断言与300秒预算未改,先确认实际停点。
|
||||
|
||||
浏览器六文件专用tsc通过,产品267项相关回归通过。下一g20-affected-r1八文件原配置定向验证:资产、R75、DG7、PA6、R92、onboarding、全页面、报销付款整链;默认4workers/零重试/原预算。运行期间所有输入冻结;只是定向,不抵扣新完整候选。
|
||||
|
||||
## G20 产品续修单测已通过
|
||||
|
||||
两个接口最小修复已完成,原实现红灯7项/112通过,修复后两文件119/119通过(17.54秒);资产操作/搜索/校验与账号导入/敏感权限五文件148/148通过(23.71秒),受影响源码Node语法通过。合计267项包含13项新增边界,真实cost12未改;原事务预算、角色、审计语义与批量导入位置保持。下一步由09-06修QA前置及定向整例,再从static全量;P6/P7整体及P8仍待真实整例/全量,独立PENDING。
|
||||
|
||||
## 2026-09-18 G20 第四轮终态与续修
|
||||
|
||||
g20-full-r4 FAIL,5768.636秒;static239.024秒PASS,内部11阶段PASS;后端4367通过/1原条件跳过,8组启用服务回归通过/7组原关闭不计通过;浏览器351项=342通过/5失败/3超时/1串行后继未执行,零重试。环境、source/repository未变和owner清理PASS。资产及账号创建两处P2028由09-18-local-concurrency-product-fixes接最小修复;当前不是全量通过。
|
||||
|
||||
QA续修保持原分母、预算、并发和断言:DG7确认停在登录输入框,改为自动等待既定账号入口;R92导航后回登录,user-onboarding提交改密后失去会话,核路由mock与SW/refresh会话边界;PA6确认第7次角色登录耗尽180秒,同角色PC/移动复用一次独立会话,保留全部角色/入口/管理菜单/API403;全页面180秒只到9/33页,利用真实应用导航减少重复装载,保留25PC+8移动/14系统页、目标文档HTTP、实际URL/标题及全部视觉/错误断言。报销付款整链300秒超时但无精确动作栈,先增加安全阶段诊断和查实际停点,不先猜产品根因或放宽预算。R75后继跳过随原整文件重验,不能当通过。
|
||||
|
||||
顺序:产品边界红/绿与相关回归→各在用QA夹具/冗余前置修复→原完整文件定向验证→冻结输入、从static开始新完整候选。定向通过不拼接旧完整结果,主会话检查不抵扣独立PENDING。原失败、322项旧差异及29目录9762旧文件保护不变。
|
||||
|
||||
用户另行明确批准仅查看线上指定PB-20260917-001审批人;北京时间12:14只读确认draft/3项pending、无复核/执行,真实业务提醒对象为负责人,个人应用消息已有发送成功记录(不证明已读),另两名称为测试的在职经理账号符合现有资格。仅查询,没有业务/配置/企微写入;核实其用途和待办引用后才可提出权限收回,不自动停用。此授权不扩展到ARM、备份、恢复、生产改动或部署。
|
||||
|
||||
## 2026-09-18 G20 接续执行(最新用户批准)
|
||||
|
||||
生命周期夹具续修已验证:原36命令链三组交错对照,旧2.271–2.481秒、新1.665–1.748秒,完整trace逐字相同;仅测试中复用CJS假命令服务,Python -IS传输,不改生产部署或测试预算/并发。最终52生命周期+22初始化+39部署安全=113/113通过(63.57秒),含新增参数/输入/传输失效保护;此前两项超时当前1746/1648ms,四种真实源码变异及真实timeout均保留。g20-full-r4接下来从static完整重跑,运行期间输入冻结;定向通过仍不抵扣整套验收。
|
||||
|
||||
g20-full-r3已结束FAIL:1208.815秒,static PASS 308.880秒;后端4362通过/2超时/1原条件跳过。超时为生命周期真实源码init/server变异,均超过原5000ms;浏览器等后续阶段未运行。输入/仓库不变、归属清理PASS,guest尚未运行故环境INVALID。原回执保留。
|
||||
|
||||
G20d最小续修计划:先在本轮ignored证据目录交错测量原假命令与仅假命令Node启动优化,复用真实remote脚本/Compose依赖/相同配置,比较完整argv和生命周期trace、退出状态及耗时。若证实可减少重复启动开销,只改测试夹具启动,不改部署脚本、Vitest/浏览器并发、原预算、重试或断言;保留完整到达init/server/worker、真实timeout及未知命令拒绝。修后运行原71项和39项安全回归,再从头普通完整候选,不靠盲目重跑求绿。
|
||||
|
||||
清理接线最小修正已验证:auth-postgres-concurrency 10/10,原runner成功/失败/清理与账号前置6/6,原预算/并发/零重试保持。原1项跳过为deploy-init.integration未注入专用独占数据库,未计通过。下一g20-full-r3从static重新执行;运行期间输入冻结。
|
||||
|
||||
g20-full-r2已结束FAIL:1157.785秒,static PASS 310.928秒;完整发现365/351/12+2正确,后端223文件共4365项:4363通过、1失败、1原有条件跳过。唯一失败是auth-postgres-concurrency检查原qa_cleanup退出结构(exit cleanup_status);本轮记录器改写了结构。最小修正为在既有original_status优先/cleanup_status退出前收集阶段终态,不改原合同或测试。环境因尚未到guest阶段记INVALID,原生双引擎探针通过、源码/仓库不变、归属清理通过;后续阶段及浏览器NOT_RUN。修后针对性验证再从头完整重跑,不拼接前轮。
|
||||
|
||||
生命周期原配置复核71/71通过,82.64秒;首轮五项本次2226/2240/1936/2397/2628ms,无代码/预算变化。仅证明耗时差异,未确定唯一根因;不以定向绿补首轮完整结果,下一g20-full-r2从static重新执行并冻结输入。
|
||||
|
||||
普通候选g20-full-r1在static失败:生命周期49项中5项超过既有5000ms,合计71项为66通过/5超时;full-local未运行,120.980秒、static109.595秒,回执FAIL/无发布资格。原件保留。先原配置复核当前生命周期夹具,不提高预算或削弱fake命令审计。最终回执62项纯验证通过,shell补充19/19通过(原组合测试假工具把visual误作full的夹具失败已保留并修正),旧168项QA结果按输入适用性保留。
|
||||
|
||||
G20机制已完成本地实现:新增verify-candidate(static/full-local复用)、固定12个内部阶段与实际筛选记录、来源/策略/工具链/双引擎原生环境/逐项覆盖共验、dirty PARTIAL和离线verify、精确skip及批准元数据。QA整组168/168通过;补充原生浏览器版本绑定与三个skip组合、真实profile/source/coverage源码变异,最终结果以本轮command回执为准。部署安全39/39通过,流程/文档/敏感/task/diff检查通过。普通全量接下来在冻结输入上执行,原失败不改写。
|
||||
|
||||
G20a已完成:官方WebKit v2105/26.0、第三轮报销离线1/1通过(325.915秒),环境/源码/仓库/归属清理PASS;前两轮原失败保留。旧差异322项快照及29目录/9762文件保护基线已建立。G20c共享回执与逐阶段/实际筛选记录已接本地verify-candidate;首轮13项实际shell/fake工具检查通过,完整QA回归进行中。未接真实R1入口,无部署调用。
|
||||
|
||||
G20a 第二轮登录已过,停于WebKit原生离线。独占namespace对照证明无默认路由false,只有内部veth对的链路默认路由true,主动离线false;修正设计已补,保持无外联并加强同namespace对端核验。阶段回执58项合成检查通过,runner接线检查进行中。
|
||||
|
||||
G20a 首轮 WebKit 原单例超时:合成 refresh 在未登录时无条件返回成功,页面已进入移动工作台,登录 helper 等待不存在的输入框。仅修测试会话为登录前401、登录后成功;不改认证产品或离线断言。原失败保留,环境/source/cleanup通过。WebKit复验后先接阶段记录器,再跑绑定最终runner的完整门禁,避免代码变化后重复全量。
|
||||
|
||||
用户在解释 WebKit 用途及五组余项后明确“按照这个规划开始执行,非必要不暂停,尽量做完”。本轮据此批准官方 Playwright WebKit 运行包下载到本轮独占缓存,及既定本地完整验收和共享候选回执机制实施;不再列下载授权待答复。仅运行包,不隐式安装系统包或修改共享缓存;业务测试继续无外联合成环境。
|
||||
|
||||
沿用 G19 分层合同。先补 WebKit 真实启动/报销离线敏感证据单例,再普通 full-local。受管运行期间源码/测试/task/spec/docs冻结,只写本轮 ignored artifacts。旧失败/旧候选不覆盖。
|
||||
|
||||
- [x] G20a:建立旧差异/冻结材料保护基线,官方包独占下载、运行时依赖/启动探针,WebKit原单例重验。
|
||||
- [ ] G20b:普通完整 full-local(351本地用例+配套后端阶段),零重试/默认并发/原预算,保留所有失败及真实阶段耗时;只修在用缺陷/已批准合同漂移。
|
||||
- [x] G20c:实现来源/策略/环境/阶段/实际覆盖共同绑定的共享候选回执与离线验证入口,复用现有G19/sourceSnapshot/environment,不新增发布平台。设计细节补在design后再编码。
|
||||
- [ ] G20d:逐项反例、fake命令捕获、源码变异和既有部署生命周期回归;只验证机制,不连接真实发布入口强制消费。
|
||||
- [ ] G20e:本地检查、规约/协调状态、独立复核交接与新候选冻结;外部事实/12公网义务/真实R1启用/提交推送部署保持分别授权。
|
||||
|
||||
新证据:artifacts/qa-layout/release-receipt-g20-20260918。主会话inline,独立PENDING;无生产ARM、真实配置密钥备份、真实企微付款/恢复或旧恢复重跑。WebKit与后续本地实施连续推进,不以范围内常规决定反复暂停。
|
||||
|
||||
## 2026-09-18 G19 分层验收已实施并完成本地针对性验证(最新状态)
|
||||
|
||||
用户已明确批准分层方案,已正式更新 R2 并落门禁:全部非 manual 仍发现;12 公网逐项保留为同候选发布后必跑;2 条冻结差旅原源码/历史结果保持,当前改验两条冻结保护。没有恢复权限或旧整链,没有公网/企微/真实付款操作。
|
||||
|
||||
- 最终发现 **65 文件/365 用例**:**351 本地用例(59 文件)、12 公网义务、2 冻结旧链**,0 遗漏/未知/重复。351 已包含两条新保护,分母不重复加数;发现不等于执行。
|
||||
- 受控清单绑定用例身份/原源码摘要/原因/入口/责任角色。普通 runner 从完整发现派生执行集合,并校逐项结果;漏例、漂移、未知、重复、跳过、重试、expected-failure、伪通过和候选不一致拒绝。定向仍无发布资格。
|
||||
- 门禁 **74/74** 与诊断结果 **7/7** 合成检查通过,含真实 runner 调用及删除覆盖消费的源码变异。首轮夹具独占文件问题、第二轮五项30秒超时均保留;最终单独运行使用原预算,没有增加超时或降低断言。
|
||||
- `g19-freeze-r2` **2/2** 真实本地浏览器通过:合成员工创建403/无差旅导航,普通财务对账和三类导入403/无差旅导航,财务主管共享付款就绪检查包含差旅冻结 blocker。环境/输入/清理 PASS。首轮测试读取不存在的 me.permissions 失败已保留,改验正式 roleCodes 与接口行为。
|
||||
- 当前财务主管仍有 integration.manage,受管合成 runner 仍为既有底层回归启用 travel sync;没有声称所有差旅接口关闭。旧整链未通过/未执行,不因保护通过改写历史。
|
||||
- 本地回执明确公网 NOT_RUN_LOCAL、完整交付 INCOMPLETE、normalReleaseEligible=false。离线公网结果验证器要求 live profile、同源码/部署候选及原始逐项结果;未接真实部署入口,不能独立证明远端身份。实际公网责任人尚未指派,证据仍缺。
|
||||
|
||||
本地证据、新候选及余项:`artifacts/qa-layout/local-coverage-g18-20260918`。最终验证/保护/候选摘要分别为 final-check-summary.json、protection-result.json、candidate-integrity.json;旧完整 full-r2 保持失败,未重跑普通全量。主会话检查不是独立审阅,独立 PENDING。
|
||||
|
||||
### 接续顺序与余额
|
||||
|
||||
1. WebKit 官方独占缓存下载问题仍待答复;其真实离线用例未验。条件齐备后跑 **普通完整门禁**,不拼接定向绿;不得恢复旧差旅或放宽并发/预算求绿。
|
||||
2. G20:基于 G19 最终归属合同继续共享候选回执/逐阶段验证/skip和变异反例;真实 R1 强制消费启用另行批准。先完整阶段与 source/environment 绑定,再 fake 工具验证零发布写入,最后独立复核;当前未启用真实入口。
|
||||
3. 独立只读复核现有 K0/报销付款/借款/QA 与本次产品候选;inline 自检不抵扣。
|
||||
4. 经另批范围补真实付款复核人及企微个人发送事实、银行接受性、K1 保管/K2 新绑定、事件/自然业务证据;旧恢复不重跑。
|
||||
5. 经明确授权后提交推送、干净候选完整门禁/独立重跑、部署,再兑现 **同候选12条公网义务**。未部署前不能告知可公网测试。
|
||||
|
||||
借款 T1–T4、报销同页进度/付款排序/候选人通知事实展示、ERP 专属精简与 strict 遗留0保持此前本地成果;本轮无提交/推送/部署/归档,不把本阶段完成说成所有任务结束。
|
||||
|
||||
## 2026-09-18 G18 本地实施与针对性验证完成(最新入口)
|
||||
|
||||
本轮完成OCR能力接线、R108现行报销/离线队列覆盖、14系统页展开及真实路由到达验收;修复票据详情URL双写导致的人工修正失效。另由09-18-local-concurrency-product-fixes拥有PWA更新事件缺口及采购创建事务缩短:不改权限/审批/审计、事务或浏览器预算、并发/重试。
|
||||
|
||||
- 最终共享入口回归 g18-final-ux-ocr-r4:18/18通过,含完整认证/门户16项与OCR2项;新PWA生命周期13项连同采购回归共131项Vitest通过,QA接线39项按未变输入复用。
|
||||
- 不带预载的 g18-concurrency-fixed-r3:原资产/采购/付款/PWA四文件4/4通过,583.240秒;4 workers/零重试/原预算,995服务响应、0未处理异常。PWA文档B/active controller/worker摘要、68新缓存和2实际加载资源、旧独有缓存0,零登录回退/静态404。
|
||||
- R108已完整通过:8移动观测/0发现,员工审批403、经理正式通过,当前approve/return/no-reject及离线队列;路由验收25PC+8移动、14系统页、0发现,另5个正反对照通过。只证明矩阵内覆盖。
|
||||
- G18时点完整发现64文件/363用例,缺失/未知/重复0;枚举与临时构建摘要采集成功,仅枚举不等于执行。所有完整受管轮均核环境/source/repository/owner清理,失败原件保留。
|
||||
|
||||
此前两次并发采购P2028和PWA未收敛均保留。诊断区分了事件循环拥堵/池排队与PG等待(729采样未见Lock);这不是全仓CPU根因证明。原full-r2 65/359、326 passed/12 failed/5 timedOut/16 skipped保持失败,最新候选未再跑普通整套,局部结果不能拼接全量通过。
|
||||
|
||||
证据/新复核包入口:artifacts/qa-layout/local-coverage-g18-20260918。最终治理、敏感/diff、保护与冻结以final-check-summary/protection-result/candidate-integrity为准;主会话检查不代替独立PENDING。保留304项原差异快照、27旧目录/9004文件以及HEAD/index,不覆盖旧冻结包。
|
||||
|
||||
### 尚需推进
|
||||
|
||||
1. 12条公网用例和2条冻结差旅的验收归属:入口/责任角色/证据缺口已列g18-gate-ownership.json;G19分层验收已获用户明确批准并完成本地实现/验证,12项公网仍须同候选发布后执行,未运行公网。
|
||||
2. WebKit真实运行条件及现有离线用例未验;此前官方独占缓存下载问题仍待答复,不联网安装。
|
||||
3. 条件齐备后完整普通门禁及R1共享回执/拒绝反例;独立只读复核与R1真实强制消费启用单列,不能用本轮定向绿抵扣。
|
||||
4. 真实付款处理人/企微个人发送、银行/OCR样本、K1保管事实/K2新绑定、事件和自然业务证据仍未执行;旧恢复不重跑。
|
||||
5. 提交/推送、干净候选完整验证、部署/公网验收仍需原明确授权。借款T1–T4、ERP退役、strict遗留0保持此前本地完成,未据此上线。
|
||||
|
||||
后续具体状态与最小步骤见remaining-work.json;当前task及协调task保持in_progress。
|
||||
|
||||
## G19 首轮验证发现与修正
|
||||
|
||||
- 全量发现 65/365;351 本地、12 公网义务、2 冻结旧链,0 归属问题。只是发现,不是全量执行。
|
||||
- QA r1 71/73:两条源码变异测试被上次独占报告文件提前阻断;已将每次夹具调用的报告/命令日志隔离,不削弱保护。r2 69/74,五条诊断夹具在并行构建负载下30秒超时;下一单独重跑整组,不改预算。
|
||||
- g19-freeze-r1 两条失败,环境/输入/清理 PASS。新测试误用旧 helper 类型中的 me.permissions,正式 /api/me 只返回 roleCodes;修正为实际角色确认+原接口403/付款冻结blocker/导航检查。原类型不据此声称产品权限故障,不扩修旧 helper。
|
||||
- 六个原 live/frozen spec 字节不变;冻结义务的当前入口明确指向普通 full-local 内的新保护文件,旧业务域入口仅作 historicalEntry 保留。
|
||||
|
||||
## 2026-09-18 G19 分层验收(用户已明确批准,实施中)
|
||||
|
||||
用户批准:12 条公网用例作为同一候选发布后必跑项;2 条冻结差旅保留原源码与历史结果,改验冻结保护。本地通过不代表公网/完整交付通过,不授权部署、恢复差旅或真实操作。此增量替代 R2 的“排除集合为空”,不重写旧 full-r2 失败。
|
||||
|
||||
- [x] G19a:全体非 manual 用例继续真实发现,固定 12 live+2 frozen 的用例身份、原因、责任角色、必跑入口和原源码摘要;未指派实际负责人明确待定。
|
||||
- [x] G19b:由完整发现与受控合同生成本地执行文件集合,登记用例级覆盖;拒绝遗漏、身份漂移、未知/重复、跳过、重试与 expected-failure。禁止调用者筛选普通本地集合。
|
||||
- [x] G19c:新增两条冻结保护整例,验证现行合成角色入口/正式 API 拒绝、共享付款差旅 blocker 与入站导入权限拒绝;不改权限,不执行旧差旅链。
|
||||
- [x] G19d:公网义务在本地保持 NOT_RUN_LOCAL,绑定候选提交与源码摘要;公网用例结果只能由同候选、live profile、完整逐项通过报告兑现。验收回执不自授部署或发布资格。
|
||||
- [x] G19e:增加漏例/新增未知归属/漂移/伪通过/候选不匹配/真实 runner 选择等反例,运行本地冻结保护,更新 spec/协调 task 与新候选;独立仍 PENDING。
|
||||
|
||||
WebKit 下载问题仍待答复,完整普通门禁未通过;R1 机制后续与真实强制消费启用分开,不启用发布入口。所有旧差异、失败材料与冻结包保持。
|
||||
|
||||
## G18 诊断终态与产品修复归属(2026-09-18)
|
||||
|
||||
诊断r2 531.599秒,2通过/2失败;环境/source/repository/cleanup全部PASS。采购仍P2028(6839/5000ms),PWA现已实测B控制器active/activated、B首页缓存和68新资源、worker摘要匹配,却文档仍A。729次PG采样无Lock等待,存在应用事件循环延迟/池排队,不声称全局唯一根因。
|
||||
|
||||
按用户连续实施及先补规划授权,新增09-18-local-concurrency-product-fixes接最小PWA事件监听和采购创建事务修复,具体PRD/design已落;四文件不带观察器重验后再接回本task收口。R2 live/frozen归属变更仍仅提案,不影响既有边界。
|
||||
|
||||
## G18 并发失败与诊断细化(2026-09-18)
|
||||
|
||||
g18-concurrency-r1 505.214秒,资产/付款2通过,采购/PWA2失败;环境/源码/仓库/owner清理PASS,零重试。采购POST为P2028(5000ms预算、5952ms后使用过期事务),响应8086ms;同窗口多登录约15秒,仅据此不能区分事件循环、池等待与PG锁。PWA文档仍A、B独有缓存68、A独有缓存0;原catch中controllerIsActive=false、fetched摘要空值和bOnlyLoaded=0是默认占位,不是实测,禁止据此推因。
|
||||
|
||||
继续已批准本地可靠性诊断:四文件保持4 workers/零重试/原预算,先修PWA安全失败记录为真实快照或null,并采被动worker状态/控制器/导航时序与缓存index摘要;不额外导航/更新/清缓存。仅本轮ignored观察器通过NODE_OPTIONS预载采服务事件循环与池计数,限定受管retained-local合成server、已核namespace及独占输出;外部观察器只查询已验证本轮容器的pg_stat_activity等待类别/数量/时长,不读取SQL正文或业务表。时间统一epoch便于对照。观察器存在的运行单独标诊断,不替代无观察器最终验收。
|
||||
|
||||
依据证据再落产品最小修复;PWA若需运行时代码变更,先建独立产品task关联本task,遵守原spec。不增加事务/浏览器预算,不改审计、权限或并发,不把一次定向通过当完整可靠性通过。
|
||||
|
||||
## G18 已通过本地覆盖,接续并发观测(2026-09-18)
|
||||
|
||||
受管 g18-ocr-visual-r2 7/7 通过,332.441秒(浏览器约2.2分钟),环境/source/repository/cleanup均PASS。原页修正→缺字段阻断→补齐可用→返回再进入已经验证;25PC+8移动(其中14系统页)全部准确到达,0发现;另5个合成目标到达正反对照通过。R108在前轮完整通过,8移动观测/0发现,员工403、经理正式批准、离线上传队列保留。观察器试采该次归属服务655个响应、0未处理异常;不以此抵扣旧full-r2的P2028。
|
||||
|
||||
下一步 g18-concurrency-r1:资产/采购/保留付款整链/PWA,默认4 workers、原预算/零重试,受管本地合成。观察器通过本次runner后代及其唯一PID文件绑定孤儿server,再核cwd/入口/fd1/namespace;不依赖server一定仍为后代,也不读历史共享日志。输出仅请求类别/状态/耗时/P2028数字和CPU/RSS。PWA输入存在时完整枚举并提前缓存摘要,原发现采集告警不覆盖。
|
||||
|
||||
## G18 OCR 实测暴露的最小产品修复(2026-09-18)
|
||||
|
||||
g18-corrected-visual-r1:R108 整例通过(8 个移动观测、无发现),OCR 缺字段识别及横幅已通过,但人工修正按钮在180秒内反复被卸载;执行记录有56次 DOM detached,终态回到列表。源码两组 effect 分别 local state→URL、URL→local state,并同时依赖双方;上传选中票据时会交叉回写。此为在用票据详情状态同步缺陷,不是缺权限或OCR规则错误。
|
||||
|
||||
在已批准 G18 现行修正流程验收内,最小修复只涉及 InvoicePoolPage:从 URL 读取 detailInvoiceId,所有选择/返回动作只更新 URL 且保留其他查询参数,删除双向 effect 与重复返回写入。保留 replace 导航语义、全部查询/编辑/权限合同,不调整OCR、状态机或产品视觉。原 E2E 红例保留,修后必须不刷新/force-click 完成缺字段拒绝→补齐可用,增加URL选中与返回列表再进入验证;运行前端typecheck/build及受影响浏览器检查。相同模式只定位记录,不顺手改其他页面。
|
||||
|
||||
视觉首轮目标到达还需纠正:portal使用既有portal-work-summary锚点,动态报销使用各自workspace;其余已知页面标题不降级。4xx错误页模拟响应显式UTF-8,确保反例精确击中原到达断言;增加同源API403/404观测为失败发现,避免仅页头可见冒充有效页面。
|
||||
|
||||
## G18 首轮停点与最小修正(2026-09-18)
|
||||
|
||||
受管 g18-ocr-mobile-r1:338.629 秒,1 passed/2 failed,无 skip/重试,环境/输入/清理 PASS。首例报销上传提交通过;OCR 修正到达前停在员工无票据管理导航,R108 已完成 7 个移动观测和离线队列后停在旧通用审批详情标识。
|
||||
|
||||
当前票据管理要求 invoice.manage,修正用例改用财务合成角色;普通员工仍通过报销详情提交。当前报销审批规约只提供 approve/return(及有权 transfer),没有 reject;R108 接专用 reimbursement-mobile-workspace,验证退回修改可用、驳回不存在、通过确认和正式 completed/approved,保留员工审批403、离线队列与全部布局验收。原计划“批准/拒绝”是选用旧差旅夹具时的动作,不为本次测试恢复已替换的报销驳回。R108 报告新增完整执行状态,异常退出的无视觉发现不得打印整例 PASS。
|
||||
|
||||
并发诊断落具体方案:维持4个文件的默认4 workers、原预算和零重试,资产/采购/付款/PWA一组受管对照;观察器仅按本次进程后代链、cwd/entry/fd1核归属读取本次合成服务日志,输出请求类别/状态/耗时/P2028数字和CPU/RSS,不复制payload或凭据。无事件循环/锁证据不下唯一根因结论;定向通过仍不代替完整负载。
|
||||
|
||||
## 2026-09-18 G18 执行细化(用户已批准按余项连续推进)
|
||||
|
||||
官方 current 已回读本 task,inline 实施/检查;独立审阅 PENDING。新证据根 `artifacts/qa-layout/local-coverage-g18-20260918`,已保全 304 项旧差异、27 个旧目录/9004 个文件;新增本轮候选,不覆盖 G17 冻结包。受管运行期间不修改源码、测试或任务输入。
|
||||
|
||||
- [ ] G18a OCR:在受管 runner 启动真实本地 server 后,根据该次启动的 mock provider 与 jobs=true 派生测试能力标志,覆盖调用者置位;保留非 mock/停 job 的反例。修正用例实际验证缺字段→拒绝提前可用→补齐→可用,不仅置位求绿。先检查接线,再受管执行整个 OCR 文件,旧标题与原结果映射保留。
|
||||
- [ ] G18b R108:用当前小额报销(上海当天、office_postal、有效合成 PDF、显式关联明细、正式提交)产生经理待办,替代冻结差旅。初始化异常直接失败;保留 390/414 布局、离线上传两项/移除/恢复、经理批准/拒绝操作及确认,补员工无审批权限和正式任务完成断言。输出改为运行独占目录,移除允许忽略发现的开关;原预算与零重试保持。仅对已证实的现行 UI 漂移纠正定位,不改产品样式。
|
||||
- [ ] G18c 路由:在已有矩阵将 `/system/*` 显式展开为当前 router 的 14 个系统页;AP 选财务,管理页选管理员,审批选经理。每次验收须实际 URL 与预期一致、目标页标题/稳定锚点存在、无 403/404/登录回落;匿名登录页用匿名 context。未知路由或未解析参数直接失败。保留原视觉断言与 180 秒预算;不宣称矩阵外全产品覆盖。既有矩阵业务边界文字同时纠正企微考勤与 ERP 退役事实。
|
||||
- [ ] G18d 必跑归属与可靠性:只读梳理 12 live、2 冻结差旅的实际入口/责任/证据缺口,保持 full-local 完整集合不增例外。并发诊断先规划可归属服务时序/资源/浏览器事件采集,不改事务超时、并发、重试、审批和审计;按精确停点决定是否需要修复,不盲跑整套。
|
||||
- [ ] G18e 类型/接线/受管定向检查,精确结果与余项、主会话 review、治理/敏感/diff/保护校验和新增量冻结;09-08 协调状态同步。完整发现须使用运行仍有效的 PWA 输入并在清理前保存所需摘要。
|
||||
|
||||
WebKit 未获官方独占缓存下载答复,不联网安装;R1 启用、独立 review、真实批次/企微个人通知、银行样本、K1/K2/事件和自然业务证据、提交/推送/部署/归档继续分别保留边界。不重跑旧恢复。
|
||||
|
||||
## 2026-09-18 G16/G17 本地执行收口(最新入口)
|
||||
|
||||
普通 full-r2 的原始结果保持:65 文件/359 用例,326 passed、12 failed、5 timedOut、16 skipped,总计 4879.543 秒。72 迁移、Prisma、4347 服务端单测(另 1 原跳过)、前端 typecheck/build、8 角色正式改密、审批及 8 组默认启用服务端回归通过;完整门禁仍失败,无发布资格。
|
||||
|
||||
本轮将其 17 条失败/超时逐项处理:14 条在用观测已有本地定向通过证据,1 条缺 WebKit,2 条冻结差旅原样保留;另外补验原 R75 串行未执行的生命周期与开关备注恢复 2 条。是跨轮、不同测试修订下的身份映射,不是 14 个产品缺陷,也不是最新候选一次全量通过。证据总入口为 `artifacts/qa-layout/full-gates-followup-20260918`,逐项见 current-disposition.json,所有失败轮次保留。
|
||||
|
||||
| 工作 | 最终本地证据 | 边界 |
|
||||
| --- | --- | --- |
|
||||
| G16 账号/服务回归前置 | 普通 full-local 已接串行强制改密、guest probe、完整发现/forbid-only;聚合 r4 八组通过 | 七个默认关闭服务套件未执行,不启用 R1 |
|
||||
| G17a 合同验收 | 同状态管理对照、只读原整例;r3 前后 2 次正常通过、4 类动作注入均精确非零 | 新增合同用列表链接;独立复核仍 PENDING |
|
||||
| G17b/c 模拟页面 | mock-r1 15 passed/2 timedOut;修已定位按钮后 r2 2/2 通过 | 不加预算、不 force-click;模拟 API 局部阻止 SW,真实 PWA 保留 |
|
||||
| G17d 在用业务 | business-r1 资产/付款/考勤通过;r2 采购/通知/考勤通过;r3 生命周期与备注恢复 2/2 通过 | 本地合成;r1/r2 失败和串行缺失仍保留 |
|
||||
| G17c PWA | 单独 1/1,通过用时 18.116 秒;A 受控→B 收敛、旧独有缓存 0、新资源加载、无登录回退/静态 404 | 原 full-r2 的 45 秒未收敛事实不回写,不据单独通过认定并发稳定性已修 |
|
||||
| G17c 视觉 | 原矩阵单独 1/1、60.890 秒,12 个 PC 路由项/8 个移动路由项,0 发现 | 含字面 `/system/*`,未展开全部系统页,不称全产品视觉覆盖 |
|
||||
| G17e 精简 | 删除严格重复 main-flow 入口,保留被业务组/manifest 引用的付款整例,固定保留 PDF 和全部下游断言 | 冻结差旅不是废弃;旧报销/借款/ERP产品候选和旧冻结包均保留 |
|
||||
| G17f 当前发现 | 64 文件/358 用例,缺失/未知均 0,覆盖校验与复核一致 | 只枚举;临时构建清理使末尾 SHA 再采集失败,原 wrapper exit 1/采集告警保留,不冒充完整回执 |
|
||||
|
||||
全部完整受管轮均 sourceUnchanged/repositoryUnchanged=true、环境 PASS、owner 清理 PASS。局部通过不证明 full-r2 中资产/采购/leave-balances 的 P2028 根因已解决;本轮未调事务超时、删审计、降低并发、加重试或更改产品权限/状态。主会话完整 diff 自检及最终治理/保护/候选以 final-check-summary.json、protection-result.json、candidate-integrity.json 为准;独立仍 PENDING。
|
||||
|
||||
### 剩余工作与下一批执行顺序
|
||||
|
||||
1. **G18 本地覆盖合同补齐(先按具体修改面细化实施,尚未执行)**:OCR 条件明确绑定受管 mock provider 和 job 的真实能力,再验当前修正流程;R108 把冻结差旅初始化替换为当前在用的移动审批夹具,保留离线队列/手机布局/权限断言并隔离旧截图;路由矩阵把通配项展开为经角色授权的真实路由,验证实际到达,404/403 不能充当该页面视觉验收。三项各自小批,不恢复日常 OA 考勤或差旅,不删除缺覆盖证据来求绿。
|
||||
2. **运行可靠性与完整集合**:对 full-r2 的事务超时、长链及 PWA 并发收敛分别设计受管时序/资源对照,先取得精确阶段证据再决定修复;原并发、零重试和预算不暗改。12 条 live、2 条冻结差旅及上述条件项须明确必跑入口/例外归属/责任/证据;完整集合未闭合前不反复跑全套求绿。
|
||||
3. **WebKit 1 条**:现行设计“不联网安装”;本轮已提仅官方 v2105 到独占缓存的申请,尚无答复,未下载。具备运行时后按原 WebKit 离线敏感证据整例重验,不用 Chromium 抵扣。
|
||||
4. **R1 与独立审阅**:入口收敛/回执消费机制的未完成 AC 保持;完整普通门禁绿、实测成本、干净候选及单独启用批准仍必需。当前 QA、上批产品与 K0 的独立只读审查分别 PENDING,不由本地反例或主会话自检代替。
|
||||
5. **外部事实**:指定真实付款批次候选处理人与企微个人发送事实、银行样本接受性、K1 保管事实/K2 新绑定、恢复/事件缺口和自然业务验收按既有清单分别补事实与授权。不得重跑已消费旧恢复。
|
||||
6. **交付操作**:提交、推送、部署、归档仍未授权;没有公网更新结论。借款 T1–T4、报销进度/排序及付款姓名/通知事实展示保持此前本地完成,真实使用验收不由本轮门禁抵扣。
|
||||
|
||||
以上是当前余额,不把旧文档中的“场景8尚未处理”“普通门禁尚未接改密”“借款未实施”继续作为现状。整体 task 仍 in_progress;未连接生产/ARM、读取真实密钥配置备份、重跑旧恢复、发送真实通知或付款。
|
||||
|
||||
## 2026-09-18 G16 完整运行与 G17 本地后续(当前入口)
|
||||
|
||||
普通 `full-r2` 已完整结束:4879.543 秒;浏览器 3554.893 秒。65 文件/359 用例发现与最终身份一一对应,326 passed、12 failed、5 timedOut、16 skipped;零重试/重复/未知/缺失,框架总计 17 unexpected。72 迁移、Prisma、4347 服务端单测(另 1 原跳过)、前端 typecheck/build、8 角色正式改密、审批和 8 个启用服务端套件通过。环境 PASS,sourceUnchanged/repositoryUnchanged=true,owner 容器/scratch 清理通过。该失败运行与先前定向回执分别保留,无普通发布资格。
|
||||
|
||||
本轮新失败中,2 条冻结差旅原样保留,1 条 WebKit 缺运行时(下载问题仍待答复);14 条在用观测逐项处理,不能称 14 个产品缺陷。16 条跳过为 12 条 live 专属、1 条 OCR 条件、1 条旧初始化不兼容的 R108、2 条 R75 前序失败后的串行未运行;后两条 expectedStatus=passed,不能计为正常条件跳过或通过。
|
||||
|
||||
用户连续实施与精简授权下,G17 先按下列最小方案执行,仍不改产品权限/状态/超时或视觉方案,不增加浏览器重试与全局超时,不运行真实操作:
|
||||
|
||||
- [ ] G17a:合同原只读整例在已加载列表补共享禁止动作断言;创建反例使用列表链接,编辑/续约/归档用详情按钮。已有独立副本 4 个详情注入非零+前后 2 次正向结果只支持详情场景;补足列表链接缺口后重新核精确失败。主会话反例不抵扣独立 review。
|
||||
- [ ] G17b:R102 删除动作文字接当前“删除报销单”;关闭已验证的更多菜单再点添加发票,按当前明确关联方式验证,不 force-click 穿透菜单。R125 保留解绑/归档后同文件重传合同,显式选择既有明细和当前上传反馈,不恢复旧自动绑整单。Wave3 按现有 spec 的 `lg:static` 与侧栏进度次序替代旧 sticky 断言,保留多视口/宽度/溢出和审批内容。R124 先核具体停点;已过时的角色/删除定位按当前合同改,保留移动全链。
|
||||
- [ ] G17c:公告及 visual-shell 的模拟 API 与生产 SW 路由边界作限定对照;确认 mock-only 场景需阻止 SW 后局部设置,真实 PWA 仍启用。visual-shell 截图另根以保护历史材料,不改布局产品。全页视觉与 PWA 各保留原失败,定向运行带诊断观测,先核是否预算/环境或具体行为问题,不改超时求绿。
|
||||
- [ ] G17d:R75 通知前置按实际提交拒绝核现行日期/金额/指定明细合同,合成发票使用有效 PDF;保持通知未读/已读/跳转以及后续生命周期、功能备注恢复验收。资产与采购先用原断言在独占库定向重验;本轮服务日志已由运行时间+活动子进程 PID 确认,POST assets/POST purchase-requests 为 P2028 事务超时,GET leave-balances 另列,不放宽事务或移除审计。
|
||||
- [ ] G17e:按用户精简取舍核两条报销付款整例的重复:两入口目前均调用同一 helper,main-flow 的 preview=true 包含另一入口的全部业务动作及额外 PDF 验证。确认包含关系后收敛为一个完整主链,移除无调用的可选 preview 分支及重复入口;保留审批/付款/回单/审计/AP/票据归档全部断言和原 300 秒预算。原另一入口本轮超时保留,不以退役重复用例改写历史或取得完整门禁资格。
|
||||
- [ ] G17f:相关定向验证、当前完整发现、逐失败及跳过处置、主会话检查、治理/敏感/diff、旧差异和冻结目录保护、新增量候选及 09-08 状态同步。若仍有性能/环境或未决合同,落具体下一步;不反复全量重跑至绿,R1 实现/启用、独立审查和外部事实继续分列。
|
||||
|
||||
证据入口 `full-gates-followup-20260918/full-r2.summary.json`、`full-r2.cases.json` 与原受管完整报告。后续测试源码有变化时,本次全量结果只绑定本次冻结输入,不借用为更新后完整候选全绿。
|
||||
|
||||
G17e 入口核对:保留被 business-flow 组与 AP/付款 route-manifest 引用的 `reimbursement-payment-batch-flow.spec.ts`,把已有完整 PDF 检查固定为必跑;退役未被执行入口引用的重复 `main-flow.spec.ts`。这样现有专用门禁及旧 P2 排除配置仍指向同一完整链,不产生悬空引用或顺便改变安全分组策略;历史文档引用保留追溯。
|
||||
|
||||
G17b 接续:mock-r1 为 15 passed/2 timedOut;trace 的动作记录已证 R124 走到末尾旧“删除草稿”确认,R125 PC 停在旧“移除”。分别接当前 dialog 内精确“删除报销单”和行内“移除对应关系”后,mock-r2 仅这两条 2/2 通过(45.3 秒),相关类型检查通过。旧失败保留,不扩预算。
|
||||
|
||||
G17c/d 验证顺序:资产/采购原整例、R75 全文件和合并后的付款主链先在同一独占库执行;PWA 与项目全页视觉随后各自单独受管执行,避免把并发压力混成已证明的产品根因。全页视觉仅加逐路由 test.step(脱敏路由标签)以保留超时具体停点,不改路由集合、角色、断言或 180 秒预算;PWA 已有 A/B 失败观测,不额外改动。受管运行期间源码与任务输入冻结,只在本轮 ignored 证据根整理。
|
||||
|
||||
## 2026-09-18 G16 执行中(原本轮计划,结果以上节为准)
|
||||
|
||||
G17d 第一轮受管结果:g17-business-r1 共 7 条,3 passed/1 timedOut/1 failed/2 串行未执行,496.44 秒;资产整链、含 PDF 的保留付款整链和企微考勤边界通过。采购已越过建卡,提交前当前页报服务错误;R75 仍在合成提交处 VALID_001,不能把旧 P2028 或日期/金额推断当已证根因。环境/源码/仓库不变/owner 清理均 PASS。
|
||||
|
||||
限定接续方案:R75 不再选择费用接口首行(seed 首行为差旅机票,会要求完整差旅摘要),显式选择既有 office_postal 快递费用,与合成通知业务及已过付款主链一致;提交失败仅记录状态/原因码/字段名,不输出 payload。采购原提交动作确实先 PATCH 保存、再 precheck、最后 submit;补三个正式阶段的状态断言并处理现行预检确认,不把保存失败等成最终 submit 超时,不放宽审批权限或预算阻断。下轮仅采购及 R75 全文件。
|
||||
|
||||
G17d 第二轮 g17-business-r2:365.142 秒,采购完整链/考勤边界/通知完整场景通过;生命周期页面入职及转正已通过,最终 API 断言却因默认 directory scope 不返回 employmentStatus 而失败,治理备注仍串行未运行。对齐 PeoplePage 已有管理查询,加 scope=management,保留 admin 正式权限与 active 断言;下一仅重验生命周期和备注恢复。环境/源码/仓库不变/owner 清理均 PASS。曾在本轮 artifact 调用者指定独占日志路径,但受管 env 白名单未转发,未产生该日志;不扩大白名单、不借此宣称取得服务日志或 P2028 根因,原日志不重写。
|
||||
|
||||
用户已批准按后续规划连续执行;官方 current 回读为本 task。新证据根 `artifacts/qa-layout/full-gates-followup-20260918`,基线保全 290 项既有差异、25 个保护目录及 7656 个历史文件,旧冻结包不覆盖。仅本地合成;inline 自检不抵扣独立复核,R1 启用、真实环境与发布边界保持。
|
||||
|
||||
- [x] 核 current、G16 与既有差异,创建增量基线。
|
||||
- [x] G16a:核 WebKit 缓存和运行条件;缺失时保留 NOT_RUN,不下载或用 Chromium 替代。
|
||||
- [ ] G16b:共享串行合成改密前置接入普通 full-local,在回归/浏览器前完成;完整发现、PWA、fail-fast、零重试和原并发保持。增加初始化失败阻断与顺序反例。
|
||||
- [ ] G16c:同一个 active 合同增加管理身份正向对照;在真实加载后的列表/详情注入四类动作逐一证明负向断言失败;保留原只读整例。完整门禁及独立复核结论分别记录。
|
||||
- [ ] G16d:场景 8 对齐现行强制经理解析的 409/no_manager_found 合同,证明草稿且无工作流;不修改人员关系规则/产品权限。后续原 9–23 按实际结果检查,不提前计通过。
|
||||
- [ ] G16e:旧日常 OA 请假离线重放/冲突两个用例及专属辅助移除,替代合同引用现有企微只读边界测试;报销离线敏感证据用例保留 WebKit。冻结差旅原两条完整保留、继续归 full-local,记录其当前角色不可达与缺少重启验收,不以删/skip消除完整门禁阻塞。
|
||||
- [ ] G16f:定向必要验证后执行普通 full-local;前置失败即停止,保留完整发现与真实未运行分母,不据局部通过取得资格。整理增量候选、保护校验、治理及余项。
|
||||
|
||||
WebKit 当前缓存只有 Chromium/ffmpeg,运行条件缺失,NOT_RUN 不抵扣验收。合同定向 7/7 通过(原只读/静态反例、管理正向、4 个真实页面注入反例),浏览器测试专用类型检查通过;完整反例门禁/独立复核仍未闭合。场景 8 当前源码仍期待缺经理跳过,但 workflow 单测和实现要求必需经理缺失时失败关闭;以现行合同修测试,不恢复旧规则。真实经理缺口、指定真实批次处理人/企微结果、银行样本、K1/K2、独立复核与发布继续分列。
|
||||
|
||||
### G16 聚合第四轮通过与普通完整门禁接续
|
||||
|
||||
`server-regressions-r4` 477.318 秒,exit 0;八个默认启用套件全部通过,七个默认关闭可选套件未执行、不计通过。通知 1–10 步完整通过,包括新 webhook 合成密钥的加密存储/脱敏读取/本机失败 provider、旧合成字段 encrypt/decrypt 迁移。环境 PASS,sourceUnchanged/repositoryUnchanged=true,归属核验及容器/scratch 清理通过;限定回执 normalReleaseEligible=false。
|
||||
|
||||
下一执行普通 `full-r2`:保持完整发现、全部非 manual 浏览器集合、零重试、原并发及内部 fail-fast;WebKit 官方运行包下载问题仍待答复,未下载,缺运行时按实际失败/未覆盖留痕。冻结差旅用例继续保留,不开旧业务权限求绿。运行中源码/测试/task/spec 输入冻结,只读检查与本轮 ignored 证据整理可继续。完整结果产生后按真实用例身份归类,不以本次八组成功或此前定向结果替代整道门禁。
|
||||
|
||||
### G16 聚合第三轮与通知密钥合成夹具
|
||||
|
||||
`server-regressions-r3` 457.215 秒,exit 1;环境、源码/仓库不变和 owner 清理 PASS。前七个启用套件通过,通知步骤 1–7 通过,第 8 步失败:旧夹具给 mock 渠道传 secret,却期待 secretConfigured=true。现行 normalizeConfigJson 只为 wecom_webhook 保存加密配置,mock 返回 false 是正确合同,不修改产品使 mock 保存密钥。
|
||||
|
||||
最小修复方案:第 8 步改为 wecom_webhook 与固定 loopback :9 地址,仍使用本轮合成 secret;保留脱敏和无明文返回断言,增加数据库 hasSecret=false/hasSecretEncrypted=true。渠道测试 API 保持 HTTP 200,provider 必须为 ok=false/wecom_network_error/retryable=true,证明读取加密配置后进入本机失败路径。1–7 的模拟投递和 9–10 的合成旧字段迁移保留,仅操作独占合成库,不读取真实密钥、不发送外部通知、不重跑恢复。语法检查后执行 server-regressions-r4,再按实际终态继续普通 full-local。
|
||||
|
||||
### G16 聚合第二轮与本地模拟通知前置
|
||||
|
||||
`server-regressions-r2` 439.002 秒:smoke、去重、审批、采购、资产、审计、OCR 七个启用套件通过,通知套件失败。已核原因是本轮 QA 统一设置 IM_NOTIFIER_ENABLED=false,导致原通知合同的模拟投递为空;不是企微真实发送失败。原脚本只创建 mock 及 loopback :9 失败渠道,空库seed不带真实通知配置,网络namespace零外部路由,WECOM_ENABLED/EMAIL_ENABLED仍false。
|
||||
|
||||
最小修复:普通 full-local 恢复 qa_export_app_env 原有的 IM_NOTIFIER_ENABLED=true 供聚合回归;retained-server-local 仅 server-regressions 使用 true,workflow-actions 和限定浏览器继续false。保持 mock_sent、本机失败重试、disabled 明确跳过、合成秘密加密迁移等原断言,不连接真实企微/不读真实密钥。fixture 接线测试捕获实际子进程布尔配置,随后重跑同一聚合套件。七个默认关闭可选套件不计通过。环境/源码/仓库/清理 PASS。
|
||||
|
||||
### G16 聚合回归首轮
|
||||
|
||||
`server-regressions-r1` 350.969 秒:smoke、去重、严格预设模式的 workflow-actions 和采购整组通过,资产组停在最终断言。根因已核为编号旧前缀 ZC 预期,当前资产规约和实现使用 FA;状态 in_use、责任人与位置符合当前流转。仅把编号断言改为 FA 年份序号合同,其余领用/归还/调拨/盘点/审计检查保留。后续审计/OCR/通知未运行,disabled 的可选组也不能计通过。环境/源码/仓库/清理 PASS。
|
||||
|
||||
付款模式源码反例 2/2 已验证:预设批次模式只接受精确 409,返回 200 不能切去 legacy 成功;恢复响应驱动分支的实际源码变异会被抓到。登记到稳定 QA 测试后再次执行。WebKit 官方 dry-run 已核 v2105,因原方案“不联网安装”约束已异步询问是否只准官方包到独占目录,尚未得到回答前不下载、不改系统依赖或旧缓存。
|
||||
|
||||
### G16 定向审批回归
|
||||
|
||||
`workflow-r1` 整脚本通过,386.224 秒;原场景 8、付款批次拒绝直接付款、不同状态拒绝、非财务拒绝、并发拒绝、票据解绑重绑及经理恢复均执行。环境 PASS、源码/仓库 unchanged、owner 清理 PASS。工具完整回归 45/45,另环境 13/13、先行接线 12/12,不累加成不同业务用例。随后自检把付款分支选择收紧为测试开始时 PAYMENT_BATCH_ENABLED 的预设模式,禁止根据响应状态选择宽松分支;下一次聚合回归会再次覆盖该更严格版本。
|
||||
|
||||
聚合回归前将 smoke SAMPLE_FILE 固定到本轮 scratch 的不存在路径,使原脚本只生成自己的合成 fallback,不读取共享临时样本。旧成功/失败回执保留。未完成普通 full-local、WebKit、冻结差旅与独立复核。
|
||||
|
||||
### G16 首次普通运行与补充实施边界
|
||||
|
||||
`full-r1` 999.419 秒,65 spec/359 用例完整发现;72 迁移、Prisma、服务端 4347 passed/1 原有 deploy-init integration skipped、前端 typecheck/build、8 角色正式改密通过。workflow-actions 越过场景 8,于场景 19 旧直接付款 200 预期失败,实际 409/payment_batch_v1_required。后续 server-regressions 和全部浏览器未运行。环境终态 ENVIRONMENT_INVALID 是 guest probe 尚未到达、bootstrapObservation=null;原生 online/namespace、源码/仓库不变和 owner 清理证据均保留,不改写终态。
|
||||
|
||||
继续在同一本地范围实施:
|
||||
|
||||
- 普通 full-local 在启动 server 后、业务回归前执行 guest probe(浏览器重启后仍再测);让环境前置失败先阻断回归,保留普通 fail-fast。完整发现和浏览器显式 forbid-only。
|
||||
- 给原受管执行器增 `retained-server-local`,仅允许枚举的 workflow-actions/server-regressions,复用一次性库、构建、合成改密、guest probe及清理,单独选择回执且 normalReleaseEligible=false。不是完整门禁的替代,不新增真实写入或跳过开关。
|
||||
- 场景 19–22 按正式响应区分现行 batch-required 边界与仍保留的 legacy-disabled 合同。batch-required 分支检查批准/草稿/审批中/驳回/取消状态直接付款均拒绝、非财务 403、重复及并发请求拒绝、支付字段和发票均未变;不关闭付款批次开关求旧成功。原 legacy 分支保留,未执行就不宣称其成功路径通过。修正已改名负金额夹具引用,删除已无调用的旧经理任务/skip 辅助。
|
||||
- 定向真实回归先跑,按实际后续停点修当前在用断言;本轮不能把新定向通过拼接为普通 full-local 全绿。独立、WebKit、冻结差旅、R1 与外部批准仍开放。
|
||||
|
||||
## 2026-09-18 G12–G15 本地收口回执(当前入口)
|
||||
|
||||
官方current为本task,会话来源有效,状态仍in_progress。证据入口`artifacts/qa-layout/retained-gates-closeout-20260917`,受管运行入口`artifacts/qa-flow/retained-gates-closeout-20260917`;沿开始日期保留目录,不覆盖旧候选。用户连续执行批准限定本地合成/在用验收,未扩到真实操作或发布。
|
||||
|
||||
### 本轮结果
|
||||
|
||||
原58身份及54失败/4超时历史不回写。现53条已有当前合同重验证据(52浏览器、1静态函数),4条明确旧/冻结流程排除,1条WebKit报销离线证据因本机运行时缺失仍NOT_RUN,当前定向重验失败余额0。这里是跨轮逐项覆盖,不是一次53项全量运行,更不是53个已修产品bug;原排除项未批量skip或删除。
|
||||
|
||||
- G12:新增受管`retained-local`显式选择模式及一次性8角色合成改密前置,保留真实must-change约束。先验证管理员初始浏览器进入改密页,再由正式API串行验证8角色改密、旧密码401及新密码登录;业务并发阶段不改密码。普通full-local尚未接入该前置,`normalReleaseEligible=false`。
|
||||
- G13:页面定位、角色入口、明确绑定明细、企微只读边界与上海日历日合成输入已对齐。两条主链复用辅助流程;正式小额manager→finance审批、财务审批当前页completed、制单人403、无回单409、合成有效回单的worker失败留痕→人工更正→独立复核→付款登记、付款后只读/回单不可作废、审计/AP/票据归档/登出均在r6整例通过。预览只验UI签名/弹窗/正式PDF字节,不冒充headless原生阅读器渲染。
|
||||
- G14:r3的真实PWA A受控→同profile切B自动收敛通过,旧独有缓存0、新资源实际加载、worker摘要对应、无登录回退/静态404;根因是构建继承NODE_ENV=test,已仅固定Vite构建子进程production,服务仍test。WebKit保持未验。
|
||||
- G15:原58逐项结果映射、断言替代合同、当前QA和上批产品独立复核问题、4类外部事实清单已整理。独立review仍PENDING;最终治理/保护与候选摘要以同目录final-check-summary.json和candidate-integrity.json为准。
|
||||
|
||||
### 执行与失败过程
|
||||
|
||||
| 运行 | 完整结果 | 边界 |
|
||||
| --- | --- | --- |
|
||||
| auth-r2 | 1/1管理整例与8角色前置通过 | 非全量认证套件 |
|
||||
| mock-green-r1 | 11/11通过 | 10条历史映射+1合同DOM反例;DG7、leave另在先前轮有通过 |
|
||||
| real-cases-r1 | 11通过/13失败 | 初轮24条,不改旧报告 |
|
||||
| real-cases-r2 | 中断,无最终JSON | 环境/输入/清理有回执,过程日志不补造PASS |
|
||||
| real-cases-r3 | 8通过/5失败 | 包含真实PWA通过,零重试/跳过 |
|
||||
| real-cases-r4 | 浏览器前主动中断 | 内层dropdb因代理退出失败;外层owner校验删除容器/临时目录,ENVIRONMENT_INVALID,不计业务通过 |
|
||||
| real-cases-r5 | 1通过/4失败 | 手机报销整例通过 |
|
||||
| real-cases-r6 | 3通过/1失败 | 两条付款主链、进度通过;管理员旧入口预期失败 |
|
||||
| real-cases-r7 | 1/1通过 | 完整PC/移动角色矩阵及admin批次复核403 |
|
||||
|
||||
所有完整受管轮均核sourceUnchanged/repositoryUnchanged与归属清理。类型检查r3/r4/r6/r7通过;较早browser-types-r2因Node类型入口选择不对退出2,后续使用既有server类型目录,无安装。QA账号9、环境回归46、PWA工具26各自通过且分列,不累加为业务覆盖。r6/r7的72迁移与前端typecheck/production构建通过。未改产品逻辑/UI/schema;旧文档登记与Browserslist告警保留。
|
||||
|
||||
治理/process、四task validate、CURRENT敏感扫描、shell语法和diff检查通过;docs为0错误/既有22未登记文件告警。23个旧目录6946文件的精确集合/SHA、旧差异快照、HEAD/index均保持;本轮只在8个原脏文档/spec路径上追加计划与回执,其余旧差异内容不变。新增复核包另根冻结,独立仍PENDING。
|
||||
|
||||
### 后续余额与顺序
|
||||
|
||||
1. G14剩1条WebKit:补具备该运行时的受管本地环境后重验,不用Chromium冒充。
|
||||
2. 普通发布门禁另行接入串行合成账号初始化;明确4项旧/冻结观测在完整发现集合中的归属,旧日常OA流程与冻结差旅分别处置,不暗中skip/删冻结测试。现有服务端场景8/经理缺口仍按原记录核验,未被本轮浏览器结果抵扣。
|
||||
3. 原AC7的同状态管理权限正向对照和完整独立反例门禁尚未闭合;本轮合同只读+DOM泄露反例只支持其部分条件。R1仍需普通full-local全绿、完整耗时/覆盖和单独启用批准。
|
||||
4. 当前QA、上批报销/借款/ERP及K0等候选接独立只读复核;真实批次处理人/企微个人发送、银行样本、K1保管事实及K2新绑定按清单分别取得事实与授权。K0合成、历史恢复及新借款本地通过互不替代。
|
||||
|
||||
不连接生产/ARM,不读取真实配置密钥备份,不重跑旧恢复;未提交、推送、部署、归档、发送真实通知或付款。公网未据此更新,task原R1/完整验收未补勾。
|
||||
|
||||
## 2026-09-17 G12–G15接续执行(当前入口)
|
||||
|
||||
用户批准继续推进,官方current已切回本task。只做本地合成环境及在用验收;基线与独立输出为`artifacts/qa-layout/retained-gates-closeout-20260917`,包含上一批借款/ERP候选的保护。原58观测及此前15重验/4排除不回写。
|
||||
|
||||
- [x] G12:真实隔离DB的首次登录→强制改密→新凭据重登录,预置仅由运行所有者串行完成;测试并发阶段不改密码。运行随机初始密码经正式改密成为既有公开合成fixture值;不改共享helper或产品强制改密。
|
||||
- [x] G13:逐例重验10个页面/fixture观测与合同详情/AP权限;先复现,沿当前合同修测试,不降低权限或恢复旧布局。
|
||||
- [ ] G14:PWA双生产构建/同profile/真实SW已通过;本机WebKit缺失,1条仍NOT_RUN,不下载、不以Chromium或mock抵扣。
|
||||
- [x] G15:完成在用观测结果映射、独立复核问题清单、真实批次/银行样本/恢复事实核查清单及最终保护/治理回执。
|
||||
|
||||
复用现有测试入口和隔离机制,不启用R1或宣称全量发布门禁通过。inline独立复核PENDING;不连接生产/ARM、不读真实配置密钥备份、不重跑旧恢复、不提交推送部署或发送真实通知。
|
||||
|
||||
# 执行计划与阶段 0 基线记录
|
||||
|
||||
## 2026-09-17 G9–G11 本地执行回执(当前入口)
|
||||
|
||||
本轮最终交接合并到 `import-parser-fix-20260917/review-candidate-r2`,门禁分类/运行日志与浏览器材料的相对路径SHA另列;原报告和旧包不覆盖。重跑移动10项时显式选择 `r101-mobile-wip-closeout.spec.ts r6-mobile-unified-design-rollout.spec.ts` 并使用新运行名:当前临时config已加入G11文件,不能把无筛选重跑范围当作原10项范围。候选检查和主会话结论分别有记录,独立复核仍PENDING。
|
||||
|
||||
58条原观测身份/原报告SHA已逐一核对并分类:26登录前置、24页面/fixture、2已替代断言、3缺浏览器、1后续AP修复待整例、1PWA待定、1冻结差旅权限。按当前范围为40保留合同、14企微摘要/只读边界、4旧或冻结流程排除;企微主办不等于删除摘要/审计验收。原199/54/4/18和58分母不改。
|
||||
|
||||
本轮15条历史观测对应的当前用例已取得本地重验,4条明确排除,另39条保留项未整例重验;不是39个产品bug。历史原状态仍保留,新结果单独列于release-gate-triage-20260917/historical-failure-triage.json/md。无新增全量skip、无删用例、无产品UI/权限变化。
|
||||
|
||||
- R12:旧断言要求未知VALID_001原message回显,与09-05安全合同冲突。先红后修,固定安全兜底、合法/非法requestId、注册导入原因断言通过;同文件7项纯源码/函数回归通过,无浏览器/DB。
|
||||
- G10:R101三项+R6七视口10/10通过,修复旧首页标题、模糊报销heading和企微文案重复匹配。原导航、卡片、横向溢出、触控、无OA日常表单及截图检查保留。首轮mobile-red因本轮代理误拒loopback而3失败/1中断,未到业务,保留为环境失败;修正仅转发本轮静态源后mobile-red-r2四项分别到达目标红例,再修测试定位。未修改业务页面。
|
||||
- G11:R100首页、AP台账切tab、公告截止时钟漂移三项先红后修;公告固定浏览器与合成API共同场景时钟,并增加逾期补签分支。高敏附件删除旧例当前已通过,只补重验、不重复修改。最终retained-green 5/5通过;它与G10 10项覆盖不同用例,7项静态回归另列。
|
||||
- 本地仅client/dist只读静态源、合成API和Chromium。新runner前置证明静态200、API404、写405、外部代理403、仅当前loopback转发200;无后端/DB或外部上游,结束后两本地监听关闭。早期network摘要的upstreamConnections=0指外部上游,后续明确分为externalUpstreamConnections与loopbackProxyForwards。WebKit当前缺失,无下载;此环境block SW,不冒充PWA或完整受管诊断。
|
||||
|
||||
精确命令见同目录command.json;主要命令为`node artifacts/qa-layout/release-gate-triage-20260917/run-mock-browser.cjs mobile-green`(当时限定R101/R6)与`... retained-green --grep '手机首页和我的页可生成视觉诊断|BIZ8 AP|制度签收公告|高敏附件删除要求'`。纯函数回归为`cd client && node node_modules/@playwright/test/cli.js test tests/e2e/interaction-pattern-unification.spec.ts --workers=1 --retries=0 --reporter=line --output=../artifacts/qa-layout/release-gate-triage-20260917/static-contract-output`。直接筛选重验不是普通发布门禁。
|
||||
|
||||
后续39条细化设计已写design顶部:25登录前置、10页面/fixture、合同只读1、AP整例1、WebKit报销离线1、PWA1。保护初始密码必须修改的合同,先规划一次性合成账号生命周期;不改seed为免改密、不并发回写同一账号、不恢复旧日常OA请假/差旅。独立仍PENDING,R1/完整发布门禁未完成,未提交/推送/部署或真实业务/恢复操作。
|
||||
|
||||
## 2026-09-17 58条历史观测分类与在用测试修复
|
||||
|
||||
### G10 在用移动页定位修复(分类后的限定批次)
|
||||
|
||||
后续 G11 限定四个现行合成用例:R100移动首页同类旧标题、BIZ8财务台账需显式切当前tab、公告签收固定截止日期过期引起的时间漂移,以及高敏附件删除原例的当前重验。前三项只修已复现的测试入口/时钟,不更改产品标题、默认tab、签收规则或付款/附件权限;高敏附件例先重跑,若当前已通过则只登记后续修复证据,不重复开发。截图仍新目录、外部网络拒绝、零重试。未知产品行为差异继续保留,不以宽匹配/去断言替代修复。
|
||||
|
||||
R101三例及R6七视口仍验证移动首页、报销和企微只读请假说明,不是恢复OA日常考勤。历史停点为“今天”旧标题、模糊“报销”标题和两处企微文案的strict匹配。先在当前构建+原合成API下重现,只更新已证实漂移的定位,采用唯一一级标题/完整固定说明;保留无OA表单、布局/横向溢出/导航/截图等原行为断言,不加first/skip、不改产品样式。
|
||||
|
||||
使用现有Playwright测试及本轮只读静态服务器:绑定随机loopback端口,仅服务client/dist,拒绝API和写方法,无上游代理;浏览器其他网络走本地拒绝代理。每轮新输出根,R6截图显式指向本轮新目录,原output/归档截图不覆盖。已有构建可复用,若缺浏览器不下载、不把未运行记PASS。26条登录前置中20条明确落/change-password、2条/login、4条原waitForURL未提供最终URL;当前seed-dev强制改初始密码是安全合同,不修改为false或在共享helper里绕过。其修复需先设计独立合成账号改密生命周期,避免并发套件互改密码。
|
||||
|
||||
按用户最新批准接续,官方current已切本task并回读;09-05 B34产品定向回归922/922与前端构建已通过,本task接管门禁分类及限定测试修复。旧“58条不修”是原阶段授权时点,当前允许按在用性先规划后修;不解禁R1,不实施新权限规则、真实数据/外联/提交发布或借款。
|
||||
|
||||
- [x] G9-1:核原58条身份、失败层次、当前源码/合同与是否旧或待精简,形成逐项分类及后续最小验证,不把登录/环境错误混算产品缺陷。
|
||||
- [x] G9-2:先修R12当前安全提示断言漂移;保留红例和核心保护断言,补固定兜底/注册原因/排障编号的函数行为,纯本地测试。
|
||||
- [x] G9-3:分类后为仍在用组写限定实施顺序、环境前提和验收,不以已过定向测试扣减原58或称全量门禁已绿。
|
||||
- [x] G9-4:完成受影响检查、来源SHA和旧差异/冻结材料保护,更新09-08协调入口及独立复核交接。
|
||||
|
||||
本轮证据 release-gate-triage-20260917;产品输入与B34增量分开记录。历史原报告来自限定主checkout本地合成诊断,只读,不访问其真实环境配置或运行服务。
|
||||
|
||||
## 2026-09-17 历史发布回执接回(仅本地文档对账)
|
||||
|
||||
09-08本轮W8逐条件对账从主checkout同名task implement的“已按本候选例外完成部署(2026-09-09)”接回原文档引用,并核现有脱敏postcheck-result.json;不复制整份旧文档覆盖本副本,也不读取原始发布日志/环境或连接远端。准确来源/行号/摘要与布尔事实见acceptance-boundaries-20260917的historical-acceptance-review.json及historical-report-facts.json。
|
||||
|
||||
四处迁移状态谓词修复已随b87cc55发布;该事实仅闭合追加预检阶段,不代表R1普通完整门禁、阶段B合同用例或58条诊断观测已通过。R1/阶段B继续原冻结,先按保留在用场景分类再另定限定批次,不盲修待精简旧测试。
|
||||
|
||||
本次未执行新的发布、真实查询或业务写入;旧“未部署”段落是当时记录,不再代表追加阶段当前余额。原PRD未满足项不补勾,status/completedAt/历史commit不改,不归档。当前G8未提交产品增量仍待独立复核和新的交付授权。
|
||||
|
||||
## 2026-09-08 独立复核与提交授权
|
||||
|
||||
- 用户已独立复核通过归档恢复、输出隔离、全仓回执与摘要校验的 33 文件包;本轮只补记复核结论,不更改获批实现。
|
||||
@@ -469,3 +1066,14 @@ seed 交审前补正 Compose init 参数数组并新增执行测试后,再次
|
||||
- 预检缺陷定性是“该拦时可能拦不住”,未证明生产曾误放行。独立审查在其环境较大输出触发 141,但约 64KB 不是通用安全阈值;此前已有短输出捕获 producer=141/consumer=0 的记录,调度和管道实现都会影响触发,不采纳“日常绝不会触发”的推断。
|
||||
|
||||
两笔提交准备顺序:先 preflight(门禁 task 三文档、预检脚本、测试及 spec 对应增量),再 seed(原 17 文件范围,包含 F1/F2 手册补充和 seed task 最新状态;spec 只取 seed 增量)。共享 spec 第二笔以第一笔结果为基线。提交、推送、完整候选门禁与部署均未因此授权;当前只做隔离集成和定向验证。
|
||||
## 2026-09-18 用户批准后续六组工作的本地接续
|
||||
|
||||
新证据根submit-visual-closeout-20260918已保全352项旧差异、34目录12138份旧材料。先给全页面巡检补精确阶段计时,再由09-18-local-concurrency-product-fixes承接P9原提交事务诊断、定稿和修复;两项原整文件通过后,回本task从static执行新完整候选。保持原预算/并发/零重试,不复用旧完整绿灯;受管运行期间源码/测试/task/spec/docs冻结。
|
||||
## 2026-09-18 P9/全页面最小修复后验证
|
||||
|
||||
P9由09-18-local-concurrency-product-fixes完成单次预检实体读取与条件查询,原aggregate/事务/校验保持,相关unit已过;本task接续。全页面诊断9过/1超时,已按design去除500ms安静窗口之后的300ms重复等待,改精确poll间隔而非缩短500ms门槛。先专用类型与语法,再无预载R75原四项、完整报销付款链、视觉原六项,共三个完整文件重验;之后才从static跑新完整候选。预算/并发/零重试、独立及生产边界不变。
|
||||
## p9-fixed-r3终态及下一验收决策
|
||||
|
||||
三个完整文件11项10通过/1视觉超时,607.746秒,零skip/重试。R75四项与付款主链281.132秒通过;环境/输入/owner清理PASS、1347服务响应/0未处理异常。预检最小修复的原合成链验证已完成;全量可靠性仍未证明。视觉在同轮负载下只完成15页,未据局部通过关闭P9/P8/G20。
|
||||
|
||||
design已给出按既有角色+终端拆7组、保留33页面及强制完整覆盖的具体方案,改变累计预算边界,待用户批准;未实施拆分。其余已授权的本地静态/治理检查继续;没有直接盲重跑已知失败的完整浏览器候选,也不新增生产操作。
|
||||
|
||||
@@ -1,5 +1,57 @@
|
||||
## 2026-09-19 最新本地验收
|
||||
|
||||
g20-full-r6同一冻结候选完成static及12个full-local阶段,4437后端通过/1原条件跳过、372本地浏览器全过,零失败/跳过/重试。7组33页完整;PARTIAL仅dirty_candidate,localChecksPassed=true,无部署资格。R1真实入口启用及独立、公网12义务、旧registry保护例外仍开放;完整阶段/计时/来源边界与余额见implement顶部。历史FAIL原样保留,不能把本地通过写为所有交付完成。
|
||||
|
||||
## 2026-09-18 已批准视觉分组验收
|
||||
|
||||
33页矩阵改为7组、各180秒,共用一次计时合成准备;全部页面/断言/截图、全局并发和零重试保留。同一完整运行必须7组全过并精确覆盖33页,缺页/重复/未审完/失败或跳过组拒绝。设计与implement当前入口已同步;此批准仅替代全页面原累计180秒,不放宽其他门禁,不授权部署。
|
||||
|
||||
## 2026-09-18 G20 接续执行(最新用户批准)
|
||||
|
||||
用户在解释 WebKit 用途及五组余项后明确“按照这个规划开始执行,非必要不暂停,尽量做完”。本轮据此批准官方 Playwright WebKit 运行包下载到本轮独占缓存,及既定本地完整验收和共享候选回执机制实施;不再列下载授权待答复。仅运行包,不隐式安装系统包或修改共享缓存;业务测试继续无外联合成环境。
|
||||
|
||||
沿用 G19 分层合同。先补 WebKit 真实启动/报销离线敏感证据单例,再普通 full-local。受管运行期间源码/测试/task/spec/docs冻结,只写本轮 ignored artifacts。旧失败/旧候选不覆盖。
|
||||
|
||||
## 2026-09-18 G19 最新验收状态
|
||||
|
||||
分层验收已获明确批准并本地实施验证:完整发现65/365,351本地、12同候选公网义务、2冻结旧链。74项覆盖/runner、7项诊断检查和2条本地冻结保护通过;原完整full-r2仍失败,公网NOT_RUN_LOCAL、独立PENDING,R1未启用。具体合同、证据、失败保留及后续顺序见implement顶部;未提交部署或执行真实操作。
|
||||
|
||||
## 2026-09-18 G18 最新状态
|
||||
|
||||
OCR/R108/33路由项覆盖及三处限定产品修复已完成本地验证;最终18项共享入口、原四文件并发4/4及131定向unit通过。G18时点完整发现64/363,仅枚举;原full-r2仍失败,全部AC/R1不因局部绿自动补勾。产品PWA/采购归09-18-local-concurrency-product-fixes,当前结果/失败保留/分组余项详见implement顶部与local-coverage-g18-20260918。独立PENDING,无提交发布或真实操作。
|
||||
|
||||
## 2026-09-18 G19 分层验收(用户已明确批准,实施中)
|
||||
|
||||
用户批准:12 条公网用例作为同一候选发布后必跑项;2 条冻结差旅保留原源码与历史结果,改验冻结保护。本地通过不代表公网/完整交付通过,不授权部署、恢复差旅或真实操作。此增量替代 R2 的“排除集合为空”,不重写旧 full-r2 失败。
|
||||
|
||||
- [x] G19a:全体非 manual 用例继续真实发现,固定 12 live+2 frozen 的用例身份、原因、责任角色、必跑入口和原源码摘要;未指派实际负责人明确待定。
|
||||
- [x] G19b:由完整发现与受控合同生成本地执行文件集合,登记用例级覆盖;拒绝遗漏、身份漂移、未知/重复、跳过、重试与 expected-failure。禁止调用者筛选普通本地集合。
|
||||
- [x] G19c:新增两条冻结保护整例,验证现行合成角色入口/正式 API 拒绝、共享付款差旅 blocker 与入站导入权限拒绝;不改权限,不执行旧差旅链。
|
||||
- [x] G19d:公网义务在本地保持 NOT_RUN_LOCAL,绑定候选提交与源码摘要;公网用例结果只能由同候选、live profile、完整逐项通过报告兑现。验收回执不自授部署或发布资格。
|
||||
- [x] G19e:增加漏例/新增未知归属/漂移/伪通过/候选不匹配/真实 runner 选择等反例,运行本地冻结保护,更新 spec/协调 task 与新候选;独立仍 PENDING。
|
||||
|
||||
WebKit 下载问题仍待答复,完整普通门禁未通过;R1 机制后续与真实强制消费启用分开,不启用发布入口。所有旧差异、失败材料与冻结包保持。
|
||||
|
||||
# 部署门禁完整性与候选验收回执
|
||||
|
||||
## 2026-09-18 G18 在用OCR修正缺陷
|
||||
|
||||
恢复本地OCR条件覆盖后,实测暴露票据详情URL/本地状态双向回写导致无法点击人工修正。依当前范围只消除重复状态源,维持既有URL导航/权限/OCR业务合同;具体红例、修复与验收见implement顶部。G18其余覆盖和普通全量/R1/独立/外部余额继续分列。
|
||||
|
||||
## 2026-09-18 G16/G17 最新验收状态
|
||||
|
||||
普通 full-r2 已完整执行但失败:65/359,326 通过/12 失败/5 超时/16 跳过。后续 14 条原失败观测及 2 条串行未执行项已有定向通过;WebKit 1 条未验、冻结差旅 2 条保留。当前发现 64/358,无缺失/未知;发现包装器末尾临时 SHA 采集告警保留。原结果不改写、不拼接普通全绿,完整集合/运行可靠性、条件用例归属、R1 和独立审阅仍开放。最新执行与六组余额以 implement 顶部及 full-gates-followup-20260918 证据为准。原 AC 未以局部结果自动补勾。
|
||||
|
||||
## 2026-09-18 本地限定验收状态
|
||||
|
||||
G12/G13在本地受管合成环境完成;原58逐项为53已重验(52浏览器+1静态)、4旧/冻结排除、1WebKit未验。真实PWA双构建升级及报销两步审批/独立付款/回单/下游整例通过,所有结果只归对应定向候选,不修改原54失败/4超时的历史分母。G15复核与外部事实清单已备;独立PENDING,普通full-local账号前置/完整发现处置、原AC7及R1未完成。具体证据、失败轮次和后续顺序见implement顶部;未部署或执行真实操作。
|
||||
|
||||
## 2026-09-17 在用门禁分类与限定修复(用户已批准)
|
||||
|
||||
用户批准按最新余项建议实施。本轮先把原54失败/4超时的58条观测逐项接回当前源码与产品边界,区分现行合同、已被替代断言、旧/待精简路径、环境/登录前置和已由后续任务处理但尚缺整例重验的项。旧结果保持,不改分母、不批量skip,不把分类或定向通过冒充全量发布资格。
|
||||
|
||||
对已明确属于现行合同且能用本地合成输入验证的测试漂移,按implement先落最小批次再修复;新权限/业务/视觉规则不在本轮制定。当前首批为R12共享错误提示断言接回09-05已批准的安全兜底/原因码合同。生产/ARM、真实配置密钥备份、旧恢复、提交部署与借款不执行;R1启用仍未批准,独立复核不由inline自检代替。
|
||||
|
||||
2026-09-07 后续最小增量已批准:保全本轮四张截图、恢复已归档证据;两个 spec 仅调整输出路径,默认和受管调用均不得覆盖归档目录;回执增加完整 Git 状态、全仓已跟踪内容与 index 语义状态,限定源码不变与全仓不变分开判断。并入可定位的 14 张归档截图摘要校验,不读取恢复演练私有候选或生产文件,不宣称任意历史 SHA 均可本地重验。58 条环境有效观测保留,不重跑全套诊断,不启动合同阶段 B、认证迁移或 R1。
|
||||
|
||||
## Goal
|
||||
@@ -40,7 +92,7 @@
|
||||
### R2. 回执绑定来源和实际覆盖,不能由定向结果冒充
|
||||
|
||||
- 标准发布的 Playwright 执行必须显式传 --retries=0,覆盖 CI 环境下配置默认重试一次的行为;这是 R2 独立要求,不依附 PWA 是否存在。PWA 不要求全局 --workers=1,保留既有本地 4 / CI 2 workers 默认及文件内 serial。
|
||||
- 预期集合必须解释当前候选下每个非 manual spec 的归属:要么进入完整验收集合,要么进入显式登记且带原因、必跑入口、责任归属和验收证据的例外集合;不得两边都没有,也不能从回执自报 expected 或既有 acceptanceSpecs 子集反推全量。遗漏、未知归属或有登记却没有兑现执行义务均不能成为完整通过。本轮已批准采用 (a),排除集合为空,具体实现见设计第 8 节。
|
||||
- 预期集合必须解释当前候选下每个非 manual spec 的归属:要么进入完整验收集合,要么进入显式登记且带原因、必跑入口、责任归属和验收证据的例外集合;不得两边都没有,也不能从回执自报 expected 或既有 acceptanceSpecs 子集反推全量。遗漏、未知归属或有登记却没有兑现执行义务均不能成为完整通过。2026-09-18 已批准 G19:12 条公网义务在同候选发布后兑现,2 条冻结整链保留原源码/历史结果并由冻结保护替代当前执行;其余本地用例必须完整执行。完整交付须另核公网义务,不能把 NOT_RUN_LOCAL 计为通过。PWA 仍无例外,具体实现见 G19 及设计第 8 节。
|
||||
- 持久回执至少记录:完整候选提交、来源及校验策略摘要、执行 profile/模式、阶段状态与退出码、真实起止时间、工具链、实际筛选参数、预期和实际 spec 集合、用例集合及逐项结果、异常/跳过记录。
|
||||
- 环境事实属于同级必需输入:受管环境策略/runner/观测器摘要、运行平台、命名空间创建归属及可核验关系、原生在线探针和候选登录入口黑盒观测、观测作用域、环境检查/清理状态。缺失、未知或与当前受管 profile 不一致时不得获得完整验收或发布资格;不能只信调用者的 ONLINE=1、GATE_PASSED=1 或回执自报 environmentPassed=true。具体字段与判据见已批准的设计 §10;本轮实施验证状态见 implement.md。
|
||||
- spec 使用仓库相对路径;集合来源是当前候选下的真实发现与执行报告,不是人工声明“跑了全套”。同一 spec 内的 --grep 仍可能漏测,所以还必须核对用例级覆盖,并记录 grep、project、shard、only 等影响范围的条件。
|
||||
@@ -90,8 +142,8 @@
|
||||
- [ ] AC4:旧提交、脏树、输入变化、缺失/截断/中断回执、同文件漏用例、受管用例跳过/重试/expected-failure、伪布尔“已通过”均使发布验证非零退出。(R2)
|
||||
- [ ] AC5:两个 skip 开关各自及组合都验证:缺理由/批准引用失败;获批诊断为有留痕的 PARTIAL/非零;均不能进入普通发布。(R3)
|
||||
- [ ] AC6:真实源码变异移除入口验证、放宽 profile/来源/覆盖判定、恢复无记录 skip 时,对应隔离回归必须变红;断言按执行事件和集合语义,不 grep 某个 flag 字符串。(R1/R2/R3)
|
||||
- [ ] AC7:修复后的合同只读用例实际进入详情,续约/归档负向断言与管理身份对照均执行;人为暴露任一禁止动作时测试失败,不增加 timeout、不删断言。(R4)
|
||||
- [ ] AC8:既有部署安全、来源和 49 项 db 生命周期回归保持有效;夹具升级不得引入测试专用发布绕过口或削弱 fake 工具防泄漏检查。(R5)
|
||||
- [x] AC7:修复后的合同只读用例实际进入详情,续约/归档负向断言与管理身份对照均执行;人为暴露任一禁止动作时测试失败,不增加 timeout、不删断言。(R4)
|
||||
- [x] AC8:既有部署安全、来源和 49 项 db 生命周期回归保持有效;夹具升级不得引入测试专用发布绕过口或削弱 fake 工具防泄漏检查。(R5)
|
||||
- [ ] AC9:本 task 的覆盖核对、回执反例及已批准用例修复通过;原样完整本地运行及全部未通过、未覆盖部分如实留痕,dirty 诊断不具备发布资格。额外红项阻断完整候选资格与 R1 生效,不用聚焦绿抵扣;本地机制 diff 可单独交只读独立复核,但不得宣称完整门禁已绿。相关 spec/docs 及治理检查完成,不要求先偷偷提交来取得发布回执。(R1–R5)
|
||||
|
||||
## Post-task Authorization Gates
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"id": "release-gate-integrity",
|
||||
"name": "release-gate-integrity",
|
||||
"title": "部署门禁完整性与候选验收回执",
|
||||
"description": "本轮§11归档截图保护与全仓回执增量:保全并恢复四图,两个spec仅改截图输出路径,增加完整Git/tracked/index快照及14张登记证据校验;64项QA与typecheck通过,待独立复核。不重跑全套,不扩认证/业务断言,场景8/经理缺口/R1挂起。",
|
||||
"description": "G18在用覆盖和三处产品修复已本地验证;原四文件并发4/4、认证/OCR18/18通过。全量合同、WebKit、R1、独立及真实操作仍开放。",
|
||||
"status": "in_progress",
|
||||
"dev_type": null,
|
||||
"scope": "release-gate",
|
||||
@@ -12,7 +12,7 @@
|
||||
"assignee": "shunli",
|
||||
"createdAt": "2026-09-06",
|
||||
"completedAt": null,
|
||||
"branch": "main",
|
||||
"branch": "codex/20260919-reviewed-candidate",
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
@@ -21,6 +21,155 @@
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "2026-09-07 §10已实施并完成一次环境有效的全套诊断,增量待用户独立复核。原21文件加6个QA环境/测试文件,共27文件;本轮产品源码和业务spec零改动,51项针对性验证通过。前三次启动在环境前置拒绝,资源已核对清理;修复跨user namespace读取父namespace的EACCES,改由父runner经本轮Unix IPC即时实测,不降级。第四次环境PASS、源码前后不变:65文件275项,199 passed/54 failed/4 timedOut/18 skipped,58条观测涉及36文件,不是独立产品缺陷计数;诊断仍PARTIAL/2。服务端193文件1692项通过,workflow场景8两个来源仍失败。R102 6/6通过;合同仍卡旧更多,续约/归档未执行;PWA在serviceWorker.ready超时且该失败无trace附件。诊断67分03秒不是普通全绿成本。旧207撤销决策资格但保留原件;阶段1、阶段B、场景8、经理缺口和R1均未扩大执行。无提交/push/归档/部署/生产操作,整体任务未完成。",
|
||||
"meta": {"archiveOutputProtection": "implemented_pending_independent_review", "registeredLocalEvidenceVerified": 14, "runtimeScreenshotsPreserved": 4, "targetedQaTestsPassed": 64, "fullDiagnosticRerun": false}
|
||||
"notes": "2026-09-19 根据用户对重复全浏览器成本的反馈,中止budget-full-r1;后端4446与PG28通过保留,浏览器29通过/4中断/339未运行,回执FAIL/130,环境清理PASS。待Claude实际补丁复核,发布完整门禁延期,不再重跑无关测试。\n2026-09-19 预算并发修复已定向通过 PG28/单测526;待新完整候选与独立审查,旧r6为历史输入。\n2026-09-19 用户独立核实确认4437/r6时序及累计diff基线,并报告当前采购测试75 passed/EXIT=0、SHA一致;数量与证据归属争议闭合。完整独立业务review、发布边界及两条例外保持。\n2026-09-19 用户转述局部审查已核对:UTC/北京时间混用及累计diff误作运行后diff;r6实际在P10之后,4437准确,1162源码快照条目与当前一致。证据review-provenance-20260919.json,完整独立review仍PENDING,原证据不改。\n2026-09-19 g20-full-r6:4437后端通过/1原跳过,372本地浏览器全过;PARTIAL仅dirty_candidate,独立PENDING/无部署,旧registry保护例外保留且无新增漂移。当前余额见implement顶部。\n2026-09-18 G19分层验收已批准并本地实施验证,74+7合成检查和2条冻结保护通过;公网12义务/完整门禁/WebKit/R1/独立及真实事实保持开放。\n2026-09-18 G18:QA39、产品131、并发4/4、认证/OCR18/18,33路由项与R108通过;G18时点发现64/363;G19最新发现见g19-discovery/summary.json,旧完整full-r2仍失败。候选与余项见local-coverage-g18-20260918。无提交部署,独立PENDING。\n2026-09-18 G16/G17:普通 full-r2 65/359仍失败;14原失败及2串行缺失已有定向通过,1WebKit/2冻结差旅保留。当前发现64/358,有临时SHA采集告警;QA/治理/保护与增量候选见 full-gates-followup-20260918。整体in_progress、独立PENDING,六组余项见implement顶部,无提交部署/外部操作。\n2026-09-18 G12/G13本地收口,G14真实PWA通过但WebKit1条未验;原58现53重验/4排除/1未验,原历史不改。G15复核及外部事实清单与新候选在retained-gates-closeout-20260917;普通full-local/AC7完整/R1和独立PENDING,不提交部署或真实操作。\n2026-09-17 W8本地对账:四处迁移状态谓词修复已随b87cc55发布;该事实仅闭合追加预检阶段,不代表R1普通完整门禁、阶段B合同用例或58条诊断观测已通过。R1/阶段B继续原冻结,先按保留在用场景分类再另定限定批次,不盲修待精简旧测试。 原回执从主副本接回,见implement顶部;本轮无新的远端/提交发布,原验收未补勾。\n2026-09-07 §10已实施并完成一次环境有效的全套诊断,增量待用户独立复核。原21文件加6个QA环境/测试文件,共27文件;本轮产品源码和业务spec零改动,51项针对性验证通过。前三次启动在环境前置拒绝,资源已核对清理;修复跨user namespace读取父namespace的EACCES,改由父runner经本轮Unix IPC即时实测,不降级。第四次环境PASS、源码前后不变:65文件275项,199 passed/54 failed/4 timedOut/18 skipped,58条观测涉及36文件,不是独立产品缺陷计数;诊断仍PARTIAL/2。服务端193文件1692项通过,workflow场景8两个来源仍失败。R102 6/6通过;合同仍卡旧更多,续约/归档未执行;PWA在serviceWorker.ready超时且该失败无trace附件。诊断67分03秒不是普通全绿成本。旧207撤销决策资格但保留原件;阶段1、阶段B、场景8、经理缺口和R1均未扩大执行。无提交/push/归档/部署/生产操作,整体任务未完成。",
|
||||
"meta": {
|
||||
"archiveOutputProtection": "implemented_pending_independent_review",
|
||||
"registeredLocalEvidenceVerified": 14,
|
||||
"runtimeScreenshotsPreserved": 4,
|
||||
"targetedQaTestsPassed": 64,
|
||||
"fullDiagnosticRerun": false,
|
||||
"g16g17": {
|
||||
"ordinaryFullResult": "FAIL",
|
||||
"originalBrowserCases": 359,
|
||||
"focusedRevalidatedOriginalFailures": 14,
|
||||
"revalidatedSerialOmissions": 2,
|
||||
"currentDiscoveredCases": 358,
|
||||
"independentReview": "PENDING",
|
||||
"normalReleaseEligible": false
|
||||
},
|
||||
"g18": {
|
||||
"currentDiscoveredCases": 363,
|
||||
"currentDiscoveredSpecs": 64,
|
||||
"concurrentGroupPassed": 4,
|
||||
"authOcrPassed": 18,
|
||||
"ordinaryFullResult": "FAIL",
|
||||
"independentReview": "PENDING",
|
||||
"normalReleaseEligible": false
|
||||
},
|
||||
"g19": {
|
||||
"state": "LOCAL_VERIFIED_PUBLIC_PENDING",
|
||||
"discovered": 365,
|
||||
"localMandatory": 351,
|
||||
"publicMandatory": 12,
|
||||
"frozenRetained": 2,
|
||||
"coverageTests": 74,
|
||||
"freezeProtectionPassed": 2,
|
||||
"independentReview": "PENDING",
|
||||
"normalReleaseEligible": false
|
||||
},
|
||||
"latestLocalCandidate": {
|
||||
"run": "g20-full-r6",
|
||||
"localChecksPassed": true,
|
||||
"receiptStatus": "PARTIAL",
|
||||
"browserPassed": 372,
|
||||
"publicPending": 12,
|
||||
"independentReview": "PARTIAL_WITH_BLOCKING_FINDING",
|
||||
"deploymentEligible": false,
|
||||
"legacyProtectionStatus": "FAIL_ONE_KNOWN_DERIVED_REGISTRY",
|
||||
"newProtectedDrift": false,
|
||||
"productionNumberingActivated": false
|
||||
},
|
||||
"reviewProvenanceReconciliation": {
|
||||
"status": "CONFIRMED_BY_USER_INDEPENDENT_CHECK",
|
||||
"evidence": "artifacts/qa-layout/submit-visual-closeout-20260918/review-provenance-20260919.json",
|
||||
"r6BackendPassed": 4437,
|
||||
"earlierBackendPassed": 4428,
|
||||
"currentSourceDigestMatchesR6": true,
|
||||
"independentReview": "PROVENANCE_CONFIRMED_FULL_BUSINESS_REVIEW_PENDING",
|
||||
"deploymentEligible": false,
|
||||
"confirmedScope": [
|
||||
"test counts",
|
||||
"UTC and Asia/Shanghai chronology",
|
||||
"incremental diff baseline",
|
||||
"release eligibility boundary",
|
||||
"retained exceptions"
|
||||
],
|
||||
"reportedFocusedRetest": {
|
||||
"source": "user-provided independent verification",
|
||||
"file": "server/tests/unit/routes/purchase-request.errors.test.js",
|
||||
"passed": 75,
|
||||
"exitCode": 0,
|
||||
"sha256Prefix": "2b9ec41d",
|
||||
"rawLogInspectedByMainSession": false
|
||||
},
|
||||
"countAndProvenanceDispute": "CLOSED"
|
||||
},
|
||||
"claudeBusinessReview20260919": {
|
||||
"status": "PARTIAL",
|
||||
"source": "user_provided_claude_report",
|
||||
"rawReviewerLogsObtained": false,
|
||||
"blockingFindingsReported": 0,
|
||||
"pending": [
|
||||
"feeControl budget/expense-standard semantics",
|
||||
"reimbursements concurrency/transaction paths",
|
||||
"K0 contract and local coverage",
|
||||
"remaining consumers/pages/migrations after targeted coverage check"
|
||||
],
|
||||
"evidence": "artifacts/qa-governance/trellis-0617-review-followup-20260919",
|
||||
"deploymentEligible": false
|
||||
},
|
||||
"claudeBusinessFollowup20260919": {
|
||||
"status": "PARTIAL_WITH_BLOCKING_FINDING",
|
||||
"reviewerTask": "b1rubx7qf",
|
||||
"report": "artifacts/qa-governance/business-followup-claude-review-20260919T023537Z.txt",
|
||||
"reportSha256": "b48e5f53340e139e5a97b5fdcb6d7003881a80a8a08d4004d01aaa6a759d2d0b",
|
||||
"reviewerExecution": "STATIC_SOURCE_AND_EXISTING_TEST_REVIEW_ONLY",
|
||||
"feeControlP9": "PASS_SCOPED",
|
||||
"reimbursementLocksAndRecheck": "PASS_SCOPED",
|
||||
"budgetPoolConcurrency": "FAIL_CONFIRMED_STATIC",
|
||||
"findingId": "BUDGET-LOST-UPDATE-01",
|
||||
"remediationStatus": "LOCAL_VERIFIED_INDEPENDENT_REVIEWED",
|
||||
"remediationTask": ".trellis/tasks/09-19-budget-pool-concurrency",
|
||||
"k0Contract": "PASS_STATIC_CONTENT_REVIEW",
|
||||
"k0Observations": "BOUNDARIES_CLARIFIED_NOT_RUNTIME_VERIFIED",
|
||||
"remainingCoverage": [
|
||||
"workflow snapshot internals",
|
||||
"withdraw/pay/link-project business branches beyond lock presence",
|
||||
"remaining crypto consumers as applicable"
|
||||
],
|
||||
"evidence": "artifacts/qa-governance/business-followup-reception-20260919",
|
||||
"deploymentEligible": false,
|
||||
"remediationReviewResult": "artifacts/qa-governance/budget-pool-concurrency-20260919/review-fixes-20260919/claude-result-20260919T044304Z.md"
|
||||
},
|
||||
"budgetPoolPatchCandidate": {
|
||||
"task": ".trellis/tasks/09-19-budget-pool-concurrency",
|
||||
"run": "budget-full-r1",
|
||||
"status": "INTERRUPTED_NOT_PASS",
|
||||
"targetedPostgresPassed": 28,
|
||||
"targetedUnitPassed": 526,
|
||||
"independentReview": "PASS_SCOPED_BUDGET_PATCH",
|
||||
"deploymentEligible": false,
|
||||
"backendTestsPassed": 4446,
|
||||
"backendFilesPassed": 225,
|
||||
"localChecksPassed": false,
|
||||
"releaseFullGate": "DEFERRED_UNTIL_RELEASE_PREPARATION",
|
||||
"interruption": "User objected to repeated full browser testing; remaining run stopped and owned environment cleaned.",
|
||||
"followupEvidence": "artifacts/qa-governance/budget-pool-concurrency-20260919/review-fixes-20260919",
|
||||
"reviewFixTestsPassed": 928,
|
||||
"requiredReviewFindingsOpen": 0,
|
||||
"remediationStatus": "LOCAL_VERIFIED_INDEPENDENT_REVIEWED"
|
||||
},
|
||||
"releasePreparation": {
|
||||
"status": "LOCAL_COMMIT_AUTHORIZED_RELEASE_PENDING",
|
||||
"executor": "main Codex session",
|
||||
"request": "artifacts/qa-governance/release-preparation-claude-request-20260919.md",
|
||||
"scope": "read-only candidate inventory and actionable release preparation",
|
||||
"testsAuthorizedInThisStep": false,
|
||||
"commitPushDeploymentAuthorized": false,
|
||||
"report": "artifacts/qa-governance/release-preparation-claude-20260919T050016Z.md",
|
||||
"reportSha256": "42fffaf6bc7f81e45bf959eed7a24acb0a773f05fd97cb473a0c5e49273b49e5",
|
||||
"nextRequest": "artifacts/qa-governance/release-commit-packaging-claude-request-20260919.md",
|
||||
"plannedCommitCount": 2,
|
||||
"jsonlDecision": "INCLUDE_REAL_CONTEXT_ENTRIES",
|
||||
"pythonFixtureDecision": "INCLUDE_TEST_ONLY_STDLIB_DEPENDENCY",
|
||||
"localCommitAuthorized": true,
|
||||
"pushAuthorized": false,
|
||||
"deploymentAuthorized": false,
|
||||
"r1ActivationAuthorized": false,
|
||||
"priorClaudePackagingRequest": "SUPERSEDED_BY_USER_REQUEST",
|
||||
"commitEvidence": "artifacts/qa-governance/local-commits-20260919",
|
||||
"firstLocalCommit": "729d90576f25ba658656508af1af32a179aa7057",
|
||||
"commitResultReceipt": "artifacts/qa-governance/local-commits-20260919/result.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# 执行计划
|
||||
|
||||
## 2026-09-17 历史发布回执接回(仅本地文档对账)
|
||||
|
||||
09-08本轮W8逐条件对账从主checkout同名task implement的“已按本候选例外完成部署(2026-09-09)”接回原文档引用,并核现有脱敏postcheck-result.json;不复制整份旧文档覆盖本副本,也不读取原始发布日志/环境或连接远端。准确来源/行号/摘要与布尔事实见acceptance-boundaries-20260917的historical-acceptance-review.json及historical-report-facts.json。
|
||||
|
||||
AP实现已随b87cc55发布。运行制品及权限策略核验有据,真实账号AP接口/页面当时NOT_RUN;六个view_all未收窄,不重新部署或扩大权限修复。
|
||||
|
||||
本次未执行新的发布、真实查询或业务写入;旧“未部署”段落是当时记录,不再代表追加阶段当前余额。原PRD未满足项不补勾,status/completedAt/历史commit不改,不归档。当前G8未提交产品增量仍待独立复核和新的交付授权。
|
||||
|
||||
## 2026-09-08 付款账户配置只读核对与候选纠偏
|
||||
|
||||
- 用户附件要求综合判断后续部署与业务恢复,并提出核对此前配置的建行付款账户。本轮只读核对配置,不将附件中的提交/推送建议、批量主体回填建议或业务付款建议转换为执行授权。
|
||||
|
||||
@@ -34,6 +34,6 @@
|
||||
"server/tests/unit/routes/exports.apOperations.test.js",
|
||||
".trellis/spec/hyb-oa/security-privacy.md"
|
||||
],
|
||||
"notes": "",
|
||||
"notes": "2026-09-17 W8本地对账:AP实现已随b87cc55发布。运行制品及权限策略核验有据,真实账号AP接口/页面当时NOT_RUN;六个view_all未收窄,不重新部署或扩大权限修复。 原回执从主副本接回,见implement顶部;本轮无新的远端/提交发布,原验收未补勾。\n",
|
||||
"meta": {}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# 业务闭环方案(分阶段实施,发布状态见执行记录)
|
||||
|
||||
## 2026-09-17 历史验收证据分层与余项处置
|
||||
|
||||
复用原22task/231条件索引,逐项保留原文、原勾选、原行号与当前行号;每项给出人工判读、来源文档/摘要、已有支持与下一步。状态仅表示历史支持/部分证据/外部待事实/后续合同替代/原冻结/条件未触发,不自动授予AC或归档。原106勾选不改;文件存在、Git包含与历史文档陈述均不能单独证明当前运行验收。
|
||||
|
||||
来源分execution和primary两个本地副本,引用仅保存仓库相对路径与SHA,不写完整本地位置;只接回允许的安全摘要,不读原始生产日志/配置/备份。09-07 AP、09-09 seed和09-06追加预检的b87cc55发布回执在primary副本,接回后仅更正旧状态,不覆盖旧原文或扩大本次授权。
|
||||
|
||||
三类技术余项归09-05 design:B34损坏导入优先提出安全错误合同,D15低年份按待精简工资/保留统一考勤分开,D16 AP反向ledger区间保持现合同。B34尚未修复、D15新年份规则尚未决定;范围确认完成不等于可直接发布。
|
||||
|
||||
独立交审仍两个主题:K0原6payload包、G8最终368payload累积产品包。逐件SHA/精确集合和当前运行时身份可核;本轮纯文档增量另列,不能因文档变更重跑全部产品/恢复或复制一串新产品包。当前inline只做主会话核查,独立内容审查与重跑各自PENDING/NOT_RUN;不将manifest完整性当作独立PASS。
|
||||
|
||||
## 2026-09-15 统一收口编排
|
||||
|
||||
以本task implement作为唯一协调清单,各模块原task仍为实施合同。执行顺序:事实对账→待办/通知缺口及错误原因并行准备、串行代码实施→配对恢复工具与受控操作包→合成联合验收→按范围分笔提交/整批发布→自然业务观察。一个模块的外部等待不暂停其他模块;不能为追求“一次完成”跳过独立审查或混合权限状态机改动。
|
||||
|
||||
@@ -1,5 +1,666 @@
|
||||
## 2026-09-19 当前进度:本地完整验收通过
|
||||
|
||||
g20-full-r6从static完成同一冻结候选:后端4437通过/1原条件跳过、372本地浏览器全过,零失败/跳过/重试;33页与33PNG、采购/报销付款整链、新旧编号及财务同页进度全部通过。回执PARTIAL仅dirty_candidate,localChecksPassed=true,无部署资格;环境/输入/归属清理PASS。
|
||||
|
||||
编号N5和P6–P10本地验收完成。余项为独立只读复核、R1真实入口/干净候选/提交部署及12项公网义务、生产编号摘要与启用、原task外部业务/K1/K2证据,以及旧WebKit派生registry保护异常。原保护FAIL保持,r6没有新增漂移,其余12137旧文件与HEAD/index不变;旧恢复不重跑。无提交推送部署/归档或线上编号启用。
|
||||
|
||||
详尽结果、真实计时口径、证据入口及授权边界统一见09-06-release-gate-integrity/implement.md顶部。本次运行结束后的变更仅为task收口记录,原回执绑定运行时冻结输入,不能代表记录更新后整树。独立PENDING,整体in_progress。
|
||||
|
||||
## 2026-09-19 四文件定向通过,接完整候选r6(当前入口)
|
||||
|
||||
r5-fixed-r2四完整文件31/31通过,浏览器约5.5分钟、受管总571.747秒,零跳过/重试;采购整链、R75四项、付款提交至归档全链及视觉25项通过。付款约244.773秒,保持300秒;视觉7组各180秒、25PC+8手机/33PNG全部完成、覆盖问题与findings为空。环境/source/repository/owner清理PASS。原r5完整FAIL与r5-fixed-r1登录跳转失败均保留,不拼接为完整通过。
|
||||
|
||||
P10采购提交后读取边界167/167及QA专用类型已通过;登录仅在无query/hash的规范/login复用,保留原表单/portal/profile断言。下一g20-full-r6从static开始普通完整候选,全部源码/测试/task/spec/docs冻结,只写本轮ignored证据;N5/G20及产品完整负载验收仍待终态,独立PENDING、生产编号未启用。
|
||||
|
||||
旧WebKit派生registry保护异常保留,原baseline不改;后续运行使用本轮独立WebKit副本,不下载或安装。禁止将一处已知漂移描述为全部旧材料零变化;无提交推送部署或真实操作。
|
||||
|
||||
## 2026-09-19 r5结果与本地续修(当前入口)
|
||||
|
||||
完整r5未通过:static及11浏览器前置阶段通过,后端4428通过/1原跳过;372本地浏览器为367通过、1失败、2超时、2串行未执行,零重试。采购PATCH保存P2028、视觉admin最后一页及付款下游耗尽预算,均保留原失败。R75、新旧BX/PB和财务同页进度已在本轮完整负载通过,但N5/G20仍开放。
|
||||
|
||||
采购P10将仅供响应的多级详情读取移到写事务提交后,保留锁/校验/写入/审计与5000ms;原实现4红、修后167/167通过。视觉/付款仅减少重复RPC和同角色重复登录,7组180秒及付款300秒、全部断言/并发/零重试保持,专用类型通过。官方current 09-06继续四个原完整文件定向,之后冻结输入从static跑新完整候选。
|
||||
|
||||
旧WebKit自动生成registry出现一处字节变化,原保护FAIL与改写副本保留,未重签baseline;其余12137旧文件及HEAD/index不变。后续WebKit使用本轮物理独立副本;Chromium等既有只读二进制链接保留。独立PENDING、生产编号未启用,无提交推送部署或真实操作。
|
||||
|
||||
## 2026-09-19 完整候选接续
|
||||
|
||||
grouped-visual-r1完整文件25/25通过(7真实组+13覆盖正反例+5原到达用例),浏览器91.788秒、受管总352.799秒;25PC+8移动全部审完,33PNG、findings为空、覆盖问题为空,环境/输入/owner清理PASS,零跳过/重试。P9/编号N5/G20仍待新完整负载验收;由官方current 09-06从static开始g20-full-r5,运行时全部受管输入冻结,独立PENDING。
|
||||
|
||||
## 2026-09-18 P9与全页面分组接续(当前入口)
|
||||
|
||||
P9最小优化已在服务器请求内共享权威报销预检读取,并删除同事务已有数据的重复查询;5000ms/锁/权限/预算/审批原子性保持。无预载p9-fixed-r3的R75四项与付款完整链通过,只有视觉累计180秒超时,不能写作新完整通过。
|
||||
|
||||
用户已明确批准33页按角色/电脑手机拆为7组、每组180秒;全部页面/断言/截图/全局并发/零重试保留,新增精确覆盖与失败组拒绝。09-06正在实施与定向验证,随后冻结输入从static开始普通完整候选;后端完整单测4428通过/1原条件跳过,644输入核验零变化。下文原33页累计180秒及P9未实施为历史状态。
|
||||
|
||||
N5/G20/P9完整验收仍开放,独立PENDING、生产编号未启用。旧差异/34目录12138旧证据保护,本轮仅本地合成,不提交推送部署或读取真实资料。
|
||||
|
||||
## 2026-09-18 编号本地实现与浏览器专项收口(当前入口)
|
||||
|
||||
编号矩阵经小团队可读性、财务核对、旧业务/银行引用、并发容量、切换回退与维护成本复核,已按批准范围完成本地实现:BX按月;PB/JK/HK/CG/PD/自动PRJ按年;FA/EA永久递增。旧号、已有草稿规则归属、来源快照和银行行身份保留;迁移默认不激活,线上仍未启用。
|
||||
|
||||
官方current已回09-06-release-gate-integrity。本轮numbering-browser-closeout-20260918取得:新旧BX的PC/手机列表搜索详情最终1/1通过;新旧PB与混合来源消费者通过;付款路由自然排序完整129/129通过;浏览器专用类型通过;browser-r2真实合成报销付款链通过(含财务同页进度与回单核销归档)。编号后端/PG原证据及冻结包保持,各轮结果不拼作新完整通过。
|
||||
|
||||
原DG7/R3整例已通过,视觉文档404和认证前置问题已按证据修复;普通G20仍受两项阻塞:33路由全页面180秒超时(最新13页到达),R75报销提交P2028(5412/5000ms)。后者已在09-18-local-concurrency-product-fixes登记P9待分析/设计/实施,未凭猜测改业务事务。后续先分别完成耗时分析与P9最小方案/回归,再原整文件定向及从static重新完整门禁,纳入两条新增编号用例,不改预算/并发/重试求绿。
|
||||
|
||||
编号N5和G20保持未完成,独立只读复核PENDING。受管环境/输入/清理PASS,352项旧差异快照、31目录11427份旧证据按本轮保护检查核验;最终治理/保护/增量候选回执在新证据根单列。未读真实配置/密钥/备份,未连接ARM或重跑恢复,未提交推送部署、生产写入或真实企微付款。当前阶段不请求重复实施许可;未来生产摘要及启用仍需明确授权。
|
||||
|
||||
## 2026-09-18 编号实施接续(历史阶段)
|
||||
|
||||
用户已明确授权复核编号矩阵适合后实施。官方current进入09-18-reimbursement-periodic-numbering;新计数/策略及创建入口本地已实现;完整后端4412通过/1原跳过,之后策略边界补验456/456及隔离PG复验通过;迁移默认不启用、旧编号/未编号草稿归属及银行引用保留。该任务证据单独存business-numbering-20260918,未覆盖本task的任何失败/冻结包。原G20四未过、后续完整门禁、独立PENDING与公网义务保持,不把编号单测/PG通过折算为G20通过。未提交推送部署、未读取生产编号分布或启用线上策略。
|
||||
|
||||
## G20 八文件定向结果与编号调研续项
|
||||
|
||||
g20-affected-r1结束FAIL,806.364秒;34项30通过、2超时、2失败,零重试。环境/source/repository/owner清理PASS。资产、R75原整文件、PA6角色矩阵、R92与onboarding通过;DG7首页整例和R3直连整例超时,全页面文档请求缺text/html Accept触发404,付款整链在财务通过后的API会话读取失败。阶段日志已证明发票popup完成,不再猜该处卡住。原失败保留;后续需逐项证据修复,再从static完整候选,当前不能全量结案。
|
||||
|
||||
用户已选报销按月,随后新增要求调研全部在用编号及国内财务/OA/ERP惯例,结合不足10人科技初创公司。归属09-18-reimbursement-periodic-numbering,当前只读调研/更新规划,尚未改编号代码;其他编号实施范围待定,不将调研视为生产改号授权。
|
||||
|
||||
## 2026-09-18 新增编号规划(待周期决定)
|
||||
|
||||
用户认为报销序号长期累计不合适,已建09-18-reimbursement-periodic-numbering规划。建议按月BX-YYYYMM-0001,旧单/已有草稿不改号、付款规则不动;偏好问题待答,未实施编号新规则。原G20本地缺陷修复继续,不因新规划暂停或隐式授权生产变更。
|
||||
|
||||
## 2026-09-18 G20 第四轮终态与续修
|
||||
|
||||
g20-full-r4 FAIL,5768.636秒;static239.024秒PASS,内部11阶段PASS;后端4367通过/1原条件跳过,8组启用服务回归通过/7组原关闭不计通过;浏览器351项=342通过/5失败/3超时/1串行后继未执行,零重试。环境、source/repository未变和owner清理PASS。资产及账号创建两处P2028由09-18-local-concurrency-product-fixes接最小修复;当前不是全量通过。
|
||||
|
||||
QA续修保持原分母、预算、并发和断言:DG7确认停在登录输入框,改为自动等待既定账号入口;R92导航后回登录,user-onboarding提交改密后失去会话,核路由mock与SW/refresh会话边界;PA6确认第7次角色登录耗尽180秒,同角色PC/移动复用一次独立会话,保留全部角色/入口/管理菜单/API403;全页面180秒只到9/33页,利用真实应用导航减少重复装载,保留25PC+8移动/14系统页、目标文档HTTP、实际URL/标题及全部视觉/错误断言。报销付款整链300秒超时但无精确动作栈,先增加安全阶段诊断和查实际停点,不先猜产品根因或放宽预算。R75后继跳过随原整文件重验,不能当通过。
|
||||
|
||||
顺序:产品边界红/绿与相关回归→各在用QA夹具/冗余前置修复→原完整文件定向验证→冻结输入、从static开始新完整候选。定向通过不拼接旧完整结果,主会话检查不抵扣独立PENDING。原失败、322项旧差异及29目录9762旧文件保护不变。
|
||||
|
||||
用户另行明确批准仅查看线上指定PB-20260917-001审批人;北京时间12:14只读确认draft/3项pending、无复核/执行,真实业务提醒对象为负责人,个人应用消息已有发送成功记录(不证明已读),另两名称为测试的在职经理账号符合现有资格。仅查询,没有业务/配置/企微写入;核实其用途和待办引用后才可提出权限收回,不自动停用。此授权不扩展到ARM、备份、恢复、生产改动或部署。
|
||||
|
||||
## 2026-09-18 G20 接续执行(最新用户批准)
|
||||
|
||||
完整候选前三轮失败原样保留:r1生命周期超时,r2清理退出结构漂移已修,r3两项生命周期超时。当前已减少假命令重复启动开销并保持完整命令trace;52生命周期+22初始化+39安全共113/113通过。下一g20-full-r4从static重新全量执行,351本地浏览器集合未变,不以定向结果替代完整门禁。
|
||||
|
||||
G20a WebKit报销离线1/1已验,当前仅证明官方Debian11冻结运行时v2105/26.0。G20c本地共享回执机制已实现,168项QA及39项部署安全通过;最终补充反例和普通完整运行继续,结果见09-06顶部及本轮证据。旧差异322项和29目录/9762文件保护通过;未提交部署。
|
||||
|
||||
用户在解释 WebKit 用途及五组余项后明确“按照这个规划开始执行,非必要不暂停,尽量做完”。本轮据此批准官方 Playwright WebKit 运行包下载到本轮独占缓存,及既定本地完整验收和共享候选回执机制实施;不再列下载授权待答复。仅运行包,不隐式安装系统包或修改共享缓存;业务测试继续无外联合成环境。
|
||||
|
||||
沿用 G19 分层合同。先补 WebKit 真实启动/报销离线敏感证据单例,再普通 full-local。受管运行期间源码/测试/task/spec/docs冻结,只写本轮 ignored artifacts。旧失败/旧候选不覆盖。
|
||||
|
||||
- [x] G20a:建立旧差异/冻结材料保护基线,官方包独占下载、运行时依赖/启动探针,WebKit原单例重验。
|
||||
- [ ] G20b:普通完整 full-local(351本地用例+配套后端阶段),零重试/默认并发/原预算,保留所有失败及真实阶段耗时;只修在用缺陷/已批准合同漂移。
|
||||
- [x] G20c:实现来源/策略/环境/阶段/实际覆盖共同绑定的共享候选回执与离线验证入口,复用现有G19/sourceSnapshot/environment,不新增发布平台。设计细节补在design后再编码。
|
||||
- [ ] G20d:逐项反例、fake命令捕获、源码变异和既有部署生命周期回归;只验证机制,不连接真实发布入口强制消费。
|
||||
- [ ] G20e:本地检查、规约/协调状态、独立复核交接与新候选冻结;外部事实/12公网义务/真实R1启用/提交推送部署保持分别授权。
|
||||
|
||||
新证据:artifacts/qa-layout/release-receipt-g20-20260918。主会话inline,独立PENDING;无生产ARM、真实配置密钥备份、真实企微付款/恢复或旧恢复重跑。WebKit与后续本地实施连续推进,不以范围内常规决定反复暂停。
|
||||
|
||||
## 2026-09-18 G19 分层验收已实施并完成本地针对性验证(最新状态)
|
||||
|
||||
用户已明确批准分层方案,已正式更新 R2 并落门禁:全部非 manual 仍发现;12 公网逐项保留为同候选发布后必跑;2 条冻结差旅原源码/历史结果保持,当前改验两条冻结保护。没有恢复权限或旧整链,没有公网/企微/真实付款操作。
|
||||
|
||||
- 最终发现 **65 文件/365 用例**:**351 本地用例(59 文件)、12 公网义务、2 冻结旧链**,0 遗漏/未知/重复。351 已包含两条新保护,分母不重复加数;发现不等于执行。
|
||||
- 受控清单绑定用例身份/原源码摘要/原因/入口/责任角色。普通 runner 从完整发现派生执行集合,并校逐项结果;漏例、漂移、未知、重复、跳过、重试、expected-failure、伪通过和候选不一致拒绝。定向仍无发布资格。
|
||||
- 门禁 **74/74** 与诊断结果 **7/7** 合成检查通过,含真实 runner 调用及删除覆盖消费的源码变异。首轮夹具独占文件问题、第二轮五项30秒超时均保留;最终单独运行使用原预算,没有增加超时或降低断言。
|
||||
- `g19-freeze-r2` **2/2** 真实本地浏览器通过:合成员工创建403/无差旅导航,普通财务对账和三类导入403/无差旅导航,财务主管共享付款就绪检查包含差旅冻结 blocker。环境/输入/清理 PASS。首轮测试读取不存在的 me.permissions 失败已保留,改验正式 roleCodes 与接口行为。
|
||||
- 当前财务主管仍有 integration.manage,受管合成 runner 仍为既有底层回归启用 travel sync;没有声称所有差旅接口关闭。旧整链未通过/未执行,不因保护通过改写历史。
|
||||
- 本地回执明确公网 NOT_RUN_LOCAL、完整交付 INCOMPLETE、normalReleaseEligible=false。离线公网结果验证器要求 live profile、同源码/部署候选及原始逐项结果;未接真实部署入口,不能独立证明远端身份。实际公网责任人尚未指派,证据仍缺。
|
||||
|
||||
本地证据、新候选及余项:`artifacts/qa-layout/local-coverage-g18-20260918`。最终验证/保护/候选摘要分别为 final-check-summary.json、protection-result.json、candidate-integrity.json;旧完整 full-r2 保持失败,未重跑普通全量。主会话检查不是独立审阅,独立 PENDING。
|
||||
|
||||
### 接续顺序与余额
|
||||
|
||||
1. WebKit 官方独占缓存下载问题仍待答复;其真实离线用例未验。条件齐备后跑 **普通完整门禁**,不拼接定向绿;不得恢复旧差旅或放宽并发/预算求绿。
|
||||
2. G20:基于 G19 最终归属合同继续共享候选回执/逐阶段验证/skip和变异反例;真实 R1 强制消费启用另行批准。先完整阶段与 source/environment 绑定,再 fake 工具验证零发布写入,最后独立复核;当前未启用真实入口。
|
||||
3. 独立只读复核现有 K0/报销付款/借款/QA 与本次产品候选;inline 自检不抵扣。
|
||||
4. 经另批范围补真实付款复核人及企微个人发送事实、银行接受性、K1 保管/K2 新绑定、事件/自然业务证据;旧恢复不重跑。
|
||||
5. 经明确授权后提交推送、干净候选完整门禁/独立重跑、部署,再兑现 **同候选12条公网义务**。未部署前不能告知可公网测试。
|
||||
|
||||
借款 T1–T4、报销同页进度/付款排序/候选人通知事实展示、ERP 专属精简与 strict 遗留0保持此前本地成果;本轮无提交/推送/部署/归档,不把本阶段完成说成所有任务结束。
|
||||
|
||||
## 2026-09-18 G18 接续结果(最新协调入口)
|
||||
|
||||
本轮完成OCR能力接线、R108现行报销/离线队列覆盖、14系统页展开及真实路由到达验收;修复票据详情URL双写导致的人工修正失效。另由09-18-local-concurrency-product-fixes拥有PWA更新事件缺口及采购创建事务缩短:不改权限/审批/审计、事务或浏览器预算、并发/重试。
|
||||
|
||||
- 最终共享入口回归 g18-final-ux-ocr-r4:18/18通过,含完整认证/门户16项与OCR2项;新PWA生命周期13项连同采购回归共131项Vitest通过,QA接线39项按未变输入复用。
|
||||
- 不带预载的 g18-concurrency-fixed-r3:原资产/采购/付款/PWA四文件4/4通过,583.240秒;4 workers/零重试/原预算,995服务响应、0未处理异常。PWA文档B/active controller/worker摘要、68新缓存和2实际加载资源、旧独有缓存0,零登录回退/静态404。
|
||||
- R108已完整通过:8移动观测/0发现,员工审批403、经理正式通过,当前approve/return/no-reject及离线队列;路由验收25PC+8移动、14系统页、0发现,另5个正反对照通过。只证明矩阵内覆盖。
|
||||
- G18时点完整发现64文件/363用例,缺失/未知/重复0;枚举与临时构建摘要采集成功,仅枚举不等于执行。所有完整受管轮均核环境/source/repository/owner清理,失败原件保留。
|
||||
|
||||
此前两次并发采购P2028和PWA未收敛均保留。诊断区分了事件循环拥堵/池排队与PG等待(729采样未见Lock);这不是全仓CPU根因证明。原full-r2 65/359、326 passed/12 failed/5 timedOut/16 skipped保持失败,最新候选未再跑普通整套,局部结果不能拼接全量通过。
|
||||
|
||||
证据/新复核包入口:artifacts/qa-layout/local-coverage-g18-20260918。最终治理、敏感/diff、保护与冻结以final-check-summary/protection-result/candidate-integrity为准;主会话检查不代替独立PENDING。保留304项原差异快照、27旧目录/9004文件以及HEAD/index,不覆盖旧冻结包。
|
||||
|
||||
### 尚需推进
|
||||
|
||||
1. 12条公网用例和2条冻结差旅的验收归属:入口/责任角色/证据缺口已列g18-gate-ownership.json;G19分层验收已获用户明确批准并完成本地实现/验证,12项公网仍须同候选发布后执行,未运行公网。
|
||||
2. WebKit真实运行条件及现有离线用例未验;此前官方独占缓存下载问题仍待答复,不联网安装。
|
||||
3. 条件齐备后完整普通门禁及R1共享回执/拒绝反例;独立只读复核与R1真实强制消费启用单列,不能用本轮定向绿抵扣。
|
||||
4. 真实付款处理人/企微个人发送、银行/OCR样本、K1保管事实/K2新绑定、事件和自然业务证据仍未执行;旧恢复不重跑。
|
||||
5. 提交/推送、干净候选完整验证、部署/公网验收仍需原明确授权。借款T1–T4、ERP退役、strict遗留0保持此前本地完成,未据此上线。
|
||||
|
||||
后续具体状态与最小步骤见remaining-work.json;当前task及协调task保持in_progress。
|
||||
|
||||
## 2026-09-18 G16/G17 门禁接续结果(最新协调入口)
|
||||
|
||||
官方 current 仍为 09-06-release-gate-integrity。普通完整 full-r2 已运行:65 文件/359 用例,326 passed/12 failed/5 timedOut/16 skipped;后续 14 条原失败观测已有当前合同定向通过,另补原 R75 串行未执行 2 条;WebKit 1 条缺运行时、冻结差旅 2 条保留。当前发现 64/358 对应严格重复付款整例退役,无缺失/未知;枚举包装器临时摘要采集告警保留。不是一次全量通过,原结果不回写。
|
||||
|
||||
账号强制改密/场景8及批次付款拒绝/资产编号/合成通知配置已接现行合同;合同管理对照和原只读整例 4 类实际页面动作非零反例完成本地验证。审批进度、付款、回单、核销/PDF/审计/AP 整链及真实 PWA 单独通过。PWA/事务/长链的完整并发稳定性不据单独通过关闭。20 路由项视觉矩阵通过,但 `/system/*` 未展开,不能称全部页面覆盖。
|
||||
|
||||
本轮证据与增量候选在 full-gates-followup-20260918;旧 25 目录/7656 文件及 290 项原差异快照按 protection-result 核验保留。最终检查/候选摘要见同目录回执,独立 PENDING。借款 T1–T4、ERP 退役与 strict 遗留 0 维持此前本地完成,旧“借款尚未实施/ERP17余额”是历史状态。
|
||||
|
||||
余项按 09-06 implement 顶部六组接续:G18 本地 OCR/R108/真实路由覆盖;完整集合归属与并发可靠性;WebKit;R1/独立审阅;真实批次/个人通知/银行/K1/K2/恢复事件及自然业务事实;最后才是另批提交发布。真实处理人/企微个人发送尚未查询,借款未据此上线。未连接生产/ARM、读取真实秘密配置备份、重跑旧恢复、提交推送部署归档或发送真实通知/付款。
|
||||
|
||||
## 2026-09-18 在用门禁本地接续收口(最新协调入口)
|
||||
|
||||
官方current已切回09-06-release-gate-integrity并完成G12/G13及G15本地交接:原58观测现53重验通过(52浏览器+1静态)、4旧/冻结排除、1WebKit缺运行时未验,原54失败/4超时不回写。真实PWA同profile升级、报销主管→财务审批且财务当前页进度更新、独立付款/回单/核销/审计/AP/票据归档整例通过。只修保留测试/QA前置,未追加产品权限/UI;证据及新复核包在retained-gates-closeout-20260917。
|
||||
|
||||
本轮消化此前39条保留未验中的38条,1条WebKit仍开放;不是清空全部发布条件。普通full-local尚未接新合成改密、4排除项完整发现归属/冻结流程、原AC7管理对照与独立反例、场景8及R1保持余额,具体顺序已写09-06 design/implement。借款T1–T4和ERP退役维持上批本地完成,独立PENDING、真实批次姓名/企微个人结果未查、银行样本/K1/K2/自然业务及发布条件仍开放。没有提交推送部署、生产/ARM/秘密备份访问、真实通知付款或重跑旧恢复。
|
||||
|
||||
## 2026-09-17 本批本地完成回执(最新协调入口)
|
||||
|
||||
本次三项已执行到本地验证:09-04财务审批原地进度与付款单号自然排序修复,追加付款待办姓名/站内提醒对象/企微个人发送事实;09-17借款本金台账到还本、回单、核销与会计交接T1–T4;09-17 ERP专属退役(6个service、1个job、14个专属测试)。共享企微/通知/outbox、历史迁移和冻结材料保留,工资/绩效/预算不退役。strict遗留基线已随最后17条ERP源码移除到0。
|
||||
|
||||
借款最终72迁移、9组PG约束/并发、16组正式认证HTTP、3组PC/手机/员工403浏览器通过;报销原地进度15/15、ERP后付款128/128与各受影响回归、最终typecheck/build及Prisma通过。官方current保持09-17-company-loan-principal-repayment,借款和ERP task仍in_progress;精确回执/本批冻结候选见对应implement顶部。
|
||||
|
||||
未部署、公网不可据此认定更新;真实付款批次姓名与企微送达未查。独立只读复核PENDING、真实银行/OCR样本、实际密钥保管/恢复事实与发布前条件仍开放。下面39条历史门禁和恢复/真实业务缺口保留,不能被本轮合成通过自动关闭。未提交推送、不连接生产/ARM、不读真实配置/密钥/备份、不重跑旧恢复。
|
||||
|
||||
# 执行顺序(本地技术审查/修复已批准,真实业务动作另批)
|
||||
|
||||
## 2026-09-17 新指示:真人问题、借款实施、精简
|
||||
|
||||
用户新增三项执行指示。优先顺序调整为:09-04修财务审批后进度原地更新及付款详情报销单号排序;09-17沿既有公司借入人民币本金台账与归还方案进入本地实施;精简从已明确不接ERP的专属消费者和确定废弃测试开始审查依赖并另立具体删除合同。下文借款暂缓属于历史安排,不再代表当前开发优先级。39条旧门禁重验保持记录,按本次触达范围执行必要回归。
|
||||
|
||||
借款本地仅合成身份/资料/隔离库,不生成真实余额或付款;恢复/密钥保管、独立复核及迁移发布前条件仍开放,不由开发优先级调整抵扣。精简不删历史表/迁移/冻结包/审计,不把企微同步摘要或通知outbox随ERP删除;工资绩效等仅候选模块先核明确范围。提交推送部署、真实业务写入与恢复仍未授权。
|
||||
|
||||
## 2026-09-17 门禁接续结果与剩余(最新协调入口)
|
||||
|
||||
本轮交接入口:`import-parser-fix-20260917/review-candidate-r2`,19文件增量及关键回执与旧G8/K0/历史验收包分开保留;包外完整性回执与主会话检查不抵扣独立PENDING。三个相关task上下文及本地治理检查通过,官方current回读仍为本09-08协调task;原任务状态不改成全完成。39条后续重验、独立复核和外部事实缺口仍按下述规划推进。
|
||||
|
||||
B34账号导入已完成本地修复,09-05的922项定向回归与前端typecheck/build通过。09-06随后完成58历史观测逐项分类、R12安全合同及移动/公告/AP在用测试漂移修复:10项移动浏览器+5项公告/AP/附件浏览器+7项纯源码/函数回归分别通过,未改UI/权限规则,也不相加为一次全量门禁。
|
||||
|
||||
58条中15条对应当前用例已获本地重验、4条旧日常OA请假/冻结差旅按用户取舍排除、39条保留项尚未整例重验。原历史54失败/4超时不回写、不直接扣数;剩39是观测,不是39个产品缺陷。下一按09-06 design完成合成账号强制改密生命周期与登录前置、10条页面/fixture及合同/AP整例、WebKit和PWA环境合同。不得通过关闭强制改密、放宽权限、批量skip或恢复旧布局求绿。
|
||||
|
||||
新材料分为import-parser-fix-20260917与release-gate-triage-20260917;旧审计/G8/K0包保留,新产品增量需与G8原候选一起独立复核,不能再称当前运行时代码与G8逐字相同。独立仍PENDING。W3恢复、W4事件、W7自然业务、W8未满足验收、原人工复审节点及不提交部署/借款边界保持。考勤日常在企微,D15非阻塞技术记录不扩修。
|
||||
|
||||
## 2026-09-17 接续实施:B34 已完成本地修复
|
||||
|
||||
09-05已修损坏账号导入的解析错误与日志边界:固定400原因、未知解析故障安全500,两入口14个坏格式场景无业务访问/原异常日志。最终2文件922项(68导入+854原因断言)及前端typecheck/build、strict/self-test通过;不是922个真实业务场景,独立仍PENDING、未部署。新材料 import-parser-fix-20260917,旧冻结包保持。下方“B34尚未实施”不再代表当前状态。
|
||||
|
||||
下一连续推进09-06的58条历史观测分类:保留当前产品合同、排除明确旧/待精简路径、辨别前置环境/登录失败与真实断言漂移,再按限定方案修仍有意义的用例;不把旧观测直接当58个产品缺陷,也不启用R1/恢复旧考勤或开展借款。恢复/事件/自然业务、独立复核与提交部署仍各守原边界。
|
||||
|
||||
## 2026-09-17 用户考勤澄清后的余项更正(当前入口)
|
||||
|
||||
考勤日常操作在企业微信完成,OA 保留摘要、解释、同步状态和审计;依据用户本次澄清、docs/产品设计规则.md 与现有 AttendancePage 文案。此前 D15 是 OA 汇总查询对极低年份的技术观测,不是企微考勤故障;不能据此安排恢复旧 OA 打卡或开发新的考勤规则。
|
||||
|
||||
D15 从本轮必修/待用户决策清单移出,保留为非阻塞技术记录;原年份限制建议未获采纳,不称已修复,不把仍保留的企微同步/摘要代码整体当作废弃。下方旧表的“统一考勤待年份规则决策”以本节及 09-05 最新合同为准。下一本地修复优先项仍为 B34 损坏账号导入;独立复核、完整发布门禁、恢复/事件证据及自然业务验收等原缺口不受此澄清抵扣。此次仅追加四份任务说明,旧记录和冻结包保持,不修改产品源码。
|
||||
|
||||
## 2026-09-17 本轮对账与范围确认回执(当前入口)
|
||||
|
||||
W8已从“只有索引”推进为22任务/231原条件逐项证据处置:154有历史支持、56部分证据、11外部事实待补、4被后续合同替代、4原范围冻结、2条件未证明触发。这里没有231个新测试、没有整体完成率;原106勾选和所有未满足条件保持。82个原显式引用均可在已限定本地副本定位,旧行号只作hint;本轮按当前正文重新定位,不能把文件存在当内容验收。每项的具体支持、限制、下一步及相对路径/文档SHA见acceptance-boundaries-20260917/historical-acceptance-review.json与同名md。
|
||||
|
||||
### 新接回事实与避免重复工作
|
||||
|
||||
- 09-07 AP、09-09 seed分离、09-06追加迁移预检已随b87cc55发布;接回主checkout原task记载与安全postcheck摘要,未复制整文件覆盖或读原始生产日志。三原task顶部/notes仅补本时点对账,旧记录保留。
|
||||
- 普通完整发布门禁仍有实质缺口:R1/阶段1及阶段B保持原冻结,历史有效环境诊断199通过/54失败/4超时/18跳过、58条观测不是全绿。该项归09-06,不被G8的17ERP余额代表;下一先分在用/被替代/待精简用例,不盲修旧分支或继承例外发布授权。
|
||||
- assets强制事前批准、旧发票灰度/自动建明细规则、PC主列历史布局等已被后续确认替代的4项,不再按旧PRD重新开发;保留历史对照,不勾成原要求通过。
|
||||
|
||||
### 三类边界的最终处置
|
||||
|
||||
| 余项 | 本次证据与结论 | 下一步 |
|
||||
| --- | --- | --- |
|
||||
| B34损坏账号导入 | 9个合成路由探针中,两入口×3损坏格式共6例500,CSV两例日志收到合成单元格标记;接口未回显、DB调用全0 | 仍在用的账号导入需修,固定安全解析错误/日志方案已落09-05 design;本轮是确认,不称已修复 |
|
||||
| D15低年份 | 两个真实helper的6组年月证实0000/0001/0099偏移;旧考勤服务已有年份守卫 | 工资待精简/未用helper/硬关闭旧考勤不补;统一考勤保留入口低优先级,接受年份策略单列待确认,不改存量数据 |
|
||||
| D16 AP反向ledger区间 | 现有列表/导出2文件73/73通过,共享where维持上下界和deleted过滤 | 保持原200与查询语义,不列必须修复项;实际PG未在本轮执行,非法日历及pending反向原400保持 |
|
||||
|
||||
### 复核交接及本轮边界
|
||||
|
||||
K0原6payload与G8最终368payload两主题的manifest/SHA/精确集合均核;运行时输入保持。本轮任务文档更新单列差异,不覆盖旧冻结包、不重新生成累计产品包。独立内容review仍PENDING,独立重跑NOT_RUN,主会话不派子代理或冒称独立通过。现有inline限制使本轮只能完成交接,非再次索取同一操作授权。
|
||||
|
||||
仅本地文档、源码读取和合成探针;未改server/client运行时、未读取真实配置/密钥/备份或连接生产/ARM,未重跑旧恢复,未提交/推送/部署/归档/实施借款。最终5个受影响task validate、Trellis/process/docs/敏感/diff及逐项锚点/探针语法检查通过,docs保留既有22未登记文档告警;5495份旧材料集合/SHA、HEAD/index保持,162份旧差异155逐字不变/7仅追加,14份增量全部为任务文档/notes;原9/25、9/30、10/2、10/5人工节点未提前执行,无定时任务。
|
||||
|
||||
## 2026-09-17 历史验收实质对账与三类边界确认(本轮已批准)
|
||||
|
||||
用户已批准按上一轮建议实施。本轮复用09-08协调W8历史证据及W1独立交接,09-05拥有W6三类技术边界决策;先方案后检查,不把“确认范围”解释为更改业务年份/AP规则或借款实施。官方current已用task.py切回09-08并回读,状态in_progress;原G8及更早材料5495份、162份旧差异与HEAD/index建立保护基线,新证据单独保存acceptance-boundaries-20260917。
|
||||
|
||||
- [x] A1:以既有22任务/231条件索引为起点,逐条件核原PRD、现存实施回执及可用本地脱敏证据;当前PRD变化另记增量,不覆盖原索引。每项写明支持、局限、可复核锚点、剩余和最小下一步;源码包含/文档记载/本地验证/独立/发布/真实业务分别判断,不凭复选框或Git祖先关系宣称全验收。
|
||||
- [x] A2:检查旧证据的失效引用与不同副本路径,只接回已存在的本地安全报告/源码/测试。找不到时明确缺哪份,不读取真实配置/原件/备份或原始生产日志,不补造过去的运行/人工确认时间。
|
||||
- [x] B1:低年份Date.UTC:确认调用链、当前在用/冻结模块及可观察偏移。仅合成探针;提出保留/限制年份的兼容决策,待精简模块按用户取舍排除,不改变历史数据。
|
||||
- [x] B2:AP反向区间:核列表、导出、页面与已有回归,区分合法但无匹配的范围与日期本身非法;记录是否存在写入/越权影响及最小处理选项。未批准新业务规则前保持原200/空结果语义。
|
||||
- [x] B3:损坏CSV/XLSX:用内存合成数据核实际解析库、路由错误封装和副作用边界;对仍在用的入口固定安全错误合同方案,解析错误与IO/内部故障不混为一类。先确认,不改产品源码或放宽输入限制。
|
||||
- [x] C1:只读核K0与G8最终候选manifest/输入身份,整理2主题独立复核交接及发现问题的处理门禁;inline主会话不得充当独立结论,不重复打产品累积包。
|
||||
- [x] C2:更新现有PRD/design/implement及必要notes,完成22任务结构/引用/数量一致性、限定合成探针、task validate、Trellis/process/docs/敏感/diff与保留对账。文档为主,不重跑无关全量产品、前端构建或旧恢复。
|
||||
|
||||
完成判据为本轮对账与范围确认可供复核,不能等同22任务全结案。旧17处ERP明确排除、原22文档/Browserslist告警不扩治;未来人工复审日期不提前执行或自动延期;W2提交/推送/部署、W3真实保管/恢复、W4远端观察、W7自然业务及W9借款保持原边界。无生产/ARM、真实密钥配置备份访问,不重跑旧恢复,不提交推送归档。
|
||||
|
||||
## 2026-09-17 在用错误合同收敛与旧代码排除(最新协调入口)
|
||||
|
||||
按用户连续处理及“旧/待精简代码不必解决”的最新取舍,09-05 G8完成57处保留路径,46新原因;strict 831注册/822迁移/17遗留、17指纹/1源文件,findings空。余17均为ERP专用旧分支,产品规则明确当前/未来不接ERP,按要求保留而不修;逐字构造体及精确基线清单已核。G1–G7扫描范围无旧命中,G8需修余额0/明确排除17,不称全系统无错。以520入口计已处理503、跳过17;546分组总入口则处理529,数字不可混用。
|
||||
|
||||
本轮G6、G7、G8候选均另包保护;G6 1014、G7 1078分别对应自身最终输入,不相加称一次验收。G8最终19文件1093/1093,typecheck/Vite/PWA通过;24 JS语法、治理/task/敏感/diff通过;4884旧材料与HEAD/index保持,31增量另包,独立PENDING。详情以09-05 implement及error-debt-g8-20260917为准。auth只有合成JWT/员工;企微和AI只mock;队列retry只重置pending,不发真实消息。旧22文档/Browserslist告警不扩治。
|
||||
|
||||
W5本轮限定“保留在用路径错误合同”实施收敛,原人工复审节点仍未执行、17条原到期信息保留,用户排除取舍不是自动延期。W1独立PENDING;W2未提交推送部署;W3恢复/W4事件/W7真实自然业务/W8历史验收/W9借款及日期低年份/AP区间/损坏解析各自边界仍开放,不把本轮进展说成只剩部署。
|
||||
|
||||
## 2026-09-17 G7与用户取舍更新(最新协调增量)
|
||||
|
||||
09-05完成G7查询/考勤/在岗/周报/审计/搜索/导出错误合同,49新原因、42旧命中退出,strict 785注册/778迁移/74遗留、73指纹/16源文件;15文件1078/1078本地合成回归。AuditLogsPage沿原错误区接安全resolver;legacy网页考勤仍硬关闭。详细可达性、初轮夹具修正、构建治理与新候选归09-05及error-debt-g7-20260917。
|
||||
|
||||
用户新指示:旧代码或待精简代码不必解决。改为在用路径优先,明确弃用/计划移除的命中记录依据后跳过,不为清零追加工作,也不擅自删除代码或延期基线。已完成改动保留;G8先分类,产品规则和路线图明确ERP当前与未来均不接入,因此ERP旧分支退出本轮修复范围。通用outbox仍处理通知,不能整文件当ERP删除。其他W线、旧冻结包/差异、独立PENDING及本地/真实数据/外联/提交部署/借款边界不变。
|
||||
|
||||
## 2026-09-17 G6本地接续回执(最新协调增量)
|
||||
|
||||
09-05完成共享审批、流程定义、审批规则和两组委托API错误合同:43新原因、49旧命中退出,strict为736注册/745静态迁移/116遗留、114指纹/24源文件,主链例外0。16文件1014/1014本地合成回归通过,阶段计数不累加。流程定义页面复用resolver显示安全错误。
|
||||
|
||||
B28a单列修复普通用户委托查询的OR覆盖缺陷:既有本人范围与有效期改用AND,原管理员权限不改;4个范围红例后修复、34委托用例通过,内存where matcher非真实PG或JWT。不可达后置防御只静态覆盖。四源结构核对除该明确例外外保持业务结构;独立PENDING。新材料error-debt-g6-20260917,旧冻结材料保持,最终类型/构建/治理及保护结果见09-05本轮回执。
|
||||
|
||||
接下来连续处理G7查询考勤周报42、G8系统集成74,先按具体分支补合同,不因分组完成停工。其他W线与真实配置密钥/备份/生产/ARM/提交推送部署归档/借款边界不变,不把扫描清零等同全系统验收。
|
||||
|
||||
## 2026-09-17 G5采购资产合同连续处理(最新协调增量)
|
||||
|
||||
09-05连续完成合同/采购预算、资产、流转盘点、采购申请附件七源错误合同:131新原因,120旧命中精确收敛,余额165命中/163指纹/28源文件(693注册/699迁移,主链例外0)。各原状态/权限/冻结、附件安全及副作用顺序保持。最终19文件1095/1095、前端typecheck/Vite/PWA、15 JS语法、strict与治理通过,原告警保留;新候选与回执见09-05 implement和error-debt-g5-20260917,阶段数不累加。
|
||||
|
||||
G1–G5本扫描器收敛,G6审批委托49/G7查询考勤周报42/G8系统集成74继续。3365份旧材料含G4冻结包保护;新候选独立PENDING。真实业务/恢复/人工节点/日期剩余边界和W2不提交发布、W9不实施借款保持,不能把扫描收敛说成全系统验收。
|
||||
|
||||
|
||||
## 2026-09-17 G4差旅连续处理(最新协调增量)
|
||||
|
||||
09-05完成差旅申请、订单/授权/交易、共享预算与对账54原因及62旧命中收敛,余额285命中/277指纹/35源文件(562注册/599静态迁移,主链例外0)。修复关联项目未定义parseUuid导致500,3个红例后成功回归;原权限/业务规则保持。最终13文件764/764含584固定文案断言,各阶段数不累加。证据error-debt-g4-20260917。
|
||||
|
||||
共享预算原先尝试ledger、对账默认409、申请风险helper先行调用都如实保留,不冒称零写入/真实回滚。G1–G4扫描器范围收敛,G5–G8仍285。2915旧材料与G3冻结包保护,独立PENDING;W2/W3/W4/W7/W8/W9和原真实配置/数据/远端/提交部署边界不变。
|
||||
|
||||
## 2026-09-17 G3基础资料连续处理(最新协调增量)
|
||||
|
||||
09-05沿授权连续完成主数据/供应商、日历、费用标准/类型、假别/模板及项目错误合同。新增103原因、精确删除86命中/86指纹;strict为508注册/544迁移/347遗留(339指纹、42源文件),主链例外0、findings空。八源业务结构对照保持,项目收口项先行初始化清单例外已明确,不虚报全失败零写入。各阶段本地合成结果以09-05 implement和error-debt-g3-20260917为准。
|
||||
|
||||
最终8文件811/811、前端类型检查/Vite/PWA及语法/task/治理通过,原告警保留;本轮21文件增量与新候选已留证,独立PENDING。G1–G3本扫描器已收敛;G4–G8仍347,不等于运行故障数。原2482份保护材料与B11–B14冻结包只读;独立PENDING。W2提交发布、W3恢复、W4事件、W7自然业务、W8历史验收、W9借款及低年份/AP区间等边界不变。
|
||||
|
||||
## 2026-09-17 B11–B14连续处理(最新协调增量)
|
||||
|
||||
按用户继续授权,09-05连续完成预算共享/控制规则与员工账号/部门/档案/附件操作原因。新增88原因,87次遗留命中收敛,剩433命中/425指纹(405注册/477静态迁移、主链例外0);G1/G2分组无本扫描器遗留,G3–G8继续开放。product-final为22文件775项本地通过,附件增强断言另按attachments-final;各阶段数不累加,详细回执以09-05 implement和error-debt-b11-g2-20260917为准。
|
||||
|
||||
最终前端typecheck/Vite/PWA、语法/task/治理通过,原告警保留;2091旧材料与HEAD/index保持,本轮22文件增量,冻结候选与主会话检查另存。六源原权限/状态/查询写入/事务结构保持;新增上传精确尺寸异常映射仍为生产原400,下载阻断安全message/必要审计保留。仅合成DB/文件/随机源和mock fetch,未触及真实配置、人员、附件、备份或远端。保护旧包/差异,新候选独立PENDING。W2提交发布、W3恢复、W4事件、W7自然业务、W8历史验收、W9借款边界不变;不能把G1/G2扫描收敛视作全部工作完成。
|
||||
|
||||
## 2026-09-17 546处债务分组与B10(最新协调增量)
|
||||
|
||||
针对用户“这500多处遗留错误怎么解决”,09-05已把546次AST命中/526指纹/58源文件逐文件互斥归为8组、约28个实施切片,并规定逐操作合同、三方文案、负例/无副作用、页面消费、精确减基线和到期门禁。数字是错误合同债务,不能等同独立功能故障;未来复审/期限不变,同类本地实施继续自主进行。
|
||||
|
||||
本轮先完成预算/绩效两路由B10,25个原因替代26次遗留命中,余额520次/501指纹/56源文件;317注册、398静态迁移、主链例外0、findings空。预算/绩效状态、权限、事务和冻结规则保持,3个页面已有resolver;预算共享服务/控制规则余13处列为下一切片。product-final 7文件414/414,strict/self-test20场景及语法通过,属于本地合成验证;P2002只是异常桩,未实证真实PG。全部细节及其余分组以09-05 implement顶部与error-debt-b10-20260917为准。
|
||||
|
||||
最终客户端typecheck/Vite/PWA、task/治理/敏感/diff通过;原22文档与Browserslist告警保留。旧1730份材料与旧脏改动保留,本轮新候选独立PENDING;W2仍不提交/推送/部署,W3恢复/W4事件/W7真实自然业务/W8历史验收/W9借款未因本轮迁移被结案。W6低年份、AP反向区间与损坏导入解析异常保持各自边界。
|
||||
|
||||
## 2026-09-17 连续执行B6–B9与D13/D14(最新协调增量)
|
||||
|
||||
按用户明确“后续连续做完”的要求,本轮在09-05主任务内连续处理导入文件、公告时间/操作提示、工资/考勤月份提示及工资维护校验,没有逐批请求继续确认。新增36原因,原业务权限/状态/金额规则不变;公告页面接回安全错误映射。D13现有月份守卫补证完成,低年份Date.UTC偏移单独开放;D14非法日历/不可解析时间已阻断,原时区/null/省略/24:00兼容保持。
|
||||
|
||||
最终product-serial-final为12文件575/575;初轮2项密码哈希超时在无构建竞争的串行复验通过,原日志保留、没有调宽阈值或削弱断言。错误债务由582降至546次命中,指纹561降至526;292注册/375静态迁移,主链例外0。新增36原因与删35指纹并非一一相等,不能按数量代替具体分支验收。owner/2026-10-05保持。最终客户端typecheck/build与14个JS语法、task/治理/敏感/diff通过,原docs/Browserslist告警保留。候选与证据另存import-time-contracts-20260917,原1352份材料保留,HEAD/index不变,独立PENDING。
|
||||
|
||||
W5同类本地治理继续自主推进,下一操作组先从预算/绩效、员工档案确定限定合同;不以单批结束作为人为停点。W6剩低年份/月格式兼容决策、AP反向区间,不能称全仓时间治理完成。W1独立仍PENDING,W2不提交/推送/部署,W3恢复/W4事件/W7自然业务保持原缺口,W8原22task/231条件索引未变成全量验收,W9借款产品未实施。细节和最终门禁以09-05本轮implement与新证据为准,下方记录保留原时点。
|
||||
|
||||
|
||||
## 2026-09-17 D12/B5接续回执(最新协调增量)
|
||||
|
||||
本轮current保持09-05,按连续实施授权完成HR多格式入职日期D12及共享只读筛选B5。D12非法日期整条跳过,缺失仍默认本次now,提前阻断部门/账号/角色/绑定/主管操作,保留同步审计;员工/合同含导出外层、在岗历史共7安全原因保持旧status/details与业务范围。
|
||||
|
||||
验证分为D12 2文件44/44、B5 9文件425/425、共享导出回归3文件72/72;客户端typecheck/build通过,未称全仓/独立/PG/JWT/公网验收。证据另存hr-date-read-errors-20260917,原local-roadmap及更早包保持。当前错误债务更新为582次AST命中、561指纹(本轮仅减7),注册256/静态迁移343,主链例外0;原owner/2026-10-05不变。D1–D12已限定的本地日期工作补齐,不等于全仓时间输入审阅结束。
|
||||
|
||||
| 协调线 | 本轮变化 / 剩余 |
|
||||
| --- | --- |
|
||||
| W1/W2 | 新产品候选待独立复核;仍不提交/推送/部署。K0主题与产品主题分开,不累加多个包为重复审查任务 |
|
||||
| W5 | 余582命中/561指纹;下一B6限定账号导入文件7分支,先核multipart错误优先级,再同批原因/三方/负例。人工复审日期不被今日扫描抵扣 |
|
||||
| W6 | D12完成;D13月份消费者与D14公告datetime的兼容审阅、AP反向区间规则单列,详见09-05最新限定准备表;不改历史数据 |
|
||||
| W3/W4/W7 | 恢复四出口、事件6项缺口和2条自然业务验收链仍开放;无新真实配置/密钥/备份/生产样本,不执行旧恢复或制造业务 |
|
||||
| W8/W9 | 22历史task/231条件索引仍只是定位,未整体结案;借款技术规划保留,T2–T4产品未实施 |
|
||||
|
||||
后续同类本地治理沿已授权范围继续;新业务时间规则先固定合同,受保护操作和独立结论继续按原门禁。完整本轮实现、验证命令、保留对账及候选以09-05 implement顶部及该证据目录为准;以下旧表保留当时口径。
|
||||
|
||||
|
||||
|
||||
本轮最终收尾: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 后期规划连续执行回执(最新协调入口)
|
||||
|
||||
用户批准按后期规划尽量连续完成;本轮在指定执行树沿09-05先做本地治理,再补W4/W8/W9文档准备。以下是新增事实,下方“仅规划/未实施”保留原时点;没有提交/推送/部署/归档、生产/ARM/真实配置密钥备份读取、旧恢复重跑或借款产品开发。独立复核仍PENDING。
|
||||
|
||||
| 工作线 | 本轮进展 | 仍需完成 |
|
||||
| --- | --- | --- |
|
||||
| W1/W2 | 保留旧候选,准备当前日期/提示累积输入新候选;本地验证通过 | K0和产品2主题真实独立审查、明确授权后的提交/推送/部署及公网验收;不由520项主会话测试抵扣 |
|
||||
| W3 | K0/冻结恢复包保持,K1问题不重复索要;无新秘密事实 | K1、K2、附件AC4、完整计时AC5四出口;仍PARTIAL/缺件1/来源UNKNOWN/解密NOT_TESTED |
|
||||
| W4 | 原事件implement新增AC1–AC8逐项缺口、容量公式、两自然周期合并观察与停止条件 | AC1/2/4/5/6/7六项补证或裁决;AC3/8有据不重复等待;远端观察未执行 |
|
||||
| W5 | B3/B4增加9个原因码,移除实际消失的9条指纹;注册249、迁移336、遗留589、finding0 | 剩568条豁免/589次命中;按可达操作继续分组,原2026-10-05期限不变,人工复审节点未抵扣 |
|
||||
| W6 | D5用户直接写入/CSV/XLSX、D6员工资料/生命周期/档案、D7 AP列表完成;D8盘点完成并补D9仪表板直接读,继续完成D10薪资/预算/绩效及D11启用考勤/修正/请假日期 | D12 HR同步待实施(需区分缺失默认与非法输入);其他datetime/月份另审。AP反向区间保持原规则,未来改400需单列方案 |
|
||||
| W7 | 保留自然事件条件,本轮未访问真实业务 | 付款/回单与退回通知2条链,缺样本不制造业务 |
|
||||
| W8 | 22历史task的231项PRD复选条件建立逐条文档定位/候选证据引用索引,见下表及JSON | 逐项实质证据比对、原副本引用接回及结案判断仍未完成;不把106个历史勾选当新验收 |
|
||||
| W9 | 借款T1a表/字段/FK/唯一/金额/历史保留、锁图/并发/权限及接口草案落到原design | T1b数据库原型、T1c独立审阅;T2/T3/T4尚未开始,相关恢复风险及实施准入保持,原8AC未验收 |
|
||||
|
||||
日期D5发现并修复CSV解析库的本地时区转UTC提前一天问题:CSV原始文本进入原统一校验,XLSX原生日期处理不改;保留创建/导入缺省日期、nullable/optional、原导入整批失败及预览审计。D6非法输入在员工/角色/部门/checklist/审计/企业微信业务副作用前拒绝;没有修改权限模型/生命周期推进/付款状态机。D7和D9与对应导出输入合同一致,原区间状态码保留。
|
||||
|
||||
验证:product-final命令17文件520/520,后续d10-d11-final命令9文件61/61;客户端typecheck/build退出0;14文件215是前一阶段输入,不与520累加。合成Fastify注入和mock DB不等于真实PG事务/JWT/浏览器/公网验证。新回执在artifacts/qa-layout/local-roadmap-execution-20260917;首次CSV实际缺陷和两次测试夹具/预期纠正日志保留。前端保留既有Browserslist告警,没有升级依赖。
|
||||
|
||||
### W8逐项映射索引与结案顺序
|
||||
|
||||
historical-acceptance-map.json逐条保存PRD原文/所在节/行号、原勾选状态、原implement入口和显式证据引用的存在性。22项共231个复选条件(含补充条件),106项原文已勾、125项未勾;这些计数都不能换算未完成功能或完成比例。只核当前文档,不读取真实附件、配置或备份。显式路径支持行号及范围,均存在;未自动捕获的裸路径/其他副本仍待接回,绝不把空引用数组解释为无证据。
|
||||
|
||||
| 原task | PRD条件数/原已勾 | 后续结案处理 |
|
||||
| --- | --- | --- |
|
||||
| 08-23-isolated-backup-restore-drill | 10/6 | K0本地/原一次恢复已分层;K1/K2/AC4/AC5继续开放 |
|
||||
| 08-28-production-arm-backup-transfer-incident | 8/0 | 按本轮W4六项缺口补证/裁决 |
|
||||
| 08-28-reimbursement-detail-material-preview-fixes | 9/9 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 08-28-reimbursement-detail-material-preview-deploy | 9/1 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 08-28-reimbursement-nonparticipant-readonly-projection | 9/0 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 08-29-reimbursement-expense-policy-invoice-guard | 12/10 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 08-30-reimbursement-expense-policy-invoice-guard-deploy | 12/0 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 08-30-reimbursement-assets-prior-approval-correction | 9/8 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-01-reimbursement-one-page-approval-workbench | 12/0 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-01-reimbursement-approval-content-workbench | 11/0 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-01-reimbursement-form-shared-component-migration | 15/0 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-02-reimbursement-readonly-content-consistency | 11/10 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-04-approval-return-notification-gap | 11/8 | 保留本地/既有发布事实;自然消费链及独立边界单核 |
|
||||
| 09-04-reimbursement-state-gap-finance-view | 11/0 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-05-error-explainability-payment-readiness | 12/12 | 历史勾选仅对应原批;本轮520与剩589分开审阅 |
|
||||
| 09-05-existing-deploy-db-lifecycle-isolation | 8/8 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-05-trellis-upgrade-rule-cleanup | 18/18 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-06-release-gate-integrity | 16/3 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-07-manager-ap-access-scope | 7/0 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-08-reimbursement-payment-closeout | 7/0 | 实际付款/退回闭环与协调交付分开验收 |
|
||||
| 09-09-existing-deploy-seed-separation | 6/6 | 按原implement逐条件接回源码/测试/独立/发布证据;暂不改元数据 |
|
||||
| 09-11-reimbursement-payment-handoffs | 8/7 | 保留本地/既有发布事实;自然消费链及独立边界单核 |
|
||||
|
||||
本轮完成的是可检索映射索引和优先队列,非22项实质验收/归档。优先本轮再次触及的09-05、09-07(AP权限保持的本地回归)、09-08及08-23/08-28;其余在相关代码再次修改或拟结案时接回原副本,不自动重跑所有浏览器/生产验证。借款为第23个task,不在22项历史分母中。
|
||||
|
||||
后续执行授权保留:日期与原因码同范围可继续小批,不需反复确认同一授权;新业务规则、AP反向区间、具体生产/恢复/发布动作和借款产品准入按相应门禁处理。旧attendance_v1仍固定关闭,相关历史路由拒绝是409而非400;未解冻OA打卡。原9条协调线并未全部结束,不能宣称“剩余只有部署”。
|
||||
|
||||
|
||||
## 2026-09-17 后期工作总表与剩余量(最新协调入口,仅整理规划)
|
||||
|
||||
用户要求详细梳理后期工作及剩余量。本轮复用本task作为协调合同,官方current由09-05切回本task并回读;不是新产品、远端或发布实施授权。数据来自已落盘本地回执与源码,不重新访问生产/ARM;下方历史“当前/下一步”保留各自时点,以本节为最新入口。
|
||||
|
||||
### 已经完成到哪里
|
||||
|
||||
| 阶段 | 已完成事实 | 仍保留的边界 |
|
||||
| --- | --- | --- |
|
||||
| 既有报销/回单/门户及早期日期错误修订 | 已有b1d25d3c及相关发布/隔离验证记录;原526项独立及公网只读记录可追溯 | 本轮没有新公网观察;已发布不代表自然付款/通知业务全部验收 |
|
||||
| K0本地恢复合同 | 30项合成测试、166键环境合同通过;候选已保存 | 独立复核待接回,原密钥保管和真实解密没有被证明 |
|
||||
| B1/B2本地批次 | 8处日期源文件边界及11个通知/待办/门户原因;14文件450项与前端typecheck/build通过 | 新批次未发布;450为该轮输入的合并回归,非450项新增 |
|
||||
| D1–D4本地批次 | 待办、员工目录筛选、节假日、相关导出4源文件;11文件192项与语法/治理通过 | 只修所列外部日期;192与450含重叠,不相加成全量独立覆盖 |
|
||||
| 受限恢复及资料保护 | 既有一次DB/影子只读应用恢复与清理已结束;两自然日期异机完整性有据;旧包和后续证据保留 | 整体PARTIAL、历史缺件1、密钥来源UNKNOWN、真实解密NOT_TESTED,旧入口不复用 |
|
||||
|
||||
### 剩余量的口径
|
||||
|
||||
按独立交付/验收出口归为**9条工作线:8条既有收口/治理 + 1条借款新功能**。这是协调分组,不是9个等量开发任务,也不是剩余9个bug。各线内部数量按事实列明,避免把交叉引用和同一缺口重复累加。无全量验收分母,暂不报总体完成百分比或保证结束日期。
|
||||
|
||||
| 编号/优先级 | 工作线与归属 | 还要完成什么、退出条件 | 当前剩余量/依赖 |
|
||||
| --- | --- | --- | --- |
|
||||
| W1 / P0 | 当前候选独立复核;08-23、09-05 | K0与当前产品变更两类审查;核候选摘要、内容/安全边界、实际重跑及finding;修订后重冻并取得明确结论 | **2个审查主题、3份已备候选**;当前独立结论均PENDING,不能由主会话自检抵扣 |
|
||||
| W2 / P1,W1之后 | 已实现批次正式交付;09-05/09-08 | 按QA/产品/文档范围拆分可审提交,绑定最终输入;明确授权后提交/推送,需发布的产品另做执行时预检、部署与公网只读验收 | **1条交付流程**,可按批拆交;当前阶段均未提交/发布,不要求先清空全部历史债务 |
|
||||
| W3 / P0 | 密钥与完整恢复能力;08-23 | K1核双角色仓库外受控可用性;K2绑定新源/制品/字段/秘密注入/资源并经审查授权验证;历史缺件找回或另审最终处置;补完整计时/同源滞后证据 | **4个开放出口:K1、K2、原AC4、原AC5**;K1事实未到、K2未绑定,实际操作另批;原历史来源可继续UNKNOWN,不追索秘密历史 |
|
||||
| W4 / P1 | 异机传输事件正式结案;08-28 | 对根因分类/未测理由、修复与容量方案、监控、自然周期partial/容量趋势、告警响应逐项补证或裁决 | **1个事件,AC1/2/4/5/6/7仍有缺口**;AC3两日期副本完整及AC8本地治理有据,不再因这些重复等待;自然恢复不冒充已修复 |
|
||||
| W5 / P1,有期限 | 错误可解释性剩余债务;09-05 | 按已启用用户操作逐组迁移原因码/安全提示/精确负例,保留守卫与旧details;只删除消失指纹 | **577条豁免指纹、598次AST命中、58个扫描分组**;owner全为shunli、expiresOn全为2026-10-05;到期前迁移或逐项另审有依据的豁免,不统一延期 |
|
||||
| W6 / P1 | 其余日期与区间规则;09-05 | 新发现直接写入/导入及AP查询入口先定限定方案,再验证无效日期无写入/查询;区间规则先核旧合同 | **3组已定位入口 + 1轮余项盘点,共4个计划批次D5–D8**;详见该task新顶部,目前未实施,非全库余项总数已知 |
|
||||
| W7 / 按自然事件触发 | 真实付款/回单与退回通知;09-08、09-04通知、09-11交接 | 付款链核真实银行接受性、独立复核资格、自然回单消费与实际登记;退回链核原待改单重提/阻断、站内事项与真实投递/深链/处理后消失 | **2条业务验收链**;无自然样本继续等待,实际渠道是否需调整须先核;不得为验收制造付款、重传旧件或发送测试通知 |
|
||||
| W8 / 按结案或相关变更触发 | 原task验收映射与元数据治理;09-08协调 | 将原PRD逐项关联代码/发布/独立/业务证据,核失效引用、过期摘要;真正满足后再获批归档 | **22项历史task索引待逐项结案判断**;当前23个task合同含借款,不能换算为23个未实现功能;不把全22项映射作为新规划的硬前置 |
|
||||
| W9 / 新功能,规划先行 | 公司借款本金台账与归还;09-17借款task | T1模型/约束/锁序定稿;T2出借人/借入登记与余额确认;T3还款额度/批次/回单/核销及界面;T4真实本地合成全链、并发/权限/旧业务回归与独立审查 | **4个阶段、原8项AC均未验收**;只有规划和消费者地图,产品实现未开始,另需实施批准与相关恢复风险处置 |
|
||||
|
||||
责任分工:shunli为协调及各原task负责人;执行端负责本地实现/自动验证/脱敏证据;独立审查由真实独立方承担;K1由系统管理员和公司责任人在受控渠道内核可用性;真实付款/通知按正常业务责任与授权进行,不转嫁软件回归给员工。
|
||||
|
||||
### 当前独立复核输入(冻结包只读)
|
||||
|
||||
- K0:`followup-governance-20260917/k0-review-candidate`,只覆盖本地合同/合成验证。
|
||||
- B1/B2:`followup-governance-20260917/review-candidate`,manifest前缀3a22adfb;保留上轮完整输入与回执。
|
||||
- D1–D4:`calendar-followup-d1-d4-20260917/review-candidate`,manifest前缀7b1c61d0;绑定前包,当前todos/exports须以此包版本覆盖前包,同源相关回归以192项实际输入为准。
|
||||
|
||||
以上相对目录均位于artifacts/qa-layout。W1按两个主题审查,不强迫同一产品重复做两次互相矛盾的“全量通过”。K0允许独立交审;产品审阅须联读两个版本的增量,不能拿旧450项证明新输入已经独立通过。包完整性、本地测试、独立审查、独立重跑和发布是不同结论。
|
||||
|
||||
### 错误债务规模与优先次序
|
||||
|
||||
数量引用D1–D4的error-contract.log及当前baseline只读统计;本轮不重跑产品测试/AST,不把静态调用量解释为用户遇到故障次数。
|
||||
|
||||
| 扫描分组 | 剩余命中 |
|
||||
| --- | ---: |
|
||||
| purchaseRequests | 52 |
|
||||
| users | 40 |
|
||||
| employees | 31 |
|
||||
| assets | 29 |
|
||||
| masterData | 25 |
|
||||
| integrations | 22 |
|
||||
| travelRequests | 21 |
|
||||
| attendance | 19 |
|
||||
| payroll | 18 |
|
||||
| travelReconciliation | 18 |
|
||||
| 其余48分组 | 323 |
|
||||
| 合计58分组 | 598 |
|
||||
|
||||
数量靠前不自动成为第一修复批。先核当前已启用、用户真实可达的操作,再按风险/频度定一组完整原因合同;员工/日期相关路径可先形成审阅批。workflow工具15项、workflowDefinitions配置11项涉及不同边界,需分别审阅,不能混入文案替换。B1/B2已经消除14次历史命中,D1–D4纯日期修复没有继续减少此计数。
|
||||
|
||||
### 推荐执行顺序与可并行事项
|
||||
|
||||
1. **先交审当前成果,同时补K1非秘密事实。** W1可立即准备交接;K1只需角色/渠道类别/可用状态,不接收Secret、账号或位置。没有独立方时保留PENDING,不重复跑主会话测试凑结果。
|
||||
2. **待审期间做本地计划准备。** W6的D5–D8及W5下一操作组先限定文件/语义/用例;本次仅规划,具体新批获批准后实施。W4先复用现有证据做最小缺口/容量观察方案,不连接远端。
|
||||
3. **已实现代码按自身门禁交付。** W1 finding处理且候选固定后,W2在明确提交/推送/部署授权内推进;未经批准不操作。不把全部598遗留、22项历史映射或自然事件等待塞进当前小批发布范围。
|
||||
4. **K1事实具备后定K2具体操作。** 新源/平台/秘密输入/字段上限/资源/清理各项绑定,独立只读方案审查、专项批准后才执行;可合并采集完整计时,不能重用旧入口或过期源。缺件处置与解密通过分开。
|
||||
5. **业务与备份结案按证据触发。** W7随自然业务、有范围的只读核验推进;W4按缺项补限定观察。未发生的自然通知记未触发,不能补造人工确认时间或历史rsync时长。
|
||||
6. **借款在方案批准后独立进入。** 可以继续T1技术定稿的文档准备;实现另获批准。未知密钥/真实恢复风险须有明确处置,不能以旧历史缺件例外默认接受;不要求22项无关任务全部归档才做新规划。
|
||||
|
||||
### 已有时间节点与估量边界
|
||||
|
||||
| 时间 | 既有安排 | 当前状态 |
|
||||
| --- | --- | --- |
|
||||
| 09-25 | 重扫错误债务、日期消费者及责任/优先级复审 | 待执行;先前450/192不抵扣该日期复审 |
|
||||
| 09-30 | 仅对必要条目提出具体延期理由、owner、新验收与期限 | 待必要性判断,当前未延期 |
|
||||
| 10-02 | 对迁移/豁免/测试/发布范围查漏 | 待执行 |
|
||||
| 10-05 | 按原到期门禁判定,不统一续期 | 原日期保持 |
|
||||
|
||||
这是人工节点,未创建自动定时任务。按代码投入看:W1/W2主要是审查与交付收口(finding未知);W6为中等规模分域修复;W5为现有工作中范围最大、需分批的长期治理;W9是完整新功能,投入显著大于一次日期批次。W3/W4/W7耗时取决于事实、具体授权与自然事件,不宜折算为连续编码天数。W8为按需证据治理。当前不能给可信的统一“还需几天/完成百分比”;每个批准小批完成后用实际通过/未验数量滚动更新。
|
||||
|
||||
本轮整理验收:不改产品源码、不修改原AC勾选、豁免到期或借款状态;只更新本task PRD/implement/notes与09-05后续批次规划,保存新对账证据并运行对应本地治理门禁。旧冻结包/证据、旧差异及HEAD/index保持;规划落盘不代表W1–W9已经执行。
|
||||
|
||||
本轮整理回执:两个task上下文、Trellis治理(23项合同/1242份扫描/14份登记证据摘要)、process baseline、CURRENT敏感扫描30份/finding0及diff检查通过;文档注册零错误、保留原22份未登记文档告警。仅4份计划/摘要文件变化,其他55份旧差异原字节保持,452份已有证据/冻结材料的集合与摘要保持,HEAD/index保持;原任务正文及状态/历史commit不改。证据归followup-roadmap-20260917,未新跑产品测试、未新实施D5–D8或借款,不把规划结果当任务全部完成。
|
||||
|
||||
## 2026-09-17 D1–D4继续推进回执(最新协调入口)
|
||||
|
||||
用户要求继续推进后,官方current保持09-05,按已落盘四批完成待办截止日、员工目录/导出入职日期筛选、节假日整批日期、仪表板与AP导出日历校验。产品增量4源文件,本地11文件192项测试和10文件语法通过,AST240注册/327迁移/598遗留仍零finding、期限未变。新回执与候选归calendar-followup-d1-d4-20260917,上一轮450项和旧候选保留为原输入结果;当前todos/exports已含两轮增量,独立复核须以新候选覆盖这两文件。
|
||||
|
||||
D1–D4从待审规划进入已批准本地执行,不将09-25等未来复审提前勾选。独立复核仍PENDING;K1实际保管、K2源/制品/秘密注入绑定、自然业务与原备份事件缺证据仍开放,借款planning且未实施。未连接生产/ARM、未读真实密钥/配置/备份、未重跑恢复、未提交/推送/部署/归档。下方旧“D1–D4未实施”为前轮时点事实,最新代码及治理回执以09-05顶部为准。
|
||||
|
||||
## 2026-09-17 后续本地推进回执(最新协调入口)
|
||||
|
||||
用户批准按既有梳理继续并补规划。官方current已切09-05-error-explainability-payment-readiness;本轮B1/B2本地实施完成:8个日期输入源文件、通知/待办/门户11个错误原因,最终14文件450项测试及客户端typecheck/build通过。AST从612降至598次遗留(577条entries),240注册/327已迁移、主链例外0;原到期日2026-10-05保持。独立只读复核和发布尚未完成,具体回执、剩余日期D1–D4及人工到期节点归09-05顶部。
|
||||
|
||||
08-23的K0主会话30项及166键合同保持原结果,本轮另备只读审阅候选;独立复核PENDING。K1补双角色受控可用性核验方案,事实陈述待接回、实际取用NOT_TESTED;K2补NOT_BOUND源/制品/字段/资源/清理清单,尚不可执行。没有真实访问、秘密读取或旧恢复重跑,PARTIAL/历史缺件1/密钥来源UNKNOWN/真实解密NOT_TESTED不变。
|
||||
|
||||
08-28按原AC1–AC8追加本地证据映射,明确“两自然日期异机完整性已证”与根因、容量预算、监控趋势、自然告警响应缺口;不改原验收勾选、不新增远端观察。自然回单/通知、历史缺件及完整恢复计时继续沿原task开放,不制造业务事件。
|
||||
|
||||
借款09-17-company-loan-principal-repayment继续planning,仅补消费者地图及T1数据/锁序→T2登记确认→T3付款来源与额度/回单闭环→T4合成全链/独立审查依赖;没有schema/migration/API/UI实施,不解冻travel_order付款。未处置的密钥恢复风险不能因新规划被接受。
|
||||
|
||||
旧差异和四恢复包86件及K0原证据41件均纳入本轮基线;此前96件记录原样保留,以K0现场manifest对账为准。最终治理、差异/摘要及候选回执归09-05顶部和followup-governance-20260917。本轮未提交、推送、部署或归档;下方各节保留当时状态,不能用旧“仅K0/本轮不进入B1/B2”覆盖本节新授权与实际结果。
|
||||
|
||||
## 2026-09-17 关键遗留优先与新任务规划(当前入口)
|
||||
|
||||
后续执行回填:用户已在指定工作树批准A1/K0,仅本地合同与合成验证;官方current已切08-23,30项定向测试及166键环境合同通过,K1空白保管清单已落盘。K1/K2仍未批准或执行,真实解密NOT_TESTED、来源UNKNOWN、原PARTIAL不变;最终回执归08-23顶部。四包按manifest现场合计86件且全部完整,上轮96件计数与现场不符,保留旧记录并单列差异。本轮不进入B1/B2或借款C。以下保留本节规划时刻事实。
|
||||
|
||||
本轮用户批准开始规划,非新增实施授权。上一节阶段收尾不撤销;不继续扩大报销任务范围。责任人仍为shunli,主会话直接实施/检查,真实外部只读审查另列;新会话不继承无限生产或密钥权限。
|
||||
|
||||
规划清单:
|
||||
- [x] 复用08-23和09-05合同,核源码及现有规约能回答的事实,不索要生产密钥。
|
||||
- [x] 分列本地准备、受保护操作、债务治理和新业务开发的进入/退出条件。
|
||||
- [x] 通过官方task工具新建独立09-17-company-loan-principal-repayment,使用--no-start保留当前任务,补PRD/design/implement。
|
||||
- [x] 对更新合同和新任务执行Trellis、流程、文档、差异及范围校验;本轮不运行产品测试或受控恢复。
|
||||
|
||||
| 顺序 | 原task / 工作 | 产出与退出条件 | 等待时可做什么 |
|
||||
| --- | --- | --- | --- |
|
||||
| A1 第一实施段 | 08-23:K0本地原密钥恢复合同 | 现有环境分类、加密格式、禁泄露输入/输出、错误密钥/缺密钥合成反例及新验证方案通过;不读生产配置/密文 | A1方案获批后可本地实施;不是实际密钥已保管或解密通过 |
|
||||
| A2 独立授权段 | 08-23:K1保管事实,之后K2受控恢复 | 原密钥可由既有管理员与公司责任人取得,批准范围内验证与选定备份密文匹配并完成清理;失配/不可用停止,缺件与其他未验指标继续单列 | 等待权限/保管安排/具体源绑定时推进B1/B2;不重用上次入口或要求用户在聊天给密钥 |
|
||||
| B1 第二实施段 | 09-05:高风险外部日期输入 | 合同、采购、差旅付款/对账先行,周报/在岗下一小批;输入溢出在写入前拒绝,兼容null/optional及原业务规则 | 不开放冻结模块、不修改历史日期;各小批独立验证,已发布四域不重做 |
|
||||
| B2 到期治理段 | 09-05:错误豁免 | 重盘点后逐操作迁移真正未覆盖的常用路径;09-25复审、09-30必要逐项延期提案、10-02查漏、10-05原门禁 | 日期是人工节点,不是已创建的自动任务;不能用旧612次计数代替当前扫描或统一延期 |
|
||||
| C 新需求 | 09-17-company-loan-principal-repayment | 本轮仅规划;开发前复核A/B遗留结论、方案及资金规则;先借入本金台账和还款闭环,不做通用财务系统 | 规划不等于实施批准;原密钥不可用/恢复失败未经明确处置时,不直接扩充敏感付款数据或发布 |
|
||||
| 按事件/结案触发 | 自然回单/通知、历史缺件与原task验收映射 | 沿下方阶段收尾表的责任与退出条件 | 不为等待自然事件制造业务,不为切换新任务强行归档旧task |
|
||||
|
||||
执行选择:优先A1;A2受保护前提不具备时切B1/B2,不陷入反复恢复/追问。新任务C的规划与技术准备不要求22项旧task全绿;其业务开发/上线前仍需单独判断相关安全风险,不把“接受历史缺件”扩大为接受未知密钥恢复风险。A2实际源、环境与密钥注入方式尚未绑定,因此本轮没有可执行的远端命令或第二次恢复授权。
|
||||
|
||||
### 新会话接续
|
||||
|
||||
本对话可以继续,但历史较长,建议规划落盘后在同一执行工作树另开一个主会话做A1;不另开实现/检查子代理,不同时在多个会话写同一工作树。执行工作树为项目根下`artifacts/isolated-worktrees/20260911-detail-layout`。接续先读本节、08-23的PRD/design/implement顶部、deployment-trialrun的Environment Recovery Classification And Secret Custody及security-privacy;核官方current和Git差异,不用注入的09-04旧提示选任务。08-23新增A1方案获实施批准后,用官方task.py start切到08-23并回读current;未批准只读规划,不自动开始。
|
||||
|
||||
交接必须保留:已核产品基线b1d25d3c;上次受限恢复已结束/入口已消费;PARTIAL、历史缺件1、密钥来源UNKNOWN、解密NOT_TESTED不被新会话改为PASS;已有脏文档和冻结包原样保留。新会话先做本地合同/合成验证,不连接生产或ARM、不读生产.env/密钥/真实备份、不提交推送部署。B1实施时再切09-05,C仍为planning,不混入同一资金改动批次。
|
||||
|
||||
规划验证:四个task上下文校验、Trellis(23项合同、1241份敏感扫描)、process baseline及差异检查通过;文档注册0错误,仍有既有22份未登记文档的一项告警。新task四文件齐全、8项可观察验收均未勾选、无TBD;本轮只改9份既有任务文件并新建该task四文件,源码和四份冻结包96文件未变,HEAD/index未变,官方current仍09-08。未跑任何产品测试、环境合同执行或真实恢复;本地准备和新功能均待其方案实施批准,K1/K2另按具体受保护操作审阅。
|
||||
|
||||
## 2026-09-17 阶段收尾与后续归属(当前入口)
|
||||
|
||||
用户采纳“先整理旧任务完成项、遗留项和归属,再单独规划借款还本”的建议,要求收尾之前的工作。本轮只整理本任务及直接关联任务的状态摘要,不改变原验收标准,不重跑恢复、不改产品/生产、不提交/推送/归档,也不实施股东借款新功能。当前执行树的官方任务仍为09-08;09-04旧会话提示不作为重新实施入口。
|
||||
|
||||
本轮执行清单:
|
||||
- [x] 核对最新PRD/设计/实施记录、已保存发布与恢复回执及Git基线,区分历史文字与最新事实。
|
||||
- [x] 在本节形成完成项、开放项、原任务归属和重新进入条件;不把22项历史索引称为全量验收。
|
||||
- [x] 更新本任务PRD及09-04/09-05/09-08的过期task摘要;保留原status、completedAt、历史commit及未满足验收。
|
||||
- [x] 运行任务、文档、流程、敏感信息与差异检查,确认本轮只有列明文档/元数据改动,HEAD/index及原有非本轮差异未变。
|
||||
|
||||
本轮验证计划:对三个更新摘要的task执行`task.py validate`;运行`node scripts/qa/check-trellis-governance.mjs`、`node scripts/qa/check-process-contract.mjs --baseline --json`、`node scripts/qa/audit-docs.mjs --check-registry`、`git diff --check`。源码未改,不重跑产品单测/构建/浏览器,不新增独立复核或公网验收计数。
|
||||
|
||||
### 已完成阶段与证据边界
|
||||
|
||||
以下证据均位于既有`artifacts/qa-layout/`,本轮只读核对,不覆盖原件、不把历史执行记为今天新跑。
|
||||
|
||||
| 交付 | 已完成事实 | 证据与限制 |
|
||||
| --- | --- | --- |
|
||||
| 报销状态、财务本人审批与付款交接修复 | 229867f5等修订已有发布及隔离验证记录,Git确认包含于b1d25d3c;不重复开发/部署 | `finance-owner-release/acceptance-result.json`及09-04实施记录;代码包含不是原task所有体验/业务条件验收完成 |
|
||||
| 回单核对、动态错误指引与日期合同 | b7d2285d、3516d7ec及b1d25d3c增量已发布;日期合同已有独立内容审查、526项独立重跑及typecheck/build通过记录 | `calendar-contract-review-followup.md`、`calendar-contract-release/push-result.json`、`calendar-contract-release/acceptance-result.json`;独立重跑复用依赖,非全仓/全新安装;发布验收为公网只读,不证明真实银行导入或生产认证业务全链 |
|
||||
| 本次异机备份取证 | 09-14/09-15两个自然日期副本的异机摘要已核,09-16自然源又完成当前b1同源新鲜度/实际目录绑定 | `postrelease-recovery-20260916/arm-user-readback.json`及08-28实施记录、`postrelease-recovery-20260917/real-bound-restore-result.json`;不据此补造历史传输耗时、根因修复或事件全部验收 |
|
||||
| 一次受限ARM恢复 | DB和影子认证只读应用PASS;62引用中1条已接受历史缺件、未知不一致0;清理及后验PASS;RPO7小时2分52秒 | `postrelease-recovery-20260917/real-bound-restore-acceptance.json`与`real-bound-restore-postcheck.json`;整体PARTIAL,非完整附件/解密/完整RTO验收,入口已消费,不再执行 |
|
||||
| 本轮阶段状态整理 | 直接关联的09-04/09-05/09-08摘要纠正,完成/开放项分开;其他历史task不批量改状态 | 本节及三个task.json;22项旧索引只证明记录和关联,未进行22项全量验收 |
|
||||
|
||||
### 保留的开放项与重新进入条件
|
||||
|
||||
协调责任人为shunli;以下归属均指已有`.trellis/tasks/`任务。本次登记不是新审批、定时任务、统一延期或已具备完整恢复能力的承诺。
|
||||
|
||||
| 开放项 | 归属 | 当前状态与影响 | 重新进入及退出条件 |
|
||||
| --- | --- | --- | --- |
|
||||
| 自然回单、实际登记、退回通知与交接 | `09-08-reimbursement-payment-closeout`协调,通知/入口分别归`09-04-approval-return-notification-gap`、`09-11-reimbursement-payment-handoffs` | WAITING_NATURAL_EVENT;最近一次已存09-16观察窗口无新增回单/通知,本轮未再查生产;受控样本/隔离链通过不替代自然消费 | 自然事件出现且有相应只读授权时,执行端核队列→结果→登记及待办/投递链,核实际独立复核人资格;银行导入接受性另据真实回执确认,不制造付款、重传历史件或要求员工代做软件回归 |
|
||||
| 完整附件、敏感解密/密钥保管及完整恢复指标 | `08-23-isolated-backup-restore-drill` | 本次受限操作完成;原AC4/AC5未全满足,1条历史缺件仍未找回,密钥来源UNKNOWN、解密NOT_TESTED | 后续需另行明确缺件处置与受控密钥保管/恢复验证方案及批准;分项补证,不能用新随机密钥、删除引用、阶段耗时小计或重复旧入口实现“全绿”;不向用户索要聊天明文密钥 |
|
||||
| 异机传输事件正式结案 | `08-28-production-arm-backup-transfer-incident` | 两自然日期异机完整性已证实,不再因该项重复等待;原事件的根因/修复和其他验收尚未全量对账 | 先核原PRD及现有证据是否足够;缺证据才补限定观察,出现新异常再按事件方案处理;不自动重传、改timer或清理partial |
|
||||
| 剩余日期消费者与错误豁免 | `09-05-error-explainability-payment-readiness` | 四域输入及动态提示批次已发布;其他消费者分类、上轮591条/612次遗留与229项注册记录不是全量修复 | 09-25复审,09-30必要单项延期提案,10-02查漏,10-05原到期门禁;按外部输入风险分批并重盘点,各批补负例/无副作用测试和对应审查,不统一延期,不改历史日期 |
|
||||
| 历史task全量验收映射 | `09-08-reimbursement-payment-closeout`协调,各原task拥有验收 | `postrelease-recovery-20260916/task-inventory.json`包含22项索引,不代表22项都完成;部分引用仍待跨原副本/证据核对 | 当某原task拟结案或相关代码再次修改时,逐项对照PRD与原证据;未核项保持开放,不能按Git祖先或某轮治理PASS批量勾完 |
|
||||
| 本地记录提交与任务归档 | 本task及各变更所属原task | 仍有本地未提交文档;本轮只新增本PRD/implement及三个task摘要,不接管其他旧差异 | 明确提交授权后按路径拆分并复核差异;各task确实满足全部验收且另获归档授权才归档,收尾不等于提交/推送/部署许可 |
|
||||
|
||||
阶段交接结论:已发布功能和本次受限演练按实际完成范围结束;开放项继续留在原task,不阻塞独立新需求的规划,也不免除未来发布门禁。下一业务需求为公司借款台账与本金归还,须另建任务并完成方案确认,本轮未创建或实施。主会话完成记录核对,不冒称新增独立复核。
|
||||
|
||||
复盘:task.json摘要落后于implement和发布回执,造成“仍待部署/全部未做”的误读。本轮只纠正三个直接关联摘要,以本节指向最新证据;历史commit仍为追溯锚点,旧记录和未满足验收保持。既有project-governance及docs-and-evidence已覆盖阶段/任务、实现/发布/外部验证分离规则,本次无新代码合同,不重复新增spec或文档。
|
||||
|
||||
本轮收尾验证:三个task上下文校验、Trellis治理、process baseline及`git diff --check`均退出0;Trellis敏感扫描1237份文件通过,14份已登记历史证据摘要通过。文档注册检查0错误,保留既有22份未登记文档的一项告警,不借收尾扩修。9个证据入口及6个原任务归属存在性检查通过,不等于重新执行其测试或验收。
|
||||
|
||||
范围核对以本轮开始时2988份跟踪文件摘要为基线,只有列明5份任务文档/元数据发生本轮变化;三个task.json仅notes改变,status/completedAt/commit保持。四份既有冻结包共96个文件的集合与内容摘要前后相同,HEAD及真实index摘要不变,本轮范围外原有差异未变。无产品测试/构建/浏览器重跑、无新独立复核/生产访问/恢复/业务写入,无提交/推送/归档/部署。结论为“阶段收尾记录完成,原任务开放项保留”,不是全task完成或新业务实施开始。
|
||||
|
||||
## 2026-09-17 P2/P3本次受限恢复已完成,结论保留PARTIAL
|
||||
|
||||
用户01:33Z实际执行回执与本地唯一JSON核对一致,三摘要绑定R3 33001f58…/新执行包f7cf4d62…/源d9a23d59…。真实DB及影子认证只读应用PASS;62引用仅1条已接受历史缺件、未知不一致0;清理/后验PASS、生产写入false。RPO25372秒,整体PARTIAL_KNOWN_MISSING_AND_SENSITIVE_DECRYPTION_NOT_TESTED,不是完整灾备PASS。01:36Z主会话另读确认临时恢复容器/网络/目录0、暂存入口已移除、两监控timer正常、生产ready仍b1。
|
||||
|
||||
本次批准的P2准备/P3一次执行及分项验收已完成,不再要求管理员跑命令,不重新暂存或重跑。08-23保留完整附件/计时与敏感解密未覆盖,密钥来源UNKNOWN不改变;自然新回单/退回通知等待与日期/错误治理原到期任务不因此全结案,不制造业务事件或改密钥/生产数据。原R2 NO_GO与两级冻结包不改,实际新结果与清理证据归08-23最新节;未提交/推送/部署/归档。
|
||||
|
||||
## 2026-09-17 R3新源绑定与入口已就绪,待管理员单次执行
|
||||
|
||||
接回用户01:18:40Z sudo回执:d9a23d59…新源完整、6.81小时、实际runId/相对目录已证明,归档/timer未改,未恢复。01:22Z生产ready、ARM两镜像及71项完整迁移映射再核PASS;08-23已据此冻结新bundle,保持R3原执行器/helper/精确例外不变。执行manifest f7cf4d62…、入口011b42bd…;12项封装+4项传输合同通过,01:28Z仅普通用户暂存并回读一致,没有启动恢复或改生产。
|
||||
|
||||
新的交互sudo单次入口run-approved-bound-restore.sh已备,旧入口不复用、既有范围不重复申请批准。新包是R3已审代码加主会话验证的绑定封装,不称整个新包已独立复核;真实执行仍受现场最新性/24小时/资源/隔离门禁,最高保留PARTIAL、任何新增不一致停止。当前待管理员运行并回传实际结果,细节及完整相对命令归08-23最新节。
|
||||
|
||||
最终本地104/104、两级包摘要/文件集、入口语法及Trellis/process/diff门禁通过,源R3仍原字节;状态READY_FOR_MANUAL_SUDO_FRESH_PREFLIGHT。尚未执行root入口或第二次真实恢复,不提前结案。
|
||||
|
||||
## 2026-09-17 R3内容通过、新镜像配置已验,待目录只读回执
|
||||
|
||||
继续推进时发现外部完整报告已落盘,六项内容静态审查通过、无阻断项,报告SHA256以08-23登记的fd58e491…完整值为准;三条信息级卫生项在08-23登记已知接受,不改冻结候选。结合已转回的独立包完整性与54项重跑,内容门禁已满足;19项PG和构建15项仍不是独立重跑。
|
||||
|
||||
固定b1镜像无网纯配置专项已实际PASS:密钥缺省空/非空fail-closed、真实依赖/无替身、隔离metadata通过,工具容器精确清理PASS;未启动OA/DB、不恢复、不读生产Secret、不部署。新增目录绑定探针及交互sudo只读入口已准备,主会话合并88/88通过,R3冻结30件未改;尚无真实runId/目录回执,新bundle仍待绑定。用户只需在项目根执行postrelease-recovery-20260917/read-arm-source-binding.sh对应入口补受保护目录身份,不用重复批准既有恢复范围;回执后再定稿执行输入与现场预检,详见08-23最新清单。
|
||||
|
||||
## 2026-09-17 R3外部完整性与独立54项重跑通过,内容结论待接回
|
||||
|
||||
接回用户转述的独立结果:包完整性/两份delta/R2字节保留PASS,包外54项重跑exit0、4.557秒,30件跑前后不变;原始日志由独立方保管,本会话未取得原件。19项PG合同未独立重跑、构建15项不在此次范围,不能把本地69项全部称为独立通过。外部内容审查b1ferktxd仍在进行,R3包内PENDING与冻结字节不改;本会话仅复算包摘要并在08-23包外记录进度。仍须内容结论、新源目录/制品配置绑定及现场预检后才可恢复,不因中间回执启动应用或生产操作。
|
||||
|
||||
## 2026-09-17 新源匹配b1镜像已构建,恢复仍待门禁
|
||||
|
||||
用户批准08-23/design固定b1源码的ARM64原生构建,已于00:45Z完成一次构建exit0及产物元数据核验;image5d279fef…平台/BUILD_SHA/OCI revision正确、容器0、旧镜像保留,内存/磁盘后验10.23/87.84GiB。新增15项保护测试及合并69/69通过,均主会话执行;缓存9处,不声称全新安装或原amd64字节复原。仅构建不部署、不启动OA、不恢复、不读生产密钥、不删旧镜像;R3独立内容复核仍待接回,既有恢复授权不重复申请,实际runId/目录及新制品配置证据未补齐前不生成恢复入口。冻结包30件/manifest33001f58…保持;详情及完整摘要归08-23最新回执。
|
||||
|
||||
## 2026-09-17 新鲜ARM备份已核实,匹配镜像待准备
|
||||
|
||||
接回用户sudo只读结果:09-16T18:30:04Z自然源d9a23d59…、b1d25d3c,5.75小时、DB/storage摘要及字节通过、归档元数据/timer未改;旧09-15源超龄不再选用。已按原件回执保存,尚无新源真实恢复通过。
|
||||
|
||||
新源原image与当前生产一致但为amd64;ARM97个image清单无b1匹配镜像,仅旧b7对应制品。静态71项migration及实际Dockerfile/锁文件一致不能替代同源码镜像。08-23/design已准备一次b1原生ARM64构建申请,不部署/不恢复/不读Secret/不清旧制品;此新构建未授权,先不执行。R3独立内容复核仍待回执,冻结包不修改;既有精确例外与一次受限恢复批准不重复询问。
|
||||
|
||||
## 2026-09-17 历史缺件精确例外已批准实施
|
||||
|
||||
用户批准08-23/design的窄验收修订,推进本地实施/定向测试/重新冻结及独立复核后一次恢复;不重复确认同一范围。旧09-15源已超过24小时,先只读刷新源/镜像事实,未绑定新鲜源前无新执行入口。其他业务资料不删除,生产不写入,最终只允许带明确历史缺件和解密未验限制的PARTIAL。详见08-23最新实施记录。
|
||||
|
||||
本地实施及54项单测/19项真实合成PG查询合同通过,容器/临时文件清理PASS;R3冻结28份文件,manifest33001f5894ab48c99cac92c388837fcb1b5c549536f0ee29ccedb010d1017100,仍待独立增量复核。source binding明确PENDING,未生成新恢复入口。普通生产归档访问不可用,ARM盘点无可证明的b1镜像,不能猜新源版本或复用过期b7备份;已备交互sudo只读选源脚本,可与外部复核并行,不增加恢复/生产写入范围。明细与证据归08-23最新节。
|
||||
|
||||
## 2026-09-16 受限恢复执行回执:数据库PASS,附件引用NO_GO
|
||||
|
||||
用户手工sudo一次恢复已完成并清理:固定源RPO20.41小时,preflight/prepare/database通过;storage因ATTACHMENT_REFERENCE_MISMATCH停止,app未运行、解密NOT_TESTED。cleanup与源/生产/timer后验PASS、productionWrites=false;完整恢复不得判PASS。本次聚合错误没有给出数量或细分原因,不直接称旧测试件缺失。原入口已消费,按08-23最新记录先只读归因,不自动重跑、不删除或豁免引用;其他自然业务等待和历史技术债不因此结案。
|
||||
|
||||
只读归因新增事实:当前62条引用中仅一条存在/大小异常,为b22a1162…历史原件缺失;原09-11文档标记证据已从另一隔离副本找回。精确记录manual归档、备份后未更新且七类关联均空;未验证当前61件内容SHA,仍需恢复副本确认是否另有不一致。建议只对该精确记录制定历史缺件例外,保留原NO_GO与PARTIAL,不把所有归档票据排除;涉及验收门禁改变及第二次执行,按08-23/design拟议补充集中确认一次,当前不实施/不重跑。
|
||||
|
||||
## 2026-09-16 独立单测已通过,准备受限恢复现场入口
|
||||
|
||||
用户转回外部23项单测exit0回执,Python3.9.2、0.088秒,21份包文件前后摘要一致且未产生pyc;原始日志仍在独立方scratchpad,本会话按转述登记,不冒称已取得原件或亲自独立执行。R2完整性及独立单测两项已满足,包仍冻结为076078be…;内容结论保留有条件通过。
|
||||
|
||||
按08-23最新清单,继续固定ARM镜像配置专项、摘要绑定的原执行器封装和交互sudo入口准备;不要求重复批准已授权的受限恢复。真正源/最新性/manifest及环境门禁必须在ARM当场执行,未恢复前不得写成已通过。附件覆盖限制已登记,密钥解密仍NOT_TESTED;不提交/推送/部署,不制造业务事件。
|
||||
|
||||
14:46–14:50Z已补实际ARM镜像config+冻结app-check非空fail-closed验证(实际依赖、无替身),工具容器精确清理PASS;原R2字节封装入口SHA e2f57c3e…已普通用户暂存并回读一致,未执行真实恢复。主会话入口6项+传输2项通过,独立23项不重复计数。当前READY_FOR_MANUAL_SUDO_PREFLIGHT:交互入口run-approved-restore.sh先现场只读预检,通过后执行既已批准的影子恢复;仍需要用户终端sudo密码,不能代理取密钥或扩权。详细证据/限制及02:30北京时间源过期门禁归08-23最新节。
|
||||
|
||||
## 2026-09-16 恢复R2有条件通过:等待独立23项重跑与当场ARM预检
|
||||
|
||||
外部包完整性PASS、内容无阻断代码缺陷;证据Finding4仍是执行门禁,不能称无条件放行。已在包外补b7源码config及非空字段密钥fail-closed验证,目标镜像环境无FIELD_ENCRYPTION_KEY;主会话测试明确不计独立执行。附件无摘要/请假附件仅存在性覆盖、tmpfs noexec建议均已写入08-23验收边界,R2冻结内容和076078be…摘要不变。
|
||||
|
||||
下一步由原独立复核会话执行其已提出的23项单测重跑;真正管理员执行时现场preflight重核ARM源/时效/manifest及生产健康,旧观察不沿用。受限恢复授权已有,不重复确认,也不将当前条件结论直接升级成真实恢复通过。
|
||||
|
||||
## 2026-09-16 恢复执行准备已实施(授权已接回,不重复申请)
|
||||
|
||||
已获受限ARM恢复授权,完成一次性适配器、23项本地安全单测、既有32条runner合同输出及ARM纯合成DB备份/恢复/附件负例/应用认证只读链,临时资源清理PASS。注意合成回执restoreStarted=true不代表真实恢复;realBackupRead=false,root宿主tmpfs及真实源/解密仍未测。
|
||||
|
||||
R2交审包restore-once-review-20260916-r2已冻结,manifest 076078be37dcd3c03c4be9b3413904b01fe1ac86f1bf34b34db88cc240334b05、19份文件复核一致;独立只读review仍PENDING,不能由主会话自检冒充。R1把createdAt误当目录runId的输入问题已只读纠正并在R2单独登记,旧包未重写。详情归08-23最新记录。
|
||||
|
||||
下一必要依赖为外部只读结论与ARM管理员执行入口;不重复问用户是否批准同范围、不自动扩sudo权限或绕过源24小时门禁。未恢复真实备份、未改生产数据、未新增付款/OCR/消息、未提交或部署。
|
||||
|
||||
## 2026-09-16 P2恢复审批清单已补齐(尚未演练)
|
||||
|
||||
08-23/design已固定一份受限清单:已核源manifest与同源码ARM64镜像、30分钟时限、DB/附件/应用隔离与资源上限、影子DB只读角色、短期影子JWT身份和精确清理。纯配置专项PASS,不启动应用或数据库;远端仅补读可用资源。特别边界:不接触生产字段密钥,故敏感字段解密NOT_TESTED,整项完整应用灾备保留PARTIAL。源过24小时须重新绑定,不拿完成构建作无限期源授权。
|
||||
|
||||
清单待用户对其中影子恢复/权限DDL/短期认证读取/应用运行范围集中批准,再完成合成安全合同测试与执行器冻结。未实施真实恢复、未新增生产写入/云调用或提交/部署,具体剩余以08-23最新节为准。
|
||||
|
||||
## 2026-09-16 13:29 UTC:匹配源码ARM64镜像已构建
|
||||
|
||||
本次镜像构建已获明确批准并执行完成。来源固定备份对应b7d2285d,产物1d4d70f84397…为linux/arm64,BUILD_SHA与OCI revision一致;元数据回读确认无该镜像容器、盘余87.91GiB。首轮因tar输入识别失败停止,查明无产物后以gzip修正传输,第二轮构建exit0;两份回执均保留。详细输入/基础镜像/lockfile/产物摘要及边界见08-23最新记录与postrelease-recovery-20260916。
|
||||
|
||||
本阶段仅完成原生跨平台重建,不是原生产制品复原,更不是应用运行或配对恢复PASS。没有读取真实备份/Secret、启动OA、调用云业务、修改生产或提交/推送。P2的应用镜像缺口已补;只读身份/解密及最终恢复资源和安全清单尚待核定,P3真实恢复仍单独授权。
|
||||
|
||||
## 2026-09-16 13:20 UTC接续:异机完整性已证,应用镜像待准备
|
||||
|
||||
P1人工权限缺口已由用户sudo只读回执补证:ARM最近两份自然批次与生产摘要相同且DB/storage完整,最新18.78小时、盘余89.38GiB;两个自然日期的异机完整性通过,但08-28原task其他验收不自动结案。原先ACCESS_UNAVAILABLE保留为普通账号历史事实,不覆盖新的人工结果。
|
||||
|
||||
P2按新批准完成95个ARM本地镜像版本元数据只读检查,未找到可证明对应备份源码的应用镜像:BUILD_SHA/OCI revision均无有效提交标记,原amd64源image也不在集合内;有ARM64 PostgreSQL16标记镜像。下一步建议单独批准同源码b7d2285d的原生ARM64应用镜像准备,构建仅用源码及依赖,不带生产.env/密钥/备份、不启动应用;细节归08-23执行记录。备份恢复和应用只读验收仍未执行,无新增云调用/业务操作/部署,不沿用元数据检查授权开展构建。
|
||||
|
||||
## 2026-09-16 后续实施回执(12:50–12:54 UTC)
|
||||
|
||||
用户批准按规划连续实施。本轮实际执行本地对账及生产/ARM只读观察;未提交、推送、部署、备份、恢复、发送消息或调用OCR。下节PLANNED描述为实施前历史状态,以本节实测为准;整体状态PARTIAL,不能宣称全部完成。
|
||||
|
||||
- P0:实际生产仍b1d25d3c,server运行身份前后不变;公网/ready末次检查PASS。已发布的日期/动态错误批次不重复实施。
|
||||
- P1:生产最近两个自然批次(09-15、09-14各18:30:05Z)数据库/附件字节及SHA256均匹配,归档元数据未变;最新批次年龄18.34小时,build b7d2285d,不是当前b1同源备份。生产备份timer active、上次service success/0,盘余27.39GiB。ARM架构aarch64,deadman timer active、上次service success/0,但普通账号对正式归档ACCESS_UNAVAILABLE,非交互sudo不可用;不能据timer成功推断异机完整或两个周期验收通过。
|
||||
- P2/P3:源镜像实测linux/amd64,目标ARM为aarch64;ARM镜像集合、容量及归档仍待有权限只读核验。状态HOLD_ACCESS_AND_PLATFORM,尚不能固定有效恢复来源和应用镜像。没有创建容器/网络/卷、下载真实资料、启用仿真或改sudoers;不切到生产宿主恢复。具体下一门禁归08-23执行记录。
|
||||
- P4:12:31:00Z至12:52:18Z限定窗口内新增回单0、通知0,WAITING_NATURAL_EVENT。实际pgboss回单队列及5秒调度存在,近30分钟completed任务29,jobsEnabled=true、provider=tencent;当前未归档回单2件均legacy。空队列tick完成不证明原件消费成功,不重传历史件。三条回单相关迁移成功/未回滚;这不是全库迁移复验。只读事务查询,无日志正文/原件读取,无人工入队或云调用。
|
||||
- P5:22项原task全部重新索引PRD/设计/执行记录摘要、引用提交与当前发布祖先关系、77条证据路径引用在执行副本/原仓库的存在性;不修改原验收复选框或批量归档。3个task含未直接解析到的引用,可能为缩写/其他隔离副本入口,不能判证据丢失或验收通过。共享日期外部输入/派生分类及错误基线新盘点写回09-05;AST registered229、migrated316、legacy612、finding0,不延期。
|
||||
|
||||
证据统一位于ignored的artifacts/qa-layout/postrelease-recovery-20260916:production.json、arm.json(非交互权限不可用)、arm-unprivileged.json、business.json、public-postcheck.json、task-inventory.json、reasons.json。task-inventory只证明索引和关联,不证明77条证据内容全部重新验收;原始冻结包未改。主会话执行/自检,不新增独立复核结论。
|
||||
|
||||
必要外部前提只集中为:取得ARM正式归档的可用只读执行方式,不需要用户提供业务密钥;据新事实冻结源/目标及架构方案后,再申请一次具体恢复写入授权。自然事件等待不安排虚假业务,历史全量验收缺口保留,不能用本轮索引或部署祖先关系结案。
|
||||
|
||||
本轮收尾验证:Trellis治理PASS、process baseline PASS、git diff --check通过,两个只读Python探针编译与任务索引脚本node --check通过;无产品改动,不新增产品测试/构建计数。稳定边界已由部署spec的配对恢复/只读备份调查及当前恢复设计覆盖,本轮实测权限与架构写入task,不另建重复spec。三处旧差异保留未改,未暂存、提交或归档。
|
||||
|
||||
## 2026-09-16 后续执行总清单(替代旧阶段下一步)
|
||||
|
||||
状态:PLANNED_NOT_EXECUTED。本次用户批准更新规划,不新增远端操作、提交或部署。主会话执行/自检,不派实现或检查子代理;需独立内容复核时单列真实外部结论。技术执行与证据由执行端负责,责任人沿原task的shunli;只在范围、风险、验收实质变化或受保护操作需要时集中确认。
|
||||
|
||||
| 顺序 | 归属与工作 | 可验收产出/退出条件 | 依赖与边界 |
|
||||
| --- | --- | --- | --- |
|
||||
| P0 状态对齐 | 本task | 以b1d25d3c发布回执更新代码/发布事实;旧22行表按PRD证据逐项映射,不按祖先关系全部打勾 | 已上线内容不重做;三处09-04/审批中心旧差异不混入本轮 |
|
||||
| P1 备份只读核验 | 08-28传输task,供08-23选源 | 同一观察时点核生产/ARM最新自然批次、manifest/字节/SHA、年龄、来源build/image、timer/最近退出码、容量及镜像平台;形成PASS/NO_GO/NOT_VERIFIED字段 | 先确认只读授权与访问范围;不以12:25手工备份冒充自然周期或异机副本,不重传/清理/修监控 |
|
||||
| P2 集中恢复申请 | 08-23恢复task | 固定一个源manifest与匹配镜像、一个ARM隔离目标、资源预算、禁外联开关、安全只读应用验证方式、精确清理对象及停止条件,提交一份操作清单 | 以P1最新事实为前提;缺架构/权限/密钥访问条件先查清,不请求用户提供密钥值;不默认采用09-15旧8d历史源 |
|
||||
| P3 一次隔离恢复 | 08-23恢复task | 获批后DB、附件引用/适用摘要、匹配应用分别出结果;记录RPO/RTO、原备份未变、生产前后健康、清理回执;失败按阶段停止并保留脱敏证据 | 未获源/目标专项批准不执行;缺失附件不按“可能测试”剔除;/ready不能替代应用业务读取和解密能力检查 |
|
||||
| P4 自然业务观察 | 本task、09-04退回通知、09-11交接 | 出现新回单时只读核队列→结果→实际登记;自然退回事件核站内待办/通知与企微投递记录,分别披露 | 无对象则等待,不重传已付回单、不发测试消息、不制造审批/付款;不阻塞P1/P2及技术债准备 |
|
||||
| P5 对账与债务 | 本task协调,09-05等原task实施 | 22项按代码/发布/验收/剩余对账;其他日期消费者先区分外部输入/内部派生,再按风险分批;错误遗留612次/591条为上轮基线,后续须新盘点 | 09-25复审、09-30必要延期提案、10-02查漏、10-05到期门禁沿原计划,不统一续期;这些是人工节点,不声称定时任务已创建 |
|
||||
|
||||
执行顺序P0→P1→P2→获批P3;P4等待自然对象,P5可在等待窗口并行。P1若已有一个合格最新异机批次,可进入恢复准备;08-28事件正式结案仍需两个连续自然周期的独立证据。资源不足、源损坏、身份/平台不符时停止,不自动更换成旧源或改用生产宿主。当前应交付的是P1只读操作范围与P2方案,不再为刚发布代码重复测试/打包/部署。
|
||||
|
||||
已知参考(非新核验):2026-09-16T12:25:04Z手工备份build842c61e6,manifest 3e8c9d900d2b5290fa73931aede61f5f48e421590292a120d14fd33222ede678;镜像归档b1407e44715d55a4aef07965ddeb34362683155df7b36cb95b637cd5376bd222;同机、未传ARM、未load。当时生产磁盘约27.41 GiB可用不是ARM今日容量。新自然备份与新平台事实都待P1核验,不拿旧86%/8.93GB或历史89GiB作门禁。
|
||||
|
||||
## R1外部内容结论接回与R2修订
|
||||
|
||||
已收到新Claude会话的只读内容审查:有条件通过,F1动态文案退化阻断,F3/F4需登记。本轮按原范围修复F1/F2并以311项定向回归、真实登录JWT+隔离DB+浏览器缺字段修正专项证明;F4转审文案写明10至500字;F5补财务双端href及BX/PB均消失断言,22项浏览器重跑通过。F3共享日期解析及其消费者留待独立批次,无历史数据回填;F6批量错误透传为后续债务,F7防枚举声明仅限邮箱码链,详情见09-05记录。
|
||||
@@ -70,7 +731,7 @@ E:真实单页隔离队列PASS保留,不重复消耗腾讯调用;自然生
|
||||
| 09-02-reimbursement-readonly-content-consistency | e48514d包含 | 当前候选包含 | 不能用付款页面验收覆盖只读页面 | 补只读角色及内容证据 |
|
||||
| 09-04-approval-return-notification-gap | 2e69fe4e包含 | 当前候选包含 | 本轮退回通知4项单测通过,不是生产投递 | 核routing及自然/受控投递,生产写入另批 |
|
||||
| 09-04-reimbursement-state-gap-finance-view | 后续229867f5等包含 | finance-owner-release已有发布/公网回执 | 当前代码已上线,不再“待部署” | 分开历史附件治理及未提交事实记录 |
|
||||
| 09-05-error-explainability-payment-readiness | a837912及后续原因码包含;本轮新增代码未提交 | 旧模块已包含,新一批提示未部署 | 本轮AST基线PASS,D阶段仍在实施 | 执行端按操作收口,不统一延期 |
|
||||
| 09-05-error-explainability-payment-readiness | a837912及后续842c61e6/b1d25d3c包含 | 最新日期/动态提示批次已发布,calendar-contract-release可追 | 独立526项及构建通过;本轮AST registered229/legacy612/finding0 | 其他日期消费者分类完成,历史错误仍按原期限治理,不统一延期 |
|
||||
| 09-05-existing-deploy-db-lifecycle-isolation | f223bfb包含 | 本次部署证明DB未重启 | 本次运行证据不是首次初始化全路径测试 | 合并已存合同测试与发布回执 |
|
||||
| 09-05-trellis-upgrade-rule-cleanup | review状态,无登记commit | 本地工作流无需公网发布 | 本轮治理检查PASS不代替原改动审查 | 核既有规则清理差异,不重装Trellis |
|
||||
| 09-06-release-gate-integrity | 81102c26有提交 | 当前发布实际执行前后预检PASS | 当前pending=none,不伪造故障生产演练 | 故障断言沿原合成证据对齐 |
|
||||
|
||||
@@ -1,5 +1,77 @@
|
||||
## 2026-09-18 G19 最新验收状态
|
||||
|
||||
分层验收已获明确批准并本地实施验证:完整发现65/365,351本地、12同候选公网义务、2冻结旧链。74项覆盖/runner、7项诊断检查和2条本地冻结保护通过;原完整full-r2仍失败,公网NOT_RUN_LOCAL、独立PENDING,R1未启用。具体合同、证据、失败保留及后续顺序见implement顶部;未提交部署或执行真实操作。
|
||||
|
||||
## 2026-09-18 最新协调状态
|
||||
|
||||
G18已补OCR/R108/33路由覆盖并修三处本地缺陷:票据详情状态、PWA更新事件、采购创建事务。原四文件并发4/4和最终认证/OCR18/18通过,产品131/QA39各按输入分列。官方执行接回09-06;完整门禁/12公网与2冻结归属/WebKit/R1/独立及真实业务发布仍开放,见implement顶部。借款T1–T4、ERP退役、strict遗留0保持先前本地完成,未部署。
|
||||
|
||||
# 报销付款与银行制单业务闭环
|
||||
|
||||
## 2026-09-18 G16/G17 门禁接续结果(最新协调入口)
|
||||
|
||||
官方 current 仍为 09-06-release-gate-integrity。普通完整 full-r2 已运行:65 文件/359 用例,326 passed/12 failed/5 timedOut/16 skipped;后续 14 条原失败观测已有当前合同定向通过,另补原 R75 串行未执行 2 条;WebKit 1 条缺运行时、冻结差旅 2 条保留。当前发现 64/358 对应严格重复付款整例退役,无缺失/未知;枚举包装器临时摘要采集告警保留。不是一次全量通过,原结果不回写。
|
||||
|
||||
账号强制改密/场景8及批次付款拒绝/资产编号/合成通知配置已接现行合同;合同管理对照和原只读整例 4 类实际页面动作非零反例完成本地验证。审批进度、付款、回单、核销/PDF/审计/AP 整链及真实 PWA 单独通过。PWA/事务/长链的完整并发稳定性不据单独通过关闭。20 路由项视觉矩阵通过,但 `/system/*` 未展开,不能称全部页面覆盖。
|
||||
|
||||
本轮证据与增量候选在 full-gates-followup-20260918;旧 25 目录/7656 文件及 290 项原差异快照按 protection-result 核验保留。最终检查/候选摘要见同目录回执,独立 PENDING。借款 T1–T4、ERP 退役与 strict 遗留 0 维持此前本地完成,旧“借款尚未实施/ERP17余额”是历史状态。
|
||||
|
||||
余项按 09-06 implement 顶部六组接续:G18 本地 OCR/R108/真实路由覆盖;完整集合归属与并发可靠性;WebKit;R1/独立审阅;真实批次/个人通知/银行/K1/K2/恢复事件及自然业务事实;最后才是另批提交发布。真实处理人/企微个人发送尚未查询,借款未据此上线。未连接生产/ARM、读取真实秘密配置备份、重跑旧恢复、提交推送部署归档或发送真实通知/付款。
|
||||
|
||||
|
||||
## 2026-09-17 历史验收与技术余项范围确认(当前合同)
|
||||
|
||||
用户批准继续本地历史验收证据对账、三类技术边界确认和独立复核交接。交付为22历史任务逐条件支持/缺口/后续动作、低年份/AP反向区间/损坏导入文件的在用性与兼容决策,以及K0/当前产品2主题的准确候选入口。原231项索引为历史输入,不把勾选或提交包含作为验收;当前新增条件另列,不改原未满足复选框、不归档。
|
||||
|
||||
当前错误合同限定修复已收敛:520入口已处理503,剩17为用户明确排除的ERP旧分支。日期D1–D14已完成各自限定批次,三类余项本轮先核范围和规划,不擅改产品规则。具体清单/证据入口见implement顶部;下方589命中/HR待实施等描述保留原时点,不再作为当前余额。
|
||||
|
||||
验收需有逐项来源/证据层次/具体剩余;找不到证据如实标明,不为旧/待精简模块追加修复。独立复核在inline限制下保持PENDING,本地报告不冒充独立结论。本轮不访问生产/ARM或真实密钥配置备份,不重跑恢复,不提交推送部署归档,不实施借款。
|
||||
|
||||
## 2026-09-17 按后期规划连续执行(当前合同)
|
||||
|
||||
用户已批准连续完成可执行的本地工作。本轮沿09-05落实D5–D11日期治理(D8为盘点)、CSV日期时区缺陷及9原因,分别520项和61项定向测试通过;前端类型/构建通过。事件缺口方案、22历史task的231复选条件索引和借款T1a字段/约束/锁图草案同步落盘,未把索引/草案当作结案或产品实现。最新完成/剩余量见implement顶部,旧“仅整理/未实施”段落保留原时点。
|
||||
|
||||
原边界持续:仅本地合同/合成验证,不读真实配置密钥备份、不访问生产/ARM、不重跑旧恢复、不提交推送部署归档。W1独立复核、W3四恢复出口、W4六证据缺口、W7两自然业务链仍开放;W5剩568指纹/589命中,W6剩HR多格式及其他日期格式待审;W8逐项实质验收、W9借款后续原型/产品阶段仍未完成。当前不提供总体完成百分比。
|
||||
|
||||
|
||||
## 2026-09-17 后期工作详细整理合同(最新入口)
|
||||
|
||||
本轮交付为后期工作总表及剩余量,不新增产品、真实数据或发布执行。复用本task协调8条既有工作线和1条借款新功能线;每条写明归属、已完成/待实施/待事实/待授权、可观察退出条件和依赖,详见implement顶部。官方current已切回本task,09-05继续拥有日期/错误治理实现。
|
||||
|
||||
已完成K0、B1/B2和D1–D4本地结果分开登记;原受限恢复仍PARTIAL。剩余598次AST命中、577条指纹、58个扫描分组及借款4阶段/8项AC按各自口径统计,不相加成任务总数或推导整体完成百分比。历史22任务索引不等于22个未实现功能;当前23合同包含借款。未来到期节点不提前勾选,既有验收保持。
|
||||
|
||||
本轮仅更新现有规划和对应notes、执行文档治理及摘要对账;不访问生产/ARM,不读取真实配置/密钥/备份,不重跑旧恢复,不提交/推送/部署/归档,不开始借款或新日期批实现。
|
||||
|
||||
## 2026-09-17 后续优先级规划(仅规划批准)
|
||||
|
||||
用户要求按“先关键遗留、后借款新功能”的建议规划。沿用本任务协调,密钥保管/敏感恢复归08-23,日期/错误治理归09-05;仅借款业务新建09-17-company-loan-principal-repayment,保持planning。本轮不重新开启已结束的受限恢复,也不改变上一节阶段收尾事实。
|
||||
|
||||
验收顺序:先完成08-23的本地恢复合同和合成验证准备,按实测条件另批密钥保管核验及受控恢复;等待受保护操作时推进09-05外部输入和到期治理,不因外部等待停掉可做的本地工作。新借款任务先完成规划,关键遗留的证据或风险处置明确后再决定开发准入;上线不得默默豁免密钥/恢复风险。自然事件观察和历史task归档不作为所有新规划的硬前置。
|
||||
|
||||
具体阶段、责任、停止条件和新会话接续入口见implement顶部优先级表;每段实际实施仍须其最新方案已获批准,生产/ARM访问、密钥使用、恢复、部署及真实业务写入分别受保护。当前只授权规划落盘,不启动任何新增技术或运维执行。
|
||||
|
||||
## 2026-09-17 阶段收尾边界(当前入口)
|
||||
|
||||
用户采纳先收尾旧工作、再独立规划公司借款台账与本金归还的建议。本轮交付为已发布阶段的事实整理和后续责任交接,不是所有历史task的全量验收或归档。已核发布基线为b1d25d3c;已批准的一次受限ARM恢复已完成且入口已消费,整体仍为PARTIAL。完成项及证据、未完成项归属/触发条件以本task implement顶部“阶段收尾与后续归属”为唯一协调入口,旧节保留历史时点。
|
||||
|
||||
本轮验收:完成项分列代码/发布/独立验证/真实业务边界;每个开放项均关联已有task、责任人和退出条件;纠正直接关联task摘要中的过期发布描述,不修改原未满足验收、状态或历史提交锚点;只做本地文档/流程验证,产品源码、冻结包、HEAD/index及本轮范围外差异保持。保留自然回单/通知观察、完整恢复与密钥保管、传输事件其他验收、日期/错误治理及历史证据映射待办,不自动延期或制造业务事件。
|
||||
|
||||
阶段完成不等于本task完成,status继续in_progress。新借款需求不加入本任务的付款类型、审批或回单范围;后续独立建task并审阅方案后才实施,新功能上线仍须评估已有资金与恢复风险。本次“收尾”不包含提交、推送、归档、部署、真实付款、重新恢复或新任务实施授权。
|
||||
|
||||
## 2026-09-17 恢复阶段执行结果
|
||||
|
||||
P2/P3本次已批准的受限ARM影子恢复完成:真实DB和影子认证只读应用PASS,附件仅1条精确已接受历史缺件、未知不一致0,清理及生产/源/监控后验PASS。整体保留PARTIAL,敏感字段解密未验、密钥来源UNKNOWN;这不等于全量灾备或其他自然业务/到期治理任务完成。新入口已消费,不重跑、不要求重复授权,详见08-23及本task实施记录最新节。
|
||||
|
||||
## 2026-09-16 上线后剩余工作合同(当前入口)
|
||||
|
||||
用户要求按建议更新规划。复用本任务协调,恢复和异机备份继续归08-23-isolated-backup-restore-drill、08-28-production-arm-backup-transfer-incident;不新建重复总任务,不将本轮规划批准解释为远端执行或恢复授权。
|
||||
|
||||
已完成基线:b1d25d3c已按批准上线,日期/北京时间提示增量独立内容审查和独立526项/typecheck-build通过,部署后只读验收通过;证据归calendar-contract-release及calendar-contract-review-followup。下面的历史“未提交/未部署”保留时间语义,不驱动重复实施。现有842c61e6同批备份与独立镜像仅同机完整性通过,未证明异机到达、配对恢复或当前b1d25d3c同源自然备份已形成。
|
||||
|
||||
本轮目标依次为:先只读选定可验证的源/目标并核异机新鲜度,继而集中申请一次隔离恢复授权,完成DB+附件+匹配应用分项验收;自然业务旁路观察和历史任务/技术债对账可并行,不要求员工代做软件回归。详细依赖和清单见本任务implement最新节及两个恢复任务。
|
||||
|
||||
完成判据:恢复分项有实际执行证据、生产未受影响且本轮临时资源清理完成;异机状态区分一次恢复可启动与连续两自然周期事件结案;业务只认自然发生的回单/通知结果,没对象记WAITING_NATURAL_EVENT而不是PASS;任务对账区分代码/上线/验收/等待,未覆盖日期消费者与错误豁免按原期限跟进。密钥来源UNKNOWN保留,不追问值、读历史命令、轮换或扩权。提交、推送、归档、真实恢复、生产/ARM写入仍分别明确授权;本轮只更新规划和本地文档验证。
|
||||
|
||||
## 2026-09-15 六项统一收口合同(本轮最新)
|
||||
|
||||
用户采纳后续六项并要求一次规划、连续推进,非必要不提问。复用本任务承接报销付款闭环的统一协调,具体实施仍归已有模块task,不创建新总控系统或每个修复一个task。此增量是后续批准范围,历史阶段的未部署描述不代表当前状态。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"id": "reimbursement-payment-closeout",
|
||||
"name": "reimbursement-payment-closeout",
|
||||
"title": "报销付款与银行制单业务闭环",
|
||||
"description": "围绕0014待付款、三张退回报销及建行xls制单推进业务闭环规划和限定技术债修复;复用已有付款能力,生产数据、真实业务操作和发布分别批准。",
|
||||
"description": "报销/付款与借款本地成果保留;G18覆盖及PWA/采购等三处限定修复已验,余项集中于完整门禁、独立、真实业务与发布。",
|
||||
"status": "in_progress",
|
||||
"dev_type": null,
|
||||
"scope": "business-payment-closeout",
|
||||
@@ -21,6 +21,32 @@
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "2026-09-10:代码已实现付款中文文件名、下载免手填理由、右侧处理进度及共享UTF-8文件名解析;与09-04退回留痕删除按独立补丁完成本地联合验证(296+7单测、19页面回归、真实隔离DB/HTTP/双端),不混提交。发布未执行;业务仅确认用户已成功下载旧版制单,银行实付/回单未代办。当前等待独立只读复核及明确提交发布授权;不让员工代测。详见implement.md本轮证据。",
|
||||
"meta": {}
|
||||
"notes": "2026-09-19 g20-full-r6:4437后端通过/1原跳过,372本地浏览器全过;PARTIAL仅dirty_candidate,独立PENDING/无部署,旧registry保护例外保留且无新增漂移。当前余额见implement顶部。\n2026-09-18 G19分层验收已批准并本地实施验证,74+7合成检查和2条冻结保护通过;公网12义务/完整门禁/WebKit/R1/独立及真实事实保持开放。\n2026-09-18 G18本地接续完成:33路由项、R108、OCR;并发4/4、认证/OCR18/18、unit131。原full-r2不回写;12live/2冻结验收G19本地实施验证完成,公网义务待兑现、WebKit/R1/独立/外部事实仍开放。新包local-coverage-g18-20260918,未提交推送部署。\n2026-09-18协调更新:09-06完成G16/G17本地批次,普通全量仍失败;14原失败观测及2串行缺失已定向重验,WebKit/冻结差旅/完整覆盖与可靠性、R1/独立及外部事实仍开放。借款T1–T4、报销反馈与ERP退役维持此前本地完成,非公网事实。最新入口见implement顶部。\n2026-09-17本轮W8/W6:22任务231条件逐项处置,154历史支持/56部分/11外部/4替代/4冻结/2条件未触发;82引用定位,接回AP/seed/预检b87cc55发布事实。B34损坏导入500与合成日志内容已复现并规划、未修;低年份分支分类完成,AP反向保持原语义,73项通过。K0/G8两主题完整性与运行时保持、独立PENDING;无新产品、远端或提交发布。\n连续推进至D10/D11,另9文件61通过;后续剩HR多格式策略、589错误遗留及各外部门禁,未宣称全部结束。\n2026-09-17后期连续执行:日期D5-D9、9原因及520本地验证完成;事件六缺口方案、22历史task231条件索引、借款T1a技术草案落盘;独立/恢复/自然业务/产品准入仍开放,无生产或提交发布。\n2026-09-17后期总表:官方current已切回本task,仅整理规划;K0本地30项/166键、B1/B2的450项与前端构建、D1–D4的192项/治理均有各自回执,未提交/发布,独立复核PENDING。按8条既有收口/治理+1条借款新功能共9条工作线编排;错误债务577指纹/598命中/58扫描分组,2026-10-05到期不变;日期新D5–D8只规划。K1/K2、历史缺件/完整计时、备份事件、自然付款/通知、22项历史任务验收映射均保留。借款planning,4阶段/8项AC待实现验收。原受限恢复PARTIAL与入口已消费不变,未连接生产/ARM、读真实秘密/备份或重跑恢复,未提交推送部署归档。最新范围、依赖、量级和人工节点见implement顶部,不按测试数量宣称全量完成。",
|
||||
"meta": {
|
||||
"g18Local": "verified_scoped_not_full_gate",
|
||||
"independentReview": "PENDING",
|
||||
"g19": {
|
||||
"state": "LOCAL_VERIFIED_PUBLIC_PENDING",
|
||||
"discovered": 365,
|
||||
"localMandatory": 351,
|
||||
"publicMandatory": 12,
|
||||
"frozenRetained": 2,
|
||||
"coverageTests": 74,
|
||||
"freezeProtectionPassed": 2,
|
||||
"independentReview": "PENDING",
|
||||
"normalReleaseEligible": false
|
||||
},
|
||||
"latestLocalCandidate": {
|
||||
"run": "g20-full-r6",
|
||||
"localChecksPassed": true,
|
||||
"receiptStatus": "PARTIAL",
|
||||
"browserPassed": 372,
|
||||
"publicPending": 12,
|
||||
"independentReview": "PENDING",
|
||||
"deploymentEligible": false,
|
||||
"legacyProtectionStatus": "FAIL_ONE_KNOWN_DERIVED_REGISTRY",
|
||||
"newProtectedDrift": false,
|
||||
"productionNumberingActivated": false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# 规划与执行清单
|
||||
|
||||
## 2026-09-17 历史发布回执接回(仅本地文档对账)
|
||||
|
||||
09-08本轮W8逐条件对账从主checkout同名task implement的“已按本候选例外完成部署(2026-09-09)”接回原文档引用,并核现有脱敏postcheck-result.json;不复制整份旧文档覆盖本副本,也不读取原始发布日志/环境或连接远端。准确来源/行号/摘要与布尔事实见acceptance-boundaries-20260917的historical-acceptance-review.json及historical-report-facts.json。
|
||||
|
||||
seed分离已随b87cc55发布,init阶段validate_config→migrate→check_required_configuration且无seed;已有合成PG/组合110回归及有限独立review保留,不重做已实现分离。
|
||||
|
||||
本次未执行新的发布、真实查询或业务写入;旧“未部署”段落是当时记录,不再代表追加阶段当前余额。原PRD未满足项不补勾,status/completedAt/历史commit不改,不归档。当前G8未提交产品增量仍待独立复核和新的交付授权。
|
||||
|
||||
- [x] 由用户采纳的队列进入本 task,官方 create 激活 planning;未运行 start。
|
||||
- [x] 确认两个无条件 seed 入口,建立需求/草案;关联既有数据库生命周期隔离合同。
|
||||
- [x] 核对仓库支持的部署/init 调用路径、最低配置与现有测试,形成待审方案和最小写入文件清单;不声称核对了仓库外手工命令。
|
||||
|
||||
@@ -21,6 +21,6 @@
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "",
|
||||
"notes": "2026-09-17 W8本地对账:seed分离已随b87cc55发布,init阶段validate_config→migrate→check_required_configuration且无seed;已有合成PG/组合110回归及有限独立review保留,不重做已实现分离。 原回执从主副本接回,见implement顶部;本轮无新的远端/提交发布,原验收未补勾。\n",
|
||||
"meta": {}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
## 2026-09-17 实施细化
|
||||
|
||||
`origin_reference`作为主体+出借人范围的原借入凭据唯一引用,防止更换幂等键重复登记。期初已还差额必须有adjustment证据。身份与账户分别版本控制,改账户同时撤销身份确认,旧未付快照失效。
|
||||
|
||||
新申请持lender→排序loan→日序号锁,只创建本事务尚未可见的新batch;所有既有batch路径先锁batch,核销沿receipt advisory→排序附件→lender/审批身份→排序loan,台账/身份维护不反向锁batch。取消保留旧申请和批次,不原位重提;一申请恰好一个保留批次。下载制单或上传回单转unknown,均不扣减本金。首期不能仅凭理由解除unknown。
|
||||
|
||||
借款材料沿现有PDF/图片字节检验,按种类归属借款、随机存储键、内容hash去重、授权下载理由和发送前审计;已确认材料保留,未新增物理删除接口。代账确认引用和四类材料承担本地业务证据门禁,不等同银行真伪核验。
|
||||
|
||||
下方“规划/尚未写schema/未运行”的文字为原方案形成时状态,当前状态以implement顶部实测回执为准。
|
||||
|
||||
# 本金归还最小方案(规划,未实施)
|
||||
|
||||
## 1. 复用边界
|
||||
|
||||
复用付款账户、批次制单/独立复核、回单存储/核对/交易去重及审计,不复制付款引擎。首期一张申请绑定一个活动批次、批次只有一笔付款;原借入分配保留在申请明细,不拆成两笔银行转账。付款批次复核即本次还款审批,不另接万能工作流;已有报销流程不改。
|
||||
|
||||
当前付款来源存在reimbursement/否则按travel_order处理的分支,新增loan_repayment必须逐消费者改为明确支持/拒绝,不能只加枚举。新来源覆盖候选/快照/权限/预检/创建/复核/导出/回单上传、job认领、匹配/人工复核/登记、列表统计和通知深链;未审消费者必须拒绝,不默认套差旅或报销。
|
||||
|
||||
## 2. 最小数据合同
|
||||
|
||||
- 个人出借人记录:公司关系、可选OA员工关联、身份核对状态、加密收款资料及审计。非员工不虚建员工;已分配后的身份/账户变化使未付申请失去就绪资格,不能只改姓名避开自审。
|
||||
- 借款记录:公司/出借人/币种、原始本金、已确认未还本金、核对截止日、历史登记标识、原入账/协议证据及确认审计。待确认不能支付,原登记与后续变动均可追溯。
|
||||
- 本金还款申请与分配:一对多关联原借款、精确分配金额、事由和提交人;同公司/出借人/币种,合计与唯一付款明细一致。提交时冻结来源版本/收款信息,复核和登记时重验。
|
||||
- 付款/审批状态优先由关联批次权威事实投影,不维护第二套可以独自变成已付的流程;会计交接确认单独存储,不等同银行已付。
|
||||
|
||||
最终表/字段名、索引与外键在实施前按Prisma现有约定确定。金额用Decimal或最小货币单位,不用浮点累加;活跃分配唯一约束、金额正数/上限及交易指纹占用必须有服务端/数据库保证。数据清理走留痕,不新增批次级联删除来源/交易证据路径。
|
||||
|
||||
## 3. 并发与状态不变量
|
||||
|
||||
提交申请在事务中按稳定顺序锁定借款记录,重算已确认未还本金减活动占用;只有余额足够才创建分配及批次。并发同一借款只能占用可用额度,不以页面预检授权。编辑已提交申请须退回/取消原活动付款关系后重新提交,不能改已审快照。
|
||||
|
||||
登记路径保留既有批次→交易advisory→附件锁序;涉及多笔借款锁时按稳定ID顺序追加,核各路径不存在反向依赖后才落实现。交易claim、分配核销、付款事实和审计同事务提交;中途异常整体回滚。已付请求重试不重复减款,重复银行交易在新来源及报销来源间共用去重空间。
|
||||
|
||||
待复核/已复核未付仅占用本金;银行在途/未知保持占用并显示查证责任,不能为解锁重付而标失败。安全取消或有依据的确定失败才释放额度;已付纠错另审,不回写历史余额掩盖错误。
|
||||
|
||||
## 4. 权限与回单
|
||||
|
||||
新台账沿财务全账读取与付款审查分离:财务管理台账,审批人只读其有权审批的申请及必要证据,普通员工无全账入口。制单人、提交人、出借收款人身份集合统一传给提交预检/批次复核/人工回单复核/登记重验;在职状态和业务权限不吃历史批准,admin通配不能替代独立身份。
|
||||
|
||||
银行备注采用短本金语义,年份不一致时不生成误导性单一年份;长事由留OA。对现有建行制单模板使用显式业务用途映射,原报销用途不变。回单识别范围只有经过新来源快照和权限校验才可扩展,不能无条件对新业务调用腾讯;真实样本/云调用另批,未验证前不宣称自动支持。
|
||||
|
||||
自动匹配需金额/币种/完整双方账号/成功状态/唯一交易身份满足;无OCR证据时沿既有双人手工录入复核边界,不把手工值称银行验真。人工复核不覆盖原失败或处理中状态,原件、指纹及版本证据保留;读取账号和原件继续权限/审计/脱敏。
|
||||
|
||||
## 5. 页面与会计边界
|
||||
|
||||
财务模块新增借款台账和本金还款入口,复用列表/详情壳、金额/日期格式、附件及下一步投影,保持既有PC/手机样式;不设计新视觉体系。详情显示已确认未还、占用、可还、历史借入分配和会计交接状态,不靠颜色单独表示风险;缺资料/无人可批/银行在途给具体责任提示。
|
||||
|
||||
只登记代账核对结果与凭证引用,不选择或生成会计科目、不作税务判断;历史确认和实际银行付款资料由有权人员提供,测试使用合成样例。
|
||||
|
||||
## 6. 验证与发布/回退
|
||||
|
||||
隔离DB/HTTP测完整申请→复核→回单→登记→分配核销;覆盖无独立审批人、收款人兼CEO、跨公司、余额并发、失败释放、在途不释放、重复登记、跨业务同交易、来源/账户变化及审计失败。浏览器用真实本地认证和合成数据,不把数据库直接置paid当付款流程通过。
|
||||
|
||||
新表和来源枚举属于迁移/权限/状态机变更,必须独立只读审查。新增枚举不保证旧镜像兼容;有新业务数据后不得直接退到仅识别两类来源的旧版,应保留兼容版本或写入隔离后另审前向修复,不删新账/claim“回退”。发布前重新核候选、备份、原密钥保管和相关敏感恢复风险,不沿用旧例外或已有一次演练授权。
|
||||
|
||||
|
||||
## 7. 2026-09-17 源码消费者地图与技术定稿要求
|
||||
|
||||
| 消费者 | 已核事实 | 新来源实施前必须证明 |
|
||||
| --- | --- | --- |
|
||||
| Prisma `PaymentBatchEntityType` / `PaymentBatch` | 现有两类来源;原有批次/回单/claim关系存在 | 增量枚举、新来源关系与索引显式约束,旧数据无回写;新增来源出现后旧镜像不作为无条件回退 |
|
||||
| `paymentBatchReadiness.js`、`paymentBatches.js` | readiness非报销直接冻结;路由多处报销/否则差旅分支 | loan_repayment单独资格与快照适配;未知来源一律拒绝,travel_order继续沿原冻结规则 |
|
||||
| `paymentReceiptVerification.js`、`paymentReceiptManualPersistence.js` | 真实核对及人工持久化明确仅报销 | 新来源独立参与人集合、同一transaction claim去重、版本与成功状态规则;不能只删除reimbursement检查 |
|
||||
| `paymentReceiptOcrJob.js`、`paymentReceiptMatching.js` | worker认领与匹配受业务来源限制 | 新来源eligibility与只读storage边界明确后才允许进入队列;真实云端样本未验另记 |
|
||||
| `client/src/api/paymentBatches.ts`、`PaymentBatchesPage.tsx` | 创建按报销,详情部分二选一标签默认差旅 | 类型/入口/详情/深链/统计显式处理本金还款,保持原报销操作与普通员工权限 |
|
||||
|
||||
拟以`LoanLender`、`CompanyLoan`、`LoanRepayment`、`LoanRepaymentAllocation`四类核心关系承载出借人、原借入、还款申请和分配;借款材料使用专属证据关系,付款回单继续归原批次。命名和字段尚待T1按Prisma约定定稿,不创建通用财务台账/文件中心。约束至少包括来源版本、单公司/出借人/币种、申请与借款分配唯一、金额精确且为正、证据不级联删除及历史确认可追溯。
|
||||
|
||||
锁序定稿必须覆盖创建、重新提交、复核、取消、失败处置、回单登记和余额确认全部写入路径:既有批次先锁batch,再沿原交易advisory/附件顺序,之后按稳定ID锁借款并更新分配;不得存在先锁借款再等待同一既有batch的反向路径。新批次创建在同一事务中的新记录不会成为绕过额度锁的理由;若当前创建器要求反向锁序,应先调整技术方案并审阅,不能边编码边隐藏差异。并发与数据库回滚以真实隔离PG测试证明,mock只覆盖路由输入与调用边界。
|
||||
|
||||
|
||||
## 8. T1字段与约束定稿草案(2026-09-17,仅本地设计)
|
||||
|
||||
本节把前述概念模型具体化为实施合同草案,尚未写Prisma/迁移或启动数据库。金额沿PaymentBatchItem的Decimal(14,2),首期currency_code固定CNY;日期@db.Date,标识UUID,snake_case列名、复数表名、created/updated及操作者沿项目约定。绝不以Number累加核额度。
|
||||
|
||||
| 模型/表 | 核心字段与不可变事实 | 约束/索引及删除 |
|
||||
| --- | --- | --- |
|
||||
| LoanLender / loan_lenders | id、legal_entity_id、name、employee_id可空、identity_status(unverified/verified)、identity_version、account_version、bank_account_encrypted、bank_name、account_name_encrypted、archived_at | FK主体/关联员工Restrict;(legal_entity_id,id)唯一用于复合归属;身份和账户变更递增对应版本及留审计;姓名不作唯一身份;不保存明文账号或密钥摘要 |
|
||||
| CompanyLoan / company_loans | id、loan_no、legal_entity_id、lender_id、currency_code、original_principal、opening_outstanding_principal、received_date、balance_as_of、historical_entry、confirmation_status、version、confirmed_by/at、accounting_confirmation_ref | loan_no唯一;主体/出借人复合FK;CHECK 0≤opening_outstanding≤original且original>0、CNY;索引(lender_id,confirmation_status,received_date);确认前不能分配;确认后本金/期初余额不可覆盖改写,纠错另审留存 |
|
||||
| LoanRepayment / loan_repayments | id、repayment_no、legal_entity_id、lender_id、currency_code、reason、amount、version、submitted_by/at、lender_identity_version、lender_account_version、payee_snapshot_json(仅允许加密/脱敏值)、bank_result_state、accounting_handoff_by/at/ref | repayment_no唯一;amount>0;CNY;主体/出借人复合FK;bank_result_state仅作为银行结果证据分类,不替代批次审批/付款状态;申请提交后快照不可原位改;会计交接不是银行成功 |
|
||||
| LoanRepaymentAllocation / loan_repayment_allocations | id、repayment_id、loan_id、amount、loan_version、reservation_state(reserved/settled/released)、settled_at、released_at、release_reason | (repayment_id,loan_id)唯一,amount>0;FK均Restrict;索引(loan_id,reservation_state);跨行总额和同主体/出借人/币种在锁内检查,不能谎称单行CHECK能保证聚合不超付 |
|
||||
| LoanEvidence / loan_evidences | id、loan_id、kind(agreement/incoming/accounting_confirmation/adjustment)、storage_path、mime_type、file_size、file_sha256、governance_status、uploaded_by/at、archived_at/reason | 专属材料关系;loan/uploader FK Restrict;大小/类型沿受控附件合同;同一借款同一hash/kind防重复引用;访问需权限/审计。银行付款回单继续放PaymentBatchReceiptAttachment,不复制OCR/claim体系 |
|
||||
| 既有PaymentBatch增量 | entity_type增加loan_repayment;loan_repayment_id可空且FK Restrict,其他来源必须为空 | SQL CHECK来源与专属FK一致;对loan_repayment_id建status≠cancelled的部分唯一索引,executed仍占唯一,failed不自动解占;每批恰好一item、entity_id=repayment.id、amount=申请与分配之和由事务及延迟约束触发器验证,迁移原型需证明;旧两来源原数据不改 |
|
||||
|
||||
可用本金=已确认期初未还本金−本系统settled分配−reserved分配;已确认外部历史偿还只体现在期初未还及原证据,不能再次减账。每次提交/执行在CompanyLoan行锁下重算聚合,失败回滚不能留下孤儿claim/分配/审计。发布后修正期初余额需另有可追溯调整流程,不提供直接编辑confirmed字段的API。
|
||||
|
||||
活动批次取消后允许同一申请重提时,新建批次并重建新版本分配;原released分配不能覆盖掉历史金额,故首期更简单规则为取消后复制成新申请编号,旧申请/分配/批次保留。禁止对executed申请重新创建批次。批次草稿删除对loan_repayment明确拒绝,使用有理由取消;不能沿原Cascade删除回单/claim链。
|
||||
|
||||
## 9. T1锁图与并发验收(已对照当前源码,待数据库原型)
|
||||
|
||||
源码事实:paymentBatches.lockBatchWithItems锁batch;lockPaymentEntities目前reimbursement/否则travel_order;现execute先锁来源实体,再claimVerifiedReceipts;paymentReceiptVerification claim路径先交易advisory再按id锁附件,manualPersistence先batch→交易advisory→attachment。**不能直接把新借款塞入原lockPaymentEntities分支并声称满足前节锁序。** 新来源execute须显式分派,把借款锁放在现有receipt锁之后;旧两类路径保持原回归边界。
|
||||
|
||||
| 操作 | 固定锁序/验证 | 并发/失败退出 |
|
||||
| --- | --- | --- |
|
||||
| 创建申请和新批次 | lender→按id排序的loan→申请/分配→编号daily sequence advisory→插入本事务新batch;同请求幂等键唯一 | 在锁内重查确认/余额/版本;创建后不再等待任何已存在batch;两事务竞争同loan只能成功可用额度内的一笔 |
|
||||
| 复核、取消、失败处置 | 既有batch→lender→排序loan→申请/分配;不取receipt锁的路径不可调用需要它的子流程 | 重验独立身份/账户版本;只有未送银行或有确认失败证据才释放;failed状态本身不构成释放证据 |
|
||||
| 回单登记 | batch→全局receipt transaction advisory→按id附件→lender→排序loan→申请/分配/claim/付款事实/审计 | 所有写同事务;精确claim去重;审计失败回滚;重复成功登记返回原事实、不再减本金 |
|
||||
| 人工回单复核/OCR完成 | 继承原batch→advisory→attachment或原已核最小顺序;涉及额度时只能向后取lender/loan | 不得由持loan的路径回调此操作;失败/在途回单不可被人工改成成功 |
|
||||
| 出借人修改、余额确认 | lender→排序loan;只改来源版本/证据,不锁/更新已有batch | 未付资格在下一次预检/复核/登记重验时失效;禁止反向“来源锁→批次锁”广播更新 |
|
||||
|
||||
2026-09-17实施定稿:新申请先取得lender和排序loan锁,再分配编号并插入本事务的新batch;整个创建路径不等待既有batch。既有batch处理/重试不分配新编号,来源维护不反向锁batch。此顺序取代初稿序列锁优先的建议。数据库原型必须覆盖相反loan选择顺序、并行申请总额超过余额、取消与登记竞争、账户变更与复核竞争、同交易跨报销/借款竞争、最后审计抛错回滚、同幂等键重复请求。使用两条真实PG连接和barrier,不能由mock顺序调用替代。
|
||||
|
||||
bank_result_state分为not_sent/unknown/confirmed_failed/confirmed_success;新申请未制单可为not_sent,下载后不等于付款成功,也不允许仅凭OA记录仍未付就释放额度。无法证明是否已送银行时保持unknown并阻止重付;解除unknown需有范围的银行结果/未发送确认事实和审计。该状态仅控制风险守卫,已付仍以受核验的批次执行事实为准。
|
||||
|
||||
## 10. T1权限、接口和交付门禁
|
||||
|
||||
沿finance.ledger.view管全账读取,新增loan.manage管登记/确认/提交,不默认授予system_admin/普通员工;实际角色种子修改列独立权限审阅。payment.batch.review既有资格加“制单/提交/出借身份集合排除”,admin通配也不免除独立性。employee_id为空且identity_status未verified不得付款,已确认外部非员工不得伪建账号;同一人的多OA身份须先完成真实身份映射,否则不能假定独立。敏感查看沿专用权限与最小投影、审计和原字段密钥。
|
||||
|
||||
拟接口/lenders、/company-loans、/loan-repayments分开;创建与确认分离,提交返回关联批次,只通过既有/payment-batches复核/回单/登记完成付款。GET只读无隐式确认。每个写入采用版本检查及request key,409可重读不自动重复付款。界面沿现有样式,新增来源显式标签,不采用“非报销=差旅”默认。
|
||||
|
||||
T1文档切片完成;T1数据库约束原型、真实并发验证及独立审阅尚未完成,不勾原8项AC。T2–T4产品实现准入仍取决于本方案审阅和相关敏感恢复风险处置。没有运行Prisma迁移、建本地库、真实OCR、秘密/资料读取或付款。
|
||||
@@ -0,0 +1,95 @@
|
||||
## 2026-09-18 共享付款回归与交接补充
|
||||
|
||||
09-06本地受管重验已覆盖报销主管/财务审批、财务同页进度、批次独立复核、回单人工更正/独立复核、付款核销及AP/票据归档两条主链;完整r6为3通过/1入口矩阵失败,矩阵另在r7通过。此证据支持共享付款旧来源回归,不代替本task真实银行样本、独立资金链审阅或公网验收。当前官方current在09-06,本task仍in_progress;上批review-candidate-r1保护保持。独立问题及真实批次/银行/K1/K2清单见retained-gates-closeout-20260917的independent-and-external-readiness.json,均未进行真实查询或操作。
|
||||
|
||||
## 2026-09-17 最终本地回执(当前入口)
|
||||
|
||||
T1–T4本地实现与合成闭环完成,官方current保持本task,状态in_progress。证据根为`artifacts/qa-layout/payment-feedback-loan-slim-20260917`;最终`final-loan-browser`退出0:空库72迁移、9组真实PostgreSQL约束/两连接并发、16组正式登录Fastify/Prisma/PG HTTP场景、3组桌面/手机/员工拒绝浏览器检查全部通过;仅本轮容器/浏览器/服务/临时目录清理PASS。最终桌面、手机截图已查看,沿原有样式且银行字段脱敏;手机详情仍在移动入口。
|
||||
|
||||
报销原地进度`progress-green-r2`15/15;`loan-unit-r3`5文件212/212,ERP退出后的付款路由另在`erp-regression-r2`128/128通过。`final-client-build`typecheck/Vite/PWA、`final-prisma`、`final-module-load`通过。ERP共享回归按r1/r2已通过文件及r3修正后的63/63分别引用,不将分轮结果相加当全量。strict原因码850注册/886使用/legacy0/findings=[]。旧Browserslist/punycode提示和22个历史未登记文档不扩治。
|
||||
|
||||
### 验收支持与开放项
|
||||
|
||||
| 验收 | 当前证据与结论 |
|
||||
| --- | --- |
|
||||
| AC1 | 正式财务登录、历史两笔借入、凭据唯一、四类材料、余额确认及系统外已还证据通过。 |
|
||||
| AC2 | 两借款一付款、部分还本、精确金额、跨来源限制、超额拒绝、两连接占用和同requestKey并发幂等通过。 |
|
||||
| AC3 | 显式财务权限、经理/CEO独立审批、排制单/提交/收款人、无人可批与身份/账户版本变动拒绝通过。 |
|
||||
| AC4 | 审批/BIFF8导出不减本金,在途不释放;安全取消、独立确认失败、成功原子claim/核销及真实数据库审计失败回滚通过。 |
|
||||
| AC5 | 合成自动worker/双人手工回单、双方账户/币种/金额/pending负例、跨借款/报销交易去重通过;真实银行/OCR样本接受性仍待验,完整AC保留开放。 |
|
||||
| AC6 | 原借款分配、余额截止状态、独立会计交接与材料权限通过;不把无OA记录当无银行还款。 |
|
||||
| AC7 | 付款/制单/回单及ERP触达业务回归通过,PC/手机正式登录同链与普通员工403通过,默认银行信息脱敏。 |
|
||||
| AC8 | 迁移/锁图/回退影响已落盘;独立只读复核PENDING,08-23实际保管/恢复事实与银行样本/迁移发布条件开放。 |
|
||||
|
||||
主会话只读自审核对了显式角色、账户/身份版本、创建lender→loan锁序、既有batch→receipt→lender→loan核销锁序、loan错误整体抛出回滚、unknown不释放及ERP共享边界;没有把此自审称作独立复核。待办姓名区分可处理人与站内提醒对象,仅`wecom_app_sent`成功记录可描述个人发送,多接收人anchor不推断全部送达;真实批次姓名/企微发送事实未查。
|
||||
|
||||
最终`closeout-governance/process/docs`与两个task validate通过;文档仅原22项登记warning。保护核验`protection-final.json`:HEAD/index未动,22个目录6447个旧材料SHA与精确文件集合全部原样;177个旧差异151个逐字不变,26个在本批授权路径叠加修改。ERP退出留下的两处尾空格已修,最终diff和敏感回执另存。本批独立审阅入口为`review-candidate-r1`,仅按baseline快照计算本轮增量,当前源码快照、删除清单与定向证据分开;manifest外部完整性回执不自引用。独立状态PENDING。未读取真实配置/密钥/备份,未连接生产/ARM,未重跑旧恢复,未提交/推送/部署/真实通知或付款。下方阶段过程保持历史原文,不再代表当前未实现状态。
|
||||
|
||||
## 2026-09-17 T3/T4接续回执
|
||||
|
||||
T3及前端台账/付款分配/材料/会计交接已落地。`loan-payment-http-r3`:72迁移、9组约束、12组真实认证HTTP通过;`loan-unit-r3`:付款/制单/回单/通知5文件212项通过。`loan-browser-r2`桌面和手机走到还款详情并留截图,末项员工拒绝页断言错用地址导致整轮FAIL;已改为实际`/403`,不计该轮完整通过。新增跨借款/报销交易去重、金额/币种/双方账户/在途负例与同键并发,重跑中。
|
||||
|
||||
审批姓名区分当前可处理人和站内通知对象;企微发送只认`wecom_app_sent`成功,多接收人anchor记录不推出全部送达。不读真实delivery payload或配置。旧日期/恢复状态为历史规划记录,以本顶部实际回执为准。独立只读review PENDING;真实银行接受性、录入/付款/发布未执行。
|
||||
|
||||
## 2026-09-17 当前实施回执(取代下方旧 planning/未实施描述)
|
||||
|
||||
官方current已start并回读本task。T1增量schema、迁移、延迟聚合约束已落地;独占PostgreSQL无网络/无宿主端口/只用合成库。初始化socket路径已修正,失败轮次原样保留。`loan-db-prototype-r5` 全部72迁移和9组约束通过,包括实际双连接锁等待与超额拒绝;容器清理通过。
|
||||
|
||||
T2台账/加密出借人/身份确认/原凭据唯一/材料上传下载/期初余额确认已实现。`loan-ledger-http` 真实密码登录、正式auth插件及Fastify/Prisma/PG验证5组接口场景通过,同时重跑9组DB检查。普通员工、经理、system_admin及仅admin不能管理借款;期初余额少于原本金须补系统外已还证据;审计失败由数据库触发,业务写整体回滚。Prisma validate/generate通过,generate使用本树既有链接依赖目录;不安装新依赖。
|
||||
|
||||
T3正在接入现有付款消费者:专属还款申请、多借款一付款、占用/独立复核、回单worker/人工例外、原子claim和本金核销;尚未完成本切片验证。T4前端和完整验收待执行。AC不提前勾选,独立只读复核PENDING,真实银行样本、发布、实际录入/付款仍未授权。
|
||||
|
||||
# 实施顺序(仅规划,尚未开始)
|
||||
|
||||
## 2026-09-17 执行优先级更新
|
||||
|
||||
用户要求尽快完成既有借款方案。先完成09-04两处真人反馈修复,随后官方start本task,本地T1约束/并发原型→T2台账与证据→T3本金分配及既有付款来源全链适配→T4合成闭环和旧报销回归连续推进。范围按原8项AC,不把文档齐全当产品完成。原“仅规划/不实施”的优先级由本节替代;真实操作与独立/发布门禁仍有效。
|
||||
|
||||
只使用运行独占的本地PostgreSQL和合成加密材料,禁外部通知/OCR/银行调用,不连接生产/ARM或读取真实配置密钥备份。无现成真实身份/付款事实时保持未确认,不用admin兜底。inline下独立只读复核PENDING,主会话不得冒称独立通过;未独立审查的新资金链不发布。
|
||||
|
||||
## 2026-09-17 T1本地技术准备回执(最新入口)
|
||||
|
||||
已按09-08后期规划细化design第8–10节:四核心表+专属LoanEvidence、既有PaymentBatch增量、金额/唯一/FK/删除保护、余额公式、权限/接口/并发矩阵。当前execute的来源锁早于receipt advisory,不能直接复用为借款锁序;已明确新来源分派和所有写路径的顺序。文档提出取消后新申请保留历史、unknown银行结果不释放/重付,原8项AC未勾选。
|
||||
|
||||
- [x] T1a字段/约束/锁图/消费者与测试合同草案,源码引用已核。
|
||||
- [ ] T1b获得进入条件后,以最小合成schema证明CHECK/部分唯一/延迟触发器/FK和两连接并发;尚未创建schema、迁移或数据库。
|
||||
- [ ] T1c独立只读审阅具体方案与原型,不把主会话对照源码计独立通过。
|
||||
- [ ] T2/T3/T4仍未开始;原恢复风险和产品实施准入保持,当前planning不变。
|
||||
|
||||
|
||||
## 准入
|
||||
|
||||
本task为09-08协调表的C阶段,不是其子任务。当前仍planning;本轮官方current在09-05执行本地治理,未切入本task。创建与规划补充不授权借款业务实现。先审阅本PRD/design,核08-23关键恢复状态和09-05到期治理结果;受保护操作等待不要求22项历史task全绿,但实际密钥不可用/敏感恢复失败没有处置时不直接扩大付款数据范围。
|
||||
|
||||
## 顺序与验证
|
||||
|
||||
- [ ] 取得本task方案实施批准,用官方task.py start切换并回读;检查执行树、AGENTS、相关backend/approval/receipt/security/frontend spec及未提交差异,记录只允许本批改动的路径。
|
||||
- [ ] 清点所有PaymentBatchEntityType消费者,设计最小Prisma模型/增量迁移、唯一约束、FK和权限矩阵;确认制单/复核/登记锁序与旧报销兼容,不引入通用工作流引擎。
|
||||
- [ ] 实现出借人/借款登记、证据与余额确认,先做无权限、身份不明、重复/历史登记和可用额度负例,再做正向。
|
||||
- [ ] 实现一申请一笔付款及多借款分配,复用批次独立复核;补同笔借款并发、取消/失败/未知在途和幂等断言,不能只用顺序mock证明防超付。
|
||||
- [ ] 显式接入用途/备注、快照/来源重验、回单队列范围/匹配/人工复核/全局交易去重;未支持分支拒绝,错金额/账号/失败交易没有人工旁路。
|
||||
- [ ] 接入既有风格的台账/还款列表与详情及会计交接记录,保持财务/审批人/普通员工可见范围和PC/手机同功能。
|
||||
- [ ] 在合成独立库运行真实路由、登录浏览器和DB同链;新业务反例与原报销/差旅、动态错误合同回归分别记录,不使用真实公司借款样本或真实付款。
|
||||
- [ ] 执行`cd server && npm run prisma:validate`、相关`node --check`及新增Vitest;执行`cd client && npm run typecheck && npm run build`及定向Playwright;新增测试文件及精确命令在实施时登记,当前不声称存在或已跑。
|
||||
- [ ] 执行原因码、Trellis/process/docs/敏感扫描及`git diff --check`;冻结候选并取得真实外部只读内容复核,主会话检查不冒充独立验收。
|
||||
- [ ] 新迁移/真实样本OCR、提交/推送、发布、真实资料导入及真实付款分别按具体范围取得批准;部署后只读验收通过才能告知公网可用。
|
||||
|
||||
## 停止与交接
|
||||
|
||||
收款人自审、超额占用、在途可重复付款、旧来源回归失败、秘密/真实资料进入日志或不可回退的迁移方案均阻断候选。找不到合格审批人时明确业务阻断,不通过改角色或admin兜底完成样例。业务少/无自然付款不制造交易测试;需要真实样本时先单独列授权范围。
|
||||
|
||||
08-23和09-05若新增重大风险,先回09-08协调;本task不顺手改生产密钥/恢复工具或替其他task清理。原始PRD验收保持未勾选,正式实施结果、测试、独立审查和发布分节记录。K0已完成本地验证,K1/K2仍无实际保管/真实解密证据;新会话先核09-08协调入口,不因文件齐全或K0通过就先开发借款模块。
|
||||
|
||||
|
||||
## 2026-09-17 规划补充与开发前审阅包
|
||||
|
||||
用户要求对未完成工作先补规划;本轮只更新本task计划,不新增枚举/表/接口/UI,不读取真实借款资料。K0的30项合成结果不能替代保管事实;09-05本地日期/错误治理候选也未部署。恢复风险处置、方案实施审阅及独立复核依然是进入条件。
|
||||
|
||||
- [x] 复核当前枚举只有reimbursement/travel_order,以及readiness、回单验证、人工复核和OCR worker对reimbursement的明确限制;记录下方消费者分组,不借新增来源解冻travel_order。
|
||||
- [x] 补迁移/锁序的待审技术切片和验收出口,前端沿既有布局,不新设计视觉体系。
|
||||
- [ ] 技术定稿T1:提出四类核心表及专属借款证据关系的字段/索引/FK/版本设计;按当前PaymentBatch/ReceiptClaim实际锁图审查,先以最小合成schema验证约束及并发,再实现接口。
|
||||
- [ ] T2:出借人/原借入登记及财务确认,只用合成资料;不自动产生付款或新增真实收款。
|
||||
- [ ] T3:新来源显式支持/拒绝矩阵、额度占用/幂等/状态与回单闭环;逐消费者负例后再接页面,不凭新增enum编译成功宣称支持。
|
||||
- [ ] T4:真实认证的本地路由/数据库/浏览器全链及旧报销/差旅回归,形成独立审阅候选;新来源OCR真实样本和生产录入仍另批。
|
||||
|
||||
这四切片复用原8项AC,不降低审批人独立性、并发不超付、在途保持占用、全局交易去重和审计原子性。日期/错误债务后续批次、恢复事实与借款开发分别交付,不要求22个历史task全部结案,但也不默认接受未知密钥风险。
|
||||
@@ -0,0 +1,76 @@
|
||||
# 公司借款台账与本金归还
|
||||
|
||||
## 2026-09-17 实施接续
|
||||
|
||||
用户明确要求借款尽快完成,沿本PRD与design既有个人出借人/CNY本金范围推进本地T1–T4,取代此前暂缓实施的优先级;不扩大为利息、备用金或通用付款。真实资料、余额和账户仍须正式录入核实,本地只用合成样例。风险与独立复核在交付/上线前保持未完成,不通过读取生产密钥或重跑旧恢复为本地开发解阻。
|
||||
|
||||
## Goal
|
||||
|
||||
让财务能按已核实凭据查清公司向个人借入的未还本金,并完成申请、独立审批、网银付款、回单留存和业务本金核销。OA管理业务台账及付款证据,代账系统负责原负债科目记账,不把借款还本变成费用报销。
|
||||
|
||||
## Background
|
||||
|
||||
- 用户提出历史两笔借入合并一次归还的真实需求;聊天提供的历史日期、金额和“本年无借还”尚未由本任务核验原始凭据,不据此创建真实余额或付款。
|
||||
- 当前代码仅有reimbursement/travel_order付款来源(`server/prisma/schema.prisma:273`);创建依赖已有来源单,不支持自由填收款人金额的通用付款申请。
|
||||
- 建行制单用途/备注按报销生成(`server/src/services/paymentOrderXls.js:158`);通用审批配置也只有既有五类业务(`server/src/routes/workflowDefinitions.js:9`)。回单OCR及人工核对范围须显式适配,不能只改备注。
|
||||
- 本task于2026-09-17获准规划,独立于报销收尾任务,status=planning。先处理08-23恢复关键遗留及09-05到期治理;本次不是实施、真实资料录入或付款授权。
|
||||
|
||||
## Scope
|
||||
|
||||
首期仅个人出借人(可为股东、非员工)的公司借入本金台账和人民币本金归还,沿现有建行付款支持范围;一张还款申请关联同一公司、同一出借人、同币种的一条或多条已确认借款,对应一笔银行付款。支持部分偿还,不建设任意用途的通用付款平台。
|
||||
|
||||
## Requirements
|
||||
|
||||
### R1 历史及后续借入登记
|
||||
|
||||
财务登记出借人、公司主体、借入本金、实际到账日期、协议/确认资料、原入账凭证及核对截止时点。历史登记与当前收款分开,不产生虚假的新增现金流。余额未经财务与代账确认时只能标待核实,不能用于还款;已在系统外偿还的本金须有依据并单列确认,不能重复冲减。出借人不必是员工,银行资料沿现有加密/授权查看/审计要求。
|
||||
|
||||
### R2 余额与还款申请
|
||||
|
||||
列表区分未还本金、已占用待付款额、可申请额及核对截止日期,资料覆盖不全时不得回答“已结清”。财务选择借款及本次分配金额,正数、两位小数且合计等于付款额;不得跨公司/出借人/币种合并。并发申请不能超额,已付、取消及有银行在途的状态必须分别处理。
|
||||
|
||||
### R3 有权且独立的审批
|
||||
|
||||
财务创建并提交,复用付款批次的经理/CEO独立复核作为首期还款审批,不再加一套重复通用审批链。审批人须在职、有明确业务角色及权限,排除制单/提交人和出借收款人对应的OA身份;身份不清或无人可批则阻止提交,不用admin通配兜底、不靠临时虚建员工绕过。对出借人的OA身份关联必须确认并留痕,执行时重验,不按姓名猜测。
|
||||
|
||||
### R4 付款与回单证据
|
||||
|
||||
审批只占用额度,不减少未还本金。财务在网银实际付款,用途为“还款”,短备注按借款年份/本金语义生成,受现有银行长度校验;详细原借款对应关系留在OA,不硬塞进银行备注。原件可先留存,但金额、币种、付款/收款账户、交易成功状态及唯一身份不满足时不得登记已付。
|
||||
|
||||
复用现有回单核对的自动匹配/人工例外边界,显式支持新付款来源;真实样本适配未验证前不能宣称新来源自动识别可用。OCR不清或不可用时,原件留存、经办录入、独立人员复核不能伪称机器核实或银行验真;明确失败、受理中、账户/金额不符及重复交易不得靠普通理由放行。独立人工复核继续排除收款人和提案人。
|
||||
|
||||
### R5 核销、异常与会计交接
|
||||
|
||||
只有符合既有付款登记证据门禁并由财务明确登记成功时,才在同一事务内占用交易身份、核销分配本金并更新付款事实;同一请求重试幂等,跨批次/跨报销复用交易拒绝。确认失败或未发起银行付款的取消可释放额度;银行状态未知/在途时不能直接释放后重付。付款已登记后的错误处置保留原事实,另审纠错,不删除或覆盖记录。
|
||||
|
||||
付款成功与代账记账分开,记录凭证编号/记账确认及材料交接,不由OA自动生成会计分录。材料包括原借入凭证、协议/确认书、余额核对、审批及还款回单;本金不要求费用发票,不进入费用报销统计或费用预算。关键材料按适用访问权限留存,历史余额/分配不得无审计改写。
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [x] AC1:合成历史两笔借入可登记并确认余额;未确认/重复登记/无凭据不进入还款,历史录入不被统计成当天新增收款。
|
||||
- [x] AC2:同一出借人两笔借款合并一笔付款、部分偿还正确;超额、跨主体/出借人/币种、重复提交和并发占用均拒绝或幂等,金额用精确小数。
|
||||
- [x] AC3:财务不能自审,收款人即使持CEO/manager或多角色也不能批准自己的还款;无合格审批人、身份关联缺失/变动拒绝,无管理通配旁路。
|
||||
- [x] AC4:审批/导出/上传回单均不会单独减少本金;处理中保持占用,确定失败/安全取消释放,明确成功登记与分配核销原子完成,数据库异常整体回滚。
|
||||
- [ ] AC5:正确回单可匹配新来源,错金额/账户/币种、失败/受理、同额歧义、重复交易、晚到版本及人工自审分别受阻;真实样本未覆盖的自动识别仍明确待验。
|
||||
- [x] AC6:付款完成可追到原借款分配和会计交接状态;余额查询标明截止/核对状态,不把OA无记录说成银行无还款,不把本金计入费用。
|
||||
- [x] AC7:报销/差旅既有付款、独立复核、制单、回单和权限回归通过;PC/手机沿既有交互,机密字段默认脱敏,普通员工不能读全台账。
|
||||
- [ ] AC8:迁移与回退影响、独立只读复核、恢复风险处置和发布前条件完整;本地合成通过不替代真实银行接受性或部署,真实录入/付款另批。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
- 不处理利息、工资/分红、员工向公司借备用金、资本金、债转股、机构借款、外币、退款或债务冲销。
|
||||
- 不做银行直连、流水自动导入、AI自然语言财务问答、自动会计凭证/税务、跨系统重复审批或全量ERP。
|
||||
- 不伪造报销单承载本金,不改现有报销一单一笔付款规则,不解冻其他低频模块,不引入新视觉设计体系。
|
||||
- 不索取聊天中的完整账号或真实凭证,不读取/轮换生产密钥,不沿用旧恢复/部署/真实付款授权。
|
||||
|
||||
## Test Plan
|
||||
|
||||
真实Fastify路由与隔离PostgreSQL覆盖AC1–AC6的正反例、并发和事务回滚;前端沿现有Vitest/Playwright以合成财务、审批人、收款人和普通员工验证PC/手机权限/动作/余额状态。跨业务重复交易与报销回归单列;仅云端响应可在合成测试中替换,不用预签身份替代正式认证全链。执行端承担软件验证,不让用户制造真实还款来代测。
|
||||
|
||||
## Current Status
|
||||
|
||||
T1–T4本地合成实施已完成,AC1–AC4、AC6–AC7有本地证据;AC5真实样本及AC8独立/恢复/发布条件保留开放。精确回执见implement顶部。未部署,不声称真实银行接受或真实批次已通知。
|
||||
|
||||
## Planning Status(历史时点,已由顶部实施接续替代)
|
||||
|
||||
本task已形成PRD/design/implement待审方案,本日追加源码消费者地图与T1–T4技术切片,无产品实现。实际借款余额、收款账户、审批人资格及银行样本属于录入/上线前的证据门禁,不把聊天转述视作已核实。08-23关键恢复及09-05治理的准入判断见09-08顶部优先级表;未取得本task方案实施批准前不得start。无必须现在向用户索取的秘密或真实资料。
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "company-loan-principal-repayment",
|
||||
"name": "company-loan-principal-repayment",
|
||||
"title": "公司借款台账与本金归还",
|
||||
"description": "本地实施公司借入本金台账、还款申请、独立复核及回单核销;只用合成数据,真实操作与发布另批。",
|
||||
"status": "in_progress",
|
||||
"dev_type": null,
|
||||
"scope": "company-loan-principal-ledger-and-repayment",
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "shunli",
|
||||
"assignee": "shunli",
|
||||
"createdAt": "2026-09-17",
|
||||
"completedAt": null,
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "2026-09-17 T1–T4本地实施完成:72迁移、9组PG约束/并发、16组正式认证HTTP和3组桌面手机权限浏览器通过;212定向unit及ERP退出后付款128回归通过,最终前端typecheck/build与Prisma通过。AC5真实样本/AC8独立复核、恢复事实与发布门禁仍开放;未提交推送部署。",
|
||||
"meta": {}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# 删除与保留边界
|
||||
|
||||
删除候选:server/src/services/integrations/erp*.js、jobs/erpMasterDataSyncJob.js,routes/integrations.js中的ERP专属接口和DTO/helpers、各业务ERP enqueue触发器;config/featureFlags/jobSystem/pgBossJobs的专属项;client ERP专属卡片、按钮与API;对应unit ERP专属成功路径文件。
|
||||
|
||||
共享保留:integrations/outbox.js、integrationOutboxJob.js中非ERP投递、notifications及wecom同步。历史ERP记录查询保留但不触发投递,retry明确拒绝退役事件。schema与历史迁移不动。
|
||||
|
||||
本task只清除已确认ERP范围,历史低频或0使用本身不足以删除工资/绩效/预算。历史测试/证据包保持原内容;旧17个ERP错误观测只有源码删除后才同步基线。
|
||||
@@ -0,0 +1,19 @@
|
||||
## 2026-09-17 本地实施回执
|
||||
|
||||
已删除6个ERP专属service、1个后台job和14个专属测试文件;各业务enqueue、ERP接口及前端API/摘要操作同步退出。AI资产建议使用的最小资产查询移入其实际消费者,未删除AI业务。共享outbox/notification/企微、历史数据库关系与迁移保留;历史ERP事件不被自动认领、手动retry拒绝、新enqueue及直接dispatch拒绝。
|
||||
|
||||
strict错误合同`erp-error-contract`通过:850注册、886静态使用、legacy=0、findings=[]。原17条均先删除对应ERP代码再退出基线,不通过延期或扩白求绿。9个共享回归文件在r1已通过;r2新增保留业务回归通过并暴露3个测试遗留断言,r3对相应文件及差旅付款轨道63/63通过。初轮失败和修正原样留存;各轮统计不相加成一次全量。
|
||||
|
||||
最终`final-client-build`的typecheck/Vite/PWA及`final-module-load`真实应用模块图加载通过。治理发现本task缺少Out of Scope/Test Plan/scope,已补齐合同,`closeout-governance`最终重验通过。尚未独立复核/部署,无实际队列或生产数据变更。
|
||||
|
||||
# 执行清单
|
||||
|
||||
- [x] 建task与删除/保留边界,源码首次检索已发现6个ERP services、主数据job、多业务enqueue及14个ERP专属测试候选。
|
||||
- [x] 逐消费者核完整清单;以TypeScript AST定位删除块,保留共享集成入口与历史查询。
|
||||
- [x] 删除专属后端/前端实现及无效成功路径测试;补退役事件拒绝重试验证。
|
||||
- [x] 跑受影响业务/通知/企微/outbox回归及前端构建;核错误基线变化。
|
||||
- [x] 更新当前事实源和本task实测回执,与借款/报销候选一并保护核验。
|
||||
|
||||
原规划已执行,当前状态以顶部回执为准。官方current已回借款完成联合本地验收。
|
||||
|
||||
最终保护核验:HEAD/index未变,6447个旧材料内容及22个目录精确集合未变;当前增量入口`payment-feedback-loan-slim-20260917/review-candidate-r1`,删除清单与本轮patch单列。后端全批语法通过;diff末两处ERP删除遗留空格已修,最终敏感/diff回执随候选留存。独立只读复核保持PENDING。
|
||||
@@ -0,0 +1,36 @@
|
||||
# ERP 专属遗留实现精简
|
||||
|
||||
## Goal
|
||||
|
||||
落实用户“用不到的功能、代码、测试要精简”的要求,沿当前产品不接 ERP 的决定移除专属实现,减少隐藏入口和无效回归。
|
||||
|
||||
## Scope
|
||||
|
||||
移除 ERP 主数据定时同步、ERP 适配/制单导出及业务触发器、专属 HTTP/API/UI、专属成功路径测试;保留已归档迁移和业务历史、通知/企微、通用 outbox/bindings、当前报销/付款/采购/资产/差旅业务。工资、绩效、预算等退役候选不在本次删除清单。
|
||||
|
||||
## Requirements
|
||||
|
||||
- 先建立源码消费者清单,删除调用与实现保持同批,不能留 require 断链。
|
||||
- ERP 历史 outbox 不重放;保留脱敏只读追溯、对退役事件拒绝重试。通用事件投递不受影响。
|
||||
- 不改历史数据库结构/迁移,不删除旧差异与证据冻结包。
|
||||
- 只做本地源码/合成验证,不访问真实配置、生产、ARM或外部ERP/企微,不提交推送部署。
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [x] 无可调用的 ERP 专属写入口和后台同步任务。
|
||||
- [x] 无残留已删除模块的产品依赖;前端不再显示 ERP 专属操作。
|
||||
- [x] 共享通知/企微/outbox,以及既有业务针对性回归通过。
|
||||
- [x] 专属旧成功路径测试随实现移除;保留拒绝边界测试,历史债务基线按实际移除精确更新。
|
||||
- [x] 前端typecheck/build、后端syntax、strict原因码/治理/敏感/diff与旧材料保护核验通过。
|
||||
|
||||
## Authorization
|
||||
|
||||
用户已明确要求实施精简;这是已确认不使用 ERP 范围的具体执行清单。新权限/支付规则不通过精简顺带改变;独立复核inline下PENDING,未部署。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
不删除历史表/迁移/审计/冻结包,不退役共享outbox、通知、企微、工资、绩效或预算;不进行远端操作、提交推送部署或外部消息投递。
|
||||
|
||||
## Test Plan
|
||||
|
||||
真实模块语法及前端typecheck/build;ERP入口404、历史outbox只读/拒重试、新enqueue与dispatcher拒绝、自动队列排除ERP;共享IM/企微、付款、采购、资产、差旅、feature flag与job回归。strict原因码仅按实际删除退出17条旧指纹;流程、文档、Trellis和敏感/diff检查,以及旧材料/HEAD/index逐项完整性核验。
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "erp-exclusive-retirement",
|
||||
"name": "erp-exclusive-retirement",
|
||||
"title": "ERP 专属遗留实现精简",
|
||||
"description": "按现行不接 ERP 的产品决定移除专属客户端、同步入口、后台作业与失效测试,保留通知、企微、通用 outbox 和历史数据;仅本地验证。",
|
||||
"status": "in_progress",
|
||||
"dev_type": null,
|
||||
"scope": "erp-exclusive-code-retirement",
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "shunli",
|
||||
"assignee": "shunli",
|
||||
"createdAt": "2026-09-17",
|
||||
"completedAt": null,
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "2026-09-17 本地退役实现完成:6个ERP service、1个job、14个专属测试删除,共享通知/企微/outbox与历史数据保留;新enqueue/dispatch及历史retry拒绝,旧pending不重放。受影响回归、typecheck/build、模块图与strict原因码通过,17条ERP旧债退出后legacy=0。独立复核PENDING,未部署。",
|
||||
"meta": {}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"file": ".trellis/spec/hyb-oa/deployment-trialrun.md", "reason": "受管本地验证与真实发布区分"}
|
||||
@@ -0,0 +1,91 @@
|
||||
## 2026-09-19 P10采购保存事务最小续修(沿用G20在用缺陷授权)
|
||||
|
||||
g20-full-r5完整372项为367通过/1失败/2超时/2串行未执行;环境和source/repository/owner清理PASS。采购唯一失败在PATCH保存草稿,原5000ms事务耗至6529ms、HTTP500,尚未进入precheck/submit或取号。已核运行日志归属(runner PID、namespace、入口、cwd、fd),只保留安全状态与耗时。日志未足以唯一归因数据库或调度耗时。
|
||||
|
||||
PATCH目前在FOR UPDATE后的写事务末尾读取PURCHASE_DETAIL_SELECT,包含多级关系,仅用于响应,不参与业务判定。复用已批准采购创建与资产响应读取边界:事务内原校验、两次父更新顺序、明细替换/金额计算、审计完全保留;await事务提交后,由同一服务器Prisma读取原详情select并按原mapper响应。保持原5000ms、无重试、权限和数据原子性;不合并更新、不重算编号、不移动一致性校验。
|
||||
|
||||
新增确定性边界回归:有明细/无明细PATCH完整响应和字段、只在提交后读取;父写入/明细/审计/commit失败均不读详情不成功;提交后详情失败返回错误但不宣称回滚、不自动再写。mock只证明调用边界,实际采购提单→审批→归档由原整例证明。先原实现红例,再最小源码绿例与采购相关文件,最后交09-06做四文件原并发定向及新完整候选。
|
||||
|
||||
此为在用缺陷最小优化,不新增业务规则或改变验收。独立review继续PENDING,不提交、部署或访问真实数据。
|
||||
|
||||
# 最小修复设计
|
||||
|
||||
## 2026-09-18 P9诊断与实施约束
|
||||
|
||||
### 诊断结果与最小方案定稿
|
||||
|
||||
p9-diagnostic-r2原R75四项全过,整个选择10项9过/1视觉超时,513.621秒,环境/输入/owner清理PASS。两次已编号提交26个Prisma操作,事务646.077/244.180ms;原5秒失败未在本轮复现。PG采样未见Lock,存在idle-in-transaction/Client等待;事件循环/池等待峰值属于整轮观察,不宣称都是提交原因。首轮仅因选择器用逗号在测试前拒绝,清理PASS且不计业务用例。
|
||||
|
||||
实施范围限定为已证明的重复开销:resolveEntityPrecheck在报销分支一次读取所需实体/排序明细/费用分类字段,内部私有计算函数共享这次服务器读取;费用标准、预算/审批规则、财务本人审批、票据/附件、时效等校验全部保留。原公开helper仍自己读取,不接受请求传入的快照,不引入跨请求缓存,也不把本次对象读取声称为整库RepeatableRead。采购/差旅分支不变。普通预算开关关闭路径的3次实体读取变为1次,开启路径4次变为1次。
|
||||
|
||||
提交路由保留原aggregate权威重算及写入顺序,不为微小收益改金额来源;旅行分类直接使用已在同一FOR UPDATE事务读取的明细分类,已关联差旅仍强制结构字段。绑定票据count仅在旧门禁关闭且存在需票明细时查询;开启逐项门禁仍执行原完整校验。状态、权限、锁、预算及审批历史/审计同事务、原5000ms均保持。
|
||||
|
||||
先添加确定性回归证明重复读取及无条件查询开销;覆盖两种预算开关、费用标准阻断、财务本人无CEO、真实实体缺失、跨调用重新读取和非报销旧分支,以及逐项票据/旧缺票/旅行字段边界。修复后跑相关unit与无预载原R75和付款链,最后仍须新完整负载通过;专项优化通过不声称已彻底排除原P2028。
|
||||
|
||||
用户已同意按六组后续清单推进。原失败为已编号报销提交的5000ms事务在5412ms后workflowHistory.create报P2028;旧号存在时不调用issueDocumentNumber,因此不能仅因时点关联归因新编号。先在本轮独占无网络合成环境运行原R75整文件,并与全页面阶段计时同轮观察。诊断仅从ignored预载记录Prisma模型/方法耗时与序号、事务耗时、事件循环和池等待;不输出参数、SQL正文、结果、凭据或原始异常。PG只读取聚合state/wait类别与事务年龄;校验本轮容器owner/namespace/目录绑定。预载不改变业务参数/返回值/错误或预算,正式验收移除预载。
|
||||
|
||||
已识别待核实的重复读取包括提交明细后再次aggregate、旅行分类查询和无条件绑定票据count,以及预检再次读取实体/审批信息。它们只是候选,不能把代码重复当作唯一耗时根因。最小方案须在诊断后具体定稿,涉及一致性的读不能移到事务外;确定性回归先证明旧实现的问题,修复后再原合成链验证。不得通过禁用预检、缩审批、增加事务超时或回退编号求绿。
|
||||
|
||||
## 证据
|
||||
|
||||
两轮分别采购P2028:5000ms预算、5952/6839ms后过期。诊断轮729次PG采样无Lock等待;失败窗口持续idle in transaction/Client,事件循环满载且池曾排队。此证据支持减少无关事务存续时间,不足以声称已定位全仓CPU根因;不改bcrypt/连接池大小或全局预算。
|
||||
|
||||
PWA诊断:B文档仍A,B预缓存首页与68个独有资源存在,controller=active且activated、no-store worker摘要匹配B,零页面/分块异常。native updatefound早于后一次sw.js请求记录(未直接采集register Promise完成时点);源码确认现workbox-window在await register后才订阅updatefound,且不补订阅已installing worker;autoUpdate只靠activated刷新,故可能漏事件。framenavigated含SPA同文档跳转,导航计数不等于重载次数。旧失败日志占位已纠正为实际快照/null,不能用占位推因。
|
||||
|
||||
## PWA
|
||||
|
||||
client/src/pwa.ts改为原生注册生命周期,先捕获controller并同步订阅controllerchange,再调用register。控制器切换后等待该worker activated,重复事件合并;首次接管只发原offline-ready,不刷新。已受控→新worker的更新:普通页清运行时缓存并刷新一次,认证输入页只发既有事件并交用户触发。同页失效worker不刷新。
|
||||
|
||||
vite.config.ts明确injectRegister:false,避免插件自动插入第二个注册/重载所有者;保留generateSW、skipWaiting、clientsClaim、缓存与manifest。不引入新UI/依赖,不改前台版本检测合同。显式登出/人工刷新保留既有全缓存清理;自动更新只清app-api-runtime/app-static-runtime。
|
||||
|
||||
本修复覆盖装载本次生命周期代码的浏览器;已运行旧代码的部署客户端无法被新页面代码追溯改写,首次发布仍按既有手册人工刷新并验证,不宣称旧版本历史代码全覆盖。
|
||||
|
||||
## 采购
|
||||
|
||||
创建事务select只含id/applicant_id/department_id,沿原extra写审计,返回id;提交后findUnique使用原PURCHASE_DETAIL_SELECT,再按原mapper响应。保留全部前置与原子性;响应读取失败仍按现有错误处理,不将已提交写入虚报回滚,也不新增自动重试。详情响应是提交后的当前状态,符合列表/详情同一读取合同。
|
||||
|
||||
## 验证与边界
|
||||
|
||||
产品测试先红后绿;生命周期用可控合成ServiceWorker事件验证顺序,真实A/B整例证明浏览器实际行为;采购路由模拟测试检查提交顺序/审计失败,真实PG采购整链证明成功下游。不带观察器的四文件并发作最终本地证据;全量、WebKit、独立/真实业务仍由协调task保留。主会话可检查事务/生命周期,但不能冒充独立review。
|
||||
|
||||
## 2026-09-18 G20 完整负载续修设计(已收齐并核清理)
|
||||
|
||||
来源:g20-full-r4 的资产创建与账号创建两个在用接口均出现原5000ms事务预算过期;资产5983ms,账号6004ms。观察器仅消费归属已核的本轮合成服务日志,无SQL或锁归因,不能声称唯一原因或全仓性能问题已解决。
|
||||
|
||||
### 资产创建
|
||||
|
||||
所有分类/主体/成本中心/人员/采购可用性校验、单号分配、资产写入、可选领用写入仍在原事务中。assetCard.create只返回原领用和审计所需标量;事务提交后按原ASSET_CARD_SELECT读取完整响应。原ASSET_CARD_CREATED审计仍在提交后发起并单独捕获失败,不挪入事务、不等待成功、不删除字段。详情读取失败不得重试创建或称写入已回滚;缺失沿现有asset.not_found合同。提交后详情是当前状态,不承诺和写入瞬间的关系快照一致。
|
||||
|
||||
### 单个账号创建
|
||||
|
||||
在现有权限、输入、受保护角色、部门/主管校验之后,使用相同hashPassword/真实cost12完成哈希,再进入事务。账号、角色与SYSTEM_USER_CREATED审计仍一起提交;P2002、一次性口令/强制改密、角色回读和提交后企微目录同步语义保持。createSystemUser内部只消费由服务器生成的passwordHash,不能从请求接收哈希。批量导入在既有事务/循环位置计算哈希,不扩改导入事务;不调整加密成本、连接池、事务预算或重试。
|
||||
|
||||
### 验证
|
||||
|
||||
先加入8项资产边界和5项账号边界回归,原实现运行取得真实红灯,再实施并运行相同测试及相关资产操作/搜索/校验、账号写入/角色保护/导入回归。Mock事务不冒充PG故障回滚;真实整链在受管合成PG上按原并发、预算、零重试验证,最后新完整候选从static开始。原失败、旧差异与冻结包保留,独立review仍PENDING。
|
||||
|
||||
不实施考勤重建,不改业务权限/审批状态机,不作线上写入。用户已另行授权的指定付款批次只读查询是单独证据,不影响本地环境归属或取得部署资格。
|
||||
|
||||
## Bug Analysis: 采购保存事务与完整负载
|
||||
|
||||
### 1. Root Cause Category
|
||||
- E 隐含假设:把多级响应关系读取放入5秒业务写事务,假定负载下仍有充足时间;PATCH已实测P2028,具体数据库/调度比例未知。
|
||||
- D 覆盖缺口:创建路径的定向通过不能证明保存路径和完整负载。此次原实现确定性边界红4项,修改后新增9项与原采购回归共167项通过。
|
||||
|
||||
### 2. Why Fixes Failed
|
||||
此前创建、资产、账号与报销修复各自只覆盖已批准入口;采购PATCH仍保留独立的响应关系读取。7组视觉独立运行通过也未证明15页管理员组在全负载可于180秒完成。不得据这些局部结果关闭完整门禁。
|
||||
|
||||
### 3. Prevention Mechanisms
|
||||
| 优先级 | 机制 | 状态 |
|
||||
| --- | --- | --- |
|
||||
| P0 | 非判定用途的响应详情提交后读取,锁/一致性校验/写入审计保留事务 | PATCH已实施;167项通过 |
|
||||
| P0 | 漏项/失败组拒绝及完整同候选运行 | 已捕获视觉缺页并拒绝;新完整待验 |
|
||||
| P1 | omitted/empty/items及write/items/audit/commit/read边界 | 新9项通过;mock不冒充PG故障注入 |
|
||||
|
||||
### 4. Systematic Expansion
|
||||
已只读检查采购邻近入口:submit/withdraw沿用各自业务事务与返回边界;archive小投影含审计所需字段,不能按关键词机械外移。当前仅修改已观察失败的PATCH,不把推测扩成全仓重构。当前未建立全负载耗时的唯一根因;修复仍须原整例和完整候选。
|
||||
|
||||
### 5. Knowledge Capture
|
||||
- [x] backend-fastify-prisma的采购事务节补PATCH、不变量、失败与当前已提交状态语义。
|
||||
- [x] 当前task design/implement记录边界与分轮证据。
|
||||
- 模板同步不适用:业务仓库无对应打包模板树。用户明确不提交,未执行skill中默认commit步骤。
|
||||
@@ -0,0 +1,2 @@
|
||||
{"file": ".trellis/spec/hyb-oa/frontend-react-vite-design.md", "reason": "PWA升级与认证输入保护"}
|
||||
{"file": ".trellis/spec/hyb-oa/backend-fastify-prisma.md", "reason": "事务审计和现有采购合同"}
|
||||
@@ -0,0 +1,106 @@
|
||||
## 2026-09-19 P9 定向补审接收与旧预算缺陷分流
|
||||
|
||||
Claude 补审 b1rubx7qf 已完成,原报告 `artifacts/qa-governance/business-followup-claude-review-20260919T023537Z.txt`。P9 三个纯函数共享一次实体读取且无跨请求缓存的结论 PASS;已审报销锁序、金额重算后同事务 precheck 为 PASS。reviewer 未逐行审全部路由分支/工作流 snapshot 内部,不扩为本任务全量独立 PASS。
|
||||
|
||||
预算池 used_amount 的无锁读改写确认为遗留并发缺陷,三模块共四处计数片段与 HEAD 一致;两 service 的周边错误码有既存差异,不声称整文件一致。按用户要求单列 `.trellis/tasks/09-19-budget-pool-concurrency/`,统一处理计数与锁后超额判定;目前只规划,未实施。P9 性能目标已通过与这个遗留缺陷待修分别记录,旧 r6/测试结果保留,发布资格仍 false。总体接回状态与未覆盖范围由 09-06 当前入口协调。
|
||||
|
||||
## 2026-09-19 P6–P10本地验收完成
|
||||
|
||||
g20-full-r6从static完成同一冻结候选:后端224文件4437通过/1原条件跳过、372本地浏览器全部通过,零失败/跳过/重试。资产、采购、PWA更新、R75四项和报销付款整链通过,P6/P7/P9/P10边界与原整链、P8完整负载验收完成。P10的原实现4红、修后167/167仍保留;写事务及响应读取语义不变更。
|
||||
|
||||
采购整例125.161秒;付款helper步骤264.491秒、Playwright总记录373.383秒,原300秒设置未改,前后开销差额没有独立拆分。完整来源、计时与证据统一见09-06 implement顶部。PARTIAL仅dirty_candidate,独立PENDING、无部署。
|
||||
|
||||
P5包含旧材料保护合取条件,因旧WebKit派生registry一处已披露改写而保持开放;原baseline不改,r6无新增漂移,其余12137旧文件与HEAD/index不变。不得将代码验证通过写成保护或独立复核通过。本次结束后仅补task记录,整体in_progress,不提交推送部署/归档。
|
||||
|
||||
## 2026-09-19 四文件定向通过,接完整候选r6(当前入口)
|
||||
|
||||
r5-fixed-r2四完整文件31/31通过,浏览器约5.5分钟、受管总571.747秒,零跳过/重试;采购整链、R75四项、付款提交至归档全链及视觉25项通过。付款约244.773秒,保持300秒;视觉7组各180秒、25PC+8手机/33PNG全部完成、覆盖问题与findings为空。环境/source/repository/owner清理PASS。原r5完整FAIL与r5-fixed-r1登录跳转失败均保留,不拼接为完整通过。
|
||||
|
||||
P10采购提交后读取边界167/167及QA专用类型已通过;登录仅在无query/hash的规范/login复用,保留原表单/portal/profile断言。下一g20-full-r6从static开始普通完整候选,全部源码/测试/task/spec/docs冻结,只写本轮ignored证据;N5/G20及产品完整负载验收仍待终态,独立PENDING、生产编号未启用。
|
||||
|
||||
旧WebKit派生registry保护异常保留,原baseline不改;后续运行使用本轮独立WebKit副本,不下载或安装。禁止将一处已知漂移描述为全部旧材料零变化;无提交推送部署或真实操作。
|
||||
|
||||
## 2026-09-19 当前入口:P10采购PATCH保存续修
|
||||
|
||||
P9的R75四项已在g20-full-r5完整负载通过,整体仍失败。新增采购PATCH P2028见design;原付款300秒/管理员视觉180秒累计超时由09-06接QA冗余前置优化。
|
||||
|
||||
- [x] P10a:证据/不变量定稿;原实现75项71通过、4边界红灯,失败记录保留。
|
||||
- [x] P10b:仅移出原响应select,新增9项边界;采购5文件167/167通过(11.68秒),源码语法/diff通过。
|
||||
- [ ] P10c:采购相关回归与原主链原预算验证,再接完整候选。
|
||||
|
||||
旧材料检查发现仅WebKit自动改写旧浏览器包GStreamer派生索引,原baseline不改,改写副本和FAIL留存;另建本轮独占缓存避免继续写旧目录,不能声称旧12138文件全不变。业务冻结材料、HEAD/index不变。独立PENDING。
|
||||
|
||||
## 2026-09-19 完整候选接续
|
||||
|
||||
grouped-visual-r1完整文件25/25通过(7真实组+13覆盖正反例+5原到达用例),浏览器91.788秒、受管总352.799秒;25PC+8移动全部审完,33PNG、findings为空、覆盖问题为空,环境/输入/owner清理PASS,零跳过/重试。P9/编号N5/G20仍待新完整负载验收;由官方current 09-06从static开始g20-full-r5,运行时全部受管输入冻结,独立PENDING。
|
||||
|
||||
## 2026-09-19 当前P9验证状态
|
||||
|
||||
完整后端224文件4428项通过、1原条件跳过,537.01秒,644输入文件/集合结束后SHA核验零变化。P9产品实现、确定性边界与无预载R75/付款链已通过,完整负载仍交09-06新候选验证,不能据此关闭P9/P8。7组视觉验收已获用户批准并实施,13覆盖正反例/专用类型通过,下一真实矩阵整文件定向后从static完整门禁;独立PENDING。
|
||||
|
||||
## 2026-09-18 新观察:报销提交事务(待定稿实施)
|
||||
|
||||
09-06的numbering-browser-closeout-20260918/browser-r2中,R75通知场景报销提交返回SYS_001;同一受管server日志定位P2028:原5000ms事务在5412ms后执行workflowHistory.create失败(reimbursements提交事务)。该轮64项58通过/4未过/2串行未执行,报销付款原整链另已通过。安全错误摘要在browser-r2-server-errors.json;未复制原payload,旧失败保留。
|
||||
|
||||
- [ ] P9a:重现并区分锁等待、事务内重复查询和同步计算;核对已编号创建提交不会进入缺号补号分支,不能只凭出现时点认定新编号导致,也不能据一个样本归因为机器慢。
|
||||
- [ ] P9b:在PRD/design定稿最小优化与不变量,再实施。保持FOR UPDATE、权限/所有权/状态、金额票据/预算、审批规则及workflow历史/审计的原子性;原5000ms、并发、零重试不调宽。事务内需要一致性的读不得无条件移到外部。
|
||||
- [ ] P9c:先有确定性边界回归,再做受影响unit与合成DB/HTTP;原R75通知及两个串行后继整文件验证,最后09-06从static完整新候选。定向通过不能代替完整门禁;独立review仍PENDING。
|
||||
|
||||
本轮先由09-06完成编号消费者/QA前置收口,没有改报销提交产品源码;P9为新增待办,不与之前资产/账号已通过结果混为完成。
|
||||
|
||||
## G20 产品续修单测已通过
|
||||
|
||||
两个接口最小修复已完成,原实现红灯7项/112通过,修复后两文件119/119通过(17.54秒);资产操作/搜索/校验与账号导入/敏感权限五文件148/148通过(23.71秒),受影响源码Node语法通过。合计267项包含13项新增边界,真实cost12未改;原事务预算、角色、审计语义与批量导入位置保持。下一步由09-06修QA前置及定向整例,再从static全量;P6/P7整体及P8仍待真实整例/全量,独立PENDING。
|
||||
|
||||
## 2026-09-18 G20 续修(已批准本地缺陷修复范围)
|
||||
|
||||
g20-full-r4已结束FAIL,5768.636秒:静态及完整内部前11阶段PASS,浏览器342通过/5失败/3超时/1串行后继未执行,零重试。环境PASS,source/repository未变,归属容器和scratch清理PASS。两个在用产品错误分别为资产创建P2028(5983/5000ms)、账号创建P2028(6004/5000ms),不归因于考勤/退役ERP。
|
||||
|
||||
先按更新PRD/design加入8项资产与5项账号边界回归并运行原实现取得红灯;再最小实现、相关回归及原资产/R75整文件验证。所有旧失败与冻结包保留,原超时/并发/零重试不变。证据release-receipt-g20-20260918,独立PENDING。
|
||||
|
||||
- [ ] P6:资产标量写入/提交后详情及原异步审计;先红后绿与资产相关回归。
|
||||
- [ ] P7:单个账号事务前cost12,原子写入/导入/权限合同回归。
|
||||
- [ ] P8:原整例和最新完整候选验收,协调09-06/09-08;不据定向绿结案。
|
||||
|
||||
治理收口:补齐本task标准Goal/Scope/Out of Scope/Acceptance/Test Plan章节与scope字段后,Trellis治理通过。3条大规约的自动注入截断告警保留;本轮inline按相关章节读取,独立审阅须按新增PWA/采购章节和原合同完整阅读,不依赖被截断上下文。
|
||||
|
||||
## 本地修复验证完成
|
||||
|
||||
131项Vitest、前端typecheck/production build、Prisma、浏览器专用类型通过;原四文件并发4/4,最终完整认证/门户与OCR18/18通过,环境/输入/清理PASS。PWA新资源实际加载与旧缓存清理共同成立;采购走完审批归档。原两轮失败与诊断不覆盖;不声明全仓CPU或完整负载已解决。
|
||||
|
||||
源码自检确认单一PWA注册所有者、先原生监听后异步register、首次/重复/失效/认证输入边界、更新保留precache、显式登出保留旧清理合同;采购权限/切换/默认字段/草稿审计原子性保持,详情只在提交后读取。模拟事务测试不冒充PG故障注入回滚证据。首次部署旧客户端仍需既有刷新验收。
|
||||
|
||||
最终治理与冻结见local-coverage-g18-20260918;独立只读review在inline限制下PENDING。产品本地实施完成,task仍in_progress,交由09-06/09-08协调后续完整门禁及发布边界;本轮无提交推送部署。
|
||||
|
||||
## 原并发整组通过,接最终共享入口回归
|
||||
|
||||
g18-concurrency-fixed-r3 583.240秒,原四文件4/4通过(浏览器约4.5分钟),4 workers/零重试/预算未变。观察器仅被动采本轮结构化日志,未加载r2预载诊断;995响应/0未处理异常。PWA B文档/active controller/worker摘要/68新缓存与2实际加载新资源,旧独有缓存0,零登录回落/静态404;采购已实际走完创建至审批/归档,而非只验证POST200。环境/source/repository/owner清理PASS。完整发现64文件363用例,无遗漏/未知/重复。
|
||||
|
||||
最后运行g18-final-ux-ocr-r4:完整login-portal-ux(16项)与invoice-ocr-flow(2项),验证共享PWA入口下认证输入/前台提示与本轮OCR产品修复保持;原预算/配置并发/零重试,不再改代码。此轮仍是本地定向,不能拼接旧full-r2为完整全绿。之后更新规约/09-06/09-08与最终治理/保护/增量冻结,独立PENDING。
|
||||
|
||||
## 第一轮定向结果
|
||||
|
||||
6文件131项Vitest通过,包括13项原生PWA生命周期及4项新增采购事务边界回归;采购提交/预算/附件/项目关联现有回归保持。浏览器专用类型与Prisma validate通过。产品前端typecheck正在完成;随后执行不带预载诊断的g18-concurrency-fixed-r3,原四文件4 workers/零重试/原预算。PWA加强新资源实测,只计performance已完成资源,并同时要求B缓存与实际B资源均存在,不用DOM标签或缓存替代真实加载。
|
||||
|
||||
# 执行记录
|
||||
|
||||
2026-09-18:依用户“按规划连续做、缺方案先更新”授权,先建立本task再编码。承接G18两条重复失败,证据在local-coverage-g18-20260918,旧包与两次失败不覆盖。范围与验收详见PRD/design,不扩权或加预算。
|
||||
|
||||
- [x] 实施PWA原生监听与单一注册所有者,回归首次/更新/认证页/失效/重复/显式清理。
|
||||
- [x] 最小采购写事务与提交后详情,路由审计原子性/顺序/响应回归。
|
||||
- [x] 不带观察器的四文件4-worker受管重验及受影响类型/build/Prisma。
|
||||
- [x] 只读自检、规约/协调状态、最终治理/保护;独立PENDING。新候选终态以本轮candidate-integrity.json为准。
|
||||
## 2026-09-18 P9已获批进入诊断
|
||||
|
||||
官方current已切入本task;用户同意后续清单。旧差异/冻结材料保护基线位于submit-visual-closeout-20260918:352项差异、34目录12138文件。先运行原实现诊断,只有全页面测试新增安全阶段耗时;原产品输入不变。收到终态、确认owner清理后再据证据定稿P9设计与确定性回归。原5000ms/并发/零重试保持,独立PENDING,生产/ARM/真实资料/提交推送部署边界不扩展。
|
||||
## P9诊断终态与最小实施
|
||||
|
||||
p9-diagnostic-r2:10项9通过/1视觉超时,R75四项全通过,0未处理服务异常;两次提交646.077/244.180ms、各26操作,未复现原P2028。确认预检重复实体/明细读取,按design的共享单次实体读取及提交旅行/票据条件查询最小方案先红后绿,不改变aggregate、事务原子性或预算。随后原R75/付款链与视觉同配置验证,再回09-06全量。旧失败与首轮选择器拒绝均保留,独立PENDING。
|
||||
## P9最小实现与单元验证
|
||||
|
||||
已完成feeControl内部单次报销实体读取,原公开helper/其他实体入口保持;submit仅复用旅行分类、按需执行旧绑定票据count,保留aggregate/写入顺序/原事务。原服务反例分别观察预算关闭3次、开启4次读取及跨调用6次,修复后每调用1次且下次重新读;路由三项重复查询反例先失败后通过。
|
||||
|
||||
七文件第一轮115通过/3失败,失败均为既有补助fixture有travel明细却未带出差结构、旧findFirst桩返回null隐藏了矛盾;按实际业务补齐三项合成出差字段,不改产品旅行校验。最终路由36/36通过(3.89秒),其他六文件82项保持前次通过(包括新服务8项),分轮不虚报为一次全量。首轮新增服务测试缺括号及预算开关fixture缺记录已修,失败日志保留,不计产品缺陷。下一按原配置无预载验证R75、完整付款链及全页面,再完整候选。
|
||||
## P9无预载原合成链已通过
|
||||
|
||||
p9-fixed-r3环境/输入/清理PASS、零重试,R75四项全部通过(通知95.039秒),真实报销付款主链281.132秒通过;同轮只有全页面视觉180秒超时,10/11通过,服务端1347响应无未处理异常。此结果支持本次提交优化与下游兼容,不代表已排除全部负载下P2028;P9/原P8完整候选门槛仍保持。09-06已提出不删页面的分组巡检具体方案,因改变累计预算已获用户明确批准7组验收;当前产品源码冻结供静态与治理检查。
|
||||
@@ -0,0 +1,43 @@
|
||||
# PWA 更新事件与本地并发产品缺陷最小修复
|
||||
|
||||
## 来源与批准范围
|
||||
|
||||
用户已批准按余项连续推进,未规划内容先落方案。09-06 G18两次同样的四文件4-worker并发验证复现采购500及PWA45秒不收敛;环境与输入/清理PASS。此task拥有两个在用产品缺陷的最小本地修复,09-06仍拥有完整覆盖合同。不能改变R2/R1或自动取得真实操作与发布授权。
|
||||
|
||||
## Goal
|
||||
|
||||
修复已复现的 PWA 更新后页面不收敛和采购创建事务过期,在原并发、预算与业务规则下完成本地验证。
|
||||
|
||||
## Scope
|
||||
|
||||
- PWA:页面已经受A控制,B worker安装/激活并接管后,当前普通业务页自动收敛到B。新版本监听须在异步注册前建立,不能只依赖Workbox注册完成后的updatefound/activated。首次安装不重复刷新;登录/改密/找回/重置密码页保留输入并使用既有更新提示,用户选择后才刷新;前台版本提示原合同不变。
|
||||
- 不在更新过程中删除刚安装的Workbox precache;旧独有预缓存由worker激活清理。运行时缓存清理与显式登出/人工刷新清理区分,保留后者原行为。
|
||||
- 采购创建:写事务只创建草稿及其审计,最小字段返回后提交,再按相同详情select读响应。权限、切换控制、默认字段、成功响应、审计内容和二者原子性不变;不提高5000ms事务预算或绕过任何审计。
|
||||
- G20续修:资产创建的关系详情读取移至原业务写事务提交后,保留事务内校验、编号、资产与领用写入及原异步审计语义。
|
||||
- G20续修:单个账号创建的原cost12哈希移至事务开始前,保留权限/引用校验、账号/角色/审计原子性及原提交后同步;不改批量导入哈希位置。
|
||||
- P9:修复本地已复现的报销提交事务超时。先核事务步骤耗时/数据库等待及已编号提交路径,再定稿最小优化;保持FOR UPDATE、权限、票据金额、预算、审批历史和审计的同事务一致性,不提高5000ms预算或增加重试。
|
||||
|
||||
- P10:g20-full-r5暴露采购PATCH保存草稿P2028(6529/5000ms),沿用已批准的在用缺陷最小修复范围:保留锁、所有权/状态、主数据、项目关联、明细替换、金额/两次父记录更新顺序及审计同事务,只把响应详情投影移至提交后,不增加重试或超时。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
保留现有差异及旧冻结包。仅本地合成、禁止外联/真实配置密钥备份/生产ARM/恢复/通知付款/提交推送部署归档。
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [x] P1:本地 production 构建 A→B同profile,原45秒窗口、无测试刷新/清缓存,B文档/active控制器/worker摘要/实际新资源及旧缓存清理共同成立,零页面/静态404/登录回退/重载循环。
|
||||
- [x] P2:可执行生命周期回归覆盖注册Promise未完成时控制器已切换、首次安装、重复事件、worker未激活/失效、认证页延后刷新;已有前台提示与登出缓存清理合同保持。
|
||||
- [x] P3:正式采购路由回归证明草稿/审计同事务、失败不返回成功,详情仅提交后读取、完整响应保持;原采购提交/附件/审批及预算回归不退化。
|
||||
- [x] P4:不带预载观察器的原四文件4-worker/零重试/原预算运行通过;仅证明该组,不能关闭旧full-r2或全负载可靠性。
|
||||
- [ ] P5:前端typecheck/build、Prisma/受影响语法、任务治理和保护检查通过;2026-09-19代码/治理验证保持通过,但新增一处旧WebKit派生registry保护异常未恢复,故此合取项保持开放;只读独立review仍按inline限制单列PENDING,不虚报。
|
||||
|
||||
- [x] P6:资产原响应/可选领用/异步审计语义与提交前后失败边界通过;原资产整链原配置重验。
|
||||
- [x] P7:单个账号原cost12在事务前完成,账号/角色/审计保持同事务;原写入/敏感角色/导入回归及R75完整文件通过。
|
||||
- [x] P8:续修后的完整候选从static重新执行并如实记录,不用旧定向证据抵扣完整验收。
|
||||
- [x] P9:报销提交的重复读取/无效事务开销按证据优化,确定性边界回归和真实合成R75通知原整文件通过;已编号提交不重新取号,失败事务不遗留部分审批/预算写入。
|
||||
|
||||
- [x] P10:保存草稿写入/审计仍原子,完整响应投影只在提交后读取;写入/明细/审计/commit失败不读取、不假成功,提交后详情失败不得宣称回滚或自动重试。原采购主链原预算重验。
|
||||
|
||||
## Test Plan
|
||||
|
||||
使用现有server Vitest与浏览器专用tsc;复用受管retained-local四文件命令。精确命令/结果落implement与本轮独占证据,不读取真实输入、不联网安装依赖。
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"id": "local-concurrency-product-fixes",
|
||||
"name": "local-concurrency-product-fixes",
|
||||
"title": "PWA 更新事件与采购创建事务最小修复",
|
||||
"description": "PWA原生控制器更新与采购最小写事务已本地实施;131单测、原四文件并发4/4、认证/OCR18/18通过。独立及完整门禁仍待,不提交发布。",
|
||||
"status": "in_progress",
|
||||
"dev_type": null,
|
||||
"scope": "client PWA lifecycle and server purchase draft transaction",
|
||||
"package": null,
|
||||
"priority": "P1",
|
||||
"creator": "shunli",
|
||||
"assignee": "shunli",
|
||||
"createdAt": "2026-09-18",
|
||||
"completedAt": null,
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [
|
||||
"client/src/pwa.ts",
|
||||
"client/vite.config.ts",
|
||||
"server/src/routes/purchaseRequests.js",
|
||||
"server/tests/unit/utils/client-pwa-lifecycle.test.js",
|
||||
"server/tests/unit/routes/purchase-request.errors.test.js",
|
||||
"client/tests/e2e/pwa-cross-version-upgrade.spec.ts"
|
||||
],
|
||||
"notes": "2026-09-19 g20-full-r6:4437后端通过/1原跳过,372本地浏览器全过;PARTIAL仅dirty_candidate,独立PENDING/无部署,旧registry保护例外保留且无新增漂移。当前余额见implement顶部。\n2026-09-18本地验证完成,失败/诊断/修后回执与候选在local-coverage-g18-20260918。主会话自检不代替独立PENDING;无预算/并发/权限/审计弱化,未发布。\n",
|
||||
"meta": {
|
||||
"localImplementation": "VERIFIED",
|
||||
"independentReview": "PARTIAL_WITH_LEGACY_BUDGET_FINDING",
|
||||
"normalReleaseEligible": false,
|
||||
"latestLocalCandidate": {
|
||||
"run": "g20-full-r6",
|
||||
"localChecksPassed": true,
|
||||
"receiptStatus": "PARTIAL",
|
||||
"browserPassed": 372,
|
||||
"publicPending": 12,
|
||||
"independentReview": "PARTIAL_WITH_LEGACY_BUDGET_FINDING",
|
||||
"deploymentEligible": false,
|
||||
"legacyProtectionStatus": "FAIL_ONE_KNOWN_DERIVED_REGISTRY",
|
||||
"newProtectedDrift": false,
|
||||
"productionNumberingActivated": false
|
||||
},
|
||||
"p9TargetedReview20260919": {
|
||||
"status": "PASS_SCOPED",
|
||||
"report": "artifacts/qa-governance/business-followup-claude-review-20260919T023537Z.txt",
|
||||
"reportSha256": "b48e5f53340e139e5a97b5fdcb6d7003881a80a8a08d4004d01aaa6a759d2d0b",
|
||||
"runtimeTestsRerun": false,
|
||||
"budgetPoolFinding": "LEGACY_CONFIRMED_STATIC_UNFIXED",
|
||||
"remediationTask": ".trellis/tasks/09-19-budget-pool-concurrency",
|
||||
"evidence": "artifacts/qa-governance/business-followup-reception-20260919"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
# 业务编号与历史兼容设计
|
||||
|
||||
## 2026-09-18 多角度复核与批准
|
||||
|
||||
用户明确“再次从多个角度审查……合适的话……实施改进”。主会话核过小团队可读性、财务对账、历史及银行材料兼容、并发/锁序、容量、切换回退与维护成本,保留矩阵全部建议;付款量低,年度号比每日号更便于识别,业务日期继续单独展示。当前范围已批准,官方current切至本task。本地实现默认不启用,独立复核保持PENDING(inline限制)。
|
||||
|
||||
## 定稿数据与接口
|
||||
|
||||
- 新增BusinessNumberPolicy单行v2策略,effective_at首次激活后固定、enabled可暂停/恢复;记录更新人及操作引用,并写既有审计。同版本不得回填或修改生效时间。迁移不插入激活记录。受控CLI只准备不执行生产。
|
||||
- 新增BusinessNumberCounter,以规则版本+类型/资产前缀+周期唯一键存储BigInt高水位。独立于旧DocumentSequence,避免周期记录混进配置枚举。固定资产统一FA,电子资产沿用既有EA分类前缀(含合法自定义字符,SQL按字面转义匹配并用Unicode字符数截后缀);同前缀共享计数,消除跨分类重号。
|
||||
- 新取号器在调用者交互事务内工作,固定一次now并按appTimezone(默认Asia/Shanghai)生成日期。报销monthly,PB/JK/HK/CG/PD/PRJ yearly,FA/EA permanent。最小四位,BigInt扩位,不截断或归零。已有号码与UUID均不改。
|
||||
- 现有单据分类页补简短说明:分类字段不会覆盖已启用的统一编号,仍服务于旧规则和电子资产前缀;仅沿用既有文字样式,不新增设计或配置开关。
|
||||
- 配置读取返回当前新建对象采用的策略,不以seed切换;旧补号明确version=1。PurchaseRequest新增numbering_version,存量与直接旧写入默认1;新建草稿在事务内固定1/2,首次提交按保存版本取号,日期段按实际首次取号时间,跨月/年不改已编号对象。
|
||||
- 新版即时创建取号与对象写入同事务;legacy路径保留。项目自动号进入事务,新号替代count+1;正式手工号继续支持,不替换导入编号。
|
||||
|
||||
## 锁序、切换与冲突
|
||||
|
||||
- 策略锁namespace1003/key0:业务事务共享锁,管理事务独占锁;锁后读取策略,不缓存进程状态。启停等候已持共享锁的事务完成,固定生效时刻采用取号时固定的now;切换前已建未编号草稿靠版本字段稳定归属。
|
||||
- 新计数锁namespace1004,对象键固定登记为业务类型1..8,资产全类共用8;周期/前缀间保守串行,适合小团队。在锁内查同格式已有最大数字与持久高水位,接续更大值;唯一约束最后防线。无锁max+1、进程锁、事务内捕获唯一异常重试均禁止。
|
||||
- 借款创建保留幂等完整事务;本金还款保持lender→排序loan→共享策略→HK计数→申请/分配→PB计数顺序。管理只锁策略,不取业务/计数锁;不存在反向依赖。普通PB只锁自身来源后取策略/PB计数。
|
||||
- 同格式外部手工/导入占号通过每次锁内最大值接续;项目在支持的新格式下手工写号需同锁保留高水位。未接入的外部直接SQL写入仍由唯一约束阻止重号,不自动重试或回写。
|
||||
- 全部写入实例先升级兼容再激活,不从环境变量或seed自动启用。CLI在锁等待和配置检查完成后拒绝已过期生效点;若旧共享取号配置已使用同一月/年日期段,保守拒绝首次激活/恢复并留待专门兼容处理,防止两套独立计数使旧草稿补号撞号。该检查不修改旧配置或旧号,status仅返回相关类型;可预约未来切换,恢复只复用原时点。暂停只影响以后新建对象,已归属v2的采购草稿仍用v2。回退只能使用兼容版本,不删除策略/计数/版本字段或已发号。
|
||||
- 迁移的触发器禁止改写策略生效点、采购既定版本、删除或降低新计数高水位。策略管理明确记录操作者与引用,兼容实例标记属于操作人确认,不是自动化集群证明。
|
||||
- 迁移仅加表及默认legacy字段、约束,不批量编号或变更业务号。回退保留新增结构,禁止down migration清空历史。
|
||||
|
||||
## 验证分层
|
||||
|
||||
单元覆盖全部格式/业务时区/跨月年/扩位/配置/版本固定/路由与幂等;隔离PG执行全部迁移,并发、回滚、删除占号、同格式接续、策略启停及旧草稿归属。混合BX/HK来源、旧PB及银行客户流水/行身份沿原用例验证。不能把单测stub当PG并发或把定向验证当G20完整门禁。原G20四未过另接续,零重试和原预算不变。
|
||||
|
||||
## 2026-09-18 官方资料调研
|
||||
|
||||
用户补充公司不足10人、科技初创公司,并要求先调研国内财务、OA、ERP做法。以下是公开原始资料,不是市场使用比例调查,也不代表所有版本的默认值。
|
||||
|
||||
| 来源 | 已核实事实 | 对本项目的含义 |
|
||||
| --- | --- | --- |
|
||||
| [金蝶云产品手册:编码规则](https://help.open.kingdee.com/dokuwiki/doku.php?id=%E7%BC%96%E7%A0%81%E8%A7%84%E5%88%99) | 可组合常量、日期、基础资料及流水;编码依据单独控制流水;保存时生成并做唯一性校验 | 日期格式与计数周期必须同时设计,不能只换展示格式 |
|
||||
| [金蝶云产品手册:总账系统参数](https://help.open.kingdee.com/dokuwiki/doku.php?id=%E6%80%BB%E8%B4%A6%E7%B3%BB%E7%BB%9F%E5%8F%82%E6%95%B0) | 凭证号排列规则可按期间或年度 | 总账凭证号与OA业务编号独立,不为迎合记账期间重编报销/付款号 |
|
||||
| [畅捷通官方:T6小编号,有大学问](https://service.chanjet.com/edu/9164.html) | 已实际阅读文章内教程图片:按业务类型配置前缀、日期、流水依据和起始值;示例日期格式为年月 | 支持按业务配置,而非所有业务固定按日;该资料发表于2017年,不能外推为当前T+默认规则 |
|
||||
| [钉钉宜搭帮助中心:流水号](https://docs.aliwork.com/docs/yida_support/wtwabe/zk6dhy/vanx1ycppgpz5rsk) | 默认计数4位;支持不重置、按日/月/年;日期格式和时区可配;文档说明手动重置或计数溢出可能产生重复 | 作为OA/流程表单代表,证明周期属于可选配置;本项目不能照搬其允许重号的行为 |
|
||||
|
||||
检索受阻、结果无关、只有标题且未读正文的资料未纳入结论;没有声称已核实泛微/致远的具体默认配置。公开资料、实际读取摘要及校验值保存在本轮ignored证据 `numbering-public-research/sources-and-findings.json`。
|
||||
|
||||
## 不足10人公司的建议矩阵(2026-09-18复核后获批)
|
||||
|
||||
依据是单据用途和用户提供的小团队/低付款量背景,未额外读取生产业务量。不同类型统一取号原则,不强求同一重置周期。
|
||||
|
||||
| 类型 | 实施前工作树事实 | 推荐的新号 | 决策状态 |
|
||||
| --- | --- | --- | --- |
|
||||
| 报销 | BX-日期-四位下限;长期累计 | `BX-202609-0001`,每月重置 | 用户已选择 |
|
||||
| 付款批次 | PB-日期-三位;按业务日,日上限999 | `PB-2026-0001`,每年重置 | 本轮批准;报销付款与本金还款继续共用PB序列 |
|
||||
| 公司借款 | JK-UUID,属于本地待发布实现 | `JK-2026-0001`,每年重置 | 本轮批准 |
|
||||
| 本金还款申请 | HK-UUID,属于本地待发布实现 | `HK-2026-0001`,每年重置 | 本轮批准;HK是申请、PB是执行批次,分别保留 |
|
||||
| 采购申请 | 默认CG-日期-流水;yearly元数据未执行重置 | `CG-2026-0001`,每年重置 | 本轮批准;保留首次提交取号时机 |
|
||||
| 盘点单 | PD-日期-流水;yearly元数据未执行重置 | `PD-2026-0001`,每年重置 | 本轮批准 |
|
||||
| 项目 | 手工项目号或PRJ-UTC日期-当日数量加一 | 已有/正式项目号保留;新自动号`PRJ-2026-0001`,每年重置 | 本轮批准;修复count+1并发及删除碰号风险 |
|
||||
| 固定资产 | FA-年份-六位;yearly元数据未执行重置 | 新资产可用`FA-0001`,永久递增、终身不改 | 本轮批准;比前稿年度资产号更适合少量设备;已有标签不换 |
|
||||
| 电子资产 | EA分类前缀和独立序列 | 保留已有分类边界,新号可去掉年份并永久递增 | 本轮批准,不新增分类体系 |
|
||||
| 合同 | 正式合同号录入,续约关联使用-Rn | 保留正式编号及既有续约引用 | 不自动改号 |
|
||||
| 员工与主数据 | 系统生成/人工/来源系统的稳定编码 | 保留稳定编码,不按年月重置 | 不自动改号 |
|
||||
| 发票、银行流水/回单、企微审批 | 外部系统来源编号 | 保留外部原号 | 不自动改号 |
|
||||
| 冻结差旅 | CL/TRB等旧编号和冻结链 | 保留,恢复前再评估 | 不恢复或为统一编号改旧链 |
|
||||
|
||||
这里的实施前事实来自指定执行树,不将未部署的借款、还款等本地实现说成线上现状。短号方案是本项目建议,不是厂商强制标准。用户先前报销按月选择保留;若后来希望连报销也统一按年,属于新决策,不能自行替换。
|
||||
|
||||
## 共同合同与实施顺序草案
|
||||
|
||||
1. 日期段与重置周期一致;按现有业务时区取号,具体创建/提交/付款/业务发生日期在独立字段展示。跨月审批、跨年结清不换号;补录历史借款区分登记日期和原借入日期。
|
||||
2. 不加入部门、人员、金额、付款状态或可变分类。各业务类型独立全局计数,不按经办人/部门再分段;现有资产分类边界和所有权约束保持。
|
||||
3. 普通单据四位作为最小补零宽度,超过9999扩位、不归零、不截断;固定资产也从四位起。内部UUID继续用于关联,不承担普通用户展示号。
|
||||
4. 已经创建对象获得的号码不回收,取消/作废留下空号;内部业务序号不是业务数量或会计凭证连续性的替代。失败事务未发布号码的回滚与已发号后删除须分开验证。
|
||||
5. 旧号、已有草稿及原审批/付款/审计/银行材料引用保持不变。新旧格式并存,搜索、自然排序、通知跳转、PDF/导出都需验;不进行历史批量改号。
|
||||
6. 按批准矩阵先完成报销周期计数与历史缺号边界;随后付款/借款/还款共用机制及锁序;最后纳入批准的采购/项目/资产等。分步实施不改变原门禁未完成事实。
|
||||
7. 复用周期唯一键和事务原子递增,不能按数量加一、无锁最大号加一或在共享计数器上并发清零;保持本金/审批/审计/银行回单合同,不通过编号调整改变业务状态机。
|
||||
8. 验证覆盖业务时区跨月/年、四位溢出、并发取号、回滚、取消不复用、旧草稿稳定、混合格式消费者及报销/借款付款整链。独立只读复核、生产切换、发布授权分别留项。此前调研未改产品代码,本轮进入实施。
|
||||
|
||||
## 已有实际业务的增量切换方案
|
||||
|
||||
### 原则与本地证据
|
||||
|
||||
用户明确已有多个旧号业务。本方案补全历史兼容,最新用户授权复核适合后实施,已确认本节范围。既有业务继续按原审批/付款流程办理,不为编号变更做删除重建、重新提交或重复付款。
|
||||
|
||||
本地代码显示:报销创建草稿即取号;采购在首次提交时才取号;报销提交只在form_number缺失时补号。PaymentBatchItem同时保存entity_id与entity_code,关联可以保持而展示号应取持久化原值。paymentOrderXls.js:24以batch_no和行号生成客户流水号,:134用于银行制单。因此仅给旧批次换一个“更好看的号”也会影响后续导出身份,不能当作无风险展示调整。
|
||||
|
||||
### 各类旧业务的处理
|
||||
|
||||
| 对象 | 切换后处理 |
|
||||
| --- | --- |
|
||||
| 已编号报销/采购草稿 | 原号及原规则归属保留,编辑和提交不换号 |
|
||||
| 切换前创建但尚未取号的采购草稿、历史缺号报销 | 到原业务取号时机时按旧规则补号;不提前批量编号 |
|
||||
| 审批中、待付款或已付款单据 | 原号及所有历史引用保持,跨月/年完成也不换号 |
|
||||
| 旧付款批次(含draft、reviewed、failed) | 保留batch_no、已有名称及来源快照;继续原流程,不因切换而取消重建 |
|
||||
| 已导出付款材料 | 客户流水号、原批次行绑定和证据原样保留;显示排序不能改变生成流水的业务行顺序 |
|
||||
| 新付款批次关联旧报销/旧还款申请 | PB按新批次自身规则发号,逐项展示原BX/HK,不重写来源号;允许新旧格式在同批次并存 |
|
||||
| 旧资产/项目/合同 | 编号、标签和正式材料保留;新资产永久短号等仍纳入本轮批准范围 |
|
||||
|
||||
### 切换边界与首号
|
||||
|
||||
- 采用一个明确、持久化的规则生效点T;优先在完成兼容验证后的月初启用,便于解释。2026-10-01只是候选窗口示例,未排期、未执行发布。付款若按年度编号可以在年中启动新格式,无须专门等到2027年。
|
||||
- 规则选择属于单据创建事实,不能按页面展示时间、最后更新时间或提交当天重新判断。实施时明确可信创建时间与规则版本的持久化方式;已有未编号草稿、补录/导入及跨T的在途事务必须纳入同一判据,不仅靠服务进程的一次启动时间。
|
||||
- 先具备新旧格式兼容能力、核实全部写入实例都支持切换机制,再受控激活T;不让滚动发布中新旧写入端各自选规则。未准备好就继续旧规则,不倒填过去的生效点。
|
||||
- 新格式使用独立计数。比如旧PB-20260917-001保留;年中新格式的PB-2026-0001表示新序列第一批,不宣称是2026年公司实际第一笔付款。
|
||||
- 0001只在确认目标格式尚未被已有/导入/自定义编号占用时成立;有同格式号码须在锁和数据库唯一约束下接续,不能无锁MAX+1或清零旧计数。旧格式计数继续保留给兼容补号路径,已发给已创建对象的号码永不复用。
|
||||
- 采用存量原号与新号并存,无需为所有旧单额外生成第二套“规范号”或新旧号映射表;这是拒绝历史改号的自然结果。内部关联继续使用原ID,实际编号使用原存储值,兼容未知历史格式而不猜测改写。
|
||||
- 混合格式的自然编号顺序不等于时间先后;核验现有列表排序、付款明细编号自然排序及筛选/搜索,不擅自把日期排序宣称为原编号排序。显示调整不得影响付款执行或银行制单行身份。
|
||||
|
||||
### 切换前验证与回退
|
||||
|
||||
先在本地合成库构造上表全部状态,验证旧对象字段与引用不变、新旧来源可组批、跨月/年和并发取号、旧草稿切换后提交、客户流水号及行绑定稳定、取消不复用、旧格式查询和导出。针对同格式冲突、在途事务和回退后重新启用补反例。
|
||||
|
||||
生产前置只需经授权取得格式分布/冲突数/缺号数/各状态数量及范围内关联完整性摘要,不需要票据、银行资料、秘密配置或备份。本次没有查询这些生产事实;此前指定付款批次的只读授权不扩大为全库调查。无证据不声称线上零冲突。
|
||||
|
||||
回退须保持所有已发新号与计数,旧兼容路径不得删除新号或回收流水;只能回到仍支持新旧格式的版本。数据库切换、真实配置写入、提交推送部署与独立review均保留原授权边界。
|
||||
@@ -0,0 +1,128 @@
|
||||
## 2026-09-19 N5本地验收完成(未上线)
|
||||
|
||||
g20-full-r6从static完成同一冻结候选,4437后端通过/1原条件跳过、372本地浏览器全部通过。新旧BX的PC/手机列表搜索详情、新旧PB及混合报销实体对应、自然排序和真实合成报销付款整链均有证据;N5已勾选,本地编号N1–N7完成。不得把消费者mock当作真实PG取号证据,原并发/兼容/银行引用证据分别保留。
|
||||
|
||||
回执PARTIAL仅dirty_candidate,无部署资格;独立PENDING、生产编号未激活。剩余生产只读摘要、启用日期/启用、干净候选/提交部署及同候选公网验证须另获授权,旧号/草稿/银行引用不变。旧WebKit派生索引保护异常由09-06统一记录,无新增漂移,不修改原baseline。详细完整结果、来源/计时及证据入口见09-06 implement顶部;本次结束后仅补task记录,整体in_progress,不归档。
|
||||
|
||||
## 2026-09-19 四文件定向通过,接完整候选r6(当前入口)
|
||||
|
||||
r5-fixed-r2四完整文件31/31通过,浏览器约5.5分钟、受管总571.747秒,零跳过/重试;采购整链、R75四项、付款提交至归档全链及视觉25项通过。付款约244.773秒,保持300秒;视觉7组各180秒、25PC+8手机/33PNG全部完成、覆盖问题与findings为空。环境/source/repository/owner清理PASS。原r5完整FAIL与r5-fixed-r1登录跳转失败均保留,不拼接为完整通过。
|
||||
|
||||
P10采购提交后读取边界167/167及QA专用类型已通过;登录仅在无query/hash的规范/login复用,保留原表单/portal/profile断言。下一g20-full-r6从static开始普通完整候选,全部源码/测试/task/spec/docs冻结,只写本轮ignored证据;N5/G20及产品完整负载验收仍待终态,独立PENDING、生产编号未启用。
|
||||
|
||||
旧WebKit派生registry保护异常保留,原baseline不改;后续运行使用本轮独立WebKit副本,不下载或安装。禁止将一处已知漂移描述为全部旧材料零变化;无提交推送部署或真实操作。
|
||||
|
||||
## 2026-09-18 编号页面专项验收收口(本地,未上线)
|
||||
|
||||
- [x] 新旧BX的PC/手机列表与详情、手机完整号搜索:最终用例1/1通过,17.756秒;受管环境总耗时268.462秒,输入不变及owner清理PASS,零重试。移动标题按现有header内精确文本断言,PC保持精确h1;没有修改产品以迎合测试。
|
||||
- [x] 新旧PB、完整查询、组批entityId、混合新旧BX来源、原顺序及UUID链接:browser-r3最终版本通过(18.517秒)。合成页面fixture只证明消费者,不冒充真实取号或审批;HK兼容另归原编号PG/银行文件证据,不计入此浏览器用例。
|
||||
- [x] 付款路由自然排序补含旧号、月号0002/0010/10000及同号ID顺序,完整本文件129/129通过;验证编号、ID、金额对应、原数组与读取零写入/审计。五个相关浏览器文件专用类型检查通过。
|
||||
- [x] browser-r2真实合成报销付款整链通过(254.846秒),覆盖财务同页进度、组批、复核执行、回单、核销/AP与归档。此结果保留原输入,不与多轮定向结果拼为完整发布门禁。
|
||||
- [ ] N5继续等待09-06 G20普通完整门禁:全页面33路由巡检仍180秒超时(browser-r3到达13页);R75提交遇P2028(5412/5000ms),由09-18-local-concurrency-product-fixes的P9先分析、定稿再修复。不得直接加预算、缩覆盖或无变化反复重跑。
|
||||
|
||||
官方current仍为09-06-release-gate-integrity。本次仅增补六个测试文件及任务记录,编号产品实现/原冻结包不变;证据独占保存于numbering-browser-closeout-20260918。最终治理、保护及增量审阅摘要在该根单列,不倒签旧候选。主会话inline自检不替代独立审阅,独立PENDING、normalReleaseEligible=false;未读取生产编号分布、未激活线上编号、未提交推送部署。
|
||||
|
||||
## 2026-09-18 N5浏览器接续(未关闭)
|
||||
|
||||
官方current为09-06门禁task;编号本地冻结候选保持。新增两条浏览器消费者计划核对PC/手机旧新BX完整显示和搜索、旧新PB及混合来源实体对应;合成mock只证明页面消费者,真实取号/并发仍归原PG证据,审批付款仍须原整链。09-06 browser-r1已证明DG7/R3旧超时项通过,但全页面超时及认证失效仍开放;N5不提前勾选。
|
||||
|
||||
# 业务编号实施与验证
|
||||
|
||||
## 本轮执行状态
|
||||
|
||||
- [x] 多角度复核、范围批准与最终技术合同。
|
||||
- [x] 迁移/策略管理、共享取号器与全部批准创建入口(含电子资料索引和项目导入),默认不启用。
|
||||
- [x] 单元与隔离PG并发/兼容/回退验证,银行文件与来源快照回归;完整浏览器门禁见后续项。
|
||||
- [x] 配置事实、文档/spec与保护检查,冻结本轮本地审阅候选(非发布回执);独立只读复核PENDING。
|
||||
- [ ] 衔接原G20四未过及新完整门禁;生产摘要/启用、提交推送部署均未授权。
|
||||
|
||||
## 调研与实施清单
|
||||
|
||||
## 当前结果
|
||||
|
||||
2026-09-18:用户先确认报销按月,随后要求统一梳理并调研国内财务/OA/ERP做法,补充公司不足10人。已核实四份官方原始资料,结合当前执行树整理13类编号现状与建议,见design.md后半部。来源抓取/摘要/校验值在当前ignored证据 `numbering-public-research/sources-and-findings.json`。
|
||||
|
||||
- [x] 核对现有报销、付款、借款/还款、采购、资产/盘点、项目及外部标识路径。
|
||||
- [x] 读取金蝶编码规则和总账参数、畅捷通T6官方图文、钉钉宜搭流水号说明;区分可配置能力与具体默认值,保留资料版本限制。
|
||||
- [x] 形成小团队建议:报销按月、低频业务按年、资产永久短号,外部与主数据编号保留;已选报销按月不自行替换。
|
||||
- [x] 针对已有实际业务补齐增量切换方案:全状态旧号保留、未编号旧草稿资格、银行客户流水号/行绑定、混合来源批次、持久化生效点及冲突/回退检查,见design.md末节。方案落盘不等于兼容实现已验证。
|
||||
- [x] 最新用户授权复核适合后实施,矩阵全部在用内部编号范围已确认。
|
||||
- [x] 补定稿技术设计与独占保护基线:338份原差异、10989份旧证据原文件,未覆盖旧结果。
|
||||
|
||||
本轮官方current切至本task并进入实施,09-06原门禁未完成事实保留。此前只访问公开厂商资料,不扩大为线上数据/配置查询。旧差异与冻结包保留,不提交、推送、部署或历史批量改号。
|
||||
|
||||
## 后续实施顺序(按批准范围执行)
|
||||
|
||||
1. 报销:选定周期计数实现,固定一次业务时间和规则归属;新草稿按月,已有号保留,未编号旧草稿与历史缺号补号延续旧规则及原取号时机。持久化切换点/资格,覆盖在途事务和同格式已有号冲突。检查配置查询与实际取号口径,不能只改reset元数据。
|
||||
2. 财务低频单据:接入付款年度号、借款年度号、还款申请年度号;报销/本金还款共用PB序列,保持借款主体→借款→申请/分配→序列锁的既有锁序及幂等边界。
|
||||
3. 其他内部编号:处理采购/项目/盘点年度号及新资产永久短号;项目count+1替换为原子计数。员工、正式合同、发票/银行/企微来源编号与冻结差旅不改。
|
||||
4. 混合格式:核对列表/详情/搜索/自然排序/通知/打印和制单文件;既有审批与付款记录无改号写入。普通四位为最小宽度,超过上限扩位而不归零。
|
||||
5. 合成验收:新增周期/时区/跨年/扩位/回滚单测、隔离PG并发与占号不复用、旧草稿/旧待付款批次/已导出银行客户流水号及行绑定、新批次混合新旧来源、回退再启用等回归;独立只读review与生产前置摘要检查/切换另记,不据本地结果宣称上线。
|
||||
|
||||
## 验证入口与风险文件
|
||||
|
||||
按实际改动选择 `server/tests/unit/documentSequence.service.test.js`、报销创建/提交测试、付款编号与借款幂等/PG并发测试、项目及资产在用回归;不为了统一编号恢复冻结或退役旧代码。共享服务改动才扩展检查到其他调用者。
|
||||
|
||||
后端沿用 `npm run prisma:validate`、Vitest、相关源文件 `node --check`;本轮已实施共享机制,扩展完整后端单测。单据分类页仅补既有样式说明,运行前端 `npm run typecheck` 与 `npm run build`。文档另验task validate、Trellis治理、process baseline、docs registry与 `git diff --check`。
|
||||
|
||||
风险入口为 `documentSequence.js`、报销两个取号点、付款批次分配器、借款/还款创建、项目自动取号以及资产编号消费者。新旧规则可能曾存在自定义前缀,首次新规则计数需在锁与唯一约束下校验已有同格式记录,不假定从1一定无冲突。回退不能删除已经发出的新号或清零计数。
|
||||
|
||||
|
||||
## 主会话多角度复核记录(2026-09-18)
|
||||
|
||||
| 角度 | 裁决与依据 |
|
||||
| --- | --- |
|
||||
| 小团队日常识别 | 保留BX月号;低频PB/JK/HK/CG/PD/PRJ年号,业务日期另列,不将每日从1误作付款数量 |
|
||||
| 财务与外部材料 | UUID和原号均持久化;旧PB及entity_code不写回。BIFF8实际生成验证新PB与混合BX格式、原客户流水号及行身份 |
|
||||
| 旧草稿/在途切换 | 采购numbering_version默认1且数据库禁止改写;新草稿创建时固定。历史缺号报销强制1;HK与对应PB复用一次上下文 |
|
||||
| 并发和容量 | 锁内同格式占号与BigInt高水位接续,四位下限扩位。12路真实PG事务唯一;失败回滚与已创建后删除占号分验 |
|
||||
| 切换与回退 | 迁移不激活;受控CLI未来时点、操作人和引用,全部写入实例兼容须操作人核实。策略启停等待共享锁;生效点和计数受数据库保护 |
|
||||
| 自定义及导入 | 电子前缀原样保留,SQL字面转义与Unicode字符截取;真实PG特殊前缀占号验证通过。项目手工/CSV原号保留并登记高水位,导入dry-run零写入 |
|
||||
| 权限/审批/本金 | 不改变原权限、审核或资金规则;启用新号的原借款HTTP16组检查通过,包含幂等、审批、真实合成文件转换、回单核验与付款回滚 |
|
||||
| 维护和页面口径 | 一份v2共享服务,旧取号兼容保留,不扩建配置平台。现有配置读返回有效规则,分类页解释旧配置作用;沿用既有文字样式 |
|
||||
| 交付边界 | 主会话inline检查不冒充独立复核;未读取生产编号分布、未启用线上。原G20完整门禁与公网义务另续 |
|
||||
|
||||
### 已发现并修复的本轮问题
|
||||
|
||||
- 原测试夹具无新增策略模型/共享锁,补足实际模型接口,产品不添加“模型缺失则legacy”的掩盖分支。报销创建夹具原来丢弃form_number,修成保存真实data以验证新号。
|
||||
- PG占号查询的未定型SUBSTRING参数触发文本正则重载,漏掉已占用流水;修为显式int字符偏移,实际同格式0042→0043通过。电子前缀另验正则元字符与Unicode字符偏移。
|
||||
- 第一次全量单测4410通过/1失败/1原条件跳过,失败是清洁包装器缺少供旧运维mock使用的DATABASE_URL;补不可连接的合成回环地址,不改旧业务或取真实配置。原失败日志保留,最终完整重跑单独记结果,不拼接定向绿。
|
||||
- 银行文件测试沿用已有受控Python环境;未安装依赖或下载浏览器。首轮缺解释器环境的失败保留。前端已有Browserslist陈旧提示、docs registry既有22份未登记提示均保留,不扩展无关治理。
|
||||
|
||||
### 证据与复核边界
|
||||
|
||||
独占新根 `artifacts/qa-layout/business-numbering-20260918`;输入保护为338份旧差异与30目录10989份历史证据。旧文件快照、HEAD及index校验保持。`verification-source.json`固定1002份本地源码/测试/相关脚本输入;这是本次本地验证的选择集合,不是G20正式发布回执,也不证明公网状态。
|
||||
|
||||
`numbering-pg-final.log`:全部73迁移、9组编号检查与原借款HTTP16组通过,精确owner容器/临时目录清理PASS;两个列表有重叠,不能简单相加成25个独立用例。编号检查含真实项目CSV导入/管理CLI与幂等不占号;无真实凭据、企微发送或付款。旧规则未启用策略的借款DB/HTTP回归另列 `legacy-loan-pg-final.log`。
|
||||
|
||||
前端 `client-typecheck`、`client-build` 和 `prisma-final` 已通过;源码语法、Trellis/process/docs检查及差异检查单列回执。最终完整后端结果与冻结候选将在全部完成后回填。
|
||||
|
||||
### 必须保留的后续项
|
||||
|
||||
1. 原G20四个浏览器未过继续按09-06/09-08合同修复,之后从static开始重新完整验收;此次编号验证不能抵扣。
|
||||
2. 只读独立复核编号schema/迁移、锁序、历史兼容与候选摘要,当前PENDING(inline限制)。
|
||||
3. 经单独授权取得生产格式/占号/缺号等脱敏摘要,确定未来切换点并核全部写入实例兼容;目前未查、未启用,不预排上线日期。
|
||||
4. 提交/推送/部署另需明确授权;部署后履行同候选12条公网检查。旧恢复、ARM、真实配置密钥备份和冻结差旅不在本轮操作范围。
|
||||
|
||||
|
||||
### 最后复核补项:策略锁等待后的时间检查
|
||||
|
||||
发现setNumberingPolicy默认now在等待独占锁前取值;若等待跨过计划生效点,应该在锁与策略读取完成后取实际时刻再校验,不能按等待前时刻放行。为保持当前全量运行输入固定,先完成该轮,随后只修改此管理入口的默认取时位置,追加确定性时钟推进反例、相关单测及隔离PG复核;完整回归的原输入结果与后续小修输入分开记录,不拼为G20正式候选。
|
||||
|
||||
|
||||
### 固定输入的完整后端回归已完成
|
||||
|
||||
`backend-unit-full-final`:223文件通过、1原条件跳过;4412用例通过、1原条件跳过,0失败,478.80秒。跳过的是原有deploy-init.integration,要求单独空合成库,未为编号扩大初始化门禁。1002份选定输入全程不变,回读 `full-unit-source-verification.json` 为PASS。
|
||||
|
||||
随后补策略管理两项边界,不能把这次局部变化后的输入声称为上述完整运行的原输入:锁等待后重新取时(先有 `policy-clock-red` 反例确认旧行为错误,再修复);对本身已使用相同月/年日期段的旧共享取号配置,启用/恢复保守拒绝并报告需专门兼容的类型,不在本轮擅自迁移自定义旧规则。源表内已有新格式号码仍支持锁内接续,两者含义分开。最终补验为 `policy-final-unit` 与 `policy-final-pg`;原G20新完整候选仍待执行。
|
||||
|
||||
|
||||
## 本轮收口回执(本地,非发布放行)
|
||||
|
||||
- 完整后端:`cd server && npm test`,4412 passed / 1原条件skipped,223文件通过 / 1跳过,0失败。其1002输入摘要单列,后续策略小修没有倒签到该结果。
|
||||
- 最终策略补验:`policy-final-unit` 的11文件456/456通过;覆盖共享服务、所有相关创建/首次提交入口、电子索引导入、银行文件与项目导入既有合同。新增等锁跨生效点、旧规则周期重叠拒绝激活/恢复均通过。原red测试先证明缺陷,后修复通过。
|
||||
- `RUN_ISOLATED_NUMBERING_DB_TEST=1 node scripts/qa/test-business-numbering-db.cjs` 最终 `policy-final-pg` PASS:73迁移、10组编号断言和原借款HTTP16组(含重叠,非简单累加)。实际PG验证高水位/旧草稿不可改写、同格式已有号、Unicode/特殊前缀、12路并发、事务失败回滚、删除不复用、共享/独占锁、暂停恢复、导入dry-run/apply/update、管理CLI、原号快照、幂等不占号、真实合成BIFF8与借款付款整链。
|
||||
- 关闭策略的原借款回归:`RUN_ISOLATED_LOAN_DB_TEST=1 node scripts/qa/test-company-loan-db.cjs` PASS,确认新增迁移默认无激活记录时旧链可用。两种策略状态均只用独占无网络合成PG;精确owner清理PASS。
|
||||
- `npm run prisma:validate`、前端`npm run typecheck` / `npm run build`通过。前端只有分类页说明,无新视觉方案;未安装依赖、未下载浏览器。
|
||||
- 文档/语法/保护终检与候选摘要见本轮ignored `final-checks.json`、`protection-result.json`、`local-review-candidate/manifest.json`。它们不是部署候选/公网通过证明;原G20 FAIL和所有旧失败仍保留。
|
||||
- 产品实现与本轮主会话验证完成;任务保持in_progress,N5浏览器完整门禁、独立只读review、生产摘要/启用及提交推送部署继续待办,不将本阶段完成写成整个项目完成。
|
||||
@@ -0,0 +1,46 @@
|
||||
# 报销单周期编号与历史兼容
|
||||
|
||||
## Goal
|
||||
|
||||
面向不足10人的科技初创公司,核对国内财务、OA、ERP的公开编号规则,形成简短、稳定、易核对的本项目编号方案;保留历史编号、审批、付款及审计引用。报销按月已由用户选择,其他类型按已复核矩阵实施。
|
||||
|
||||
## Background
|
||||
|
||||
用户指出现行报销序号长期累计不合适。实施前documentSequence默认BX/YYYYMMDD/4位/none,issueDocumentNumber仅原子递增,不执行周期重置;seed-config保留none。报销创建草稿时取号,提交仅为历史缺号单补号。不能只改reset_period元数据就声称已支持周期重置。
|
||||
|
||||
用户进一步明确已经按旧规则生成多个实际业务。历史兼容是切换前提,不能要求重建单据、重走审批、重新付款或重贴旧资产标签。付款导出的客户流水号由持久化batch_no派生(paymentOrderXls.js:24),批次明细保存entity_code快照(paymentBatches.js:1726),禁止仅改显示号而让银行材料、通知与原记录失配。
|
||||
|
||||
## Scope
|
||||
|
||||
- 报销周期已由用户明确选择按月,形式BX-202609-0001,下一月BX-202610-0001。后续用户要求先调研国内产品惯例与不足10人公司的适用规则;2026-09-18用户授权复核适合后实施,矩阵已通过主会话多角度复核。
|
||||
- 生效后新创建的报销草稿使用新规则;已创建草稿和所有已有编号保留,不重排历史审批/付款引用。
|
||||
- 使用既有业务时区,规则归属在创建时固定;即时取号使用该次业务时刻,采购仍在首次提交时确定日期段;序号允许因取消或删除留下空档,已用号码不回收。
|
||||
- 同一周期并发创建必须唯一;数据库失败不能产生重复编号。历史缺号补号的归属规则随最终设计明确。
|
||||
- 采用增量切换:旧已编号业务全状态保留原号;切换前未编号的既有草稿保留旧规则资格,延续原取号时机;新建对象才采用批准的新规则。新付款批次可以包含旧号报销,逐项保留来源编号。
|
||||
- 固定、可追溯的切换点与规则选择须持久化,不能依靠每次打开/审批时的当前日期重算编号。方案建议在准备就绪后的月初统一启用,具体日期待上线条件满足,不自动预约或部署。
|
||||
- 新增只读调研:付款批次、借款/还款、采购、资产/盘点、项目、合同、人员/主数据与外部来源标识;核对实际在用取号路径与官方公开文档,区分厂商可配能力、产品默认值和本项目建议。
|
||||
- 除已选择的报销按月外,其他内部编号按design矩阵纳入本轮本地实施;冻结差旅、真实外部来源标识不自动纳入改号。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
历史全量改号、线上数据回填、真实配置/密钥/备份读取、提交推送部署。本轮已获批的特定付款批次线上只读查询不是编号发布授权。
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [x] N1:完成有来源的跨系统调研及本项目编号矩阵,报销按月选择保留;明确其余建议、执行起点和历史缺号处理。
|
||||
- [x] N2:未占用的新周期首张为0001,否则接续同格式历史占号;同周期递增,日期段与周期一致,午夜/年界按既有业务时区判定。
|
||||
- [x] N3:真实隔离PG并发唯一性/事务失败边界通过;不靠先读最大号再无锁加一。
|
||||
- [x] N4:历史单号、已有草稿及其审批/付款引用原样保留,范围外单据编号不变。
|
||||
- [x] N5:列表/详情/搜索/自然排序及报销审批付款链兼容两种格式,本地通过不代表上线。
|
||||
- [x] N6:旧待复核批次、已导出制单的客户流水号与行绑定、entity_code快照、审计/通知引用均保持;新批次关联旧报销及新旧混合来源完整通过。
|
||||
- [x] N7:已编号与未编号旧草稿、切换边界并发/在途请求、回退再启用、同格式已有号码冲突分别验证;旧计数与新计数隔离且已用号码不回收。
|
||||
|
||||
## Test Plan
|
||||
|
||||
先检查documentSequence.service.test.js、草稿创建/补号路由及现有搜索排序消费者;复用合成独占PG合同验证并发、周期边界和回滚。依照design定稿与implement执行,不再重复索取同范围批准。
|
||||
|
||||
## Open Questions
|
||||
|
||||
- 范围已批准。生产启用日期、生产只读摘要与独立复核另行落实,不妨碍本地实施。
|
||||
|
||||
本地验收依据见implement末尾回执。N5的API/消费者及构建兼容已检查,浏览器完整验收已随09-06 g20-full-r6的372/372通过;独立复核PENDING。本task不据本地代码完成而归档或声明已上线。
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"id": "reimbursement-periodic-numbering",
|
||||
"name": "reimbursement-periodic-numbering",
|
||||
"title": "业务编号周期化与历史兼容",
|
||||
"description": "按已复核矩阵本地实施报销月号、低频业务年号及资产永久号;旧号不动,迁移默认不启用",
|
||||
"status": "in_progress",
|
||||
"dev_type": null,
|
||||
"scope": "business-numbering",
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "shunli",
|
||||
"assignee": "shunli",
|
||||
"createdAt": "2026-09-18",
|
||||
"completedAt": null,
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "2026-09-19 g20-full-r6:4437后端通过/1原跳过,372本地浏览器全过;PARTIAL仅dirty_candidate,独立PENDING/无部署,旧registry保护例外保留且无新增漂移。当前余额见implement顶部。\n本地编号实现与验证完成:完整后端4412通过/1原跳过;之后策略边界补验456/456及隔离PG通过。默认不启用,旧号保留;N5/G20浏览器、独立review及生产切换待办。未提交部署。",
|
||||
"meta": {
|
||||
"latestLocalCandidate": {
|
||||
"run": "g20-full-r6",
|
||||
"localChecksPassed": true,
|
||||
"receiptStatus": "PARTIAL",
|
||||
"browserPassed": 372,
|
||||
"publicPending": 12,
|
||||
"independentReview": "PENDING",
|
||||
"deploymentEligible": false,
|
||||
"legacyProtectionStatus": "FAIL_ONE_KNOWN_DERIVED_REGISTRY",
|
||||
"newProtectedDrift": false,
|
||||
"productionNumberingActivated": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
# 预算池并发修复设计(2026-09-19 用户已批准)
|
||||
|
||||
## 已核事实
|
||||
|
||||
三个模块共有四处用量写入:报销 submit;purchaseBudget reserve/release;travelPayments delta。它们先普通读取 used_amount 再写绝对值,没有针对 budget_pools 的显式行锁。四处计算/更新与 HEAD 旧实现相同;两个 service 周边错误码已有其他差异,不能宣称整文件相同。
|
||||
|
||||
报销虽在事务内重新 precheck,但预算池未锁;采购名为 authoritativePrecheck 的结果在写事务外获取,并在事务内继续使用。因此最终更新原子化不足以证明 block 决策可靠。示例仅为合成推演:额度100、用量0,两张60的申请同时读0,都通过并写60;数据库最终可能少记60。规划时尚未复现;现已获得原实现红例及修后绿例(见 implement.md),没有观察生产是否发生过。
|
||||
|
||||
## 技术方案
|
||||
|
||||
1. 在既有 budgetPool.js 增加仅接受事务客户端的池级写保护入口。优先使用参数化 `SELECT ... FROM budget_pools ... ORDER BY id FOR NO KEY UPDATE`:该锁与其他用量/额度更新冲突,又与外键 KEY SHARE 兼容;不修改主键,不用全局锁或进程内 mutex。具体返回字段以现有 Decimal 和映射为准,不输出业务值。
|
||||
2. 固定顺序:沿入口已有实体/工作流锁,确定所需池 ID;多池去重、按同一稳定顺序一次获取;锁后重读金额、额度、状态和适用范围,再进行现行预算决定、用量/流水及后续业务写入。新 helper 不反向获取实体或工作流锁;锁序盘点发现反向依赖时先调整调用者,不能只改 helper。不要先拿一个池再发现另一个较小 ID 后逆序加锁。
|
||||
3. 普通预览保留非锁定读取;提交的最终判定与实际占用使用同一池和锁后状态。自动候选的初次选择只用于定位,等待锁后重新验证适用性;候选失效/变化按现行错误合同停止,不能拿旧结果继续写或静默占另一个未锁的池。
|
||||
4. 报销保留 P9 的一次实体读取及同事务金额重算/审批/审计;预算保护必须先于权威预算读取。采购增加事务内最新预算/输入判定,事务外结果只可作预览,不能抵扣提交判定;差旅 submit 同步该约定。显式指定池与自动池的实际占用对象必须与校验对象一致。
|
||||
5. reserve/release、authorize/reverse 同样先按协议取池,再处理用量与流水;保持零金额、池不存在、释放归零、金额两位、重复调用的原语义。全部写入仍在调用者原事务内,失败回滚;不提高超时、增设重试或移出审计来掩盖锁等待。
|
||||
6. 保留管理端正常额度/状态更新;其 PostgreSQL 行更新与上述池锁自然互斥。开发 seed 为排除项,不运行它修改真实或既有库。没有 schema 变更,不顺手重构预算模型、历史流水或报销撤回的既有计量口径。
|
||||
|
||||
## 预计影响范围
|
||||
|
||||
| 归属 | 拟改/检查位置 | 边界 |
|
||||
| --- | --- | --- |
|
||||
| 共享保护 | server/src/services/budgetPool.js | 增加事务级锁入口,普通预览仍无写锁 |
|
||||
| 核心写入 | server/src/routes/reimbursements.js;server/src/services/purchaseBudget.js;server/src/services/travelPayments.js | 四处计数写入口一并处理 |
|
||||
| 最终预算判定 | server/src/services/feeControl.js;server/src/routes/purchaseRequests.js;server/src/routes/travelRequests.js | 必需的锁后重验与同池保证,保留 P9 合并读取 |
|
||||
| 调用者锁序 | server/src/routes/workflow.js、travelAuthorizations.js、travelTransactions.js 及采购/差旅撤回 | 先检查,只有遵守统一保护协议所必需时调整;冻结功能不启用 |
|
||||
| 验证 | 已有 budgetPool/purchaseBudget/travelPayments、报销/采购预检及审批测试;最小合成 PG 并发补件 | 不改原断言和验收预算,不把 mock 当真实 PG |
|
||||
|
||||
## 验证矩阵
|
||||
|
||||
- 红绿:原代码在同池两笔增量/两笔 block 提交下复现失败;保留旧失败,修后同一输入通过。SQL 微实验只能说明底层竞争,最终必须测试真实 service/route 的调用路径。
|
||||
- 合成 PG:同池并发占用;报销与采购共享池竞争;占用/释放交错;同实体重复占用/释放;跨多个池反向输入但统一锁序;不同池不无谓互斥。释放有归零时按合法串行顺序判定,不能把所有增减简单相加当唯一预期。
|
||||
- 预算决策:额度边界、刚好用尽、block/warn/off、旧/新开关、显式/自动池、等待期间池停用/额度修改;锁后重验应阻止陈旧放行。
|
||||
- 原子性:在流水、用量、工作流及原事务审计步骤注入失败,核无部分提交;同实体幂等和不存在/失效池保持既有返回。
|
||||
- 隔离:独占合成 PG、无外联、无真实环境配置/密钥/备份、可证明 owner 与精确清理;使用现有 runner/本地依赖,不安装或启动远端资源。无法满足时报告缺项,不借线上证明。
|
||||
- 门禁:针对性通过后,将新代码候选交 09-06 从 static 开始普通完整重验,并独立审查新增锁序/事务补丁。完整本地通过、独立审阅、干净候选、部署和12项公网结果分别记账。
|
||||
|
||||
## 保留与回退
|
||||
|
||||
每轮从当前 dirty 树取增量快照,不以 HEAD reset/stash 覆盖旧修复;本轮证据单独保存,旧 r6、冻结差旅和恢复材料不改。回退只恢复本任务精确变更;不读取生产用量、不重放流水、不轮换密钥、不提交推送部署。K0 文档澄清由 08-23 任务持有,与预算代码修复分开。
|
||||
|
||||
## 实施落点与锁序核验
|
||||
|
||||
- 新增锁函数仅接受事务客户端;Prisma 7.8.0 支持嵌套事务,不能用存在 $transaction 判断根客户端,使用根客户端 $connect 边界。
|
||||
- 公务卡退款原本先改预算再更新授权快照,与授权导入实体→预算的顺序相反;现于 upsert/预算前先锁已有 card_authorizations 记录,其余同步语义保留。真实 PG 并发验证该顺序。
|
||||
- legacy block 金额判断改用 Prisma.Decimal,两位金额边界避免二进制加法误拒绝;未改变精度或额度策略。
|
||||
- 提交锁后同一预算快照经 budgetPoolForWrite 传给纯预检,null 表示已判无池,undefined 才进行普通读取;避免锁外陈旧结果和重复预算查询。
|
||||
|
||||
## 验证实施收敛
|
||||
|
||||
本补丁客户端只有错误原因镜像,未改页面布局/交互;实际接口与事务验证承担新增并发行为的证明。用户对重复完整浏览器的成本提出异议后,中止本轮未完成浏览器阶段,保留全部原始回执;不追加无明确缺口的浏览器检查。发布候选完整门禁留待准备发布时统一执行,不降低或删除原发布验收要求。
|
||||
|
||||
## 独立复核修正:恢复既有选择口径
|
||||
|
||||
差旅 submit 原池解析仅传 legalEntityId、costCenterId、effectiveDate;本轮误加 departmentId 会让 departmentLegacy 池优先于 global,超出“保持原选择”的合同。删除新增 departmentId,保持原成本中心→全局匹配;不借并发修复改预算归属,不迁移或回填历史记录。上下文精确断言及部门/全局并存用例防止再次漂移。
|
||||
|
||||
原因码固定夹具除验证夹具→服务端/客户端文本外,还须反向要求所有 audience=user 注册码在夹具中有自有条目;期望中文仍为独立固定值。
|
||||
@@ -0,0 +1,56 @@
|
||||
## 2026-09-19 定向测试及独立补审通过(最新)
|
||||
|
||||
已读取 Claude 的 claude-result-20260919T044304Z.md、unit.log 与 exit-code.txt,并在回填记录前实算核对补丁manifest的before/after各10份全部一致,原审查报告SHA一致。Claude执行两份指定测试:2文件928项通过、0跳过、退出0、8.47秒(差旅54、原因码874);主会话未重跑测试。红例927→绿例928的差值1来自新增固定夹具的正向用例,其他用例没有增减。
|
||||
|
||||
两项必修均关闭:差旅预算池原口径恢复且锁定保留;budget.pool_changed固定夹具与反向完整性检查补齐。结合首批锁/事务/证据审查,预算补丁本地修复及独立复核完成;B7勾选,B6发布完整门禁保留延期,因此任务状态仍in_progress,不归档、不提交、不推送、不部署,不借本轮928抵扣旧4446/28所属输入。
|
||||
|
||||
无需再安排同范围Claude复核或测试。接收回执:review-fixes-20260919/claude-result-reception.json。回填仅改变任务记录,受测产品/测试文件未变;原manifest/报告/日志均未覆盖。真实PG差旅提交并发、真实认证与外部业务范围仍未验证,冻结和已披露例外保持。
|
||||
|
||||
## 2026-09-19 Claude 复核接回及最小修复计划(修正前记录)
|
||||
|
||||
报告 budget-pool-claude-review-20260919T043257Z.txt 已实读。独立静态/哈希复核确认锁、事务与证据归属,但有两项必修;不登记整体独立 PASS。
|
||||
|
||||
本轮在已批准“保持原预算池选择”的范围内修复:删除差旅提交预算上下文新增的 departmentId,保持公司/成本中心/业务日及 forUpdate 锁定;收紧上下文断言,并用部门池与全局池并存的合成路由用例验证原归属。新增 budget.pool_changed 的固定夹具文字,并反向核验全部 audience=user 注册码都有夹具,不从实现动态生成期望文本。
|
||||
|
||||
仅这两份测试需要验证:travel-request.errors.test.js、error-reason-client.test.js。主会话在用户明确分工前已运行红例:4失败/923通过(2文件),证明新增断言能抓到当前差旅上下文变化与夹具遗漏。用户随后明确要求测试交给Claude;修复后的测试由Claude执行,主会话不再运行。不重跑数据库全套、浏览器或全量门禁。保留差旅提交真实PG并发未测的范围说明。此前30文件交审包与运行日志原样保留;新证据独占 review-fixes-20260919 子目录。代码和测试已修改;绿例尚未执行,不记验证通过。交 Claude 执行两份定向测试并复核这两项增量,无需全量或浏览器。交接入口:review-fixes-20260919/claude-test-request.md。
|
||||
|
||||
# 预算池并发修复执行清单
|
||||
|
||||
## 首批修复验证状态(两项补审修正前,历史)
|
||||
|
||||
2026-09-19:用户已批准并完成本轮代码修复;真实隔离 PG 最终 28/28、受影响 Vitest 33 文件 526 项通过。后端全量225文件4446项及8个启用服务回归组也已通过;依用户对重复全量的反馈停止剩余浏览器验收。实际补丁独立只读复核待完成,发布前完整门禁仍待执行,不记整体任务完成或具备发布资格。证据根:artifacts/qa-governance/budget-pool-concurrency-20260919。
|
||||
|
||||
- [x] 核对独立报告、四处读改写及 HEAD 归因,确认采购事务外权威预检也须修复。
|
||||
- [x] 写明并批准 PRD/design;官方 task 启动,3074 路径及旧 dirty 内容保存在 baseline.json 与 before/。
|
||||
- [x] 完成调用者锁图:已有实体/工作流锁 → 稳定顺序预算池锁 → 最新判定与用量/流水;公务卡退款先锁授权记录再更新预算,消除反向依赖。
|
||||
- [x] 保留原实现真实 PG 红例及单测红例,不覆盖中间失败。
|
||||
- [x] 实施事务级 FOR NO KEY UPDATE、锁后重读/候选变化拒绝、四处写入保护和提交事务内权威判断;保留 P9 单次实体读取、原开关/金额/幂等/审计回滚。
|
||||
- [x] 最终真实 PG 28/28、相关 Vitest 33 文件 526 项通过;错误注册表/锁序定向 4 文件 885 项通过(有重叠,不能相加)。
|
||||
- [x] 在已有 backend-fastify-prisma.md 沉淀共享预算池锁序、锁后判定与事务客户端约定。
|
||||
- [x] task/process/docs/governance/diff、22份改动脚本语法及 Prisma/frontend 静态检查完成;原有 docs22未登记提示保留。旧材料保护结果见 final-protection.json。
|
||||
- [x] 新候选从 static 开始运行,输入冻结;已完成阶段如实保留,按用户反馈中止剩余浏览器;不重跑已完成阶段。
|
||||
- [ ] 准备正式发布候选时统一完成剩余完整门禁;本补丁阶段延期,原分层/预算/并发/零重试合同不降低。
|
||||
- [x] 制作本轮 before/ → 最终输入增量及 claude-review-request.md;inline 不派 implement/check 代理、不自称独立通过。
|
||||
- [x] 接回独立意见、修复两项必修并由Claude完成928项定向验证与只读补审;提交、发布、公网、编号与真实业务仍按原授权边界。
|
||||
|
||||
## 已完成验证与限制
|
||||
|
||||
- pg-red.log:原实现 4 个真实并发失败、1 个回滚通过;unit-red.log 保留 helper 缺失时的预期红例。
|
||||
- pg-original-final-fixture.log:22 场景版 fixture 对原源码快照运行,3 通过/19 失败;其中包含新增 helper 缺失,不能把 19 全称为业务缺陷复现,也不是最终 28 场景版红跑。
|
||||
- pg-final-r2.log:最终 28/28;真实 Prisma service/实际 Fastify handler、73 个已有迁移、受管隔离 PG 和精确 owner 清理通过。并发靠观察真实锁等待,不用任意 sleep 推测。
|
||||
- unit-final.log:33 文件、526 项通过;unit-lock-order.log:4 文件、885 项通过。两者范围不同且重叠。
|
||||
- 覆盖新旧预检开关、显式/自动池、报销/采购交叉 block/warn、额度等待后降低、候选停用、重复调用、多池锁序、独立池、归零和流水/工作流历史/代理审计失败回滚。
|
||||
- 金额判断使用 Decimal,补验 0.10 + 0.20 = 0.30;Prisma 7.8.0 事务客户端允许嵌套 $transaction,以根客户端 $connect 防误用。公务卡授权/冲正实体→池顺序已用真实 PG 验证。
|
||||
- HTTP fixture 使用合成授权身份;不是生产认证证明。冻结差旅只作受管服务/合成 handler 验证,未恢复应用入口或冻结浏览器用例。
|
||||
- 浏览器使用物理独占缓存副本,710 个文件复制 SHA 一致,没有下载浏览器。旧 WebKit 派生 registry baseline FAIL 和历史 CSV 校验工具 NOT_RUN 继续保留。
|
||||
- 当前无提交、推送、部署、生产/ARM/真实配置密钥备份读取、真实通知付款或旧恢复重跑。
|
||||
|
||||
## 本轮完整门禁中止与测试成本控制
|
||||
|
||||
budget-full-r1:static PASS;full-local 前11阶段 PASS,包括后端225文件4446项通过/1原条件跳过、审批动作、8个启用服务回归组(7个原关闭组不计通过)、Prisma及前端typecheck/build。后端全量用时512.855秒。用户指出重复完整浏览器测试浪费后,主会话向本轮受管环境发SIGINT,停止浏览器;29通过、4中断、339未运行,零重试,无产品断言失败,但整轮不是通过。
|
||||
|
||||
原始回执保留 FAIL/exit130,localChecksPassed=false;不将中断解释为产品修复失败,也不伪造372/372。受管环境PASS,sourceUnchanged/repositoryUnchanged=true,owner容器及scratch均已清理。发现386=372本地+12公网+2冻结不变;33页/7组本轮未完成,不借旧结果冒充。
|
||||
|
||||
本次将后端共享事务修复直接扩展为所有页面重跑,成本控制不足。今后修复过程中按改动风险选择定向验证,批次稳定且准备发布时集中完整验收;任务记录、证据和未触及代码的说明更新不触发业务重跑。本轮已完成PG实际接口/事务检查、受影响单测及全量后端/服务回归,暂未发现追加浏览器检查的必要性,因此不再新开一轮。
|
||||
|
||||
停止后仅回填任务记录及ignored交审材料;最终输入与运行冻结输入的对应关系见 final-summary.json / final-protection.json。Claude需复核本轮实际预算补丁,不需要重新审核知识精简;完整请求位于同证据根 claude-review-request.md。独立发现BUDGET-LOST-UPDATE-01保持待复核关闭,生产历史用量未检查或回填。
|
||||
@@ -0,0 +1,48 @@
|
||||
# 预算池占用与释放并发一致性修复
|
||||
|
||||
## Goal
|
||||
|
||||
修复业务独立补审发现的预算池丢失更新与陈旧超额判定;统一保证报销、采购及冻结差旅共享服务的并发一致性,以本地合成数据验证。
|
||||
|
||||
## Requirements
|
||||
|
||||
本任务来自业务独立补审 `artifacts/qa-governance/business-followup-claude-review-20260919T023537Z.txt`。用户要求将三组同类问题单独规划、一并修复,并于2026-09-19明确批准本方案实施。09-18 的 P9 性能优化通过,不代表旧预算并发缺陷不存在。
|
||||
|
||||
## Scope
|
||||
|
||||
- 报销提交、采购/差旅共享占用与释放、公务卡授权/冲正中的预算池计数必须在并发下保持一致;相关调用者必须遵循统一事务协议。
|
||||
- 超预算判断必须基于获得预算池写保护后的最新状态;只把计数改成原子加减、保留陈旧预算判定不算完成。
|
||||
- 保持现行预算池选择、控制模式/开关、错误语义、金额精度、幂等、释放不低于零及审批/审计回滚合同。
|
||||
- 差旅仍冻结;仅允许共享服务的安全修复及本地合成验证,不恢复入口、不重启冻结 E2E、不删除其历史代码或结果。
|
||||
|
||||
R1:不同实体并发命中同一池时,最终用量等于按合法串行顺序应用全部已提交增减后的值,不能覆盖他人的写入。
|
||||
|
||||
R2:现行 block 策略下,并发竞争剩余额度不能双双通过;warn/off 仍按原规则运行。开关前后、自动选择与显式预算池必须分别验证。
|
||||
|
||||
R3:流水、用量、单据/工作流状态和原本要求原子的审计共同提交或回滚;同一实体重复占用/释放仍按现行合同拒绝或幂等。
|
||||
|
||||
R4:锁序统一,涉及多个池时按稳定 ID 顺序获取;并发故障测试使用真正隔离 PostgreSQL,不用 mock 证明数据库行为。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
不修复其他旧代码或警告;不修改生产用量、不推断历史漏记金额、不增加自动对账回填。无数据库 schema/历史迁移重写、预算策略变更、冻结差旅恢复、生产/ARM/真实配置密钥备份读取、真实通知付款、恢复演练、提交推送部署或编号启用授权。
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [x] B1:三组入口全部使用同一预算池并发保护约定;调用者盘点包含报销、采购、差旅及工作流释放、公务卡授权/冲正,没有遗漏写入口。
|
||||
- [x] B2:真实隔离 PG 证明同池正向并发无丢失更新、占用与释放交错结果等于合法串行结果、不同池可独立进行;原实现有可复现失败证据。
|
||||
- [x] B3:受 block 规则约束的同池竞争只有额度内提交成功;同时覆盖 legacy/precheck 两态以及显式/自动池,warn/off 行为不变。
|
||||
- [x] B4:重复调用、释放归零、空/失效池和中途异常均符合原合同;失败无孤立流水、用量、工作流或成功审计。
|
||||
- [x] B5:单池和多池锁序、外键关联写入及既有实体锁不形成新增等待环;并发测试通过同步屏障或锁状态观测建立交错,不靠任意 sleep 猜测。
|
||||
- [ ] B6:受影响 Vitest、语法/Prisma 与治理检查通过;业务代码变化后新完整候选沿 09-06 现行门禁重验,旧 r6 不能抵扣新代码。保留 12 公网/2 冻结归属、并发、预算和零重试合同。
|
||||
- [x] B7:实际补丁经独立只读复核;inline 主会话不冒充 reviewer。本地完成不等于可以发布。
|
||||
|
||||
## 本轮验收执行调整(2026-09-19)
|
||||
|
||||
用户在本轮运行中明确指出重复完整浏览器验收浪费,主会话据此停止剩余全量并重新评估影响范围。本补丁阶段以已完成的真实 PG 28项、受影响单测526项、后端全量4446项及服务回归证明本地修复;客户端仅新增错误原因镜像,没有页面/交互改动。新增锁后提交、block/warn、新旧开关、交叉业务并发及失败回滚由实际 Fastify handler/Prisma/PG 覆盖,未发现需要另起浏览器定向运行的缺口。
|
||||
|
||||
B6 中的发布候选完整门禁义务保留为后续准备发布时执行,本轮不补勾、不以旧 r6 或中止的 browser 阶段抵扣。不再因本轮记录/交审材料变化重跑业务测试。B7 已由首批独立审查及2026-09-19两项修正补审完成;Claude实跑两份文件928项全通过,结果见 implement.md 最新记录。
|
||||
|
||||
## Test Plan
|
||||
|
||||
按 design.md 的场景矩阵及 implement.md 的红绿/保护清单执行;现有预算、费用预检、报销/采购审批测试优先复用。真实 PG 仅使用原受管合成环境及已在本地的依赖,不读取真实配置来寻找数据库。
|
||||
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"id": "budget-pool-concurrency",
|
||||
"name": "budget-pool-concurrency",
|
||||
"title": "预算池占用与释放并发一致性修复",
|
||||
"description": "预算并发本地修复及独立审查完成;两项必修经Claude定向928项验证通过并关闭。发布完整门禁延期,任务保留in_progress,未提交部署。",
|
||||
"status": "in_progress",
|
||||
"dev_type": "backend",
|
||||
"scope": "budget-control",
|
||||
"package": null,
|
||||
"priority": "P1",
|
||||
"creator": "shunli",
|
||||
"assignee": "shunli",
|
||||
"createdAt": "2026-09-19",
|
||||
"completedAt": null,
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [
|
||||
"server/src/services/budgetPool.js",
|
||||
"server/src/services/purchaseBudget.js",
|
||||
"server/src/services/travelPayments.js",
|
||||
"server/src/services/feeControl.js",
|
||||
"server/src/routes/reimbursements.js",
|
||||
"server/src/routes/purchaseRequests.js",
|
||||
"server/src/routes/travelRequests.js",
|
||||
"server/src/routes/travelTransactions.js",
|
||||
"scripts/qa/test-budget-pool-db.cjs"
|
||||
],
|
||||
"notes": "",
|
||||
"meta": {
|
||||
"planningSource": "user-provided independent review and request to address three related paths together",
|
||||
"implementationApproval": "APPROVED_BY_USER_20260919",
|
||||
"findingId": "BUDGET-LOST-UPDATE-01",
|
||||
"discoveryStatus": "CONFIRMED_STATIC",
|
||||
"discoverySeverity": "P1",
|
||||
"discoveryCommit": "b1d25d3c9939c0020e7b4f75868cd97c35c16ba8",
|
||||
"remediationStatus": "LOCAL_VERIFIED_INDEPENDENT_REVIEWED",
|
||||
"deploymentStatus": "NOT_DEPLOYED",
|
||||
"externalVerificationStatus": "NOT_TESTED",
|
||||
"report": "artifacts/qa-governance/business-followup-claude-review-20260919T023537Z.txt",
|
||||
"reportSha256": "b48e5f53340e139e5a97b5fdcb6d7003881a80a8a08d4004d01aaa6a759d2d0b",
|
||||
"evidence": "artifacts/qa-governance/budget-pool-concurrency-20260919",
|
||||
"coordinatorTask": ".trellis/tasks/09-06-release-gate-integrity",
|
||||
"independentReview": "PASS_SCOPED_BUDGET_PATCH",
|
||||
"deploymentAuthorized": false,
|
||||
"travelReactivationAuthorized": false,
|
||||
"targetedPostgresPassed": 28,
|
||||
"targetedUnitPassed": 526,
|
||||
"fullCandidate": "INTERRUPTED_NOT_PASS",
|
||||
"deploymentEligible": false,
|
||||
"backendFilesPassed": 225,
|
||||
"backendTestsPassed": 4446,
|
||||
"backendOriginalConditionalSkip": 1,
|
||||
"browser": {
|
||||
"passed": 29,
|
||||
"interrupted": 4,
|
||||
"notRun": 339,
|
||||
"retriedCases": 0
|
||||
},
|
||||
"releaseFullGate": "DEFERRED_UNTIL_RELEASE_PREPARATION",
|
||||
"reviewReport": "artifacts/qa-governance/budget-pool-claude-review-20260919T043257Z.txt",
|
||||
"reviewFixEvidence": "artifacts/qa-governance/budget-pool-concurrency-20260919/review-fixes-20260919",
|
||||
"reviewFixTests": "CLAUDE_PASSED_2_FILES_928_TESTS_NO_SKIPS",
|
||||
"reviewFixFiles": [
|
||||
"server/src/routes/travelRequests.js",
|
||||
"server/tests/unit/routes/travel-request.errors.test.js",
|
||||
"server/tests/unit/fixtures/error-reason-messages.json",
|
||||
"server/tests/unit/scripts/error-reason-client.test.js"
|
||||
],
|
||||
"findingResolution": "RESOLVED_LOCAL_NOT_DEPLOYED",
|
||||
"reviewFixResult": "artifacts/qa-governance/budget-pool-concurrency-20260919/review-fixes-20260919/claude-result-20260919T044304Z.md",
|
||||
"reviewFixResultSha256": "cb7996f6dcacc3ffd44a398b705ed840bf51ed6a0e312336933a25f93813a8f9",
|
||||
"requiredReviewFindingsOpen": 0
|
||||
}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户