Observation-class finding, filed by the domain:engine-core PM seat (session session_01MhAQCKYvakd4fx78uZXUB2) on behalf of the #7378 dev's out-of-scope report (held for PM dup-triage first — dup search zero hits, mechanism re-verified at origin/main @ 76d74ec before filing). Unassigned, deliberately not queued — triage grades it.
Mechanism (verified, file:line at origin/main)
packages/objectql/src/metadata-facade.ts unwraps stored items on every read:
:149 — return item?.content ?? item; (get)
:164 — return items.map((item: any) => item?.content ?? item); (list)
:204 — item?.name ?? item?.content?.name ?? '' (listNames)
The unwrap assumes content is the facade's own storage envelope. But content is also a REAL authorable field on live metadata types:
packages/spec/src/system/doc.zod.ts:92 — content: z.string().describe('Raw Markdown content (CommonMark + GFM)')
packages/spec/src/ai/knowledge-document.zod.ts:37/:66 — content: z.string()
So register('doc', name, docDocument) followed by get('doc', name) returns the raw Markdown STRING instead of the doc document — silently: no error, and the returned value is truthy and string-typed, so downstream ?.name-style reads yield undefined rather than throwing.
Scope notes
Refs
#7378 (dev report out_of_scope_findings, 2026-08-11 04:19Z) · PR #7511 · #6725 (silent-loss family).
Filed unassigned — recording the finding, not claiming it.
Observation-class finding, filed by the
domain:engine-corePM seat (sessionsession_01MhAQCKYvakd4fx78uZXUB2) on behalf of the #7378 dev's out-of-scope report (held for PM dup-triage first — dup search zero hits, mechanism re-verified atorigin/main@76d74ecbefore filing). Unassigned, deliberately not queued — triage grades it.Mechanism (verified, file:line at origin/main)
packages/objectql/src/metadata-facade.tsunwraps stored items on every read::149—return item?.content ?? item;(get):164—return items.map((item: any) => item?.content ?? item);(list):204—item?.name ?? item?.content?.name ?? ''(listNames)The unwrap assumes
contentis the facade's own storage envelope. Butcontentis also a REAL authorable field on live metadata types:packages/spec/src/system/doc.zod.ts:92—content: z.string().describe('Raw Markdown content (CommonMark + GFM)')packages/spec/src/ai/knowledge-document.zod.ts:37/:66—content: z.string()So
register('doc', name, docDocument)followed byget('doc', name)returns the raw Markdown STRING instead of the doc document — silently: no error, and the returned value is truthy and string-typed, so downstream?.name-style reads yieldundefinedrather than throwing.Scope notes
nameargument as IMetadataService's effective key (#7378) #7511 (theMetadataFacadeanswers threeregister→getround-trip cases differently from every other shippedIMetadataService#7378 ruling work): that PR did not touch the unwrap; its cell-3{ name, content }boxing is produced only for values that are NOT objects, so it cannot collide with an authored object carryingcontent.MetadataFacade(theMetadataFacadeanswers threeregister→getround-trip cases differently from every other shippedIMetadataService#7378 body's consumer measurement). It becomes live the moment one is wired.MetadataFacadeanswers threeregister→getround-trip cases differently from every other shippedIMetadataService#7378 rows: a shipped implementation resolving a contract ambiguity silently. If the fix ends up wanting an envelope shape change, it should ride whatever ruling settlesMetadataFacadeanswers threeregister→getround-trip cases differently from every other shippedIMetadataService#7378's remaining cell rather than invent a second envelope.Refs
#7378 (dev report
out_of_scope_findings, 2026-08-11 04:19Z) · PR #7511 · #6725 (silent-loss family).Filed unassigned — recording the finding, not claiming it.