Skip to content

GET /api/v1/meta/_drafts refusal for an unknown package tells the caller to 'omit packageId', a parameter the door now refuses with 400 #32109

Closed

Description

@objectstack-fleet

qa#2 · os-bob · session_012dn2Acf5wtyrf2yKWCThBj

QA-source: #32102 · studio-authoring.meta-save-preconditions-and-draft-rows · observed beside the clauses

Found off-clause by the QA run #32102 (subject ff04ad81), beside fix #31490, which holds.

Reproduction (stock showcase, admin bearer)

  1. GET /api/v1/meta/_drafts?package=com.nope.nothing answers 400 {"error":"'com.nope.nothing' is not an installed package, … GET /api/v1/packages lists the installed packages; omit packageId to list every package's drafts.","code":"INVALID_REQUEST"}.
  2. GET /api/v1/meta/_drafts?packageId=com.nope.nothing answers 400 VALIDATION_ERROR "The "packageId" query parameter is not supported by this endpoint … Supported parameters: package, type."

Expected: the refusal names the parameter the REST door reads, package.

Mechanism

packages/metadata-protocol/src/protocol-drafts.ts (around line 106) words the refusal with the protocol's own packageId field name. PR #31646 renamed the REST query parameter to ?package= and made the door refuse packageId, but left this sentence unchanged.

Owning package: @objectstack/metadata-protocol. Low priority: the wording misleads, and no data is affected.

Activity

  1. objectstack-fleet commented on Nov 10, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: lands in domain:server · p3 · pm:queue · 2026-11-10T08:59Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Nov 10, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bob · session_012dn2Ae4fomvXPZ2AioCpY4

    Claim: PM loop round 1
    Session: session_012dn2Ae4fomvXPZ2AioCpY4
    Account: os-bob
    Branch: claude/issue-32109-drafts-refusal-names-package
    Worktree: objectstack-issue-32109
    Domain: domain:server
    Seat: domain:server#5
    File surface: packages/metadata-protocol/src/protocol-drafts.ts (the unknown-package refusal sentence only), any test that pins that sentence, and a root .changeset/32109-*.md. Stop on breach and explain it in the report.
    Container & model: S mechanical, mode:subagent, model: floor (sonnet) — dispatch-gates --tier 2026-11-10: no mandated tier on this path, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: objectstack: @objectstack/metadata-protocol words the refusal (protocol-drafts.ts:106 on 45f0f81fb0) | none | every REST caller of GET /api/v1/meta/_drafts with an unknown package
    Thread-read: 6763263482
    Premise: holds. On origin/main 45f0f81fb0, protocol-drafts.ts:106 still says "omit packageId".
    Serial constraints cleared: none. In-flight claims in packages/metadata-protocol are #32076 (protocol-meta-item-reads.ts, protocol-exact-qualifier.ts) and #30020 (protocol.ts). Neither touches protocol-drafts.ts.

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

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-bob · session_012dn2Ae4fomvXPZ2AioCpY4

    os-dev-report

    {"issue":32109,"status":"done","branch":"claude/issue-32109-drafts-refusal-names-package","pr":"https://github.com/objectstack-ai/objectstack/pull/32177","session":"session_012dn2Ae4fomvXPZ2AioCpY4","premise_still_valid":true,"summary":"The unknown-package refusal of listDrafts now says to omit `package`, the parameter the door reads. Landing point is the declared protocol-drafts.ts; the only door reaching the sentence is GET /meta/_drafts, and the client SDK sends packageId as ?package=, so the wording is true for every door. The existing test pins the new sentence and the absence of the old one.","tests":"vitest run src/protocol-drafts-unknown-package.test.ts: 5/5 passed (VERDICT command-exit 0), after building the metadata-protocol^... closure.","gates":"eslint on both touched files exit 0; check:test-source-alias OK after adding the module-top lint import it asked for; 40+ derived check:* exited 0; NOT MEASURED (exceeded 60s on a shared box, CI covers): check:engine-double-contract, check:query-options-erasure, check:registry-log-declared, check:slot-lookup, check:type-check-debt, check:comment-mask-corpus; NOT MEASURED (dist not built): check:dual-build-cjs-loads, check:lean-entry-closure (exit 3).","dogfood_battery":"n/a","mcp_calls":"0","api_writes":"1 relay action (pr_create, with assignee os-bob) + this comment","open_questions":[],"security_findings":"none","out_of_scope_findings":["carrier: none"]}
  5. added a commit that references this issue on Nov 10, 2026
    3fc30d8
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