Skip to content

[finding] The record.* (object-bound form) predicate layer has no path-resolution gate — and cannot soundly get an error-level one until the traversable path set is a closed oracle #7219

Description

@os-project-manager

Restart-when: #4001 strictness cadence reaches the record.* predicate layer, or the ObjectQL traversable path set becomes enumerable (a closed oracle), or a measured record. fail-open incident

Recorded from #7010 / PR #7214's implementation report (devx PM seat filing; unassigned, ungraded — grading is triage's call). That PR gates the data.* (metadata-form) predicate layer at error; this card records why the record.* layer was deliberately left out, and what the sound follow-up looks like.

The gap

A record.<typo> in a view form's predicate fails open at runtime exactly like the data. case #7010 closed — silently, the #5149 family's shape. Nothing gates it at authoring time.

Why #7214 did not gate it (measured reasoning, not omission)

getMetadataTypeSchema is a closed oracle: the key set is enumerable, so "this path does not resolve" is a fact. An ObjectQL object's addressable path set is open: lookup traversal (record.account.name), system columns the authored fields map never lists, formula/rollup outputs. An error-level gate over an open set manufactures false build errors; a warning-level one produces noise authors learn to ignore — which is silence with extra steps.

The three dispositions (from the report, recommendation A-then-C)

  • A — leave ungated (the shipped state after feat(lint): publish-time resolution of metadata-form predicate paths (#7010) #7214).
  • B — gate at warning, accepting noise on legitimate traversal.
  • C — close the oracle first (declare the traversable path set as a contract), then gate at error. The report's argument: a closed, enumerable path set is also what makes AI-generated metadata refusable at authoring time — C structurally prevents the mistake while B only reports it.

C is a contract decision, not an implementation detail — which is why it is a card and not a rider on #7214.

Refs: #7010, PR #7214, #5149 (fail-open family), #6254 (the data. precedent), #6936.


Generated by Claude Code

Activity

  1. os-zhuang commented on Aug 10, 2026

    @os-zhuang
    Contributor

    Findings disposition — held; deliberately left unrouted. No ownership taken.

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


    Generated by Claude Code

  2. claude commented on Aug 10, 2026

    @claude
    Contributor

    Findings triage — route repair only: domain:spec appended. The finding grade is unchanged and no ownership is taken.

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


    Generated by Claude Code

  3. claude commented on Aug 10, 2026

    @claude
    Contributor

    Findings triage (re-verify @ origin/main c6a4eeb): HOLD — validate-predicate-path-refs.ts still deliberately excludes the record.* layer (module note :59, :567), so the recorded gap and the A-then-C recommendation stand unchanged. Exit for disposition C is a contract ruling (close the traversable-path oracle) — decision box when taken up, not dispatchable as-is. finding stands.

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


    Generated by Claude Code

  4. claude commented on Aug 11, 2026

    @claude
    Contributor

    Findings triage (re-verify @ origin/main afdc6ea): HOLD — validate-predicate-path-refs.ts still excludes the record.* layer by design: the module note at :59 ("Not closed today, and not closable by this rule") and the skip rationale at :567 ("see the module note for why the record.* layer is out") are both verbatim. The recorded gap and the A-then-C recommendation are unchanged, and disposition C still exits through a contract ruling (closing the traversable-path oracle), not through dispatch. finding stands.

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


    Generated by Claude Code

  5. claude commented on Aug 11, 2026

    @claude
    Contributor

    Maintainer ruling — 2026-08-11. From the four-lens decision review (platform long-term coherence / measured business pull / AI-agent error-resistance / startup scope discipline); the maintainer accepted the recommendation set in full.

    Ruling: deliberate defer — this enters the spec seat's strictness-ledger cadence rather than being ruled ad hoc. The ungated record.* root is intentional and loudly annotated; nothing burns today. finding stays; the strictness cadence is the exit.

    Recorded by the triage seat Routine (#5474 pilot) on the maintainer's direct instruction — ruling record, not a claim.


    Generated by Claude Code

  6. os-zhuang commented on Aug 11, 2026

    @os-zhuang
    Contributor

    Findings triage round, 2026-08-11 (maintainer-directed). Graded: hold — the card itself proves a sound error-level gate needs a closed path oracle the record.* layer does not have; gating on an open set would refuse legitimate paths. Restart: when the addressable path set becomes enumerable (lookup traversal + system columns + formula outputs), or a measured author incident on this layer.


    Generated by Claude Code

  7. hotlong commented on Aug 12, 2026

    @hotlong
    Contributor

    Finding-grading round: hold stands (maintainer ruled 2026-08-11, comment 5248480685: deliberate defer into the spec seat's strictness-ledger cadence — the cadence is the exit). Recording a round-efficiency note: this card is exempt from per-round re-verification — the last four passes returned identical results against an unchanged file. Re-open triggers only: #4001's strictness cadence reaching this layer, the ObjectQL traversable path set becoming enumerable, or a measured record.<typo> fail-open incident.


    Generated by Claude Code

  8. hotlong commented on Aug 13, 2026

    @hotlong
    Contributor

    State-machine migration, maintainer-authorized (2026-08-13, live triage session: 「我授权你先迁标签」; semantics on #8449): graded hold under the 2026-08-11 maintainer ruling (deliberate defer, strictness-cadence exit) — finding → pm:on-hold. The re-verification exemption and re-open triggers recorded 08-12 stand unchanged.


    Generated by Claude Code

  9. added a commit that references this issue on Aug 17, 2026
  10. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    Contributor

    关 not_planned —— 维护者逐张复核 on-hold 卡时同意关闭;原定的出口已经不存在

    分诊席(session_01Tw7jnJinGHvoGSi8aFkhPJ),2026-09-23T08:00Z。维护者 2026-09-23 在分诊会话里逐张复核 pm:on-hold 卡,对第二组的回复原文:「8006 保留,其他同意」。本卡在那一组里的建议是关闭,维护者同意了。

    呈给维护者的事实

    重开条件

    有人实测到一起真实的 record.<拼写错误> 事故(作者写错了字段,线上表单因此显示或隐藏错了);或者可遍历路径集合变成了可枚举的封闭集合。满足任一条即可重开,按正文里的 A-then-C 推荐继续。

    关闭理由:not_planned,同时摘掉 pm:on-hold。


    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

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions