提交图
1227 次代码提交
作者 SHA1 备注 提交日期
wangsli和Claude Opus 5.5 3fb33fe93c 借款失败回单归属与银行结果对账方案设计稿,未实施(09-17-company-loan-principal-repayment)
- 释放占用须有逐次银行提交的终态证据;区分制单导出与银行提交尝试
- 只导出未提交作为经特别复核的人工例外(全部证据加双人复核,
  独立终态 confirmed_not_submitted),用户已确认支持
- 晚到成功按冻结快照核对、逐笔差额补记与待追回;补记不生成可导出指令
- 按原因冻结出借人,误报经独立复核关闭,全部原因关闭才解冻
- 线下对账只能查清事实,不能直接解除系统占用

设计稿,未实施;未推送。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 21:33:36 +08:00
wangsli和Claude Opus 5.5 b88790d396 借款还款同金额回单须经独立复核确认归属后方可核销(09-17-company-loan-principal-repayment)
- 同一出借人同金额的其他批次曾导出或上传回单(含确认失败后已取消的)时,
  最终核销入口要求已复核的归属确认;OCR 匹配与人工回单复核均不能绕过,
  证据不足保持待对账,本金与占用不变;存在候选时失败回单不能释放占用
- 新表 loan_receipt_attributions(迁移 20261006010000):绑定交易指纹、
  回单核验与人工录入证据、当时候选集合;依据类型不含时间吻合;复核人须
  当前有资格且独立于登记人、批次创建人、提交人、导出人、回单上传人、
  人工录入人与出借员工;失效记录在重新登记时标为 superseded,历史只增不改
- 借款回单上传取出借人锁,与核销候选检查串行;串行只保证按当时已知候选
  判断,核销之后才出现的新证据留待晚到结果对账流程处理
- 付款就绪检查反映归属要求;页面登记/复核/失效重登,写明同额分期每期需确认
- 测试:两个错误核销复现改为回归断言;证据绑定、确定性并发两种顺序、
  PC 浏览器完整登记复核重登流程;变异测试均变红

注意:借款功能尚不具备真实还款验收条件(失败回单与对账流程、离职后确认
失败、真实回单样本、手机端弹窗、独立复核待完成);未推送、未部署。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 20:20:51 +08:00
wangsli和Claude Opus 5.5 b639422211 修复在途还款被出借人维护卡死并按审批时资格登记付款后事实(09-17-company-loan-principal-repayment)
- A:出借人存在 reserved 额度占用时,身份关联与收款资料维护在出借人锁内
  返回 409 loan.lender_in_flight;页面禁用并提示,修正账户弹窗误导文案
- B:回单 OCR 认领、人工回单参与人、核销按审批时资格认定,不再因原审批人
  或出借员工事后离职/撤权、主数据停用而卡死;保留身份核实、版本与付款快照
  一致、审批独立性及回单匹配校验;付款前环节仍校验当前资格
- 测试:隔离 PostgreSQL 合成全流程,含确定性并发交错、付款后独立性反例、
  离职后经 OCR/人工复核核销、PC/手机按钮禁用;变异测试均变红
- 恢复手册:资金类数据恢复后先暂停付款,对照银行流水补齐并核对占用再开放
- design 按环节修订资格规则

注意:C(同金额回单传错批次错误核销)已复现但尚未修复,借款功能不具备
真实还款验收条件;未推送、未部署。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 13:13:30 +08:00
wangsli和Claude Opus 5.5 1989f666ac 补齐手动快照模式回归测试与切换说明(08-28-production-arm-backup-transfer-incident)
- 合同测试补齐:watchdog/drill 服务仍运行、timer 已 disable 但仍 active、
  断链模式文件三类场景,probe 与 refresh 两阶段均断言
- 三个源码变异在旧测试中全部放过、新测试全部拦住
- 切换说明补充超时处置需预先批准、安装前同步并核验源码、
  回滚时 Persistent timer 可能立即补跑并告警
- 报错分类细化(复核第 5 条)后置;未推送、未做远端切换

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 10:51:45 +08:00
wangsli和Claude Opus 5.5 f6d1025d85 备份策略改为部署前手动快照:部署合同增加手动快照模式 [08-28-production-arm-backup-transfer-incident]
- 用户决定仅用部署前手动轻量快照,不再推进对象存储、ARM/hyinda-20c 备份
- refresh-deployment-contract 新增 /etc/hyb-oa-backup-mode 显式模式:
  无文件保持原自动模式;manual_snapshot 要求三个备份 timer 停用且备份
  service 已退出,ops timer 仍须运行;内容/属主/符号链接异常 fail-closed
- probe 部署前与 refresh 部署后均校验模式与 timer/service 一致性
- 新增 44 backup_mode_invalid / 45 backup_timer_not_disabled 分类及合同测试
- 记录 10-05 ARM 与 hyinda-20c 只读核验结果、远端切换顺序与回滚
- 远端切换未执行,需另行批准

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 17:28:45 +08:00
wangsli和Claude Opus 5.5 9cbefdf243 记录事务上限决定、报销AC11确认并归档审批旧状态调查任务 [09-27-purchase-submit-tx-timeout][09-01-reimbursement-one-page-approval-workbench]
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
- 09-18 PRD 注明「不提高5000ms」约束经用户 2026-09-27 决定被取代;
  09-27 任务记负载验证结果(采购提交 0 次 500)。
- 父任务记用户确认:退回的报销单已重新提交并经财务审批通过(来源为
  用户确认,未读生产数据);核查 SW 缓存仅含报销摘要,符合 R8。
- 09-26-approve-success-state-unchanged 验收完成并已上线,归档。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 15:18:36 +08:00
wangsli和Claude Opus 5.5 b6f0c83608 采购提交与报销新建/提交事务显式使用10秒上限 [09-27-purchase-submit-tx-timeout]
负载下采购提交事务超过 Prisma 交互事务默认 5000ms(P2028)返回 500。
分段计时显示无单一瓶颈(总时长中位 843ms、最大 3506ms,编号锁等待
最多 535ms),是约 20 条顺序查询整体变慢贴近上限。报销新建/提交同结构。
三处改用项目既有的 { maxWait: 5000, timeout: 10000 },事务内容不变;
新增采购与报销提交的事务选项回归断言。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 12:27:04 +08:00
wangsli和Claude Opus 5.5 a6ff2dc3b1 记录70af0c6b门禁PASS与生产发布结果 [09-26-approve-success-state-unchanged][09-06-release-gate-integrity]
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
生产由 b1d25d3c 更新为 70af0c6b:两个新迁移已应用(pending=none),
合同 refresh 与只读复核 13/13 通过,源码属主正确,公网免凭据检查通过。
SSH 断线后补跑包装器尾部步骤的过程已记入任务。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 11:50:53 +08:00
wangsli和Claude Opus 5.5 70af0c6b9a 资产流转E2E后退前等待未保存状态落定 [09-06-release-gate-integrity]
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
保存后 URL 同步 replace,而「表单已保存」需多次渲染才传到导航拦截器
(UnsavedChangesGuard 的 ref 在 effect 中更新)。负载下测试在 URL 变化后
立即 goBack 被拦为未保存(门禁 5 轮失败 2 次,快照可见确认框)。
改为沿用 r103 的写法,先等 html[data-unsaved-changes="false"] 再后退;
断言不变。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-26 20:28:08 +08:00
wangsli和Claude Opus 5.5 0931b1ea49 修复慢网络下审批后页面显示旧状态:SW API 缓存仅在离线时回退 [09-26-approve-success-state-unchanged]
app-api-runtime 对 /api/me、/api/workflow/tasks*、/api/workflow/approvers*、
/api/notifications* 使用 NetworkFirst + networkTimeoutSeconds: 3。网络响应
超过 3 秒时 Service Worker 返回审批前缓存的旧响应,真实响应被丢弃,页面
仍显示「待派发」。审批写入本身正确。自 2026-03(9112383d)起存在。

去掉网络超时,只在网络失败(离线)时回退缓存;退出登录清理缓存不变。
新增回归测试锁定该规则。负载复现修复前 3 轮命中 2 轮,修复后 3 轮 0 命中。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-26 18:58:45 +08:00
wangsli和Claude Opus 5.5 59e20e45cc 新增审批成功但页面停留旧状态的调查任务记录 [09-26-approve-success-state-unchanged]
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-26 17:34:10 +08:00
wangsli和Claude Opus 5.5 34675e1a98 放宽两处负载敏感的E2E超时预算 [09-06-release-gate-integrity]
750a184b 两轮 verify-candidate 在 2 核主机/4 worker 下均因同两处超时失败:
- 报销付款批次主链路:全部阶段在 305s/303s 完成,超出 300s(单跑 145s)→ 420s
- 项目级视觉 pc:admin:15 页在 180s 内完成 14 页 → 每组 240s(用例级覆盖)

所有断言、worker 数、重试及 Playwright 项目默认 180s(回执校验项)不变;
规约同步视觉分组预算。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-26 14:42:49 +08:00
wangsli 750a184b8a 归档10-05错误码可解释性与付款就绪任务(09-05-error-explainability-payment-readiness)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
591条历史豁免基线已清零,794条新增reasonCode已通过候选分支合并落地至
origin/main(46a70aa5),主链路零例外,无剩余阻塞验收项。
work landed via 已删除的候选分支而非专属分支,故用
--skip-branch-validation 归档。
2026-09-26 09:12:15 +08:00
wangsli 2769408b82 docs: 同步5个任务的落地状态(候选分支已合并入 origin/main)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
commit 字段从 null 更新为合并提交 46a70aa5,notes 补充说明:
本地实现已经落地到主线,不再是仅存在于未提交分支的工作。

核实过任务实际验收标准后,明确维持 status=in_progress、不归档——
真实样本验证/独立复核/生产切换等验收项对这5个任务都仍然开放,
"代码已合并"不等于"验收完成",归档需要业务验收,不能只看自动化通过。

涉及: 09-17-company-loan-principal-repayment,
09-17-erp-exclusive-retirement, 09-18-local-concurrency-product-fixes,
09-18-reimbursement-periodic-numbering, 09-19-budget-pool-concurrency
2026-09-26 09:06:20 +08:00
wangsli e92596a2ac docs: 补充 worktree 生命周期约定(治理文档)
记录本次会话的教训:worktree 曾累积到16个、占用两位数GB磁盘,
因为清理被推迟。补充判断"何时该删"的具体方法
(git worktree list + merge-base --is-ancestor),供后续开发/agent参考。
2026-09-26 08:48:46 +08:00
wangsli ed3814fccd fix: 合并后清理重复测试与修复 CEO/财务兜底脚本注入 bug
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
- apply-ceo-finance-fallback.js: execute() 原先在传入 mock pool 时仍强制要求
  DATABASE_URL 环境变量,导致单测无法注入 mock pool 验证事务逻辑。改为仅在
  未传入 pool 时才检查 DATABASE_URL。
- portal.test.js: 删除本次合并前遗留的重复用例(期望旧的
  portal.feature_disabled reasonCode),候选分支自带的等价用例更完整
  (校验 reasonCode 以及全部零写入断言)。
- todos.test.js: 删除本次合并前遗留的文件,候选分支的
  todos.errors.test.js 覆盖等价且更完整。
2026-09-26 08:23:07 +08:00
wangsli和Claude Sonnet 5 b2f4b42ded fix: 清理自动合并时残留的4条重复错误码 [09-05-error-explainability-payment-readiness]
合并时 errorReasons.js/errorReasons.ts 未被判定为冲突,git 自动把
主线首批4个条目和候选分支的完整版本拼在了一起,导致同一语义有两套
命名(如 ap_operations.feature_disabled 与 ap_operations.disabled
并存)。删除主线这4条已被取代的旧条目,保留候选分支的完整版本。

check-error-reason-contract.mjs 主检查+self-test 均恢复 PASS。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-26 08:00:55 +08:00
wangsli 46a70aa552 merge: 合入候选分支(09-17借款/ERP退役、09-18编号、09-19预算并发、完整10-05错误码迁移,均经确认)
# Conflicts:
#	.agents/skills/trellis-before-dev/SKILL.md
#	.agents/skills/trellis-brainstorm/SKILL.md
#	.agents/skills/trellis-continue/SKILL.md
#	.agents/skills/trellis-start/SKILL.md
#	.trellis/tasks/08-23-isolated-backup-restore-drill/design.md
#	.trellis/tasks/08-23-isolated-backup-restore-drill/prd.md
#	.trellis/tasks/09-05-error-explainability-payment-readiness/prd.md
#	.trellis/tasks/09-05-error-explainability-payment-readiness/task.json
#	.trellis/tasks/09-09-existing-deploy-seed-separation/implement.md
#	.trellis/tasks/archive/2026-09/09-05-trellis-upgrade-rule-cleanup/task.json
#	.trellis/workflow.md
#	scripts/qa/error-reason-legacy-baseline.json
#	server/src/routes/apOperations.js
#	server/src/routes/portal.js
#	server/src/routes/todos.js
#	server/tests/unit/fixtures/error-reason-messages.json
#	server/tests/unit/routes/apOperations.permissions.test.js
2026-09-26 07:54:10 +08:00
wangsli和Claude Sonnet 5 f5165f3c0c 记录首批4个错误码迁移的落地结果 [09-05-error-explainability-payment-readiness]
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
task.json 与 implement.md §15 补齐 commit cd01e4bf 的实施记录:基线
591→587,验证结果,剩余范围未扩大。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 21:17:59 +08:00
wangsli和Claude Sonnet 5 cd01e4bf28 迁移首批4个错误码:AP台账/查询、待办、工作台功能开关 [09-05-error-explainability-payment-readiness]
10-05 到期例外清单里已设计好的首批 4 个具体调用,现予落码(原方案见
implement.md §14「首批具体分支与验证要求」):

- ap_operations.feature_disabled(409):AP 台账/明细查询功能关闭
- ap_operations.query_invalid(400):AP 台账查询参数校验失败
- todo.feature_disabled(409):待办功能关闭
- portal.feature_disabled(409):工作台首页功能关闭

四处均改为调用 buildBusinessValidationError(reasonCode, details, statusCode),
保留原 HTTP 状态码、featureFlag/reason 等既有 details 字段不变,仅新增精确
reasonCode;不改功能开关判断逻辑、不改权限校验顺序。

- server/src/constants/errorReasons.js + client/src/api/errorReasons.ts:
  注册 4 条原因码及中文文案,服务端/客户端逐字一致。
- scripts/qa/error-reason-legacy-baseline.json:移除这 4 条已迁移的旧例外
  记录(591 → 587),check-error-reason-contract.mjs 主检查与 self-test
  均 PASS,无 new_legacy/stale_exception/unregistered_reason。
- apOperations.permissions.test.js:扩展"功能关闭"断言校验 reasonCode 与
  原 details 字段共存;新增"查询参数非法(功能开启)"400 用例,断言零
  台账业务查询;新增"合法查询仍 200"用例。
- portal.test.js:新增工作台关闭时 409+reasonCode+零业务查询断言(此前
  完全没有覆盖这条路径)。
- todos.test.js:新建(此前 todos 路由零测试覆盖),聚焦 ensureFeatureEnabled
  网关:关闭时 GET/POST 均 409+reasonCode+零 todoItem 查询;开启时正常放行。

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

剩余 669 条例外记录不变,尚未处理;B/C 两档 57 文件仍需逐模块确认迁移或
提出延期理由,本次不扩大范围。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 21:16:55 +08:00
wangsli和Claude Sonnet 5 73eb1031ce 归档付款观察与运营现状只读准备任务 [09-06-payment-observation-readonly-preparation]
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
全部 AC 完成,status 已是 review。用户确认口径:本任务范围是"产出可执行
的准备包"(0014 观察清单草稿、三张 rejected 单据收口规则草稿、三项只读
检查结果、G1-G10 备份可用性预检),清单里的实际运营动作(真人交接、
财务收口)是后续独立工作,不卡本任务完成判定。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:55:49 +08:00
wangsli和Claude Sonnet 5 7ad022ce4b 补齐验收记录并归档非参与人报销只读投影任务 [08-28-reimbursement-nonparticipant-readonly-projection]
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
发现并修正文档滞后:业务提交 e8d6766 已确认合入并随后续发布上线(是当前
生产 b1d25d3c 的祖先提交),但 PRD 的 9 条 AC 一直保持未勾选、task.json
备注仍写"未推送、未部署"。implement.md 的服务端/前端验证清单与独立只读
复核记录逐条对应 PRD 各项,现据实补勾 AC 并更正 notes,再归档。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:52:12 +08:00
wangsli和Claude Sonnet 5 b87b594e62 归档Trellis项目升级与规则精简任务 [09-05-trellis-upgrade-rule-cleanup]
全部 AC 完成:CLI 升级至 0.6.16、项目模板与全局规则精简经用户批准落地、
seed 加固及负向回归经独立增量复核通过(50/50 绿、9红/41绿还原判定重现)。
合并提交 66f25b1f 已确认在 main 历史;status 已是 review,等归档授权。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:52:12 +08:00
wangsli和Claude Sonnet 5 b9415330e5 归档日常发布与首次seed初始化分离任务 [09-09-existing-deploy-seed-separation]
全部 AC 完成:部署脚本与 Compose init 消除无条件 seed 旁路,existing 对
已修改配置不重写、重复执行稳定,缺项检查不误判、切应用前停止不自动
seed;数据库生命周期隔离回归不退步。2026-09-09 已完成 b87cc55 真实发布
(本轮回填补齐了完整执行记录:845 镜像清理、备份验真、发布后复核)。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:52:12 +08:00
wangsli和Claude Sonnet 5 89fad4857f 归档既有环境应用发布数据库生命周期隔离任务 [09-05-existing-deploy-db-lifecycle-isolation]
AC1-8 全部完成:existing 路径不再隐式触碰数据库生命周期,四类源码变异回归
锁定,独立只读复核通过,2026-09-05 已完成真实发布验证(f223bfb72fb2),
容器身份五项未变、公网 ready/bundle marker 通过。此前保留 in_progress 仅
因未获明确归档授权,现予归档。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:51:59 +08:00
wangsli和Claude Sonnet 5 096576d882 新增E2E认证前置统一任务记录 [09-07-e2e-auth-preconditions]
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
从主工作区未跟踪目录合并提交。P1、in_progress,独立于 release-gate-integrity,
调查合成浏览器验收的认证起点(登录/会话恢复/注销边界),已完成阶段 0 本地
观测:bootstrap 在线/离线信号、refresh 触发路径、24 文件字面交集与矛盾路径
静态盘点;不预设批量迁移 spec,未获批量修改授权。

未改运行时代码,未运行产品测试或部署。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:41:00 +08:00
wangsli和Claude Sonnet 5 efe2df4da3 新增付款观察与运营现状只读准备任务记录 [09-06-payment-observation-readonly-preparation]
从主工作区未跟踪目录合并提交。P2、status=review,产出 0014 付款观察清单
草稿、三张 rejected 单据收口规则草稿、三项只读检查(唯一付款主体存量、
合同只读用例超时归因、IM routing 三层现状)及 G1-G10 备份可用性预检。

未实施新运营动作、未改产品代码、未操作生产数据或外部通知。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:41:00 +08:00
wangsli和Claude Sonnet 5 bbe4d9acbf 回填b87cc55发布准备与执行完整记录 [09-09-existing-deploy-seed-separation]
从主工作区未提交改动合并回填 2026-09-09 从未提交的完整发布记录(origin/main
此前只有骨架,缺这部分细节):

- 新候选发布准备草案:固定 b87cc55、只读预检清单、回滚目标确认(以当前
  生产运行版本为准,不默认仍是历史 f223bfb)。
- 两笔提交推送回执:81102c2(迁移预检修复,归 09-06-release-gate-integrity)
  与 b87cc55(本任务,17 文件)分别提交推送。
- 生产只读预检:迁移对账 PASS 无 pending,39/3/1 最低配置齐全,磁盘可用
  8.32 GiB/使用率 85.9%。
- 获准 root 通道备份验真:备份 PASS_INTEGRITY_ONLY;生成 845 个可清理镜像
  候选清单(7 天以上、无 tag/digest、无容器引用、排除生产回滚镜像)。
- 镜像清理执行:845 项逐一核验后删除 811 项、34 项 Docker 拒绝跳过,磁盘
  从 8.32G 净增至 46.43 GiB(实测净变化,不是镜像虚拟大小相加)。
- 部署执行与复核:14:07 CST deploy-existing.sh 返回 0,运行 build 切换为
  b87cc55aca0003130cf8a5bbe38d0dd15528389c,/ready 200,无 seed 阶段、
  迁移无 pending,权限解析器逐项核对与候选一致。

无产品代码改动,这批全是已实际发生的生产操作(备份验真、镜像清理、发布)
留下的审计记录补齐。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:40:49 +08:00
wangsli和Claude Sonnet 5 c25d2de87e 回填b87cc55发布后AP权限收紧验证记录 [09-07-manager-ap-access-scope]
从主工作区未提交改动合并回填 2026-09-09 从未提交的发布后验证记录:候选
b87cc55 例外发布完成后,直接调用运行镜像内权限解析器核对 manager/ceo
不再获得 finance.ledger.view、finance/finance_mgr 及兼财务角色仍可读、
expense.approve 和 payment.batch.review 保留;明确这是制品字节核验和
运行时策略执行,不是真人会话请求验收(authenticated account route test /
real-user page acceptance 均 NOT_RUN)。

无产品代码改动。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:40:36 +08:00
wangsli和Claude Sonnet 5 c4025083af 落地任务复用治理规则与 worktree 对齐检查 [09-09-trellis-workflow-alignment]
2026-09-09 本地已验证完成、待交审的治理修复,一直未提交:

- 6 个 skill(trellis-before-dev/brainstorm/check/continue/finish-work/start)
  统一改为"先检查当前和直接相关既有任务,复用优先于新建",取代原来"复杂任务
  先请求新建 task"的默认动作;新增 worktree/active-task 一致性校验步骤。
- project-governance.md 新增两节:Task Reuse(任务复用判据)、Active Task And
  Worktree Alignment(激活任务与实际执行 worktree 一致性检查,防止跨 worktree
  会话把上一个任务的 workflow-state 当成当前任务)。
- workflow.md 的 Request Triage / Parent-Child 章节、no_task 面包屑同步改写。

本地已过 task validate、check-trellis-governance.mjs、check-process-contract.mjs、
audit-docs.mjs、git diff --check;无业务代码改动。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 20:40:28 +08:00
wangsli和Claude Sonnet 5 22c6cb7890 补充5d8cdf12部署验收记录到本任务实施清单 [09-11-reimbursement-payment-handoffs]
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
从孤儿 worktree(artifacts/isolated-worktrees/20260910-reimbursement-payment-integration)
合并回填与前一笔 09-04 相同的 2026-09-11 执行记录(候选 5d8cdf12 部署、公网
部分验收、测试账号隔离盘点、提交推送回执),补齐本任务自己的 implement.md——
该事件同时归属两个任务,此前只有 09-04 一侧记录,本任务侧完全空白。

无产品代码改动。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 19:55:56 +08:00
wangsli和Claude Sonnet 5 5068e08b39 回填财务/yj所属主体生产修正执行记录 [09-08-reimbursement-payment-closeout]
从孤儿 worktree(artifacts/isolated-worktrees/20260910-reimbursement-payment-integration)
合并回填一次真实生产数据库写入、此前从未提交的完整执行记录:

- 2026-09-11 用户明确批准仅对财务 wangzhiling 与 yj 两人做 legal_entity_id
  回填(原值须为 NULL,目标须为唯一启用未归档主体),不涉及银行明文/角色/
  经理等其他字段。
- 10:50 READ ONLY 预检确认两人在职、角色/经理未变、目标主体唯一;10:51
  READ WRITE Serializable 事务原子更新恰好两行;10:52 独立连接只读回读
  确认一致,另有独立 SSH 只读复核。执行脚本先过 13 项合成正反例自测。
- 同批次的业务就绪只读核验:确认财务/yj/管理员当时仍缺所属主体,不能
  由此推出"财务不能替别人付款"等错误结论;两者是不同资格维度。

无新增产品代码改动;本次回填是对已实际发生的生产写入补齐审计记录,
使任务文档与真实数据库状态一致。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 19:55:49 +08:00
wangsli和Claude Sonnet 5 7abb410be5 回填5d8cdf12部署与验收账号隔离裁决记录 [09-04-reimbursement-state-gap-finance-view]
从孤儿 worktree(artifacts/isolated-worktrees/20260910-reimbursement-payment-integration)
合并回填 2026-09-11 从未提交的真实执行记录:

- 候选 5d8cdf12 的生产预检、发布与公网部分验收(员工 smoke 双端登录、
  零明细选票入口、合成草稿创建与清理)全过程记录。
- 验收测试账号只读盘点:财务 smoke 已归档、CEO smoke 凭据 0 条匹配、
  一个经理 smoke 需改密;更关键的是角色任务/通知无测试隔离——付款复核
  按当前事实投影会指向非 smoke 的真人 CEO,通知总开关和企微绑定均已
  开启,存在真实外发风险。
- 提出 A(推荐,隔离环境验收+保留公网员工侧验收)/B(先设计完整合成
  隔离方案再做生产公网全链)两条路径,待用户选择,未擅自降级验收口径。

未同步更新 task.json 的 commit/notes 字段——origin/main 该字段已推进到
2026-09-12 财务本人报销 CEO 审批的更新内容,回填旧字段会造成状态倒退。

无产品代码改动、无账号/角色/生产写入。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 19:55:39 +08:00
wangsli和Claude Sonnet 5 c81ed9ca69 回填公网验收与恢复诊断中发现的测试规则 [08-23-isolated-backup-restore-drill]
从孤儿 worktree(20260909-invoice-first、20260910-reimbursement-payment-integration)
合并回填两条实测中发现、从未提交的通用测试规则:

- reimbursement-invoice-ocr.md:公网合成验收流程(provider 检查→锁定 SHA256→
  上传);Fastify 对无 body 的 DELETE 请求发送 application/json 会报
  FST_ERR_CTP_EMPTY_JSON_BODY 的坑;批量分类后编辑需等视图更新,
  getByLabel 对已有内容的嵌套 textarea 可能定位失配。
- deployment-trialrun.md:buildSha 公网字段固定截断为 12 位、探针不得按
  完整 40 位比较;readiness fixture 必须覆盖错误/过短/空/超长四种值并在
  目标主机做无权限探测;附件引用校验失败前必须先保留已完成的 DB/解包
  结果,不能让后续失败掩盖已核实的部分。

均为测试脚本经验教训,无产品代码改动。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 19:55:28 +08:00
wangsli和Claude Sonnet 5 dea0303485 回填10-05到期例外的73文件分流台账 [09-05-error-explainability-payment-readiness]
从孤儿 worktree(artifacts/isolated-worktrees/20260909-ops-preparation)合并
回填 2026-09-09 从未提交的到期豁免分流工作:

- 对 591 条错误原因码豁免基线(scripts/qa/error-reason-legacy-baseline.json,
  全部 2026-10-05 到期)做完整 AST inventory 核对:673 条基线、695 次调用、
  73 文件,逐条 observedCount 与基线一致、0 漂移。
- 73 文件按 A(16 文件/优先迁移)/B(25 文件/待确认业务影响)/C(32 文件/
  逐模块审查延期理由)三档分流,逐文件列出指纹与调用数,均未裁决。
- 首批 4 个具体调用已设计好迁移方案(AP 台账开关/查询校验、todo 开关、
  portal 开关的 reasonCode 与中文文案),尚未落码。
- 明确 09-11/09-18/09-25/09-30/10-02 的分阶段裁决节奏;10-05 00:00 UTC
  (北京时间 08:00)即为门禁到期时点。

无产品代码改动、无原因码源码/注册表变更;仅补齐分流台账文档,为处理
10-05 到期风险提供已有基础,避免从零重新盘点 73 个文件。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 19:49:07 +08:00
wangsli和Claude Sonnet 5 070ea085c0 回填付款交接待办验收环境现状盘点 [09-11-reimbursement-payment-handoffs]
从孤儿 worktree(artifacts/isolated-worktrees/20260910-reimbursement-payment-integration)
合并回填候选 5d8cdf12 实际部署验证结果,以及 2026-09-11 只读盘点发现:
财务 smoke 账号已归档、CEO smoke 凭据 0 条匹配、经理 smoke 需改密;更关键
的是角色任务/通知缺少测试隔离,付款复核当前事实投影会指向非 smoke 的真人
CEO。commit 字段同步更新为已实际部署的 5d8cdf12。

已在 notes 末尾注明:以上账号/角色现状是 2026-09-11 的只读盘点快照,回填
时(2026-09-25)未重新核验,使用前需重新只读确认。

无产品代码改动、无账号/角色/生产操作;仅补齐任务文档记录。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 19:45:30 +08:00
wangsli和Claude Sonnet 5 e57ed0533b 回填e5685f1公网合成验收审计记录 [08-29-reimbursement-expense-policy-invoice-guard]
从孤儿 worktree(artifacts/isolated-worktrees/20260909-invoice-first)合并
回填 2026-09-09 部署 e5685f1 后从未提交的公网验收记录:

- 部署执行计划与 deploy-existing.sh 中途 exit=255 异常的只读排查(构建/
  迁移/健康检查实际均已完成,255 原因未定位但不代表发布未发生)。
- 公网止于草稿的合成验收:真实腾讯 OCR 队列、选票、分类编辑、跨端持久化
  全链路通过;清理工具认证问题(缺 x-device-fingerprint)排查与修正。
- 2026-09-10 最终 PASS:SCOPED_CLEANUP_PASS,测试数据精确清理确认。

无产品代码改动、无生产操作;仅补齐审计记录,使任务文档反映已发生的部署
与验收历史。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 19:45:30 +08:00
wangsli和Claude Sonnet 5 5be9f44445 回填隔离备份恢复演练执行记录 [08-23-isolated-backup-restore-drill]
从孤儿 worktree(artifacts/isolated-worktrees/20260909-ops-preparation、
20260910-reimbursement-payment-integration)合并回填两轮从未提交的真实
执行记录:

- 2026-09-09 ARM 管理员会话完成首次隔离数据库恢复,回执 DB_RESTORE_PASS,
  66 项迁移精确匹配、12 类关键表可读。
- 2026-09-11 第二次配对恢复,AC1/AC3/AC6 勾选完成;对发票池一条历史缺失
  附件做 SHA-256 比对、来源元数据核对、生产/ARM 归档/周检查点全量搜索,
  均未命中,按用户决定非破坏性标记、暂不追查(AC4 仍未过)。

无产品代码改动,无生产/ARM 操作;仅补齐 Trellis 任务文档与既有证据记录,
使 in_progress 状态反映真实已发生的执行历史。

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-25 19:45:18 +08:00
wangsli eec26c7cfe 修复R101模拟接口隔离并接收定向验收(09-06-release-gate-integrity) 2026-09-19 19:52:17 +08:00
wangsli 0f9e704994 修复浏览器缓存内部链接复制并冻结门禁候选(09-06-release-gate-integrity) 2026-09-19 17:38:18 +08:00
wangsli 6e57d33715 保留原生浏览器探针失败阶段与清理证据(09-06-release-gate-integrity) 2026-09-19 15:43:44 +08:00
wangsli 16b9cad98c 接入发布候选回执强制校验(09-06-release-gate-integrity) 2026-09-19 14:25:33 +08:00
wangsli 1f8d5b658a 完善借款、编号、付款与预算并发及验收(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项公网义务仍开放。生产编号未启用、差旅仍冻结;不推送、不部署,不宣称发布资格。
2026-09-19 13:11:04 +08:00
wangsli 729d90576f 升级Trellis并精简项目知识(09-05-trellis-upgrade-rule-cleanup)
更新Trellis适配、任务归属与归档失败恢复,精简技能入口和知识读取规则。
保留权限、证据、事务及独立复核合同;纳入对应任务及已完成复核记录。
仅本地提交,不启用新平台适配,不推送或部署。
2026-09-19 13:10:06 +08:00
wangsli b1d25d3c99 fix: 加固日历日期与动态错误合同(09-05-error-explainability-payment-readiness,09-08-reimbursement-payment-closeout)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-16 20:20:11 +08:00
wangsli 842c61e696 docs: 核对业务交接与后续恢复计划(09-08-reimbursement-payment-closeout)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-16 12:56:27 +08:00
wangsli 3516d7ec04 fix: 完善动态错误指引与发票日期校验(09-05-error-explainability-payment-readiness) 2026-09-16 12:56:27 +08:00
wangsli b7d2285d8d fix: 完善回单失败引导及真实认证验证(09-08-reimbursement-payment-closeout)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-15 15:26:08 +08:00
wangsli 8d08d46d16 fix: 增加回单核对与付款登记门禁(09-08-reimbursement-payment-closeout)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-15 07:21:55 +08:00
wangsli 229867f5fd fix: 财务本人报销由总经理独立审批(09-04-reimbursement-state-gap-finance-view)
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
2026-09-12 20:03:29 +08:00