# 引き継ぎ（相手エンジニア向け）— monaka 監査・修正計画・デプロイ整備

**最終更新: 2026-06-29 / ブランチ `claude/content-verification-undx76`（main未マージ）**

このファイルが**入口**です。Claude Code（web）で `monaka` を全領域調査し、監査・バグハント・修正計画・デプロイ整備を行いました。**実コードは未変更**（ドキュメント／提案ファイルのみ追加）。**main へのマージはこちらでは行っていません** — 採否はそちらで判断してください。Cursor に各ファイルの URL を渡せば、指摘を実コードで再検証できます（各レポート末尾に「Cursor再チェック用プロンプト」あり）。

---

## 0. このブランチに追加したファイル（成果物）
| ファイル | 内容 |
|---|---|
| `docs/HANDOFF-engineer-20260629.md`（本書） | 全体の入口・最優先まとめ |
| `docs/audit-degradation-techdebt-20260629.md` | **構造監査**（MECE6観点: ルート/セキュリティ/DB/デッド/パリティ/テスト）H1-H8・M1-M12・C1-C6 |
| `docs/bug-hunt-core-flows-20260629.md` | **バグハント**（6コアフロー行レベル精読）P1-P5＋各フロー詳細 |
| `docs/fix-plan-content-verification-20260629.md` | **修正計画 A-D**（ドキュメント是正/CI/会員初回ログイン/契約締結） |
| `docs/deploy-setup-conoha.md` | **デプロイ手順**（GitHub Actions→ConoHa SSH・鍵はSecrets） |
| `.github/workflows/deploy.yml.proposed` | SSHデプロイ ワークフロー案（`.proposed`＝未起動） |

---

## 1. まず直すべき最優先（構造監査＋バグハントの統合TOP）

> 優先度は「実害・ユーザー影響・起動クラッシュ」を基準。`[要仕様確認]`はテレコム決済の外部仕様確定が前提。

| 順 | 項目 | 種別 | 根拠(file:line) | 出典 |
|---|---|---|---|---|
| 1 | **phpunit のテストDB未分離**（本番DB破壊リスク・過去事故あり） | 事故防止 | `phpunit.xml:24-26` | 構造H6 |
| 2 | **決済webhookが未入金/金額不一致でも"成功"確定** [要仕様確認] | セキュリティ/金銭 | `TelecomCreditWebhookService.php:127-138,75-82` | バグP1/P2 |
| 3 | **公開ページのセクション余白が保存後に消える** | デグレ(公開) | `preview.blade.php:268-275`／`editor.blade.php:1402-1443` | 構造H1 |
| 4 | **`partners`/`partner_campaigns` マイグレーション欠落**で`/partner`クラッシュ | デグレ(起動) | `routes/web.php:309`＋models | 構造H3 |
| 5 | **`password.*`/`verification.resend` 未定義ルート**で500 | デグレ | `auth/passwords/*`・`auth/verify.blade.php` | 構造H2 |
| 6 | **メール重複送信**（mail_deliveriesユニーク欠如＋リマインダreserved未除外） | 冪等/実害 | `MailDeliveryStateService.php:90-108`／`ScenarioReminderDeliveryService.php:113-197` | 構造H7・バグP3 |
| 7 | **画像ミラーSSRF**（内部IP/メタデータ到達） | セキュリティ | `FunnelPageImportImageMirrorService.php:266-274` | 構造H4 |
| 8 | **DeliveryAccountのSMTP/LINEシークレット平文** | セキュリティ | `app/Models/DeliveryAccount.php` | 構造H5 |
| 9 | **会員slug非グローバル一意**で別オーナーサイト取り違え | 取り違え | baseline mig `:379`／`EnsureMemberBelongsToSlugSite.php:16` | バグP4 |
| 10 | **sequential受講が非公開トラック混入で永久ロック** | デグレ(機能) | `BundleCourse.php:80`／`BundleCourseAccessService.php:244-267` | バグP5 |
| 11 | **購入後付与の二重実行**（lock/tx無し）／LINE webhook冪等キー無し | 冪等 | `OrderPaymentFulfillmentService.php:17-27`／`Api/LineWebhookController.php:71-74` | 構造H7・バグ |
| 12 | **会員ダッシュボードN+1** | 性能 | `BundleCourseOfferService.php:99-218`／`MemberPortalController.php:710,774` | 構造H8 |

中位（負債）・衛生・契約/取込の詳細は各レポート参照。

---

## 2. デプロイ整備（GitHub Actions → ConoHa）

**やりたい形＝標準的で実現可能**:「Claude Code/Cursorで実装 → GitHubにpush → Actionsが ConoHa へ SSH デプロイ。**鍵はGitHub Secrets**（リポジトリ・サンドボックスに置かない）」。

- 旧 `deploy.yml`（`SamKirkland/FTP-Deploy-Action`・SFTP非対応で**全赤字**・root平文）を、`deploy.yml.proposed`（rsync over SSH＋配置後artisan）へ置換する案を用意。
- **このサンドボックスからの直接デプロイは非推奨**（揮発性・鍵をここに置く形になる）。役割は`git push`まで。
- **そちらで実施が必要**: ①ConoHaに非rootデプロイユーザー＋公開鍵 ②GitHub Secrets登録（`SSH_PRIVATE_KEY`/`SSH_HOST`/`SSH_USER`/`SSH_PORT`/`DEPLOY_PATH`）③`.proposed`→`deploy.yml`リネーム＋main反映。
- 詳細・リスク（`rsync --delete`、`migrate --force`自動実行の是非）は `docs/deploy-setup-conoha.md`。

---

## 3. そちらで先に決めること（こちらでは未決）
1. **`.github`/作業の正をどのブランチに集約するか** — 現 `main`(`55101ad`) に `.github` が無く、旧deploy.ymlとJun18-19の作業（バージョンバッジ・取込改善）は `wip-version-badge-and-import-20260619`(`bc253a6`) のみに存在。**main/wip のどちらを正にするか**を決めないとCI/デプロイを載せられない。
2. **修正の着手順とブランチ運用**（このブランチを取り込むのか、項目ごとに別PRにするのか）。
3. **テレコム決済の実webhook仕様**（成功判定フィールド名・成功コード）— P1/P2の最終修正に必須。
4. `migrate --force` を自動デプロイに含めるか（partners欠落・FK型の解消前は手動運用が安全）。

---

## 4. 補足（誤解防止）
- 「購入後の自動付与は未接続」は**古い記述で誤り** — テレコム経路は**実装済み**（`OrderPurchaseFulfillmentService`）。ただし**購入者の初回ログイン導線（ウェルカムメール＋PW設定）が未実装**で、付与されても本人はログインできない（修正計画C）。詳細は `fix-plan` A/C。
- 健全な点も多数: TODO残骸ゼロ、`.env`/`vendor`誤コミット無し、会員レッスンIDORは堅牢、訪問者入力はエスケープ済み、LINE webhook署名検証あり、契約のsync誤削除なし、イベント定員境界はoff-by-oneなし。
- 各レポートは「確証あり/[要確認]/許容(管理者信頼前提)」を区別。**HIGHのうちH1/H3は本調査で直接裏取り済み**。

---

*この引き継ぎは Claude Code(web) による調査結果。実コード未変更・main未マージ。修正に着手する場合は各レポートのCursor再チェックプロンプトで再検証の上、1件1コミット、`docs/funnel-spec.md`＋§11チェックリストも更新してください。*
