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:
- MCP đăng ký tên Tool, không phải các namespace C#.
- GCEP tham chiếu qua V7GUID, không phải qua các định danh C#.
- Tính duy nhất của kiểu được đảm bảo bởi Dictionary-Registry (
kinds.json), không phải bởi namespace C#. - Việc định nghĩa lại các kiểu ở cấp Tenant hoặc Repo (Sentinel
255= Custom/TenantDefined) diễn ra trong Dictionary, không phải trong namespace C#. Tiền tố namespace không thể làm suy yếu việc định nghĩa lại này.
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:
- Đăng ký Tool MCP: Một MCP-Server đăng ký một Tool từ
GitCover.Discovery.Apivà một Tool từGitCover.Accountant.Apisẽ không xung đột - các tên Tool là riêng biệt, và các kiểu V7GUID là duy nhất trong Registry trung tâm. - GCEP-Federation: Tham chiếu qua V7GUID (Class Identifier + Object ID), không phải qua các namespace C#.
- Tương tác AI-Agent: AI Agents làm việc với tên Tool và các Artifact được tham chiếu qua V7GUID, không phải với các namespace C#.
- Định nghĩa lại ở cấp Tenant/Repo: Sentinel
255(Custom/TenantDefined) trỏ một cách tất định đến một định nghĩa riêng của tenant trong Dictionary - bất kể namespace C# làGitCover.Discovery.*hayDiscovery.*.
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
- V7GUID-Spec:
specs/v7guid/00_gesamtkarte.md(bản đồ 128 bit) - V7GUID-Spec:
specs/v7guid/33_kind.md(trườngkind, Registry trung tâm) - 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(hợp nhấtkind) - OSS-Normative-Root:
git.gitcover.org/OSS/TOP/.gitcover/dictionaries/kinds.json - Mô hình IPLicensing:
REPOS/AFJD/IPLicensing/03_OSS_MODEL.md - ADR trong Solution-Repo:
Development/Solutions/GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md