diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 87febfd..f53bf6e 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "tsumiki", - "version": "1.4.1", + "version": "1.4.2", "description": "AI-driven development toolkit for TDD and SDD workflows, providing comprehensive command templates and agents to enhance developer productivity with Claude Code", "author": { "name": "makoto kuroeda", diff --git a/skills/ipa-security-check/SKILL.md b/skills/ipa-security-check/SKILL.md index 8f3f432..ac527a6 100644 --- a/skills/ipa-security-check/SKILL.md +++ b/skills/ipa-security-check/SKILL.md @@ -47,7 +47,7 @@ IPA (情報処理推進機構) が公開する以下 5 資料の指摘事項に - verdict を `snippet_hash` で findings にマージ - 既存 Markdown レポートから triage ブロックを抽出 (`lib/triage_state.md` 準拠) し、`snippet_hash` 一致で新 findings にステータス引き継ぎ - `templates/report.md.tmpl` を埋めて Markdown を出力、SARIF 2.1.0 も同時生成 -7. デフォルトの保存先は `./ipa-security-report.md` と `./ipa-security-report.sarif` (`--output` で上書き) +7. デフォルトの保存先は `./security-reports/ipa-security-report-YYYY-MM-DD-NN.md` と `./security-reports/ipa-security-report-YYYY-MM-DD-NN.sarif` (`--output` で上書き可)。`security-reports/` ディレクトリが存在しない場合は自動作成する。同日に複数回実行した場合は連番 (`-01`, `-02`, ...) が自動付与され、既存レポートを上書きしない 中間ファイルの作業ディレクトリは `.tmp/ipa-security-check/` (リポジトリルート直下、名前に `tmp` を含めること)。 diff --git a/skills/ipa-security-check/commands/ipa-security-check.md b/skills/ipa-security-check/commands/ipa-security-check.md index c2c41da..0dc6548 100644 --- a/skills/ipa-security-check/commands/ipa-security-check.md +++ b/skills/ipa-security-check/commands/ipa-security-check.md @@ -21,7 +21,7 @@ IPA「安全なウェブサイトの作り方 改訂第7版」ほか 4 資料に | `--diff` | 任意 | 現ブランチと `main` の差分ファイルのみを対象 | | `--categories ` | 任意 | カンマ区切りでカテゴリ限定。指定可能値: `sqli, oscmd, traversal, session, xss, csrf, http-header, mail-header, clickjacking, bof, access-control, safe-sql, whc, ops` | | `--severity ` | 任意 | 報告下限。`critical, high, medium, low, info` のいずれか。デフォルト `low` | -| `--output ` | 任意 | カンマ区切りで出力ファイル指定。デフォルト `ipa-security-report.md,ipa-security-report.sarif` | +| `--output ` | 任意 | カンマ区切りで出力ファイル指定。デフォルト `security-reports/ipa-security-report-YYYY-MM-DD-NN.md,security-reports/ipa-security-report-YYYY-MM-DD-NN.sarif`(日付・連番自動付与、ディレクトリ自動作成) | ## 使用例 diff --git a/skills/ipa-security-check/lib/orchestrator.md b/skills/ipa-security-check/lib/orchestrator.md index 2ec7901..11c9ae8 100644 --- a/skills/ipa-security-check/lib/orchestrator.md +++ b/skills/ipa-security-check/lib/orchestrator.md @@ -307,22 +307,34 @@ prompt: <下記> `lib/output_formatter.md` と `templates/report.md.tmpl` の仕様は `scripts/render_report.py` に実装済み。メインは以下を Bash で実行する: +**`--output` が省略されている場合**: 以下の Bash で日付・連番付きのファイル名を決定してから `render_report.py` を実行する: + ```bash +DATE=$(date +%Y-%m-%d) +mkdir -p ./security-reports +NN=01 +while [ -f "./security-reports/ipa-security-report-${DATE}-${NN}.md" ]; do + NN=$(printf "%02d" $((10#$NN + 1))) +done +MD_OUT="./security-reports/ipa-security-report-${DATE}-${NN}.md" +SARIF_OUT="./security-reports/ipa-security-report-${DATE}-${NN}.sarif" + python3 .claude/skills/ipa-security-check/scripts/render_report.py \ .tmp/ipa-security-check/findings_with_hash.json \ .tmp/ipa-security-check/verdicts.json \ - ./ipa-security-report.md \ - ./ipa-security-report.sarif \ + "$MD_OUT" \ + "$SARIF_OUT" \ --scope-summary "" \ --files-scanned ``` +**`--output` が指定されている場合**: 指定された値を第 3・第 4 引数として使う。 + このスクリプトが行う処理: 1. verdict を `snippet_hash` で findings にマージ (Step 5.4 相当) 2. 出力先 Markdown が存在すれば triage を引き継ぎ (Step 6 相当) 3. 3 セクション振り分け / サマリ集計 / `templates/report.md.tmpl` 置換 / SARIF 生成 -`--output` で別パスが指定されていれば、第 3・第 4 引数をそのパスに差し替える。 最後にユーザーへ要約を 1〜2 文で報告する (件数とファイル名)。 --- diff --git a/skills/ipa-security-guide/SKILL.md b/skills/ipa-security-guide/SKILL.md index 46654ae..5f798a5 100644 --- a/skills/ipa-security-guide/SKILL.md +++ b/skills/ipa-security-guide/SKILL.md @@ -1,7 +1,7 @@ --- name: ipa-security-guide description: ipa-security-check をはじめとするセキュリティ診断ツールが出力したレポートを読み込み、各検出項目を優先順位付きの dev-debug 依頼リストに変換する。対象プロジェクトの言語・FWを問わず汎用的に使える。コードベースを直接読んでアーキテクチャ判断を行う。 -argument-hint: "[レポートファイルパス (省略時: ./ipa-security-report.md)] [-o 出力ファイルパス]" +argument-hint: "[レポートファイルパス (省略時: ipa-security-report-*.md を自動検出)] [-o 出力ファイルパス]" --- # IPA Security Guide Skill @@ -25,7 +25,10 @@ argument-hint: "[レポートファイルパス (省略時: ./ipa-security-repor /ipa-security-guide <レポートファイルパス> -o <出力ファイルパス> ``` -- レポートファイルパスを省略した場合はカレントディレクトリの `ipa-security-report.md` を使う +- レポートファイルパスを省略した場合は、`security-reports/ipa-security-report-*.md` を優先して自動検出する。見つからない場合はカレントディレクトリの `ipa-security-report-*.md` も検索する + - **1件のみ**: 自動で使用する + - **複数件**: ファイル名一覧を提示し、AskUserQuestion でユーザーに選んでもらう + - **0件**: `ipa-security-report.md` へのフォールバックを試みる。それも存在しない場合はエラーを報告して終了する - `-o` を指定した場合は結果をそのパスに Write する。省略した場合は画面出力のみ ## 前提条件 @@ -51,7 +54,7 @@ ipa-security-guide/ 以下をすべて Read する。件ごとに読み直さない。 -1. 指定された(または `./ipa-security-report.md`)レポートファイル +1. レポートファイル(「起動方法」のファイル検出ルールに従って特定する) - 存在しない場合はエラーを報告して終了 - レポートのヘッダーからプロジェクトのルートディレクトリを推定する 2. `knowledge/triage.md`