Commit Graph
8 Commits
Author SHA1 Message Date
Jayway Liu 9962573379 fix(workbook): F06 参数页改为只读快照,说明页补输入字典与维度对照
- “产品毛利率”参数行不再标记可编辑:说明页写明它是导出时的只读快照,
  各行毛利率已写入计算明细 MarginRate 列,调整需在计算明细页按行修改
- 参数页新增完整维度键-显示名对照行(此前说明页提到“本页分组维度”但无字典)
- 使用说明新增输入字典:Revenue/Cost/GrossInput/MarginRate/ListAmount 逐项列出
  单位、来源字段、修改位置与缺失含义;新增固定结构边界行(哪些列/页不可改、
  改结构需重新导出)
- 测试:参数页全部“否”、每个可修改输入出现在计算明细表头并被汇总公式引用、
  维度对照完整;LibreOffice 用例验证修改 MarginRate 后 lookup 毛利重算(本机跳过)
2026-09-26 01:39:57 +08:00
Jayway Liu 0aaa87e31a fix(definitions): F05 定义库保存原子化并引入 revision 冲突检测
- FormulaDefinition 增加 revision 字段(迁移 0005)
- 保存接口在单事务内锁定用户所属行序列化并发:配额(50/数据集)检查与写入原子化,
  不再可能产生第 51 条;唯一约束竞争返回 409
- 同名更新必须携带匹配的 revision,两个窗口不再相互静默覆盖;
  GET 列表返回当前 revision;保存增加 30/小时限流
- 审计与定义变更(保存/删除)同一事务提交,审计失败一并回滚
- 前端保存同名定义时携带已知 revision,并明示“同名覆盖”行为
- 测试:revision 边界(缺失/过期/正确/再次过期)、配额拒绝与释放、
  审计失败回滚;PostgreSQL 并发配额用例独立门禁(本机 SQLite 跳过)
2026-09-26 01:37:55 +08:00
Jayway Liu 9a5ab26014 fix(dialogs): F04 载入已保存定义后把原定义带入可见对话上下文
Verify / verify (push) Failing after 1s
Verify / verify (pull_request) Failing after 1s
- 载入定义时以“用户消息+助手确认”形式把名称、含义、范围、缺失处理和表达式
  写入对话,后续“把刚才公式改成乘以 100”等指代可关联到已载入定义;
  生成前仍需显式确认,不静默沿用旧定义
- 选择空选项时同步清理当前定义与上下文,选择状态与预览保持一致
- 服务端单条消息长度上限 1000→2000 以容纳完整定义上下文,超长仍拒绝
- E2E 覆盖:载入后请求包含原定义、修改后表达式为 (收入−成本)×100、
  空选项清理;单测覆盖 2000/2001 边界
2026-09-26 01:30:34 +08:00
Jayway Liu 6cf236a811 fix(dialogs): F03 证据弹窗同期间重复点击不再停留在加载中
- 第 0 页重复点击当前已选期间直接返回,不清空列表、不重复请求;
  第二页点击当前期间回到第一页并刷新
- 请求失败显示错误并提供“重试”按钮;空结果显示空态行而不是过期数据
- E2E 覆盖:重复点击、快速本期/基期切换、第二页切期间、失败重试、空列表
2026-09-26 01:30:05 +08:00
Jayway Liu 5ebe83afbb fix(worker): F08 执行/下载统一核验角色与账号状态,恢复卡死的 processing 任务
Verify / verify (pull_request) Failing after 25s
Verify / verify (push) Failing after 1s
- worker 执行前重新核验账号 is_active 与 admin/analyst 角色:撤权/停用后排队任务
  直接失败,不发布敏感工作簿
- formula-exports 状态与下载接口补齐与创建接口一致的角色白名单,被降为 viewer
  的账号不能再查询/下载旧导出
- import_worker 对超过 15 分钟仍处于 processing 的任务重新认领(PostgreSQL 依赖
  咨询锁立即恢复),崩溃重启不再无限停留 processing;新近 processing 不被抢占
- 测试:撤权/停用执行、viewer 下载与状态 403、半成品/缺文件下载 409/410、
  超时任务恢复且无重复临时文件、新近 processing 不被重复认领
2026-09-26 01:22:37 +08:00
Jayway Liu 54dc58d2a5 fix(cleanup): F02 清理失败记录含任务编号的告警,孤儿 xlsx 按保留期回收
- process_formula_export 失败清理受阻时记录不含敏感数据的 WARNING(任务编号+文件名),
  并保留 job.path 使残留文件仍可追踪,而不是清空后失联
- cleanup_formula_exports 新增孤儿 .xlsx 回收:超过 24h 保留期且不属于任何
  未过期成功任务的文件统一回收(覆盖失败任务残留、任务行被级联删除两种来源),
  不触碰仍处于活动任务的文件
- 测试:注入 unlink 权限错误→任务失败状态仍保存+告警可见;恢复权限后回收成功
  且其他任务文件不受影响;失败任务残留/任务行已删/未过期成功/近期文件/非 UUID 命名
2026-09-26 01:20:50 +08:00
Jayway Liu 36fd5f3461 fix(exporting): F01 路径完整验证前不登记清理目标,清理不跟随符号链接
- 根目录/用户目录/目标文件先通过 lstat 完整校验(拒绝符号链接与非目录),
  校验失败时不删除任何磁盘文件(此前父目录为链接时会沿链接 unlink 同名文件)
- 失败清理只处理本次登记的受控文件,并通过 O_NOFOLLOW 目录描述符删除;
  目录被换成符号链接时拒绝删除,保留任务编号与路径的对应关系
- 测试覆盖:用户目录链接、目标链接、运行中目录被换成链接(受保护文件字节不变)、
  失败后正常重试成功
2026-09-26 01:18:18 +08:00
Jayway Liu 0ac0c4eb56 chore: import existing codebase as baseline
Verify / verify (push) Failing after 1m20s
2026-09-26 01:12:10 +08:00