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
@object-ui/core evaluatePlainCondition still reads a bare-string predicate on the legacy JS grammar after #27457 #27605
Filing gate: ② a declared-vs-enforced gap on a published export, found by the contract review of PR #27584 (#27457), record 6499697983 should-fix 3.
Business reason: after #27584 the console reads every bare-string predicate as CEL, the way @objectstack/spec defines it and the server reads it. evaluatePlainCondition, still exported from the published @object-ui/core, keeps reading a bare string on the legacy JavaScript grammar (===, ?., .includes( …), and its own tests pin that. No console caller uses it today, but any host or plugin that calls it gets the opposite dialect from every other predicate path, silently.
Reader who acts: the triage seat (first grading: align it to CEL, or retire the export), then domain:ui.
Dedupe words: evaluatePlainCondition bare string JS grammar, plain condition legacy dialect.
Triage: p2 · domain:ui · area:formula · align to CEL · 2026-10-29T15:13Z
⛔ Not a claim.
Read fresh. Graded as align, not retire: @objectstack/spec defines a bare-string predicate as CEL, and after fix(ui-core): read a bare-string predicate as CEL shorthand, as the spec and server do #27584 every other console path reads it that way. evaluatePlainCondition routes a bare string to the same CEL evaluator. Its === pins are rewritten to the CEL spelling on purpose, and the changeset states the dialect change for hosts that call the export.
Retiring a published export is a removal and is not graded here.
Claim: PM loop round 1
Session: session_01Utp6CbDAucNyQ4UtzCJKyh
Account: os-bill
Branch: claude/project-thread-4vb0fy (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-27605
Domain: domain:ui
Seat: domain:ui#4
File surface: ui/packages/core/src/evaluator/ExpressionEvaluator.ts (evaluatePlainCondition only), its tests, any other pin of evaluatePlainCondition the repo grep finds (named in the report), root .changeset/ (stop on breach; explain in the report)
Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier on ecd944f5: no path-derived mandate), effort: high
Clause-②: no (narrowing) — a bare string handed to the published evaluatePlainCondition is read as CEL, so a JS-only spelling (===, .includes() it accepted before is refused; the seat owes a CONTRACT_REVIEW_TIER review before the queue (precedent #27584, review 6499697983)
Metadata-protocol: narrowed
Responsibility: route a bare string in evaluatePlainCondition to the same CEL evaluator evaluateCondition uses since #27584; rewrite its JS-grammar pins to CEL; changeset states the dialect change for hosts that call the export
Thread-read: 6500555416
Premise: holds
Serial constraints cleared: seat 1 PR #27584 (#27457, same file) merged; no open PR touches ExpressionEvaluator.ts (read 21:1xZ)
Dispatched 2026-10-29T21:15Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.
Activity
objectstack-fleet commentedon Oct 29, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 错的必须被响亮拒绝并给处方 | none | P②
Triage: p2 ·
domain:ui·area:formula· align to CEL · 2026-10-29T15:13Z⛔ Not a claim.
@objectstack/specdefines a bare-string predicate as CEL, and after fix(ui-core): read a bare-string predicate as CEL shorthand, as the spec and server do #27584 every other console path reads it that way.evaluatePlainConditionroutes a bare string to the same CEL evaluator. Its===pins are rewritten to the CEL spelling on purpose, and the changeset states the dialect change for hosts that call the export.finding,pm:queue.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:ui#4 · os-bill · session_01Utp6CbDAucNyQ4UtzCJKyh
Claim: PM loop round 1
Session:
session_01Utp6CbDAucNyQ4UtzCJKyhAccount:
os-billBranch:
claude/project-thread-4vb0fy(the card thread's designated push branch, the recorded platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-27605Domain:
domain:uiSeat:
domain:ui#4File surface:
ui/packages/core/src/evaluator/ExpressionEvaluator.ts(evaluatePlainConditiononly), its tests, any other pin ofevaluatePlainConditionthe repo grep finds (named in the report), root.changeset/(stop on breach; explain in the report)Container & model:
M,mode:thread,model: TIER_DEFAULT(dispatch-gates --tieronecd944f5: no path-derived mandate),effort: highClause-②: no (narrowing) — a bare string handed to the published
evaluatePlainConditionis read as CEL, so a JS-only spelling (===,.includes() it accepted before is refused; the seat owes aCONTRACT_REVIEW_TIERreview before the queue (precedent #27584, review 6499697983)Metadata-protocol: narrowed
Responsibility: route a bare string in
evaluatePlainConditionto the same CEL evaluatorevaluateConditionuses since #27584; rewrite its JS-grammar pins to CEL; changeset states the dialect change for hosts that call the exportThread-read: 6500555416
Premise: holds
Serial constraints cleared: seat 1 PR #27584 (#27457, same file) merged; no open PR touches ExpressionEvaluator.ts (read 21:1xZ)
Dispatched 2026-10-29T21:15Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.
Generated by Claude Code