Skip to content

Scoped node identity: name + declared discriminator set (default project; empty = global) #117

Description

@CheeryProgrammer

Part of #113 (Layer 1 — core).

Node identity stops being global-by-name. Identity = name + discriminator set.

  • Discriminators = a small, curated, declared vocabulary of identity-bearing
    axes (project, env, client, version). Default discriminator = project
    (auto, from #auto-tagging). Per-type override (e.g. Config keyed by
    project+env; Vendor keyed by nothing = global).
  • Empty discriminator set = global/shared — one node accrues facts across all
    projects (Postgres, GDPR, gRPC).
  • Facets (all other props/tags: topic, source, status) are free & dynamic and
    are NOT part of identity — navigating/filtering only.
  • Upsert (InsertNode) matches on name + discriminators, not name alone.

Migration (discriminator storage on nodes) + store upsert change + core wiring.

Acceptance: Config{project:goroutly} and Config{project:brainiac} are two
distinct nodes; adding a facet tag to a node does not fork its identity;
Postgres (empty discriminators) is a single global node.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions