Namespace Prefix and V7GUID Identity Model
Architecture decision dated 2026-07-26. Documented in
GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md.
Initial Question
Should the long C# namespace prefix GitCover.Discovery be retained for a later OSS release, or should work proceed in a shortened form without the prefix (Discovery.*)?
Background: In dynamic collaboration between developers, AI Agents and MCP Services, all of which work dynamically with one another, "absolute" namespaces could blur the boundaries - because the V7GUID concept uses the first 48 bits for the tenant ID, and types are registered at least at the tool level, but can be re-defined at tenant or repo level (organization level), so that uniqueness prevails between repos in GCEP, regardless of DLL versions or process instances.
The V7GUID Identity Model
The V7GUID concept defines identity and typing entirely at the bit level:
Tenant Identity (bits 0–47)
The tenant identity derives from the 48-bit timestamp of the founding UUIDv7. It is deterministically encoded in the GUID - the C# namespace carries no additional identity information.
repository_id (bits 52–63, 12 bits, 0–4095)
Addresses a repository within a tenant context. Per tenant, there is exactly one TOP repository (id=1) and up to 4,095 more. Uniqueness is established by the repository_id, not by the C# namespace.
kind (bits 114–121, 8 bits) - central normative registry
Standardizes the kind of activity across repos and replaces solution-specific enums (RepoKind, ArtifactKind in GitCover.Discovery; Prozesstyp in GCP.Portfolio; Type in GCPN). The central kinds.json is maintained in the OSS Normative Root (git.gitcover.org/OSS/TOP/.gitcover/dictionaries/).
Dual Identifier (classification, uuid)
Separates the Class Identifier (what/type, deterministically encoded in bits) and the Object ID (which concrete object, pure uuidv7). Together, both form the Composite Key - the namespace is not part of it.
Why the Namespace Prefix Is Neutral
The C# namespace prefix GitCover. suggests an "absolute identity" that is not provided for in the V7GUID model. It is neutral for the identity and typing model:
- MCP registers tool names, not C# namespaces.
- GCEP references via V7GUID, not via C# identifiers.
- Type uniqueness is established by the dictionary registry (
kinds.json), not by the C# namespace. - A re-definition of types at tenant or repo level (Sentinel
255= Custom/TenantDefined) takes place in the dictionary, not in the C# namespace. The namespace prefix cannot undermine this re-definition.
Reasons for Retention
| Argument | Rationale |
|---|---|
| Brand consistency | All 18 solutions in Development/Solutions/ use the prefix (apart from historical exceptions such as GCP/GCEP). For the OSS release under git.gitcover.org/GCC-OSS/<repo>, GitCover.* signals the origin. |
| NuGet collision freedom | A plain Discovery.* easily collides with third-party packages; GitCover.Discovery is globally unique. |
| License visibility | The IPLicensing model (Open Core, Field-of-Use taxonomy) uses the namespace as a marker for origin and license affiliation. |
| Solution ecosystem consistency | Cross-solution bundles (GCEP Federation, MCP Hub) currently reference GitCover.Core, GitCover.V7Guid - a shortened namespace breaks this chain. |
Consequence for Dynamic Collaboration
The C# namespace is not an identity medium for:
- MCP tool registration: An MCP server that registers one tool from
GitCover.Discovery.Apiand one fromGitCover.Accountant.Apidoes not conflict - the tool names are separate, and the V7GUID types are unique in the central registry. - GCEP Federation: References via V7GUID (Class Identifier + Object ID), not via C# namespaces.
- AI agent interaction: AI Agents work with tool names and V7GUID-referenced artifacts, not with C# namespaces.
- Re-definition at tenant/repo level: The Sentinel
255(Custom/TenantDefined) deterministically points to a tenant-specific definition in the dictionary - regardless of whether the C# namespace isGitCover.Discovery.*orDiscovery.*.
Conclusion
The C# namespace prefix GitCover. is retained as an identifier convention - not as an identity medium. Identity and type uniqueness are established by the V7GUID model (tenant ID in bits 0–47, repository_id in bits 52–63, kind registry in bits 114–121). The prefix is neutral for the dynamic collaboration between developers, AI Agents and MCP Services - it carries no identity information that is not already deterministically encoded in the V7GUID.
Sources
- V7GUID spec:
specs/v7guid/00_gesamtkarte.md(128-bit map) - V7GUID spec:
specs/v7guid/33_kind.md(kindfield, central 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(kindconsolidation) - OSS Normative Root:
git.gitcover.org/OSS/TOP/.gitcover/dictionaries/kinds.json - IPLicensing model:
REPOS/AFJD/IPLicensing/03_OSS_MODEL.md - ADR in the solution repo:
Development/Solutions/GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md