Tiền tố namespace và mô hình định danh V7GUID

Quyết định kiến trúc vào ngày 2026-07-26. Được ghi nhận trong GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md.

Câu hỏi ban đầu

Có nên giữ nguyên tiền tố namespace C# dài GitCover.Discovery cho việc phát hành OSS sau này, hay làm việc với dạng rút gọn không có tiền tố (Discovery.*)?

Bối cảnh: Trong sự cộng tác linh động giữa các Developer, AI Agents và MCP Services, vốn tất cả đều làm việc linh động với nhau, các namespace „tuyệt đối" có thể làm mờ ranh giới - vì khái niệm V7GUID sử dụng 48 bit đầu tiên cho Tenant-ID và các kiểu được đăng ký ít nhất ở cấp Tool, nhưng có thể được định nghĩa lại ở cấp Tenant hoặc Repo (cấp tổ chức), để tại GCEP giữa các repo có tính duy nhất, bất kể các phiên bản DLL hay các instance tiến trình.

Mô hình định danh V7GUID

Khái niệm V7GUID xác định định danh và kiểu hóa hoàn toàn ở cấp độ bit:

Định danh Tenant (bit 0–47)

Định danh Tenant được suy ra từ dấu thời gian 48 bit của UUIDv7 thành lập. Nó được mã hóa một cách tất định trong GUID - namespace C# không truyền tải bất kỳ thông tin định danh bổ sung nào.

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

Địa chỉ hóa một Repository trong một ngữ cảnh Tenant. Mỗi Tenant có đúng một Repository TOP (id=1) và tối đa 4.095 Repository khác. Tính duy nhất được đảm bảo bởi repository_id, không phải bởi namespace C#.

kind (bit 114–121, 8 bit) - Registry chuẩn mực trung tâm

Chuẩn hóa loại hoạt động xuyên suốt các repo và thay thế các Enums đặc thù theo giải pháp (RepoKind, ArtifactKind trong GitCover.Discovery; Prozesstyp trong GCP.Portfolio; Type trong GCPN). kinds.json trung tâm được duy trì trong OSS-Normative-Root (git.gitcover.org/OSS/TOP/.gitcover/dictionaries/).

Dual-Identifier (classification, uuid)

Tách Class Identifier (cái gì/kiểu, được mã hóa tất định trong bit) và Object ID (đối tượng cụ thể nào, uuidv7 thuần túy). Cả hai cùng nhau tạo thành Composite Key - namespace không nằm trong đó.

Tại sao tiền tố namespace là trung tính

Tiền tố namespace C# GitCover. gợi ý một „định danh tuyệt đối" mà mô hình V7GUID không dự kiến. Nó là trung tính đối với mô hình định danh và kiểu hóa:

Lý do giữ nguyên

Lập luận Lý giải
Nhất quán thương hiệu Cả 18 Solutions trong Development/Solutions/ đều sử dụng tiền tố (ngoại trừ các ngoại lệ lịch sử như GCP/GCEP). Cho việc phát hành OSS tại git.gitcover.org/GCC-OSS/<repo>, GitCover.* báo hiệu nguồn gốc.
Không xung đột NuGet Một Discovery.* đơn giản dễ xung đột với các gói của bên thứ ba; GitCover.Discovery là duy nhất trên toàn cầu.
Khả năng hiển thị giấy phép Mô hình IPLicensing (Open-Core, Field-of-Use-Taxonomie) sử dụng namespace làm Marker cho nguồn gốc và sự thuộc về giấy phép.
Nhất quán hệ sinh thái Solution Các Bundle xuyên Solution (GCEP-Federation, MCP-Hub) hiện đang tham chiếu GitCover.Core, GitCover.V7Guid - một namespace bị rút gọn sẽ phá vỡ chuỗi này.

Hệ quả đối với sự cộng tác linh động

Namespace C# không phải là phương tiện định danh cho:

Kết luận

Tiền tố namespace C# GitCover. được giữ nguyên như một quy ước định danh - không phải như một phương tiện định danh. Định danh và tính duy nhất của kiểu được đảm bảo bởi mô hình V7GUID (Tenant-ID ở bit 0–47, repository_id ở bit 52–63, Registry kind ở bit 114–121). Tiền tố này là trung tính đối với sự cộng tác linh động giữa các Developer, AI Agents và MCP Services - nó không truyền tải bất kỳ thông tin định danh nào mà vốn không được mã hóa tất định trong V7GUID.

Nguồn