Skip to content

[P2] 跨模块代码质量与测试债:拆分长路径、统一不变量 #85

Description

@LIghtJUNction

已批准的架构收敛:复用机制,不压平安全边界

用户已要求更新设计、issue 并实际改进代码。权威设计已原地更新:
https://docs.google.com/document/d/1EM5Qr5qdg6tAFi2wvY0EBm6zxMj6DTBMc_dybU5qkz0/edit

本轮源码基线 acc542ab7cbb6983c1e44d294e116d2b0eb6ed68,tree 24010db7aecdf85b1303a029e431fc456121a985;主线 push CI 36388965574 已实际读取为 success。已下载该运行源码产物并核对 SHA-256;不把旧测试计数当作本轮新增测试或生产验收。

收敛目标(尚未全部实现)

  • ServerOffer→Listing 兼容投影、Purchase→Order,/_money/offers/money.redeem 保留入口与原签署版本;服务器权益的发行方/Registry 限制不放宽。
  • 订单/悬赏/主体资金共用 LedgerAccount 和一个受保护记账入口、固定锁顺序;系统账户不是主体。旧表/签署账项/receipt/ID 不静默重写。
  • 商品包只描述内容,Delivery 只记录向买家交付;SMTP/重试状态由 EffectJob 提供,不再形成第二套交付状态机。claimed/accepted/settled 各自有明确事实。
  • OperationSpec 拥有 schema/effect/入口限制,路由与帮助派生;内容复用 Resource/Revision,视图复用 ReadQuery/LinkSet,游标只共用编码不互换语义。
  • Engine 优先具体业务函数,沿用单一事务/worker;不为名词新增 Manager/Factory/Repository,不强制全仓搬目录或把成员、授权、密钥、账本压成万能 JSON。
  • 新默认签名验收契约通过新版本/policy 发布;现有 orders.buy@1/@2/@3 和明确自动结算政策保持原义并保留回归。root 已收款的退款仍需本机;同请求重试返回原结果不重复发奖。

本轮首个代码切片

先处理可独立验证的市场邮件共用边界:market/delivery_targets.py、market/delivery_notifications.py、market/targets.py 中重复的地址/endpoint 归属、提货链接与通知投影辅助逻辑。保持 v2/v3 接口、endpoint 世代、历史消息格式、当前授权和 worker attempt/state/deadline 栅栏。先写回归再改代码;不直接覆写 #103/#112 分支,涉及同文件的窄补丁在 PR 中列出。代码/测试/PR 结果在后续评论补齐,不提前勾完成。

既有核验与已完成切片

此前基线 13c562ea05d273e618b1ea06b9e452da79d4439f、CI 36384948145 的 1,244 core/8 conformance 逐测试证据见 #83;归属原提交,不代表所有代码质量项关闭。

保留的剩余验收

  • 先测量当前热点/重复路径、类型与约束边界,给出源码位置和行为不变量;清除实际死代码和重复实现,不为减行数降低可读性或覆盖,旧兼容仅在满足迁移契约时移除。
  • HTTP/GraphQL/MCP/PathGET/SSH 薄适配器共用解析/执行/当前授权,避免 URL秘密、私有读取、错误裁剪的平行策略。
  • token/client journal、Root/托管生命周期及备份恢复不回退 FIFO/FD/并发锁/一次释放修复。
  • Complete deterministic clearing, bounty and order contracts (#71–#73) #103 先整合 fix(market): close escrow, private delivery and arbitration lifecycle gaps (#73–75) #102,禁止新旧市场模块各自放款;新统一模型须有迁移/回滚/历史签署字节不变证据。
  • Registry/schema/shortcode/config/default/doctor/selftest 重复定义逐项消除;纯函数、类型和有限契约优先,不硬编码特定用户/测试用例。
  • 行为保持型重构先加 characterization,缺陷先失败回归后最小修复;真实 PG/适配器、完整 node-ID gate/构建不被 SQLite-only、skip/xfail、删断言或延长超时代替。

并行归属与交付边界

A 处理身份/Root/迁移/恢复;B 处理市场/Transfer/Git/worker/协作;C 处理授权/读写适配器/内容/CLI/TUI/Registry并汇总。#85不是第四路全仓重构。C串行维护共享胶水、CI/scripts、总状态文档与最终合并;A/B提供最小接口补丁。每次发布附 source SHA、测试环境/命令、失败→通过证据、diff/CI与未完成边界;主线推进后重验最终head,不force-push他人分支,详见#83。

不扩大权限、不修改已发表schema/短码或历史签名语义,无生产部署、Root/资金/真实外发操作。部分PR使用Refs,未满足全部验收继续open。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions