Préfixe de namespace et modèle d'identité V7GUID

Décision d'architecture du 2026-07-26. Documentée dans GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md.

Question initiale

Faut-il conserver le long préfixe de namespace C# GitCover.Discovery pour une future publication OSS, ou travailler avec une forme raccourcie sans préfixe (Discovery.*) ?

Contexte : dans le cadre d'une collaboration dynamique entre développeurs, AI Agents et MCP Services, qui travaillent tous dynamiquement ensemble, des namespaces « absolus » pourraient estomper les limites — car le concept V7GUID utilise les premiers 48 bits pour la Tenant-ID et les types sont enregistrés au minimum au niveau de l'outil, mais peuvent être redéfinis au niveau du Tenant ou du Repo (niveau organisation), afin qu'avec GCEP l'unicité règne entre les Repos, indépendamment des versions de DLL ou des instances de processus.

Le modèle d'identité V7GUID

Le concept V7GUID fixe l'identité et le typage entièrement au niveau des bits :

Identité du Tenant (bits 0–47)

L'identité du Tenant dérive de l'horodatage 48 bits de l'UUIDv7 de fondation. Elle est codée de manière déterministe dans le GUID — le namespace C# ne transporte aucune information d'identité supplémentaire.

repository_id (bits 52–63, 12 bits, 0–4095)

Adresse un Repository au sein d'un contexte de Tenant. Par Tenant, il existe exactement un Repository TOP (id=1) et jusqu'à 4 095 autres. L'unicité est assurée par le repository_id, et non par le namespace C#.

kind (bits 114–121, 8 bits) — registre normatif central

Normalise la nature de l'activité de manière transversale aux Repos et remplace les enums spécifiques aux solutions (RepoKind, ArtifactKind dans GitCover.Discovery ; Prozesstyp dans GCP.Portfolio ; Type dans GCPN). Le fichier central kinds.json est maintenu dans la racine normative OSS (git.gitcover.org/OSS/TOP/.gitcover/dictionaries/).

Dual-Identifier (classification, uuid)

Sépare le Class Identifier (quoi/type, codé de manière déterministe en bits) et l'Object ID (quel objet concret, uuidv7 pur). Les deux forment ensemble le Composite Key — le namespace n'y figure pas.

Pourquoi le préfixe de namespace est neutre

Le préfixe de namespace C# GitCover. suggère une « identité absolue » qui n'est pas prévue dans le modèle V7GUID. Il est neutre pour le modèle d'identité et de typage :

Arguments en faveur du maintien

Argument Justification
Cohérence de marque Les 18 Solutions dans Development/Solutions/ utilisent le préfixe (hormis des exceptions historiques comme GCP/GCEP). Pour la publication OSS sous git.gitcover.org/GCC-OSS/<repo>, GitCover.* signale l'origine.
Absence de collisions NuGet Un simple Discovery.* entre facilement en collision avec des paquets tiers ; GitCover.Discovery est globalement unique.
Visibilité de la licence Le modèle IPLicensing (Open-Core, taxonomie Field-of-Use) utilise le namespace comme marqueur d'origine et d'appartenance à une licence.
Cohérence de l'écosystème de Solutions Les Bundles transversaux aux Solutions (GCEP-Federation, MCP-Hub) référencent aujourd'hui GitCover.Core, GitCover.V7Guid — un namespace raccourci brise cette chaîne.

Conséquence pour la collaboration dynamique

Le namespace C# n'est pas un support d'identité pour :

Conclusion

Le préfixe de namespace C# GitCover. est maintenu comme convention d'identifiant — et non comme support d'identité. L'identité et l'unicité des types sont assurées par le modèle V7GUID (Tenant-ID dans les bits 0–47, repository_id dans les bits 52–63, registre kind dans les bits 114–121). Le préfixe est neutre pour la collaboration dynamique entre développeurs, AI Agents et MCP Services — il ne transporte aucune information d'identité qui ne soit pas de toute façon déjà codée de manière déterministe dans le V7GUID.

Sources