Prefijo de namespace y modelo de identidad V7GUID

Decisión de arquitectura del 2026-07-26. Documentada en GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md.

Pregunta inicial

¿Debe mantenerse el largo prefijo de namespace de C# GitCover.Discovery para una posterior publicación OSS o debe trabajarse acortado sin prefijo (Discovery.*)?

Antecedentes: En la colaboración dinámica entre desarrolladores, agentes de IA y servicios MCP, que todos trabajan dinámicamente entre sí, los namespaces «absolutos» podrían difuminar los límites - pues el concepto V7GUID utiliza los primeros 48 bits para la Tenant-ID, y los tipos se registran al menos a nivel de herramienta, pero pueden redefinirse a nivel de tenant o de repositorio (nivel de organización), de modo que en GCEP haya unicidad entre repos, independientemente de las versiones de DLL o de las instancias de proceso.

El modelo de identidad V7GUID

El concepto V7GUID fija la identidad y la tipificación completamente a nivel de bits:

Identidad del tenant (Bits 0–47)

La identidad del tenant se deriva de la marca de tiempo de 48 bits de la UUIDv7 fundacional. Está codificada de forma determinista en la GUID - el namespace de C# no transporta información de identidad adicional.

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

Direcciona un repositorio dentro de un contexto de tenant. Por tenant existe exactamente un repositorio TOP (id=1) y hasta 4.095 adicionales. La unicidad se rige por la repository_id, no por el namespace de C#.

kind (Bits 114–121, 8 bits) - registro normativo central

Normaliza el tipo de actividad de forma transversal entre repositorios y sustituye los enums específicos de cada solución (RepoKind, ArtifactKind en GitCover.Discovery; Prozesstyp en GCP.Portfolio; Type en GCPN). El kinds.json central se gestiona en la raíz normativa OSS (git.gitcover.org/OSS/TOP/.gitcover/dictionaries/).

Identificador dual (classification, uuid)

Separa el Class Identifier (qué/tipo, codificado de forma determinista en bits) del Object ID (qué objeto concreto, uuidv7 puro). Ambos juntos forman la clave compuesta - el namespace no está incluido en ella.

Por qué el prefijo de namespace es neutral

El prefijo de namespace de C# GitCover. sugiere una «identidad absoluta» que en el modelo V7GUID no está prevista. Es neutral para el modelo de identidad y tipificación:

Razones para mantenerlo

Argumento Justificación
Coherencia de marca Las 18 Solutions en Development/Solutions/ utilizan el prefijo (salvo excepciones históricas como GCP/GCEP). Para la publicación OSS bajo git.gitcover.org/GCC-OSS/<repo>, GitCover.* señala la procedencia.
Ausencia de colisiones en NuGet Un simple Discovery.* colisiona fácilmente con paquetes de terceros; GitCover.Discovery es globalmente único.
Visibilidad de la licencia El modelo IPLicensing (Open-Core, taxonomía Field-of-Use) utiliza el namespace como marcador de procedencia y de pertenencia a la licencia.
Coherencia del ecosistema de Solutions Los bundles transversales a las Solutions (GCEP-Federation, MCP-Hub) referencian actualmente GitCover.Core, GitCover.V7Guid - un namespace acortado rompe esta cadena.

Consecuencia para la colaboración dinámica

El namespace de C# no es un medio de identidad para:

Conclusión

El prefijo de namespace de C# GitCover. se mantiene como convención de denominación - no como medio de identidad. La identidad y la unicidad de tipos se rigen por el modelo V7GUID (Tenant-ID en los bits 0–47, repository_id en los bits 52–63, registro de kind en los bits 114–121). El prefijo es neutral para la colaboración dinámica entre desarrolladores, agentes de IA y servicios MCP - no transporta ninguna información de identidad que no esté ya codificada de forma determinista en la V7GUID.

Fuentes