diff --git a/gitnexus/src/core/lbug/schema.ts b/gitnexus/src/core/lbug/schema.ts index 0b0c27e6b..4d6b490de 100644 --- a/gitnexus/src/core/lbug/schema.ts +++ b/gitnexus/src/core/lbug/schema.ts @@ -492,6 +492,8 @@ export const STRUCTURAL_PAIR_DDL = ` FROM File TO Folder, FROM \`Impl\` TO \`Impl\`, FROM \`TypeAlias\` TO \`Trait\`, FROM \`TypeAlias\` TO Class, + FROM \`TypeAlias\` TO \`Property\`, + FROM \`TypeAlias\` TO Method, FROM \`Record\` TO Method, FROM \`Record\` TO \`Constructor\`, FROM \`Record\` TO \`Property\`, diff --git a/gitnexus/test/integration/structural-pair-coverage.test.ts b/gitnexus/test/integration/structural-pair-coverage.test.ts index 0d525fc2f..09226d0d4 100644 --- a/gitnexus/test/integration/structural-pair-coverage.test.ts +++ b/gitnexus/test/integration/structural-pair-coverage.test.ts @@ -109,6 +109,18 @@ const NON_BRIDGE_CORPUS = [ emitter: 'tools-phase HANDLES_TOOL', sentinels: ['Class|Tool'], }, + { + // A TypeScript object-type alias owns its members, so it emits + // HAS_PROPERTY from a `TypeAlias` — a label on the ELEVEN-table list this + // suite exists for, and one no rule reaches. Shipped once without the pair + // declared: emit threw `UndeclaredRelationPairError` and the whole analyze + // died on any repo containing `type X = { ... }`. Every resolver test still + // passed, because they build an in-memory graph and never write to the DB — + // this suite is the only place that difference shows up. + fixture: 'typescript-alias-fields', + emitter: 'object-type alias HAS_PROPERTY', + sentinels: ['TypeAlias|Property', 'Interface|Property'], + }, ] as const satisfies readonly CorpusEntry[]; /*