持久化与工作簿:F05/F06/F07 定义库并发、说明页字典、对账容差 #3

Open
jianwel wants to merge 12 commits from fix/remaining-issues-2026-09-26 into fix/dialogs-f03-f04
Owner

堆叠于 #2(交互修复),对应问题清单 F05/F06/F07,含 ruff 格式统一与交付记录:

  • F05 迁移 0005 加 revision;单事务锁用户使 50 条配额原子化;同名更新 409 冲突检测;审计与变更同事务回滚;保存限流
  • F06 参数页改只读快照;补维度键-显示名对照、输入字典与固定结构边界
  • F07 对账分指标容差(人数 0 / 金额 0.01 / 比率 0.0001);自定义列用 Decimal 白名单解释器对账,替代需业务验收

测试:test_formula_definitions_concurrency.py、test_formula_workbook_docs.py、test_formula_reconcile_tolerances.py 新增;全量后端 87 passed、覆盖率 88.50%、迁移一致、ruff/tsc/build 全通过(详见 docs/fix-record-2026-09-26.md)

堆叠于 #2(交互修复),对应问题清单 F05/F06/F07,含 ruff 格式统一与交付记录: - **F05** 迁移 0005 加 revision;单事务锁用户使 50 条配额原子化;同名更新 409 冲突检测;审计与变更同事务回滚;保存限流 - **F06** 参数页改只读快照;补维度键-显示名对照、输入字典与固定结构边界 - **F07** 对账分指标容差(人数 0 / 金额 0.01 / 比率 0.0001);自定义列用 Decimal 白名单解释器对账,替代需业务验收 测试:test_formula_definitions_concurrency.py、test_formula_workbook_docs.py、test_formula_reconcile_tolerances.py 新增;全量后端 87 passed、覆盖率 88.50%、迁移一致、ruff/tsc/build 全通过(详见 docs/fix-record-2026-09-26.md)
jianwel added 5 commits 2026-09-25 23:26:09 +00:00
- FormulaDefinition 增加 revision 字段(迁移 0005)
- 保存接口在单事务内锁定用户所属行序列化并发:配额(50/数据集)检查与写入原子化,
  不再可能产生第 51 条;唯一约束竞争返回 409
- 同名更新必须携带匹配的 revision,两个窗口不再相互静默覆盖;
  GET 列表返回当前 revision;保存增加 30/小时限流
- 审计与定义变更(保存/删除)同一事务提交,审计失败一并回滚
- 前端保存同名定义时携带已知 revision,并明示“同名覆盖”行为
- 测试:revision 边界(缺失/过期/正确/再次过期)、配额拒绝与释放、
  审计失败回滚;PostgreSQL 并发配额用例独立门禁(本机 SQLite 跳过)
- “产品毛利率”参数行不再标记可编辑:说明页写明它是导出时的只读快照,
  各行毛利率已写入计算明细 MarginRate 列,调整需在计算明细页按行修改
- 参数页新增完整维度键-显示名对照行(此前说明页提到“本页分组维度”但无字典)
- 使用说明新增输入字典:Revenue/Cost/GrossInput/MarginRate/ListAmount 逐项列出
  单位、来源字段、修改位置与缺失含义;新增固定结构边界行(哪些列/页不可改、
  改结构需重新导出)
- 测试:参数页全部“否”、每个可修改输入出现在计算明细表头并被汇总公式引用、
  维度对照完整;LibreOffice 用例验证修改 MarginRate 后 lookup 毛利重算(本机跳过)
- 对账检查页新增容差列:人数严格相等(容差 0)、金额 0.01、比率 0.0001,
  状态公式改为 ABS(差异)<=容差,不再统一使用 0.01
- 自定义列不再标注“需业务验收/无服务器参考”:新增 to_decimal 白名单表达式
  解释器(仅遍历 metric/number/四则节点,不执行代码)在服务器端用 Decimal
  计算参考值,缺失指标或除零返回 None(对应 #N/A → 无参考)
- 参数页写明对账规则与“容差调整需财务负责人批准”
- 测试:求值器黄金样例(大数/抵消/极小值/除零/缺失/多层表达式)、
  分指标容差列、自定义列 Decimal 参考与缺失场景、全指标覆盖检查;
  LibreOffice 用例验证全部对账行重算后为“通过/无参考”(本机跳过)
docs: F01-F08 修复记录与本轮完整测试证据
Verify / verify (push) Failing after 1s
Verify / verify (pull_request) Failing after 1s
79d74ef5e5
- 逐项记录修复内容、提交号与对应验收测试
- 记录全量测试结果(后端 87 passed/覆盖率 88.50%、E2E 3 passed、
  lint/构建/迁移一致性/pip-audit 通过)与环境限制项(LibreOffice、
  npm audit 网络、PostgreSQL 并发门禁)
- 明确仍开放的功能缺口与外部门禁不变
jianwel added 1 commit 2026-09-26 08:20:37 +00:00
test(worker): 适配 PostgreSQL 咨询锁下的立即重认领语义
Verify / verify (push) Failing after 1s
Verify / verify (pull_request) Failing after 1s
0218733cee
PG 上 worker 持咨询锁会立即重认领 processing 任务,第二次 --once 被导入任务
抢占导致导出断言失败(该测试此前从未在 PG 上真正运行过)。第一次调用后把导入
任务置为 ready 模拟完成,两种后端行为一致
jianwel added 1 commit 2026-09-26 09:02:06 +00:00
merge: 同步 main 的 CI 基建(.gitea/workflows 迁移、PG 咨询锁测试适配、artifact 容忍、audit 重试)
Verify / verify (push) Failing after 1s
Verify / verify (pull_request) Failing after 0s
AI Review / review (pull_request) Successful in 12s
dd04814e86
Some required checks failed
Verify / verify (push) Failing after 1s
Verify / verify (pull_request) Failing after 0s
AI Review / review (pull_request) Successful in 12s
This pull request has changes conflicting with the target branch.
  • finance/exporting.py
  • finance/management/commands/cleanup_formula_exports.py
  • tests/test_worker_paths.py
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/remaining-issues-2026-09-26:fix/remaining-issues-2026-09-26
git checkout fix/remaining-issues-2026-09-26
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jianwel/fa-agent#3