Repository navigation
Published skills: every objectstack skill ships ≥ 3 evals in the objectui fixture shape, replacing the 「Not yet implemented」 placeholders (maintainer direct dispatch, batch #213 item 2) #19714
Description
Activity
- addedpriority:p1High: required for production / M2High: required for production / M2
on Sep 22, 2026 os-support-ai commented
on Sep 22, 2026 CollaboratorAuthorMore actionsClaim: PM loop round 1 — maintainer direct dispatch (director seat, summon #27; batch #213 item 2 「1 2 4 同意」)
Session:session_0129ZpnaBcYZZ51rCvQiXg6C
Branch:claude/issue-19714-skills-evals
Worktree:objectstack-issue-19714
Domain:domain:skills
Seat: domain:skills#3 (a director direct-dispatch seat number, distinct from the lane's seats 1 and 2; no seat post is opened for it)
File surface:skills/*/evals/**only (new json fixtures;skills/objectstack-data/evals/README.mdandskills/objectstack-automation/evals/**rewritten in place); ⛔ noSKILL.md,rules/**orreferences/**line (stop on breach; explain in the report)
Container & model:M,mode:subagent(in-container os-dev, background),model: CONTRACT_REVIEW_TIER—skills/**is a protocol semantic surface (强制条款①: 发布的 skills/** 整根随 npx skills add 发运, 无一行级豁免), so the ceiling is mandated, not a judgment call
Clause-②: no
Thread-read: none
Serial constraints cleared:os-verify-lock.sh --statusat 2026-09-22T10:28Z → see the line this seat pasted in chat (lock free, queue empty at the previous reading 2026-09-22T09:07Z). The file lists of the 19 open objectstack PRs read 2026-09-22T09:16Z touchskills/**in two places only — #19598 (skills/objectstack-ui/references/react-blocks.md) and #19600 (skills/objectstack-i18n/SKILL.md) — neither underevals/; disjoint. Sibling card #19715 (the SKILL.md split) ispm:blockedon this card by design and starts after it lands. No sibling pins behaviour this card changes: none.
Generated by Claude Code
os-support-ai commented
on Sep 22, 2026 CollaboratorAuthorMore actionsos-dev-report
{ "issue": 19714, "status": "done", "branch": "claude/issue-19714-skills-evals", "pr": "https://github.com/objectstack-ai/objectstack/pull/19721", "session": "session_0129ZpnaBcYZZ51rCvQiXg6C", "premise_still_valid": true, "summary": "All 10 skills under skills/ (ls confirms no 11th) now ship evals/*.json in the objectui shape copied from objectui/skills/objectui/evals/app-composition.json: 11 new json files, 54 new evals (59 with the 5 pre-existing objectstack-ui ones), one per stated «use when» trigger family plus at least one anti-pattern case per skill, ids unique, skill_name = frontmatter name. objectstack-data's placeholder README was rewritten into the fixture list its candidate topics became; objectstack-automation's markdown case was converted to json and kept beside the md (SKILL.md links it by path and the ratchet has a row for it — a missing file reds). No SKILL.md / rules / references line changed. Draft PR #19721, Fixes #19714, Clause-②: no, label skip-changeset (measured practice of the last three merged skills-only PRs: #19445, #18839, #18674 all skip-changeset, no changeset file). The token ratchet counts evals/** and reds on the 11 new unpriced files with a MAINTAINER-ONLY remedy (add CEILINGS rows); per the dispatch word the gate script was not touched — the 11 measured rows and the verbatim ruling are in the PR body for the seat/maintainer (see open_questions).", "tests": "Verified on 02b931d (worktree objectstack-issue-19714, base a251aaa). Shape: 12 json files parse, skill_name matches frontmatter in 12/12, ids unique, no empty must_contain. must_contain citations: 253 tokens, every one located as a whole token in its own skill's hand-authored text (file:line list in the PR body; scratch verifier). Runner: none exists in either repo (grep -rn evals package.json scripts/ → objectstack: only the ratchet ledger + a bench log; objectui: only the static oracle scripts/check-skill-eval-tokens.mjs); ran that oracle's exported analyze({root}) against this tree → bundles 10, preconditions [], shapeFindings [], rows 253, rows with zero whole-token hits 0; no runner built. Line budget: dispatch-gates change set 630 lines (+613/-17, 13 files) → evals net +596 ≤ +900; SKILL.md net 0. Control chars: grep -naP over the 13 touched files → 0 hits. Gates: node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands derived 23; --ran with exit codes → 23 derived, 23 run, 0 NOT-MEASURED, 0 unrun. 21 exit 0. check-skills-token-ratchet exit 1: '11 of 55 published bundle file(s) failed their check' — all 11 are the new files 'carrying no ceiling' (⛔ MAINTAINER-ONLY remedy); every pre-existing row green (data README 142/143, ui README 287/289, analytics json 1102/1102, revise-loop md 550/1329). check-skills-token-ratchet --self-test exit 1: single failing case 'every discovered AUTHORED file carries a ceiling today' naming the same 11 files; control on the pristine base tree in the shared checkout: 65/65 pass. check:doc-formula-expressions: first run exit 3 PREREQUISITE NOT MET (formula + lint not built; same on the pristine tree), then pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint under os-verify-lock.sh (OS_VERIFY_LOCK_SLOT=issue-19714, VERDICT command-exit 0, held 190s, waited 0s) → gate exit 0. Ablation / reverse verification: not applicable (fixtures only, no behaviour change). CI-owned and not run locally: pnpm lint sweep, type-check lanes, Test Core shards.", "gates": [ { "command": "node scripts/check-ci-filter-parity.mjs", "exit": 0 }, { "command": "node scripts/check-closing-keyword-parity.mjs", "exit": 0 }, { "command": "node scripts/check-closing-keyword-parity.mjs --self-test", "exit": 0 }, { "command": "node scripts/check-comment-mask-corpus.mjs", "exit": 0 }, { "command": "node scripts/check-doc-route-spelling.mjs --advisory", "exit": 0 }, { "command": "node scripts/check-doc-route-spelling.mjs --self-test", "exit": 0 }, { "command": "node scripts/check-skills-token-ratchet.mjs", "exit": 1, "reading": "11 of 55 failed — the 11 new evals json files carry no CEILINGS row; remedy is ⛔ MAINTAINER-ONLY; gate not edited per dispatch" }, { "command": "node scripts/check-skills-token-ratchet.mjs --self-test", "exit": 1, "reading": "1 case: live-tree pin 'every discovered AUTHORED file carries a ceiling today' lists the same 11 files; 65/65 on the pristine base tree" }, { "command": "pnpm --filter @objectstack/lint run check:doc-formula-expressions", "exit": 0, "reading": "after building formula + lint under the verify lock; first attempt exit 3 PREREQUISITE NOT MET on both trees" }, { "command": "pnpm check:agent-test-spelling", "exit": 0 }, { "command": "pnpm check:corpus-claim-drift", "exit": 0 }, { "command": "pnpm check:cross-package-test-inputs", "exit": 0 }, { "command": "pnpm check:doc-authoring", "exit": 0 }, { "command": "pnpm check:driver-memory-census", "exit": 0 }, { "command": "pnpm check:gitlink-declared", "exit": 0 }, { "command": "pnpm check:nul-bytes", "exit": 0 }, { "command": "pnpm check:pm-governed-merges", "exit": 0 }, { "command": "pnpm check:refd-timer-probe", "exit": 0 }, { "command": "pnpm check:role-word", "exit": 0 }, { "command": "pnpm check:skill-compatibility", "exit": 0 }, { "command": "pnpm check:skill-frame-sync", "exit": 0 }, { "command": "pnpm check:skill-identifier-liveness", "exit": 0 }, { "command": "pnpm check:watch-hint-literal", "exit": 0 }, { "command": "CI status", "exit": "in_progress", "reading": "report delivered at local-verification completion; the Lint & Repo Gates context is expected red on the ratchet until the CEILINGS rows land" } ], "line_budget": { "evals_net": 596, "budget": 900, "skill_md_net": 0, "changed_lines_total": "630 (+613 / -17, 13 files)" }, "files_changed": [ "skills/objectstack-ai/evals/skills-tools-knowledge.json (new, 5 evals, 1074 tokens)", "skills/objectstack-api/evals/endpoints-auth-routes.json (new, 5, 1042)", "skills/objectstack-automation/evals/flows-triggers-approvals.json (new, 5, 1257)", "skills/objectstack-data/evals/objects-fields-relationships.json (new, 4, 946)", "skills/objectstack-data/evals/hooks-security-seeds-datasources.json (new, 4, 894)", "skills/objectstack-data/evals/README.md (rewritten, 142/143 tokens)", "skills/objectstack-formula/evals/cel-predicates-formulas.json (new, 5, 1046)", "skills/objectstack-i18n/evals/bundles-locales-coverage.json (new, 5, 1004)", "skills/objectstack-platform/evals/config-plugins-ops.json (new, 6, 1211)", "skills/objectstack-query/evals/filters-pagination-search.json (new, 5, 955)", "skills/objectstack-ui/evals/views-apps-actions-pages.json (new, 6, 1505)", "skills/objectstack-ui/evals/README.md (lists both fixtures, 287/289 tokens)", "skills/objectstack-upgrade/evals/protocol-major-upgrade.json (new, 4, 1033)" ], "deviations": [], "mcp_calls": "0 — no MCP GitHub calls; every read and write went through the REST proxy with GITHUB_TOKEN (label via scripts/pm/label-write.mjs)", "api_writes": "3 REST writes + 2 git pushes — POST /repos/objectstack-ai/objectstack/pulls (201, draft #19721); POST /repos/objectstack-ai/objectstack/issues/19721/labels via scripts/pm/label-write.mjs (200, skip-changeset, read back MATCHES); POST /repos/objectstack-ai/objectstack/issues/19714/comments (this report); git push -u origin claude/issue-19714-skills-evals ×2 (empty-branch probe, then 02b931d). No PATCH, no second claim, no assignee write.", "open_questions": [ { "question": "Where do the 11 CEILINGS rows for the new evals files land? check-skills-token-ratchet reds on every new hand-authored file with no row and marks the remedy ⛔ MAINTAINER-ONLY; the ruled shape and the dispatch word forbid this dev from editing the gate script, so the Lint & Repo Gates context stays red on PR #19721 until the rows exist.", "options": [ "A: the seat appends one commit to PR #19721 adding the 11 rows (measured counts and the verbatim batch #213 ruling are already in the PR body), each initialised AT its measurement with zero headroom, the same terms as the #12392 and #14296 rows", "B: a separate maintainer-authorised follow-up PR adds the rows; #19721 waits red and is hand-merged together with it", "C: exclude evals/** from the ratchet's priced population" ], "recommendation": "A. Business need: the sibling card #19715 is blocked on this landing and the rows are the only thing between this PR and green — one Tier H hand-merge instead of two. Long-term soundness: the ratchet's own design is that a new file lands WITH its row (the #14296 rules-split rows did exactly that, 'NEW FILE … Pinned at its landed count'); B adds a second governed landing for a data-only change. AI-authoring safety: rows at measurement keep shrink-only pricing over the whole evals tree; C reopens the exact hole #12392 closed and would let the next eval file land unpriced. Startup scope: A is 11 data rows and no mechanism change, no new gate. The maintainer's word the ratchet asks for is the batch #213 ruling 「1 2 4 同意」, which this card carries as its provenance." } ], "out_of_scope_findings": [ "none in classes a/b/c — four observations recorded in PR #19721 ## Acceptance notes (README headroom paid in-file; must_not_contain spelled in authored form with the review-cue caveat; objectui's oracle is root-pinned on its CLI path but exposes analyze({root}); dispatch-gates --ran wants 'command :: exit N' rows), none filed" ] }
Generated by Claude Code
os-support-ai commented
on Sep 22, 2026 CollaboratorAuthorMore actionsRuling: batch #213 item 2 · follow-up on PR #19721 · letter A · maintainer 「天花板行按照你的意见就行」 · 2026-09-22T12:34Z
Director seat, summon #27,
session_0129ZpnaBcYZZ51rCvQiXg6C. The maintainer's words adopt the seat's recommendation A from the review reading on PR #19721 (5775309844): the 11 new evals files are priced into the published bundle.Ruled shape — one commit on
claude/issue-19714-skills-evals, same claim, same dev:scripts/check-skills-token-ratchet.mjs: 11CEILINGSrows, one per newskills/*/evals/*.jsonfile, each pinned AT its measured count (the counts already in PR docs(skills): ship at least three json evals per published skill in the objectui fixture shape #19721's body; re-measure on the commit that adds the rows and pin to that measurement), zero headroom — the same terms as the [finding] The published-skills TOKEN ratchet prices only SKILL.md — 37% of the shipped bundle (68,390 tokens) carries no ceiling #12392 extension rows and the [Decision] Skills optimization program — batch 1 (4 items): new-file ceilings for splits · planned-eval stubs · react-blocks double rendering · published pm-dispatch scope #14296 「NEW FILE … pinned at its landed count」 rows. The rows sit in a block whose comment names this ruling: batch 🔗 Broken links detected in documentation #213 item 2 「1 2 4 同意」 and the follow-up word 「天花板行按照你的意见就行」 (this comment's id), so the ratchet's 「bound to a quoted maintainer ruling」 pin has its quotation.- ⛔ Nothing else in the gate changes: no ceiling raised, no population change, no
evals/**carve-out; the two pre-existing evals rows (objectstack-data/evals/README.md143,objectstack-ui/evals/README.md289) stay — if the rewritten READMEs measure above them, the READMEs are trimmed, ⛔ not the rows raised. - Green before push:
node scripts/check-skills-token-ratchet.mjs --self-testandnode scripts/check-skills-token-ratchet.mjsboth exit 0 on the tree; then the derived gates on the actual diff (dispatch-gates --commands,--ran). CI must readType Check · source gates,TypeScript Type CheckandLint & Repo Gatesgreen on the new head. - Net line budget unchanged (
skills/**untouched by this commit; the gate file is outside the budget).Clause-②: no. PR body gains one line naming the commit and this ruling.
After the push the seat re-reviews, then hands the PR to Tier H:
needs-user-decisionon the PR, the final 维护者速读, review requests toos-zhuangandhotlong; the click is the maintainer's. ⛔ No state change on this card in this stroke.
Generated by Claude Code
os-support-ai commented
on Sep 22, 2026 CollaboratorAuthorMore actionsos-dev-report
{ "issue": 19714, "status": "done", "branch": "claude/issue-19714-skills-evals", "pr": "https://github.com/objectstack-ai/objectstack/pull/19721", "session": "session_0129ZpnaBcYZZ51rCvQiXg6C", "premise_still_valid": true, "head": "41844cef", "summary": "Patch round per the maintainer's ruling (issue comment 5776586573, batch #213 item 2, letter A, 「天花板行按照你的意见就行」): one commit 41844cef on the same branch adds 11 CEILINGS rows to scripts/check-skills-token-ratchet.mjs, one per new skills/*/evals/*.json, each pinned AT its count re-measured on that tree with the gate's own countTokens (ai 1074, api 1042, automation 1255, data hooks 894, data objects 946, formula 1046, i18n 1004, platform 1211, query 955, ui 1505, upgrade 1033; sum 11965), zero headroom, in a block quoting 「1 2 4 同意」 and 「天花板行按照你的意见就行」 and naming comment 5776586573, placed before the map's trailing stub comment in the style of the #12392 / #14296 rows. Nothing else in the gate changed (no raise, no population change, no evals carve-out); the pre-existing evals rows stay (data README 142/143, ui README 287/289 — no trim needed). skills/** untouched by this commit; no SKILL.md line; Clause-②: no. The PR body gained one line (after the Clause line) naming the commit and the ruling; branch pushed, PR still draft with skip-changeset. The re-measure found one count differs from the number I typed into my own assertion (1255 vs 1257 — the PR body and the ratchet log already said 1255; my check compared against a stale pre-fix figure), so the first insertion attempt aborted before writing and was redone from the measurement file.", "tests": "On 41844cef (worktree objectstack-issue-19714 re-created from the pushed head 02b931d2). node scripts/check-skills-token-ratchet.mjs --self-test → exit 0, '65 cases pass' (the live-tree pin 'every discovered AUTHORED file carries a ceiling today' now holds); node scripts/check-skills-token-ratchet.mjs → exit 0, '45 authored bundle file(s) within their ceilings; 10 generator-owned file(s) measured, not ratcheted', every new row at headroom 0. Derived gates on the actual branch diff: node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands → 41 commands (the 23 from round 1 plus 18 that touching scripts/ brings in); all 41 run with exit codes captured before any pipe; --ran reconciliation: '41 derived, 41 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero — all 41 recorded an exit code and none of them is 3)'. All 41 exit 0, including pnpm check:ratchet-remedy-authority (270 scripts swept, the ratchet still classified marked), pnpm check:pm-dispatch-gates (detached with PID recorded and waited on with tail --pid; 1906 cases pass, 888.3 s on this box), node scripts/pm/bare-root-worklist.mjs --self-test (the one other test-shaped consumer that names the ratchet — it pins the ratchet's SKILLS_DIR literal, unchanged), and pnpm --filter @objectstack/lint run check:doc-formula-expressions after rebuilding formula + lint under os-verify-lock.sh (VERDICT command-exit 0, held 5 s, waited 0 s). check-auth-mount-ledger.mjs / check-i18n-coverage.mjs / check-doc-authoring.mjs mention the ratchet only in comments (grep -n), not as a read; doc-authoring was run anyway (exit 0). Control-character scan: covered by pnpm check:nul-bytes exit 0. Ablation: not applicable (11 data rows; the gate's own self-test drives the unpriced-file and over-ceiling reds).", "gates": [ { "command": "node scripts/check-ci-filter-parity.mjs", "exit": 0 }, { "command": "node scripts/check-closing-keyword-parity.mjs", "exit": 0 }, { "command": "node scripts/check-closing-keyword-parity.mjs --self-test", "exit": 0 }, { "command": "node scripts/check-doc-route-spelling.mjs --advisory", "exit": 0 }, { "command": "node scripts/check-doc-route-spelling.mjs --self-test", "exit": 0 }, { "command": "node scripts/check-skills-token-ratchet.mjs", "exit": 0 }, { "command": "node scripts/check-skills-token-ratchet.mjs --self-test", "exit": 0 }, { "command": "pnpm check:bash32-floor", "exit": 0 }, { "command": "pnpm check:cli-command-ids", "exit": 0 }, { "command": "pnpm check:entry-guard", "exit": 0 }, { "command": "pnpm check:parse-guard", "exit": 0 }, { "command": "pnpm check:pnpm-filter-targets", "exit": 0 }, { "command": "pnpm check:ratchet-remedy-authority", "exit": 0 }, { "command": "node scripts/check-comment-mask-corpus.mjs", "exit": 0 }, { "command": "node scripts/check-declaration-mirrors.mjs", "exit": 0 }, { "command": "node scripts/check-declaration-mirrors.mjs --self-test", "exit": 0 }, { "command": "node scripts/check-scripts-symbol-anchors.mjs", "exit": 0 }, { "command": "node scripts/check-scripts-symbol-anchors.mjs --self-test", "exit": 0 }, { "command": "node scripts/check-self-test-wired.mjs", "exit": 0 }, { "command": "node scripts/check-self-test-wired.mjs --self-test", "exit": 0 }, { "command": "node scripts/check-self-test-workflow-commands.mjs", "exit": 0 }, { "command": "node scripts/check-self-test-workflow-commands.mjs --self-test", "exit": 0 }, { "command": "node scripts/check-whole-set-label-write.mjs", "exit": 0 }, { "command": "node scripts/check-whole-set-label-write.mjs --self-test", "exit": 0 }, { "command": "node scripts/pm/bare-root-worklist.mjs --self-test", "exit": 0 }, { "command": "pnpm --filter @objectstack/lint run check:doc-formula-expressions", "exit": 0 }, { "command": "pnpm check:agent-test-spelling", "exit": 0 }, { "command": "pnpm check:corpus-claim-drift", "exit": 0 }, { "command": "pnpm check:cross-package-test-inputs", "exit": 0 }, { "command": "pnpm check:doc-authoring", "exit": 0 }, { "command": "pnpm check:driver-memory-census", "exit": 0 }, { "command": "pnpm check:gitlink-declared", "exit": 0 }, { "command": "pnpm check:nul-bytes", "exit": 0 }, { "command": "pnpm check:pm-governed-merges", "exit": 0 }, { "command": "pnpm check:refd-timer-probe", "exit": 0 }, { "command": "pnpm check:role-word", "exit": 0 }, { "command": "pnpm check:skill-compatibility", "exit": 0 }, { "command": "pnpm check:skill-frame-sync", "exit": 0 }, { "command": "pnpm check:skill-identifier-liveness", "exit": 0 }, { "command": "pnpm check:watch-hint-literal", "exit": 0 }, { "command": "pnpm check:pm-dispatch-gates", "exit": 0 }, { "command": "CI status", "exit": "in_progress", "reading": "report delivered at local-verification completion; the ruling asks CI to read Type Check · source gates, TypeScript Type Check and Lint & Repo Gates green on 41844cef — not waited on here" } ], "line_budget": { "evals_net": 596, "budget": 900, "skill_md_net": 0, "this_commit": "+27 / -0 in scripts/check-skills-token-ratchet.mjs (outside the skills/** budget); skills/** untouched" }, "files_changed": [ "scripts/check-skills-token-ratchet.mjs (+27 lines: one comment block quoting the two rulings and comment id 5776586573, plus 11 CEILINGS rows)" ], "deviations": [], "mcp_calls": "0 — no MCP GitHub calls in either round", "api_writes": "This round: git push origin claude/issue-19714-skills-evals ×1 (02b931d2..41844cef); PATCH /repos/objectstack-ai/objectstack/pulls/19721 ×1 (200) adding the one body line — read back: stored = sent + 58 bytes, the platform's appended bare footer beside my session-URL footer, exactly the recorded reading for a bare REST PATCH on /pulls (two footers, neither re-sent); POST /repos/objectstack-ai/objectstack/issues/19714/comments ×1 (this follow-up report). Cumulative both rounds: 5 REST writes (POST /pulls, POST labels via label-write.mjs, POST comments, PATCH /pulls, POST comments) + 3 git pushes. No assignee write, no second claim, no label change this round.", "open_questions": [], "out_of_scope_findings": [ "none in classes a/b/c this round; one usage note not filed — the harness moves a foreground wait to the background at 600 s, and a shell moved that way loses the caller's variables, so a detached gate's PID / exit bookkeeping must be written to absolute paths before the wait (it was recovered by locating the process through its open log fd, never by name)" ] }
Generated by Claude Code
os-support-ai commented
on Sep 22, 2026 CollaboratorAuthorMore actionsACCEPT — PR #19721 at
41844cef, handed to Tier H — director seat (dispatching seat), summon #27,session_0129ZpnaBcYZZ51rCvQiXg6C, 2026-09-22T13:31Z.Verified against GitHub: 14 files — 12 json fixtures + 2 evals READMEs under
skills/*/evals/**(+613/−17, evals net +596 ≤ +900, everySKILL.mdnet 0) and the ruled ceiling commit (scripts/check-skills-token-ratchet.mjs+27: a comment block quoting 「1 2 4 同意」 and 「天花板行按照你的意见就行」 with comment id 5776586573, then 11CEILINGSrows pinned at their measured counts, zero headroom; nothing else in the gate moved). Shape, ids andskill_namechecked; two fixtures spot-read; 12/12 sampledmust_containtokens occur in their skill's own text. Body first lineFixes #19714,Clause-②: no,skip-changesetmatching the last three mergedskills/**-only PRs. CI on41844cef:Lint & Repo Gates,TypeScript Type Check,Type Check · source gates,Test Core,Governed Surface Queue Guardall success; the only non-green rows are the three claim guards cancelled on the superseded run. Reports 5775276005 and 5776980529 read;mcp_calls0.Path surface:
skills/**— Tier H (the maintainer's hand). Four-piece in this stroke: this record ·needs-user-decisionon the PR · the final 维护者速读 on the PR · review requests toos-zhuangandhotlong. The PR stays draft; the click is the maintainer's. On merge this card closes byFixes; the seat then removespm:dispatchedand #19715 (the split) unblocks.
Generated by Claude Code
os-support-ai commented
on Sep 22, 2026 CollaboratorAuthorMore actionsLanding record — PR #19721 MERGED, card closed by
Fixes— director seat, summon #27,session_0129ZpnaBcYZZ51rCvQiXg6C, 2026-09-22T14:05Z.Squash
b22e3f764611a73e239b19ed922e0d5ba91fd643onorigin/main(one parent), read by content: 11 newskills/*/evals/*.jsonfixtures + the two rewritten evals READMEs, and the 11CEILINGSrows inscripts/check-skills-token-ratchet.mjs(ruling 5776586573, letter A). Merged through the queue after os-zhuang's APPROVED review (5278792650) — the Tier H word; the seat clearedneeds-user-decisionand armed auto-merge on that authority.pm:dispatchedremoved in this stroke (a closed card carries no pm-state label);domain:skills/priority:p1stay as ownership. Downstream: #19715 (the SKILL.md split) wasBlocked-by: #19714— released topm:queuein the same stroke.
Generated by Claude Code
- added a commit that references this issue
on Sep 28, 2026
③ 直派任务 — maintainer direct dispatch, filed by the director seat (summon #27,
session_0129ZpnaBcYZZ51rCvQiXg6C).domain:skills· dispatched from this seat under the maintainer's words; ⛔ not a queue card.Provenance (who / verbatim / where): the maintainer, chat with the director seat, 2026-09-22, answering decision batch #213 — 「1 2 4 同意」. Item 2 as presented: 「objectstack 各 skill 先补 3 题 evals(复用 objectui 的 json 形状),先于第 1 项,好量化『切了没变差』」. The research behind it: director's fleet/skills comparison (Anthropic skill best-practices: write ≥ 3 evals before long prose; objectui ships 11 json / 33 questions, objectstack ships 1 json / 5 questions).
Readings (director seat,
origin/main40626bdca6, 2026-09-22T10:3xZ)skills/*/evals/exists in 3 of 10 skills:objectstack-automation/evals/approvals/test-revise-loop.md(one markdown case),objectstack-data/evals/README.md(「objectstack-ui/evals/analytics-inline-vs-dataset.json(5 questions) + README. The other 7 skills have no evals directory./home/user/objectui/skills/objectui/evals/app-composition.json:{ "skill_name": "…", "evals": [ { "id": 1, "prompt": "…", "expected_output": "…", "files": [], "assertions": { "must_contain": [ … ], "must_not_contain": [ … ] } } ] }.Ruled shape — ⛔ not open for re-design
skills/getsskills/<skill>/evals/<topic>.jsonfiles in exactly the shape above, ≥ 3 evals per skill,skill_name= the skill's frontmattername, ids unique per file.must_not_containnames the wrong spelling the skill exists to prevent (retired keys, wrong casing, page-wrapping-a-view, etc.). Prompts are realistic authoring requests;expected_outputstates the shape an agent following the skill must emit; everymust_containstring is something the skill's own text tells the agent to write.objectstack-data/evals/README.md: the placeholder sentence goes; its candidate-scenario list becomes the topics of the real fixtures.objectstack-automation's markdown case: converted to the json shape or kept beside it — the dev decides and says which in the PR body.SKILL.md,rules/**orreferences/**prose in this PR (that is the sibling card's work). ⛔ No new gate, check script, CI job or ratchet that runs the evals: they are the measuring instrument the skills seat runs by hand (or through the skill-creator tooling) before and after a skill edit — 新增门禁默认否.node -eover the directory),skill_namematches, ids unique, counts per skill (a table: skill · files · evals). If an existing runner for the objectui shape exists in either repo, run it once and paste the reading; if none exists, say so — ⛔ do not build one.skills/**/evals/**; 0 net in everySKILL.md. Over budget ⇒ stop and report, ⛔ do not trim assertions to fit.Clause-②: no(fixtures, no accept-set or public-surface change). Changeset: follow what the last mergedskills/**-only PR did (measure it:git log origin/main --oneline -10 -- skills/), and say which in the PR body.skills/**is Tier H — the maintainer merges by hand. One PR,Fixesthis card.Dedupe
skills evals objectui shape·Not yet implemented evals placeholder·skill fixtures must_contain must_not_contain·batch #213 item 2Generated by Claude Code