Skip to content

[P1] Introduce canonical ObjectKey and ambiguity-safe object resolution #7

Description

@jackyclever

CLI/Core scope

Use one qualified identity contract across discovery, methods, source, relations, extensions, references, and future generation.

Split from Aether #7. Aether remains responsible for retaining and validating the resolved identity across a reasoning workflow.

Current problem

Name-only lookup and first-row/default-kind behavior are unsafe where Microsoft, ISV, and customer packages contain overlapping object names or kinds.

Acceptance criteria

  • Define a stable ObjectKey = { objectType, package, model, name }.
  • Discovery returns all qualified candidates and preserves original casing.
  • Final resolution follows D365FO case semantics without discarding package/model identity.
  • Ambiguity returns a structured candidate list; never silently select the first row or default kind.
  • Method, source, relation, extension, reference, and generation queries accept and return the same ObjectKey.
  • Inheritance and extension target resolution preserve identity at each hop.
  • Tests cover same names across types/models/packages, casing variants, missing objects, and stale indexes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions