# 大移動の計画と制約

状態: **実行中**（2026-08-20 所有者裁定）。

## 確定した方針（2026-08-20 裁定）

- 元のフォルダ群（headache-no1 等）は**一切変更せず凍結保持**。
  android/ と spec/ は platform へ**複製**（移動ではない）
- 複製の基準コミット: headache-no1 main `6d47df0a`（origin 同期済み・0049 まで全根着地、
  残は 0022 実機受入のみ。以後 no1 は 0022 以外変更しない旨 kodama と合意。
  no1 側照合済み: 複製時の HEAD は `85028bdd` 系だが差の2コミットは ledger 記帳のみで
  `git diff --stat 6d47df0a..HEAD -- android/ spec/` は空——基準として有効）
- 新版 Android は platform の git 管理下で改修し、**platform main に直接着地**
- 範囲: no3 UI への**完全パリティ（ウェアラブル含む**、Android は Health Connect）
- 体制: platform セッションの Workflow 直営（承認済み）
- 値の出自の正典: `common/design/PROVENANCE.md`（no3 セッション提供）

## 実装裁定（2026-08-20・所有者）

1. no1 独自機能はタブ内自然配置: チャット=Record 上部導線、月次/年次サマリ=Calendar 内導線、
   医師に公開=Share タブ
   **【改定・同日】Share タブは no3 完全再現とする**（受診用に提供・月次ビュー・
   PROM（HIT-6・MIDAS）・改善要望の4カード。ui-spec/share.md が正典）。
   旧「医師に公開」（院コード・表示名・全公開/非公開の二択）は UI 導線から撤去・コード休眠。
   同期送信の実体（core-sync）は「受診用に提供」が新しい入口
2. ストレス既定値=未選択（PHR stress_level null。no3 実装準拠。no3 ledger に
   「.none を StressLevelChoice.none へ修正してはならない」と記録済み）
3. warning 色は no3 実装値 #B0571E / #FAEBD3 が正（Patient1 CSS 側が旧値）
4. mood キャラはプロト色丸で実装（画像受領後に両 OS へ差し込み）
5. 見た目の既定は XN（no3）、no1 の3テーマ切替は保持

## Android UI 大改修の着地（2026-08-20）

- main `2d8528d` にて完了: 骨格→6画面並列実装→統合→検査入口→最終批評 pass
- Proof: scripts/test.sh exit 0（Android 単体 480件・spec 657件・assembleDebug）
- 積み残し（統合席・批評の申し送り）:
  - 気圧の実データ源: production DI が Fake クライアントのまま（HttpGoogleWeatherClient は
    実装済み、API キー配線が別途必要）
  - バンド入力の入力画面・気圧詳細画面: no3 側にも ui-spec 未書き起こしのため未実装
    （導線は配置済み・タップ無反応）
  - 同意文中の「iPhone」文言の Android 表現は裁定待ち（原文のまま実装・テストで固定）
  - 端末認証ロックは既存挙動保持（同意→認証→タブの順）

## no1 → common/spec の移送で壊れる箇所（no1 kodama からの申し送り・2026-08-20）

1. **検査の入口**: no1 の `scripts/test.sh` は spec/ が在る限り npm test を実行し
   失敗として数える。spec/ を抜くと channel 検査の構成が変わる
2. **spec/sync → spec/phr の相対参照**: 0041 の同期仕様は `spec/phr/schemas/` の
   実ファイルを参照し、参照の実在を検査するテストがある（パス変更で落ちる）
3. **実装側テストが実行時に spec を読む**: android の FixturesPalette 系は fixtures を、
   spec/sync のテストは schemas を、リポジトリを遡って探索。server/ のテストも
   spec/sync の形に依存
4. **share→export 改称**: no1 の共有セッション型資産（0016-0020, 0024, 0031、
   spec/share 含む）は所有者裁定で「休眠・保持」。
   → no1 側は原本を凍結のまま残し、**export は platform 側の新系統として分岐**
   させるのが安全（no1 の休眠資産の Proof を壊さない）

## 合意した進め方（案）

- 移送は no1 側でも1本の契約（根）として受け、
  Proof は「移送後も `scripts/test.sh` が exit 0」で立てる
- 順序: **no1 の 0022（実機受入・HOTL）完了後に移送**を推奨
  （受入中に spec が動くと不具合の切り分けが濁るため）
- タイミングの裁定: 所有者

## 木の独立（2026-08-20〜21・所有者裁定に基づく再配置）

設計原則（所有者裁定 2026-08-20）:
「システム全体との整合を司るもの（common との一致検査・検査入口）は platform（森）の
持ち物。木（patient-no1）は自己完結し、森が外からファイルレベルで検分する」

- **物理再配置**: `android/` 配下のアプリ一式を `android/patient-no1/` へ移動。
  将来の木も android/ 直下に並べる
- **整合検査の森への移管**: 木の中の越境テスト（XnDesignTokensProofTest 等、
  common/ の正典を参照する検査）は削除し、同等以上の検査を platform 側
  `scripts/check-parity.sh`（+ 単体テスト `scripts/test-check-parity.sh`）へ新設して移管。
  spec 写し・デザイントークン・フォント・アセット台帳を sha256/値レベルで突合する。
  検査入口は従来どおり `scripts/test.sh` の1本
- **git 分離**: `android/patient-no1/` は独立 git リポジトリ
  （初回コミット「patient no1 の木として独立（系譜: headache-no1 6d47df0a →
  headacheapp-platform b12a240）」）。platform 側は .gitignore で
  `android/patient-no1/` を除外し、旧 android/** の追跡を落とした
- Proof: 両リポジトリの git status クリーン + `bash scripts/test.sh` exit 0

## リポジトリの引き継ぎ（2026-08-21・所有者意向＋no1 kodama 合意）

- patient-no1 は新リポではなく **shunxneuro/headache-no1 の新ブランチ `patient-no1`** として同居
  （患者 no1 の物語を1リポジトリに。main の凍結・0022 は無傷。Issue 資産はゼロ件と確認済み）
- **no1 kodama の条件（ledger 記録済み・合意）**:
  1. **0022 完了まで「main」という名前の参照を残す**（no1 の幹は origin/main → main の順で
     名前固定参照。main が消えると 0022 の走行・着地・帳簿 push が止まる）。
     世代交代は 0022 の着地と終了記録の後
  2. 世代交代時は mvp0 ブランチに加えて **git タグ（mvp0-final）を最終コミットに打つ**
     （タグは不変で MVP0 の正確な最終状態を指せる）

## no3/no4 側の状況（2026-08-20 受領）

- UI 大改修 0032〜0039 全着地・push 済み（main: 8291bab）。詳細は iphone/README.md
- PHR 変換は no1 スキーマ完全一致 → spec を common へ移しても両者の共通言語は既に成立
- no3 側の残タスクに「headacheapp-platform リポジトリ新設と大移動」が明記されており、
  本リポジトリがその受け皿

## 未着の入力

- ③ 設計理念（木と森・LLM 3層）→ PHILOSOPHY.md へ

## iPhone 側の大移動（2026-08-21・所有者裁定）

- **no3 でほぼ完成している統合アプリを土台に、no4・no5 へそのまま基本移植**
  （no3 リポの app/ を iphone/ へ複製。基準コミット: headache-no3 `8344bcf`）
- **バンド入力は no1 の要件のため iPhone からは外す**（PHILOSOPHY §2「バンド入力は
  no1 系のみ」の profile 駆動を実装で確定。退役面の検査は検査専用入口で生かす掟に従う）
- no4 は no3 プロジェクト内の既存ターゲット、**no5 は新ターゲットとして追加**
  （識別子・TestFlight 手順は headache-no5 の 0013/0016 系譜を引き継ぐ）
- **ゴール: 現 no5 と同様に TestFlight で配布できる状態**（署名・アーカイブまで機械で、
  アップロード認証は所有者の手番になり得る）
- 原本（headache-no3/no4/no5）は読み取り専用・凍結せず現状のまま（no3 は活動中の木）

## iPhone 統合の木の解体と3分家（2026-08-21・所有者裁定「全て木はリセット」）

- **android と同じ形に揃える**: iphone/ 直下に患者ごとの独立 git リポジトリ
  patient-no3 / patient-no4 / patient-no5 を新設し、統合の木 `iphone/integrated/` は
  解体（リセット）した。各患者は自分の実体ソースを持ち、以後独立に進化する
- 実体の出自: no3 は HeadacheNo3 実体、no4/no5 は materialize で生成した実体を採用し
  **以後 materialize 非依存**。scripts は患者専用形（患者引数の既定は自分・他患者指定は
  ガード）に整理し、fixtures / docs/runbook / profiles / .gitignore を各木に同梱
- 分家前の検証: 3木とも swift test 146件 0失敗・xcodebuild BUILD SUCCEEDED・
  check-identity / check-testflight-runbook 合格。バンド入力退役の形・検査はそのまま引き継ぐ
- **git 分離**: `git init --template=` で独立 git 化し初回コミット
  （no3: `0aecfb1` / no4: `9d71846` / no5: `c9a6f61`）。platform 側は .gitignore で
  `iphone/patient-no3/` `patient-no4/` `patient-no5/` を除外（旧 `iphone/integrated/` 行は廃止）
- 森の検査の追随: check-parity.sh の iphone の木の発見規則を新レイアウト
  （iphone/ 直下で *.xcodeproj を配下に含むディレクトリ）に対応させ、3木それぞれの
  DesignTokens.swift・フォント・schema 写しを従来どおり検分。test-check-parity.sh の
  iphone 系ケースも新レイアウトで維持（検査は弱めない）
- 系譜: headache-no3 `8344bcf` → platform integrated `6ea6704` → 各患者の木として分家。
  HeadacheNo4Release の署名済み成果物は無傷

## iPhone 3木への履歴移植（2026-08-21・所有者裁定「これまでの git を移動」）

- 各患者の木の .git を、新品の履歴から**各患者の元リポジトリの全履歴の接ぎ木**に差し替えた
  （作業ツリーは無変更・整合検査合格を確認）。木は「患者の物語の続き」になった
- patient-no3: headache-no3 main `21e6cdc` 基点・427コミット＋分家 `bcc6b42`
- patient-no4: headache-no4 main `517bcff` 基点・171コミット＋分家 `3722de7`
- patient-no5: headache-no5 main `2c660d7` 基点・134コミット＋分家 `3855519`
- コードの出自（headache-no3 8344bcf）と旧 platform 初回コミットの内容は分家コミット本文に記帳
- 各木の origin は shunxneuro/headache-no<N> に設定済み。`platform` ブランチとしての push は所有者の手番
