Tiền tố Namespace và Mô hình Bản sắc V7GUID
Quyết định kiến trúc ngày 2026-07-26. Tài liệu hóa tại
GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md.
Câu hỏi ban đầu
Có nên giữ 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 tiền tố rút gọn (Discovery.*)?
Bối cảnh: Trong cộng tác động giữa các developer, AI agent và MCP service cùng tương tác động, các namespace "tuyệt đối" có thể làm nhòa ranh giới — khái niệm V7GUID dùng 48 bit đầu cho tenant-ID, và các kiểu được đăng ký ít nhất ở cấp công cụ nhưng có thể được định nghĩa lại ở cấp tenant hoặc repo (cấp tổ chức), để đảm bảo tính duy nhất giữa các repo trong GCEP, độc lập với phiên bản DLL hoặc instance quy trình.
Mô hình Bản sắc V7GUID
Khái niệm V7GUID cố định bản sắc và định kiểu hoàn toàn ở cấp bit:
Bản sắc Tenant (Bit 0–47)
Bản sắc tenant được dẫn xuất từ dấu thời gian 48-bit của UUIDv7 thành lập. Nó được mã hoá tất định trong GUID — namespace C# không mang thông tin bản sắc bổ sung.
repository_id (Bit 52–63, 12 bit, 0–4095)
Định chỉ một repository trong 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 tắc trung tâm
Chuẩn hóa loại hoạt động liên-repo và thay thế các enum đặc thù 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 root chuẩn tắc OSS (git.gitcover.org/OSS/TOP/.gitcover/dictionaries/).
Định danh kép (classification, uuid)
Tách Class Identifier (cái gì/kiểu, mã hoá tất định trong bit) và Object ID (đối tượng cụ thể nào, uuidv7 thuần). Cả hai cùng tạo thành composite key — namespace không nằm trong đó.
Tại sao Tiền tố Namespace là Trung lập
Tiền tố namespace C# GitCover. gợi ý một "bản sắc tuyệt đối" không được dự liệu trong mô hình V7GUID. Đối với mô hình bản sắc và định kiểu, nó là trung lập:
- MCP đăng ký tên công cụ, không phải namespace C#.
- GCEP tham chiếu qua V7GUID, không qua định danh C#.
- Tính duy nhất kiểu được đảm bảo bởi dictionary registry (
kinds.json), không bởi namespace C#. - Việc định nghĩa lại kiểu ở cấp tenant hoặc repo (sentinel
255= Custom/TenantDefined) diễn ra trong dictionary, không trong namespace C#. Tiền tố namespace không thể lách việc định nghĩa lại này.
Lý do Giữ lại
| Lập luận | Biện luận |
|---|---|
| Nhất quán thương hiệu | Tất cả 18 solution trong Development/Solutions/ dùng tiền tố (trừ ngoại lệ lịch sử như GCP/GCEP). Cho phát hành OSS dưới git.gitcover.org/GCC-OSS/<repo>, GitCover.* tín hiệu nguồn gốc. |
| Không xung đột NuGet | Discovery.* đơn giản dễ xung đột với gói bên thứ ba; GitCover.Discovery duy nhất toàn cục. |
| Hiển thị giấy phép | Mô hình IPLicensing (open-core, phân loại field-of-use) dùng namespace làm marker cho nguồn gốc và thuộc giấy phép. |
| Nhất quán hệ sinh thái Solution | Các bundle liên-solution (GCEP-Federation, MCP-Hub) hiện tham chiếu GitCover.Core, GitCover.V7Guid — namespace rút gọn phá vỡ chuỗi này. |
Hệ quả cho Cộng tác Động
Namespace C# không phải phương tiện bản sắc cho:
- Đăng ký công cụ MCP: Một MCP server đăng ký công cụ từ
GitCover.Discovery.Apivà một từGitCover.Accountant.Apikhông xung đột — tên công cụ riêng biệt, và các kiểu V7GUID duy nhất trong registry trung tâm. - GCEP Federation: Tham chiếu qua V7GUID (Class Identifier + Object ID), không qua namespace C#.
- Tương tác AI agent: AI agent làm việc với tên công cụ và artefact tham chiếu V7GUID, không với namespace C#.
- Định nghĩa lại ở cấp tenant/repo: Sentinel
255(Custom/TenantDefined) trỏ tất định tới định nghĩa riêng tenant trong dictionary — bất kể namespace C# làGitCover.Discovery.*hayDiscovery.*.
Kết luận
Tiền tố namespace C# GitCover. được giữ như một quy ước đặt tên — không phải phương tiện bản sắc. Bản sắc và tính duy nhất kiểu được đảm bảo bởi mô hình V7GUID (tenant-ID trong bit 0–47, repository_id trong bit 52–63, registry kind trong bit 114–121). Tiền tố trung lập đối với cộng tác động giữa developer, AI agent và MCP service — nó không mang thông tin bản sắc nào không được mã hoá tất định trong V7GUID.
Nguồn
- Đặc tả V7GUID:
specs/v7guid/00_gesamtkarte.md(bản đồ 128-bit) - Đặc tả V7GUID:
specs/v7guid/33_kind.md(trườngkind, registry trung tâm) - Đặc tả V7GUID:
specs/v7guid/12_repository_id.md(phạm vi repo) - Đặc tả V7GUID:
specs/v7guid/90_dual_identifier.md(định danh kép) - ADR-002:
specs/v7guid/ADR-002_layout_v2_kind.md(kện hợpkind) - Root chuẩn tắc OSS:
git.gitcover.org/OSS/TOP/.gitcover/dictionaries/kinds.json - Mô hình IPLicensing:
REPOS/AFJD/IPLicensing/03_OSS_MODEL.md - ADR trong repo solution:
Development/Solutions/GitCover.Discovery/plans/ADR-001_namespace_prefix_gitcover.md