Found while carrying out #12248 (typing getObject per the #11833 ruling's fork 3). Filed unassigned as an observation, measured on origin/main = bb920ee089 (branch base of PR for #12248).
The observation
#12248 types IObjectQLEngine.getObject / EngineSchemaRegistryView.getObject as ServiceObject | undefined because the class has always returned that type and ServiceObject lives in spec (data/object.zod.ts), voiding the header's "engine-local type" rationale for unknown. The member ONE LINE ABOVE has the identical shape and was not in the ruled scope:
- Contract:
packages/spec/src/contracts/objectql-engine.ts:191 — getSchema(objectName: string): unknown; - Implementation:
packages/objectql/src/engine.ts:6360 — getSchema(objectName: string): ServiceObject | undefined (and getObject is literally its alias, engine.ts:12382).
The measured consumer re-narrowing (the same drift the #4251/#11493/#11833 sweeps keep finding)
Cross-package callers reading getSchema through casts or any today (grep on the base ref, non-test):
packages/plugins/plugin-security/src/security-plugin.ts:1592 — ql.getSchema(opCtx.object) as EngineOwnedSchemaLike | undefined (plus ~4 more probe sites in the same file);packages/services/service-messaging/src/sql-http-outbox.ts:275 — engine.getSchema(this.objectName) as …;packages/metadata-core/src/record-organization.ts:79,229 — (engine as any).getSchema(objectName);packages/runtime/src/action-execution.ts:1596 — ql.getSchema(objectName) under a typeof probe.
Why filed rather than fixed in #12248's PR
The 2026-08-25 ruling on #11833 names getObject (fork 3) and the three ConnectionEngineLike members (item 4); getSchema is in neither table. Typing it is the same one-line change plus the same consumer-compat verification, but it moves a contract member outside the ruled scope, so it is recorded for triage instead. Dedup: the PM's 2026-08-25 domain:spec enumeration (51 open, none covering these members) plus a branch-name scan on 2026-08-26; the REST issue-list channel is 403 from the dev seat, so the post-enumeration increment was checked by branch names only.
Refs: #12248 (the fix one member over, with the pin pattern to copy) · #11833 (the ruling) · #11493 / #4251 (the evidence bar).
Found while carrying out #12248 (typing
getObjectper the #11833 ruling's fork 3). Filed unassigned as an observation, measured onorigin/main=bb920ee089(branch base of PR for #12248).The observation
#12248 types
IObjectQLEngine.getObject/EngineSchemaRegistryView.getObjectasServiceObject | undefinedbecause the class has always returned that type andServiceObjectlives in spec (data/object.zod.ts), voiding the header's "engine-local type" rationale forunknown. The member ONE LINE ABOVE has the identical shape and was not in the ruled scope:packages/spec/src/contracts/objectql-engine.ts:191—getSchema(objectName: string): unknown;packages/objectql/src/engine.ts:6360—getSchema(objectName: string): ServiceObject | undefined(andgetObjectis literally its alias,engine.ts:12382).The measured consumer re-narrowing (the same drift the #4251/#11493/#11833 sweeps keep finding)
Cross-package callers reading
getSchemathrough casts oranytoday (grep on the base ref, non-test):packages/plugins/plugin-security/src/security-plugin.ts:1592—ql.getSchema(opCtx.object) as EngineOwnedSchemaLike | undefined(plus ~4 more probe sites in the same file);packages/services/service-messaging/src/sql-http-outbox.ts:275—engine.getSchema(this.objectName) as …;packages/metadata-core/src/record-organization.ts:79,229—(engine as any).getSchema(objectName);packages/runtime/src/action-execution.ts:1596—ql.getSchema(objectName)under atypeofprobe.Why filed rather than fixed in #12248's PR
The 2026-08-25 ruling on #11833 names
getObject(fork 3) and the threeConnectionEngineLikemembers (item 4);getSchemais in neither table. Typing it is the same one-line change plus the same consumer-compat verification, but it moves a contract member outside the ruled scope, so it is recorded for triage instead. Dedup: the PM's 2026-08-25domain:specenumeration (51 open, none covering these members) plus a branch-name scan on 2026-08-26; the REST issue-list channel is 403 from the dev seat, so the post-enumeration increment was checked by branch names only.Refs: #12248 (the fix one member over, with the pin pattern to copy) · #11833 (the ruling) · #11493 / #4251 (the evidence bar).