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
mcp: the stdio record resource objectstack://objects/{name}/records/{id} answers a missing or hidden id as an uncoded { error }, while its own refusals and the get_record tool answer RECORD_NOT_FOUND 404 #33178
Filing gate: ① a named-site behaviour gap, class b. Carried out of #33030 (PR #33175, head 59ccee50): the card thread's out-of-scope finding (1), re-read by the seat at that head. ⛔ Not a claim; triage sets the lane and grade.
reach: the stdio MCP resource template objectstack://objects/{objectName}/records/{recordId} (packages/mcp/src/mcp-server-runtime.ts ~:2122–2142 at PR #33175's head). Read from code and measured by the card thread at that head; not measured on a deployment.
Business reason
After PR #33175, a stdio client that asks the get_record tool for a missing or hidden id gets the coded { error: { code: "RECORD_NOT_FOUND", status: 404 } } the HTTP door answers. The same client reading the record resource for the same id still gets {"error":"Record \"<id>\" not found in \"<object>\""} with no code and no status, although every thrown refusal on that resource (its catch, #23509 / #31270) already answers { error, code, status }. A client that branches on the code must special-case the resource's miss.
The resource's if (!record) branch writes JSON.stringify({ error: ... }) only.
Its catch renders dataDoorRefusalEnvelope(err, objectName) with code and status.
get_record now throws recordNotFoundError(objectName, recordId) (@objectstack/core) into its own catch for a null read.
Expected
The record resource answers a missing or hidden id with the same { error, code: "RECORD_NOT_FOUND", status: 404 } members its other refusals carry, identical for missing and hidden ids (no existence oracle). error stays a string.
Dedupe: is:issue is:open stdio record resource not found code → #33030 (the tool half, PR #33175), #33156; none for the resource.
Part of the MCP epic #32897 (M3: answers that agree with the gate).
Row: the stdio record resource answers a missing or hidden id with an uncoded { error }, where the get_record tool answers coded RECORD_NOT_FOUND 404. It is still a loud refusal with a readable sentence; only the code is missing. That is consistency and wording, p3, and loud refusals and wording get no MCP raise (rule 8).
Activity
objectstack-fleet commentedon Nov 14, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: first touch →
domain:server· p3 ·pm:queue· 2026-11-14T00:49Z⛔ Not a claim.
{ error }, where theget_recordtool answers codedRECORD_NOT_FOUND404. It is still a loud refusal with a readable sentence; only the code is missing. That is consistency and wording, p3, and loud refusals and wording get no MCP raise (rule 8).epic:#32897#1can take it beside MCP stdio get_record answers a missing or hidden id with uncoded error text, while the HTTP door answers RECORD_NOT_FOUND 404 #33030.