Repository navigation
Description
domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u
Filing gate: ① residue found in contract review of PR #30875 (card #30857, record 6680689068) on a shipped surface (skills/**). ⛔ Not a claim. Suggested grade: p3.
Dedupe: issue search "bare predicate", "evaluates to null", skills predicate null hides (open and closed): #27587 (closed) is about JavaScript-syntax predicates, not this symptom. New.
Reader: domain:skills. Tier H (skills/**).
Business test
An agent that hits a broken predicate on a live stack is told by the skill to expect silence: "the button never shows" or "the validation never fires". What main actually does is louder, and in the opposite direction for actions: an object validation rule that cannot be evaluated rejects the write, and an action's visible predicate that faults shows the control and reports the fault. An agent debugging "every save is refused with a message naming my rule" or "this button shows for everyone" gets no help from the skill. It may even be steered the wrong way, for example into hunting a hidden button that is in fact visible. The fix still recommends the same prevention (os validate, record.<field>); only the symptom description changes.
What is wrong
Three passages describe the pre-#4649 / pre-objectui#6443 behaviour:
skills/objectstack-platform/references/operations.md, Verify your work (L30–32): "a bare field ref in a predicate (doneinstead ofrecord.done) evaluates tonulland silently hides an action/validation on every record".skills/objectstack-data/SKILL.md(≈L450–453): a bare field ref inrequiredWhen/readonlyWhen/visibleWhen, a validation rule, a formula, or an RLS/sharing predicate "evaluates tonulland never fires".skills/objectstack-ui/SKILL.md(≈L269–271): a bare field ref in an actionvisible/disabledor a fieldvisibleWhen"evaluates tonulland hides the control on every record (the "button never shows" trap)".
What main does (to be re-read per site by the dev):
- Object validation predicates:
ruleScopebinds onlyrecord/previous, so a baredonefaults (Unknown variable). Since Script validation rules are silently skipped when their predicate fails to evaluate — fail-open is the wrong direction for a validation #4649 the rule validator is fail-CLOSED: anerror-severity rule that cannot be evaluated rejects the write with a message naming the rule and the key, and awarning/inforule is logged (packages/objectql/src/validation/rule-validator.ts, docblock "Fail-CLOSED for unevaluable predicates"). The field-level predicates moved under ADR-0137 D2 (same docblock); the dev reads that section forrequiredWhen/readonlyWhen/ optionvisibleWhen. - Action / field
visiblein the console:evaluateVisibility(ui/packages/app-shell/src/providers/ExpressionProvider.tsx) fails OPEN on a fault, so the control is shown and the fault is reported (objectui#6443). Only navigation entries are withheld on a fault (objectui#12700). - The "evaluates to
null" wording traces to the Formula guardrail: cel-js arithmetic silently returns null (double × int + bare identifiers) #1928-era comment onfirstUndeclaredReferenceinpackages/formula/src/cel-engine.ts. It describes the historical class, not today's runtime. skills/objectstack-formula/SKILL.md(Verify) already says the engine throws. It is right and needs no change.
Expected
Each of the three passages states the symptom per site as main has it (validation: write rejected, naming the rule; action / field visible: shown, fault reported; and the field-level and RLS/sharing sites as their code reads), and keeps the prevention advice (os validate / os build, record.<field>). Growth is paid by deletion in the same file (ratchet at headroom 0). One PR for the three files. Eval cases only where a skill's eval convention asks for one.
Activity
objectstack-fleet commentedon Nov 6, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p3 kept ·
domain:skills· re-queued · 2026-11-06T12:46Z⛔ Not a claim.
'@objectstack/skills': patchchangeset.pm:*state, so no seat could see it. That was a triage sweep miss, fixed this round.Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7
Claim: PM loop round 4 · 2026-11-06T17:51Z
Session:
session_01J8VVAj7CvjkGXvgXzd6RZ7Account:
huangyiireneBranch:
claude/project-thread-rzfmz0(the card thread's designated branch; dev sessionsession_01J8VVAjPD6BESVmRJphXXyw)Worktree:
objectstack-issue-30893Domain:
domain:skillsSeat:
domain:skills#3File surface:
skills/objectstack-platform/references/operations.md(Verify your work, ≈L28–32),skills/objectstack-data/SKILL.md(≈L450–453),skills/objectstack-ui/SKILL.md(≈L269–271); in those skills'evals/*.json, only a case grading the "evaluates to null" symptom, if any;scripts/check-skills-token-ratchet.mjsonly for those files' rows and only by the measured remainder under ruling record 6513306068 after same-file deletion;.changeset/*.md(stop on breach)Container & model:
S,mode:thread, project-default model,effort: medium.dispatch-gates --tierreads MANDATORY contract-review tier (clause ①,skills/**); waived by the maintainer's standing order in this project (2026-11-03) and said so in the PR body; this seat runs the contract review.Clause-②: no
Metadata-protocol: none
Responsibility:
n/a — teaching-text defect: three skills describe the pre-#4649 / pre-objectui#6443 "evaluates to null" symptom; objectstack carries the fixThread-read: 6685146024
Premise: holds on
mainbcf8a37e0: operations.md L28, objectstack-data SKILL.md L453 and objectstack-ui SKILL.md L271 say a bare field ref "evaluates tonull".Serial constraints: PR #31019 (this seat,
operations.mdand its ratchet row) and PR #30995 (merge queue,objectstack-data/SKILL.md). The thread mergesmainafter both land, before opening its PR (merge, never rebase).Changeset owed:
'@objectstack/skills': patch, neverskip-changeset.Fixes #30893. Tier H.objectstack-fleet commentedon Nov 6, 2026
domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7
ACCEPT → PR #31028 comment 6693190679
Tier H: awaiting an approval from
os-zhuangorhotlong(requested).