AIKernel.NET
version: 0.1.0 / status: Refactor / edition: Draft / published: 2026-05-16 / updated: 2026-06-08

概要

この文書は、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.AbstractionsAIKernel.Dtos が所有する。 Core 実装は内部でこれらを AIKernel.Common.Results に adapter してよいが、AIKernel.AbstractionsAIKernel.Common を参照してはならない。

4.5 v0.0.5 Contract Surface Purity ルール

AIKernel.AbstractionsAIKernel.Contracts は public interface のみを export する。 DTO は AIKernel.Dtos、共有 enum は AIKernel.Enums が所有する。 runtime exception 実装や result/failure adapter は AIKernel.CoreAIKernel.Common などの実装 package に配置し、contract package には置かない。

DynamicSLM、SeedSLM、HATL の追加も同じ contract-only rule に従う。 AIKernel.Abstractions.DynamicSlmAIKernel.Abstractions.Hatl は package-boundary interface のみを定義する。 AIKernel.Dtos.DynamicSlmAIKernel.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.CommonAIKernel.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 の外側に置くことを明確化
Source: guidelines/REPO_DEPENDENCY_RULES-jp.md