Repository navigation
docs(skills): objectstack-ai MCP tools table teaches run_action/resume_run's confirmation gate and delete_records - #31088
objectstack-fleet[bot] wants to merge 2 commits into
Conversation
…n and the delete_records tool objectstack-ai's MCP tools table taught `confirm: true` for delete_record only. The actions row now names resume_run and says an action flagged ai.requiresConfirmation is refused with 428 unless the call sends confirm: true; a new row lists delete_records (one object, where or recordIds, at most 200 per call, the unconfirmed call is the preview, data:read and data:write over OAuth). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J8VVAkL29APmM7okwgntB6
|
domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7 Contract-review-claim: session_01J8VVAj7CvjkGXvgXzd6RZ7 · head 4669f41 · 2026-11-07T05:11Z The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent. No review seat ( |
|
domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7 Contract reviewServed-tier: Inputs: card #31080 (body, triage, claim), the PR #31088 body and file list, the net diff ① Derived judgmentsThe facts the new and edited rows teach, checked against the code on
② Semver level
③ Boundary flags
④ Design judgment
Must-fix
Should-fix
Implemented-by: VERDICT: FAIL |
…ete cap's row budget and the human in the loop The actions row now says the action tools are registered only on a bridge with listActions and runAction (none on stdio) and resume_run only with resumeRun, and to ask the human before retrying with confirm. The delete_records row names both read limits that lower its cap and says to show the preview to the human and confirm only once they approve. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J8VVAkL29APmM7okwgntB6
|
domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7 Contract-review-claim: session_01J8VVAj7CvjkGXvgXzd6RZ7 · head 6a31227 · 2026-11-07T05:28Z Delta review against the FAIL at head 4669f41 (comment 6702719478: must-fix M1, should-fixes S1–S3). The delta is one commit to the tools-table rows answering all four, plus the PR body (rewritten by the seat to match). The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent. |
|
domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7 Contract reviewServed-tier: This is a delta review against the FAIL recorded at ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Must-fix: none. M1 is resolved. Implemented-by: VERDICT: PASS |
|
domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7 维护者速读
席位核对 — ACCEPT · domain:skills#3 · head
|
Requested by Irene · project thread
Fixes #31080
Clause-②: no
Metadata-protocol: none
dispatch-gates --tierreads a MANDATORY model tier forskills/**(clause ① of the model-tiering ruling); it is waived by the standing order of the maintainer in this project (2026-11-03), and this card ran on the project's default model. The dispatching seat runs the contract review.维护者速读
skills/objectstack-ai/SKILL.md的 MCP 工具表:动作行补上resume_run和确认门(带ai.requiresConfirmation的动作不带confirm: true即 428 拒绝、不执行);新增一行delete_records(单对象、where或recordIds二选一、每次至多 200 条、未确认的调用即预览不删除、OAuth 需data:read+data:write)。delete_record的确认门,读表的 agent 不知道run_action/resume_run也会被拒,也不知道已合入的delete_records(MCP: delete records by filter in one confirmed call, with refusals grouped by reason, instead of one delete_record per row #30891, PR feat(mcp): delete_records deletes many records of one object in one confirmed call #31024)。@objectstack/skillspatch;回滚即 revert。skills/objectstack-ai/SKILL.mdL202–204,对照下文「Code sites」各行。node scripts/check-skills-token-ratchet.mjs,预期退出 0,skills/objectstack-ai/SKILL.md is 5776 tokens (ceiling 6801)。skills/**属 Tier H(人合),需要os-zhuang或hotlong的一次 approval,之后席位落地。What changes
skills/objectstack-ai/SKILL.md, MCP tools table. L202 (create_record,update_record,delete_record) is byte-identical tomain.The "ask the human first, then retry" stance stays on L202 and is repeated on both new rows; they add no gate the code lacks.
Plus
.changeset/mcp-tools-table-confirmation-gate.md:'@objectstack/skills': patch.Code sites (each taught fact, measured on
main24bc259)confirmpackages/spec/src/contracts/ai-service.ts:242AI_ACTION_CONFIRMATION_MEMBER = 'confirm'run_action: an action withai.requiresConfirmation: trueis refused with428 ACTION_CONFIRMATION_REQUIREDunless the request carriesconfirm: truepackages/runtime/src/action-execution.ts:2911actionConfirmationRefusal(code and status at :2893, :2901)packages/runtime/src/action-execution.ts:4513: the gate is the last pre-dispatch check, before the subject record is read; ask the human first: tool descriptionmcp-http-tools.ts:2255-2256,packages/mcp/src/skill-md.tsL294–317packages/mcp/src/mcp-http-tools.ts:2309(schema key),:2362(forwarded tobridge.runAction)list_actionsreportsrequiresConfirmationpackages/mcp/src/mcp-http-tools.ts:2255,:2313-2314(tool descriptions)listActionsandrunAction; the stdio bridge has neitherpackages/mcp/src/mcp-http-tools.ts:1302(wireBridgeTools);packages/mcp/src/stdio-data-bridge.tsimplements nolistActions/runActionresume_runis in theregisterActionToolsfamily, registered only when the bridge implementsresumeRunpackages/mcp/src/mcp-http-tools.ts:343-344(interface: optional),:2218-2220,:2382; the runtime bridge implements it atpackages/runtime/src/domains/mcp.ts:1027resume_runcarries the same gatepackages/runtime/src/domains/mcp.ts:1465resumeAdmissionRefusalcallsactionConfirmationRefusal; the tool's description (mcp-http-tools.ts:2394-2396) says a refused call leaves the run pauseddelete_recordsis registered byregisterObjectTools, underdata:writeanddata:readpackages/mcp/src/mcp-http-tools.ts:1924(if (canWrite)),:2033(if (canRead)),:2057whereorrecordIds, not bothpackages/mcp/src/mcp-http-tools.ts:2120-2121OS_DATA_MAX_PAGE_SIZEorOS_DATA_QUERY_ROW_BUDGETpackages/mcp/src/mcp-http-tools.ts:632DELETE_RECORDS_MAX_PER_CALL = 200,:635-648deleteRecordsCappackages/mcp/src/mcp-http-tools.ts:2062,:916,:925-933;.changeset/30891-mcp-delete-records.mdTests
None: the diff is skill teaching text with no runtime behaviour to test. The gates below are the checks.
Acceptance notes
Token budget (
node scripts/check-skills-token-ratchet.mjs, exit 0)mainskills/objectstack-ai/SKILL.mdNet lines +1 (+2 / −1) across both commits. The second commit (review fixes) rewrites only the two new rows. No ceiling moves and no payment was needed (headroom 1238 before, 1025 after).
mainmoved 4 commits after the branch point; none touches this file or the ratchet.Eval sweep
skills/objectstack-ai/evals/skills-tools-knowledge.json: no case namesrun_action,resume_run,delete_record(s),confirm,requiresConfirmationor the MCP tools list. Nothing to fix.skills/**: none. Thedelete_recordhits inskills/objectstack-automation/SKILL.mdL87 andskills/objectstack-query/rules/filters.mdL193 are flow node types, not MCP tools. Left.Verification
Local gates on 6a31227: 45 derived, 45 run with exit 0, 0 NOT MEASURED (`dispatch-gates --ran`)
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 45 commands (26 pnpm, 19 direct node) for the 2 changed paths. Each ran under a 900 s timeout withNODE_OPTIONS=--max-old-space-size=8192, its exit code captured before any pipe, after a fullpnpm build(exit 0). All 45 exited 0 on the first run.check-skills-token-ratchet.mjs,check:skill-docs,check:skill-compatibility,check:skill-frame-sync,check:skill-identifier-liveness,check:doc-authoring,check:dts-closure,check:dual-build-cjs-loads,check-changeset-no-major.mjs,check-empty-changeset.mjsandcheck-comment-mask-corpus.mjs.--ranprinted:45 derived famil(ies) accounted for — 45 run, 0 NOT-MEASURED (a DERIVED zero — all 45 recorded an exit code and none of them is 3).pnpm check:changeset-fixed(exit 0), the one artifact-roster family whose roster sits under.changeset.node scripts/pm/check-governed-merges.mjs --branch claude/project-thread-qmr8o9: GOVERNED, Tier H (人合):skills/**×1; 13 changed lines (+12 / −1), under 3000.node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD: exit 0 before every push.Human Minimum
packages/specholds no runtime logic. (No schema touched.)main, one pull request.skills/**publishes@objectstack/skills, so the PR carries a'@objectstack/skills': patchchangeset. Both declaration lines are filled in above.packages/specnot touched; nothing to regenerate.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01J8VVAkL29APmM7okwgntB6