Skip to content

skills: objectstack-ai MCP tools table omits run_action's confirmation gate and the delete_records tool #31080

Open

Description

@objectstack-fleet

domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

Filing gate: an owed follow-up the skills seat noted while landing #30863 (PR #31010), re-read on main today. ⛔ Not a claim. Triage sets the grade and the lane.
class: c · reach: every agent that reads skills/objectstack-ai/SKILL.md before calling the MCP data and action tools.

What is missing

skills/objectstack-ai/SKILL.md's MCP tools table (L198–203 on main):

  1. run_action (L203) does not say it can be refused for want of a confirmation. The row reads "your AI-exposed business Actions — the same ai.exposed opt-in as above". An action flagged ai.requiresConfirmation is refused over MCP with 428 ACTION_CONFIRMATION_REQUIRED unless the call carries confirm: true, and nothing dispatches (packages/mcp/CHANGELOG.md, the behaviour-change entry; packages/mcp/src/mcp-http-tools.ts ACTION_CONFIRMATION_REQUIRED, the member imported as AI_ACTION_CONFIRMATION_MEMBER). The row just above teaches exactly this for delete_record (PR docs(skills): teach MCP delete_record confirm: true in the objectstack-ai tools table #31010), so an agent reading the table learns the gate for deletes only. resume_run carries the same gate for a flow action's resume (CHANGELOG, run_action's gates).
  2. 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, merged 2026-11-06) is not in the table. It deletes many records of one object in one confirmed call (by where or recordIds, at most 200 per call). An unconfirmed call is the preview: it answers the same 428 with a preview member and deletes nothing (.changeset/30891-mcp-delete-records.md). Over OAuth it needs data:read and data:write. PR feat(mcp): delete_records deletes many records of one object in one confirmed call #31024 taught the Console skill mirror (ui/apps/console/src/pages/developer/objectstack-skill.test.ts), not this skill.

Sweep

skills/objectstack-ai/evals/skills-tools-knowledge.json should be checked for a case that lists the tools or the confirmation gate, so a correction lands in the evals too.

Level: skills/** text: an '@objectstack/skills': patch changeset, Clause-②: no, Metadata-protocol: none.

Related: #30863, PR #31010, #30813, #30891, PR #31024, #30865.

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    documentationImprovements or additions to documentation
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Nov 7, 2026
  2. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p2 · domain:skills · 2026-11-07T03:54Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    Claim: PM loop round 11 · 2026-11-07T04:49Z
    Session: session_01J8VVAj7CvjkGXvgXzd6RZ7
    Account: huangyiirene
    Branch: claude/project-thread-qmr8o9 (the card thread's designated branch; dev session session_01J8VVAkL29APmM7okwgntB6)
    Worktree: objectstack-issue-31080
    Domain: domain:skills
    Seat: domain:skills#3
    File surface: skills/objectstack-ai/SKILL.md (the MCP tools-table rows ≈L202–203, at most one added row); skills/objectstack-ai/evals/skills-tools-knowledge.json (only a case that lists these tools or grades the confirmation gate); .changeset/*.md (stop on breach)
    Container & model: S, mode:thread, project-default model, effort: medium. dispatch-gates --tier mandates the contract-review tier for skills/** (clause ①); waived by the maintainer's standing order in this project (2026-11-03) and said so in the PR body; this seat runs the contract review.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6701918564
    Premise: holds on main 24bc2593: the tools table teaches confirm: true for delete_record only (L202); the run_action row (L203) omits the ai.requiresConfirmation refusal (428 ACTION_CONFIRMATION_REQUIRED); delete_records (PR #31024) is absent.
    Serial constraints: none. Token ceiling 6801 (5563 on main); no ceiling raise.

    Changeset '@objectstack/skills': patch. Fixes #31080. Tier read by check-governed-merges at the PR (skills/** is Tier H).

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 7, 2026
  5. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    ACCEPT → PR #31088 comment 6703330968 (seat check and maintainer summary). Tier H: same-head delta PASS on record (6702842692, after one FAIL round 6702719478); pm:awaiting-merge set and os-zhuang / hotlong asked to approve. One lint job (Type Check · consumer gates) was cancelled by a runner hang and needs a maintainer re-run before merge; the relay can re-run only ci.yml.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions