claude-code-conductor 1.3.0__tar.gz → 1.4.0__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.
Files changed (157) hide show
  1. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/session_utils.py +1 -0
  2. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/dev-workflow/SKILL.md +37 -21
  3. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/init-session/SKILL.md +5 -0
  4. claude_code_conductor-1.4.0/.claude/skills/start/SKILL.md +252 -0
  5. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/task-routing/SKILL.md +28 -3
  6. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/CHANGELOG.md +41 -0
  7. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/PKG-INFO +1 -1
  8. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/__init__.py +1 -1
  9. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_session_utils.py +17 -0
  10. claude_code_conductor-1.3.0/.claude/skills/start/SKILL.md +0 -92
  11. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/CLAUDE.md +0 -0
  12. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/architect.md +0 -0
  13. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/code-reviewer.md +0 -0
  14. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/developer.md +0 -0
  15. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/doc-writer.md +0 -0
  16. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/interviewer.md +0 -0
  17. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/planner.md +0 -0
  18. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/project-setup.md +0 -0
  19. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/security-reviewer.md +0 -0
  20. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/systematic-debugger.md +0 -0
  21. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/tdd-develop.md +0 -0
  22. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/agents/tester.md +0 -0
  23. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/docs/parallel-orchestra-manifest.md +0 -0
  24. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/docs/po-worktree-writes.md +0 -0
  25. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/docs/settings.json.md +0 -0
  26. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/clear_file_history.py +0 -0
  27. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/consolidate_memory.py +0 -0
  28. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/enable_sandbox.py +0 -0
  29. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/init_c3_db.py +0 -0
  30. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/permission_handler.py +0 -0
  31. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/po_heartbeat.py +0 -0
  32. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/post_tool.py +0 -0
  33. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/pre_compact.py +0 -0
  34. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/pre_tool.py +0 -0
  35. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/record_review_decision.py +0 -0
  36. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/record_tier_outcome.py +0 -0
  37. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/restore_session.py +0 -0
  38. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/review_hint_inject.py +0 -0
  39. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/schema.sql +0 -0
  40. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/select_tier.py +0 -0
  41. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/statusline.py +0 -0
  42. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/stop.py +0 -0
  43. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/subagent_log.py +0 -0
  44. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/validate_skill_change.py +0 -0
  45. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/hooks/worktree_guard.py +0 -0
  46. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/memory/.gitkeep +0 -0
  47. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/permission_rules.json +0 -0
  48. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/rules/code-review-checklist.md +0 -0
  49. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/rules/promoted/index.md +0 -0
  50. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/rules/security-review-checklist.md +0 -0
  51. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/settings.json +0 -0
  52. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/settings.local.json +0 -0
  53. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/code-review/SKILL.md +0 -0
  54. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/develop/SKILL.md +0 -0
  55. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/doc/SKILL.md +0 -0
  56. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  57. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/mcp-config/SKILL.md +0 -0
  58. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  59. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/po-status/SKILL.md +0 -0
  60. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
  61. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
  62. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  63. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/setup/SKILL.md +0 -0
  64. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/wave-execution/SKILL.md +0 -0
  65. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/skills/worktree-tdd-workflow/SKILL.md +0 -0
  66. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.claude/state/.gitkeep +0 -0
  67. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/.gitignore +0 -0
  68. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/LICENSE +0 -0
  69. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/README.md +0 -0
  70. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/hatch_build.py +0 -0
  71. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/pyproject.toml +0 -0
  72. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/__main__.py +0 -0
  73. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/_excludes.py +0 -0
  74. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/cli.py +0 -0
  75. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/cli_doctor.py +0 -0
  76. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/cli_init.py +0 -0
  77. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/cli_list.py +0 -0
  78. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/cli_po.py +0 -0
  79. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/cli_update.py +0 -0
  80. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/paths.py +0 -0
  81. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/po/__init__.py +0 -0
  82. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/po/manifest.py +0 -0
  83. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/c3/po/run.py +0 -0
  84. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/parallel_orchestra/__init__.py +0 -0
  85. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/parallel_orchestra/_exceptions.py +0 -0
  86. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/parallel_orchestra/c3_db.py +0 -0
  87. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/parallel_orchestra/cli.py +0 -0
  88. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/parallel_orchestra/manifest.py +0 -0
  89. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/parallel_orchestra/report.py +0 -0
  90. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/src/parallel_orchestra/runner.py +0 -0
  91. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/__init__.py +0 -0
  92. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/conftest.py +0 -0
  93. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/__init__.py +0 -0
  94. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_clear_file_history.py +0 -0
  95. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_consolidate_memory.py +0 -0
  96. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_enable_sandbox.py +0 -0
  97. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_init_c3_db.py +0 -0
  98. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_permission_handler.py +0 -0
  99. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_post_tool.py +0 -0
  100. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_pre_tool.py +0 -0
  101. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_record_tier_outcome.py +0 -0
  102. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_restore_session.py +0 -0
  103. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_review_hint_inject.py +0 -0
  104. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_select_tier.py +0 -0
  105. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_select_tier_escalation.py +0 -0
  106. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_similarity_boost.py +0 -0
  107. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_statusline.py +0 -0
  108. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  109. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/hooks/test_subagent_log.py +0 -0
  110. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/__init__.py +0 -0
  111. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/conftest.py +0 -0
  112. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_cli.py +0 -0
  113. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_manifest.py +0 -0
  114. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_po_results_recording.py +0 -0
  115. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_po_status_visibility.py +0 -0
  116. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_po_worktree_writes.py +0 -0
  117. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_report.py +0 -0
  118. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_retry_backoff.py +0 -0
  119. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_review_fixes.py +0 -0
  120. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_review_fixes2.py +0 -0
  121. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_review_fixes3.py +0 -0
  122. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_review_fixes4.py +0 -0
  123. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_review_fixes5.py +0 -0
  124. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_runner_model_override.py +0 -0
  125. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_runner_t7.py +0 -0
  126. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_runner_v04_fix.py +0 -0
  127. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_runner_v04_m1.py +0 -0
  128. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/parallel_orchestra/test_runner_v04_m2.py +0 -0
  129. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_clear_file_history.py +0 -0
  130. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_cli_init.py +0 -0
  131. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_cli_list.py +0 -0
  132. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_cli_po.py +0 -0
  133. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_cli_po_tempfile.py +0 -0
  134. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_docstring_consistency.py +0 -0
  135. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_enable_sandbox.py +0 -0
  136. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_excludes.py +0 -0
  137. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_manifest_fixes.py +0 -0
  138. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_manifest_yaml_escape.py +0 -0
  139. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_paths.py +0 -0
  140. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_po_manifest.py +0 -0
  141. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_po_run.py +0 -0
  142. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_po_waves.py +0 -0
  143. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_pre_compact.py +0 -0
  144. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_pre_tool_hook.py +0 -0
  145. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_precompact_additional.py +0 -0
  146. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_precompact_toctou_fixes.py +0 -0
  147. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_session_utils_additional.py +0 -0
  148. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_statusline.py +0 -0
  149. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_stop_additional.py +0 -0
  150. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_stop_hook.py +0 -0
  151. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_stop_precompact_fixes.py +0 -0
  152. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_sync_template_clear_file_history.py +0 -0
  153. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_sync_template_stop.py +0 -0
  154. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_sync_validate_skill.py +0 -0
  155. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_template_pre_tool_hook.py +0 -0
  156. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_validate_skill_change.py +0 -0
  157. {claude_code_conductor-1.3.0 → claude_code_conductor-1.4.0}/tests/test_worktree_guard.py +0 -0
@@ -20,6 +20,7 @@ def is_worktree(cwd: str) -> bool:
20
20
  def create_session_template(date_str: str) -> str:
21
21
  return (
22
22
  f"SESSION: {date_str}\n"
23
+ f"TASK_TYPE: \n"
23
24
  f"AGENT: \n"
24
25
  f"DURATION: \n"
25
26
  f"\n"
@@ -16,27 +16,31 @@ user-invocable: false
16
16
 
17
17
  `.claude/agents/interviewer.md` を Read してペルソナを採用する。
18
18
 
19
- 今日のセッションファイル(`.claude/memory/sessions/YYYYMMDD.tmp`)に以下を追記する(未登録の場合のみ):
20
- - `- [ ] ヒアリング` / `- [ ] 設計` / `- [ ] 計画`
19
+ ### TASK_TYPE の確認
21
20
 
22
- ### A-1: 目的
21
+ 今日のセッションファイル(`.claude/memory/sessions/YYYYMMDD.tmp`)の冒頭から
22
+ `^TASK_TYPE: (\S+)$` を抽出してコンテキストに保持する。
23
23
 
24
- AskUserQuestion ツール:
25
- ```json
26
- {
27
- "questions": [{
28
- "question": "このプロジェクト・機能の目的を教えてください",
29
- "options": [
30
- { "label": "新機能の追加", "description": "新しい機能を実装したい" },
31
- { "label": "既存機能の改善", "description": "現在の動作を変えたい・良くしたい" },
32
- { "label": "バグ修正", "description": "問題のある動作を直したい" },
33
- { "label": "リファクタリング", "description": "動作は変えずに内部を整理したい" }
34
- ]
35
- }]
36
- }
37
- ```
24
+ 抽出した値が `feature / bug-fix / refactor / security-audit / docs` のいずれでもない場合
25
+ (空欄、enum 外の文字列など)は「TASK_TYPE 未確定」とみなして以下のフォールバックを実施する。
26
+
27
+ `TASK_TYPE` が空欄や行が無い、または enum 外の場合(`/develop` 直接呼び出しなど Step 0.5 を経由しないケース):
28
+ - Skill ツールで `task-routing` を呼ぶ。`args` に `from_start=true` を渡すことで
29
+ 「種別確認のみモード」で動作させ、Step 2〜4 をスキップさせる(`/start` Step 0.5 と同じ呼び方):
30
+ ```
31
+ Skill(skill="task-routing", args="from_start=true")
32
+ ```
33
+ - 戻ってきた種別を当日 tmp 冒頭の `TASK_TYPE:` 行に Edit で書き込む(dev-workflow 側で書き込む)
34
+ - これにより task-routing が再帰的に `/start` を Read して再び `task-routing` を呼ぶ事態を回避する
38
35
 
39
- ### A-2: 背景・きっかけ
36
+ `TASK_TYPE` が `feature` 以外(bug-fix / refactor / security-audit / docs)の場合は、
37
+ 本来 dev-workflow フェーズ A〜E のフルパスを通す必要がない種別であることを通知し、
38
+ ユーザーに本当に dev-workflow を実行するか確認する(誤起動の防止)。
39
+
40
+ 今日のセッションファイルに以下を追記する(未登録の場合のみ):
41
+ - `- [ ] ヒアリング` / `- [ ] 設計` / `- [ ] 計画`
42
+
43
+ ### A-1: 背景・きっかけ
40
44
 
41
45
  AskUserQuestion ツール:
42
46
  ```json
@@ -53,7 +57,7 @@ AskUserQuestion ツール:
53
57
  }
54
58
  ```
55
59
 
56
- ### A-3: 制約・前提条件
60
+ ### A-2: 制約・前提条件
57
61
 
58
62
  AskUserQuestion ツール:
59
63
  ```json
@@ -73,7 +77,7 @@ AskUserQuestion ツール:
73
77
 
74
78
  制約を選んだ場合は補足情報(納期の日付など)を追加で確認する。
75
79
 
76
- ### A-4: 非機能要件
80
+ ### A-3: 非機能要件
77
81
 
78
82
  AskUserQuestion ツール:
79
83
  ```json
@@ -91,9 +95,19 @@ AskUserQuestion ツール:
91
95
  }
92
96
  ```
93
97
 
94
- ### A-5: requirements-report の生成と承認
98
+ ### A-4: requirements-report の生成と承認
95
99
 
96
100
  収集した内容をもとに `.claude/reports/requirements-report-YYYYMMDD-HHMMSS.md` に Write する。
101
+ ファイル冒頭のフロントマターに `task_type: {task_type}` を含めること(後段の architect / planner が参照する):
102
+
103
+ ```yaml
104
+ ---
105
+ task_type: {task_type} # /start Step 0.5 で確定した種別(feature / bug-fix / refactor / security-audit / docs のいずれか)を埋める
106
+ ---
107
+ ```
108
+
109
+ `{task_type}` は plain string で、前述の TASK_TYPE 確認フェーズで保持した値と同じものを書く。
110
+
97
111
  内容を提示した後、AskUserQuestion で確認する:
98
112
 
99
113
  ```json
@@ -123,6 +137,8 @@ AskUserQuestion ツール:
123
137
 
124
138
  **フェーズ A から続いている場合:** 要件はコンテキスト内にあるため読み直し不要。
125
139
  **直接開始の場合:** Glob で `.claude/reports/requirements-report-*.md` の最新を Read する。
140
+ requirements-report のフロントマターに `task_type:` があれば読み取ってコンテキストに保持する
141
+ (後段で agent 起動方針の判定に使う)。
126
142
 
127
143
  今日のセッションファイルに以下を追記する(未登録の場合のみ):
128
144
  - `- [ ] 設計` / `- [ ] 計画`
@@ -22,6 +22,8 @@ Bash ツールで以下を **2回に分けて** 実行する(`&&` で結合し
22
22
  Glob で `.claude/memory/sessions/*.tmp` を検索し、ファイル名(YYYYMMDD)が最大のものを Read する。
23
23
  ファイルが存在しない場合は「前回セッションなし」として Step 3 へ進む。
24
24
 
25
+ 冒頭から `^TASK_TYPE: (\S+)$` を抽出して `prev_task_type` として記録する(存在すれば Step 3 のサマリに含める)。
26
+
25
27
  ---
26
28
 
27
29
  ## Step 2: 昇格候補パターンを確認する
@@ -39,6 +41,8 @@ Glob で `.claude/memory/sessions/*.tmp` を検索し、ファイル名(YYYYMM
39
41
  ## セッション再開 ({今日の日付})
40
42
 
41
43
  ### 前回セッション ({前回の日付})
44
+ **前回のタスク種別:** {prev_task_type があれば表示、なければ省略}
45
+
42
46
  **残タスク:**
43
47
  {残タスクリスト。完了済み [x] は省略する}
44
48
 
@@ -80,6 +84,7 @@ AskUserQuestion ツールで以下を提示する:
80
84
 
81
85
  **「ワークフローで始める」の場合:**
82
86
  Skill ツールで `start` スキルを呼び出す。
87
+ (`/start` 内の Step 0.5 で task-routing が自動実行されるため、ここで個別呼び出しは不要)
83
88
 
84
89
  **「直接指示する」の場合:**
85
90
  ```
@@ -0,0 +1,252 @@
1
+ ---
2
+ description: 開発ワークフローの入口。既存レポートの整理後、ヒアリング・設計・計画・実装のどこから始めるかを選んで dev-workflow を実行する。
3
+ ---
4
+
5
+ # start
6
+
7
+ 開発ワークフローの入口。フロー順序: **Step 0(レポート整理)→ Step 0.5(タスク種別確認)→ Step 1(開始地点選択)→ Step 2(フェーズ遷移)**。
8
+
9
+ ---
10
+
11
+ ## Step 0: レポートの整理
12
+
13
+ Glob で `.claude/reports/*.md` を検索する(`archive/` 配下は含まない)。
14
+ レポートが存在しない場合はこの Step をスキップして Step 1 へ進む。
15
+
16
+ レポートが存在する場合はファイル名の一覧をテキストで提示してから AskUserQuestion で確認する:
17
+
18
+ ```json
19
+ {
20
+ "questions": [{
21
+ "question": "既存のレポートがあります。どうしますか?",
22
+ "options": [
23
+ { "label": "全てアーカイブして新しく始める", "description": "全レポートを reports/archive/ に移動する" },
24
+ { "label": "アーカイブするフェーズを選ぶ", "description": "フェーズ単位で選んで一部だけ移動する" },
25
+ { "label": "そのまま引き継ぐ", "description": "レポートを変更せずに続ける" }
26
+ ]
27
+ }]
28
+ }
29
+ ```
30
+
31
+ **「全てアーカイブして新しく始める」の場合:**
32
+ Bash ツールで実行する:
33
+ ```bash
34
+ mkdir -p .claude/reports/archive && mv .claude/reports/*.md .claude/reports/archive/
35
+ ```
36
+
37
+ **「アーカイブするフェーズを選ぶ」の場合:**
38
+ AskUserQuestion で対象フェーズを確認する:
39
+
40
+ ```json
41
+ {
42
+ "questions": [{
43
+ "question": "アーカイブするフェーズを選んでください(複数選択可)",
44
+ "options": [
45
+ { "label": "要件定義", "description": "requirements-report-*.md" },
46
+ { "label": "設計", "description": "architecture-report-*.md" },
47
+ { "label": "計画", "description": "plan-report-*.md" },
48
+ { "label": "レビュー", "description": "code-review-report-*.md / security-review-report-*.md" }
49
+ ],
50
+ "multiSelect": true
51
+ }]
52
+ }
53
+ ```
54
+
55
+ 選択されたフェーズに対応するファイルを Bash ツールで移動する(ファイルが存在しない場合はスキップ):
56
+ - 要件定義: `mkdir -p .claude/reports/archive && mv .claude/reports/requirements-report-*.md .claude/reports/archive/ 2>/dev/null || true`
57
+ - 設計: `mkdir -p .claude/reports/archive && mv .claude/reports/architecture-report-*.md .claude/reports/archive/ 2>/dev/null || true`
58
+ - 計画: `mkdir -p .claude/reports/archive && mv .claude/reports/plan-report-*.md .claude/reports/archive/ 2>/dev/null || true`
59
+ - レビュー: `mkdir -p .claude/reports/archive && mv .claude/reports/code-review-report-*.md .claude/reports/archive/ 2>/dev/null || true && mv .claude/reports/security-review-report-*.md .claude/reports/archive/ 2>/dev/null || true`
60
+
61
+ ---
62
+
63
+ ## Step 0.5: タスク種別の確認
64
+
65
+ タスクの種別(feature / bug-fix / refactor / security-audit / docs)を確定して、
66
+ 当日セッション tmp の冒頭 `TASK_TYPE:` 行に書き込む。
67
+
68
+ ### 0.5-A: 当日 tmp の準備
69
+
70
+ 当日セッションファイル(`.claude/memory/sessions/{今日のYYYYMMDD}.tmp`)が存在しない場合は、
71
+ Bash で `session_utils.create_session_template` を使ってテンプレートを生成する:
72
+
73
+ ```bash
74
+ python -c "
75
+ import sys
76
+ from pathlib import Path
77
+ sys.path.insert(0, '.claude/hooks')
78
+ from session_utils import create_session_template
79
+ date_str = '{今日のYYYYMMDD}'
80
+ target = Path(f'.claude/memory/sessions/{date_str}.tmp')
81
+ if not target.exists():
82
+ target.parent.mkdir(parents=True, exist_ok=True)
83
+ target.write_text(create_session_template(date_str), encoding='utf-8')
84
+ "
85
+ ```
86
+
87
+ これによりテンプレート全体が一度に書かれ、`TASK_TYPE: ` 行も冒頭に含まれる。
88
+
89
+ ### 0.5-B: 前回 TASK_TYPE の確認とショートカット
90
+
91
+ Glob で `.claude/memory/sessions/*.tmp` を検索し、当日より前で最大日付のファイルを Read する。
92
+ 冒頭から `^TASK_TYPE: (\S+)$` を抽出して `prev_type` とする。
93
+
94
+ **ホワイトリスト検証**: 抽出した `prev_type` が
95
+ `feature / bug-fix / refactor / security-audit / docs` のいずれでもない場合
96
+ (空欄、enum 外の文字列、不正な値など)は `prev_type=None` として 0.5-C に進む
97
+ (プロンプト汚染対策、`[SR-V-001]` 対応)。
98
+
99
+ `prev_type` が確定種別(上記 5 種のいずれか)の場合、AskUserQuestion で 2 択ショートカットを提示する:
100
+
101
+ ```json
102
+ {
103
+ "questions": [{
104
+ "question": "前回と同じ種別 ({prev_type}) で進めますか?",
105
+ "header": "種別ショートカット",
106
+ "options": [
107
+ { "label": "前回と同じ ({prev_type}) で進める", "description": "task-routing をスキップして種別を引き継ぐ" },
108
+ { "label": "別の種別を選ぶ", "description": "task-routing で 5 択から選び直す" }
109
+ ]
110
+ }]
111
+ }
112
+ ```
113
+
114
+ 「前回と同じ」を選んだ場合は `task_type = prev_type` として 0.5-D へ進む。
115
+ 「別の種別を選ぶ」または `prev_type=None` の場合は 0.5-C へ進む。
116
+
117
+ ### 0.5-C: task-routing の呼び出し
118
+
119
+ Skill ツールで `task-routing` を呼ぶ。`args` パラメータに `from_start=true` を渡すことで、
120
+ task-routing 側に「/start 経由での呼び出しなので Step 1 のみ実行して種別を返す」ことを伝える:
121
+
122
+ ```
123
+ Skill(skill="task-routing", args="from_start=true")
124
+ ```
125
+
126
+ task-routing は args に `from_start=true` が含まれていることをコンテキストから読み取り、
127
+ Step 1(種別の 5 択)のみ実行して種別を返す。Step 2〜4 はスキップされる。
128
+
129
+ 戻ってきた種別を `task_type` とする。
130
+
131
+ ### 0.5-D: TASK_TYPE 行の書き込み
132
+
133
+ 当日 tmp の冒頭 `TASK_TYPE:` 行を Edit で `TASK_TYPE: {task_type}` に置換する。
134
+ 0.5-A で生成したテンプレートには `TASK_TYPE: ` のような空欄行が冒頭にあるため、そこを置換する:
135
+
136
+ ```
137
+ old: TASK_TYPE:
138
+ new: TASK_TYPE: {task_type}
139
+ ```
140
+
141
+ `{task_type}` には Step 0.5-B または 0.5-C で確定した種別の文字列
142
+ (feature / bug-fix / refactor / security-audit / docs のいずれか)を埋める。
143
+
144
+ ---
145
+
146
+ ## Step 1: 開始地点の選択
147
+
148
+ 確定した `task_type` に応じて、種別ごとに異なる選択肢を AskUserQuestion で提示する。
149
+
150
+ ### feature の場合(4 択・現状維持)
151
+
152
+ ```json
153
+ {
154
+ "questions": [{
155
+ "question": "feature の作業をどこから始めますか?",
156
+ "header": "開始地点",
157
+ "options": [
158
+ { "label": "ヒアリング", "description": "要件を整理するところから始める(新規・大きな変更)" },
159
+ { "label": "設計", "description": "要件は明確なので設計から始める" },
160
+ { "label": "計画", "description": "設計済みなのでタスク計画から始める" },
161
+ { "label": "実装", "description": "計画済みなので実装から始める" }
162
+ ]
163
+ }]
164
+ }
165
+ ```
166
+
167
+ ### bug-fix の場合(最大 2 択)
168
+
169
+ 既存 `.claude/reports/plan-report-*.md` が存在するかを Glob で確認し、選択肢を組み立てる:
170
+
171
+ ```json
172
+ {
173
+ "questions": [{
174
+ "question": "bug-fix の作業をどこから始めますか?",
175
+ "header": "開始地点",
176
+ "options": [
177
+ { "label": "systematic-debugger 直起動", "description": "原因調査から始める(推奨)" },
178
+ { "label": "計画から", "description": "既存 plan-report がある場合のみ。計画フェーズから入って修正タスクとして整える" }
179
+ ]
180
+ }]
181
+ }
182
+ ```
183
+
184
+ `plan-report-*.md` が無い場合は「計画から」の選択肢を外して 1 択(自動的に systematic-debugger)にする。
185
+
186
+ ### refactor の場合(2 択)
187
+
188
+ ```json
189
+ {
190
+ "questions": [{
191
+ "question": "refactor の作業をどこから始めますか?",
192
+ "header": "開始地点",
193
+ "options": [
194
+ { "label": "計画", "description": "planner で po_plan_version 付き plan-report を生成して PO 並列実行に備える" },
195
+ { "label": "実装", "description": "既存 po_plan_version 付き plan-report を使って wave-execution に直接入る" }
196
+ ]
197
+ }]
198
+ }
199
+ ```
200
+
201
+ ### security-audit の場合(即実行のみ)
202
+
203
+ 選択肢は 1 つのみ。AskUserQuestion で確認のみ取る:
204
+
205
+ ```json
206
+ {
207
+ "questions": [{
208
+ "question": "security-audit を実行します。code-reviewer と security-reviewer を並列起動してよいですか?",
209
+ "header": "実行確認",
210
+ "options": [
211
+ { "label": "実行する", "description": "code-reviewer + security-reviewer を 1 メッセージで並列起動" },
212
+ { "label": "中止する", "description": "ここで停止" }
213
+ ]
214
+ }]
215
+ }
216
+ ```
217
+
218
+ ### docs の場合(即実行のみ)
219
+
220
+ ```json
221
+ {
222
+ "questions": [{
223
+ "question": "docs 作業を実行します。doc-writer を起動してよいですか?",
224
+ "header": "実行確認",
225
+ "options": [
226
+ { "label": "実行する", "description": "doc-writer を起動してドキュメント作業を進める" },
227
+ { "label": "中止する", "description": "ここで停止" }
228
+ ]
229
+ }]
230
+ }
231
+ ```
232
+
233
+ ---
234
+
235
+ ## Step 2: 種別 × 開始地点 → フェーズ遷移
236
+
237
+ | 種別 | 開始地点 | 遷移先 |
238
+ |---|---|---|
239
+ | feature | ヒアリング | `.claude/skills/dev-workflow/SKILL.md` を Read してフェーズ A から |
240
+ | feature | 設計 | `.claude/skills/dev-workflow/SKILL.md` を Read してフェーズ B から |
241
+ | feature | 計画 | `.claude/skills/dev-workflow/SKILL.md` を Read してフェーズ C から |
242
+ | feature | 実装 | `.claude/skills/dev-workflow/SKILL.md` を Read してフェーズ D から |
243
+ | bug-fix | systematic-debugger 直起動 | Agent ツールで `systematic-debugger` を起動 → `developer` → `tester` → `code-reviewer` の順 |
244
+ | bug-fix | 計画から | `.claude/skills/dev-workflow/SKILL.md` を Read してフェーズ C から(既存 plan-report を利用) |
245
+ | refactor | 計画 | Agent ツールで `planner` を起動して `po_plan_version` 付き plan-report を生成 → `.claude/skills/wave-execution/SKILL.md` を Read |
246
+ | refactor | 実装 | `.claude/skills/wave-execution/SKILL.md` を Read して PO 並列実行に直接入る |
247
+ | security-audit | 即実行 | Agent ツールで `code-reviewer` と `security-reviewer` を **1 メッセージ内で並列起動** |
248
+ | docs | 即実行 | Agent ツールで `doc-writer` を単独起動 |
249
+
250
+ **最初に必ず** 遷移先の SKILL.md を Read してから実行する。記憶・推測で進めず、AskUserQuestion・Edit・セッションファイル更新の手順を省略しないこと。
251
+
252
+ 各エージェント完了後は通常の Approval Flow に従う。
@@ -7,12 +7,30 @@ disable-model-invocation: false
7
7
 
8
8
  タスクの種別を選び、それに対応するエージェント編成を提示する skill。
9
9
  Ruflo の「タスク種別 → エージェント編成テンプレ」発想を C3 の既存エージェント
10
- 構成に当てはめたもの。当面は単独で利用し、将来的に `/start` への自動統合を検討する。
10
+ 構成に当てはめたもの。`/start` から自動呼び出し可能(Skill ツール `args` に
11
+ `from_start=true` が渡される)。単独利用(`/task-routing` 直接実行)も継続サポートする。
12
+
13
+ ## 動作モード
14
+
15
+ 呼び出し元は Skill ツールの `args` パラメータで動作モードを指定する。
16
+ LLM はこの skill が起動された際、文脈や呼び出し情報から `from_start=true` の有無を判定する。
17
+
18
+ - **/start 経由(args に `from_start=true`)**: Step 1 で種別を確定したら
19
+ そのまま終了し、種別を `/start` 側に返却する。Step 2〜4 はスキップする。
20
+ TASK_TYPE 書き込みも `/start` 側で行うため、本 skill では行わない。
21
+ 編成詳細は `/start` 後段(Step 1 開始地点選択 / Step 2 フェーズ遷移)で
22
+ 扱うため、ここでは出さない。
23
+ - **単独利用(args 指定なし、または `from_start=false`)**: 従来通り Step 1 → 2 → 3 → 4 を
24
+ 順に実行する。Step 4 完了時に TASK_TYPE 書き込みも本 skill が行う。
11
25
 
12
26
  ---
13
27
 
14
28
  ## Step 1: タスク種別を選択する
15
29
 
30
+ Skill ツールの `args` に `from_start=true` が含まれているときは「/start 経由モード」とみなし、
31
+ Step 1 で種別を確定したら **Step 2〜4 はスキップ** して種別を呼び出し元(/start)に
32
+ 返却する(編成詳細は /start 側で表示するため)。
33
+
16
34
  AskUserQuestion ツール:
17
35
 
18
36
  ```json
@@ -117,9 +135,16 @@ AskUserQuestion ツール:
117
135
 
118
136
  ### 「この編成で進める」の場合
119
137
 
120
- 選択された種別に応じて以下を実行する:
138
+ **まず最初に** 当日のセッション tmp(`.claude/memory/sessions/YYYYMMDD.tmp`)の
139
+ 冒頭に `TASK_TYPE: {種別}` 行を Edit で書き込む(既存行があれば置換、空欄なら埋める)。
140
+ これは `args` に `from_start=true` が **無い** 場合のみ task-routing 側で行う
141
+ (`from_start=true` の場合は /start 側が書き込むため、ここでは書かない)。
142
+
143
+ その後、選択された種別に応じて以下を実行する:
121
144
 
122
- - **feature**: `.claude/skills/start/SKILL.md` を Read して `/start` フローに合流する
145
+ - **feature**:
146
+ - `args` に `from_start=true` が含まれているとき: 種別を返却するのみ(制御を /start に返す。再帰呼び出しを避ける)
147
+ - `args` 指定なし/`from_start=false` のとき: `.claude/skills/start/SKILL.md` を Read して `/start` フローに合流する
123
148
  - **bug-fix / docs**: 編成順に Agent ツールでエージェントを順次起動する
124
149
  - **refactor**: planner で `po_plan_version` 付き plan-report を生成 → `.claude/skills/wave-execution/SKILL.md` を Read して PO 並列実行に合流する
125
150
  - **security-audit**: code-reviewer と security-reviewer を **1 メッセージ内で並列起動**(複数 Agent ツール呼び出し)
@@ -1,5 +1,46 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.4.0] - 2026-05-09
4
+
5
+ ### マイルストーン
6
+
7
+ 第 8 波として F-010(タスク種別 → エージェント編成 skill)の Phase 2 を完成。Phase 1 で実装済みの `task-routing` skill を **`/start` フローに自動統合** し、bug-fix / refactor / security-audit / docs といった軽量タスクで dev-workflow フェーズ A〜E のフルパスを回避できる経路を提供した。同時に dev-workflow フェーズ A-1(目的選択)と task-routing 5 種別の二重質問を解消し、UX 負債を 1 つ削減した。
8
+
9
+ ### 追加(第 8 波)
10
+
11
+ #### F-010 Phase 2: task-routing skill を /start フローに自動統合
12
+
13
+ - `start/SKILL.md` に **Step 0.5「タスク種別の確認」** を新設。Step 0(レポート整理)と Step 1(開始地点選択)の間に挿入され、`/start` 起動時に必ずタスク種別が確定される。
14
+ - 前回 tmp に `TASK_TYPE` があれば「前回と同じ / 別の種別」の 2 択ショートカットで質問数を最小化。なければ Skill ツールで `task-routing` を `args="from_start=true"` 付きで呼び出し。
15
+ - Step 1(開始地点選択)を **種別ごとに選択肢を絞る** 分岐に改修。feature 4 択 / bug-fix 1〜2 択(既存 plan-report 有無で動的)/ refactor 2 択 / security-audit / docs は確認のみの 1 択。
16
+ - Step 2 を **種別 × 開始地点 → フェーズ遷移** マッピング表に拡張。bug-fix → systematic-debugger 直結 / docs → doc-writer 単独 / security-audit → 並列レビュアー / refactor → wave-execution の各経路を明文化。
17
+ - `task-routing/SKILL.md` に **動作モード分岐** を追加。`args` に `from_start=true` が含まれていれば Step 1 のみ実行して `/start` に種別を返却し、Step 2〜4 はスキップ(再帰呼び出し回避)。単独利用(`/task-routing`)は Step 1〜4 すべて実行する後方互換を維持。
18
+ - `dev-workflow/SKILL.md` フェーズ A 冒頭で TASK_TYPE を読み取り、**A-1「目的選択」を削除**して A-2〜A-5 を A-1〜A-4 へ繰り上げ。これにより task-routing 5 種別との二重質問が解消。`/develop` 直接呼び出しなど Step 0.5 を経由しない場合のフォールバックも実装。
19
+ - `dev-workflow/SKILL.md` A-4(旧 A-5)の requirements-report 生成手順に `task_type:` フロントマターを追加し、後段の architect / planner / interviewer に種別を伝達。
20
+ - `init-session/SKILL.md` Step 1 で前回 TASK_TYPE を抽出して Step 3 サマリに含めるよう拡張。Step 5「ワークフローで始める」に「`/start` 内で task-routing が自動実行されるため個別呼び出し不要」と注記追加。
21
+ - `session_utils.py::create_session_template` のテンプレートに `TASK_TYPE: \n` 行を追加(SESSION 直後)。tmp 冒頭順序非依存パーサのため既存 hook(stop / restore_session / consolidate_memory)に影響なし。
22
+
23
+ ### 設計判断
24
+
25
+ - **Skill ツール呼び出しのフラグ伝達は env ではなく args**: 当初 `C3_TASK_ROUTING_FROM_START=1` の env 経由を想定したが、Skill ツールは LLM 内のコンテキスト読み込みで子プロセス起動を伴わないため env が伝わらない。code-reviewer の H-1 指摘で発見し、Skill `args="from_start=true"` 方式に切り替え。
26
+ - **TASK_TYPE 値のホワイトリスト検証**: 前回 tmp から抽出した `TASK_TYPE` が `feature / bug-fix / refactor / security-audit / docs` のいずれでもない場合は `prev_type=None` として task-routing に進む(プロンプト汚染対策 [SR-V-001])。
27
+ - **dev-workflow A-1 削除の影響緩和**: requirements-report のフロントマターに `task_type:` を必ず含めることで、後段の architect / planner / interviewer に種別を伝達。`/develop` 直接呼び出し時は dev-workflow A 冒頭で task-routing を `args="from_start=true"` 付きで呼んでフォールバック。
28
+
29
+ ### 注意(既存利用先への影響)
30
+
31
+ - `/start` 起動時に Step 0.5「タスク種別の確認」が追加されるため、既存ユーザーには質問が 1 つ増える。`feature` を最初の選択肢に置き「feature を選ぶと従来の /start と同じフローに進む」と明示することで UX 劣化を最小化。
32
+ - セッション tmp の冒頭に `TASK_TYPE: \n` 行が追加される。既存 hook はこの行を順序依存でパースしないため影響なし。
33
+ - `/task-routing` 単独利用は完全な後方互換を維持。既存ユーザーの動線に影響なし。
34
+
35
+ ### 内部
36
+
37
+ - 新規テスト追加: `test_session_utils.py::TestCreateSessionTemplate` に `test_contains_task_type_line` / `test_task_type_line_position_after_session` の 2 ケース。
38
+ - 全体: **747 passed / 3 skipped / 0 failed**(前回 745 + 2)。
39
+
40
+ ### 関連コミット
41
+
42
+ - `b745c31` feat(skills): F-010 Phase 2 task-routing を /start に自動統合
43
+
3
44
  ## [1.3.0] - 2026-05-09
4
45
 
5
46
  ### マイルストーン
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-code-conductor
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: Multi-agent orchestration framework for Claude Code (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
@@ -1,3 +1,3 @@
1
1
  """Claude Code Conductor (C3) - multi-agent orchestration framework for Claude Code."""
2
2
 
3
- __version__ = "1.3.0"
3
+ __version__ = "1.4.0"
@@ -114,6 +114,23 @@ class TestCreateSessionTemplate:
114
114
  result = module.create_session_template("20260505")
115
115
  assert "<!-- C3:SESSION:JSON" in result
116
116
 
117
+ def test_contains_task_type_line(self):
118
+ """返り値に TASK_TYPE: 行(空欄)が含まれる。F-010 Phase 2: /start Step 0.5 で埋める。"""
119
+ module = _load_module()
120
+ result = module.create_session_template("20260505")
121
+ assert "TASK_TYPE: \n" in result
122
+
123
+ def test_task_type_line_position_after_session(self):
124
+ """TASK_TYPE: 行は SESSION: 行の直後に配置される(冒頭順序を担保)。"""
125
+ module = _load_module()
126
+ result = module.create_session_template("20260505")
127
+ # 冒頭から: SESSION: -> TASK_TYPE: -> AGENT: -> DURATION: の順
128
+ lines = result.split("\n")
129
+ assert lines[0].startswith("SESSION: ")
130
+ assert lines[1].startswith("TASK_TYPE:")
131
+ assert lines[2].startswith("AGENT:")
132
+ assert lines[3].startswith("DURATION:")
133
+
117
134
 
118
135
  # ---------------------------------------------------------------------------
119
136
  # 3. append_checkpoint(session_file, label, summary)
@@ -1,92 +0,0 @@
1
- ---
2
- description: 開発ワークフローの入口。既存レポートの整理後、ヒアリング・設計・計画・実装のどこから始めるかを選んで dev-workflow を実行する。
3
- ---
4
-
5
- # start
6
-
7
- 開発ワークフローの入口。
8
-
9
- ---
10
-
11
- ## Step 0: レポートの整理
12
-
13
- Glob で `.claude/reports/*.md` を検索する(`archive/` 配下は含まない)。
14
- レポートが存在しない場合はこの Step をスキップして Step 1 へ進む。
15
-
16
- レポートが存在する場合はファイル名の一覧をテキストで提示してから AskUserQuestion で確認する:
17
-
18
- ```json
19
- {
20
- "questions": [{
21
- "question": "既存のレポートがあります。どうしますか?",
22
- "options": [
23
- { "label": "全てアーカイブして新しく始める", "description": "全レポートを reports/archive/ に移動する" },
24
- { "label": "アーカイブするフェーズを選ぶ", "description": "フェーズ単位で選んで一部だけ移動する" },
25
- { "label": "そのまま引き継ぐ", "description": "レポートを変更せずに続ける" }
26
- ]
27
- }]
28
- }
29
- ```
30
-
31
- **「全てアーカイブして新しく始める」の場合:**
32
- Bash ツールで実行する:
33
- ```bash
34
- mkdir -p .claude/reports/archive && mv .claude/reports/*.md .claude/reports/archive/
35
- ```
36
-
37
- **「アーカイブするフェーズを選ぶ」の場合:**
38
- AskUserQuestion で対象フェーズを確認する:
39
-
40
- ```json
41
- {
42
- "questions": [{
43
- "question": "アーカイブするフェーズを選んでください(複数選択可)",
44
- "options": [
45
- { "label": "要件定義", "description": "requirements-report-*.md" },
46
- { "label": "設計", "description": "architecture-report-*.md" },
47
- { "label": "計画", "description": "plan-report-*.md" },
48
- { "label": "レビュー", "description": "code-review-report-*.md / security-review-report-*.md" }
49
- ],
50
- "multiSelect": true
51
- }]
52
- }
53
- ```
54
-
55
- 選択されたフェーズに対応するファイルを Bash ツールで移動する(ファイルが存在しない場合はスキップ):
56
- - 要件定義: `mkdir -p .claude/reports/archive && mv .claude/reports/requirements-report-*.md .claude/reports/archive/ 2>/dev/null || true`
57
- - 設計: `mkdir -p .claude/reports/archive && mv .claude/reports/architecture-report-*.md .claude/reports/archive/ 2>/dev/null || true`
58
- - 計画: `mkdir -p .claude/reports/archive && mv .claude/reports/plan-report-*.md .claude/reports/archive/ 2>/dev/null || true`
59
- - レビュー: `mkdir -p .claude/reports/archive && mv .claude/reports/code-review-report-*.md .claude/reports/archive/ 2>/dev/null || true && mv .claude/reports/security-review-report-*.md .claude/reports/archive/ 2>/dev/null || true`
60
-
61
- ---
62
-
63
- ## Step 1: 開始地点の選択
64
-
65
- AskUserQuestion ツールで以下を提示する:
66
-
67
- ```json
68
- {
69
- "questions": [{
70
- "question": "どこから始めますか?",
71
- "options": [
72
- { "label": "ヒアリング", "description": "要件を整理するところから始める(新規・大きな変更)" },
73
- { "label": "設計", "description": "要件は明確なので設計から始める" },
74
- { "label": "計画", "description": "設計済みなのでタスク計画から始める" },
75
- { "label": "実装", "description": "計画済みなので実装から始める" }
76
- ]
77
- }]
78
- }
79
- ```
80
-
81
- ---
82
-
83
- ## Step 2: dev-workflow/SKILL.md を Read してフェーズを実行する
84
-
85
- **最初に必ず** `.claude/skills/dev-workflow/SKILL.md` を Read する。記憶・推測で進めず、`.claude/skills/dev-workflow/SKILL.md` の AskUserQuestion・Edit・セッションファイル更新の手順を省略しないこと。
86
-
87
- 選択した開始地点に対応するフェーズから実行する:
88
-
89
- - **ヒアリング** → フェーズ A から実行
90
- - **設計** → フェーズ B から実行
91
- - **計画** → フェーズ C から実行
92
- - **実装** → フェーズ D から実行