概要
この文書は、AIKernel.NET の プロジェクト間依存(参照)方向を固定する規約である。 目的は以下:
- 抽象レイヤーの純度を守り、実装依存が Core に侵入することを防ぐ
- 参照循環・境界崩壊を防ぐ
- OS(Kernel / Drivers / Adapters / Ops)としての整合性をコード構造に反映する
本規約は「まず層を作り、依存方向を固定する」ための OS ルールである。 (Core 分割と OS モジュール化の方針に基づく)21
1. 依存方向の大原則(最重要)
- 依存は常に 上位層 → 下位層へ流れる
- Core は固定点であり、Core から Kernel/Providers/Server/Hosting/Enterprise へ依存してはならない
- 循環依存は禁止(A → B → A は全面禁止)
2. レイヤ(層)定義
- Core(syscall): Abstractions / Contracts / Dtos / Enums
- Common(functional primitives): 実装 package が利用する dependency-free な Result / Option / Either / utility layer
- Kernel(実装): Scheduler / Router / Controller / Pipeline / RagEngine / Rules
- Providers(ドライバ): Capability 実装
- VfsProviders(外部データ): Git 等のデータソース
- Server(アダプタ): 外部 API 互換
- Hosting(統合): DI / 既定パイプライン / 設定
- Enterprise(運用): SIEM / マルチテナント / SLO
3. Core 内の依存規約(AIKernel.* 構成)
3.1 モジュール一覧(例)
- AIKernel.Abstractions : IKernel / IProvider / IGuard / IPdp / Vfs contract ownership
- AIKernel.Contracts : OrchestrationContext / Contract Schema
- AIKernel.Dtos : MaterialItem / TransferTrace / Purpose
- AIKernel.Enums : RejectCode / PdpDecision
4. 依存表(固定)
以下の依存表を 規約として固定する。 ここに記載のない依存は原則禁止とし、例外が必要な場合は Issue/ADR で理由を明文化する。
4.1 固定依存(Allowed Dependencies)
| Project | Allowed References |
|---|---|
| AIKernel.Enums | なし |
| AIKernel.Dtos | AIKernel.Enums |
| AIKernel.Contracts | AIKernel.Enums, AIKernel.Dtos |
| AIKernel.Abstractions | AIKernel.Dtos, AIKernel.Enums |
| AIKernel.Common | なし |
| Providers / VfsProviders | AIKernel.Abstractions, AIKernel.Core, AIKernel.Common |
| Core | AIKernel.Abstractions, AIKernel.Common |
| tests/* | 参照自由(逆流禁止) |
4.2 禁止事項(Forbidden)
- 循環依存(A → B → A)
- src が tests を参照すること(逆流)
- Core が Kernel/Providers/Server/Hosting/Enterprise を参照すること
- AIKernel.Common が AIKernel contract、DTO、Core、Provider、Vfs、Hosting、または application-specific type を参照すること
- AIKernel.Abstractions が AIKernel.Core、Providers、または separate Vfs package/project を参照すること
- Vfs インターフェースに具象データ型を内包すること(具象データは AIKernel.Dtos に定義する)
4.3 v0.0.4 Vfs Contract Ownership
Vfs interface contract の所有元は AIKernel.Abstractions である。 公開 namespace は source compatibility のため AIKernel.Vfs のままとする。 個別の AIKernel.Vfs 互換 package/project は v0.0.4 で削除された。 下流 package は AIKernel.Abstractions を直接参照し、Vfs contract 利用時の using AIKernel.Vfs; は維持してよい。
Phase-1 の必須 package graph は次の通り。
AIKernel.Enums -> (none)\nAIKernel.Dtos -> AIKernel.Enums\nAIKernel.Contracts -> AIKernel.Enums, AIKernel.Dtos\nAIKernel.Abstractions -> AIKernel.Dtos, AIKernel.Enums
4.4 v0.0.4 Contract 抽出ルール
v0.0.4 以降、DSL、DSL ROM、History ROM、Kernel clock contract は AIKernel.Abstractions と AIKernel.Dtos が所有する。 Core 実装は内部でこれらを AIKernel.Common.Results に adapter してよいが、AIKernel.Abstractions は AIKernel.Common を参照してはならない。
4.5 v0.0.5 Contract Surface Purity ルール
AIKernel.Abstractions と AIKernel.Contracts は public interface のみを export する。 DTO は AIKernel.Dtos、共有 enum は AIKernel.Enums が所有する。 runtime exception 実装や result/failure adapter は AIKernel.Core や AIKernel.Common などの実装 package に配置し、contract package には置かない。
DynamicSLM、SeedSLM、HATL の追加も同じ contract-only rule に従う。 AIKernel.Abstractions.DynamicSlm と AIKernel.Abstractions.Hatl は package-boundary interface のみを定義する。 AIKernel.Dtos.DynamicSlm と AIKernel.Dtos.Hatl は境界 record を運ぶ。 AIKernel.Enums は共有 DynamicSLM / HATL enum primitive を所有する。 Result / ResultStep / LINQ adapter、model loading、SeedSLM discipline enforcement、thought-artifact persistence、delegation execution、memory placement execution、distillation execution、HATL cryptography、key handling、ratchet、Merkle construction、public-anchor runtime behavior は AIKernel.Common、AIKernel.Core、provider package、host application、または AIKernel.RH ベース component などの外部 operator module が所有する。
4.6 v0.1.0 Contract ABI Freeze ルール
0.1.0 prototype-validation line では、MemoryRegion / MemoryMapper、Control Plane、 provider routing DTO、external Capability descriptor、DynamicSLM、SeedSLM、HATL、 governance vocabulary の共有 contract ownership を凍結します。
Runtime behavior、Result monad adapter、LINQ composition helper、Python binding、 CUDA/native bridge、physical execution engine は AIKernel.NET の外側に置き、 AIKernel.Core、AIKernel.Control、AIKernel.Tools、AIKernel.Cuda13.0、AIKernel.Demo などの実装 repository が所有します。
5. Kernel / Providers / VfsProviders の依存規約(概要)
- Kernel は Core と AIKernel.Common functional primitive を参照できる
- Providers / VfsProviders は Core、AIKernel.Abstractions、AIKernel.Common にのみ依存し、Kernel の具象に依存しない
- 外部 SDK は Providers/VfsProviders 側に閉じ込め、Core へ漏らさない
(詳細は実装フェーズで別文書に分離してもよい)
6. CI での強制(推奨)
- 参照循環の検出(ビルド失敗)
- 禁止依存の検出(静的解析で失敗)
- 公開 API(Abstractions/Contracts)の破壊的変更検出(差分チェック)
結論
依存方向は設計そのものである。 AIKernel.NET は OS として、境界と依存方向を最初に固定し、以後の拡張でも崩さない。
変更履歴
- v0.0.0 / v0.0.0.0: 初期ドラフト
- v0.0.1 (2026-05-06): ドキュメント規約に基づくバージョン更新
- v0.0.3 (2026-06-02): Phase-1 依存グラフと Vfs contract 所有元/type-forwarding 規約を修正
- v0.0.4 (2026-06-04): DSL / History ROM / Kernel clock contract 抽出に関する依存ルールを追加
- v0.0.4 (2026-06-04): 個別の AIKernel.Vfs 互換 facade を package graph から削除
- v0.0.5 (2026-06-05): interface-only package のための contract-surface purity ルールを追加
- v0.0.5 (2026-06-05): Core/Common dependency allowance と DynamicSLM/SeedSLM/HATL contract-only ownership を明確化
- v0.1.0 (2026-06-08): prototype-validation contract ABI freeze ルールを追加し、Python/CUDA/runtime behavior は AIKernel.NET の外側に置くことを明確化
guidelines/REPO_DEPENDENCY_RULES-jp.md