Skip to content

check:liveness 的 stale-evidence 检测只 ⚠ 不判红 —— ADR-0087 证据路径可以静默腐烂,且摘要行的 “N resolved” 数的是路径总数不是解析成功数 #5623

Description

@os-zhuang

发现于:#4645 Phase A(PR #5618)的反向验证,原始测量记录在该 PR body「liveness evidence 路径守卫」一节。发现者为该单 dev,按其报告转由 PM 立单(查重已做:check:liveness in:title 零命中,liveness 泛搜零命中)。

实测(objectstack,#4645 Phase A 分支)

packages/spec/liveness/query.json 的 5 条 evidence 路径故意改坏(指回迁移后已不存在的 packages/plugins/driver-sql/...),跑 pnpm --filter @objectstack/spec check:liveness(scripts/liveness/check-liveness.mtscheckEvidence):

⚠ 5 'live' entr(ies) cite a missing file:
    query/fields → packages/plugins/driver-sql/src/sql-driver.ts
    query/where → packages/plugins/driver-sql/src/sql-driver.ts
    query/orderBy → packages/plugins/driver-sql/src/sql-driver.ts
    query/limit → packages/plugins/driver-sql/src/sql-driver.ts
    query/offset → packages/plugins/driver-sql/src/sql-driver.ts
  • 逐条点名 ✅ —— 但这是 警告,不是 ,退出码两种状态下都是 0
  • 摘要行 evidence paths: 330 resolved against this checkout 里的 330 是 local 路径总数,不是解析成功数 —— 改坏 5 条之后它仍然显示 330,"resolved" 一词失真。

影响

ADR-0087 的证据链断裂不挡任何 CI:目录重组、文件更名这类常规动作可以让 live 判定引用一个不存在的文件而无人发现 —— declared(「证据在此」)≠ enforced(无 gate 兜底)。#4645 这次是 dev 主动做反向验证才发现;下一次大概率是静默腐烂。

注意的反面(先回答再动手)

同一 reporter 里 ⚠ 与 ✗ 的分级在别处是刻意设计(发现 dev 的观察)。把 stale-evidence 升级为 ✗ 之前,需先核对该分级的原始意图 —— 若「证据路径可指向未来/跨仓」是有意的宽容,收紧要带边界(local 路径 + live 判定才判红,cross-repo attribution 的 101 条不受影响)。

处置建议

  1. live 条目引用本仓缺失文件 判红(cross-repo attribution 维持现状);
  2. 摘要行改为真实解析计数,或把 "resolved" 改成 "declared"。

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions