Repository navigation
docs(skills): objectstack-automation says a paused screen's Next / Submit and step count are engine-served - #26812
Conversation
…bmit and step count are engine-served
The `screen` node row of skills/objectstack-automation/SKILL.md now says
that Next / Submit and "Step N of M" are not authored: when a screen pauses
the engine reads the flow graph and serves `progress` (`nextScreen`
`none` / `possible` / `certain`; `step` / `stepCount` only when every path
agrees), and the runner labels the button and draws the counter from that
alone. A `decision`, a `fault` edge, a loop back, a non-screen pause or a
`subflow` after a screen answers `possible` ("Next", no count). A
`progress` key in the node config is refused; a hand-rolled label or
counter in `fields` is wrong.
Paid under the standing ruling: three restatements folded first (the
Filter-operands refusal clause, the Trigger Configuration lead-in, item
3's "flow functions don't"), then the token ceiling re-pinned at the
measurement (6358 -> 6466) with the arithmetic in the row comment. Patch
changeset for @objectstack/skills. No eval prompt: the eval file sits at
headroom 0.
Claude-Session: https://claude.ai/code/session_01ADHkmS7nPHShBb87HjHRf4
Co-authored-by: Claude <noreply@anthropic.com>
席位核对ACCEPT ·
|
Contract reviewServed-tier: Director seat (summon #52, ledger objectstack#12708), summoned by the ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Implemented-by: VERDICT: PASS Generated by Claude Code |
Requested by Steve · project thread
Fixes #26756
Clause-②: no
Metadata-protocol: none
维护者速读
skills/objectstack-automation/SKILL.md的screen节点行加一句:「下一步 / 提交」按钮和「第 N 步,共 M 步」不是作者写的,是引擎在屏幕暂停时读流程图给出的progress(nextScreennone/possible/certain,只有每条路径一致时才带step/stepCount);屏幕后面接decision、fault边、回环、非屏幕暂停(approval、wait)或subflow一律答possible(显示「下一步」、不计步);节点config里写progress会被拒,也不要把按钮文字或步数手写进fields。progress,没有任何门禁拦它。skills/objectstack-automation/SKILL.md第 91 行的screen行(新增句),scripts/check-skills-token-ratchet.mjs的 automation 行(6358 → 6466,算术在注释里),.changeset/26756-automation-skill-screen-progress.md。node scripts/check-skills-token-ratchet.mjs,预期skills/objectstack-automation/SKILL.md is 6466 tokens (ceiling 6466; headroom 0)。skills/**为 Tier H,需 GOVERNED_APPROVERS 的 APPROVED review;本 PR 保持 draft,席位不 ready / 不入队)。What changes
skills/objectstack-automation/SKILL.md, thescreennode row (the delta's "~L91" choice over L48: the node row is where an author declaresconfig.fields[], so it is where a hand-rolled label or counter would be written). One addition, in the row's own register: Next / Submit and "Step N of M" are not authored — when the screen pauses the engine reads the graph and servesprogress(nextScreen: 'none' | 'possible' | 'certain';step/stepCountonly when every path agrees), which alone labels the button and draws the counter; adecision,faultedge, loop back, non-screen pause (approval,wait) orsubflowafter a screen answerspossible— "Next", no count;progressin a nodeconfigis refused; never hand-roll a button label or step counter intofields. Every key and value is read offorigin/main:ScreenProgressSpecinpackages/spec/src/contracts/automation-service.ts, its wire shapescreenProgressSpecShapeinpackages/spec/src/api/automation-api.zod.ts, the engine'sreadScreenProgressinpackages/services/service-automation/src/builtin/screen-nodes.ts(plain reachability fornone, fewest surely-pausing screens forcertain, elsepossible; counts only when exact), the runner's reading inui/packages/app-shell/src/views/FlowRunner.tsx(certain/possible→ Next,none→ Submit, counter only with bothstepandstepCount), andScreenConfigSchemainpackages/spec/src/automation/builtin-node-config.zod.ts(astrictObject, so an authoredprogressis a named parse error, not a silent drop).{…}token is refused, and" (-42 bytes) — Valid-but-silently-wrong item 1 lists "every CRUDfilteroperand" among the slots where a{…}token is refused. The trimmed bullet is re-wrapped (-2 bytes of indentation whitespace; the wrap bought nothing, the row's addition is paid by the cuts and the raise).startnodeconfig, and the heading says "on thestartnode".functiondoes NOT read/write the database.scripts/check-skills-token-ratchet.mjs: the automation row moves 6358 → 6466, pinned AT the measurement, with the arithmetic in the row comment: 25429 → 25864 priced bytes (+524 added, -89 cut, +435 net) → ceil(25864 / 4) = 6466; headroom was 3 bytes (0 tokens), so the ceiling moves +108..changeset/26756-automation-skill-screen-progress.md:@objectstack/skillspatch (the catalog ships fromskills/**), both declaration lines at line start.evals/flows-triggers-approvals.jsonmeasures 2734 tokens against a 2734 ceiling (headroom 0), so a prompt fits only with a raise, which the card excludes; said here and in the report.Skills readings (whole file and whole package)
origin/main8b27638)skills/objectstack-automation/SKILL.mdlinesskills/objectstack-automation/SKILL.mdtokens (priced, stamp excluded)skills/*/SKILL.mdlinesskills/*/SKILL.mdtokens (ceil bytes/4, stamp included)Why
Once #26752 landed, a paused screen carries an engine-served
progress, and the Console's FlowRunner labels the button Next or Submit and draws "Step N of M" from it. An agent authoring a wizard from the skill was told none of this: it could hand-roll a label or a counter intofields, or authorprogresson the screen node, and the skill did not say the runtime answers both from the graph. The docs half landed in #26752 (content/docs/automation/flows.mdx); this is the owed skill half.Tests
No test file changes: the diff is published skill text, a ratchet row and a changeset.
node scripts/check-skills-token-ratchet.mjsand its--self-testpass on the head (readings under Verification).Acceptance notes
fields.origin/mainmoved to 0f0b9f5 after this branch was cut;dispatch-gatesreports none of the visible upstream commits touched what the gate list derives from, somainis not merged in (AGENTS.md §10: merge only on a reported conflict, amain-caused red or a queue removal).Verification
Local verification on head
270df422(worktreeobjectstack-issue-26756, baseorigin/main8b27638):bash scripts/pm/os-verify-lock.sh -c "pnpm exec turbo run build --concurrency=2 --filter='./packages/**'"→VERDICT command-exit 0, 75/75 tasks, 8m43s under the lock (needed for the dist-reading gates below).node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 63 commands from the 3-path change set; each ran serially with stdin closed and its exit code captured before any pipe; every one exited 0. Reconciliation:dispatch-gates --ran→ "63 derived, 63 run, 0 NOT-MEASURED, 0 UNRUN".Readings worth quoting
node scripts/check-skills-token-ratchet.mjs→skills/objectstack-automation/SKILL.md is 6466 tokens (ceiling 6466; headroom 0);81 authored bundle file(s) within their ceilings;--self-testexit 0.pnpm --filter @objectstack/spec run check:skill-docs→✓ skills/README.md,✓ content/docs/ai/skills-reference.mdx.node scripts/check-empty-changeset.mjs --base origin/main→1 declaring changeset(s) added, none from the merge base modified.pnpm check:pm-skill-id-lint,pnpm check:doc-authoring,pnpm check:nul-bytes,pnpm check:skill-compatibility,pnpm check:skill-frame-sync,pnpm check:skill-identifier-liveness,pnpm --filter @objectstack/lint run check:doc-formula-expressions,pnpm check:dual-build-cjs-loads,pnpm check:dts-closure,pnpm check:pm-dispatch-gates: exit 0 each.dispatch-gates --tier): MANDATORY —skills/**, clause ①, no one-line exit; changed lines 48 (+40 / -8) vs the 3000 threshold.pnpm lintand the repo-wide farm are CI's runs; the PR's check-runs are the record for them.Human Minimum
packages/specholds no runtime logic. (No schema touched.)pnpm lintis CI's run (not in the derived local list).main, one pull request.packages/spectouched: n/a.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01ADHkmS7nPHShBb87HjHRf4