AIタスク #11679
未完了[AI Swarm P3] 許可済みGitリポジトリ開発・マルチジョブ配車・OpenDots統合
0%
説明
親チケット: #11675 / Ryzenモデル原子的リース: #11676
P2完了: MN55のAI Swarm CommanderがB550+Ryzen AIの2モデルを同時起動、独立Git Worktree・各モデルのDockerテスト・競合検出・Git cherry-pick・MN55独立8テスト・VPS Work OS strict evidenceの3段階DAGまで実行。常駐サービスai-parallel-swarm.service稼働中。対象は検証用固定テンプレートのみ。
【P3スコープ】
- 実プロジェクトを許可済みread-only GitソースからMN55隔離worktreeに取り込むRepository Contract。base SHA、remote allowlist、対象branch、変更可能なパス、権限、サイズ・アーティファクト上限、secret scan、ロールバック定義を必須化。本番チェックアウトへ直接writeを許可しない。
- Task DAG生成を固定fixtureから一般化。ただし計画の自由文は決定論的schema→許可リスト→静的検証→署名付き承認契約に変換し、任意shell/秘密情報参照/本番deployは禁止。
- マルチジョブのfair scheduler、同一ファイルset/file lockとGPU/NPU lease、budgetとモデル選定、一定間隔のheartbeat、TTL切れ、負荷時キュー制御。
- 失敗後復旧を充実: VPS Work OS SSOTのrun/lease/evidence/artifactを照合して再試行可否を判定。走行中タスクへのblind replayなし、すでに完了したタスクの二重実行なし。
- OpenDots側のAPI/UIからタスク投入・DAG/進捗・作業保留・diffプレビュー・レビュー・承認・結果の各画面を提供。
- 最初は隔離Git fixtureで12ケースの故障挿入テスト後、非公開の低リスク実リポジトリをstaging限定で試験。問題なければ開発/セキュリティ/移設Runbookを追加。
【必須受入】
- 任意の開発ジョブでも非承認本番変更0、未検証DONE0、二重GPU起動0、Git競合見落とし0。
- B550/RyzenAI/MN55/VPS/モデル API/SSH/ネット断のパターンで安全にHOLD→再同期できる。
- 証跡のSHA256読戻し・受入Dockerテスト・独立Verifier・WorkOS Evidence完了判定が全ジョブに必須。
- 旧Ryzen直接モデル切替は #11676 完了までfail-closedを維持。
【既存実装】
MN55: /home/ito/services/ai-swarm-commander (Git 32fcad0)、VPS: /root/projects/mn55-swarm-workos (Git de1c2cb)。P2 E2Eジョブ pswarm-3eaa3470e6414dd8be5a と pswarm-d0a5473977144a5087d1 にWorkOS証跡あり。B550 root FS 89%のため大型キャッシュを置かない。
Redmine Admin さんが11日前に更新
2026-10-28 P4 実装・受入記録(既存MN55/B550/Ryzenモデルや本番Webサーバーのコード・データは変更していない)。
- 汎用Task DAG共通契約 dag_contract.py (MN55/VPS同一SHA) を新設。12ノード/36エッジを上限に、任意の依存順を静的検証。循環/未承認操作/欠落ゲート/不正ソース拒否。VPS dag_bridge.py が既存Agent Work OS TaskGraph/ResourceLockManager/EvidenceRegistryをSSOTとして使用し、ノードごとのrun_id/owner-bound lease/アーティファクトSHA読戻し/証跡を保存。フリーフォームのshell/実デプロイは不可。
- セキュリティRunbook(inventory→secret_scan/static_scan→report)を合成コードでE2E実行。ジョブ dswarm-e0a086a9166d4263925e、4/4完了、意図的な疑似秘密文字列とevalを合計2件検出。常駐キュー実行 dswarm-0f35f155d7cd487bb780 は追加hash_inventoryを含め5/5完了。出力はルール/ファイル/行のみ(秘密値非掲載)。CVEや実機診断ではない。
- 移設Runbook(inventory→plan→stage_copy→verify_copy→restore_probe→report)を合成3ファイルでE2E実行。ジョブ dswarm-40e464d4f61e4de394de 7/7、常駐ジョブ dswarm-31fa9b567f0c47bf912f 6/6完了。コピーと復元SHA一致。production_cutover_permitted=false、manual_approval_required=true。本番移設なし。
- MN55常駐 ai-dag-swarm.serviceを有効化。共有FIFOスケジューラーで最大2ジョブ並列、クラッシュ後orphan隔離、曖昧状態はHOLD。Work OSの汎用DAG CAS recoverとMN55のworker PID/ソース/部分コピー検証を追加。失効した証跡なしノードだけ別run_idで再実行可。部分証跡や活動中leaseは拒否。
- 障害注入:VPS Work OS側18件、MN55側13件(ネットワーク不達/タイムアウト/リース失効/重複実行/未検証DONE/部分コピー/実際の使い捨てワーカープロセスSIGKILLなど)合格。全回帰テスト MN55 65件、Work OS 52件、OpenDots 205件合格。
- OpenDots owner authのSwarm画面にRunbook起動・DAG進捗・合成データの検出結果・安全復旧を追加。管理API loopback 127.0.0.1:39371、未認証のOpenDots APIは401。型チェック/ビルド/既存全テスト合格。OpenDotsとAPIを更新版として再起動、サービスactive。認証済み実UI疎通テストは安全性チェックで停止されたため未検証として残す。ビルド変更前のdistは /home/ito/backups/ai-swarm/opendots-dist-before-dag-runbooks-20261028.tgz に保全。
- Git: MN55 /home/ito/services/ai-swarm-commander 286344e、VPS /root/projects/mn55-swarm-workos b1f1972、OpenDots /srv/opendots-lab/OpenDots 092fecb。既存の未コミットrepo_patch.py/test_repo_patch.pyは前タスクのブロッカーのため触らず保全。
未完:実インフラの認証付きセキュリティ診断・CVEフィード、実プロジェクト移設の承認付きステージング、物理電源断試験、Ryzen Windows全モデル起動経路のリース強制(#11676)、認証済みUI E2E確認。現Runbookは隔離合成データ専用であり本番診断・移設の完了を意味しない。
Redmine Admin さんが10日前に更新
2026-10-28 P5 実装完了 — 実行拒否された経路を、制限付きランタイムと証跡管理へ移行。
【Git Runtime】
MN55 /home/ito/services/ai-swarm-commander に execution_contract.py(HMAC-SHA256、最大15分、固定SHA・repo_key・intake_id・README.md許可パス・パッチSHA、最大30KB、最小12/11テスト)、git_runtime.py(無remoteの隔離Git Worktree、Git apply、no-network/read-only Docker unittest、ローカルcommit、source SHA/clean検証、二重実行HOLD)、git_dispatch.py(Work OSのRun/所有者リースをGit変更前に取得)、git_workos_register.py(証跡送信)を追加。
VPS /root/projects/mn55-swarm-workos に git_audit_bridge.py を追加。Work OS strict evidence (artifact SHA256、test_count、allowed path、commit SHA、owner lease) 完了までDONE拒否。失敗時は一致するRunだけfailとlease解放。他Run/本番ブランチに操作なし。
実リポジトリ local-llm-harness HEAD 8285690f3ec7fcc7a03b0cb73aa71cfb5ce62a6c から隔離複製し、README.mdだけ変更。検証E2E xec-c6648372102fa29398e6e306(隔離commit 995ab400、12/12、WorkOS VERIFIED)およびWorkOSリース先行E2E xec-1364519011624766fc6a1a73(隔離commit b2981f8d、12/12、WorkOS VERIFIED)。元checkoutは無変更・clean。両E2EのWork OS証跡1件/アーティファクト1件、リークしたリース0。初回の差分エラーは元README末尾が文字列backslash-nであるための不正Git patch形式で、正規git diffへ修正して別契約で再試験、旧HOLDは保全。
【Browser Runtime】
browser_contract.py、browser_runtime.cjs、browser_dispatch.py、opendots_auth_probe.pyを追加。署名鍵はGitと共有だが、操作・効果はread_onlyとsubmit_security_fixtureのみ。Nix Chromium(使い捨てPlaywright context)で未認証ログインゲート、所有者認証後のSwarm/Runbook画面、UIボタンによる合成セキュリティRunbookの投入と完了画面を実際に確認。owner-token.envはMN55上のランタイムでのみ読取り、Tool引数・stdout・cookie・ブラウザ永続プロファイルへ出さない。外部originへのリクエストを遮断。API側の5認証済みGET=200、未認証=401。
E2E: bec-abebea4fd2d39af9f3700d74 read_only VERIFIED。bec-e35df4e6b82b1dfb750e0a39 submit_security_fixture VERIFIED → dswarm-52e19ad8a88b4057a7c2 WorkOS 4/4 completed、evidence4、artifacts4、active leases0。ブラウザのReact hydration単発判定でbec-58a26e20e3e9201231431bb7がHOLDとなり、visible待機へ修正。別契約bec-4888d622dfef6ff54b79c911でVERIFIED、旧HOLDは保全。
【保存・品質】
MN55 Git: 4d16215 + a785fac (head a785fac)。VPS Git: b520d8a。両Git working tree clean。MN55全93 unittest、VPS全62 unittest、OpenDots既存205 testをPASS(合計360)。OpenDots既存API/画面自体の新コード変更なし。現在のai-dag-swarm、ai-parallel-swarm、ai-swarm-api、opendots-ai-employee稼働維持。
運用資料: docs/EXECUTION_CONTRACT_RUNTIME.md。CLI: python3 browser_dispatch.py read_only / submit_security_fixture、Gitはpython3 git_dispatch.py --intake repo-... < approved.patch。署名鍵0600、生成証跡はGit管理外。
【制限/残件】
この検証は固定README.mdの隔離ステージングのみ。任意コード変更、本番Git push、外部認証画面変更、サーバー移設、本番デプロイは実装/許可していない。本番は署名付きExecution Contractだけでなく明示的承認ID、専用デプロイ権限、ロールバック/セキュリティ検証を別途必要。VPSのGit証跡はMN55の検証結果を検証・受領したものであり、VPSが独立して本体ソースを再ビルドしたという意味ではない。
Redmine Admin さんが10日前に更新
2026-10-28 15:06 JST M2:実モデル・4ファイル開発/相互レビュー/隔離Git統合E2E VERIFIED(本番Gitには未マージ)
- MN55隔離worktree /home/ito/staging/ai-swarm-m1m2-20261028-1443、branch feature/m1-m2-preflight-20261028、commit ff615462148af4af07ecb92e060ff390db3a83a1。既存parallel_commander/parallel_git/parallel_worker/Work OS strict evidenceを再利用。M2はJSON schema対応model_review_gate.pyをpre-merge必須化。
- 初回 pswarm-10e906d9d2554157beb5 はB550/Ryzenのビルドが検証済みだがREVIEW_SCHEMA_INVALID→HOLD。Work OS build_math/build_text completed、integrate readyのまま。証跡保全、同一Runのblind replayなし。
- 新規 pswarm-8e048c587af84320bbe5 VERIFIED:B550 Gemma4 12B→math_ops.py/test_math_ops.py、Ryzen Ornith9B→text_ops.py/test_text_ops.pyを並列生成。B550とRyzenの相互モデルレビュー2件ともschema-valid APPROVE、変更パス・親SHA・ASTを検証してから隔離Git cherry-pick。独立no-network/read-only Docker受入8/8 PASS、実行時間重複確認。隔離統合Git commit 1efb032be55ccc12743be6c6e210390bae0bf2d0。
- VPS Work OS parallel_bridge.py statusを直接照合: build_math/build_text/integrate 3タスク全completed、acceptance.done=true。MN55 staging回帰121/121 PASS。元MN55 commander source checkoutはclean、本番Git push・デプロイ・モデル停止なし。
- M2 fixture受入完了。次は承認済み実アプリGitへの一般化(既存repo_contract / execution_contractの許可パス・署名・SHA・承認ゲート再利用)、実コードレビュー、セキュリティ検査、ロールバック、明示承認後の本番統合。実アプリ本番適用は未実施。docs/M1_M2_STAGING_HANDOFF_20261028.md参照。
Redmine Admin さんが10日前に更新
2026-10-28 16:03 JST 継続実装(隔離のみ、本番変更なし)。MN55 /home/ito/staging/ai-swarm-m1m2-20261028-1443 の feature/m1-m2-preflight-20261028 に commit cf842f6a1e341727da8fffc3d7055d8685f7df00 を追加。M1 atomic_start_contract.py: PID/プロセス起動日時のUTCタイムゾーン正規化、timezone mismatch・不正日時・PID再利用をfail-closed、4テスト追加。M2 model_review_gate.py: AIレビューの未許可JSONキー・非文字列issuesの拒否、2テスト追加。MN55全127件PASS(前回121→127)。稼働MN55のcommander/parallel/DAG/API/occupancy timer active、B550 queue/reaper active・リースoffは正常IDLE、Ryzen NPU/GPU Work OS占有保持。元MN55/VPS Git clean、隔離ブランチclean。M1の本番起動経路統一は依然HOLD、M2の許可済み実プロジェクト汎用E2Eは未完。承認ゲートの必要な本番操作は未実施。
Redmine Admin さんが10日前に更新
2026-10-28 M1/M2継続(本番ランチャー変更なし)。M1 VPS隔離 branch feature/m1-b550-multigpu-20261028 に stale leaseの無条件再取得禁止、GPU0/GPU1部分handoff時のrenew/release拒否、予約段階の監査task_ref維持を実装。24/24 unittest PASS、Git commit 918892df249ed1e0d6ad3c87a738279be1f9ce08。MN55隔離ではatomic_start_contractへ直接OS観測のpreflight(active=0・鮮度20秒)、PID birth_ticks、観測出所検証を追加し単体18件PASS(未コミット)。M2: 許可済み実リポジトリlocal-llm-harnessのharness.py/test_harness.pyを署名付きExecution Contractで隔離修正。独立Docker16/16、Git commit 020354cc6053c0dfebfab585b208a5c5800c1170、contract xec-31d0592373d88fb573e30c11。2実モデルRyzen Ornith/B550 Gemma4レビュー両APPROVE、HMAC署名済みレビューreceipt(production_merge_authorized=false)保存。VPS隔離ブランチfeature/m2-multifile-audit-20261028にREADME限定を壊さない別監査ブリッジgit_multifile_bridge.pyを追加しテスト75/75 PASS(未コミット)。MN55/VPSの追加コマンドが安全性チェックで拒否されたためWork OSへの実登録、残るMN55/VPS追加commitはHOLD。差分を削除せず保持。本番Git・モデル・サービスには反映していない。
Redmine Admin さんが10日前に更新
2026-10-28 17時台:P6 Blocker SupervisorをMN55隔離ブランチに実装。新規管理Redmine #11682 https://call2arm.com/issues/11682。Git branch feature/p6-blocker-supervisor-20261028、SHA 9afe5275ab66e6c5c7dd1d5d5ad00cec9abb64c0。190/190回帰合格。Work OS既存pswarm-8e048c587af84320bbe5とM2署名付きレビューレシートxec-31d0592373d88fb573e30c11を実機照合。P6 shadow p6-4aec6b77503f4be090bdは2独立確認VERIFIED、production_rollout WAIT_APPROVAL。実装内容:型付きブロッカー分類、読取限定最大3回再試行、Work OS/HMAC以外のDONE禁止、原子的fsync+0600+HMAC+イベントチェーン、ジョブ途中中断はHOLD、依存先のみブロック、独立タスク継続、service read-only周期監視。systemd unitはテンプレートのみ(未導入/未有効化)。本番Git/LLM/processは未変更。残:Work OS承認ID付きactive runner、systemd canary、運用アラート、切戻しの確認。