Repository navigation
[P2] 跨模块代码质量与测试债:拆分长路径、统一不变量 #85
Description
已批准的架构收敛:复用机制,不压平安全边界
用户已要求更新设计、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;归属原提交,不代表所有代码质量项关闭。
- fix(webhook): authenticate replay ledger IDs before deduplication #93 Webhook 去重前认证 delivery/event/timestamp;refactor(effects): share retry transitions without weakening lease fencing #98/fix(effects): fence expired notification retries without a lease sweep (#81, #85) #109 统一通知重试并校验到期租约,fix(effects): fence tool, Git and maintenance completions (#82, #84, #85) #113 将工具/Git/维护完成纳入同一 attempt/state/deadline 栅栏。
- fix(registry): prevent schema aliases from changing frozen contracts #95 Registry schema 深拷贝所有权,fix(registry): enforce offline structural schema references (#83, #85) #108 按实际 schema 节点限制离线引用、禁止隐式网络/文件加载,明确稳定拒绝错误。
- ci: fix nested fixture collection and require complete sharded evidence #104 完整四分片与 fixture 导入修复,ci: require exact test identities in shard evidence (#83, #85) #110 精确 JUnit node ID 对照,避免只有数量相同却重复/遗漏实际测试。
- 主线已有 http/http_routes、ledger_migration、custodial_lifecycle、market 等拆分;不要把旧文件行数/旧结构当当前诊断。
保留的剩余验收
- 先测量当前热点/重复路径、类型与约束边界,给出源码位置和行为不变量;清除实际死代码和重复实现,不为减行数降低可读性或覆盖,旧兼容仅在满足迁移契约时移除。
- 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
fix(webhook): bind receiver replay identity to the authenticated enve…
fix(ssh): reject unprivileged process-name impersonation (#94)
Merge reviewed and verified #81–85 partial fixes (#106)
fix(registry): enforce offline structural schema references (#108)
fix(effects): fence expired notification retries and completions (#109)
LIghtJUNction commentedon Sep 27, 2026
本轮已落地的维护性修复:
另有两项已提交,不能提前算通过:
这些切片没有改生产数据、权限或部署。HTTP 拆分、旧数据迁移、identity/journal、资金统一不变量及完整 Registry 单一来源清单仍未全部完成,保留原验收项,不关闭本 issue。
ci: require exact executed test identities in shard evidence (#110)
fix(effects): unify fenced tool, Git and maintenance completions (#113)
LIghtJUNction commentedon Sep 27, 2026
本轮最终验证更新:#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 不关闭。
refactor(market): derive mail status from effect jobs and reuse deliv…
refactor: reuse delivery guards and project mail status from EffectJob (
fix: bind delivery SMTP to one exact mailbox
LIghtJUNction commentedon Sep 28, 2026
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,未将这些部分登记为已完成。
docs: keep mailbox security guidance within the existing rule budget
Merge #117: prevent SMTP recipient expansion
20 remaining items
refactor(identity): give one-time credential delivery a single domain…
merge: retain the latest supplemental database regression gate
fix: validate transfer status cursors after current authorization
fix: reject invalid client chunk sizes before resumable I/O
fix(collaboration): bound legacy lease scans and retain read paginati…
fix(collaboration): bound Resource work-list scans and preserve the l…
LIghtJUNction commentedon Sep 29, 2026
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。
Quality gates for Python 3.15 and exact release artifacts
Restore market compatibility exports and rehearse installed deployment
Merge PR #185: Python 3.15 quality and verified deployment artifacts
LIghtJUNction commentedon Sep 29, 2026
2026-09-29 当前接续(#185 已合并)
main
5cdaeba2b7b191a27684093cce7b5a153c99c88d/ tree3ad68f2012896310abfa9bcaf800c9ab05f6c886已实际读回,等于最终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。本评论更新证据归属,不降低原验收范围或扩大现场权限。Verify installed-package concurrency, crash recovery and full restore…
fix: require explicit account selection after incomplete recovery (#232)
LIghtJUNction commentedon Oct 3, 2026
关闭为not planned:停止把“全仓技术债全部清零”作为这项永久总目标,不宣称所有债务完成。原可辨认收敛已经落地:Listing/Order兼容与签署历史、LedgerAccount受保护记账、通知只读EffectJob事实、新默认显式验收和旧版本保持、executor/session/client单一归属都有针对性回归;main
105c2cf7的CI已包含它们。仍适用的磁盘预算、Webhooks、工具资源限制和现场/恢复缺口继续各自tracking。后续重构从实际热点/重复路径出发,给出源码位置、行为不变量和测量,拆成能独立完成的issue,不再以行数或Ruff全绿推导整个仓库清债完成。