claude-code-conductor 2.40.0__tar.gz → 2.41.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.41.0}/.claude/breaking-changes.txt +1 -0
  2. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/deletions.txt +3 -0
  3. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/select_tier.py +12 -10
  4. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/session_stop.py +0 -2
  5. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/settings.json +1 -1
  6. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/dev-workflow/SKILL.md +176 -18
  7. claude_code_conductor-2.41.0/.claude/skills/dev-workflow/scripts/record_agent_outcome.py +610 -0
  8. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/parallel-agents/SKILL.md +16 -0
  9. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/CHANGELOG.md +23 -0
  10. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/PKG-INFO +1 -1
  11. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/__init__.py +1 -1
  12. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/_db_params.py +5 -0
  13. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/cli_tier.py +100 -91
  14. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/db.py +262 -331
  15. claude_code_conductor-2.41.0/src/c3/migrations/004_agent_outcomes.sql +46 -0
  16. claude_code_conductor-2.41.0/tests/hooks/test_record_agent_outcome.py +1338 -0
  17. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_select_tier.py +229 -87
  18. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_select_tier_escalation.py +8 -55
  19. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_session_start.py +9 -3
  20. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_session_stop.py +66 -0
  21. claude_code_conductor-2.41.0/tests/test_cli_tier.py +862 -0
  22. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_db.py +912 -731
  23. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.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.41.0}/.claude/CLAUDE.md +0 -0
  28. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/architect.md +0 -0
  29. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/code-reviewer.md +0 -0
  30. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/design-critic.md +0 -0
  31. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/developer.md +0 -0
  32. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/doc-writer.md +0 -0
  33. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/interviewer.md +0 -0
  34. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/planner.md +0 -0
  35. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/project-setup.md +0 -0
  36. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/security-reviewer.md +0 -0
  37. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/systematic-debugger.md +0 -0
  38. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/tester.md +0 -0
  39. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/wt_developer.md +0 -0
  40. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/wt_systematic-debugger.md +0 -0
  41. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/agents/wt_tester.md +0 -0
  42. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/docs/config-policy.md +0 -0
  43. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/docs/parallel-agents-setup.md +0 -0
  44. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/docs/platform-adapters.md +0 -0
  45. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/docs/settings.json.md +0 -0
  46. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/_hook_utils.py +0 -0
  47. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/check_agent_invocation.py +0 -0
  48. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/consolidate_memory.py +0 -0
  49. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/permission_handler.py +0 -0
  50. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/permission_handler_toast.py +0 -0
  51. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/planner_check.py +0 -0
  52. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/post_tool.py +0 -0
  53. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/pre_compact.py +0 -0
  54. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/pre_tool.py +0 -0
  55. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/recall_autorebuild.py +0 -0
  56. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/recall_inject.py +0 -0
  57. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/restore_session.py +0 -0
  58. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/session_start.py +0 -0
  59. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/session_utils.py +0 -0
  60. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/statusline.py +0 -0
  61. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/stop.py +0 -0
  62. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/hooks/worktree_guard.py +0 -0
  63. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/memory/.gitkeep +0 -0
  64. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/permission_rules.json +0 -0
  65. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/rules/promoted/index.md +0 -0
  66. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/brainstorm/SKILL.md +0 -0
  67. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/codex-review/SKILL.md +0 -0
  68. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
  69. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
  70. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
  71. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
  72. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
  73. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
  74. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
  75. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
  76. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/develop/SKILL.md +0 -0
  77. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/doc/SKILL.md +0 -0
  78. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  79. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/init-session/SKILL.md +0 -0
  80. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/init-session/scripts/session_guard.py +0 -0
  81. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/mcp-config/SKILL.md +0 -0
  82. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  83. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
  84. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/recall/SKILL.md +0 -0
  85. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
  86. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  87. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/review-phase/SKILL.md +0 -0
  88. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/setup/SKILL.md +0 -0
  89. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/setup/reference.md +0 -0
  90. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
  91. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
  92. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/skills/start/SKILL.md +0 -0
  93. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.claude/state/.gitkeep +0 -0
  94. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/.gitignore +0 -0
  95. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/ARCHITECTURE.md +0 -0
  96. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/LICENSE +0 -0
  97. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/LICENSES/fastembed-LICENSE +0 -0
  98. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/LICENSES/fastembed-NOTICE +0 -0
  99. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/LICENSES/numpy-LICENSE +0 -0
  100. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/LICENSES/onnxruntime-LICENSE +0 -0
  101. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
  102. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/README.md +0 -0
  103. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/hatch_build.py +0 -0
  104. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/pyproject.toml +0 -0
  105. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/__main__.py +0 -0
  106. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/_excludes.py +0 -0
  107. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/_terminal.py +0 -0
  108. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/adapters.py +0 -0
  109. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/cli.py +0 -0
  110. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/cli_ask.py +0 -0
  111. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/cli_doctor.py +0 -0
  112. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/cli_init.py +0 -0
  113. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/cli_list.py +0 -0
  114. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/cli_plan.py +0 -0
  115. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/cli_recall.py +0 -0
  116. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/cli_update.py +0 -0
  117. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/embedding.py +0 -0
  118. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/gitutil.py +0 -0
  119. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/mcp_server.py +0 -0
  120. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/migrate.py +0 -0
  121. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/migrations/001_initial.sql +0 -0
  122. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
  123. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/migrations/003_tier_cost.sql +0 -0
  124. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/migrations/README.md +0 -0
  125. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/migrations/__init__.py +0 -0
  126. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/paths.py +0 -0
  127. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/plan_validator.py +0 -0
  128. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/platforms.py +0 -0
  129. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/pricing.py +0 -0
  130. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/question.py +0 -0
  131. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/recall_chunker.py +0 -0
  132. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/recall_index.py +0 -0
  133. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/src/c3/usage_ingester.py +0 -0
  134. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/__init__.py +0 -0
  135. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/conftest.py +0 -0
  136. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/fixtures/usage/README.md +0 -0
  137. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/fixtures/usage/mainline.jsonl +0 -0
  138. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
  139. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
  140. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/__init__.py +0 -0
  141. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_check_agent_invocation.py +0 -0
  142. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_consolidate_memory.py +0 -0
  143. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_hook_utils.py +0 -0
  144. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_permission_handler.py +0 -0
  145. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_permission_handler_toast.py +0 -0
  146. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  147. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_planner_check.py +0 -0
  148. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_planner_check_dev.py +0 -0
  149. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_post_tool.py +0 -0
  150. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_pre_tool.py +0 -0
  151. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_recall_autorebuild.py +0 -0
  152. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_recall_inject.py +0 -0
  153. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_record_review_decision.py +0 -0
  154. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_restore_session.py +0 -0
  155. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_review_hint_inject.py +0 -0
  156. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_session_utils.py +0 -0
  157. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  158. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_similarity_boost.py +0 -0
  159. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_statusline.py +0 -0
  160. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  161. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_sync_check.py +0 -0
  162. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/hooks/test_template_guard.py +0 -0
  163. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/__init__.py +0 -0
  164. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/_skill_helpers.py +0 -0
  165. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
  166. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_init_session_no_task_type.py +0 -0
  167. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_planner_lightweight.py +0 -0
  168. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_recall_skill.py +0 -0
  169. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  170. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_session_guard.py +0 -0
  171. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_setup_templates.py +0 -0
  172. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  173. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_start_skill_new_flow.py +0 -0
  174. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  175. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_adapters.py +0 -0
  176. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_check_deletions.py +0 -0
  177. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_cli_ask.py +0 -0
  178. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_cli_doctor.py +0 -0
  179. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_cli_entry.py +0 -0
  180. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_cli_init.py +0 -0
  181. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_cli_list.py +0 -0
  182. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_cli_plan.py +0 -0
  183. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_cli_recall.py +0 -0
  184. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_cli_update_breaking_changes.py +0 -0
  185. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_cli_update_deletions.py +0 -0
  186. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_docstring_consistency.py +0 -0
  187. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_embedding.py +0 -0
  188. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_excludes.py +0 -0
  189. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_extract_breaking_changes.py +0 -0
  190. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_gitutil.py +0 -0
  191. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_mcp_server_elicit.py +0 -0
  192. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_paths.py +0 -0
  193. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_plan_validator.py +0 -0
  194. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_pre_compact.py +0 -0
  195. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_pre_tool_hook.py +0 -0
  196. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_precompact_additional.py +0 -0
  197. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_precompact_toctou_fixes.py +0 -0
  198. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_pricing.py +0 -0
  199. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_recall_chunker.py +0 -0
  200. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_recall_index.py +0 -0
  201. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_references_migration.py +0 -0
  202. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_session_utils_additional.py +0 -0
  203. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_skill_no_builtin_conflict.py +0 -0
  204. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_statusline.py +0 -0
  205. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_stop_additional.py +0 -0
  206. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_stop_hook.py +0 -0
  207. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_stop_precompact_fixes.py +0 -0
  208. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_sync_template_stop.py +0 -0
  209. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_template_pre_tool_hook.py +0 -0
  210. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.0}/tests/test_usage_ingester.py +0 -0
  211. {claude_code_conductor-2.40.0 → claude_code_conductor-2.41.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
@@ -11,8 +11,9 @@ MVP スコープ(ユーザー承認済み):
11
11
 
12
12
  学習データ:
13
13
  - 結果は ``.claude/state/tier_selection.json`` に直近 1 件のみ書き込む
14
- - dev-workflow フェーズ E の承認/否認時に ``record_tier_outcome.py`` が
15
- この json を読んで ``tier_bandit`` テーブルを更新する
14
+ - dev-workflow の各フェーズ承認ゲート(並列タスク単位を含む)で
15
+ ``record_agent_outcome.py`` がこの json を読んで ``agent_tier_bandit``
16
+ テーブルを更新する
16
17
 
17
18
  入力 / 出力:
18
19
  - stdin: UserPromptSubmit payload(``prompt`` フィールドを参照)
@@ -70,7 +71,7 @@ COMPLEX_KEYWORDS = frozenset({
70
71
  "リファクタ", "再設計", "移行", "セキュリティ", "並行",
71
72
  })
72
73
 
73
- # 結果の永続化先(dev-workflow フェーズ E の record_tier_outcome.py が読む)
74
+ # 結果の永続化先(dev-workflow の各フェーズ承認ゲートで record_agent_outcome.py が読む)
74
75
  _HOOKS_DIR = os.path.dirname(os.path.abspath(__file__))
75
76
  _CLAUDE_DIR = os.path.dirname(_HOOKS_DIR)
76
77
  TIER_SELECTION_PATH = os.path.join(_CLAUDE_DIR, "state", "tier_selection.json")
@@ -244,7 +245,7 @@ def _read_prompt_history() -> list[dict]:
244
245
  """prompt-history.jsonl から末尾 N 行を読み込む。
245
246
 
246
247
  各行は ``{"ts", "prompt_hash", "prompt_prefix", "complexity", "tier", "outcome"}``
247
- の形式(record_tier_outcome.py が書き込む)。
248
+ の形式(record_agent_outcome.py が書き込む)。
248
249
  壊れた行はスキップ。ファイル不在時は空リスト。
249
250
  """
250
251
  if not os.path.isfile(PROMPT_HISTORY_PATH):
@@ -440,7 +441,7 @@ def _db_failure_rate(complexity: str, tier: str) -> tuple:
440
441
  c3_db = _load_c3_db_module()
441
442
  if c3_db is None:
442
443
  return None, 0
443
- return c3_db.read_tier_failure_rate(complexity, tier)
444
+ return c3_db.read_agent_failure_rate("developer", complexity, tier)
444
445
 
445
446
 
446
447
  def maybe_escalate(
@@ -500,7 +501,7 @@ def write_tier_selection(
500
501
  ) -> None:
501
502
  """直近の選択結果を ``tier_selection.json`` に書く。
502
503
 
503
- record_tier_outcome.py がこの json を読んで α/β を更新する。
504
+ record_agent_outcome.py がこの json を読んで agent_tier_bandit の α/β を更新する。
504
505
  既存ファイルは上書きされる(最新 1 件のみ保持)。
505
506
 
506
507
  ``suggested_model`` を併せて書く。tier 名と model の短縮名は同一とする。
@@ -597,9 +598,10 @@ def build_additional_context(
597
598
  suffix += " [cost-aware: 成功率拮抗のため低コスト Tier を選択]"
598
599
 
599
600
  return (
600
- f"[tier-routing 推奨] 複雑度: {complexity} / 推奨 Tier: {tier}({confidence})。"
601
- f" Claude の Agent ツール経由ではエージェント定義の frontmatter 指定が"
602
- f" 優先されるため、コスト最適化したい場合は手動切替してください。{suffix}"
601
+ f"[tier-routing 推奨] 複雑度: {complexity} / 推奨 Tier: {tier}({confidence}・developer 基準)。"
602
+ f" エージェント定義 frontmattermodel がデフォルトですが、Agent 呼び出し時に"
603
+ f" model: を明示指定すれば上書きできます(fork を除く)。"
604
+ f" コスト最適化したい場合は手動指定してください。{suffix}"
603
605
  )
604
606
 
605
607
 
@@ -756,7 +758,7 @@ def main() -> int:
756
758
  # DB ヘルパーが無い環境でも uniform 選択で推奨を返す
757
759
  params = {t: (1.0, 1.0, 0) for t in TIERS}
758
760
  else:
759
- params = c3_db.read_tier_params(complexity)
761
+ params = c3_db.read_agent_tier_params("developer", complexity)
760
762
 
761
763
  # v2.24.0: cost_map をハイブリッド解決(実測 rate USD/MTok を主に、欠損 tier は静的単価で補完)。
762
764
  # 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,26 @@ 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
+ ---
39
+
27
40
  ## フェーズ A: ヒアリング
28
41
 
29
42
  `.claude/agents/interviewer.md` を Read してペルソナを採用する。
30
43
 
31
44
  今日のセッションファイルに以下を追記する(未登録の場合のみ):
32
45
  - `- [ ] ヒアリング` / `- [ ] 設計` / `- [ ] 計画`
46
+ - `tier-routing複雑度: {ワークフロー開始時に UserPromptSubmit hook が表示した [tier-routing 推奨] の複雑度}`(1 度だけ追記。既にあれば追記しない。以降の全 tier-routing 記録ブロックの `--complexity` はこの行の値を参照する)
33
47
 
34
48
  ### A-1〜A-3: 動的ヒアリング(ルーブリック型)
35
49
 
@@ -66,8 +80,24 @@ user-invocable: false
66
80
 
67
81
  承認後 → セッションファイルの `- [ ] ヒアリング` を `- [x] ヒアリング` に Edit し、`現在地:` を `現在地: フェーズB 設計中` に Edit して**フェーズ B** へ。
68
82
 
83
+ **tier-routing 結果記録**:
84
+ ```bash
85
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
86
+ --role interviewer --outcome success --gate A-4 \
87
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
88
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
89
+ ```
90
+ (interviewer を Agent ツールでサブエージェント起動した場合は `--execution subagent` を渡す。その場合 `--tier` は不要)
91
+
69
92
  **知識蓄積:**
70
- - 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
93
+ - 「否認・修正を依頼する」「否認・自分でファイルを編集する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
94
+ - **tier-routing 結果記録(否認時)**:
95
+ ```bash
96
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
97
+ --role interviewer --outcome failure --gate A-4 \
98
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
99
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
100
+ ```
71
101
  - 承認かつ非自明なアプローチが有効だった場合: `## うまくいったアプローチ` に追記し `patterns` にも追加する
72
102
 
73
103
  ---
@@ -116,8 +146,24 @@ user-invocable: false
116
146
 
117
147
  承認後 → セッションファイルの `- [ ] 設計` を `- [x] 設計` に Edit し、`現在地:` を `現在地: フェーズC 計画中` に Edit して**フェーズ C** へ。
118
148
 
149
+ **tier-routing 結果記録**:
150
+ ```bash
151
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
152
+ --role architect --outcome success --gate B-3 \
153
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
154
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
155
+ ```
156
+ (architect を Agent ツールでサブエージェント起動した場合は `--execution subagent` を渡す。その場合 `--tier` は不要)
157
+
119
158
  **知識蓄積:**
120
- - 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
159
+ - 「否認・修正を依頼する」「否認・自分でファイルを編集する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
160
+ - **tier-routing 結果記録(否認時)**:
161
+ ```bash
162
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
163
+ --role architect --outcome failure --gate B-3 \
164
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
165
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
166
+ ```
121
167
  - 承認かつ非自明なアプローチが有効だった場合: `## うまくいったアプローチ` に追記し `patterns` にも追加する
122
168
 
123
169
  ---
@@ -181,8 +227,24 @@ plan-report の全タスクを走査し、以下の形式でテキスト出力
181
227
 
182
228
  承認後 → セッションファイルの `- [ ] 計画` を `- [x] 計画` に Edit し、`現在地:` を `現在地: フェーズD 実装中` に Edit して**C-3(計画監査ゲート)** へ。
183
229
 
230
+ **tier-routing 結果記録**:
231
+ ```bash
232
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
233
+ --role planner --outcome success --gate C-2 \
234
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
235
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
236
+ ```
237
+ (planner を Agent ツールでサブエージェント起動した場合は `--execution subagent` を渡す。その場合 `--tier` は不要)
238
+
184
239
  **知識蓄積:**
185
- - 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
240
+ - 「否認・修正を依頼する」「否認・自分でファイルを編集する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
241
+ - **tier-routing 結果記録(否認時)**:
242
+ ```bash
243
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
244
+ --role planner --outcome failure --gate C-2 \
245
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
246
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
247
+ ```
186
248
  - 承認かつ非自明なアプローチが有効だった場合: `## うまくいったアプローチ` に追記し `patterns` にも追加する
187
249
 
188
250
  ---
@@ -289,6 +351,16 @@ design-review-report を Read して findings の有無を確認する。design-
289
351
  | B設計 が最上流 | フェーズ B | architect(該当設計のみ修正) | B → C → C-3 |
290
352
  | C計画 のみ | フェーズ C | planner(該当タスクのみ修正) | C → C-3 |
291
353
 
354
+ **tier-routing 結果記録**: 上表により層別ルーティングが発動した場合(`[対応予定]` が 1 件以上ある場合)のみ、戻り先の最上流 role へ failure を 1 件記録する(`[許容]` のみで `[対応予定]` が 0 件・findings なしの場合は記録しない):
355
+ ```bash
356
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
357
+ --role {interviewer|architect|planner(戻り先 role)} --outcome failure --gate C-3 \
358
+ --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
359
+ --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
360
+ --note "{層別ルーティングの起因概要(コード断片の逐語引用禁止)}"
361
+ ```
362
+ (戻り先 role を Agent ツールでサブエージェント起動した場合は `--execution subagent` を渡す。その場合 `--tier` は不要)
363
+
292
364
  上流フェーズ修正後は下流へ自然に連鎖する(例: B 修正 → C 再計画 → C-2 再承認 → C-3)。各フェーズでも該当 `[対応予定]` の finding のみを反映する。
293
365
 
294
366
  連鎖が C-2 を経て C-3 に戻ったら → ステップ 5(再監査の選択)へ。
@@ -433,8 +505,23 @@ AskUserQuestion で確認する:
433
505
 
434
506
  承認後 → セッションファイルの `- [ ] developer: Green フェーズ` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズD 実装中 / 次: Refactor` に Edit する(**bug-fix モードではこの Edit をスキップする**。D-2 で `- [ ] developer: 修正実装` を既に `[x]` 化済みのため、Green フェーズ行自体がセッションファイルに存在しない)。
435
507
 
508
+ **tier-routing 結果記録**:
509
+ ```bash
510
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
511
+ --role developer --outcome success --gate D-2.5 \
512
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
513
+ --task {plan タスクID}
514
+ ```
515
+
436
516
  **知識蓄積:**
437
- - 「否認・再実装を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
517
+ - 「否認・再実装を依頼する」「否認・自分でコードを修正する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
518
+ - **tier-routing 結果記録(否認時)**:
519
+ ```bash
520
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
521
+ --role developer --outcome failure --gate D-2.5 \
522
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
523
+ --task {plan タスクID}
524
+ ```
438
525
 
439
526
  ### D-3: tester(確認)
440
527
 
@@ -456,6 +543,14 @@ AskUserQuestion で確認する:
456
543
 
457
544
  不合格の場合: D-2(developer)に戻る。合格するまで繰り返す。
458
545
 
546
+ **tier-routing 結果記録(不合格時のみ・D-2.5 と重複回避のため全合格時は記録しない)**:
547
+ ```bash
548
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
549
+ --role developer --outcome failure --gate D-3 \
550
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
551
+ --task {plan タスクID}
552
+ ```
553
+
459
554
  ### D-4: developer(Refactor フェーズ)
460
555
 
461
556
  Agent ツールで `developer` エージェントを起動する。→ テストを壊さずにコードを整理する。
@@ -482,8 +577,21 @@ AskUserQuestion で確認する:
482
577
 
483
578
  承認後 → セッションファイルの `- [ ] tester: 最終確認` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズE レビュー中` に Edit して**フェーズ E** へ。
484
579
 
580
+ **tier-routing 結果記録**:
581
+ ```bash
582
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
583
+ --role tester --outcome success --gate D-5 \
584
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
585
+ ```
586
+
485
587
  **知識蓄積:**
486
- - 「否認・修正を依頼する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
588
+ - 「否認・修正を依頼する」「否認・自分でコードを修正する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
589
+ - **tier-routing 結果記録(否認時・欠陥の所在で判定)**: テストコード欠陥は `tester` failure、プロダクトコード欠陥は `developer` failure、両方または判別不能な場合は `developer` のみ記録する:
590
+ ```bash
591
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
592
+ --role {tester|developer(欠陥の所在で判定)} --outcome failure --gate D-5 \
593
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
594
+ ```
487
595
 
488
596
  ---
489
597
 
@@ -525,6 +633,13 @@ AskUserQuestion で確認する:
525
633
 
526
634
  承認後 → セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズE レビュー中 / 次: security-review` に Edit して E-2 へ。
527
635
 
636
+ **tier-routing 結果記録**:
637
+ ```bash
638
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
639
+ --role developer --outcome success --gate E-1 \
640
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
641
+ ```
642
+
528
643
  **指摘がある場合:**
529
644
  指摘一覧をテキストで提示してから AskUserQuestion で方針を確認する:
530
645
  ```json
@@ -544,6 +659,16 @@ AskUserQuestion で確認する:
544
659
  **「全て対応する」の場合:**
545
660
  全指摘に `> **[対応予定]**` をマークし、セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
546
661
 
662
+ **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer は `--execution subagent`、architect/planner は `--execution persona`。architect/planner の場合は `--tier` も明記する):
663
+ ```bash
664
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
665
+ --role {developer|architect|planner(帰属判定)} --outcome failure --gate E-1 \
666
+ --execution {developer=subagent / architect・planner=persona} \
667
+ --complexity {セッションファイルの tier-routing複雑度: 行の値} \
668
+ --tier {developer は省略(frontmatter から自己解決) / architect・planner は親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
669
+ --note "{帰属理由を1行で(コード断片の逐語引用禁止)}"
670
+ ```
671
+
547
672
  **「対応する指摘を選ぶ」の場合:**
548
673
  続けて AskUserQuestion で確認する:
549
674
  ```json
@@ -566,6 +691,15 @@ AskUserQuestion で確認する:
566
691
  ```
567
692
  4. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
568
693
  5. セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
694
+ 6. **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer は `--execution subagent`、architect/planner は `--execution persona`。architect/planner の場合は `--tier` も明記する):
695
+ ```bash
696
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
697
+ --role {developer|architect|planner(帰属判定)} --outcome failure --gate E-1 \
698
+ --execution {developer=subagent / architect・planner=persona} \
699
+ --complexity {セッションファイルの tier-routing複雑度: 行の値} \
700
+ --tier {developer は省略(frontmatter から自己解決) / architect・planner は親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
701
+ --note "{帰属理由を1行で(コード断片の逐語引用禁止)}"
702
+ ```
569
703
 
570
704
  **「全て許容して進む」の場合:**
571
705
  AskUserQuestion で許容理由を確認する:
@@ -580,10 +714,17 @@ AskUserQuestion で許容理由を確認する:
580
714
  2. **review-hint 判断記録**: 全 `[CR-XX-NNN]` 指摘について `record_review_decision.py --decision accepted` で記録する
581
715
  3. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
582
716
  4. セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズE レビュー中 / 次: security-review` に Edit して E-2 へ。
717
+ 5. **tier-routing 結果記録**:
718
+ ```bash
719
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
720
+ --role developer --outcome success --gate E-1 \
721
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
722
+ ```
583
723
 
584
724
  **「否認・再レビューを依頼する」の場合:**
585
725
  追加の AskUserQuestion でフィードバックを確認し再実行する。
586
726
  セッションファイルの `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する。
727
+ **tier-routing 結果記録**: なし(否認・再レビュー依頼は記録対象外)。
587
728
 
588
729
  ---
589
730
 
@@ -620,9 +761,13 @@ AskUserQuestion で確認する:
620
761
  ```
621
762
 
622
763
  承認後 → セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: 完了` に Edit する。続けて **「引き継ぎバックログの照合」**(後述の共通ステップ)を実行してからコミットを提案する。
623
- **tier-routing 結果記録**: フェーズ E の最終承認時のみ Bash で記録する(多重カウント防止のため E-1 では記録しない):
764
+
765
+ **tier-routing 結果記録**:
624
766
  ```bash
625
- python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome success
767
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
768
+ --role developer --outcome success --gate E-2 \
769
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
770
+ --final
626
771
  ```
627
772
 
628
773
  **指摘がある場合:**
@@ -644,6 +789,16 @@ python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome succ
644
789
  **「全て対応する」の場合:**
645
790
  全指摘に `> **[対応予定]**` をマークし、セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
646
791
 
792
+ **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer は `--execution subagent`、architect/planner は `--execution persona`。architect/planner の場合は `--tier` も明記する):
793
+ ```bash
794
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
795
+ --role {developer|architect|planner(帰属判定)} --outcome failure --gate E-2 \
796
+ --execution {developer=subagent / architect・planner=persona} \
797
+ --complexity {セッションファイルの tier-routing複雑度: 行の値} \
798
+ --tier {developer は省略(frontmatter から自己解決) / architect・planner は親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
799
+ --note "{帰属理由を1行で(コード断片の逐語引用禁止)}"
800
+ ```
801
+
647
802
  **「対応する指摘を選ぶ」の場合:**
648
803
  続けて AskUserQuestion で確認する:
649
804
  ```json
@@ -666,6 +821,15 @@ python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome succ
666
821
  ```
667
822
  4. セッションファイルの `## うまくいったアプローチ` に `[許容例外] {指摘内容} → {許容理由}` の形式で追記し `patterns` に記録する
668
823
  5. セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
824
+ 6. **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer は `--execution subagent`、architect/planner は `--execution persona`。architect/planner の場合は `--tier` も明記する):
825
+ ```bash
826
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
827
+ --role {developer|architect|planner(帰属判定)} --outcome failure --gate E-2 \
828
+ --execution {developer=subagent / architect・planner=persona} \
829
+ --complexity {セッションファイルの tier-routing複雑度: 行の値} \
830
+ --tier {developer は省略(frontmatter から自己解決) / architect・planner は親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
831
+ --note "{帰属理由を1行で(コード断片の逐語引用禁止)}"
832
+ ```
669
833
 
670
834
  **「全て許容して完了」の場合:**
671
835
  AskUserQuestion で許容理由を確認する:
@@ -682,22 +846,16 @@ AskUserQuestion で許容理由を確認する:
682
846
  4. セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: 完了` に Edit する。続けて **「引き継ぎバックログの照合」**(後述の共通ステップ)を実行してからコミットを提案する。
683
847
  5. **tier-routing 結果記録**: 全許容で完了するのも「成功」としてカウント:
684
848
  ```bash
685
- python .claude/skills/dev-workflow/scripts/record_tier_outcome.py --outcome success
849
+ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
850
+ --role developer --outcome success --gate E-2 \
851
+ --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
852
+ --final
686
853
  ```
687
854
 
688
855
  **「否認・再診断を依頼する」の場合:**
689
856
  追加の AskUserQuestion でフィードバックを確認し再実行する。
690
857
  セッションファイルの `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `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
- ```
858
+ **tier-routing 結果記録**: なし(否認・再診断依頼は記録対象外)。
701
859
 
702
860
  ---
703
861