You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Publish-time validation of predicate path references — a spec-delivered predicate naming a nonexistent path should fail at authoring, not evaluate to a guess at render (#6936 companion) #7010
Spun out of #6936's ruling (maintainer 2026-08-09, Option C: the objectui evaluator goes fail-open-with-warning). That ruling fixes the renderer's posture; this card is the producer-side fix the #6936 filing itself identified as the long-term answer: 「谓词表达式应在发布期被校验(引用的路径必须存在于对应 schema),而不是让渲染器在运行期猜」.
Deliverable
An authoring-time check (landing point to be established by the implementing dev — the AUTHORING_RULES family in metadata-protocol, or packages/lint, following where the existing predicate-shape validations live): a metadata-delivered predicate (visibleWhen / requiredWhen / metadata-admin conditional fields — enumerate the actual carriers as step 1) whose identifier paths do not resolve against the target schema's scope (data.* after objectstack#6254's spelling correction) is refused or warned at publish/validate time, naming the unresolvable path.
Sequencing / evidence base
objectstack#6254 fixed 16 bare-spelling predicates in object.form.ts — the corpus that would have been caught by this check; use it as the fixture base.
objectstack#6331 made metadata-admin actually read spec-delivered predicates, which is what made the evaluation semantics observable at all.
The check must corpus-count before enforcing (standard widening discipline): run over the shipped spec metadata first, report the would-be-refused count in the PR body; a non-trivial hit count is a STOP.
Not in scope
The objectui evaluator change (#6936, ruled C) — independent, already queued in its own card.
No domain:* label applied — routing is the triage seat's.
Dispatching to an os-dev agent (opus — the landing point is deliberately left to the implementer and the corpus-count-before-enforce discipline carries a STOP condition, so this is judgment work, not transcription).
Comment tail read before claiming: empty — no competing claim.
If an earlier claim comment with a different session ID exists above this one, that claim wins and this one should be treated as withdrawn.
Landed on main as 424c51051 via PR #7214. Card auto-closed on the Fixes line; clearing the stale pm:dispatched.
Verified in origin/main: validate-predicate-path-refs.ts ships with the shared collectionEntries import (the pre-#7186 local duplicate folded before merge — zero local definitions remain).
The full acceptance record is on the PR (comment 5235568500); the short version of why this card closed well: the carriers were enumerated off the Zod schemas and the enumeration corrected this card (the form surface carries only visibleWhen — requiredWhen/readonlyWhen are record-layer keys); the landing point was forced by constraints rather than chosen by taste (#4812's canonical CEL front end + packages/spec's zod-only dependency rule); the corpus-count STOP was respected and came back 0 over all 46 shipped predicates, with a reach guard proving the walker actually visits all 46 and a reverse verification recovering exactly the 16 historical #6254 findings; and one false-green (lazySchema proxy read as not-a-schema, everything vacuously clean) was caught by that guard before shipping — the exact failure mode this discipline exists for.
Both boundary questions the card left open are now their own tracked cards rather than footnotes: #7219 (the record.* layer — close the oracle before gating an open set) and #7220 (the four-rule visibility family moves to runtime-publish together or not at all).
Activity
os-project-manager commentedon Aug 10, 2026
Claim — devx PM seat, session
session_01F8q5J1MQyocgtNspb15fSn, branchclaude/issue-7010-predicate-path-publish-check.Dispatching to an
os-devagent (opus— the landing point is deliberately left to the implementer and the corpus-count-before-enforce discipline carries a STOP condition, so this is judgment work, not transcription).Comment tail read before claiming: empty — no competing claim.
If an earlier claim comment with a different session ID exists above this one, that claim wins and this one should be treated as withdrawn.
Generated by Claude Code
os-project-manager commentedon Aug 10, 2026
Landed on
mainas424c51051via PR #7214. Card auto-closed on theFixesline; clearing the stalepm:dispatched.Verified in
origin/main:validate-predicate-path-refs.tsships with the sharedcollectionEntriesimport (the pre-#7186 local duplicate folded before merge — zero local definitions remain).The full acceptance record is on the PR (comment 5235568500); the short version of why this card closed well: the carriers were enumerated off the Zod schemas and the enumeration corrected this card (the form surface carries only
visibleWhen—requiredWhen/readonlyWhenare record-layer keys); the landing point was forced by constraints rather than chosen by taste (#4812's canonical CEL front end +packages/spec's zod-only dependency rule); the corpus-count STOP was respected and came back 0 over all 46 shipped predicates, with a reach guard proving the walker actually visits all 46 and a reverse verification recovering exactly the 16 historical #6254 findings; and one false-green (lazySchemaproxy read as not-a-schema, everything vacuously clean) was caught by that guard before shipping — the exact failure mode this discipline exists for.Both boundary questions the card left open are now their own tracked cards rather than footnotes: #7219 (the
record.*layer — close the oracle before gating an open set) and #7220 (the four-rule visibility family moves to runtime-publish together or not at all).Generated by Claude Code
feat(lint): publish-time resolution of metadata-form predicate paths (o…
feat(lint): refuse a path-shaped `==`/`!=` right-hand side at publish…
test(lint): move the shipped-form predicate census for the deleteBeha…
fix(spec): stop offering a master_detail the deleteBehavior its schem…
fix(lint): move the shipped-predicate corpus pin 52 -> 53 for the new…