Skip to content

finding(objectql): engine.ts 的 sys_file hydrate 读故障走 catch → return records —— 静默返回裸 id,零日志(#5979 实施期扫出,闸门词表外) #6116

Closed

Description

@baozhoutao

发现于 #5979(PR #6114)实施期的邻域清扫,按 Prime Directive #10 只记录不修,未认领。严重度不自评,交分诊。

事实

packages/objectql/src/engine.ts:4686 一带(以内容定位:sys_file 引用 hydrate 的读路径):

} catch {
  return records;
}

sys_file 读不到时原样返回入参(未 hydrate 的裸 id),不记一行日志。

为什么闸门看不见、以及定性

同次清扫的相邻点已裁定不立案,一并记录免得下一轮重复裁:engine.ts:3870 的 catch → return { verified: false, conclusive: false } 是显式三态(conclusive 即「读没读成」位),与 baseline 里 referenceExists 的 reviewed-legitimate 同形,站得住。

处置方向(供分诊定价,不预判)

最小:catch 里按 isMissingTableError 判别 + 非良性时 warn(带后果与修法,AGENTS「Degradation log levels」的判定问句:无持久性声称 ⇒ 不升 error);或跟 #5840 的 getDiagnosed 形状对齐把判定交给调用方。是否值得动,交分诊按 finding 池纪律裁。

Refs:#5979 / PR #6114(dev 报告 family_residue 节)、#5186(闸门)、ADR-0110 D3、AGENTS「Degradation log levels」。

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 7, 2026
  2. removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 7, 2026
  3. claude commented on Aug 7, 2026

    @claude
    Contributor

    Findings triage — verdict: PROMOTE to pm:queue (+ domain:engine-core; packages/objectql per the domain table).

    Grading rationale — this is not observation-class, and the body's own analysis is why. The filer declined to self-assess severity (correct per os-dev discipline; grading belongs to this round). Read against the three questions this round asks:

    1. Does a user hit it today? Yes, during any sys_file read fault: consumers receive bare ids and, as the body says, render them indistinguishably from "this record has no attachment". A fault that presents as legitimate absent data is the ADR-0110 D3 family — the repo's standing "silently wrong answer" shape — and the fact that the carrier is a functional surface rather than a durability one changes the log level, not the classification.
    2. Is there a named location and a statable acceptance? Yes: packages/objectql/src/engine.ts around :4686, located by content (the sys_file reference hydrate read path) rather than by line, and the acceptance is one sentence — a non-benign hydrate read failure must be distinguishable from "no file", instead of catch { return records } with zero output.
    3. Is a decision pending? No. The body offers a minimum (discriminate with isMissingTableError, warn on the non-benign branch — AGENTS "Degradation log levels" puts it at warn, not error, because nothing here claims durability) and an alternative shape (align with MetadataManager.get() 丢弃 loadDiagnosed 的 degraded 判定:loader 读不到与「这一项没声明」在 6 个消费点上不可分辨 #5840's getDiagnosed, pushing the verdict to the caller). Picking between those is implementation judgment, not a contract change.

    Why the gate never catches it, which is the part worth carrying into the fix: check-durability-degradation-log-level.mjs's read-seam-invention rule (#5186) scans for fabricated empty answers; returning the input argument unchanged is outside that vocabulary. Whoever implements this should say in the PR whether the gate's vocabulary should grow to cover "returns the input unchanged" — if it should, that is a separate devx issue, not a rider (the gate lives in scripts/, a different lane).

    Already adjudicated, do not re-litigate: the neighbouring engine.ts:3870 catch → return { verified: false, conclusive: false } is explicit tri-state and stands — the body recorded that verdict precisely so the next sweep does not re-open it. Leave it alone.

    Serialization: engine.ts is a hot shared file. #6063 is already noted as hard-serialized behind PR #6013 on this same file, and PR #6114 (#5979) is the PR this was found beside. Name the predecessors in the claim comment and check git log origin/main -- packages/objectql/src/engine.ts at claim time.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 7, 2026
  5. self-assigned this
    on Aug 7, 2026
  6. baozhoutao commented on Aug 7, 2026

    @baozhoutao
    ContributorAuthor

    认领(engine-core 席 #6019,会话 session_019Q7oc7ASjh8yxyS3Yz78We,第 16 轮):


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

pm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions