変更の範囲

agent-gateway の knowledge / llm / obsidian / pipeline の4ドメインと、infra、transport 層を Clean Architecture に沿って整理しました。v3 リデザインでのドメイン分割を引き継いだ変更です。3月17日から23日の5セッション、ctree rev 0007 から 0032 の約25リビジョンで進めました。


前提

  • v3 リデザインで pipeline.knowledge.* を llm / obsidian / mlflow の3ドメインに分割済み

llm domainの依存分離

3月17日、knowledge domain の整理を終え、llm domain に着手しました。

開始時の ctree check では Go の最新リビジョンは 0007 でした。serena の5つのプロジェクトメモリで設計方針を確認しました。

llm domain は knowledge domain と同じ構成にしました。domain 層にビジネスロジックを置き、外部依存を infra 層に分ける方針です。


obsidian domainとイベント名

同日 15:05、obsidian domain を整理しました。

確認した点は、vault の差し替えとイベント名の重複です。

obsidian domain の設計

複数の Obsidian vault を差し替えられる repo 構成を採用しました。internal/domain/obsidian/service.go(L18-25)の振る舞いを、ctree の依存情報で確認しました。

重複イベント名の問題

internal/domain/knowledge/service.go(L42-44)には重複したイベント名がありました。NATS トピックへの publish に同じ名前を使っていたため、Dagster 側でメッセージを区別しにくくなっていました。

ctree rev 0018 から 0019 では、context_enricher.go に RerankRequest、RerankItem、RerankResult の3つの型が追加されました。

obsidian domain を複数 vault に対応するリポジトリ構成に変え、イベント名の重複を解消しました。


pipelineの状態管理とinfra

同日 15:38 の ctree check では、Go の rev 0020 から 0021 に次の変更がありました。

  • internal/domain/pipeline/entity.go から type Task、type JobStatus、type Job の3シンボルが削除

pipeline domain からこれらの型を削除し、状態管理を NATS JetStream / Dagster に委譲しました。この変更に合わせて infra 層も修正しました。

@infra ディレクトリを対象に、実装を確認して整理しました。


HTTP transportの境界

同日 17:07、rev 10 から進めた domain と infra の整理を終え、transport layer に移りました。

開始時の ctree check は Go 0032 で、変更はありませんでした。対象は internal/transport/http/ 以下の Gin ルーティング、ハンドラー、ミドルウェアです。

pkg/anthropic/ の型定義(ContentBlock、ImageSource、Tool、ToolChoice、Usage、Metadata)を確認し、ハンドラーから domain 層のインターフェースを呼ぶ構成を整理しました。

transport layer では次の3点を変更しました。

  • ハンドラーが domain サービスのインターフェースに対して依存するよう修正
  • リクエスト / レスポンスの DTO 変換を transport 層に閉じ込める
  • ミドルウェアのコンテキスト伝播(CorrelationID)が domain 層まで届かないよう境界を明確化

変更に合わせたテスト修正

3月23日、複数セッションの変更が conflict を起こし、テストと実装に不一致が見つかりました。

変更したドメイン型やインターフェースがテストに反映されておらず、複数箇所でコンパイルエラーやテスト失敗が発生しました。

serena の find_symbol / find_referencing_symbols で参照を探し、次の修正を行いました。

  • 削除 / 改名されたシンボルへの参照をテストファイルで更新
  • リファクタで変わったインターフェースシグネチャにテストのモックを合わせる
  • infra 層の変更に追随していなかった統合テストの修正

結果

4ドメイン、infra、transport の整理を完了しました。AIシステム開発で外部サービスを差し替える際も、domain の責務を保つ構成です。

レイヤー変更内容
knowledge domainリランク型の整理(RerankRequest / RerankItem / RerankResult)
llm domainClean Architecture に沿った依存整理
obsidian domain複数 vault 差し替え可能な設計に再構成
pipeline domainTask / JobStatus / Job 型の削除(外部サービスへの委譲)
infradomain 変更に追随した adapter 更新
transportハンドラーの domain インターフェース依存への整理

ctree の rev 0007 から 0032 で、各セッションの変更を追跡しました。