Commit Graph

237 Commits

Author SHA1 Message Date
posimai 6d7f2a4ed4 feat(pc-audit): AI 相談用プロンプトコピーボタンを追加
チェック項目カラムに「AI 相談用にコピー」ボタンを追加。
PC情報(名前・管理者権限・UAC)+注意/情報チェック項目を
Claude に貼り付けるだけで対処手順を聞けるプロンプトを生成する。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 17:52:58 +09:00
posimai 04483c8744 feat(pc-audit): ビューポートフィット・全BAT自動読み込み対応
- report-viewer: html/body overflow:hidden で 100vh 固定、3カラムがビューポートを埋める
- col 1(概要)・col 2(チェック)・col 3(ポート)が独立してスクロール
- 生データ・免責は col 1 のスクロール枠内に移動(グリッド外に出ない)
- ファイル読込後は upload-wrap を非表示にして「別ファイルを読む」に切替
- run-audit.bat / run-audit-share.bat も JSON インジェクション方式に統一

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 15:59:07 +09:00
posimai 6ce5e0be7d feat(pc-audit): 自動読み込み・フィルタ・スクロール固定枠・差分2カラム
- BAT: JSON をレポートHTMLにインジェクトして一時ファイルで開く(file選択不要)
- report-viewer: AUDIT_PRELOAD 対応・「別ファイルを読む」リンクでフォールバック
- チェック項目:固定高さスクロール枠 + 全て/注意のみ/情報のみフィルタ
- ポート一覧:固定高さスクロール枠 + 全て/全IF/localhost/個別アドレスフィルタ
- thead sticky で列ヘッダが常時表示
- 差分カード:4メトリクスを2×2グリッドに変更

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 14:39:48 +09:00
posimai 7210c8301c feat(together): AI要約の手動再試行エンドポイント追加(failed/skipped/summary欠落に対応) 2026-04-21 14:14:04 +09:00
posimai 01d4ee926a fix(pc-audit): 概要を2カラムグリッドに変更、全体幅をフル幅に修正
viewer: .summary-grid を2カラムに。PC名のみ全幅(grid-column span)。
max-width 制限を撤廃し右余白を解消。

PS1: 管理者判定を net localgroup フォールバック含む3段階に強化。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 12:48:34 +09:00
posimai d36b7a8fe4 fix: posimai-sc に JWT (?token=) 受け取り、brief サブモジュールを更新
Made-with: Cursor
2026-04-21 09:17:45 +09:00
posimai b2fce817bf fix(cors): PUT メソッドを許可(together/members/rename が CORS で弾かれていた) 2026-04-21 08:35:30 +09:00
posimai a05bdb614a fix(csp): posimai-sc の style-src に posimai-ui.vercel.app を追加
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 08:27:50 +09:00
posimai cf10f757a8 fix(pc-audit): 管理者判定を3段階に強化、viewer を3カラムレイアウトに変更
PS1: IsInRole -> SID string 比較 -> net localgroup の3段階で判定。
UAC トークンフィルタリング環境でも管理者ユーザーを正しく検出する。

viewer: 左寄せ3カラム(概要/差分 | チェック項目 | ポート一覧)。
スマホは1カラムに自動切替。一時ポート(49152-65535)に「正常」説明を追加。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 08:24:33 +09:00
posimai 2c0f4da03c fix(pc-audit): 管理者判定を Administrators グループ所属チェックに修正
IsInRole はプロセスの昇格トークンのみ検査するため、UAC 環境の通常起動では
管理者グループのメンバーでも false になっていた。
BUILTIN\Administrators SID のグループ所属を追加チェックし正しく検出する。

.gitattributes: working-tree-encoding=UTF-8-BOM を削除(git 2.51 で add 失敗するバグのため)
BOM 付与は run-pc-audit.js の自動処理に委ねる。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 08:17:58 +09:00
posimai 65297f3b9e chore(rules): 左ボーダーライン禁止ルールを CLAUDE.md / AGENTS.md に追加
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 08:17:28 +09:00
posimai a17084dfd8 feat(pc-audit): report-viewer を Posimai ダークテーマに全面改修
- 左ボーダーラインを廃止、badge + カード枠色でレベルを表現
- 非エンジニア向け説明・対処方法(actionJa)を各カードに追加
- ポート一覧に IP アドレス・ポート番号の日本語解説を追加
- プライバシー説明をヘッダーに常時表示

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 08:08:14 +09:00
posimai 4360f9090f fix(ai/generate): temperature クランプ・role バリデーション追加
- temperature を 0〜2 でクランプ(不正値でのSDKエラー防止)
- contents の role を user/model のみ許可(system injection 防止)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 06:52:46 +09:00
posimai a2282fe33b fix(pc-audit): bat ファイルを CRLF に変換(どこからでも実行可能に)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 06:50:59 +09:00
posimai d08a0d6eed docs(status): AI BYOK 廃止・VPS プロキシ化の記録を追加
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 23:02:26 +09:00
posimai ce195cee72 fix(posimai-sc): 用語インデックス抽出アルゴリズムを再設計
旧アルゴリズムの問題:
- <strong> の出現位置を問わず全て用語として分割していたため
  説明文中の強調タグ(例: <strong>種類の異なる</strong>)が
  偽の用語エントリになっていた(104件中80件以上が不正)
- ヒントが助詞(は、が)や記号で始まるケースを除去できていなかった

新アルゴリズム:
- <br> で行分割し、各行の先頭 <strong> だけを用語として扱う
- 先頭より前に地の文があれば inline 強調とみなしてスキップ
- hint クリーンアップに =・は を追加
- 結果: 104件 → 26件の正常エントリのみ残留

SW v8 → v9

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 22:51:41 +09:00
posimai cd4159fec9 feat(together): TOGETHER_GEMINI_API_KEY で Brain と Gemini quota を分離
TOGETHER_GEMINI_API_KEY が設定されている場合はそちらを使い、
未設定時は既存の GEMINI_API_KEY にフォールバック。
posimai-brain と posimai-together の quota が独立して管理できるようになる。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 22:51:31 +09:00
posimai e935eb6734 fix(together): 招待コードをメンバー全員に返す、JWT username 過剰チェック削除
af51a75で追加した「JWT なし時は invite_code を隠す」制限が原因で
グループ設定画面の招待コードが undefined になっていた。
メンバー確認済みなら全員に返すのが正しい動作。

create/join の「JWT username が一致しなければ 403」チェックも削除。
Together はニックネームベースで JWT identity と別名が普通に使われるため過剰な制限だった。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 22:47:36 +09:00
posimai 96208363d9 fix(posimai-sc): セキュリティ・品質監査対応(CSP/DOMPurify/reactivity 他)
- [H1] CSP meta タグ追加(script/style/connect/frame-ancestors 等)
- [H2] posimai_api_key を sessionStorage に移行(localStorage フォールバック付き)
- [H3] DOMPurify を USE_PROFILES から明示 ALLOWED_TAGS/ALLOWED_ATTR ホワイトリストに変更
- [M1] progress/scores の直接変更を spread 再代入に統一(Alpine reactivity 保証)
- [M2] .catch(()=>{}) を console.warn 付きに変更(サイレント消滅を防止)
- [M3] syncHeader を this.syncToken 一本化(localStorage 二重読み解消)
- [M5] SW の cache.put() 失敗を捕捉してログ出力
- [M6/M7] sidebar-item に aria-label/aria-pressed 追加、main に tabindex=-1 + focus()
- [LOW] glossary x-for キーをコンテンツベースに変更、SW コメント補足
- SW v7 → v8

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 22:42:55 +09:00
posimai 50e95577d7 fix(together): invite_code を JWT 必須に変更、Guard Web v1 方針を STATUS.md に明記 2026-04-20 22:31:07 +09:00
posimai ef7fccb255 fix(together): Gemini失敗時もJina成功ならarchive_status='done'にする
Gemini API 503 エラー時に全体を'failed'にしていたため、
Jina で本文取得済みの記事でもReaderボタンが表示されなかった。
Gemini だけ失敗した場合は summary=null/tags=[] で 'done' にし、
Readerは使える状態を保つ。既存の28件は DB で直接修正済み。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 21:17:07 +09:00
posimai 58ca9d2540 fix(posimai-sc): ステップ3遷移時の自動スクロールを完全削除
nextStepFlash / nextStepDrill でステップ3へ移る際の
scrollTo(scrollHeight) を削除。理解度チェックへのスクロールは
「理解度チェックへ移動」ボタン経由のみとする。
SW を v6 → v7 に更新。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 20:56:05 +09:00
posimai af51a75244 fix(together): restore reader and AI metadata after mobile share
Allow Together endpoints to resolve username from JWT-backed candidates and return legacy-compatible feed/article fields so reader icon, summary, and category tags render without reload.

Made-with: Cursor
2026-04-20 20:49:09 +09:00
posimai 0990385b89 feat(pc-audit): ダブルクリック実行バッチ追加、viewer のパス表示改善 2026-04-20 20:48:28 +09:00
posimai a38447a061 fix(posimai-sc): 試験モードのAlpine null参照エラーを解消
Made-with: Cursor
2026-04-20 20:37:44 +09:00
posimai 81095b891f fix(pc-audit): .gitattributes で BOM を保証、runner のエラーハンドリング改善 2026-04-20 20:15:55 +09:00
posimai 8f4294fe09 fix(posimai-sc): ステップ3完了時の自動ジャンプを廃止
Made-with: Cursor
2026-04-20 20:13:49 +09:00
posimai f33854b8a0 fix(posimai-sc): モバイルの理解度ジャンプ精度と設問折り返しを改善
Made-with: Cursor
2026-04-20 20:07:06 +09:00
posimai 220c7c2449 fix(posimai-sc): 3ステップ後の理解度ジャンプでフォーカス起因のズレを抑止
Made-with: Cursor
2026-04-20 20:02:27 +09:00
posimai 44c4ffe3c2 fix(posimai-sc): 理解度チェックへのジャンプ位置ズレを修正
Made-with: Cursor
2026-04-20 18:43:38 +09:00
posimai ce3754f030 chore: update STATUS.md with security audit results 2026-04-20 17:11:25 +09:00
posimai 610207d570 security: CSP/HSTS headers (posimai-sc), update STATUS.md 2026-04-20 17:10:55 +09:00
posimai ad6e124322 chore: update posimai-guard submodule pointer 2026-04-20 17:08:49 +09:00
posimai 1e9e19b4b6 feat(posimai-sc): 端末間再開同期を追加
Made-with: Cursor
2026-04-20 16:46:18 +09:00
posimai 492da3f2d9 feat(posimai-sc): 用語インデックスと試験モード、SW v4
Made-with: Cursor
2026-04-20 13:49:03 +09:00
posimai e6bb59df86 feat(posimai-sc): 全単元に初学者向けブロック、ホーム案内、検索ショートカット、SW v3
Made-with: Cursor
2026-04-20 13:39:31 +09:00
posimai ec51c2ed6b fix: trust proxy を設定して req.ip を正しくクライアントIPに解決
nginx リバースプロキシ背後では req.ip がプロキシの内部 IP になる問題を修正。
app.set('trust proxy', 1) で X-Forwarded-For を信頼し、IP ベースの
レート制限(together/ponshu)が実際のクライアント IP で動作するようにする。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 13:34:22 +09:00
posimai 548c4fcca2 security: 認証・レート制限の5箇所を修正
- /journal/posts/public: 任意ユーザー列挙を廃止、SITE_PUBLIC_USER 固定
- /site/config/public: IDOR 修正 + 公開キーをホワイトリスト制限
- POST /together/groups: IP 単位 5回/時間 のレート制限を追加
- POST /together/join: IP 単位 10回/時間 のレート制限を追加
- POST /together/share: Gemini archive を shared_by 単位 20回/時間 に制限
- POST /ponshu/license/validate: IP 単位 10回/分 のブルートフォース防止

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 13:30:10 +09:00
posimai 10071901e1 feat(posimai-sc): S31 compliance intro, beginner glossaries, S16 Q4, SW v2; dashboard timeline and projects
Made-with: Cursor
2026-04-20 13:08:49 +09:00
posimai c7a1567dea feat(posimai-sc): add S25-S30 units and drills, fix drills.js EOF and Vishing term
Made-with: Cursor
2026-04-20 12:49:27 +09:00
posimai b4b88d02e4 docs: Together together_members user_id 本番確認結果を STATUS に追記
Made-with: Cursor
2026-04-20 12:18:06 +09:00
posimai 17353f824b feat(posimai-sc): S23/S24追加・ドリル88問・コードバグ修正
- S23「サプライチェーン・DevSecOps」S24「AIセキュリティ」を追加
- drills.js: 全22単元×2問→4問に拡充(合計88問)。正解を answer:0/1 交互配置(48:48)に修正(従来95/96がanswer:1という偏りを解消)
- app.js: openUnit()でconceptExpandedをfalseにリセットしていたバグを修正(デフォルト展開の意図通りtrueに)
- app.js: toggleTheme()/markDone()のlocalStorage呼び出しにtry/catchを追加
- app.js: 全問正解時に学習済みフラグを自動セット
- ホームのクイズ正解をsaveSocre永続化ベースで集計するよう変更

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 11:02:24 +09:00
mai f3a53babdb fix: NIST CSF 2.0 (6機能/Govern) 修正、PQC追記、s21/s22ドリル追加 2026-04-20 08:59:53 +09:00
posimai 89a0fef301 chore: Vercel posimai-sc Root Directory 設定完了を STATUS に記録 2026-04-20 08:31:16 +09:00
posimai b7e40ace8e chore: STATUS に Together セキュリティ強化の完了記録を追記(2026-04-19〜20) 2026-04-20 08:03:11 +09:00
posimai 3440bc7a35 chore: STATUS に sc 404 原因と対処を追記、atlas サブモジュールを更新
Made-with: Cursor
2026-04-20 01:48:37 +09:00
posimai d257bd75ac chore: atlas・roadmap サブモジュールを posimai-sc 登録後のコミットに更新
Made-with: Cursor
2026-04-20 01:41:36 +09:00
posimai 36293e5ec7 feat: posimai-sc 支援士学習PWAを同梱し本番用設定を追加
Made-with: Cursor
2026-04-20 01:40:48 +09:00
posimai 222238f2b9 fix(together): require member auth on GET /together/groups/:groupId
invite_code was accessible without authentication to anyone who knew
the groupId (sequential integer). Now requires ?u= + member check.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 01:04:24 +09:00
posimai 6cae7daa87 fix(together): revert broken userCheck that caused 403 for all JWT users
userCheck required username to match users.user_id/name, but Together
usernames (mai, EIJI) never matched users table entries (maita, partner).
All JWT-bearing clients were getting 403. Reverts to member-row-only
check until user_id backfill is complete (Phase 1).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 19:08:36 +09:00