posimai-root/STATUS.md

196 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Posimai — 現在の状態
> このファイルはセッション末に AI が更新する。「今何をしている最中か」を引き継ぐ唯一の場所。
## 作業中
- 特になし
## mai のPC から実行待ち
- **posimai-scVercel**: Project Settings > General > **Root Directory** を必ず **`posimai-sc`** に設定すること。未設定のまま `posimai-root` へ push すると、本番デプロイがリポジトリルート扱いになり **`sc.posimai.soar-enrich.com` が Vercel の 404NOT_FOUNDになる**ことがあるDNS ではなくデプロイ成果物の不一致)。再発時は `cd posimai-sc && npx vercel deploy --prod --yes` で正しい静的ファイルを出したあと、`npx vercel alias set <そのデプロイURL> sc.posimai.soar-enrich.com` でカスタムドメインを張り直す。Root Directory 設定後は Git push のみでよい。
- **posimai-boki** は独立リポジトリで Gitea/GitHub へ push 済み。追加分を出したときは `cd posimai-boki && npm run deploy`
## 次にやること(優先順)
### posimai-bokiP1 — P0 完了+学習フロー強化済み)
1. **P1-1ほぼ達成**: 概念は「もっと詳しく」で折りたたみ済み。任意改善: `details/summary` への置き換え・アクセシビリティ微調整
2. **P1-2一部達成**: 「3ステップで学ぶ」用語→仕訳イメージ→理解度実装済み。残り: **既存 quiz のメタ分類**(難易タグ・出題意図)が必要ならデータ設計
3. **P1-3: 深掘りモーダル** — 比喩・長い補足のモーダル分離(未着手)
4. **技術負債(任意)**: 自動テスト、CSS の `index.html` 外だし、`categories.js` の分割、ビルド導入(ハッシュ付きアセット)
### posimai-boki P0 完了状態2026-04-19 〜 更新)
- URL ?unit= 同期でリロード後も単元を復元 ✓
- 全 23 単元に examtips試験対策メモ
- freq/diff頻出度・難易度全単元設定 ✓
- ミス追跡wrongUnits localStorage
- ホームに「今日の学習」ブロック(苦手 + 未学習 を1タップで開始
- サイドバーに苦手インジケーター ✓
- **弱点集中特訓**・**単元内 3 ステップ**・概念折りたたみ・ブロック並び概念→要点→試験メモ→3ステップ→理解度
- **データとアプリの分離**: `js/data/categories.js` / `drills.js` + `js/app.js`
- **表示 HTML**: DOMPurify + `safeHtml()`、解説の保存時サニタイズ ✓
- **学習フロー UX**: 戻る1枚前、学習フローを終了理解度保持、理解度をクリアして学ぶ、`#comprehension-quiz` へスクロール ✓
### Guard / Tauri
1. **Timer → Pulse 連携(セッションログ)** — タイマー終了時にセッション記録モーダル。`posimai-timer-sessions` に保存
2. **Tauri アプリ動作確認** — デスクトップショートカットから起動、CodeViewer が WebView でも動くか確認
3. **Diff → 履歴保存 + Journal 送信** — 比較結果をlocalStorage保存・Journal連携
### Guard 完成状態2026-04-14
- ルールエンジン133ルール
- 静的修正テンプレート85ルール
- VS Code で開く ✓
- CLI`npx tsx cli/guard.ts`)✓
- VS Code 拡張APIキー不要
### Guard ビルド方法メモ(次回再ビルド時)
```bash
cd /c/Users/maita/posimai-project/posimai-guard-app
export PATH="$PATH:/c/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64:/c/Program Files (x86)/Windows Kits/10/bin/10.0.26100.0/x64"
export LIB="C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.44.35207\lib\x64;..."
export INCLUDE="..."
node_modules/.bin/tauri build
# → target/release/bundle/nsis/Posimai Guard_0.1.0_x64-setup.exe
# → target/release/bundle/msi/Posimai Guard_0.1.0_x64_en-US.msi
```
### MCP 設定mai 作業)
1. **Stripe キー確認・ローテーション**
- Stripe ダッシュボード → Developers → Logs で 4/11 の API リクエストを確認(使用元の特定)
- 既存の `sk_test_...` キーをロールオーバー(無効化)
- 新しいテスト用シークレットキーを発行(名前: `posimai-mcp`
- [.mcp.json](.mcp.json) の `FILL_IN: Stripe ダッシュボードの sk_test_...` を置換
2. **Vercel トークン発行**
- [vercel.com/account/tokens](https://vercel.com/account/tokens) → Create → 名前: `claude-code-mcp`、Scope: Full Account
- [.mcp.json](.mcp.json) の `FILL_IN: vercel.com/account/tokens...` を置換
3. **Claude Code 再起動** → vercel・stripe MCP が有効になる
### ビジネス化
1. **Eiji に Stripe sandbox テストをお願いする**(購入フロー確認)
2. **日本酒アプリを完成させて展開**mai 最優先)
3. 特商法ページ記入mai 作業 — 事業者名・住所・電話番号)
4. Store デザイン確定Eiji と A/B/C/D から選定)
5. Stripe 本番モード切り替え(上記完了後)
## mai 作業待ちAI では実行できない)
| タスク | 内容 | 優先度 |
|--------|------|--------|
| **article-keeper Firebase キー削除** | Firebase Console でプロジェクトごと削除(不要なら)。完了後に AI が article-keeper/ ディレクトリを削除・コミットする | 高(キーが GitHub 公開履歴に存在) |
| Stripe sandbox テスト | Eiji に購入フロー確認依頼 | 中 |
| 特商法ページ記入 | 事業者名・住所・電話番号 | 中 |
| Store デザイン確定 | Eiji と A/B/C/D から選定 | 中 |
## ブロック中
| ブロック | 待ち先 |
|---------|--------|
| Stripe sandbox テスト結果 | Eiji |
| premium 実装対象決定 | mai + Eiji の判断 |
| Store デザイン確定 | Eiji |
| Stripe 本番切り替え | Store 確定・特商法記入 |
## 保留中(着手条件あり)
| タスク | 条件 | 理由 |
|--------|------|------|
| server.js リファクタリングlib/ + routes/ 分割) | 3500行超 or 新ルート追加時 | 現在 ~3130行、本番稼働中・障害なし |
| habit/pulse → VPS API 移行 | premium 対象決定後 | テーブルは VPS 存在済み。localStorage データの移行 UX 設計が必要 |
| user_activity テーブル追加 | mai 確認必要DB スキーマ変更) | Digest 週次集計の前提。CLAUDE.md 要確認事項 |
| Redis 移行webauthnChallenges | スケール要件が出てから | 現状インメモリで問題なし |
| **Brain アクセントカラー確定** | mai 判断 | 2026-04-19 に indigo (`#818CF8`) → teal (`#6EE7B7`) へ変更。Posimai 標準に合わせたが、Brain は読書アプリとして indigo の方が雰囲気に合う可能性あり。indigo に戻す場合は `[data-app-id="posimai-brain"] { --accent: #818CF8; --accent-dim: rgba(129,140,248,.12); }` を style.css に追加。 |
## 直近でやったこと2026-04-18 — posimai-boki
- **リポジトリ**: `posimai-boki` 独立リポジトリGitea/GitHub。`npm run deploy` = 両リモート push → Vercel 自動デプロイ
- **構成**: カリキュラムを `js/data/categories.js` / `drills.js`、Alpine 本体を `js/app.js` に分割。`sw.js` で該当 JS をプリキャッシュ
- **セキュリティ**: DOMPurify固定版 + SRI、`x-html` は `safeHtml` 経由、クイズ解説は保存時サニタイズ
- **UX**: 単元ブロック順、Step1 タップ進行、戻る1枚前、「学習フローを終了」、弱点特訓は「特訓をやめる」、理解度クリアして学ぶ、Step3 から `#comprehension-quiz` へ誘導
- **STATUS**: 本節および「mai のPC から実行待ち」の posimai-boki 古い記述を整理
## 直近でやったこと2026-04-14 セッション2
### ponshu / Guard 拡張 / Guard VS Code修正
- **ponshu_room_lite 消費者APK**: 最新コミット04-12 13:23でリビルド完了 → `build/apk_releases/2026-04-14_22-54-28/` に maita・Eiji 向け各 90MB
- **posimai-guard-ext**: ルールエンジン組み込み完了。APIキー不要でスキャン可能に。Gemini/Claude はオプション追加スキャンに降格。バンドル 120KBルールエンジン込み
- **Guard「VS Code で開く」修正**: `window.open(uri, '_self')``window.location.href = uri` に変更。popup ブロッカーによる無効化を解消
- デプロイ済みVercel 自動デプロイ中)
## 直近でやったこと2026-04-14
### Guard 静的修正テンプレート + セキュリティ修正
- **ruleEngine.ts**: `RULE_FIXES` マップを追加。85ルール以上に静的修正テンプレートを設定。`makeIssue()` が `RULE_FIXES[rule.id] ?? null` を返すよう変更
- **CodeViewer.tsx `InlineFix`**: `issue.fix` があれば即表示API 呼び出しなし)。紫色の TEMPLATE ラベル + コピーボタン。「AI生成に切替」ボタンで従来の詳細 BEFORE/AFTER 生成も可能
- **`/api/fetch-url`**: レートリミット未設定だったため追加10 req/min per IP
- **`clientIp.ts`**: `x-forwarded-for` の最後のエントリを使うよう変更スプーフィング耐性向上。IP 形式検証追加
- デプロイ済みVercel 自動デプロイ中)
## 直近でやったこと2026-04-19〜20 Together セキュリティ強化)
### Together 安全性修正(全て VPS 反映済み・Eiji/Nanami への影響なし)
- **JWT legacy fallback なりすまし穴修正**`96f22b6`: legacy path は warn ログのみ、user_id 紐付きは厳格チェック
- **GET /together/groups/:groupId 認証なし invite_code 露出修正**`222238f`: `?u=username` + `togetherEnsureMember` でメンバーのみ返却。フロントは `?u=${currentUser}` 送信済みで整合している
- **together_members.user_id バックフィル**: 起動時 SQL で `users` テーブルと username 一致行を自動紐付け
- **UI バグ修正**: 未読ドットに `event.stopPropagation()`、設定パネルに invite_code 表示、名前フィールド変更時データ消失を解消
### 残る既知のリスク(商用前に対応)
- グループ作成・参加エンドポイントはまだ認証なしmai + Eiji のみ運用で許容)
- JWT 必須化legacy path 完全削除)は user_id 紐付けが全グループで完了してから
- together_members の user_id バックフィルが空振りしていないか要確認: `SELECT username, user_id FROM together_members;`PostgreSQL MCP 経由)
## 直近でやったこと2026-04-11 セッション3
### セキュリティ修正・コード品質改善(批判的コードレビュー対応)
- **Together API メンバー検証**: `/together/share` `/together/react` `/together/comments``together_members` テーブルでのグループ参加確認を追加。非メンバー投稿を 403 で拒否 → VPS デプロイ済み
- **manifest.json id 統一**: lens / diff / habit / pulse の `"id"``"posimai-xxx"``"/posimai-xxx/"` 形式に修正new-app-guide.md 仕様通り)→ 各アプリデプロイ済み
- **feed XSS 修正**: `onclick="openInReader('${article.url}', ...)"` の URL 直接埋め込みを `data-url` 属性 + イベント委任に変更 → デプロイ済み
- **PostgreSQL MCP**: 前セッションで完了SSH トンネル設定・start-postgres-mcp.sh 作成。Claude Code 再起動で有効化される
### 残る既知の課題2026-04-11 時点、一部は上記で解消済み)
- **9アプリ base.css 未移行**: feed/maps/hotels/reader/journal/daily/events/timer/storeカスタムテーマ以外
## 直近でやったこと2026-04-11 セッション2
### posimai-ui 移行バッチCSS 重複削除・base.css 統一)
- **posimai-lens**: 完全移行768行 → 632行+ デプロイ済み
- **posimai-diff**: 完全移行807行 → 705行+ デプロイ済み
- **posimai-clean**: 最小移行data-app-id + base.css 追加、JWT handoff は既存実装あり)+ デプロイ済み
- **posimai-think**: 最小移行data-app-id + base.css + CSP style-src 更新)+ デプロイ済み
- **posimai-digest**: 完全移行1602行 → 1113行+ JWT handoff 追加 + デプロイ済み
- **posimai-pulse / posimai-habit**: 前セッションで移行・デプロイ済みを確認
- **posimai-ui/base.css**: サイドバーレイアウトパターン追加済み(前セッション)
- **_template-minimal / create-app.sh**: 前セッションで最新化済み
### PostgreSQL MCP 設定
- [docs/postgresql-mcp-setup.md](docs/postgresql-mcp-setup.md): セットアップガイド作成SSH トンネル・read-only user・セキュリティ要件
- [.mcp.json](.mcp.json): MCP 設定テンプレート作成(`.gitignore` に追加済み)
- **次のアクション**: VPS に `posimai_readonly` ユーザー作成 → パスワードを `.mcp.json` に設定 → SSH トンネル起動
### 移行スキップ(意図的)
- **brain / atlas / analytics / dev**: カスタムテーマnavy/violet 等)のため移行しない
- **clean / think**: CSS が複雑混在のため最小移行のみ(重複 CSS は残存するが機能的に問題なし)
## 直近でやったこと2026-04-11 セッション1
- **全アプリ認証統一**: `posimai_token`JWTを優先、`pk_` キーをフォールバックに変更Brief / Daily / Journal / Ambient
- **Brief**: API キー手入力欄を廃止 → ログインボタン UI に変更
- **Daily**: 設定の API キー欄を撤去 → ログインボタン UI に変更
- **Journal**: Auth Gate を「ログインする」ボタンに変更JWT で自動通過)
- **Ambient**: `posimai_token` を優先認証に対応
- **Habit / Pulse**: ログイン先を `posimai.soar-enrich.com/login` に修正(旧 `posimai-dashboard.vercel.app` から)
- **server.js**: 購入チェック失敗時のストア URL を `store.posimai.soar-enrich.com` に統一(旧 `posimai-store.vercel.app`
- **VPS デプロイ**: scp + docker compose restart で反映済み
- **Together**: 本番運用中のため変更なし(設計通りの独自 user/group 方式)
- **Brief feed API**: CORS で Authorization ヘッダーを許可・POST 失敗時の GET フォールバック追加
## 直近でやったこと2026-04-10
- **Brain 記事保存ラグ解消**: POST /save を即時 INSERT + setImmediate() 非同期 AI 処理に変更
- **Brain 楽観的 UI**: addArticleFromCommand() に temp article 即時表示を実装
- **Brain AI pending UX**: 「AI分析中...」テキスト削除・sparkles アイコン点滅のみに変更
- **SW キャッシュ**: Brain sw.js を v27 に更新
- **server.js セキュリティ修正 7件**: SSRF ガードisSsrfSafe・サイズ上限・pool 設定改善
- **Together Supabase 撤退2026-04-06**: VPS PostgreSQL に完全移行61件投稿
- **セキュリティ修正 4件2026-04-06**: e.message 直返し撤廃・WebSocket 認証・SSRF・Feed 認証
- **全体最適化2026-04-10**: skipWaiting 追加4アプリ・SW 登録追加2アプリ・brain ハードコード色修正
- **ドキュメント最新化**: server-refactor-plan.md マージ・atlas.json Supabase 削除/Gemini 追加・projects.json 更新・timeli