Skip to content

finding: IObjectQLEngine.getSchema still returns unknown — the fork-3 defect class, one member over from the #12248 getObject fix #12481

Description

@huangyiirene

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:191getSchema(objectName: string): unknown;
  • Implementation: packages/objectql/src/engine.ts:6360getSchema(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:1592ql.getSchema(opCtx.object) as EngineOwnedSchemaLike | undefined (plus ~4 more probe sites in the same file);
  • packages/services/service-messaging/src/sql-http-outbox.ts:275engine.getSchema(this.objectName) as …;
  • packages/metadata-core/src/record-organization.ts:79,229(engine as any).getSchema(objectName);
  • packages/runtime/src/action-execution.ts:1596ql.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).

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions