claude-code-conductor 2.14.2__tar.gz → 2.15.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/code-reviewer.md +2 -2
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/planner.md +2 -2
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/security-reviewer.md +2 -2
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/planner_check.py +1 -1
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/codex-review/SKILL.md +2 -2
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/dev-workflow/SKILL.md +1 -1
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/extract-lib/SKILL.md +1 -1
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/parallel-agents/SKILL.md +1 -1
- {claude_code_conductor-2.14.2/.claude/skills/code-review → claude_code_conductor-2.15.1/.claude/skills/review-phase}/SKILL.md +1 -1
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/CHANGELOG.md +57 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/PKG-INFO +4 -4
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/README.md +3 -3
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/__init__.py +1 -1
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/cli_update.py +33 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_planner_lightweight.py +6 -6
- claude_code_conductor-2.15.1/tests/test_cli_update.py +41 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_excludes.py +1 -1
- claude_code_conductor-2.15.1/tests/test_references_migration.py +119 -0
- claude_code_conductor-2.15.1/tests/test_skill_no_builtin_conflict.py +20 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/CLAUDE.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/architect.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/developer.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/doc-writer.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/interviewer.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/project-setup.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/systematic-debugger.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/tester.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/wt_developer.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/wt_systematic-debugger.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/wt_tester.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/docs/platform-adapters.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/docs/settings.json.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/_hook_utils.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/check_agent_invocation.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/consolidate_memory.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/permission_handler.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/permission_handler_toast.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/post_tool.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/pre_compact.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/pre_tool.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/recall_inject.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/restore_session.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/schema.sql +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/select_tier.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/session_start.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/session_stop.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/session_utils.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/statusline.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/stop.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/worktree_guard.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/memory/.gitkeep +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/permission_rules.json +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/rules/promoted/index.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/settings.json +0 -0
- {claude_code_conductor-2.14.2/.claude/rules → claude_code_conductor-2.15.1/.claude/skills/dev-workflow/references}/code-review-checklist.md +0 -0
- {claude_code_conductor-2.14.2/.claude/rules → claude_code_conductor-2.15.1/.claude/skills/dev-workflow/references}/plan-design-guidelines.md +0 -0
- {claude_code_conductor-2.14.2/.claude/rules → claude_code_conductor-2.15.1/.claude/skills/dev-workflow/references}/security-review-checklist.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/dev-workflow/scripts/record_tier_outcome.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/develop/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/doc/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/init-session/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/mcp-config/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/pattern-status/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/promote-pattern/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/recall/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/report-timestamp/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/setup/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/setup/reference.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/start/SKILL.md +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/state/.gitkeep +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.gitignore +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/LICENSE +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/LICENSES/chroma-hnswlib-LICENSE +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/LICENSES/chroma-hnswlib-NOTICE +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/LICENSES/fastembed-LICENSE +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/LICENSES/fastembed-NOTICE +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/LICENSES/onnxruntime-LICENSE +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/hatch_build.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/pyproject.toml +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/__main__.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/_excludes.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/_terminal.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/adapters.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/cli.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/cli_ask.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/cli_doctor.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/cli_init.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/cli_list.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/cli_plan.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/cli_recall.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/cli_tier.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/db.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/embedding.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/mcp_server.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/paths.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/plan_validator.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/platforms.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/question.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/recall_chunker.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/src/c3/recall_index.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/__init__.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/conftest.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/__init__.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_check_agent_invocation.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_consolidate_memory.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_hook_utils.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_permission_handler.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_permission_handler_toast.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_planner_check.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_planner_check_dev.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_post_tool.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_pre_tool.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_recall_inject.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_record_review_decision.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_record_tier_outcome.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_restore_session.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_review_hint_inject.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_select_tier.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_select_tier_escalation.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_session_start.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_session_stop.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_session_utils.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_similarity_boost.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_statusline.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_statusline_template_sync.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_sync_check.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_template_guard.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/__init__.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/_skill_helpers.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_init_session_no_task_type.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_recall_skill.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_session_backlog_reconciliation.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_setup_templates.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_start_skill_new_flow.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_adapters.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_cli_ask.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_cli_entry.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_cli_init.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_cli_list.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_cli_plan.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_cli_recall.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_cli_tier.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_docstring_consistency.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_embedding.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_mcp_server_elicit.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_paths.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_plan_validator.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_pre_compact.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_pre_tool_hook.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_precompact_additional.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_precompact_toctou_fixes.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_recall_chunker.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_recall_index.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_session_utils_additional.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_statusline.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_stop_additional.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_stop_hook.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_stop_precompact_fixes.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_sync_template_stop.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_template_pre_tool_hook.py +0 -0
- {claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_worktree_guard.py +0 -0
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/code-reviewer.md
RENAMED
|
@@ -44,11 +44,11 @@ tools:
|
|
|
44
44
|
**Before:**
|
|
45
45
|
- `git diff` または変更ファイル一覧を Bash で確認する
|
|
46
46
|
- 関連するテストコードも合わせて Read する
|
|
47
|
-
- `.claude/
|
|
47
|
+
- `.claude/skills/dev-workflow/references/code-review-checklist.md` を Read してチェック観点を確認する
|
|
48
48
|
|
|
49
49
|
**During:**
|
|
50
50
|
- 指摘は重大度(High / Medium / Low)で分類する
|
|
51
|
-
- **指摘ごとに該当する checklist_id を `[CR-XX-NNN]` 形式で併記する**(`.claude/
|
|
51
|
+
- **指摘ごとに該当する checklist_id を `[CR-XX-NNN]` 形式で併記する**(`.claude/skills/dev-workflow/references/code-review-checklist.md` の各項目に付与済み)。review-hint(レビュー判断ヒント機能)の照合キーになるため、必須とする。複数該当する場合は最も近いものを 1 つ選ぶ
|
|
52
52
|
- **該当 ID がない場合は `[CR-NEW]` で出す**(チェックリスト追加候補として扱う)。無理やり近い既存 ID にマッピングしないこと。review-hint の照合精度が落ち、チェックリストの成長機会も失われるため
|
|
53
53
|
- 良い実装は明示的に記録する(削除しないよう伝える)
|
|
54
54
|
- 修正必須と推奨の2段階で提示する
|
|
@@ -33,7 +33,7 @@ requirements-report・architecture-report・各種レビューレポートを統
|
|
|
33
33
|
## Workflow
|
|
34
34
|
|
|
35
35
|
**Before:**
|
|
36
|
-
- **必読: `.claude/
|
|
36
|
+
- **必読: `.claude/skills/dev-workflow/references/plan-design-guidelines.md`** を Read する(depends_on 設計・TDD 3-wave 分解・writes 衝突回避・自動検査ルール R2〜R6・出力直前の自己チェックリスト)
|
|
37
37
|
- 利用可能な全レポートを Read する(requirements / architecture / test / review)
|
|
38
38
|
- レポートが存在しないフェーズはスキップして正常とする
|
|
39
39
|
|
|
@@ -57,7 +57,7 @@ requirements-report・architecture-report・各種レビューレポートを統
|
|
|
57
57
|
制限:
|
|
58
58
|
- ソースファイルの編集・書き込みは行わない
|
|
59
59
|
- plan-report の YAML フロントマター内で `tasks[].id` の重複・未定義の `depends_on` 参照・エージェント名の typo を出力しない(`c3 plan validate` で検証可能)
|
|
60
|
-
- `.claude/
|
|
60
|
+
- `.claude/skills/dev-workflow/references/plan-design-guidelines.md` のルール 1〜13 と自己チェックリストに違反した plan-report を出力しない
|
|
61
61
|
- 自動検査対象に違反する plan-report を出力しない:
|
|
62
62
|
- R2/R4/R6(配布対象): `.claude/hooks/planner_check.py` が PostToolUse で WARN を出す
|
|
63
63
|
- R3(C3 固有): `.dev/hooks/_planner_check.py` が PostToolUse で exit 2 ブロック
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/security-reviewer.md
RENAMED
|
@@ -45,11 +45,11 @@ SQLインジェクション・XSS・認証認可・秘密情報漏洩などの
|
|
|
45
45
|
**Before:**
|
|
46
46
|
- 変更ファイルと依存関係を Bash / Glob / Grep で確認する
|
|
47
47
|
- 認証・外部入力・データベースアクセスのコードを優先的に確認する
|
|
48
|
-
- `.claude/
|
|
48
|
+
- `.claude/skills/dev-workflow/references/security-review-checklist.md` を Read してチェック観点を確認する
|
|
49
49
|
|
|
50
50
|
**During:**
|
|
51
51
|
- 指摘は深刻度(Critical / High / Medium / Low)で分類する
|
|
52
|
-
- **指摘ごとに該当する checklist_id を `[SR-XX-NNN]` 形式で併記する**(`.claude/
|
|
52
|
+
- **指摘ごとに該当する checklist_id を `[SR-XX-NNN]` 形式で併記する**(`.claude/skills/dev-workflow/references/security-review-checklist.md` の各項目に付与済み)。review-hint(レビュー判断ヒント機能)の照合キーになるため、必須とする。複数該当する場合は最も近いものを 1 つ選ぶ
|
|
53
53
|
- **該当 ID がない場合は `[SR-NEW]` で出す**(チェックリスト追加候補として扱う)。無理やり近い既存 ID にマッピングしないこと。review-hint の照合精度が落ち、チェックリストの成長機会も失われるため
|
|
54
54
|
- 悪用シナリオを具体的に記述して再現可能な形で報告する
|
|
55
55
|
- 修正方法の例を提示する
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/planner_check.py
RENAMED
|
@@ -287,7 +287,7 @@ def main() -> None:
|
|
|
287
287
|
"[PlannerCheck WARN] plan-report の検査で違反を検出しました:\n"
|
|
288
288
|
+ "\n".join(f" - {msg}" for msg in sanitized_warnings)
|
|
289
289
|
+ "\n\n"
|
|
290
|
-
+ "ルールの詳細は .claude/
|
|
290
|
+
+ "ルールの詳細は .claude/skills/dev-workflow/references/plan-design-guidelines.md を参照。"
|
|
291
291
|
+ "意図的に許容する場合はユーザーに確認を取ること。"
|
|
292
292
|
)
|
|
293
293
|
output = {
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/codex-review/SKILL.md
RENAMED
|
@@ -202,10 +202,10 @@ AskUserQuestion で確認する:
|
|
|
202
202
|
"options": [
|
|
203
203
|
{ "label": "確認完了", "description": "レポートを確認した" },
|
|
204
204
|
{ "label": "別ファイルも続けてレビューする", "description": "Step 1 から再実行する" },
|
|
205
|
-
{ "label": "C3 レビューフローへ引き継ぐ", "description": "
|
|
205
|
+
{ "label": "C3 レビューフローへ引き継ぐ", "description": "review-phase スキルへ引き継いでフェーズ E を実行する" }
|
|
206
206
|
]
|
|
207
207
|
}]
|
|
208
208
|
}
|
|
209
209
|
```
|
|
210
210
|
|
|
211
|
-
「C3 レビューフローへ引き継ぐ」が選択された場合は Skill ツールで `
|
|
211
|
+
「C3 レビューフローへ引き継ぐ」が選択された場合は Skill ツールで `review-phase` を呼び出す。
|
|
@@ -154,7 +154,7 @@ plan-report 承認時点で全タスク・agent・writes・prompt が確認済
|
|
|
154
154
|
|
|
155
155
|
- `subagent_type`: 上記マッピング表の値
|
|
156
156
|
- `isolation`: **`read_only: false` タスクのみ `"worktree"` を指定する。`read_only: true`(code-reviewer / security-reviewer)はソースを変更しないため worktree 不要。`isolation` を省略して main リポジトリで直接実行し、レポートを main の `.claude/reports/` に直接書かせる。**
|
|
157
|
-
> **R5 hook による機械強制**: 上記ルールに違反して `read_only: true` のレビュータスクに `isolation: "worktree"` を指定した場合、`.claude/hooks/check_agent_invocation.py`(PreToolUse Agent hook)が exit 2 でブロックする。詳細は `.claude/
|
|
157
|
+
> **R5 hook による機械強制**: 上記ルールに違反して `read_only: true` のレビュータスクに `isolation: "worktree"` を指定した場合、`.claude/hooks/check_agent_invocation.py`(PreToolUse Agent hook)が exit 2 でブロックする。詳細は `.claude/skills/dev-workflow/references/plan-design-guidelines.md` R5 参照。
|
|
158
158
|
- `run_in_background`: `true`
|
|
159
159
|
- `description`: タスク id(5 単語以内)
|
|
160
160
|
- `prompt`: 以下を含める(ペルソナ採用は不要、frontmatter / system prompt で自動適用される):
|
|
@@ -1,5 +1,62 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v2.15.1 (2026-05-22)
|
|
4
|
+
|
|
5
|
+
### 変更
|
|
6
|
+
- C3 `/code-review` skill を `/review-phase` にリネーム。
|
|
7
|
+
Claude Code v2.1.147 で Built-in `/code-review` が新規追加され、
|
|
8
|
+
コマンド名が完全衝突したため。
|
|
9
|
+
|
|
10
|
+
### 配布先での手動クリーンアップ手順(必須)
|
|
11
|
+
|
|
12
|
+
`c3 update` は配布物の削除を検出しないため、配布先プロジェクトで以下を手動実行:
|
|
13
|
+
|
|
14
|
+
**bash / macOS / Linux:**
|
|
15
|
+
```bash
|
|
16
|
+
rm -rf .claude/skills/code-review/
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**PowerShell (Windows):**
|
|
20
|
+
```powershell
|
|
21
|
+
Remove-Item -Recurse -Force .claude\skills\code-review\
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## v2.15.0 (2026-05-22)
|
|
27
|
+
|
|
28
|
+
### 変更
|
|
29
|
+
- planner / code-reviewer / security-reviewer 用の長文ガイドライン 3 ファイルを
|
|
30
|
+
`.claude/rules/` から `.claude/skills/dev-workflow/references/` に移動。
|
|
31
|
+
Claude Code 公式仕様で `.claude/rules/*.md` が全文自動ロードされコンテキストを
|
|
32
|
+
常時 ~10.8k tokens 圧迫していた問題を解消。
|
|
33
|
+
- `plan-design-guidelines.md`
|
|
34
|
+
- `code-review-checklist.md`
|
|
35
|
+
- `security-review-checklist.md`
|
|
36
|
+
|
|
37
|
+
### 配布先での手動クリーンアップ手順(必須)
|
|
38
|
+
|
|
39
|
+
`c3 update` は配布物の削除を検出しないため、配布先プロジェクトで以下を手動実行:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
rm .claude/rules/plan-design-guidelines.md
|
|
43
|
+
rm .claude/rules/code-review-checklist.md
|
|
44
|
+
rm .claude/rules/security-review-checklist.md
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**PowerShell (Windows):**
|
|
48
|
+
```powershell
|
|
49
|
+
Remove-Item .claude\rules\plan-design-guidelines.md
|
|
50
|
+
Remove-Item .claude\rules\code-review-checklist.md
|
|
51
|
+
Remove-Item .claude\rules\security-review-checklist.md
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### ドキュメント
|
|
55
|
+
- taxonomy.md に「長文ガイドラインは skills/<name>/references/ に置く」設計指針を明記
|
|
56
|
+
- decisions.md に新 ADR を追加
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
3
60
|
## [2.14.2] - 2026-05-22
|
|
4
61
|
|
|
5
62
|
### 個人ドキュメントの wheel 配布除外
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-conductor
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.15.1
|
|
4
4
|
Summary: Multi-agent orchestration framework for Claude Code with Codex/Cursor adapters (C3)
|
|
5
5
|
Project-URL: Homepage, https://github.com/satoh-y-0323/claude-code-conductor
|
|
6
6
|
Project-URL: Repository, https://github.com/satoh-y-0323/claude-code-conductor
|
|
@@ -64,7 +64,7 @@ Claude Code Conductor(C3)は「親 Claude が複数の専門エージェン
|
|
|
64
64
|
|
|
65
65
|
```
|
|
66
66
|
ユーザー
|
|
67
|
-
↓ /start, /develop, /
|
|
67
|
+
↓ /start, /develop, /review-phase, /doc, /mcp-config, /extract-lib ...
|
|
68
68
|
親 Claude(オーケストレーター)
|
|
69
69
|
├─ interviewer ← ヒアリング
|
|
70
70
|
├─ architect ← 設計
|
|
@@ -174,7 +174,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
|
|
|
174
174
|
| `/setup` | コーディング規約の設定(coding-standards・project-conventions 生成) |
|
|
175
175
|
| `/start` | 開発ワークフローの入口(ヒアリング/設計/計画/実装 から選択) |
|
|
176
176
|
| `/develop` | TDD フェーズから直接開始 |
|
|
177
|
-
| `/
|
|
177
|
+
| `/review-phase` | レビューフェーズから直接開始(code-reviewer + security-reviewer) |
|
|
178
178
|
| `/promote-pattern` | 蓄積されたパターンを rules/ または skills/ に昇格 |
|
|
179
179
|
|
|
180
180
|
### ユーティリティ
|
|
@@ -212,7 +212,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
|
|
|
212
212
|
|
|
213
213
|
`/start` 実行後は、各フェーズの承認を進めるだけで最後まで自動的に流れます。
|
|
214
214
|
|
|
215
|
-
> **公式コマンドとの名前衝突について:** C3 のスキル名は Claude Code
|
|
215
|
+
> **公式コマンドとの名前衝突について:** C3 のスキル名は Claude Code 公式コマンドと重複しないよう設計しています。`/review-phase`(≠ 公式 `/code-review` / `/review`)、`/mcp-config`(≠ 公式 `/mcp`)はこの方針に基づく命名です。公式コマンドが追加された場合は衝突回避のために本フレームワークの skill 名を変更することがあります(v2.15.1 で `/code-review` → `/review-phase` に変更しました)。
|
|
216
216
|
|
|
217
217
|
---
|
|
218
218
|
|
|
@@ -17,7 +17,7 @@ Claude Code Conductor(C3)は「親 Claude が複数の専門エージェン
|
|
|
17
17
|
|
|
18
18
|
```
|
|
19
19
|
ユーザー
|
|
20
|
-
↓ /start, /develop, /
|
|
20
|
+
↓ /start, /develop, /review-phase, /doc, /mcp-config, /extract-lib ...
|
|
21
21
|
親 Claude(オーケストレーター)
|
|
22
22
|
├─ interviewer ← ヒアリング
|
|
23
23
|
├─ architect ← 設計
|
|
@@ -127,7 +127,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
|
|
|
127
127
|
| `/setup` | コーディング規約の設定(coding-standards・project-conventions 生成) |
|
|
128
128
|
| `/start` | 開発ワークフローの入口(ヒアリング/設計/計画/実装 から選択) |
|
|
129
129
|
| `/develop` | TDD フェーズから直接開始 |
|
|
130
|
-
| `/
|
|
130
|
+
| `/review-phase` | レビューフェーズから直接開始(code-reviewer + security-reviewer) |
|
|
131
131
|
| `/promote-pattern` | 蓄積されたパターンを rules/ または skills/ に昇格 |
|
|
132
132
|
|
|
133
133
|
### ユーティリティ
|
|
@@ -165,7 +165,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
|
|
|
165
165
|
|
|
166
166
|
`/start` 実行後は、各フェーズの承認を進めるだけで最後まで自動的に流れます。
|
|
167
167
|
|
|
168
|
-
> **公式コマンドとの名前衝突について:** C3 のスキル名は Claude Code
|
|
168
|
+
> **公式コマンドとの名前衝突について:** C3 のスキル名は Claude Code 公式コマンドと重複しないよう設計しています。`/review-phase`(≠ 公式 `/code-review` / `/review`)、`/mcp-config`(≠ 公式 `/mcp`)はこの方針に基づく命名です。公式コマンドが追加された場合は衝突回避のために本フレームワークの skill 名を変更することがあります(v2.15.1 で `/code-review` → `/review-phase` に変更しました)。
|
|
169
169
|
|
|
170
170
|
---
|
|
171
171
|
|
|
@@ -13,6 +13,13 @@ from c3.adapters import print_adapter_actions, scaffold_adapters
|
|
|
13
13
|
from c3.paths import templates_dir
|
|
14
14
|
from c3.platforms import PLATFORM_CHOICES, expand_platforms
|
|
15
15
|
|
|
16
|
+
# 廃止済み skill パス(リリース履歴)。
|
|
17
|
+
# `c3 update` 完了時に配布先で残存していたら警告を stderr に表示する。
|
|
18
|
+
# 削除はしない(`c3 update` の "削除を検出しない" 設計を尊重)。
|
|
19
|
+
DEPRECATED_PATHS: tuple[tuple[str, str], ...] = (
|
|
20
|
+
(".claude/skills/code-review", "v2.15.1 で /review-phase にリネーム(Built-in /code-review と衝突回避)"),
|
|
21
|
+
)
|
|
22
|
+
|
|
16
23
|
|
|
17
24
|
def register(subparsers: argparse._SubParsersAction) -> None:
|
|
18
25
|
parser = subparsers.add_parser(
|
|
@@ -97,9 +104,35 @@ def handle(args: argparse.Namespace) -> int:
|
|
|
97
104
|
print("up to date")
|
|
98
105
|
elif not args.dry_run:
|
|
99
106
|
print(f"{changed} file(s) updated")
|
|
107
|
+
_warn_deprecated_paths(target_root)
|
|
100
108
|
return 0
|
|
101
109
|
|
|
102
110
|
|
|
111
|
+
def _warn_deprecated_paths(dest_root: Path) -> None:
|
|
112
|
+
"""配布先で廃止済み skill パスが残っていたら stderr に警告を出力。
|
|
113
|
+
|
|
114
|
+
DEPRECATED_PATHS の各エントリ (rel_path, reason) について
|
|
115
|
+
dest_root / rel_path の存在を確認し、見つかれば warning メッセージを stderr に出す。
|
|
116
|
+
|
|
117
|
+
本関数は読み取り専用(exists() チェックと stderr 出力のみ)で副作用がないため、
|
|
118
|
+
`--dry-run` 時にも常に実行される。削除は行わない(手動クリーンアップを促すのみ)。
|
|
119
|
+
`c3 update` の "削除を検出しない" 設計を尊重した実装。
|
|
120
|
+
"""
|
|
121
|
+
found = []
|
|
122
|
+
for rel_path, reason in DEPRECATED_PATHS:
|
|
123
|
+
candidate = dest_root / Path(rel_path)
|
|
124
|
+
if candidate.exists():
|
|
125
|
+
found.append((rel_path, reason))
|
|
126
|
+
if not found:
|
|
127
|
+
return
|
|
128
|
+
print("", file=sys.stderr)
|
|
129
|
+
print("warning: deprecated path(s) detected (manual cleanup recommended):", file=sys.stderr)
|
|
130
|
+
for rel_path, reason in found:
|
|
131
|
+
print(f" - {rel_path}: {reason}", file=sys.stderr)
|
|
132
|
+
print("", file=sys.stderr)
|
|
133
|
+
print(" c3 update does not delete files. Remove the path(s) manually.", file=sys.stderr)
|
|
134
|
+
|
|
135
|
+
|
|
103
136
|
def _walk_diff(template: Path, dest: Path):
|
|
104
137
|
"""Yield (action, absolute_dest_path) tuples for files that differ.
|
|
105
138
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
tests/skills/test_planner_lightweight.py
|
|
3
3
|
|
|
4
4
|
v2.13.0 で planner.md を 172 行 → ~66 行に軽量化した検証。
|
|
5
|
-
並列実行設計指針・自動検査ルールは
|
|
5
|
+
並列実行設計指針・自動検査ルールは skills/dev-workflow/references/plan-design-guidelines.md に外出しされている。
|
|
6
6
|
"""
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ from tests.skills._skill_helpers import WORKTREE_ROOT
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
PLANNER_AGENT = WORKTREE_ROOT / ".claude" / "agents" / "planner.md"
|
|
13
|
-
PLAN_DESIGN_GUIDELINES = WORKTREE_ROOT / ".claude" / "
|
|
13
|
+
PLAN_DESIGN_GUIDELINES = WORKTREE_ROOT / ".claude" / "skills" / "dev-workflow" / "references" / "plan-design-guidelines.md"
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def _read(path: Path) -> str:
|
|
@@ -23,7 +23,7 @@ def test_planner_agent_under_80_lines():
|
|
|
23
23
|
line_count = len(content.splitlines())
|
|
24
24
|
assert line_count <= 80, (
|
|
25
25
|
f"planner.md は {line_count} 行(80 行上限超過)。"
|
|
26
|
-
" 処理手順は
|
|
26
|
+
" 処理手順は skills/dev-workflow/references/plan-design-guidelines.md に外出ししてください(D-012)。"
|
|
27
27
|
)
|
|
28
28
|
|
|
29
29
|
|
|
@@ -45,9 +45,9 @@ def test_planner_references_plan_design_guidelines():
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
def test_plan_design_guidelines_exists_and_has_rules():
|
|
48
|
-
"""
|
|
48
|
+
"""skills/dev-workflow/references/plan-design-guidelines.md が存在し、ルール 1〜13 と R2〜R6 を含む。"""
|
|
49
49
|
content = _read(PLAN_DESIGN_GUIDELINES)
|
|
50
|
-
assert content, "
|
|
50
|
+
assert content, "skills/dev-workflow/references/plan-design-guidelines.md が存在しない"
|
|
51
51
|
required_concepts = (
|
|
52
52
|
"depends_on の付け方",
|
|
53
53
|
"TDD タスクは 3-wave に分解",
|
|
@@ -79,7 +79,7 @@ def test_planner_no_longer_contains_extracted_sections():
|
|
|
79
79
|
found = [h for h in forbidden_headings if h in content]
|
|
80
80
|
assert not found, (
|
|
81
81
|
f"planner.md に外出し済みのセクションが残っている: {found}. "
|
|
82
|
-
"
|
|
82
|
+
"skills/dev-workflow/references/plan-design-guidelines.md に移動してください。"
|
|
83
83
|
)
|
|
84
84
|
|
|
85
85
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""src/c3/cli_update.py の _warn_deprecated_paths と DEPRECATED_PATHS のテスト。"""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
import pytest
|
|
7
|
+
|
|
8
|
+
from c3.cli_update import DEPRECATED_PATHS, _warn_deprecated_paths
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_deprecated_paths_constant_is_tuple_of_pairs():
|
|
12
|
+
"""DEPRECATED_PATHS は tuple であり、各要素は (rel_path, reason) の 2 要素タプル。"""
|
|
13
|
+
assert isinstance(DEPRECATED_PATHS, tuple)
|
|
14
|
+
for entry in DEPRECATED_PATHS:
|
|
15
|
+
assert isinstance(entry, tuple)
|
|
16
|
+
assert len(entry) == 2
|
|
17
|
+
rel_path, reason = entry
|
|
18
|
+
assert isinstance(rel_path, str)
|
|
19
|
+
assert isinstance(reason, str)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_no_warning_when_deprecated_path_absent(tmp_path: Path, capsys: pytest.CaptureFixture[str]):
|
|
23
|
+
"""dest_root 配下に廃止パスが存在しない場合、stderr に何も出力しない。"""
|
|
24
|
+
_warn_deprecated_paths(tmp_path)
|
|
25
|
+
captured = capsys.readouterr()
|
|
26
|
+
assert captured.err == ""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_warning_when_deprecated_path_present(tmp_path: Path, capsys: pytest.CaptureFixture[str]):
|
|
30
|
+
"""dest_root 配下に廃止パスが残存していたら stderr に warning を出力する。"""
|
|
31
|
+
if not DEPRECATED_PATHS:
|
|
32
|
+
pytest.skip("DEPRECATED_PATHS が空")
|
|
33
|
+
rel_path, _ = DEPRECATED_PATHS[0]
|
|
34
|
+
target = tmp_path / rel_path
|
|
35
|
+
target.mkdir(parents=True, exist_ok=True)
|
|
36
|
+
_warn_deprecated_paths(tmp_path)
|
|
37
|
+
captured = capsys.readouterr()
|
|
38
|
+
assert "deprecated" in captured.err.lower()
|
|
39
|
+
assert rel_path in captured.err
|
|
40
|
+
assert "manual" in captured.err.lower()
|
|
41
|
+
assert "remove" in captured.err.lower()
|
|
@@ -10,7 +10,7 @@ def test_keeps_framework_files():
|
|
|
10
10
|
assert not should_skip("skills/dev-workflow.md")
|
|
11
11
|
assert not should_skip("commands/develop.md")
|
|
12
12
|
assert not should_skip("hooks/pre_tool.py")
|
|
13
|
-
assert not should_skip("
|
|
13
|
+
assert not should_skip("skills/dev-workflow/references/code-review-checklist.md")
|
|
14
14
|
assert not should_skip("settings.json")
|
|
15
15
|
assert not should_skip("CLAUDE.md")
|
|
16
16
|
assert not should_skip("docs/settings.json.md")
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""Tests for references migration: rules/ -> skills/dev-workflow/references/.
|
|
2
|
+
|
|
3
|
+
Verifies that:
|
|
4
|
+
- The 3 reference files exist at their new locations under skills/dev-workflow/references/
|
|
5
|
+
- The 3 old locations under rules/ no longer exist
|
|
6
|
+
- Agent definitions reference the new paths and not the old paths
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
WORKTREE_ROOT = Path(__file__).resolve().parents[1]
|
|
14
|
+
|
|
15
|
+
_CLAUDE = WORKTREE_ROOT / ".claude"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# ---------------------------------------------------------------------------
|
|
19
|
+
# 1-3: New reference files exist under skills/dev-workflow/references/
|
|
20
|
+
# ---------------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def test_plan_design_guidelines_exists_at_new_location():
|
|
24
|
+
path = _CLAUDE / "skills" / "dev-workflow" / "references" / "plan-design-guidelines.md"
|
|
25
|
+
assert path.exists(), f"Expected file not found: {path}"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_code_review_checklist_exists_at_new_location():
|
|
29
|
+
path = _CLAUDE / "skills" / "dev-workflow" / "references" / "code-review-checklist.md"
|
|
30
|
+
assert path.exists(), f"Expected file not found: {path}"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_security_review_checklist_exists_at_new_location():
|
|
34
|
+
path = _CLAUDE / "skills" / "dev-workflow" / "references" / "security-review-checklist.md"
|
|
35
|
+
assert path.exists(), f"Expected file not found: {path}"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# ---------------------------------------------------------------------------
|
|
39
|
+
# 4-6: Old locations under rules/ no longer exist
|
|
40
|
+
# ---------------------------------------------------------------------------
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_plan_design_guidelines_absent_from_rules():
|
|
44
|
+
path = _CLAUDE / "rules" / "plan-design-guidelines.md"
|
|
45
|
+
assert not path.exists(), f"File should have been removed from rules/: {path}"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_code_review_checklist_absent_from_rules():
|
|
49
|
+
path = _CLAUDE / "rules" / "code-review-checklist.md"
|
|
50
|
+
assert not path.exists(), f"File should have been removed from rules/: {path}"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_security_review_checklist_absent_from_rules():
|
|
54
|
+
path = _CLAUDE / "rules" / "security-review-checklist.md"
|
|
55
|
+
assert not path.exists(), f"File should have been removed from rules/: {path}"
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# ---------------------------------------------------------------------------
|
|
59
|
+
# 7-9: Agent definitions reference the new paths
|
|
60
|
+
# ---------------------------------------------------------------------------
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def test_planner_references_new_plan_design_guidelines():
|
|
64
|
+
agent_file = _CLAUDE / "agents" / "planner.md"
|
|
65
|
+
assert agent_file.exists(), f"Agent file not found: {agent_file}"
|
|
66
|
+
content = agent_file.read_text(encoding="utf-8")
|
|
67
|
+
assert "skills/dev-workflow/references/plan-design-guidelines.md" in content, (
|
|
68
|
+
"planner.md should reference skills/dev-workflow/references/plan-design-guidelines.md"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def test_code_reviewer_references_new_code_review_checklist():
|
|
73
|
+
agent_file = _CLAUDE / "agents" / "code-reviewer.md"
|
|
74
|
+
assert agent_file.exists(), f"Agent file not found: {agent_file}"
|
|
75
|
+
content = agent_file.read_text(encoding="utf-8")
|
|
76
|
+
assert "skills/dev-workflow/references/code-review-checklist.md" in content, (
|
|
77
|
+
"code-reviewer.md should reference skills/dev-workflow/references/code-review-checklist.md"
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def test_security_reviewer_references_new_security_review_checklist():
|
|
82
|
+
agent_file = _CLAUDE / "agents" / "security-reviewer.md"
|
|
83
|
+
assert agent_file.exists(), f"Agent file not found: {agent_file}"
|
|
84
|
+
content = agent_file.read_text(encoding="utf-8")
|
|
85
|
+
assert "skills/dev-workflow/references/security-review-checklist.md" in content, (
|
|
86
|
+
"security-reviewer.md should reference skills/dev-workflow/references/security-review-checklist.md"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
# ---------------------------------------------------------------------------
|
|
91
|
+
# 10-12: Agent definitions do NOT reference the old rules/ paths
|
|
92
|
+
# ---------------------------------------------------------------------------
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def test_planner_does_not_reference_old_plan_design_guidelines():
|
|
96
|
+
agent_file = _CLAUDE / "agents" / "planner.md"
|
|
97
|
+
assert agent_file.exists(), f"Agent file not found: {agent_file}"
|
|
98
|
+
content = agent_file.read_text(encoding="utf-8")
|
|
99
|
+
assert "rules/plan-design-guidelines.md" not in content, (
|
|
100
|
+
"planner.md must not reference old path rules/plan-design-guidelines.md"
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def test_code_reviewer_does_not_reference_old_code_review_checklist():
|
|
105
|
+
agent_file = _CLAUDE / "agents" / "code-reviewer.md"
|
|
106
|
+
assert agent_file.exists(), f"Agent file not found: {agent_file}"
|
|
107
|
+
content = agent_file.read_text(encoding="utf-8")
|
|
108
|
+
assert "rules/code-review-checklist.md" not in content, (
|
|
109
|
+
"code-reviewer.md must not reference old path rules/code-review-checklist.md"
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def test_security_reviewer_does_not_reference_old_security_review_checklist():
|
|
114
|
+
agent_file = _CLAUDE / "agents" / "security-reviewer.md"
|
|
115
|
+
assert agent_file.exists(), f"Agent file not found: {agent_file}"
|
|
116
|
+
content = agent_file.read_text(encoding="utf-8")
|
|
117
|
+
assert "rules/security-review-checklist.md" not in content, (
|
|
118
|
+
"security-reviewer.md must not reference old path rules/security-review-checklist.md"
|
|
119
|
+
)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""skill ディレクトリと Claude Code Built-in コマンドの衝突回避を保証する回帰テスト。"""
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
# tests/ 直下からの相対パスを前提とする(test_planner_lightweight.py と同じ流儀)
|
|
5
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_review_phase_skill_exists():
|
|
9
|
+
"""v2.15.1 でリネームした /review-phase skill が存在すること。"""
|
|
10
|
+
path = REPO_ROOT / ".claude" / "skills" / "review-phase" / "SKILL.md"
|
|
11
|
+
assert path.exists(), f"review-phase skill SKILL.md が存在しません: {path}"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_old_code_review_skill_not_exists():
|
|
15
|
+
"""v2.15.1 でリネームした旧 /code-review skill が削除されていること(Built-in /code-review と衝突するため)。"""
|
|
16
|
+
path = REPO_ROOT / ".claude" / "skills" / "code-review" / "SKILL.md"
|
|
17
|
+
assert not path.exists(), (
|
|
18
|
+
f"旧 code-review skill SKILL.md が残存しています: {path}\n"
|
|
19
|
+
"Claude Code v2.1.147 で追加された Built-in /code-review と衝突するため削除してください。"
|
|
20
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/project-setup.md
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/systematic-debugger.md
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/agents/wt_developer.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/docs/platform-adapters.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/consolidate_memory.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/permission_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/recall_inject.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/restore_session.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/session_start.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/session_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/hooks/worktree_guard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/rules/promoted/index.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/develop/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/init-session/SKILL.md
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/mcp-config/SKILL.md
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/pattern-status/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/recall/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/.claude/skills/setup/reference.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/LICENSES/chroma-hnswlib-LICENSE
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/LICENSES/chroma-hnswlib-NOTICE
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_consolidate_memory.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_hook_utils.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_permission_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_planner_check.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_planner_check_dev.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_recall_inject.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_restore_session.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_review_hint_inject.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_select_tier.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_session_start.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_session_stop.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_session_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_similarity_boost.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_statusline.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_sync_check.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/hooks/test_template_guard.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/_skill_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_recall_skill.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/skills/test_setup_templates.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_docstring_consistency.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_mcp_server_elicit.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_precompact_additional.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_precompact_toctou_fixes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_session_utils_additional.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_stop_precompact_fixes.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_sync_template_stop.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.14.2 → claude_code_conductor-2.15.1}/tests/test_template_pre_tool_hook.py
RENAMED
|
File without changes
|
|
File without changes
|