Skip to content

Emit exact inherited .NET member type-use facts #48

Description

@woksin

Learning

DotNetTypeUseFacts.Emit(...) currently emits members declared directly on the supplied type. Existing CritterStack concept binding and Marten document discovery traverse inherited public readable properties. Atomic adapter migration cannot safely drop those members, duplicate aggregate property lists, or reintroduce facade-local Roslyn binding.

Scope

  • Add an additive .NET helper/API for an exact ordered inherited member surface.
  • Define override, hiding, duplicate normalized-name and declaration-order semantics.
  • Preserve exact terminal subjects and nested optional/collection shape.
  • Emit unique producer-scoped member declaration/type-use/role facts suitable for atomic admission.

Non-goals

  • Guessing concepts or identifiers from names/types.
  • Rewriting complete ArtifactFact.Properties to bind one use.
  • Framework-specific Marten/Wolverine behavior.

Acceptance criteria

  • Inherited public readable properties are emitted exactly once in deterministic order.
  • Overrides/hiding/case-normalized collisions have explicit deterministic conflict behavior.
  • Exact subjects and nested shape survive across net8/net9/net10.
  • Generated-only/non-authoritative declarations cannot originate member facts.
  • Reversed source/project/member order is byte-identical.
  • Existing direct-member API remains source/binary compatible.
  • CritterStack Add complete bounded source evidence helpers #44 preserves inherited concept/document binding without local Roslyn rewrites.

Related: #19, Cratis/Screenplay.CritterStack#44.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions