ローカルデプロイメント
ThreadCells のデプロイメントは、検証済みの不変候補をローカルランタイムへ昇格します。公開、Git のプッシュ/タグ、パッケージリリース、公開ネットワーク露出を意味するものではありません。
候補の規律
一つの正確でクリーンなソースコミットからビルドし、ステージング前に候補を検証します。
python3 scripts/build_local_candidate.py --output "$PWD/threadcells-candidate"
python3 scripts/verify_local_candidate.py \
--candidate "$PWD/threadcells-candidate/threadcells-0.3.4a0-local"候補には、同じリビジョン由来の Python コード、パッケージ化された Web アセット、許可リスト済み Docs バンドル、ビルド ID、チェックサム、リリースメタデータが含まれている必要があります。
ホストのステージングでは、専用のリリース保守グループを使用します。これにより、実行中のコントロールプレーンは不変候補を読み取れますが置き換えられず、Housekeeping サービスは明示的に保護解除されたリリースを削除できます。最初のホストステージング前に、このシステムグループを一度作成してください。
sudo groupadd --system threadcells-release-adminインストール済みのコントロールプレーンと Housekeeping ユニットは、Python バイトコードの書き込みを無効化します。これにより、限定的なリリース保守グループがアクティブな場合を含め、通常の import で不変リリース内の所有権や内容が変更されることを防ぎます。
このグループが利用できない場合、ステージングコマンドはフェイルクローズします。リリース候補、アトミックなアクティブポインター、ステージングロック、リリース保護メタデータは、ランタイム所有の状態の外にある root 所有の /var/lib/threadcells アンカーの下に保管します。本番サービスはランタイムが書き込み可能なコマンドリンクではなく、/var/lib/threadcells/active を通じて実行します。候補パスは /var/lib/threadcells/releases の直下の子でなければなりません。シンボリックリンクや別のロック/メタデータ対象は拒否されます。
安全な昇格手順
- 現在のアクティブランタイムとそのヘルスを記録する。
- 検証済みのロールバック対象として保持する。
- データベースバックアップを作成し、整合性を確認する。
- リポジトリの正規デプロイメント機構を使い、正確に検証した候補をステージする。
- ステージ済み候補を再度検証する。
- ステージ済み ID をアトミックに昇格する。
- 必要な ThreadCells サービスだけを再起動する。
- ループバックまたは既存の保護されたアクセスパスで本番受け入れを実行する。
アクティブディレクトリをその場で上書きしてはいけません。リリースポインター/シンボリックリンク、または同等の正規機構により、アクティブ、ロールバック、ステージ済み候補を曖昧なく識別できる必要があります。
ステージングで正確な候補を記録した後、正規のロックされた操作で昇格します。
sudo python3 deployment/promote-ops-p1.py \
--system-root / \
--candidate-root /var/lib/threadcells/releases/RELEASE_ID \
--expected-commit EXACT_PUBLIC_SHA検証済みの正規ロールバックリリースがすでに存在する場合は --rollback-root を使います。この操作はべき等です。再試行時は、新しいリリース ID を作ることなく、中断したポインター/メタデータ遷移を完了します。
受け入れ
最低限、次を確認します。
- ヘルスと Settings → About のビルド ID。
- Home、Agents、Flows、Statistics、Settings、Docs、Spawn Agent。
- プロバイダーインベントリーと安全な事前検査一つ。
- オペレーターの設定済み/ロック済み/ロック解除/保護された変更の動作。
- グローバル Telegram の安全な設定状態、およびネイティブ認証情報がすでに設定済みの場合に限る明示的な接続/テスト動作。
- 端末接続と再接続。
- ワークフロー/結果の継続。
- データベースの整合性と使用量リプレイの重複がないこと。
- 動的キャッシュのない PWA マニフェスト/アイコン/サービスワーカーの登録。
ロールバック
ロールバックでは、保持した以前の候補へ切り替え、必要なサービスだけを再起動します。新バージョンが非互換または有害なマイグレーションを行った場合にのみデータベースを復元してください。不必要なデータベース復元は、昇格後に完了した有効な作業を破棄する可能性があります。
ロールバック後、ビルド ID、ヘルス、スキーマ互換性、アクティブなワークフロー、端末を確認します。原因を理解するまで、失敗した候補とログを保持してください。
境界
ローカルデプロイメントの権限は、パッケージ公開、リモートへのプッシュ、タグ/リリース作成、未加工のサービスポート公開を許可するものではありません。これらは別途オーナー判断が必要です。
