posimai-root/STATUS.md

18 KiB
Raw Blame History

Posimai — 現在の状態

このファイルはセッション末に AI が更新する。「今何をしている最中か」を引き継ぐ唯一の場所。

作業中

  • 特になし

mai のPC から実行待ち

  • posimai-boki は独立リポジトリで Gitea/GitHub へ push 済み。追加分を出したときは cd posimai-boki && npm run deploy
  • article-keeper フォルダ削除(エクスプローラーから手動削除): Firebase プロジェクトは削除済み。キーは git 未追跡なので履歴汚染なし。フォルダを消すだけで OK。

次にやること(優先順)

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方針確定: Web v1のみ・2026-04-20

v1 = Web PWA のみ。Tauri・VS Code拡張・CLI はすべて v1 タグ後のロードマップ。 現行の main ブランチは Web のみを対象とする。Tauri/拡張のブランチは統合しない。

v1 残タスク:

  1. Web v1 完了条件の文書化 — 入力・出力・非機能タイムアウト・APIキー未設定時・免責表記を検証可能な形で定義する

Guard 完成状態2026-04-14

  • ルールエンジン133ルール
  • 静的修正テンプレート85ルール
  • VS Code で開く ✓
  • CLInpx tsx cli/guard.ts)✓
  • VS Code 拡張APIキー不要

Guard ビルド方法メモ(次回再ビルド時)

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.jsonFILL_IN: Stripe ダッシュボードの sk_test_... を置換
  2. Vercel トークン発行
  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 プロジェクト削除済みmai 完了)。キーは git 未追跡のため履歴汚染なし。エクスプローラーでフォルダ削除するだけ 低(プロジェクト削除済みでキー無効)
Stripe sandbox テスト Eiji に購入フロー確認依頼
特商法ページ記入 tokushoho.html 作成済み。事業者名・住所・電話番号の内容記入が残っているか確認が必要
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-20 — AI キー BYOK 廃止・VPS プロキシ化)

セキュリティ改善: Gemini BYOK 廃止

  • posimai-digest: gemini_api_key localStorage を撤去。summarize()POST /brain/api/ai/generateJWT 認証)経由に変更
  • posimai-think: APP_ID-apikey localStorage を撤去。sendMessage() を VPS プロキシ経由に変更。setup-screen をログインリンクに変更
  • server.js: POST /ai/generate エンドポイント認証必須・30req/h・60KB 上限・15秒タイムアウトVPS 反映済み
  • CSP: think の connect-src から generativelanguage.googleapis.com を削除
  • 両アプリの設定パネルから Gemini API キー入力 UI を撤去
  • デプロイ済みGitea + GitHub → Vercel 自動デプロイ)

直近でやったこと2026-04-20 — 全体セキュリティ監査・修正)

セキュリティ監査対応(全件デプロイ済み)

  • P1 Together API 認証強化: /together/groups /together/join に JWT 照合追加。JWT 提示時に body の username と不一致なら 403なりすまし防止
  • P2 CSP + HSTS: 全 31 アプリの vercel.json に Content-Security-PolicyStrict-Transport-Security を追加。デプロイ済み
  • P3 エラー情報露出修正: TTS エンドポイント 2箇所・プロキシ 1箇所の e.message/e.code をクライアントレスポンスから除去
  • P4 JWT TTL 短縮: 30日 → 7日VPS 反映済み)
  • P5 Stripe Webhook 確認: 署名検証HMAC-SHA256 + timingSafeEqual + タイムスタンプ検証)実装済みを確認 ✓

その他

  • pc-audit バグ修正 9件: Sort-Object -Unique / netstat Address:Port 解析 / ConsentPromptBehaviorAdmin 未検出 / スキャンスキップ追跡 / IDE キーワードノイズ / RowsEnrichedSample 統一(40行) / レポート自動削除 / SYNOPSIS 修正 / viewer 行数統一
  • posimai-dashboard: posimai-sc 用語インデックス・試験モードを timeline + projects.json に追加

直近でやったこと2026-04-20 — posimai-sc 完了)

  • posimai-sc: drills.jsS01〜S20 各2問・manifest.json・sw.js・vercel.json・package.json 追加。Vercel プロジェクト接続・カスタムドメイン設定・エコシステム全登録([OK]確認済み)
  • Vercel Root Directory: Vercel API PATCH で rootDirectory: "posimai-sc" に設定完了2026-04-20。以後 git push のみで本番更新可能
  • 残タスク(任意): 教材ファクトチェック・logo.png の SC 専用差し替え

直近でやったこと2026-04-18 — posimai-boki

  • リポジトリ: posimai-boki 独立リポジトリGitea/GitHubnpm run deploy = 両リモート push → Vercel 自動デプロイ
  • 構成: カリキュラムを js/data/categories.js / drills.js、Alpine 本体を js/app.js に分割。sw.js で該当 JS をプリキャッシュ
  • セキュリティ: DOMPurify固定版 + SRIx-htmlsafeHtml 経由、クイズ解説は保存時サニタイズ
  • 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 表示、名前フィールド変更時データ消失を解消

together_members.user_id 本番確認2026-04-20

  • VPS の DB posimai_brainSELECT group_id, username, user_id FROM together_members を実行。user_id が NULL の行はなし(全行に maita または partner が入っている)
  • 参考: 当時の懸念どおり users.user_id / users.name と Together の username が一致しないと起動時 UPDATE だけでは紐付けられないが、現状データでは問題なし

残る既知のリスク(商用前に対応)

  • グループ作成・参加エンドポイントはまだ認証なしmai + Eiji のみ運用で許容)
  • JWT 必須化legacy path 完全削除)は運用判断(本番では user_id 列は全行埋まっていることを確認済み)

直近でやったこと2026-04-11 セッション3

セキュリティ修正・コード品質改善(批判的コードレビュー対応)

  • Together API メンバー検証: /together/share /together/react /together/commentstogether_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: セットアップガイド作成SSH トンネル・read-only user・セキュリティ要件
  • .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_tokenJWTを優先、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