helm-app v0.2 — Capture · Badge · Detail Pages

IMPLEMENTATION PLAN · 2026-07-04 · APPROVED

読み取り専用の v0.1 を、helm の iOS/iPadOS/macOS エッジに育てる。Brain dump をアプリから投げ、Claude が朝に振り分け案を作り、承認ひとつで helm が更新される。バッジが「今やるべき数」を常時示し、ダッシュボードの各セクションは詳細ページへ展開する。

END-TO-END FLOW — brain dump が helm に届くまで

iPhone/iPad app 「+」→ テキスト入力 → POST /api/capture(圏外ならアプリ内キュー・200 で初めて消す = 損失ゼロ) ↓ mini memory/inbox/brain-dump-YYYY-MM-DD.md に追記 + git commit/push(Reminders 排水路と同一フォーマット) ↓ 07:15 Routine brain-dump-triage(提案のみ・正典に触らない)→ _pending-triage-YYYY-MM-DD.md に振り分け案 ↓ あなた /triage-dump → Batch Approval Plan 表示 → 承認 ↓ Claude 適用: タスク行 → プロジェクトページ / 日誌 / Horizon 行 / wiki 取り込み / 破棄 dump は inbox/archive/ へ移動 → バッジが基準値に戻る

KEY DECISIONS

#決定理由
D1triage 済み = inbox/archive/ へファイル移動同日の追加キャプチャが自動で「未 triage」に戻る。カウントはルートの行数だけ
D2バッジ計算式はサーバ側(/api/status.json の badge)式変更に TestFlight 配信が不要。badge = Horizon hot(毎日行を除く)+ 未 triage 数
D3capture は append + ローカル commit 成功後に 200push・再描画 kickstart はベストエフォート。index.lock は 3 回リトライ
D4詳細ページは別レンダラー(render-details.mjs)既存 render.mjs とゴールデンテストを触らない。テンプレエンジンは共用
D5Routine は提案のみ(L0)憲法 §3 の人間ゲート準拠。承認 20 回の実績で L2(全自動)昇格を提案
D6iPad = TARGETED_DEVICE_FAMILY "1,2" / Mac = Designed for iPadダッシュボードは既に ≥720px 2カラム対応 → iPad/Mac は追加コードほぼゼロで desktop グリッド表示。Catalyst は必要になってから

PHASE 1 — API サーバ + コレクターM

  • lib/serve-lib.mjs 新規 — ルート許可リスト・capture 検証・drain 互換フォーマッタ・未 triage カウント・badge 計算(純関数・テスト対象)
  • serve.mjs 書き換え — GET ルーティング / GET /api/status.json / POST /api/capture(16KB 上限・直列化・トレーラー付き commit)
  • collect.mjs — auto.json に captures 数 + lint 全内訳を追加
  • bun テスト追加 → mini へデプロイ → curl で E2E 検証

PHASE 2 — 詳細ページ + タップ導線M

  • /s/horizon — obligations 全表(要確認・waiting 含む)
  • /s/memory — lint 全ルール内訳 + Δ + バッチ数
  • /s/today — Today + Briefing の統合詳細
  • /s/triage /s/explainer — 既存サーフェスをルーティング
  • ダッシュボードの h2 をリンク化(› 表示)・WKWebView 内で遷移・エッジスワイプで戻る
  • カレンダー/メールのプレビューは GCP OAuth ①〜⑤ 完了後の別フェーズ

PHASE 3 — アプリ v0.2M

  • フローティング「+」→ キャプチャシート(複数行・即保存・配信はキュー任せ)
  • CaptureQueue — 永続オフラインキュー・200 でのみ除去・未送信数をボタンに橙バッジ表示
  • BadgeRefresher — BGAppRefresh + フォアグラウンド時に /api/status.json → アプリバッジ
  • iPad ネイティブ + Mac (Designed for iPad) — desktop 2カラムをそのまま表示
  • project.yml の Info.plist 移行が最大リスク → push 前にローカルビルドで検証

PHASE 4+5 — トリアージ + ドキュメントS

  • /triage-dump スキル — 分類(task / log / horizon / wiki / discard)→ 承認 → 適用 → archive 移動 → 実績カウント
  • Routine brain-dump-triage(毎朝 07:15・提案のみ)を /schedule で登録
  • runbook 2本更新・helm-app.md v0.2・auto-memory

RISKS

リスク対策
mini 上の git 競合(render pull × capture push)index.lock リトライ・POST 直列化・小さい commit・autostash pull
キャプチャ消失構造的にゼロ — 200 まではキューから消さない・200 は commit 後のみ
Info.plist 移行で Xcode Cloud 破損push 前のローカル generate + build をゲートに
BGAppRefresh の間引き(iOS 仕様)フォアグラウンド更新が保証線。バックグラウンドは補助
POST の悪用面tailnet 限定 + 許可リスト + 16KB 上限 + 検証。HTML 側は読み取り専用のまま

VERIFICATION — 完成の定義