Skip to content

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

Closed as not planned

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

  1. LIghtJUNction commented on Sep 27, 2026

    @LIghtJUNction
    ContributorAuthor

    本轮已落地的维护性修复:

    另有两项已提交,不能提前算通过:

    这些切片没有改生产数据、权限或部署。HTTP 拆分、旧数据迁移、identity/journal、资金统一不变量及完整 Registry 单一来源清单仍未全部完成,保留原验收项,不关闭本 issue。

  2. LIghtJUNction commented on Sep 27, 2026

    @LIghtJUNction
    ContributorAuthor

    本轮最终验证更新:#110、#113 均已完成全部 CI 并合并。本轮进 main 的集成/修复 PR 为 #106、#108、#109、#110、#113;最终提交 4c46671,tree d36cab213c5a997a6b52fdcc78f92e860f9982e6 与最终通过测试的 head tree 完全一致。

    完整组合 CI 36353193024:四分片 265/289/300/255,共 1,109 个测试;另有 8 项 conformance;零失败、零错误、零跳过;wheel/sdist 构建成功,contracts gate 成功。四份产物已下载、与提供方 SHA-256 核对,并独立运行逐测试 ID 的完整且不重叠验证。#113 的全部 11 个新增用例在真实 PostgreSQL 环境通过,不再仅是本地适配器证据。与 #106 的 1,048 个用例相比,后续四个小 PR 新增了 61 个回归用例。

    合并后没有临时 materializer workflow、生产部署、数据迁移或授权扩张。原有 HTTP、旧快照迁移、identity/journal、资金不变量与完整 Registry 单一来源等未完成验收项仍保留,本 issue 不关闭。

  3. LIghtJUNction commented on Sep 28, 2026

    @LIghtJUNction
    ContributorAuthor

    Refs #85,仅A范围:#116c97a528 已提交独立恢复/Root/托管/只读preflight模块与tests/test_task_a_*,没有修改公共model/executor/application/Registry/短码/DDL/worker/现有CI。

    新检查点契约提供严格schema、明确entries=[]/sequence=0但缺独立pin仍deny、无私钥公开example和isolated-only selftest;缺目标/错主体/序号缺口/回退/错签名精确拒绝。PG真实终止backend/并发/retry、Root并发/文件拒绝、旧v1兼容有回归。保留#112外部quarantine,并独立验证恢复后的live/revoked授权源、原有字段裁剪输入/断言。没有skip/xfail/删断言/测试白名单/加超时。

    最终本地58passed;新head Recovery safety 36401032241的JUnit实际59passed/0failure/error/skipped(与本地组重叠不可相加)。完整core四分片push run36401027429及精确node-ID gate仍在核验,旧CI结果不代替。#69完整policy/promotion与真实现场材料仍blocked,未将这些部分登记为已完成。

  4. added 2 commits that reference this issue on Sep 28, 2026
  5. 20 remaining items

  6. LIghtJUNction commented on Sep 29, 2026

    @LIghtJUNction
    ContributorAuthor

    2026-09-30 下一阶段基线:#176 已按用户“先合并”指令合并到 main,merge commit 25cf518a64ca2b6af820367caa4f5bb46dbc2f02。#182/#183/#184 已进入该历史;当前仓库没有开放 PR。新工作分支:work/python315-quality-deploy-20260930,从该 main 精确创建。

    下一阶段只做合并后的质量/部署前收口,不重建已合入功能:固定 Python 3.15 目标、Ruff 0.16.9 的 py315 严格配置与零诊断/零 stderr/格式通过、uv/uv_build 0.12.20、warning-as-error;随后在同一最终 head 跑 8 分片实际 node-ID 完整互斥并集、conformance/实际 tokenizer、wheel/sdist/干净安装、Recovery/Client/Hosting/Tool 等专项。失败先补回归,不 skip/xfail/弱化断言。代码门禁通过后再进入 #84 的部署 preflight;生产现场证据仍独立,不因本次 merge 自动完成。

    #85 具体优先级:先把此前候选中已经人工处理但未复验的 136 项剩余诊断重新基于新 main 生成,按当前源码实际结果修;不要直接整包套用旧 519 文件格式化 patch。

  7. LIghtJUNction commented on Sep 29, 2026

    @LIghtJUNction
    ContributorAuthor

    2026-09-29 当前接续(#185 已合并)

    main 5cdaeba2b7b191a27684093cce7b5a153c99c88d / tree 3ad68f2012896310abfa9bcaf800c9ab05f6c886 已实际读回,等于最终PR通过的树。18个PR工作流全部success;8份ZIP摘要/JUnit node-ID独立核验 2531 core + 8 conformance,零失败/错误/跳过。精确来源和产物摘要见 #185证据,更新索引见#83。合并后main push是独立运行,正在核验,不预记成功。

    严格Ruff/格式/编译/warnings-as-error已通过;保留唯一market owner的明确兼容导出、receipt effect gate顺序和SQLite初始化/backup/fixture连接生命周期修复均有真实回归。当前源码文本测量:58840 Python行;identity.py3374、http_routes.py2536、discovery.py2201、content.py1696、communication.py1586、diagnostics.py1533、client.py1097、cli.py930。行数只是热点定位,不代表行为复杂度或完成百分比;既有架构/session/client边界全量通过,剩余去重复/有限契约债务继续开放,不以Ruff绿灯自动关闭。

    各条款源码入口与独立现场材料见 docs/RELEASE_ACCEPTANCE.md。本评论更新证据归属,不降低原验收范围或扩大现场权限。

  8. LIghtJUNction commented on Oct 3, 2026

    @LIghtJUNction
    ContributorAuthor

    关闭为not planned:停止把“全仓技术债全部清零”作为这项永久总目标,不宣称所有债务完成。原可辨认收敛已经落地:Listing/Order兼容与签署历史、LedgerAccount受保护记账、通知只读EffectJob事实、新默认显式验收和旧版本保持、executor/session/client单一归属都有针对性回归;main 105c2cf7 的CI已包含它们。

    仍适用的磁盘预算、Webhooks、工具资源限制和现场/恢复缺口继续各自tracking。后续重构从实际热点/重复路径出发,给出源码位置、行为不变量和测量,拆成能独立完成的issue,不再以行数或Ruff全绿推导整个仓库清债完成。

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