Namespace-Prefix und V7GUID-Identitätsmodell
Architektur-Entscheidung vom 2026-07-26. Dokumentiert in
GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md.
Ausgangsfrage
Soll der lange C#-Namespace-Prefix GitCover.Discovery für eine spätere OSS-Veröffentlichung beibehalten oder gekürzt ohne Prefix (Discovery.*) gearbeitet werden?
Hintergrund: Bei dynamischer Zusammenarbeit zwischen Developern, AI Agents und MCP Services, die alle dynamisch miteinander arbeiten, könnten „absolute" Namespaces die Grenzen verwischen — denn das V7GUID-Konzept nutzt die ersten 48 Bit für die Tenant-ID und Typen werden mindestens auf der Tool-Ebene registriert, können aber auf Tenant- oder Repo-Ebene (Organisations-Ebene) re-definiert werden, damit bei GCEP zwischen Repos Eindeutigkeit herrscht, unabhängig von DLL-Versionen oder Prozess-Instanzen.
Das V7GUID-Identitätsmodell
Das V7GUID-Konzept legt Identität und Typisierung vollständig auf der Bit-Ebene fest:
Tenant-Identität (Bits 0–47)
Die Tenant-Identität leitet sich aus dem 48-Bit-Zeitstempel der Gründungs-UUIDv7 ab. Sie ist deterministisch in der GUID kodiert — der C#-Namespace transportiert keine zusätzliche Identitätsinformation.
repository_id (Bits 52–63, 12 Bit, 0–4095)
Adressiert ein Repository innerhalb eines Tenant-Kontexts. Pro Tenant gibt es genau ein TOP-Repository (id=1) und bis zu 4.095 weitere. Die Eindeutigkeit herrscht durch die repository_id, nicht durch den C#-Namespace.
kind (Bits 114–121, 8 Bit) — zentrale normative Registry
Normiert die Art der Tätigkeit repo-übergreifend und ersetzt lösungsspezifische Enums (RepoKind, ArtifactKind in GitCover.Discovery; Prozesstyp in GCP.Portfolio; Type in GCPN). Die zentrale kinds.json wird im OSS-Normative-Root (git.gitcover.org/OSS/TOP/.gitcover/dictionaries/) gepflegt.
Dual-Identifier (classification, uuid)
Trennt Class Identifier (was/Typ, deterministisch in Bits kodiert) und Object ID (welches konkrete Objekt, reines uuidv7). Beide zusammen bilden den Composite Key — der Namespace ist darin nicht enthalten.
Warum der Namespace-Prefix neutral ist
Der C#-Namespace-Prefix GitCover. suggeriert eine „absolute Identität", die im V7GUID-Modell nicht vorgesehen ist. Er ist für das Identitäts- und Typisierungsmodell neutral:
- MCP registriert Tool-Namen, nicht C#-Namespaces.
- GCEP referenziert über V7GUID, nicht über C#-Bezeichner.
- Die Typ-Eindeutigkeit herrscht durch die Dictionary-Registry (
kinds.json), nicht durch den C#-Namespace. - Eine Re-Definition von Typen auf Tenant- oder Repo-Ebene (Sentinel
255= Custom/TenantDefined) erfolgt im Dictionary, nicht im C#-Namespace. Der Namespace-Prefix kann diese Re-Definition nicht unterlaufen.
Gründe für die Beibehaltung
| Argument | Begründung |
|---|---|
| Markenkonsistenz | Alle 18 Solutions in Development/Solutions/ nutzen den Prefix (bis auf historische Ausnahmen wie GCP/GCEP). Für die OSS-Veröffentlichung unter git.gitcover.org/GCC-OSS/<repo> signalisiert GitCover.* die Herkunft. |
| NuGet-Kollisionsfreiheit | Ein schlichtes Discovery.* kollidiert leicht mit Drittanbieter-Paketen; GitCover.Discovery ist global eindeutig. |
| Lizenz-Sichtbarkeit | Das IPLicensing-Modell (Open-Core, Field-of-Use-Taxonomie) benutzt den Namespace als Marker für Herkunft und Lizenz-Zugehörigkeit. |
| Solution-Ökosystem-Konsistenz | Solution-übergreifende Bundles (GCEP-Federation, MCP-Hub) referenzieren heute GitCover.Core, GitCover.V7Guid — ein gekürzter Namespace bricht diese Kette. |
Konsequenz für die dynamische Zusammenarbeit
Der C#-Namespace ist kein Identitätsmedium für:
- MCP-Tool-Registrierung: Ein MCP-Server, der ein Tool aus
GitCover.Discovery.Apiund eines ausGitCover.Accountant.Apiregistriert, konfligiert nicht — die Tool-Namen sind separat, und die V7GUID-Typen sind in der zentralen Registry eindeutig. - GCEP-Federation: Referenziert über V7GUID (Class Identifier + Object ID), nicht über C#-Namespaces.
- AI-Agent-Interaktion: AI Agents arbeiten mit Tool-Namen und V7GUID-referenzierten Artefakten, nicht mit C#-Namespaces.
- Re-Definition auf Tenant-/Repo-Ebene: Der Sentinel
255(Custom/TenantDefined) verweist deterministisch auf eine tenant-eigene Definition im Dictionary — unabhängig davon, ob der C#-NamespaceGitCover.Discovery.*oderDiscovery.*lautet.
Fazit
Der C#-Namespace-Prefix GitCover. wird als Bezeichner-Konvention beibehalten — nicht als Identitätsmedium. Identität und Typ-Eindeutigkeit herrschen durch das V7GUID-Modell (Tenant-ID in Bits 0–47, repository_id in Bits 52–63, kind-Registry in Bits 114–121). Der Prefix ist für die dynamische Zusammenarbeit zwischen Developern, AI Agents und MCP Services neutral — er transportiert keine Identitätsinformation, die nicht ohnehin in der V7GUID deterministisch kodiert ist.
Quellen
- V7GUID-Spec:
specs/v7guid/00_gesamtkarte.md(128-Bit-Karte) - V7GUID-Spec:
specs/v7guid/33_kind.md(kind-Feld, zentrale Registry) - V7GUID-Spec:
specs/v7guid/12_repository_id.md(Repo-Scope) - V7GUID-Spec:
specs/v7guid/90_dual_identifier.md(Dual-Identifier) - ADR-002:
specs/v7guid/ADR-002_layout_v2_kind.md(kind-Konsolidierung) - OSS-Normative-Root:
git.gitcover.org/OSS/TOP/.gitcover/dictionaries/kinds.json - IPLicensing-Modell:
REPOS/AFJD/IPLicensing/03_OSS_MODEL.md - ADR im Solution-Repo:
Development/Solutions/GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md