Filed by the PM seat recording the 2026-08-25 maintainer ruling on #6226 (decision-inbox review in the PM chat; recommendation accepted verbatim: 「同意你的建议」). PM session session_01H9StxQgG2DPA26XzZZqnJB. Filed unassigned; domain:* and type stay the triage seat's to confirm.
What
ConditionBuilder (packages/app-shell/src/views/metadata-admin/ConditionBuilder.tsx) hardcodes its subject vocabulary: row subjects are built as record. + field name, plus user.* / org.* context. That is correct for its five current consumers (all record-scoped sites) and wrong for the flow designer's entry condition, which is a flattened-scoped site (bare status, previous.FIELD — see objectstack packages/formula/src/validate.ts's two scopes, and this repo's flow-scope.ts deliberate fieldPrefix: onStart ? '' : 'record.').
Give the component a caller-supplied subject vocabulary:
- a configurable subject prefix, so a consumer can declare "bare field names" — with
record. remaining the default so the five existing consumers are behaviorally untouched; and previous.FIELD subjects where the caller declares them (the create-path idiom previous == null included).
Raw-expression mode untouched.
Acceptance criterion (executable)
The 16 shipped start-node entry conditions measured in #6226's os-dev report (15 from objectstack example apps + the HotCRM example in the card body) round-trip into row mode; the jsdom probe harness described in that report is the instrument, and today's measured result is 0/16. The value round-trip asymmetries that block those 16 (fmtValue/unfmtValue quote handling) are in scope only to the extent the 16-condition criterion forces; the reference-quoted-into-string-literal defect is #6293 and stays its own card.
Out of scope
Refs: #6226 (ruling + full measurement) · #6293 (sibling defect found by the same measurement).
Filed by the PM seat recording the 2026-08-25 maintainer ruling on #6226 (decision-inbox review in the PM chat; recommendation accepted verbatim: 「同意你的建议」). PM session
session_01H9StxQgG2DPA26XzZZqnJB. Filed unassigned;domain:*and type stay the triage seat's to confirm.What
ConditionBuilder(packages/app-shell/src/views/metadata-admin/ConditionBuilder.tsx) hardcodes its subject vocabulary: row subjects are built asrecord.+ field name, plususer.*/org.*context. That is correct for its five current consumers (all record-scoped sites) and wrong for the flow designer's entry condition, which is a flattened-scoped site (barestatus,previous.FIELD— see objectstackpackages/formula/src/validate.ts's two scopes, and this repo'sflow-scope.tsdeliberatefieldPrefix: onStart ? '' : 'record.').Give the component a caller-supplied subject vocabulary:
record.remaining the default so the five existing consumers are behaviorally untouched; andprevious.FIELDsubjects where the caller declares them (the create-path idiomprevious == nullincluded).Raw-expression mode untouched.
Acceptance criterion (executable)
The 16 shipped start-node entry conditions measured in #6226's os-dev report (15 from objectstack example apps + the HotCRM example in the card body) round-trip into row mode; the jsdom probe harness described in that report is the instrument, and today's measured result is 0/16. The value round-trip asymmetries that block those 16 (
fmtValue/unfmtValuequote handling) are in scope only to the extent the 16-condition criterion forces; the reference-quoted-into-string-literal defect is #6293 and stays its own card.Out of scope
pm:blockedbehind this card and proceeds per its recorded ruling once this lands.decisionbranch conditions (objectList cells — different component, different commit protocol; flow designer: the Start node's Entry condition is raw-CEL-only — ConditionBuilder ships in five other inspectors but not the one condition most users meet #6226's Q2) — needs its own design decision.Refs: #6226 (ruling + full measurement) · #6293 (sibling defect found by the same measurement).