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

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

Question de départ

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

Contexte : dans le cadre d'une collaboration dynamique entre développeurs, agents IA et services MCP, qui interagissent tous dynamiquement entre eux, des namespaces « absolus » pourraient brouiller les limites — car le concept V7GUID utilise les 48 premiers bits pour l'ID de tenant et les types sont enregistrés au minimum au niveau de l'outil, mais peuvent être redéfinis au niveau du tenant ou du dépôt (niveau organisation), afin que l'unicité soit garantie entre les dépôts dans GCEP, indépendamment des versions de DLL ou des instances de processus.

Le modèle d'identité V7GUID

Le concept V7GUID définit l'identité et la typisation entièrement au niveau des bits :

Identité du tenant (bits 0–47)

L'identité du tenant est dérivée de l'horodatage de 48 bits de l'UUIDv7 de création. Elle est encodée de manière déterministe dans la GUID — le namespace C# ne transmet aucune information d'identité supplémentaire.

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

Adresse un dépôt dans le contexte d'un tenant. Par tenant, il existe exactement un dépôt TOP (id=1) et jusqu'à 4 095 autres. L'unicité est garantie par la repository_id, non par le namespace C#.

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

Normalise la nature de l'activité de manière transverse aux dépôts et remplace les énumérations spécifiques à la solution (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/).

Identifiant dual (classification, uuid)

Sépare l'identifiant de classe (quoi/type, encodé de manière déterministe dans les bits) et l'ID d'objet (quel objet concret, uuidv7 pur). Ensemble, ils forment la clé composite — le namespace n'y est pas inclus.

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 typisation :

Raisons du maintien

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

Conséquence pour la collaboration dynamique

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

Conclusion

Le préfixe de namespace C# GitCover. est maintenu en tant que convention de nommage — non comme médium d'identité. L'identité et l'unicité des types sont garanties par le modèle V7GUID (ID de tenant 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, agents IA et services MCP — il ne transmet aucune information d'identité qui ne soit déjà encodée de manière déterministe dans la V7GUID.

Sources