Skip to content

[Deferred by ruling] Unify flow field-expression assignment onto the CEL engine — the B half of the #11060 ruling, awaiting maintainer appetite #11182

Description

@os-zhuang

Ruled: 5805777944 · letter D · 2026-09-24T01:26Z
Blocked-by: #19938

Filed by the triage seat as the ruled follow-up of #11060 (maintainer 2026-08-23, live PM chat, verbatim: 「其他同意你的意见」— adopting "A now + B follow-up on hold pending appetite").

What this card is

#11060's ruled option A ships the six-function table (round/floor/ceil/abs/min/max, semantics mirrored from CEL) to unblock the quote flow. That is deliberately a bridge: it leaves the platform with TWO expression vocabularies — condition slots speak CEL (35 functions), assignment slots speak the template dialect (6). This card holds the end-state question: migrate assignment expressions onto the CEL engine so there is one dialect, one function set, declared = enforced.

Why it is on hold rather than queued

The migration cost is real and unmeasured — the {var} template dialect's compatibility surface across existing flows was the recorded confidence gap in #11060's analysis. Scheduling it is an appetite call the maintainer explicitly deferred.

(retired line, batch #218 item 1 D: Restart-when closed #11060 — fired on 2026-09-23)

(When A lands and #11060 closes, the unlock scan returns this card to the decision inbox for an appetite ruling — with A's landed shape and the by-then-measurable {var} dependency surface as inputs. ⛔ Do not implement from this card without that second ruling.)

Refs: #11060 (ruling + analysis) · hotcrm#1206 (the measured business pull).

Activity

  1. claude commented on Aug 24, 2026

    @claude
    Contributor

    on-hold 日频判据轮命中(分诊席,session session_01Kktexqp6uVuFMztvvTMf3V,2026-08-24):Restart-when: closed #11060 已成立(#11060 于 2026-08-23T16:38Z 关闭,方案 A 六函数表已落地)。按卡内自带指令,回决策箱做 appetite 裁决,⛔ 不入队。

    一句话问题:流程表达式现在有两套词汇 —— 条件槽会说 35 个函数的 CEL,赋值槽只会说 6 个函数的模板方言。要不要把赋值槽迁到 CEL 上,一套词汇管到底;什么时候迁。

    选项 × 真实代价:

    • A. 现在排:先立 {var} 模板兼容面的测量卡(存量 flow 里谁在用什么拼法),测完迁移。代价:services 车道立即吃下一个 M/L 级工程;quote 流程的燃眉之急已被六函数表解了,业务催逼不在了。
    • B. 挂 v18 列车:target:v18 + 继续 hold,v18 窗口开时随批进(与 ADR-0087 破坏窗同车)。代价:两套词汇再共存一个 major —— 但六函数表语义即 CEL 镜像,漂移风险有限。
    • C. 无限期 hold:需要新的可点火 Restart-when,否则违反 hold 出口纪律。

    四棱:① 长远:一套方言是明确终态,B 只定时点不改方向。② 业务拉动:实测拉动(hotcrm#1206)已被 A 方案六函数表满足 —— 今天没有新的燃眉。③ 防 AI:两套词汇并存期,AI 在赋值槽写 CEL 函数会被拒 —— 但拒绝是响亮的(#11060 A 的形状),不是静默错。④ 创业:不为无新拉动的迁移现在扩工程面。

    推荐 B(挂 v18 列车);回退 A。置信缺口:{var} 方言在树外存量 flow 的真实使用面未测(这正是迁移成本的主变量);若维护者裁 A,第一步就是把它测出来。回「A」/「B」即可。裁后执行:B ⇒ 挂 target:v18 + pm:on-hold,Restart-when 改「v18 开发窗开启(首个 v18 changeset-major 上 main)」;A ⇒ 立测量卡入 services 队列,本卡 Blocked-by 指向它。


    Generated by Claude Code

  2. os-zhuang commented on Aug 24, 2026

    @os-zhuang
    ContributorAuthor

    Maintainer ruling recorded — appetite: ride the v18 train

    Provenance: maintainer, 2026-08-24, live PM chat, batch acceptance, verbatim: 「四维分析一致的,接手你的建议。」 The triage facets block recommending the v18-train option is adopted.

    Ruled: the CEL unification (one dialect, one function set for flow assignment expressions) is chartered for the v18 train, not now. The 6-function bridge (#11060 option A, landed) remains the supported state for v17.x; the {var} template dialect's compatibility surface gets measured as the first step when this restarts.

    State: needs-user-decision → pm:on-hold in the same stroke.
    Restart-when: the v18 release train opens — machine criterion: a v18 prerelease marker exists (.changeset/pre.json entering v18 pre mode on origin/main, or a published v18.* tag family), the same criteria the daily hold scan already tests; the v18 direction tracker #11509 leaving pm:on-hold also qualifies.


    Generated by Claude Code

  3. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    Contributor

    维护者裁定:当前版本就优先处理,统一为 CEL —— 不再等 v18。pm:on-hold → pm:queue · priority:p1

    分诊席(session_01Tw7jnJinGHvoGSi8aFkhPJ),2026-09-23T09:20Z。维护者 2026-09-23 在分诊会话里逐张复核 pm:on-hold 卡,对第五组的回复原文:「10164 不考虑旧的;11182 当前版本就优先处理,统一为cel;其他同意」。 本卡对应的那一句是:「11182 当前版本就优先处理,统一为cel」。

    这条裁定改了什么

    给接手车道的范围说明

    1. 第一步仍然是测量(沿用 08-24 裁定的第一步):{var} 模板方言今天被谁用、用的是什么写法 —— 本仓的 flow、examples/、HotCRM(hotcrm#1206 是当初实测的业务拉动)。
    2. ⚠️ 兼容性要显式决定,⛔ 不能静默:已有的 {var} 赋值表达式,是自动转换(ADR-0087 conversion)还是响亮拒绝并给出处方,由测量结果决定。如果需要打破已有写法,在 PR 里写清楚,需要的话回来问一句 ——⛔ 不要在代码里悄悄选一种。
    3. 错误的写法必须被响亮拒绝(Flow field expressions can call no function but NOW()/TODAY() — every other identifier is rewritten to null, so a computed money value can never be rounded to its field's declared scale #11060 A 的形状),⛔ 不能掉进宽容的默认值。

    路由保持 domain:services。如果 CEL 引擎那一侧(packages/formula)需要改动,拆一张子卡给对应车道,⛔ 不要跨出范围。⛔ 本席不认领、不派发。


    Generated by Claude Code

  4. 8 remaining items

  5. objectstack-fleet commented on Sep 27, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1 — member of the #19938 joint dispatch (ruling B)
    Session: session_01CiCTczDo7tGhafXjf61dUJ
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-19938-fields-value-slot
    Worktree: objectstack-issue-19938
    Domain: domain:services (claimed by domain:spec seat 4 on the maintainer's ruling below)
    Seat: domain:spec#4 (seat post #18917)
    Ruling-ref: 5816929495
    File surface: this card's engine half only, on the #19938 branch: packages/services/service-automation/src/builtin/crud-nodes.ts (evaluate a CEL value envelope in create_record / update_record fields.*, as the assignment executor does for assignments.*), the value-envelope refusal wording in service-automation/src/engine.ts, builtin/logic-nodes.ts comments, builtin/config-expression-ledger.test.ts, builtin/template.ts (ruling D point 2: round(x * 100) / 100 is integer division in CEL — say so and prescribe / 100.0), and the author-time lint hint in packages/lint/src/validate-expressions.ts. The full joint surface is the Claim: on #19938 (5852841056). ⛔ Not skills/objectstack-automation/SKILL.md (Tier H; its own draft per ruling D point 2). (stop on breach; explain in the report)
    Container & model: M/L, mode:subagent, model: default judgment tier, one dev for both halves
    Clause-②: no
    Thread-read: 5805777944
    Serial constraints cleared: read at 2026-09-27T05:59Z. The joint census is on #19938's dispatch. No open PR touches packages/services/service-automation/** or validate-expressions.ts; draft PR #20170 touches only the front matter of content/docs/automation/flows.mdx.

    Why the spec seat holds a domain:services card. The maintainer answered Q1 on #19938 with B (triage record 5816929495, maintainer verbatim 「19938 同意」): this card's engine commit and #19938's spec commit land on ONE branch in ONE PR, spec first, closing both cards together. That record states the ruling is the authorisation for the services-lane step. Blocked-by: objectstack-ai/objectstack#19938 in the body is dissolved by the fold, because both halves ship in the same merge. State: pm:blocked → pm:dispatched in this stroke. Ruling D (5805777944) still governs this card's content: A now; {var} keeps its 17.x meaning; a lint hint (warning) nudges toward the envelope; C and the lossless part of B ride the v18 carrier #19939.

  6. objectstack-fleet commented on Sep 27, 2026

    @objectstack-fleet
    Contributor

    domain:spec seat 4 (session_01CiCTczDo7tGhafXjf61dUJ), 2026-09-27T13:39Z: this card's engine half lands with #19938's spec half in PR #20205, per the maintainer's Q1 = B (5816929495 on #19938). The review of record is the ACCEPT 5856348996 on #19938. At-tier records: 5854753486 (PASS on the whole change) and 5856341116 (delta PASS at the landing head 56f77479e). The PR is ready with auto-merge armed, and this card closes on the merge through its Fixes #11182 line.

  7. objectstack-fleet commented on Sep 27, 2026

    @objectstack-fleet
    Contributor

    Landed — PR #20205 → e46218674b (2026-09-27T15:52Z)

    domain:spec seat 4 (session_01CiCTczDo7tGhafXjf61dUJ). PR #20205 merged through the merge queue on 2026-09-27T15:47:38Z, and both #19938 and #11182 closed completed through its Fixes lines. The readings that confirm the landing:

    • e46218674b has one parent (2bcd5cfeb7), is an ancestor of origin/main, and the queue branch for the PR is gone.
    • Its git patch-id --stable equals the reviewed diff's (9f9b9f52b952 on both; delta record 5857140844 at 68123f428, the third at-tier record on this change after 5854753486 and 5856341116).
    • By content: FlowValueSlotSchema appears in 5 files under packages/spec/src/automation/ at the merge, and in 0 on the parent.

    The path to it: the PR was dequeued once on a dropped-refinements.baseline.json conflict, and two patch rounds re-merged main and recounted the ledger. Every non-generated file stayed byte-identical to the reviewed change.

    pm:dispatched and the assignee come off both cards in the same act.

    Downstream: #19961 (the next card on flow-node-expression-paths.ts) and #20168 (on schemaless-node-config.zod.ts) were serial behind this landing and are now takeable. skills/objectstack-automation/SKILL.md:236 (/ 100) stays with its own Tier H draft under ruling D point 2.

  8. added a commit that references this issue on Sep 28, 2026
    e462186
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions