Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion scripts/check-skills-token-ratchet.mjs
Original file line numberDiff line numberDiff line change
Expand Up@@ -166,7 +166,13 @@ export const CEILINGS = new Map([
// CEILING_BASIS.strippedInternalIds. `(was N)` is the ceiling this replaced.
['skills/objectstack-ai/SKILL.md', 6806], // -18 (was 6824)
['skills/objectstack-api/SKILL.md', 6331], // -11 (was 6342)
['skills/objectstack-automation/SKILL.md', 12511], // -32 (was 12543)
// 12511 -> 12643 (#11348): the flow value-expression section documented the
// expression surface but not the function vocabulary (round/floor/ceil/abs/
// min/max); an unknown function fails at RUNTIME, not at flow-save, so the
// published teaching is the only guard. +132 tokens, compressed to minimum.
// Maintainer ruling 2026-08-25 (option B1, raise the ceiling), verbatim and
// untranslated: 「我看到了,你分析过了,接受你的建议」.
['skills/objectstack-automation/SKILL.md', 12643],
['skills/objectstack-data/SKILL.md', 13783], // -34 (was 13817)
['skills/objectstack-formula/SKILL.md', 6002], // -53 (was 6055)
['skills/objectstack-i18n/SKILL.md', 6338], // -11 (was 6349)
Expand Down
7 changes: 7 additions & 0 deletions skills/objectstack-automation/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -839,11 +839,18 @@ them right the first time:
- `{var}` / `{record.title}` — variable / record field
- `{record.tags.0}` — **array index** (e.g. a `multiple: true` lookup, stored as an array)
- `{$User.Id}` / `{NOW()}` / `{TODAY() + 30}` — current user / date macros
- `{round(x)}` `{floor(x)}` `{ceil(x)}` `{abs(x)}` `{min(a,b)}` `{max(a,b)}` —
mirror the CEL stdlib 1:1. `round` is **integer-only** (no `round(x, 2)`);
for N decimals write `{round(x * 100) / 100}` (scale 2)
- anything without `{…}` is a **literal**

❌ `body: '{{ai_reply}}'` — double-brace is the *formula / template-field* dialect, **not** flow values
❌ `ticket: '$source.id'` — a bare `$ref` is a literal string, not interpolated
✅ `body: '{ai_reply}'`, `ticket: '{source.id}'`
❌ `'{ROUND(x, 2)}'` / `'{Math.round(x)}'` / `'{(x).toFixed(2)}'` — any other
name in call position **fails the node** with a named error naming the
supported set. The build does **not** catch these (conditions are checked,
value expressions are not) and a `fault` edge cannot route it.

7. **`create_record`'s `outputVariable` holds the created RECORD, not its id.**
Reference a field explicitly.
Expand Down
Loading