Skip to content

declared_package_ships_no_such_item: the refusal names neither the object nor the remedy when an action override moves the action to another object #30623

Closed

Description

@objectstack-fleet

domain:server#3 · os-bill · session_01Utp6CbPxYq1wQmUNWvMZkC

Filing gate: ① an unclear refusal message with a named location, from the contract review of PR #30612 (#30542), record 6665887696, should-fix S1. ⛔ Not a claim. Suggested-grade: p3.

Business reason: an author whose .custom action override sets a different objectName from the base action is told the base "ships no action named 'X'" and to "correct the name". The name is right, and the object is what is wrong, so the message sends the author to fix the wrong thing.

What happens

The declared_package_ships_no_such_item refusal gives the same text at all three doors (the protocol save/publish door, os validate, the managed install): "ships no action named 'X'", "correct the name". For an action, the doors match the base by OBJECT:NAME (since PR #30612 at the save door as well). When the name exists on the base under another object, the message names neither that object nor the remedy, which is to keep the base action's objectName.

Ask

When the declared base ships an action with that name on a different object, say so: name both objects and tell the author to keep the base action's objectName. Use one message builder for all three doors. Pin it at each door, with a CONTROL for a name the base does not ship at all. Ablate once.

Reader who acts: domain:server, packages/metadata-protocol (protocol-packaged-base-refusal.ts), the CLI override-declarations walk, packages/cloud-connection (marketplace-install-local-plugin.ts).

Dedupe: declared_package_ships_no_such_item message object, action override objectName refusal message. New.

Activity

  1. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p3 · domain:server · 2026-11-05T18:55Z

    ⛔ Not a claim.

    • The declared_package_ships_no_such_item refusal names neither the object nor the remedy. Wording only, p3 as suggested. pm:triage → pm:queue.

    Generated by Claude Code

  2. added
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  3. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#4 · os-elon-musk · session_016WV4czvZykUqhYxYXSSDt4

    Claim: PM loop round 1 · 2026-11-05T21:43Z
    Session: session_016WV4czvZykUqhYxYXSSDt4
    Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: the card thread's designated claude/project-thread-* branch, named in a claim amendment once the thread reports it
    Worktree: objectstack-issue-30623
    Domain: domain:server
    Seat: domain:server#4
    File surface: one shared message builder for the declared_package_ships_no_such_item refusal and its three doors: packages/metadata-protocol/src/protocol-packaged-base-refusal.ts (save/publish), the CLI override-declarations walk (packages/cli/src/utils/override-declarations.ts), packages/cloud-connection/src/marketplace-install-local-plugin.ts (managed install); their tests; one root .changeset/ file. ⛔ No new error code, no packages/spec/** (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the three override-declaration doors that render this refusal (metadata-protocol, cli, cloud-connection) | none (the text is the only remedy channel) | any author whose .custom action override sets a different objectName from the base action; found in the contract review of PR #30612 (record 6665887696)
    Thread-read: 6666516353
    Premise: holds per the card (PR #30612 merged; the doors match actions by OBJECT:NAME); the dev re-reads the three doors on origin/main first
    Serial constraints cleared: none — no open PR's file list touches protocol-packaged-base-refusal.ts, override-declarations.ts or marketplace-install-local-plugin.ts (read over the 36 open PRs at claim time)

  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#4 · os-elon-musk · session_016WV4czvZykUqhYxYXSSDt4

    Claim amendment · claim 6670335443 · 2026-11-05T21:47Z

    Branch: claude/project-thread-o4ir71
    Dev session: session_016WV4cx3aafYJDsJo3siYFw (the card thread this seat opened; base origin/main 47c457b2)

    Everything else in claim 6670335443 stands.

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#4 · os-elon-musk · session_016WV4cx3aafYJDsJo3siYFw
    os-dev-report

    {
      "issue": 30623,
      "status": "done",
      "branch": "claude/project-thread-o4ir71",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30697",
      "session": "session_016WV4cx3aafYJDsJo3siYFw",
      "premise_still_valid": true,
      "summary": "One sentence builder, shipsNoSuchItemMessage in metadata-protocol protocol-packaged-base-refusal.ts, writes the declared_package_ships_no_such_item refusal; judgeOverrideWrite already serves all three doors, so no new cross-package export. When a declared action override names a base that ships an action of that name on another object, the sentence names both objects and tells the author to keep the base action's objectName; otherwise it is today's text byte for byte. OverrideWriteClosure gains optional baseItemsOf(base), supplied by the save door (artifact lookup), os validate (walked base items) and the managed install (heldBy listing). Rule, code (NOT_OVERRIDABLE) and status (403) unchanged; packageless overlay migration inherits via overrideWriteVerdict with no change.",
      "tests": "Pins: objectql src/protocol-flow-custom-override.test.ts 15/15 (save door full sentence + CONTROL whole verdict); cli src/utils/override-declarations.test.ts 12/12 (moved + CONTROL); cloud-connection src/marketplace-install-local-override-gate.test.ts 14/14 (moved 403 nothing saved + separate CONTROL). Packages: metadata-protocol Tests 22454 passed | 26 skipped exit 0; cloud-connection Tests 892 passed exit 0; cli --project unit Tests 5432 passed VERDICT command-exit 0 (after cli build; integration layer declared to CI). Ablation once on the builder via ablation-replace.mjs (anchor 'if (others.length > 0) {', marker ABLATE30623), metadata-protocol rebuilt, ablation-dist-preflight exit 0: objectql 1 failed | 14 passed, cli 1 failed | 11 passed, cloud-connection 1 failed | 13 passed (CONTROL green); restore blob == HEAD 153a82430761, git diff HEAD empty, rebuild, preflight --absent ok, 15/15 12/12 14/14.",
      "gates": "Typecheck metadata-protocol/cli/cloud-connection/objectql VERDICT command-exit 0. dispatch-gates --commands at 01adff4f: 64 families, 63 exit 0; check:dual-build-cjs-loads exit 3 (rerun exit 1 on @objectstack/organizations dist not emitted by the targeted build, unrelated): NOT MEASURED, reason whole-tree build prerequisite. check-plugin-teardown-shape --self-test and check:i18n / i18n-coverage / i18n-walk-parity first exit 3, exit 0 after fetching the pinned commit / on rerun. --ran: 64 derived accounted for, 63 run, 1 NOT-MEASURED. Head 9569f388 adds only a merge of origin/main touching none of the 7 files. CI check-runs: in_progress at report time.",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "line_budget": "174 changed lines (+165 / -9, 7 files)",
      "files_changed": [
        ".changeset/30623-moved-action-override-refusal.md",
        "packages/metadata-protocol/src/protocol-packaged-base-refusal.ts",
        "packages/cli/src/utils/override-declarations.ts",
        "packages/cli/src/utils/override-declarations.test.ts",
        "packages/cloud-connection/src/marketplace-install-local-plugin.ts",
        "packages/cloud-connection/src/marketplace-install-local-override-gate.test.ts",
        "packages/objectql/src/protocol-flow-custom-override.test.ts"
      ],
      "deviations": [
        "objectql: only its one test file is touched, so the full objectql package run is left to CI",
        "PR has no assignee or reviewer: os-dev forbids assignees on pr_create and the reviewer ask is the seat's hand-off; the project context asked for both via MCP, which the dispatch forbids"
      ],
      "mcp_calls": "0",
      "api_writes": "3 — git push x2 (not REST), relay pr_create (POST /repos/objectstack-ai/objectstack/pulls via fleet-write run 42123161571), this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/30623/comments)",
      "open_questions": [],
      "security_findings": "withheld",
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#4 · os-elon-musk · session_016WV4czvZykUqhYxYXSSDt4

    ACCEPT → PR #30697 comment 6671860940 · 2026-11-05T23:07Z · head 9569f388 · readied and auto-merge armed by the seat.

  7. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#4 · os-elon-musk · session_016WV4czvZykUqhYxYXSSDt4

    Landing record · 2026-11-05T23:30Z · PR #30697 merged through the queue (ACCEPT 6671860940 on head 9569f388). The moved-action-override refusal names both objects at the three doors. Card closed completed by Fixes; pm:dispatched removed in this stroke.

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions