Uh oh!
There was an error while loading. Please reload this page.
docs(skills): teach the flow value-expression function vocabulary in objectstack-automation - #12093
Merged
Merged
Conversation
hotlong
marked this pull request as ready for review
August 25, 2026 12:38
hotlong
marked this pull request as draft
August 25, 2026 12:38
os-zhuang
marked this pull request as ready for review
August 25, 2026 13:31
os-zhuang
enabled auto-merge
August 25, 2026 13:31
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes#11348
Teaches the flow value-expression function vocabulary at the point the skill
describes value interpolation (Common Pitfalls #6, the
{$User.Id}/{NOW()}macros list) — the six names, the CEL mirror, the integer-only
roundplus thescale idiom, and the loud unknown-function failure.
check:skills-token-ratchetis RED by 132 tokensThis PR cannot merge as-is and needs a ruling before it can. Reporting it
rather than working around it, because both available workarounds are owned
above this seat.
The file sits at its ceiling with headroom 0, so any net addition is over
budget. The two ways forward are both rulings, not implementation choices:
file. Which customer-facing guidance is worth dropping is a content-value
judgment for the published catalog; no deletion target was granted with this
card, so none was taken.
⛔ MAINTAINER-ONLYby the gate,landing only in a PR whose body quotes a maintainer ruling authorising it.
The addition was compressed to the minimum that still carries the card's
prescription (first draft +210 tokens → +132). It cannot reach +0 while
still teaching the six names, the rounding rule and the failure mode.
Size readings (published-skills budget)
skills/objectstack-automation/SKILL.md— linesskills/objectstack-automation/SKILL.md— tokensSKILL.md)Token convention is the ratchet's own:
ceil(utf8 bytes / 4). The bundle deltais smaller than the file delta because
objectstack-datacurrently sits 6tokens under its own ceiling.
Premise verification — one dispatch detail was falsified
The card's substance holds: the skill taught only the three template macros and
none of the function vocabulary. Verified against the landed code in
packages/services/service-automation, not the card.Confirmed as described: the six names, mirrored 1:1 from the CEL stdlib
(
EXPRESSION_FUNCTION_ARITY/KNOWN_EXPRESSION_FUNCTIONSinsrc/builtin/template.ts),roundinteger-only withround(x * 100) / 100asthe scale idiom, and the named
FlowExpressionFunctionError.Falsified: the error does not fire "at flow-save". It is a run-time
failure.
AutomationEngine.validateFlowExpressionsdeliberately skipsflow-templateslots — onlypredicateslots are checked, because no validatorimplements the single-brace
{var}dialect. So a bad function name in a nodevalue survives registration and refuses when the node interpolates. It is
guard-marked, so a
faultedge cannot route it.That distinction is load-bearing for an AI author and is what the new text says:
conditions are caught by the build, value expressions are not. Writing
"flow-save" would have taught an author that a typo is caught before deployment
when it is not. It also matches the docs page that landed with the feature,
which says the unsupported function "fails the node".
Gates
Derived from the real diff via
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(change set taken from the merge base, not ahand-built list). Union re-run at final commit
3da41ede1, clean tree:check:doc-authoring389 files clean·38 published skill files clean — no internal issue-id referencescheck:skills-token-ratchetcheck:doc-formula-expressions@objectstack/formula+@objectstack/lintbuilt first)check:role-wordno new occurrences of the reserved wordcheck:skill-compatibility11 SKILL.md file(s) reconciled against 78 workspace packagescheck:skill-frame-sync4 copies of the decision frame are structurally isomorphiccheck:agent-test-spellingcheck:cross-package-test-inputsAll 109 self-test cases passedcheck:pm-governed-merges129 assertionscheck-ci-filter-parityall 96 declared cross-package glob(s) … coveredcheck-cross-package-test-inputs16 package(s) read outside themselves, all declaredcheck-nul-bytesscanned 6711 text file(s) … no raw ASCII control bytesNo changeset: published-skill prose only, ships no user-visible runtime change;
labelled
skip-changesetper repo convention.Scope
Untouched, as dispatched: the
:937conditions (bare-CEL) row — a differentsurface, already correct — and
content/docs/automation/flows.mdx, currentsince the feature PR.
Filed while working, not fixed here: #12092 — the same file's
"Verify your work" section still teaches that an unknown function in a
condition fails silently at runtime, which the
:937row and the engine bothcontradict. Different passage, and it carries this same zero-headroom budget.
Generated by Claude Code