画图时发现的漂移与待裁决点
不是完整架构评审;只列画图过程中被证据直接顶出来的几条
观察画图时发现的漂移与待裁决点
不是完整架构评审;只列画图过程中被证据直接顶出来的几条。每条都标了依据,未复验的已注明。
以 DESIGN_PATTERNS §7.1(AGENTS.md 指定的 SSOT)为准,ARCHITECTURE_OVERVIEW.md v0.7 的 §2.0.2 / §2.0.3 已对齐:gl→L2,rbac / sysconfig→L1,新增 L0=pkg/*。技术架构 T3-3c 表里的「冲突」是订正前状态。新发现:按 SSOT 层定义,item(L1) → inventory(L2) 是一条上行 import(来自 ADR-0056 §4 的商品合并搬运库存行入口),已在两份文档里标为「待裁决」,未改代码。
OVERVIEW v0.7:R4、§2.2、§3.1、§3.4、§4 依赖图改为「inventory 是余额与台账唯一写入方」;DESIGN_PATTERNS 新增 §4.2 样板;MODULE_OWNERSHIP §3.5 与 CONTEXT.md 此前已更新。更正:示例函数 DeductStockTx 出现在 AGENTS.md 的架构范式第 3 条(不是 DESIGN_PATTERNS),已改为 ApplyMovement。仍未提交:movement.go 等 W1–W4 代码与这些文档改动都在工作区。
它们是正确的叶子,但 interface 宽窄会被 19–25 个调用方放大。本次未评估其 interface 是否过宽,只是指出这是修改杠杆 / 影响面最大的四个点。
- 写路径全在同一 tx:成本、成本回读、inventory.ApplyMovement、序列号消费、订单履行、价格历史、状态翻转、应收、自动核销、2323 均为显式 tx;approvalbook / billchain 经 ctx tx 复用同一事务。
- 守卫读仍走池(前序结论成立):会计期间 sysconfig/period.go:290、信用 order/credit_check.go:70、专款余额与范围、CreateReceivableTx 内部的 gl 期间读 gl/service.go:279。并发关账 / 超额使用在校验之后提交时,事务内没有二次校验。
- 序列号前置校验忽略了传入的 tx:serial/hook.go:71 形参是 _ pgx.Tx,内部用池;后续 ConsumeSerialsTx 靠 rows-affected 兜底。
- 「押金凭证在 commit 前另起事务」已不成立:外部事务路径只返回 AutoSettleTodo(payment/service.go:2462-2464),凭证在 commit 后由 FireDepositOffsetVouchers 生成(salesout/service.go:1632)。
- 潜在隐患(当前不可达):salesout/service.go:1652-1654 的 DeferAfterCommit 失败时直接执行 runPost。若 ctx 带外部 tx 却没装 AfterCommit 容器,凭证会在外部 tx commit 前读未提交数据。现有生产调用链都是 ownTx。
- 未核实:FireSettledHooks / approvedHooks 的注册实现、notifSvc.Publish 内部、gl 独立事务内部 SQL。
技术架构 T5 时序图已按 approve() 的真实顺序重画,守卫读标注为走池。
在其落地前,「终审链原子性」「FOR UPDATE」「租户绑定」没有常规可重复的真实 PG 证据;make sql-verify 只证明可 PREPARE。
- 流水层 Append-Only:以代码为准,已改文档。SSOT §2.2 / AGENTS.md 改为「历史事实层(inventory_ledger、gl_voucher_entries)只追加 / 派生与工作层(FIFO 层账、approval_records)可重建或可变」;签发历史「只要有记录就行」,不可变痕迹归 audit_logs。
- 直运 2222 成本不保证等于采购价(FIFO 租户还会建出单价 0 的入库层):改代码,issue #412。
- dashboard 缓存金额:改文档,已完成。纪律收敛为「业务决策路径禁读缓存;只读展示聚合允许短 TTL」,ADR-0038 补登 dashboard。
- 草稿乐观锁 version / 商城下单幂等键未落地:落地,issue #414(orders 试点后铺开)/ #415(先立新 ADR)。
- 旧系统规则:负毛利最底价守卫未实现 → issue #416(默认 off,待定);逾期天数锁单已实现(order/credit_check.go);FEFO 旧系统本无强制,「近效期优先推荐」未做,已并入 #416。
- 盘点 Confirm 非原子(重试会重复生成盈亏单):改代码为单事务,issue #413;stocktake PRD R4 对「对齐旧系统」的归因与事实相反,随该 issue 订正。
已订正:ARCHITECTURE_OVERVIEW.md v0.7、BUSINESS_DOMAIN_AND_BOUNDARIES.md §3,以及 inventory / warehouse / purchase / pricing / directvendor 的 PRD、ARCHITECTURE_DESIGN_PATTERNS.md(completeApproval 与 costing 真实签名)、ADR-0024(不再写死域数)、ADR-0057(costing 计数重算为 43 / 429)。
Append-Only 与缓存纪律已订正(SSOT、AGENTS.md、ADR-0038、approvalbook PRD,以及 tlk-code-review / change-guard / cross-module 三处 skill 的审查项);代码类偏离见第 6 条的 issue。
想深入哪一条?我可以按 grilling 走决策树,或先把 1、2 的文档漂移订正成清单。