Repository navigation
fix(skills): make automation eval fixtures 5, 7, 8 agree with their own assertions - #26636
Conversation
…wn assertions
Three ideal answers in flows-triggers-approvals.json contradicted the
assertions that grade them, so a correct answer graded wrong:
- eval 5 spelled the negated error-label string inside the ideal answer;
it now says it in words (a bare error label routes nothing).
- eval 7 never spelled the `type: 'position'` approver it requires and
spelled the negated positions check; it now names
`approvers: [{ type: 'position', value: 'finance_manager' }]` and says
the negation in words.
- eval 8 never spelled the `type: 'screen'` flow kind it requires.
No fixture added, net 0 lines in skills/. The token ratchet row for the
file moves to the new measurement (2724 -> 2734) after paying down 32
bytes of prose in evals 5 and 7.
Claude-Session: https://claude.ai/code/session_01ADHkmT8qQiLPD3BRTdVxGH
Co-authored-by: Claude <noreply@anthropic.com>
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 |
…ixture fix The skills catalog ships as @objectstack/skills (sync-catalog.mjs copies skills/** into its dist), so the rewritten eval fixtures publish and take a patch changeset instead of skip-changeset. Claude-Session: https://claude.ai/code/session_01ADHkmT8qQiLPD3BRTdVxGH Co-authored-by: Claude <noreply@anthropic.com>
维护者速读
席位意见:ACCEPT。 席位核对ACCEPT ·
Generated by Claude Code |
Requested by Steve · project thread
Fixes #26515
Clause-②: no
Metadata-protocol: none
维护者速读
objectstack-automation技能的评测文件里 5、7、8 三条理想答案改写到与各自的断言一致;token 棘轮行按实测抬到 2734。type: 'position'审批人并写了禁写的 positions 检查;8 缺它要求的type: 'screen'),按断言评分时正确答案会被判错。@objectstack/skillspatch changeset,不碰 SKILL.md 教学与运行时;回滚即 revert 本 PR。skills/objectstack-automation/evals/flows-triggers-approvals.json的三个expected_outputhunk,再看scripts/check-skills-token-ratchet.mjs的棘轮行注释。11 fixtures, 0 contradictions。skills/**,Tier H),需 GOVERNED_APPROVERS 的一次 APPROVED review;之后席位落地。What changes
Three ideal answers in
skills/objectstack-automation/evals/flows-triggers-approvals.jsoncontradicted the assertions that grade them. Each fixture was judged against the teaching onorigin/main(SKILL.md § Failure routing & runAs, § Who may START a flow, § Flow Types, andreferences/state-machines-and-approvals.md§ Approver Types); in all three the teaching and the assertions agree, and the ideal answer was the side that was wrong, so only the ideal answers move:type: 'fault'as the routing form.type: 'position'approver its assertions require and spelled the negated positions check verbatim. It now namesapprovers: [{ type: 'position', value: 'finance_manager' }](the prompt's position) and says the negation in words.type: 'screen'flow kind its assertions require. It now opens with the flow kind.No fixture was added or removed; the file keeps 124 lines (net 0 lines in
skills/**). Nomust_not_containstring appears inside any ideal answer.Token ratchet (
scripts/check-skills-token-ratchet.mjs): the row for this file moves 2724 → 2734, pinned at the measurement, with the house-style comment. Paid down first: evals 5 and 7 were shortened by 25 and 7 bytes; theapproversline eval 7 owed costs more than that, so the net is +41 bytes (10893 → 10934), ceil(10934 / 4) = 2734. Headroom was 3 bytes, 0 tokens.Readings (lines; tokens as the ratchet counts them,
ceil(utf8 bytes / 4)):evals/flows-triggers-approvals.json(the edited file)skills/objectstack-automation/**(6 tracked files)Why
A shipped skill's evals grade a correct answer wrong when the ideal answer fails its own
must_contain/must_not_containset. Fixing the ideal answers restores the evals as a usable grader without changing what the skill teaches.Tests
No test file changed; no forced test edits. The eval file's own consistency check is the acceptance (below).
Acceptance notes
origin/main7c34e5d (after the same-day churn f986702 on this package): the file now holds 11 fixtures (eval 11 landed with skills(automation): the runAs 'system' guidance in objectstack-automation never says a system flow, hook or action body is refused identity-assignment writes #26502), and the parse-and-check found exactly the four contradictions the card names (5: negated string present; 7:type: 'position'missing and negated string present; 8:type: 'screen'missing). Ids 1–4, 6, 9–11 clean.skills/**is a Tier H governed surface: this PR stays draft until aGOVERNED_APPROVERSapproval..changeset/26515-automation-eval-fixtures.md, apatchfor@objectstack/skills— the catalog ships as that package (packages/skills/scripts/sync-catalog.mjscopiesskills/**into itsdist), so the rewritten fixtures publish; theskip-changesetlabel first applied at creation was removed on the seat's rework (head 72cb4e2).Verification
Head
72cb4e28(5c31edd = the fix; 72cb4e2 adds only the changeset). Parse-and-check of every fixture in the file (the card's acceptance one-liner):Output on origin/main 7c34e5d (before) and on 5c31edd (after)
Skill gates (all exit 0)
Derived gate families (dispatch-gates --commands, 49 families) and --ran reconciliation
All 49 derived families run locally on head 5c31edd, each exit code captured before any pipe;
dispatch-gates --ranreconciliation:✓ dispatch-gates --ran: 49 derived famil(ies) accounted for — 49 run, 0 NOT-MEASURED (a DERIVED zero — all 49 recorded an exit code and none of them is 3).check:pm-dispatch-gates(fast tier, ~8 min): exit 0,✓ dispatch-gates self-test (fast tier): 1935 cases pass; 7 slow section(s) deferred..On 72cb4e2 the derivation grows to 60 families (the changeset adds 11: the four changeset gates with
--base origin/mainand their self-tests,check:published-files,check:closed-ceremony-text,check:pm-changeset-deadline-census, the two release-tooling self-tests); the 11 and the token ratchet ran on 72cb4e2, all exit 0;--ranon the combined record:✓ dispatch-gates --ran: 60 derived famil(ies) accounted for — 60 run, 0 NOT-MEASURED (a DERIVED zero — all 60 recorded an exit code and none of them is 3).Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses. (CI'sLint & Repo Gatesruns it; no formatter ran)main, one pull request..changeset/26515-automation-eval-fixtures.md, patch@objectstack/skills)packages/spectouched: its generated artifacts are regenerated and committed. (not touched)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01ADHkmT8qQiLPD3BRTdVxGH
Generated by Claude Code