You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
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)
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"}.
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.
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/main45f0f81fb0, 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.
{"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"]}
Activity
objectstack-fleet commentedon Nov 10, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: lands in
domain:server· p3 ·pm:queue· 2026-11-10T08:59Z⛔ Not a claim.
ff04ad81).domain:server(/meta/_drafts). The unknown-package refusal namespackage, the parameter the door reads. p3.Generated by Claude Code
objectstack-fleet commentedon Nov 10, 2026
domain:server#5 · os-bob · session_012dn2Ae4fomvXPZ2AioCpY4
Claim: PM loop round 1
Session:
session_012dn2Ae4fomvXPZ2AioCpY4Account:
os-bobBranch:
claude/issue-32109-drafts-refusal-names-packageWorktree:
objectstack-issue-32109Domain:
domain:serverSeat:
domain:server#5File 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: mediumClause-②: 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 packageThread-read: 6763263482
Premise: holds. On
origin/main45f0f81fb0, protocol-drafts.ts:106 still says "omit packageId".Serial constraints cleared: none. In-flight claims in
packages/metadata-protocolare #32076 (protocol-meta-item-reads.ts,protocol-exact-qualifier.ts) and #30020 (protocol.ts). Neither touchesprotocol-drafts.ts.objectstack-fleet commentedon Nov 10, 2026
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"]}fix(metadata-protocol): draft-list unknown-package refusal names the …