保護者アカウントの停止・再開の本番配備
2026-09-23。合意済みモック・実装画面をユーザーが確認し、「これで本番実装しましょう」と依頼した。卒園後に弟妹が入園する場合も、既存アカウントとパスワードを保持して再開する。
現在の状態
2026-09-23 06:30:49 JSTに本番反映完了。06:31:01 JSTに実機メタデータとの独立照合、06:31:23 JSTに公開ヘルスチェックのHTTP 200を確認した。
基準と配備対象
- 直前の配備記録:
docs/deployment-initial-ledger-2026-09-22.md。実機メタデータを再取得し、記録と一致することを確認した。 - 基準commit:
15b13a9dd1eb6ae1b4d171186cb12c1dcc33326c。 - 基準イメージ:
sha256:8eee8704af57ee8bac122f01e4dfd50cfe4bec3c115de16eb64c329bd0d92d1b。 - 基準deployment.json SHA256:
84234a295ab7d2d32c6e3ea963f1e905ef965ec828d9165a818c7ca1d306a3d0。 - Compose SHA256:
a15583b8d1edf8b23827986068b6e95af2eba17992ef91c6ab212cf128a2db3b。今回も同一内容を保持する。 - 配備commit:
06951a6eed379536e1791d4abdcf775ecd799a99。 - ローカル専用ブランチ:
codex/parent-lifecycle-20260923-production。 - 配備用作業コピー:
.local-dev/truenas-parent-lifecycle-20260923/source。 - 固定配備ファイル:
.local-dev/truenas-parent-lifecycle-20260923/bundle。 - 実機専用ディレクトリ:
/home/truenas_admin/parent-lifecycle-20260923-06951a6。 - systemdサービス:
hoikuict-parent-lifecycle-20260923-06951a6。
現在の本番commitから今回の22ファイルだけを取り込んだ。開発中のmain全体は配備しない。既存の家庭アーカイブ、初期台帳、復元、定期バックアップ等のコードを保持する。停止・再開の変更内容は docs/account-lifecycle-unification-implementation-2026-09-23.md に記載した。
GitHubへの専用ブランチのpushは自動承認レビューが送信先確認不足を理由に拒否したため、実行していない。配備commitとソースアーカイブはローカルに固定保存し、同一アーカイブを既存の本番サーバーへ転送して照合済み。GitHubへの保存は本番配備の前提ではない。
配備前の検証
- 本番基準で29モジュール・339テスト成功。初回入力を途中停止した場合の再案内を補正・回帰テスト追加後、関連77テスト成功。最終一式は340件で収集できることを確認した。
- 卒園した子の状態、パスワード、既存の紐づけを保持し、新しい弟妹を明示的に追加して通常再開するケースが成功。
- 新しい本番用の読み取り専用検査を、利用中・旧版の台帳有効/認証停止・停止中・再開手続き待ちの4状態で確認。検査前後のDB全体のダンプが同一。
- 既存設定保持、バックアップ・復元との排他、切替成功・失敗時の復旧、DBを巻き戻さない処理を含む配備手順6テストがWindowsと実機Linuxで成功。
- 固定入力15ファイル、UPDATE.json、SHA256SUMSを実機で照合。配備対象368ソースファイルのハッシュを固定。
- 転送後も本番のcommit・Compose・deployment.jsonが基準と一致することを再確認。
bundle/live-before.jsonに保存。
認証後の自動処理
- 本番稼働版・設定・復元キュー・ソースを照合する。基準との差異があれば切替前に停止する。
- 新イメージを構築し、ソースを照合。ネットワークなしの使い捨てコンテナで復元演習と340テストを行う。
- 本番DBコピーで起動・データ保持・家庭アーカイブ・初期台帳・停止再開画面を検査し、既存バックアップとの互換性を確認する。
- 公開接続を短時間停止。進行中のバックアップ・復元を確認し、アプリと両ワーカーを止める。ZFSスナップショット、主DB、施設DB、設定を退避して切り替える。
- 既存73テーブルの内容、添付、設定、スキーマ、ソース、サービスを照合。認証管理・一覧・編集・確認画面の共通状態と権限を読み取り専用で検査し、公開を再開する。
本番の保護者アカウントの状態変更や試験メール送信は行わない。園児との紐づけを保持する。過去の不整合アカウントを配備時に自動で有効化しない。DBスキーマ追加は不要。
切替失敗時は旧アプリ・設定・両ワーカーを復旧し、DBは自動で巻き戻さない。スキーマ差異があれば保守状態と退避物を保持して停止する。
管理者認証
sudo -n true が sudo: a password is required を返したため、実機の管理者認証をユーザーが行った。配備自体は依頼済み。
ユーザーのPowerShellで実行済みのコマンド(再実行不要):
ssh -t truenas_admin@100.65.124.96 "sudo python3 /home/truenas_admin/parent-lifecycle-20260923-06951a6/start-systemd.py"
Update service started と表示されたら再実行しない。SSHを閉じてもsystemdが処理を続ける。
完了の確認
実機の同ディレクトリの status.json が complete となり、.local-dev/truenas-parent-lifecycle-20260923/capture_completion.py で実機メタデータを独立して照合した。
本番反映の結果
- 完了:2026-09-23 06:30:49 JST。独立照合:06:31:01 JST。
- 稼働版:
06951a6eed379536e1791d4abdcf775ecd799a99。 - 実機イメージ:
sha256:e5dc0464446912e4ca1f2a465a6d9ea2a85dd20f462af8ebffce3cf0606776ec。 - 本番ソース:
/mnt/main/open-hoikuict-pilot/releases/06951a6eed37-20260922T212406Z。 - Compose SHA256:
a15583b8d1edf8b23827986068b6e95af2eba17992ef91c6ab212cf128a2db3b(変更なし)。 - 更新後deployment.json SHA256:
f6ba533ed02dde2de1acb7098b5de14431e678ee9bc940d298861bbd6a36de0a。 - 実機の隔離環境で340テスト成功。失敗・スキップ・収集エラーは0件。復元演習、本番DBコピーの起動と読み取り専用検査、既存バックアップ8件の互換性確認も成功。
- アプリ・gateway・backup-worker・restore-workerが正常。公開接続の再開後、公開
/healthzのHTTP 200とstatus: okを独立確認した。 - 更新前の既存73テーブルの記録、添付8ファイル、DBスキーマ、設定を照合し保持。園児100人、家庭134件、保護者アカウント8件、園児との紐づけ105件を維持した。
- 保護者ID 4の98人への紐づけを保持。配備前のDBコピーと配備後の両方で、利用中7件・停止中1件の状態を確認。配備による状態変更と検査用メール送信は0件。
- 全保護者の認証管理・一覧・編集の共通状態、プロフィールからの状態変更欄の非表示、対象7件の確認画面、管理者以外の認証管理拒否を読み取り専用で検査した。
- 家庭アーカイブ52件とその履歴、初期台帳の38項目・確認画面・権限等の既存機能も読み取り専用で検査。配備に伴う家庭削除・アーカイブ・台帳への試験登録は0件。
- 定期バックアップは更新直前と同じ「有効・毎日02:00 JST・weekday=0」を保持。
- 直前退避:
/mnt/main/open-hoikuict-pilot/backups/before-parent-lifecycle-20260922T212406Z。 - スナップショット:
main/open-hoikuict-pilot/runtime@before-parent-lifecycle-20260922T212406Z。
完了記録は .local-dev/truenas-parent-lifecycle-20260923/bundle/ の completed-status.json、live-after.json、verified-completion.json、public-health-after.json に保存した。
今後の停止・再開は保護者アカウントの「認証管理」で行う。通常再開は現在のパスワードと園児との紐づけを保持し、再ログインを求める。卒園後に弟妹が入園する場合は、弟妹への閲覧許可を明示的に追加して再開する。