claude-code-conductor 2.40.0__tar.gz → 2.42.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 (211) hide show
  1. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/breaking-changes.txt +1 -0
  2. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/deletions.txt +3 -0
  3. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/select_tier.py +24 -13
  4. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/session_stop.py +0 -2
  5. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/settings.json +1 -1
  6. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/dev-workflow/SKILL.md +185 -21
  7. claude_code_conductor-2.42.0/.claude/skills/dev-workflow/scripts/record_agent_outcome.py +665 -0
  8. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/parallel-agents/SKILL.md +46 -5
  9. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/CHANGELOG.md +42 -0
  10. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/PKG-INFO +1 -1
  11. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/__init__.py +1 -1
  12. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/_db_params.py +5 -0
  13. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/cli_tier.py +100 -91
  14. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/db.py +262 -331
  15. claude_code_conductor-2.42.0/src/c3/migrations/004_agent_outcomes.sql +46 -0
  16. claude_code_conductor-2.42.0/tests/hooks/test_record_agent_outcome.py +1963 -0
  17. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_select_tier.py +334 -87
  18. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_select_tier_escalation.py +8 -55
  19. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_session_start.py +9 -3
  20. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_session_stop.py +66 -0
  21. claude_code_conductor-2.42.0/tests/test_cli_tier.py +862 -0
  22. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_db.py +912 -731
  23. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_migrate.py +238 -5
  24. claude_code_conductor-2.40.0/.claude/skills/dev-workflow/scripts/record_tier_outcome.py +0 -244
  25. claude_code_conductor-2.40.0/tests/hooks/test_record_tier_outcome.py +0 -616
  26. claude_code_conductor-2.40.0/tests/test_cli_tier.py +0 -1143
  27. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/CLAUDE.md +0 -0
  28. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/architect.md +0 -0
  29. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/code-reviewer.md +0 -0
  30. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/design-critic.md +0 -0
  31. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/developer.md +0 -0
  32. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/doc-writer.md +0 -0
  33. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/interviewer.md +0 -0
  34. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/planner.md +0 -0
  35. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/project-setup.md +0 -0
  36. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/security-reviewer.md +0 -0
  37. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/systematic-debugger.md +0 -0
  38. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/tester.md +0 -0
  39. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/wt_developer.md +0 -0
  40. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/wt_systematic-debugger.md +0 -0
  41. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/agents/wt_tester.md +0 -0
  42. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/docs/config-policy.md +0 -0
  43. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/docs/parallel-agents-setup.md +0 -0
  44. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/docs/platform-adapters.md +0 -0
  45. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/docs/settings.json.md +0 -0
  46. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/_hook_utils.py +0 -0
  47. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/check_agent_invocation.py +0 -0
  48. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/consolidate_memory.py +0 -0
  49. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/permission_handler.py +0 -0
  50. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/permission_handler_toast.py +0 -0
  51. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/planner_check.py +0 -0
  52. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/post_tool.py +0 -0
  53. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/pre_compact.py +0 -0
  54. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/pre_tool.py +0 -0
  55. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/recall_autorebuild.py +0 -0
  56. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/recall_inject.py +0 -0
  57. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/restore_session.py +0 -0
  58. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/session_start.py +0 -0
  59. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/session_utils.py +0 -0
  60. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/statusline.py +0 -0
  61. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/stop.py +0 -0
  62. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/hooks/worktree_guard.py +0 -0
  63. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/memory/.gitkeep +0 -0
  64. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/permission_rules.json +0 -0
  65. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/rules/promoted/index.md +0 -0
  66. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/brainstorm/SKILL.md +0 -0
  67. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/codex-review/SKILL.md +0 -0
  68. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
  69. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
  70. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
  71. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
  72. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
  73. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
  74. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
  75. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
  76. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/develop/SKILL.md +0 -0
  77. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/doc/SKILL.md +0 -0
  78. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  79. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/init-session/SKILL.md +0 -0
  80. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/init-session/scripts/session_guard.py +0 -0
  81. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/mcp-config/SKILL.md +0 -0
  82. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  83. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
  84. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/recall/SKILL.md +0 -0
  85. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
  86. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  87. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/review-phase/SKILL.md +0 -0
  88. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/setup/SKILL.md +0 -0
  89. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/setup/reference.md +0 -0
  90. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
  91. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
  92. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/skills/start/SKILL.md +0 -0
  93. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.claude/state/.gitkeep +0 -0
  94. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/.gitignore +0 -0
  95. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/ARCHITECTURE.md +0 -0
  96. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/LICENSE +0 -0
  97. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/LICENSES/fastembed-LICENSE +0 -0
  98. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/LICENSES/fastembed-NOTICE +0 -0
  99. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/LICENSES/numpy-LICENSE +0 -0
  100. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/LICENSES/onnxruntime-LICENSE +0 -0
  101. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
  102. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/README.md +0 -0
  103. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/hatch_build.py +0 -0
  104. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/pyproject.toml +0 -0
  105. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/__main__.py +0 -0
  106. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/_excludes.py +0 -0
  107. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/_terminal.py +0 -0
  108. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/adapters.py +0 -0
  109. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/cli.py +0 -0
  110. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/cli_ask.py +0 -0
  111. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/cli_doctor.py +0 -0
  112. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/cli_init.py +0 -0
  113. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/cli_list.py +0 -0
  114. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/cli_plan.py +0 -0
  115. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/cli_recall.py +0 -0
  116. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/cli_update.py +0 -0
  117. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/embedding.py +0 -0
  118. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/gitutil.py +0 -0
  119. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/mcp_server.py +0 -0
  120. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/migrate.py +0 -0
  121. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/migrations/001_initial.sql +0 -0
  122. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
  123. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/migrations/003_tier_cost.sql +0 -0
  124. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/migrations/README.md +0 -0
  125. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/migrations/__init__.py +0 -0
  126. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/paths.py +0 -0
  127. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/plan_validator.py +0 -0
  128. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/platforms.py +0 -0
  129. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/pricing.py +0 -0
  130. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/question.py +0 -0
  131. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/recall_chunker.py +0 -0
  132. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/recall_index.py +0 -0
  133. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/src/c3/usage_ingester.py +0 -0
  134. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/__init__.py +0 -0
  135. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/conftest.py +0 -0
  136. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/fixtures/usage/README.md +0 -0
  137. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/fixtures/usage/mainline.jsonl +0 -0
  138. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
  139. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
  140. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/__init__.py +0 -0
  141. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_check_agent_invocation.py +0 -0
  142. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_consolidate_memory.py +0 -0
  143. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_hook_utils.py +0 -0
  144. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_permission_handler.py +0 -0
  145. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_permission_handler_toast.py +0 -0
  146. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  147. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_planner_check.py +0 -0
  148. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_planner_check_dev.py +0 -0
  149. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_post_tool.py +0 -0
  150. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_pre_tool.py +0 -0
  151. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_recall_autorebuild.py +0 -0
  152. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_recall_inject.py +0 -0
  153. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_record_review_decision.py +0 -0
  154. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_restore_session.py +0 -0
  155. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_review_hint_inject.py +0 -0
  156. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_session_utils.py +0 -0
  157. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  158. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_similarity_boost.py +0 -0
  159. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_statusline.py +0 -0
  160. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  161. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_sync_check.py +0 -0
  162. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/hooks/test_template_guard.py +0 -0
  163. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/__init__.py +0 -0
  164. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/_skill_helpers.py +0 -0
  165. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
  166. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_init_session_no_task_type.py +0 -0
  167. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_planner_lightweight.py +0 -0
  168. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_recall_skill.py +0 -0
  169. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  170. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_session_guard.py +0 -0
  171. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_setup_templates.py +0 -0
  172. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  173. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_start_skill_new_flow.py +0 -0
  174. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  175. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_adapters.py +0 -0
  176. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_check_deletions.py +0 -0
  177. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_cli_ask.py +0 -0
  178. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_cli_doctor.py +0 -0
  179. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_cli_entry.py +0 -0
  180. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_cli_init.py +0 -0
  181. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_cli_list.py +0 -0
  182. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_cli_plan.py +0 -0
  183. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_cli_recall.py +0 -0
  184. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_cli_update_breaking_changes.py +0 -0
  185. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_cli_update_deletions.py +0 -0
  186. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_docstring_consistency.py +0 -0
  187. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_embedding.py +0 -0
  188. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_excludes.py +0 -0
  189. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_extract_breaking_changes.py +0 -0
  190. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_gitutil.py +0 -0
  191. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_mcp_server_elicit.py +0 -0
  192. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_paths.py +0 -0
  193. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_plan_validator.py +0 -0
  194. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_pre_compact.py +0 -0
  195. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_pre_tool_hook.py +0 -0
  196. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_precompact_additional.py +0 -0
  197. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_precompact_toctou_fixes.py +0 -0
  198. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_pricing.py +0 -0
  199. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_recall_chunker.py +0 -0
  200. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_recall_index.py +0 -0
  201. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_references_migration.py +0 -0
  202. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_session_utils_additional.py +0 -0
  203. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_skill_no_builtin_conflict.py +0 -0
  204. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_statusline.py +0 -0
  205. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_stop_additional.py +0 -0
  206. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_stop_hook.py +0 -0
  207. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_stop_precompact_fixes.py +0 -0
  208. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_sync_template_stop.py +0 -0
  209. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_template_pre_tool_hook.py +0 -0
  210. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_usage_ingester.py +0 -0
  211. {claude_code_conductor-2.40.0 → claude_code_conductor-2.42.0}/tests/test_worktree_guard.py +0 -0
@@ -6,3 +6,4 @@
6
6
 
7
7
  v2.11.0|summarize-memory agent + skill removed; replaced by `c3 recall`|summarize-memory エージェント / skill を完全廃止。代替は `c3 recall` の意味検索。
8
8
  v2.20.0|hooks/schema.sql removed; SQLite schema is now managed by c3/migrations/ (auto-applied at session_start)|hooks/schema.sql を削除しました。SQLite スキーマは c3/migrations/ (wheel 内) で管理され session_start で自動適用されます。
9
+ v2.41.0|Learning tables tier_bandit/tier_recent_outcomes are DROPPED and learning data resets; record_tier_outcome.py replaced by record_agent_outcome.py; c3 tier stats --json shape changed; old db.py tier APIs removed or shimmed (shims removed next release)|
@@ -84,3 +84,6 @@ skills/wave-execution/SKILL.md
84
84
  docs/parallel-orchestra-manifest.md
85
85
  docs/po-worktree-writes.md
86
86
  hooks/po_heartbeat.py
87
+
88
+ # ---- v2.41.0: tier-routing 学習シグナル再設計(record_agent_outcome.py へ置換) ----
89
+ skills/dev-workflow/scripts/record_tier_outcome.py
@@ -5,14 +5,19 @@ tier-routing MVP: タスクの複雑度を簡易ヒューリスティックで
5
5
  (または学習データ収集期は uniform random)で推奨 Tier を決定して
6
6
  ``additionalContext`` で親 Claude に伝える。
7
7
 
8
- MVP スコープ(ユーザー承認済み):
9
- - **やる**: 推奨 Tier を提示するのみ。agent`model:` フロントマターは触らない
10
- - **やらない**: 動的 model 切替(次フェーズ)、フォールバック(Haiku 失敗→Sonnet 自動昇格)
8
+ MVP スコープ(ユーザー承認済み・tier-routing 自動適用フェーズ2でソフト適用を追加):
9
+ - **やる**: 推奨 Tier を提示し、developer / wt_developer Agent 起動時に
10
+ `model:` へ明示適用するよう親 Claude に指示する(ソフト適用・
11
+ additionalContext 経由の行動指示であり機械強制ではない)。agent の
12
+ `model:` フロントマター自体は変更しない
13
+ - **やらない**: PreToolUse hook 等による機械適用(updatedInput での自動書き換え・
14
+ 次フェーズ)、developer 以外の role への適用、フォールバック(Haiku 失敗→Sonnet 自動昇格)
11
15
 
12
16
  学習データ:
13
17
  - 結果は ``.claude/state/tier_selection.json`` に直近 1 件のみ書き込む
14
- - dev-workflow フェーズ E の承認/否認時に ``record_tier_outcome.py`` が
15
- この json を読んで ``tier_bandit`` テーブルを更新する
18
+ - dev-workflow の各フェーズ承認ゲート(並列タスク単位を含む)で
19
+ ``record_agent_outcome.py`` がこの json を読んで ``agent_tier_bandit``
20
+ テーブルを更新する
16
21
 
17
22
  入力 / 出力:
18
23
  - stdin: UserPromptSubmit payload(``prompt`` フィールドを参照)
@@ -70,7 +75,7 @@ COMPLEX_KEYWORDS = frozenset({
70
75
  "リファクタ", "再設計", "移行", "セキュリティ", "並行",
71
76
  })
72
77
 
73
- # 結果の永続化先(dev-workflow フェーズ E の record_tier_outcome.py が読む)
78
+ # 結果の永続化先(dev-workflow の各フェーズ承認ゲートで record_agent_outcome.py が読む)
74
79
  _HOOKS_DIR = os.path.dirname(os.path.abspath(__file__))
75
80
  _CLAUDE_DIR = os.path.dirname(_HOOKS_DIR)
76
81
  TIER_SELECTION_PATH = os.path.join(_CLAUDE_DIR, "state", "tier_selection.json")
@@ -244,7 +249,7 @@ def _read_prompt_history() -> list[dict]:
244
249
  """prompt-history.jsonl から末尾 N 行を読み込む。
245
250
 
246
251
  各行は ``{"ts", "prompt_hash", "prompt_prefix", "complexity", "tier", "outcome"}``
247
- の形式(record_tier_outcome.py が書き込む)。
252
+ の形式(record_agent_outcome.py が書き込む)。
248
253
  壊れた行はスキップ。ファイル不在時は空リスト。
249
254
  """
250
255
  if not os.path.isfile(PROMPT_HISTORY_PATH):
@@ -440,7 +445,7 @@ def _db_failure_rate(complexity: str, tier: str) -> tuple:
440
445
  c3_db = _load_c3_db_module()
441
446
  if c3_db is None:
442
447
  return None, 0
443
- return c3_db.read_tier_failure_rate(complexity, tier)
448
+ return c3_db.read_agent_failure_rate("developer", complexity, tier)
444
449
 
445
450
 
446
451
  def maybe_escalate(
@@ -500,7 +505,7 @@ def write_tier_selection(
500
505
  ) -> None:
501
506
  """直近の選択結果を ``tier_selection.json`` に書く。
502
507
 
503
- record_tier_outcome.py がこの json を読んで α/β を更新する。
508
+ record_agent_outcome.py がこの json を読んで agent_tier_bandit の α/β を更新する。
504
509
  既存ファイルは上書きされる(最新 1 件のみ保持)。
505
510
 
506
511
  ``suggested_model`` を併せて書く。tier 名と model の短縮名は同一とする。
@@ -597,9 +602,15 @@ def build_additional_context(
597
602
  suffix += " [cost-aware: 成功率拮抗のため低コスト Tier を選択]"
598
603
 
599
604
  return (
600
- f"[tier-routing 推奨] 複雑度: {complexity} / 推奨 Tier: {tier}({confidence})。"
601
- f" Claude の Agent ツール経由ではエージェント定義の frontmatter 指定が"
602
- f" 優先されるため、コスト最適化したい場合は手動切替してください。{suffix}"
605
+ f"[tier-routing 推奨] 複雑度: {complexity} / 推奨 Tier: {tier}({confidence}・developer 基準)。"
606
+ f" エージェント定義 frontmattermodel がデフォルトですが、Agent 呼び出し時に"
607
+ f" model: を明示指定すれば上書きできます(fork を除く)。"
608
+ f" 指示: developer / wt_developer を Agent ツールで起動する際は"
609
+ f" model: {tier} を明示指定してこの推奨 Tier を適用すること"
610
+ f"(学習データ収集中の期間も含め常に適用する。fork は model 上書き不可のため対象外)。"
611
+ f" 対象は developer / wt_developer のみ。tester 等の他 role、および親 Claude"
612
+ f" ペルソナで動かす role(interviewer / architect / planner)は"
613
+ f" tier レバーが無いため対象外で従来どおりとする。{suffix}"
603
614
  )
604
615
 
605
616
 
@@ -756,7 +767,7 @@ def main() -> int:
756
767
  # DB ヘルパーが無い環境でも uniform 選択で推奨を返す
757
768
  params = {t: (1.0, 1.0, 0) for t in TIERS}
758
769
  else:
759
- params = c3_db.read_tier_params(complexity)
770
+ params = c3_db.read_agent_tier_params("developer", complexity)
760
771
 
761
772
  # v2.24.0: cost_map をハイブリッド解決(実測 rate USD/MTok を主に、欠損 tier は静的単価で補完)。
762
773
  # rate 化により measured(実測)と tier_reference_cost(静的)が同次元(USD/MTok)になり単位整合済み。
@@ -103,8 +103,6 @@ def main() -> int:
103
103
  from c3.usage_ingester import ingest_session # noqa: PLC0415
104
104
  project_dir = _Path(transcript_path).parent
105
105
  ingest_session(session_id=session_id, project_dir=project_dir)
106
- from c3.db import sync_tier_bandit_cost # noqa: PLC0415
107
- sync_tier_bandit_cost()
108
106
  except Exception as e:
109
107
  print(f"[session_stop:usage_ingester] failed: {type(e).__name__}", file=sys.stderr)
110
108
 
@@ -10,7 +10,7 @@
10
10
  "Bash(python .claude/hooks/recall_autorebuild.py*)",
11
11
  "Bash(python .claude/skills/dev-workflow/scripts/review_hint_inject.py*)",
12
12
  "Bash(python .claude/skills/dev-workflow/scripts/record_review_decision.py*)",
13
- "Bash(python .claude/skills/dev-workflow/scripts/record_tier_outcome.py*)",
13
+ "Bash(python .claude/skills/dev-workflow/scripts/record_agent_outcome.py*)",
14
14
  "Bash(python .claude/skills/init-session/scripts/session_guard.py*)",
15
15
  "Read(**)",
16
16
  "Glob(**)",
@@ -24,12 +24,32 @@ user-invocable: false
24
24
 
25
25
  ---
26
26
 
27
+ ## tier-routing 結果記録の運用
28
+
29
+ 各フェーズの承認ゲート・タスク単位で `record_agent_outcome.py` を呼び、role 別に実際に使われた tier の成功/失敗を記録する(architecture-report-20260702-214748.md §3-4)。全記録ブロック共通のルール:
30
+
31
+ - `--complexity` は必須。値は**ワークフロー開始時に UserPromptSubmit hook が表示した `[tier-routing 推奨]` 表示の複雑度**(simple/medium/complex)で、フェーズ A 冒頭でセッションファイルへ `tier-routing複雑度:` 行として 1 度だけ永続化する(本ワークフロー中に再判定しない)。以降の各ブロックの `{セッションファイルの tier-routing複雑度: 行の値}` はこの永続化された値を参照するプレースホルダ(`現在地:` フィールドと同じ、compaction・長時間セッション耐性のための設計)
32
+ - `--execution` は必須。interviewer/architect/planner を**親 Claude ペルソナ**で採用した場合は `persona`(bandit 更新なし・イベントログのみ)、**Agent ツールでサブエージェント起動した場合は `subagent`**(bandit 更新あり)を渡す。developer/tester は dev-workflow では常に `subagent`
33
+ - `--execution persona` のブロックは `--tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}` も明記する。record_agent_outcome.py は persona 実行かつ `--tier` 省略時に常に `unknown` 固定で記録するため、実際の親モデル tier を記録に残したい場合は明示が必要(`--execution subagent` のブロックは frontmatter から自己解決するため `--tier` 不要)
34
+ - `--task` は任意引数。同一 gate/role/outcome の記録がタスクごとに繰り返し発生するゲート(D-2.5/D-3 等)では `--task {plan タスクID}` を付与して dedupe キーの粒度を上げる。1 ワークフロー 1 判定のゲート(A-4/B-3/C-2/C-3/D-5/E-1/E-2)は付与不要
35
+ - `--note` は指摘本文を逐語引用せず、シェルメタ文字(引用符・バッククォート・`$` 等)を含まない短い要約で書く(コマンドライン展開事故・シェルインジェクションを避けるため。record_agent_outcome.py 側で長さ上限と秘密情報マスクも適用されるが、そもそも逐語引用しないことが第一防御)
36
+ - 全エラー exit 0 のため呼び出しが失敗してもワークフローは止めない(記録漏れの可能性はあるが後続フェーズはブロックしない)
37
+
38
+ **ソフト適用(推奨 Tier の `model:` 指定・ADR-AS-1/ADR-AS-2):**
39
+
40
+ - developer を Agent ツールで起動する箇所(**D-2 / D-2.5 の再実行 / D-4**)では、`[tier-routing 推奨]` が指示した推奨 Tier を Agent 呼び出しの `model:` に明示指定する(ソフト適用・学習データ収集中の期間も含め常に適用する。fork は model 上書き不可のため対象外)。**tester / systematic-debugger は対象外**で従来どおり frontmatter 任せとする。interviewer/architect/planner は親 Claude ペルソナで動かし tier レバーが無いため対象外。
41
+ - **推奨 Tier の SSOT**: 「推奨 Tier」の唯一のソースは `.claude/state/tier_selection.json` の `tier`(無ければ `suggested_model`)であり、`[tier-routing 推奨]` の additionalContext テキストはその値を人間可読に射影した派生表示で SSOT ではない。この値は kickoff プロンプトの UserPromptSubmit で select_tier が 1 度だけ書き、E-2 の `--final` で削除されるまで wave/ゲートをまたいで安定する(承認応答は UserPromptSubmit を発火しないため途中で上書きされない)。
42
+ - developer の record ブロックは**原則 `--tier` を付けない**(record_agent_outcome.py が tier_selection.json から実適用 tier を機械解決する。tier 値の LLM 申告を行わない)。**例外(機械条件・ADR-AS-2)**: developer 起動時に指定した `model:` が推奨 Tier(tier_selection.json.tier)と**異なる値だった場合は、必ずその実際に指定した値を `--tier {実 model の tier}` に付けて**実態を記録する(「指定 model: ≠ 推奨 Tier なら必ず付与」という観測可能な二値条件で判定する)。
43
+
44
+ ---
45
+
27
46
  ## フェーズ A: ヒアリング
28
47
 
29
48
  `.claude/agents/interviewer.md` を Read してペルソナを採用する。
30
49
 
31
50
  今日のセッションファイルに以下を追記する(未登録の場合のみ):
32
51
  - `- [ ] ヒアリング` / `- [ ] 設計` / `- [ ] 計画`
52
+ - `tier-routing複雑度: {ワークフロー開始時に UserPromptSubmit hook が表示した [tier-routing 推奨] の複雑度}`(1 度だけ追記。既にあれば追記しない。以降の全 tier-routing 記録ブロックの `--complexity` はこの行の値を参照する)
33
53
 
34
54
  ### A-1〜A-3: 動的ヒアリング(ルーブリック型)
35
55
 
@@ -66,8 +86,24 @@ user-invocable: false
66
86
 
67
87
  承認後 → セッションファイルの `- [ ] ヒアリング` を `- [x] ヒアリング` に Edit し、`現在地:` を `現在地: フェーズB 設計中` に Edit して**フェーズ B** へ。
68
88
 
89
+ **tier-routing 結果記録**:
90
+ ```bash
91
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
92
+ --role interviewer --outcome success --gate A-4 \
93
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
94
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
95
+ ```
96
+ (interviewer を Agent ツールでサブエージェント起動した場合は `--execution subagent` を渡す。その場合 `--tier` は不要)
97
+
69
98
  **知識蓄積:**
70
- - 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
99
+ - 「否認・修正を依頼する」「否認・自分でファイルを編集する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
100
+ - **tier-routing 結果記録(否認時)**:
101
+ ```bash
102
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
103
+ --role interviewer --outcome failure --gate A-4 \
104
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
105
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
106
+ ```
71
107
  - 承認かつ非自明なアプローチが有効だった場合: `## うまくいったアプローチ` に追記し `patterns` にも追加する
72
108
 
73
109
  ---
@@ -116,8 +152,24 @@ user-invocable: false
116
152
 
117
153
  承認後 → セッションファイルの `- [ ] 設計` を `- [x] 設計` に Edit し、`現在地:` を `現在地: フェーズC 計画中` に Edit して**フェーズ C** へ。
118
154
 
155
+ **tier-routing 結果記録**:
156
+ ```bash
157
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
158
+ --role architect --outcome success --gate B-3 \
159
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
160
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
161
+ ```
162
+ (architect を Agent ツールでサブエージェント起動した場合は `--execution subagent` を渡す。その場合 `--tier` は不要)
163
+
119
164
  **知識蓄積:**
120
- - 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
165
+ - 「否認・修正を依頼する」「否認・自分でファイルを編集する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
166
+ - **tier-routing 結果記録(否認時)**:
167
+ ```bash
168
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
169
+ --role architect --outcome failure --gate B-3 \
170
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
171
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
172
+ ```
121
173
  - 承認かつ非自明なアプローチが有効だった場合: `## うまくいったアプローチ` に追記し `patterns` にも追加する
122
174
 
123
175
  ---
@@ -181,8 +233,24 @@ plan-report の全タスクを走査し、以下の形式でテキスト出力
181
233
 
182
234
  承認後 → セッションファイルの `- [ ] 計画` を `- [x] 計画` に Edit し、`現在地:` を `現在地: フェーズD 実装中` に Edit して**C-3(計画監査ゲート)** へ。
183
235
 
236
+ **tier-routing 結果記録**:
237
+ ```bash
238
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
239
+ --role planner --outcome success --gate C-2 \
240
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
241
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
242
+ ```
243
+ (planner を Agent ツールでサブエージェント起動した場合は `--execution subagent` を渡す。その場合 `--tier` は不要)
244
+
184
245
  **知識蓄積:**
185
- - 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
246
+ - 「否認・修正を依頼する」「否認・自分でファイルを編集する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
247
+ - **tier-routing 結果記録(否認時)**:
248
+ ```bash
249
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
250
+ --role planner --outcome failure --gate C-2 \
251
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
252
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
253
+ ```
186
254
  - 承認かつ非自明なアプローチが有効だった場合: `## うまくいったアプローチ` に追記し `patterns` にも追加する
187
255
 
188
256
  ---
@@ -289,6 +357,16 @@ design-review-report を Read して findings の有無を確認する。design-
289
357
  | B設計 が最上流 | フェーズ B | architect(該当設計のみ修正) | B → C → C-3 |
290
358
  | C計画 のみ | フェーズ C | planner(該当タスクのみ修正) | C → C-3 |
291
359
 
360
+ **tier-routing 結果記録**: 上表により層別ルーティングが発動した場合(`[対応予定]` が 1 件以上ある場合)のみ、戻り先の最上流 role へ failure を 1 件記録する(`[許容]` のみで `[対応予定]` が 0 件・findings なしの場合は記録しない):
361
+ ```bash
362
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
363
+ --role {interviewer|architect|planner(戻り先 role)} --outcome failure --gate C-3 \
364
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
365
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
366
+ --note "{層別ルーティングの起因概要(コード断片の逐語引用禁止)}"
367
+ ```
368
+ (戻り先 role を Agent ツールでサブエージェント起動した場合は `--execution subagent` を渡す。その場合 `--tier` は不要)
369
+
292
370
  上流フェーズ修正後は下流へ自然に連鎖する(例: B 修正 → C 再計画 → C-2 再承認 → C-3)。各フェーズでも該当 `[対応予定]` の finding のみを反映する。
293
371
 
294
372
  連鎖が C-2 を経て C-3 に戻ったら → ステップ 5(再監査の選択)へ。
@@ -403,7 +481,7 @@ Agent ツールで `tester` エージェントを起動する。→ 失敗する
403
481
 
404
482
  ### D-2: developer(Green フェーズ)
405
483
 
406
- Agent ツールで `developer` エージェントを起動する。→ テストが通る実装を行う。
484
+ Agent ツールで `developer` エージェントを起動する(`model:` に推奨 Tier を指定・上記「tier-routing 結果記録の運用」節参照)。→ テストが通る実装を行う。
407
485
 
408
486
  ### D-2.5: Stuck チェック
409
487
 
@@ -412,7 +490,7 @@ Glob で `.claude/reports/debug-needed-*.md` の最新を確認する。
412
490
  **ファイルが存在する場合:**
413
491
  1. Agent ツールで `systematic-debugger` を起動する。プロンプトに debug-needed ファイルのパスのみを含め、内容は agent 側で Read させる(プロンプトに直接展開しない)[SR-AI-001]
414
492
  2. 生成された `.claude/reports/debug-analysis-*.md` を Glob で取得してパスのみコンテキストに保持する(内容は次段で agent に Read させる)
415
- 3. D-2 の developer を再実行する。プロンプトに debug-analysis の**ファイルパスのみ**を含め、内容は agent 側で Read させる(プロンプトに展開しない)[SR-AI-001]
493
+ 3. D-2 の developer を再実行する(`model:` に推奨 Tier を指定・上記「tier-routing 結果記録の運用」節参照)。プロンプトに debug-analysis の**ファイルパスのみ**を含め、内容は agent 側で Read させる(プロンプトに展開しない)[SR-AI-001]
416
494
  4. debug-needed ファイルを削除する
417
495
 
418
496
  **ファイルが存在しない場合:** そのまま次へ進む
@@ -433,8 +511,23 @@ AskUserQuestion で確認する:
433
511
 
434
512
  承認後 → セッションファイルの `- [ ] developer: Green フェーズ` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズD 実装中 / 次: Refactor` に Edit する(**bug-fix モードではこの Edit をスキップする**。D-2 で `- [ ] developer: 修正実装` を既に `[x]` 化済みのため、Green フェーズ行自体がセッションファイルに存在しない)。
435
513
 
514
+ **tier-routing 結果記録**:
515
+ ```bash
516
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
517
+ --role developer --outcome success --gate D-2.5 \
518
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
519
+ --task {plan タスクID}
520
+ ```
521
+
436
522
  **知識蓄積:**
437
- - 「否認・再実装を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
523
+ - 「否認・再実装を依頼する」「否認・自分でコードを修正する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
524
+ - **tier-routing 結果記録(否認時)**:
525
+ ```bash
526
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
527
+ --role developer --outcome failure --gate D-2.5 \
528
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
529
+ --task {plan タスクID}
530
+ ```
438
531
 
439
532
  ### D-3: tester(確認)
440
533
 
@@ -456,9 +549,17 @@ AskUserQuestion で確認する:
456
549
 
457
550
  不合格の場合: D-2(developer)に戻る。合格するまで繰り返す。
458
551
 
552
+ **tier-routing 結果記録(不合格時のみ・D-2.5 と重複回避のため全合格時は記録しない・欠陥の所在で判定)**: D-5 否認ブロックと同型で、テストコード欠陥は `tester` failure、プロダクトコード欠陥は `developer` failure、両方または判別不能な場合は `developer` のみ記録する:
553
+ ```bash
554
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
555
+ --role {tester|developer(欠陥の所在で判定・テストコード欠陥=tester/プロダクトコード欠陥=developer/両方または判別不能=developer)} --outcome failure --gate D-3 \
556
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
557
+ --task {plan タスクID}
558
+ ```
559
+
459
560
  ### D-4: developer(Refactor フェーズ)
460
561
 
461
- Agent ツールで `developer` エージェントを起動する。→ テストを壊さずにコードを整理する。
562
+ Agent ツールで `developer` エージェントを起動する(`model:` に推奨 Tier を指定・上記「tier-routing 結果記録の運用」節参照)。→ テストを壊さずにコードを整理する。
462
563
 
463
564
  完了後 → セッションファイルの `- [ ] developer: Refactor フェーズ` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズD 実装中 / 次ゲート: tester 最終確認` に Edit する。
464
565
 
@@ -482,8 +583,21 @@ AskUserQuestion で確認する:
482
583
 
483
584
  承認後 → セッションファイルの `- [ ] tester: 最終確認` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズE レビュー中` に Edit して**フェーズ E** へ。
484
585
 
586
+ **tier-routing 結果記録**:
587
+ ```bash
588
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
589
+ --role tester --outcome success --gate D-5 \
590
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
591
+ ```
592
+
485
593
  **知識蓄積:**
486
- - 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
594
+ - 「否認・修正を依頼する」「否認・自分でコードを修正する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
595
+ - **tier-routing 結果記録(否認時・欠陥の所在で判定)**: テストコード欠陥は `tester` failure、プロダクトコード欠陥は `developer` failure、両方または判別不能な場合は `developer` のみ記録する:
596
+ ```bash
597
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
598
+ --role {tester|developer(欠陥の所在で判定)} --outcome failure --gate D-5 \
599
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
600
+ ```
487
601
 
488
602
  ---
489
603
 
@@ -525,6 +639,13 @@ AskUserQuestion で確認する:
525
639
 
526
640
  承認後 → セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズE レビュー中 / 次: security-review` に Edit して E-2 へ。
527
641
 
642
+ **tier-routing 結果記録**:
643
+ ```bash
644
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
645
+ --role developer --outcome success --gate E-1 \
646
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
647
+ ```
648
+
528
649
  **指摘がある場合:**
529
650
  指摘一覧をテキストで提示してから AskUserQuestion で方針を確認する:
530
651
  ```json
@@ -544,6 +665,16 @@ AskUserQuestion で確認する:
544
665
  **「全て対応する」の場合:**
545
666
  全指摘に `> **[対応予定]**` をマークし、セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
546
667
 
668
+ **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/**テストコード欠陥起因の指摘は tester failure**/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer・tester は `--execution subagent`、architect/planner は `--execution persona`。developer・tester は `--tier` を省略(frontmatter/tier_selection から自己解決)、architect/planner の場合は `--tier` も明記する):
669
+ ```bash
670
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
671
+ --role {developer|tester|architect|planner(帰属判定)} --outcome failure --gate E-1 \
672
+ --execution {developer・tester=subagent / architect・planner=persona} \
673
+ --complexity {セッションファイルの tier-routing複雑度: 行の値} \
674
+ --tier {developer・tester は省略(frontmatter/tier_selection から自己解決) / architect・planner は親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
675
+ --note "{帰属理由を1行で(コード断片の逐語引用禁止)}"
676
+ ```
677
+
547
678
  **「対応する指摘を選ぶ」の場合:**
548
679
  続けて AskUserQuestion で確認する:
549
680
  ```json
@@ -566,6 +697,15 @@ AskUserQuestion で確認する:
566
697
  ```
567
698
  4. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
568
699
  5. セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
700
+ 6. **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/**テストコード欠陥起因の指摘は tester failure**/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer・tester は `--execution subagent`、architect/planner は `--execution persona`。developer・tester は `--tier` を省略(frontmatter/tier_selection から自己解決)、architect/planner の場合は `--tier` も明記する):
701
+ ```bash
702
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
703
+ --role {developer|tester|architect|planner(帰属判定)} --outcome failure --gate E-1 \
704
+ --execution {developer・tester=subagent / architect・planner=persona} \
705
+ --complexity {セッションファイルの tier-routing複雑度: 行の値} \
706
+ --tier {developer・tester は省略(frontmatter/tier_selection から自己解決) / architect・planner は親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
707
+ --note "{帰属理由を1行で(コード断片の逐語引用禁止)}"
708
+ ```
569
709
 
570
710
  **「全て許容して進む」の場合:**
571
711
  AskUserQuestion で許容理由を確認する:
@@ -580,10 +720,17 @@ AskUserQuestion で許容理由を確認する:
580
720
  2. **review-hint 判断記録**: 全 `[CR-XX-NNN]` 指摘について `record_review_decision.py --decision accepted` で記録する
581
721
  3. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
582
722
  4. セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズE レビュー中 / 次: security-review` に Edit して E-2 へ。
723
+ 5. **tier-routing 結果記録**:
724
+ ```bash
725
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
726
+ --role developer --outcome success --gate E-1 \
727
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
728
+ ```
583
729
 
584
730
  **「否認・再レビューを依頼する」の場合:**
585
731
  追加の AskUserQuestion でフィードバックを確認し再実行する。
586
732
  セッションファイルの `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する。
733
+ **tier-routing 結果記録**: なし(否認・再レビュー依頼は記録対象外)。
587
734
 
588
735
  ---
589
736
 
@@ -620,9 +767,13 @@ AskUserQuestion で確認する:
620
767
  ```
621
768
 
622
769
  承認後 → セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: 完了` に Edit する。続けて **「引き継ぎバックログの照合」**(後述の共通ステップ)を実行してからコミットを提案する。
623
- **tier-routing 結果記録**: フェーズ E の最終承認時のみ Bash で記録する(多重カウント防止のため E-1 では記録しない):
770
+
771
+ **tier-routing 結果記録**:
624
772
  ```bash
625
- python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome success
773
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
774
+ --role developer --outcome success --gate E-2 \
775
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
776
+ --final
626
777
  ```
627
778
 
628
779
  **指摘がある場合:**
@@ -644,6 +795,16 @@ python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome succ
644
795
  **「全て対応する」の場合:**
645
796
  全指摘に `> **[対応予定]**` をマークし、セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
646
797
 
798
+ **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/**テストコード欠陥起因の指摘は tester failure**/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer・tester は `--execution subagent`、architect/planner は `--execution persona`。developer・tester は `--tier` を省略(frontmatter/tier_selection から自己解決)、architect/planner の場合は `--tier` も明記する):
799
+ ```bash
800
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
801
+ --role {developer|tester|architect|planner(帰属判定)} --outcome failure --gate E-2 \
802
+ --execution {developer・tester=subagent / architect・planner=persona} \
803
+ --complexity {セッションファイルの tier-routing複雑度: 行の値} \
804
+ --tier {developer・tester は省略(frontmatter/tier_selection から自己解決) / architect・planner は親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
805
+ --note "{帰属理由を1行で(コード断片の逐語引用禁止)}"
806
+ ```
807
+
647
808
  **「対応する指摘を選ぶ」の場合:**
648
809
  続けて AskUserQuestion で確認する:
649
810
  ```json
@@ -666,6 +827,15 @@ python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome succ
666
827
  ```
667
828
  4. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
668
829
  5. セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
830
+ 6. **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/**テストコード欠陥起因の指摘は tester failure**/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer・tester は `--execution subagent`、architect/planner は `--execution persona`。developer・tester は `--tier` を省略(frontmatter/tier_selection から自己解決)、architect/planner の場合は `--tier` も明記する):
831
+ ```bash
832
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
833
+ --role {developer|tester|architect|planner(帰属判定)} --outcome failure --gate E-2 \
834
+ --execution {developer・tester=subagent / architect・planner=persona} \
835
+ --complexity {セッションファイルの tier-routing複雑度: 行の値} \
836
+ --tier {developer・tester は省略(frontmatter/tier_selection から自己解決) / architect・planner は親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
837
+ --note "{帰属理由を1行で(コード断片の逐語引用禁止)}"
838
+ ```
669
839
 
670
840
  **「全て許容して完了」の場合:**
671
841
  AskUserQuestion で許容理由を確認する:
@@ -682,22 +852,16 @@ AskUserQuestion で許容理由を確認する:
682
852
  4. セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: 完了` に Edit する。続けて **「引き継ぎバックログの照合」**(後述の共通ステップ)を実行してからコミットを提案する。
683
853
  5. **tier-routing 結果記録**: 全許容で完了するのも「成功」としてカウント:
684
854
  ```bash
685
- python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome success
855
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
856
+ --role developer --outcome success --gate E-2 \
857
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
858
+ --final
686
859
  ```
687
860
 
688
861
  **「否認・再診断を依頼する」の場合:**
689
862
  追加の AskUserQuestion でフィードバックを確認し再実行する。
690
863
  セッションファイルの `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する。
691
- **tier-routing 結果記録**: 否認は「失敗」としてカウント:
692
- ```bash
693
- python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome failure
694
- ```
695
-
696
- **「全て対応する」「対応する指摘を選ぶ」の場合(フェーズ C へ戻る):**
697
- これらも tier の選択がコスト最適でなかったとみなし、**tier-routing 結果記録**で失敗をカウントしてからフェーズ C へ:
698
- ```bash
699
- python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome failure
700
- ```
864
+ **tier-routing 結果記録**: なし(否認・再診断依頼は記録対象外)。
701
865
 
702
866
  ---
703
867