claude-code-conductor 2.63.0__tar.gz → 2.64.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.
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/architect.md +3 -1
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/developer.md +0 -1
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/doc-writer.md +0 -1
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/planner.md +2 -2
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/security-reviewer.md +0 -1
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/systematic-debugger.md +1 -3
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/wt_developer.md +1 -2
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/wt_systematic-debugger.md +2 -4
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/wt_tester.md +1 -1
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/SKILL.md +7 -3
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +28 -1
- claude_code_conductor-2.64.0/.claude/skills/dev-workflow/references/reachability-map.md +38 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/parallel-agents/SKILL.md +2 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/CHANGELOG.md +39 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/PKG-INFO +1 -1
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/__init__.py +1 -1
- claude_code_conductor-2.64.0/tests/skills/test_reachability_map.py +157 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/.gitignore +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/CLAUDE.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/code-reviewer.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/design-critic.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/interviewer.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/project-setup.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/tester.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/breaking-changes.txt +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/deletions.txt +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/docs/autonomous-mode-onboarding.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/docs/config-policy.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/docs/nul-boundary.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/docs/parallel-agents-setup.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/docs/platform-adapters.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/docs/settings.json.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/_hook_utils.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/check_agent_invocation.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/consolidate_memory.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/patterns_guard.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/permission_handler.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/permission_handler_toast.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/planner_check.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/post_tool.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/pre_compact.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/pre_tool.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/recall_autorebuild.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/recall_inject.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/report_contract_check.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/restore_session.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/select_tier.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/session_mode_watch.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/session_start.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/session_stop.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/session_utils.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/statusline.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/stop.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/tier_autoapply.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/tier_gap_check.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/worktree_guard.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/memory/.gitkeep +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/permission_rules.json +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/rules/promoted/index.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/settings.json +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/autonomous-mode/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/autonomous-mode/scripts/mode_line.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/brainstorm/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/codex-review/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/scripts/detect_execution_verification.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/scripts/record_agent_outcome.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/develop/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/doc/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/extract-lib/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/init-session/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/init-session/scripts/session_guard.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/mcp-config/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/pattern-status/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/recall/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/review-phase/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/setup/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/setup/reference.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/start/SKILL.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/start/scripts/archive_reports.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/state/.gitkeep +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.gitignore +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/ARCHITECTURE.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/LICENSE +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/LICENSES/fastembed-LICENSE +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/LICENSES/fastembed-NOTICE +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/LICENSES/numpy-LICENSE +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/LICENSES/onnxruntime-LICENSE +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/README.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/hatch_build.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/pyproject.toml +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/__main__.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/_db_params.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/_excludes.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/_terminal.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/adapters.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_ask.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_doctor.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_init.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_list.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_metrics.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_plan.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_recall.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_run.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_tier.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/cli_update.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/db.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/embedding.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/gitutil.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/mcp_server.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrate.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/001_initial.sql +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/003_tier_cost.sql +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/004_agent_outcomes.sql +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/005_drop_agent_tier_bandit.sql +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/006_review_decisions_severity.sql +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/007_review_decisions_resolution.sql +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/008_drop_agent_runs.sql +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/README.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/migrations/__init__.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/paths.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/plan_validator.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/platforms.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/pricing.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/question.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/recall_chunker.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/recall_index.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/refgraph.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/src/c3/usage_ingester.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/__init__.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/_pre_compact_helpers.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/conftest.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/fixtures/usage/README.md +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/fixtures/usage/mainline.jsonl +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/__init__.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_check_agent_invocation.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_consolidate_memory.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_detect_execution_verification.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_hook_utils.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_permission_handler.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_permission_handler_toast.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_planner_check.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_planner_check_dev.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_post_tool.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_pre_tool.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_recall_autorebuild.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_recall_inject.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_record_agent_outcome.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_record_review_decision.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_restore_session.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_review_hint_inject.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_select_tier.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_select_tier_escalation.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_session_start.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_session_stop.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_session_utils.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_settings_tier_autoapply_registration.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_similarity_boost.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_statusline.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_statusline_template_sync.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_sync_check.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_template_guard.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_tier_autoapply.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_tier_gap_check.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/hooks/test_tier_security_fixes.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/__init__.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/_skill_helpers.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_init_session_no_task_type.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_marker_compliance.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_parallel_agents_skill_tier.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_planner_lightweight.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_recall_skill.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_session_guard.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_setup_templates.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_start_skill_new_flow.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_adapters.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_archive_reports.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_audit_review_decisions.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_check_deletions.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_ci_workflows.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_claude_gitignore.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_ask.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_doctor.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_doctor_launcher.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_entry.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_init.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_list.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_metrics.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_plan.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_recall.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_run.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_tier.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_update_breaking_changes.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_cli_update_deletions.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_db.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_db_connect_lint.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_docstring_consistency.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_embedding.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_excludes.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_extract_breaking_changes.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_gitutil.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_hooks_stdin_idiom.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_init_only_patterns.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_mcp_server_elicit.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_migrate.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_mode_line.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_no_bare_python_launcher.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_no_passonly_tests.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_nul_boundary_lint.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_paths.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_patterns_guard.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_plan_validator.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_pre_compact.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_pre_tool_hook.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_precompact_additional.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_precompact_toctou_fixes.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_pricing.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_recall_chunker.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_recall_index.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_references_migration.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_refgraph.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_refgraph_query.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_refgraph_structural.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_report_contract_check.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_scripts_src_bootstrap.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_scripts_stdout_encoding.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_session_mode_watch.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_session_utils_additional.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_settings_hooks_registration.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_skill_no_builtin_conflict.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_start_skill_archive_contract.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_statusline.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_stop_additional.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_stop_agent_memory_warn.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_stop_hook.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_stop_precompact_fixes.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_sync_template_stop.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_template_pre_tool_hook.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_usage_ingester.py +0 -0
- {claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/tests/test_worktree_guard.py +0 -0
|
@@ -35,12 +35,14 @@ requirements-report を受け取り、システム設計・技術選定・依存
|
|
|
35
35
|
|
|
36
36
|
**Before:**
|
|
37
37
|
- requirements-report を Read する
|
|
38
|
-
-
|
|
38
|
+
- 採用する対策・パターンと同種の対策が過去に破られていないか、reviewer 系の agent-memory を確認する(agent-memory は gitignored でありディレクトリ横断の検索は空振りする。対象ファイルを列挙してから個別に読む)
|
|
39
39
|
|
|
40
40
|
**During:**
|
|
41
41
|
- 技術選定の根拠とトレードオフを必ず記録する
|
|
42
42
|
- 複数案がある場合は比較表を作り採用理由を明示する
|
|
43
43
|
- 不明点はユーザーに確認する
|
|
44
|
+
- 対策・不変則は判定手段でなく満たすべき性質で書く(手段の固定は射程を縮める)
|
|
45
|
+
- 対策・規約の配置先を決めるときは `.claude/skills/dev-workflow/references/reachability-map.md` で読み手に届くかを確認する
|
|
44
46
|
|
|
45
47
|
**After:**
|
|
46
48
|
- Skill ツールで `report-timestamp` を呼び出してタイムスタンプを取得し、Write ツールで `.claude/reports/architecture-report-{timestamp}.md` に出力する
|
|
@@ -41,7 +41,7 @@ requirements-report・architecture-report・各種レビューレポートを統
|
|
|
41
41
|
**During:**
|
|
42
42
|
- レビュー指摘がある場合は優先度を付けて反映する
|
|
43
43
|
- タスクは「1タスク = 1コミット」の粒度を意識して分解する
|
|
44
|
-
- `.claude/skills/dev-workflow/references/plan-design-guidelines.md` のルール 1〜
|
|
44
|
+
- `.claude/skills/dev-workflow/references/plan-design-guidelines.md` のルール 1〜20 と R2〜R6 を遵守する(適用射程は同ファイル冒頭の分類表に従う。`"sequential"` プランでは並列前提ルールを適用しない)
|
|
45
45
|
|
|
46
46
|
**After:**
|
|
47
47
|
- Skill ツールで `report-timestamp` を呼び出してタイムスタンプを取得し、Write ツールで `.claude/reports/plan-report-{timestamp}.md` に出力する
|
|
@@ -58,7 +58,7 @@ requirements-report・architecture-report・各種レビューレポートを統
|
|
|
58
58
|
制限:
|
|
59
59
|
- ソースファイルの編集・書き込みは行わない
|
|
60
60
|
- plan-report の YAML フロントマター内で `tasks[].id` の重複・未定義の `depends_on` 参照・エージェント名の typo を出力しない(`c3 plan validate` で検証可能)
|
|
61
|
-
- `.claude/skills/dev-workflow/references/plan-design-guidelines.md` のルール 1〜
|
|
61
|
+
- `.claude/skills/dev-workflow/references/plan-design-guidelines.md` のルール 1〜20 と自己チェックリストに違反した plan-report を出力しない(適用射程は分類表に従う)
|
|
62
62
|
- 自動検査対象に違反する plan-report を出力しない:
|
|
63
63
|
- R2/R4/R6(配布対象): `.claude/hooks/planner_check.py` が PostToolUse で WARN を出す
|
|
64
64
|
- R3(C3 固有): `.dev/hooks/_planner_check.py` が PostToolUse で exit 2 ブロック
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/systematic-debugger.md
RENAMED
|
@@ -63,13 +63,11 @@ developer が詰まった問題の根本原因を調査し、debug-analysis-repo
|
|
|
63
63
|
- エラーに関連する変更がないか調べる
|
|
64
64
|
|
|
65
65
|
**2-4: 関連コードの読み込み**
|
|
66
|
-
- Glob / Grep / Read でエラー箇所周辺のコードを調査する
|
|
67
66
|
- 依存関係・呼び出し元を辿る
|
|
68
67
|
|
|
69
68
|
### Step 3: Phase 2 - パターン分析
|
|
70
69
|
|
|
71
70
|
**3-1: 動いている類似コードを探す**
|
|
72
|
-
- Grep / Glob で同様のパターンを実装している箇所を探す
|
|
73
71
|
- 動いているコードと壊れているコードの両方を Read する
|
|
74
72
|
|
|
75
73
|
**3-2: 差分の特定**
|
|
@@ -107,7 +105,7 @@ Skill ツールで `report-timestamp` を呼び出してタイムスタンプを
|
|
|
107
105
|
```
|
|
108
106
|
|
|
109
107
|
## Tools & Constraints
|
|
110
|
-
-
|
|
108
|
+
- コードを修正・編集しない(`memory:` 付き agent には Edit が実行時に自動付与されるため、frontmatter ではなく本規約が唯一の担保)
|
|
111
109
|
- 推測で原因を断言しない。再現コマンドの出力など証拠に基づいて記述する
|
|
112
110
|
- 推奨仮説は1つに絞る(複数の仮説を羅列しない)
|
|
113
111
|
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/wt_developer.md
RENAMED
|
@@ -17,7 +17,7 @@ tools:
|
|
|
17
17
|
|
|
18
18
|
# Developer (worktree-parallel)
|
|
19
19
|
|
|
20
|
-
>
|
|
20
|
+
> 本 agent は `parallel-agents` skill が `isolation: "worktree"` 付きで起動する **並列実行専用** バリアント。`permissionMode: bypassPermissions` により worktree 内で permission プロンプトをスキップする。worktree 外への書き込みは `.claude/hooks/worktree_guard.py` (PreToolUse, `PO_WORKTREE_GUARD=1`) でガードされる。
|
|
21
21
|
>
|
|
22
22
|
> 単発起動(`/develop` フェーズ D-1〜D-5 等、`isolation` なし)では本 agent を**使わない**。元の `developer` agent を使うこと。
|
|
23
23
|
|
|
@@ -48,7 +48,6 @@ plan-report に基づき実装・デバッグ・リファクタリングを行
|
|
|
48
48
|
|
|
49
49
|
**Before:**
|
|
50
50
|
- plan-report を Read して実装対象タスクを確認する
|
|
51
|
-
- 既存コードを Glob / Grep で把握する
|
|
52
51
|
|
|
53
52
|
**During:**
|
|
54
53
|
- 1タスク = 1コミットの粒度を保つ
|
|
@@ -15,7 +15,7 @@ tools:
|
|
|
15
15
|
|
|
16
16
|
# Systematic Debugger (worktree-parallel)
|
|
17
17
|
|
|
18
|
-
>
|
|
18
|
+
> 本 agent は `parallel-agents` skill が `isolation: "worktree"` 付きで起動する **並列実行専用** バリアント。`permissionMode: bypassPermissions` により worktree 内で permission プロンプトをスキップする。worktree 外への書き込みは `.claude/hooks/worktree_guard.py` (PreToolUse, `PO_WORKTREE_GUARD=1`) でガードされる。
|
|
19
19
|
>
|
|
20
20
|
> 単発起動(worktree なしで親 Claude から直接 Agent ツールで起動するケース等)では本 agent を**使わない**。元の `systematic-debugger` agent を使うこと。
|
|
21
21
|
|
|
@@ -68,13 +68,11 @@ developer が詰まった問題の根本原因を調査し、debug-analysis-repo
|
|
|
68
68
|
- エラーに関連する変更がないか調べる
|
|
69
69
|
|
|
70
70
|
**2-4: 関連コードの読み込み**
|
|
71
|
-
- Glob / Grep / Read でエラー箇所周辺のコードを調査する
|
|
72
71
|
- 依存関係・呼び出し元を辿る
|
|
73
72
|
|
|
74
73
|
### Step 3: Phase 2 - パターン分析
|
|
75
74
|
|
|
76
75
|
**3-1: 動いている類似コードを探す**
|
|
77
|
-
- Grep / Glob で同様のパターンを実装している箇所を探す
|
|
78
76
|
- 動いているコードと壊れているコードの両方を Read する
|
|
79
77
|
|
|
80
78
|
**3-2: 差分の特定**
|
|
@@ -112,7 +110,7 @@ developer が詰まった問題の根本原因を調査し、debug-analysis-repo
|
|
|
112
110
|
```
|
|
113
111
|
|
|
114
112
|
## Tools & Constraints
|
|
115
|
-
-
|
|
113
|
+
- コードを修正・編集しない(`memory:` 付き agent には Edit が実行時に自動付与されるため、frontmatter ではなく本規約が唯一の担保)
|
|
116
114
|
- 推測で原因を断言しない。再現コマンドの出力など証拠に基づいて記述する
|
|
117
115
|
- 推奨仮説は1つに絞る(複数の仮説を羅列しない)
|
|
118
116
|
|
|
@@ -15,7 +15,7 @@ tools:
|
|
|
15
15
|
|
|
16
16
|
# Tester (worktree-parallel)
|
|
17
17
|
|
|
18
|
-
>
|
|
18
|
+
> 本 agent は `parallel-agents` skill が `isolation: "worktree"` 付きで起動する **並列実行専用** バリアント。`permissionMode: bypassPermissions` により worktree 内で permission プロンプトをスキップする。worktree 外への書き込みは `.claude/hooks/worktree_guard.py` (PreToolUse, `PO_WORKTREE_GUARD=1`) でガードされる。
|
|
19
19
|
>
|
|
20
20
|
> 単発起動(`/develop` フェーズ D-1〜D-5 等、`isolation` なし)では本 agent を**使わない**。元の `tester` agent を使うこと。
|
|
21
21
|
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/skills/dev-workflow/SKILL.md
RENAMED
|
@@ -80,7 +80,7 @@ session.tmp の `モード:` 行を確認する。**有効な自律宣言**(§
|
|
|
80
80
|
|
|
81
81
|
### A-1〜A-3: 動的ヒアリング(ルーブリック型)
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
`.claude/skills/dev-workflow/references/interview-rubric.md` を Read する。
|
|
84
84
|
その指針に従い、床 5 観点(①背景・目的 ②スコープ境界 ③制約・前提 ④非機能要件 ⑤成功条件)を
|
|
85
85
|
**動的にヒアリング**する。要点:
|
|
86
86
|
|
|
@@ -147,7 +147,7 @@ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
|
|
|
147
147
|
|
|
148
148
|
### B-1〜B-2: 動的設計確認(ルーブリック型)
|
|
149
149
|
|
|
150
|
-
|
|
150
|
+
`.claude/skills/dev-workflow/references/design-rubric.md` を Read する。
|
|
151
151
|
その指針に従い、床 4 観点(①技術スタック制約 ②要件から導く設計判断ポイント ③非機能の実現方針 ④トレードオフ分岐)を
|
|
152
152
|
**動的に確認**する。要点:
|
|
153
153
|
|
|
@@ -570,7 +570,7 @@ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
|
|
|
570
570
|
3. plan-report も当日 debug-analysis も存在しない場合はフェーズ C から始めるよう案内して終了する。
|
|
571
571
|
|
|
572
572
|
**`po_plan_version: "0.1"` の場合(parallel-agents モード):**
|
|
573
|
-
1.
|
|
573
|
+
1. `.claude/skills/parallel-agents/SKILL.md` を Read する
|
|
574
574
|
2. `.claude/skills/parallel-agents/SKILL.md` の手順に完全に従って wave 単位で実装を進める
|
|
575
575
|
3. 全 wave 完了後はフェーズ E(レビュー)へ進む(wave に reviewer タスクが含まれていれば E をスキップ可能と案内する)
|
|
576
576
|
|
|
@@ -973,6 +973,8 @@ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
|
|
|
973
973
|
```
|
|
974
974
|
|
|
975
975
|
**指摘がある場合:**
|
|
976
|
+
対応の置き場所(どの文書・どの層に対策を置くか)を決める際は `.claude/skills/dev-workflow/references/reachability-map.md` で読み手に届くかを確認する。
|
|
977
|
+
|
|
976
978
|
指摘一覧をテキストで提示してから AskUserQuestion で方針を確認する:
|
|
977
979
|
```json
|
|
978
980
|
{
|
|
@@ -1114,6 +1116,8 @@ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
|
|
|
1114
1116
|
```
|
|
1115
1117
|
|
|
1116
1118
|
**指摘がある場合:**
|
|
1119
|
+
対応の置き場所(どの文書・どの層に対策を置くか)を決める際は `.claude/skills/dev-workflow/references/reachability-map.md` で読み手に届くかを確認する。
|
|
1120
|
+
|
|
1117
1121
|
指摘一覧をテキストで提示してから AskUserQuestion で方針を確認する:
|
|
1118
1122
|
```json
|
|
1119
1123
|
{
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
| 分類 | ルール番号 | R 番号 | 自己チェックリスト項目 |
|
|
6
6
|
|---|---|---|---|
|
|
7
7
|
| `"0.1"`(並列実行)限定 | ルール 1・2・10・11・14/ルール 3・9(※直後の注記により sequential でも成果物宣言・レビュー配置の規律は満たすこと) | R5(isolation 指定が発生しない逐次では非該当) | チェーン長/同一ファイル衝突/R5/ルール 14 |
|
|
8
|
-
| 両モード共通 | ルール 4・5・7・8・12・13・15 | R2・R3・R4・R6(planner_check hook 群は po_plan_version の値を読まないため sequential プランでも発火する) | id 一意・depends_on 参照先実在/空配列禁止/TDD 3 タスク分解/15 分粒度/R6/writes が空のタスク/レビュータスクの depends_on/ルール 15
|
|
8
|
+
| 両モード共通 | ルール 4・5・7・8・12・13・15・16・17・18・19・20 | R2・R3・R4・R6(planner_check hook 群は po_plan_version の値を読まないため sequential プランでも発火する) | id 一意・depends_on 参照先実在/空配列禁止/TDD 3 タスク分解/15 分粒度/R6/writes が空のタスク/レビュータスクの depends_on/ルール 15 方向検算/テスト凍結の実装責任/手順過多の契約化/一時改変の後始末方法/検知力検証の双方向/gitignored 検証パス |
|
|
9
9
|
| 逐次では読み替え | ルール 6(Stuck Signal の契約自体は共通。wave 失敗時の 2-E 吸収は並列限定の運用であり、逐次は dev-workflow SKILL.md の D-2.5〈Stuck チェック〉で吸収する) | - | - |
|
|
10
10
|
|
|
11
11
|
**注記**: 両モード共通に分類されたルール(5・R2・R4・R6 等)が `writes` や reviewer タスクの存在を前提とする場合、**その前提を作るルール(9・3)も sequential プランで満たすこと**。`"0.1"` 限定の趣旨は『並列度・worktree 取り込み衝突に関する制約』に限られ、成果物宣言・レビュー配置の規律はモードを問わない。
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
planner agent が本ファイルを参照する。
|
|
14
14
|
plan-report 生成時はこれを確実に読んでから出力すること(D-012 準拠)。
|
|
15
15
|
|
|
16
|
+
規約・対策の配置先を決めるときは `reachability-map.md` で読み手に届くかを確認する。
|
|
17
|
+
|
|
16
18
|
---
|
|
17
19
|
|
|
18
20
|
## depends_on の付け方
|
|
@@ -129,6 +131,26 @@ Stage 1: dev_a, dev_b, dev_c (並列)
|
|
|
129
131
|
|
|
130
132
|
**静的検査の保証範囲**: 本ルールの静的検査(`tests/skills/test_planner_lightweight.py`)が保証するのは**この規約文書にルール 15 が存在すること**のみであり、個々の plan-report が本ルールに従っているかは検査しない。方向が合っているかの判定は planner の責任に残る。
|
|
131
133
|
|
|
134
|
+
## 凍結仕様の実装責任(ルール 16)
|
|
135
|
+
|
|
136
|
+
16. **テスト前提の実装責任** — 計画が既存テストの凍結を前提とする場合(件数リテラル・逐語アンカー・特定テストケースの存在仮定など)、その仮定を変更する修正は **当該テストファイルを `writes` に含むタスク** で行うこと。修正担当を明示することにより、前提が破られたときの責任の所在を確定させる。
|
|
137
|
+
|
|
138
|
+
## タスク prompt の設計方針(ルール 17)
|
|
139
|
+
|
|
140
|
+
17. **契約と性質で指示し、手順で指定しない** — `tasks[].prompt` には契約・不変則・測るべき性質を書く。逐語的な手順指定は避けること。実施主体が判断を失い、手順の逐語に従うだけになると別の欠陥を生じやすい。実測: C-3 監査で High 5 件中 3 件が親による逐語手順の誤りが原因だった(2026-07-23)。
|
|
141
|
+
|
|
142
|
+
## 一時改変の後始末指定(ルール 18)
|
|
143
|
+
|
|
144
|
+
18. **cleanup 手段を明示・禁止経路を宣言する** — 検証のための一時改変(テストの一時ハード・mock 削除・debug logging など)を指示する場合、**後始末の手段を逐語で指定し、 `git checkout` / `git restore` / `git reset` を明示的に禁止すること**。これらは復元不能な失敗を招く(実績: 2026-08-01 に実装 5 時間分が全損)。代わりに「元のコードへ戻す」「テストスケルトンを削除」など、失敗時に検出可能な方法を指示すること。
|
|
145
|
+
|
|
146
|
+
## 検知力検証の双方向テスト(ルール 19)
|
|
147
|
+
|
|
148
|
+
19. **do-nothing スタブの両方向赤緑反転** — 検証系タスクの contract に「検知力を実証する」を含める場合、do-nothing スタブ **2 種**(always-False / always-True)を用いて赤緑が完全に入れ替わることを示すこと。単一スタブでは正の双子が赤にならない原理的限界を越えられない。適用困難な対象では、代替手段として「両方向反転」の実現可能性を明記する。
|
|
149
|
+
|
|
150
|
+
## gitignored 成果物の検証経路(ルール 20)
|
|
151
|
+
|
|
152
|
+
20. **直接 Read・状態外の指示分離** — gitignored ファイル(`.claude/reports/` 等)の検証は `git status --short` ではなく **直接 Read で行うこと**。git 管理下で成果物を検証する必要があれば、明示的に commit → 確認 → cleanup の流れを指示する。worktree で起動される worker(developer / tester)の prompt には gitignored 文書の Read を指示しないこと(届く経路が無い。親か plan-report 経由で指す)。reviewer 向けの prompt には「当該ファイルは gitignored である」と明記し、reviewer に直接 Read させることを指示する。
|
|
153
|
+
|
|
132
154
|
---
|
|
133
155
|
|
|
134
156
|
## 出力直前の自己チェックリスト
|
|
@@ -147,6 +169,11 @@ plan-report を Write する前に以下を必ず確認する:
|
|
|
147
169
|
- [ ] R6: タスク総数 3 件以上なら reviewer 系タスクが 1 件以上含まれているか
|
|
148
170
|
- [ ] ルール 14: writes が全て gitignored のタスク(confirm- 等)は運用層で main 直接経路に読み替えられることを認識しているか
|
|
149
171
|
- [ ] ルール 15: finding 反映時に方向検算表を含めたか(Critical/High/Medium 必須)
|
|
172
|
+
- [ ] ルール 16: テスト凍結仮定を変更する修正は当該テストファイルを writes に含む task で行うか明示されているか
|
|
173
|
+
- [ ] ルール 17: tasks[].prompt は逐語手順でなく契約・不変則・測るべき性質で書かれているか
|
|
174
|
+
- [ ] ルール 18: 一時改変指示は後始末手段を逐語で指定し、git checkout/restore/reset を明示的に禁止しているか
|
|
175
|
+
- [ ] ルール 19: 検証系 task の contract に do-nothing スタブ 2 種の赤緑反転実証が含まれているか(適用困難なら代替宣言)
|
|
176
|
+
- [ ] ルール 20: gitignored 成果物検証は直接 Read 指示で行い、worker prompt には Read を指示していないか
|
|
150
177
|
|
|
151
178
|
---
|
|
152
179
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 到達可能性マップ
|
|
2
|
+
|
|
3
|
+
規約・対策をどこに置けば読み手に届くか。対象読み手ごとに、有効な配置先を表引きで示す。
|
|
4
|
+
|
|
5
|
+
## 到達経路一覧
|
|
6
|
+
|
|
7
|
+
表の列構成: 経路(配置方法)、実パス(ファイルパスまたは「—」)、届く role(対象読み手)、条件(前提・性質)
|
|
8
|
+
|
|
9
|
+
| 経路 | 実パス | 届く role | 条件 |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| .claude/CLAUDE.md | .claude/CLAUDE.md | 全 role | 自動ロード・常駐コスト有。全員に効かせたい安全境界のみ置く |
|
|
12
|
+
| .claude/rules/ (再帰自動ロード) | — | 全 role | 再帰自動ロード。サブエージェント含む。`.claude/rules/` 配下のサブディレクトリも対象 |
|
|
13
|
+
| agents/<role>.md 本文 | — | 当該 role のみ | サブエージェント起動時に frontmatter とともに載る。persona 実行 role(interviewer/architect/planner)へは dev-workflow SKILL.md 各フェーズ冒頭の Read 指示に依存して親経由で届く |
|
|
14
|
+
| dev-workflow/SKILL.md | .claude/skills/dev-workflow/SKILL.md | 親 Claude のみ | worker(developer/tester)には届かない。フェーズ遷移・承認ゲートの定義・手順 |
|
|
15
|
+
| references/*.md (導線経由) | — | 導線を持つ role のみ | 導線が無ければ誰にも届かない。SKILL.md 各フェーズから Read 指示で参照される |
|
|
16
|
+
| plan-report タスク prompt | — | 当該タスクの worker のみ | worker へ届く唯一の動的経路。planner が転記した内容のみ有効 |
|
|
17
|
+
| 起動プロンプト(E-0 等) | — | 起動された agent のみ | E-0 の枠付けが正例。データ/指示の明確な区分 |
|
|
18
|
+
| agent-memory/<role>/ | — | 当該 role(Before に Read 指示を持つ role のみ) | gitignored: worktree に存在せず、ディレクトリ横断検索は空振りする。ファイルを列挙して個別に Read。上流(architect)には既定では届かない(architect.md の Before が能動的な確認を指示して補完する) |
|
|
19
|
+
| design-critic-rubric.md | .claude/skills/dev-workflow/references/design-critic-rubric.md | design-critic(C-3 ステップ 2) | C-3 設計監査ゲート内で Read 指示される |
|
|
20
|
+
| interview-rubric.md | .claude/skills/dev-workflow/references/interview-rubric.md | interviewer(A-1〜A-3) | フェーズ A 冒頭で Read 指示される |
|
|
21
|
+
| design-rubric.md | .claude/skills/dev-workflow/references/design-rubric.md | architect(B-1〜B-2) | フェーズ B 冒頭で Read 指示される |
|
|
22
|
+
| plan-design-guidelines.md | .claude/skills/dev-workflow/references/plan-design-guidelines.md | planner(C-2) | フェーズ C 計画作成時に参照・守るべき規約 |
|
|
23
|
+
|
|
24
|
+
## 置き場所デシジョン(3 手順)
|
|
25
|
+
|
|
26
|
+
**① 対象読み手を決める**
|
|
27
|
+
恒久規約・対策の対象読み手は誰か。例: developer のみ、全 role、特定フェーズの worker、など。
|
|
28
|
+
|
|
29
|
+
**② 表で経路を引く**
|
|
30
|
+
上記の表から対象読み手に届く経路を探す。複数経路がある場合は「コスト」と「確実性」で選ぶ。
|
|
31
|
+
- 常駐コスト(CLAUDE.md 肥大化)vs. 導線による確実性(参照側の負担)
|
|
32
|
+
- 安全境界(コミット・削除・権限)はより上流(CLAUDE.md / rules/)に置く
|
|
33
|
+
|
|
34
|
+
**③ 経路が無ければ agent 本文か plan 契約に置く**
|
|
35
|
+
表を見ても対象読み手に届く経路が無い場合(例: worker 向け恒久規約、developer のみ向けのパターン)は、以下を選ぶ:
|
|
36
|
+
- 多くの worker が参照するなら plan-report の task prompt に書く(動的経路)
|
|
37
|
+
- 特定フェーズ限定なら agent.md 本文に書く
|
|
38
|
+
- サブエージェント(design-critic など)の動作規約なら agent 本文か SKILL.md の起動フェーズに書く
|
|
@@ -140,6 +140,8 @@ plan-report 承認時点で全タスク・agent・writes・prompt が確認済
|
|
|
140
140
|
|
|
141
141
|
### 2-C: タスクを実行する(並列起動)
|
|
142
142
|
|
|
143
|
+
wave を起動する前に `git status` が空(未コミット変更なし)であることを確認する(未コミット変更は worktree に届かない。2-F-2 の取り込み後確認とは別の**起動前**チェック)
|
|
144
|
+
|
|
143
145
|
並列化可能タスクを **1 ターン内で複数 Agent ツール呼び出し** として発行する。並列度の上限は **デフォルト 5、上限 15**(PoC で検証済み)。タスク数がそれ以上なら 5 件ずつのバッチに分割する。
|
|
144
146
|
|
|
145
147
|
**重要**: 各タスクの `agent` 名は plan-report で `tester` / `developer` 等と書かれているが、**Agent ツール呼び出し時の `subagent_type` には並列専用バリアント (`wt_*`) を指定する**。マッピング表:
|
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.64.0] - 2026-08-10
|
|
4
|
+
|
|
5
|
+
### 追加
|
|
6
|
+
|
|
7
|
+
- **到達性対応表 `.claude/skills/dev-workflow/references/reachability-map.md` を新設した**(配布物)。
|
|
8
|
+
「規約・対策をどこに置けば読み手(agent / skill)に届くか」を経路×実パス×届く role×条件の
|
|
9
|
+
4 列表と「置き場所デシジョン」3 手順で表引きできる。対策を Read 経路の外に置いて実効を
|
|
10
|
+
失う欠陥(SR-AI-001 型)が 4 回再発した構造への手当て
|
|
11
|
+
- 導線 3 本: `plan-design-guidelines.md`(planner)・`dev-workflow/SKILL.md` の E-1/E-2
|
|
12
|
+
指摘対応(親 Claude)・`agents/architect.md`(architect)
|
|
13
|
+
- 静的検査 `tests/skills/test_reachability_map.py`(8 件・非配布)が表のパス実在と導線の
|
|
14
|
+
参照実在を検査する。`C3_REACHABILITY_ROOT` 環境変数はテスト専用の検知力確認 seam
|
|
15
|
+
- **`plan-design-guidelines.md` にルール 16〜20 を新設した**(配布物):
|
|
16
|
+
16 テスト凍結の前提を変える計画は担い手(writes にテストファイルを含むタスク)を明示する/
|
|
17
|
+
17 `tasks[].prompt` には逐語手順でなく契約・不変則・測るべき性質を書く/
|
|
18
|
+
18 一時改変の後始末は手段を逐語指定し `git checkout`・`restore`・`reset` を禁じる/
|
|
19
|
+
19 テストの検知力は 2 種の do-nothing スタブで赤緑反転を示す/
|
|
20
|
+
20 gitignored 成果物は直接 Read で検証し worker prompt に gitignored 文書の Read を指示しない。
|
|
21
|
+
モード別適用表(両モード共通)と出力直前の自己チェックリストにも対応行を追加
|
|
22
|
+
- **`agents/architect.md` に設計時の再発防止 2 件を追加した**:
|
|
23
|
+
「採用する対策と同種の対策が過去に破られていないか reviewer 系 agent-memory を確認する」
|
|
24
|
+
(`is_symlink()` 対策が 5 回破られた間、履歴が設計の入力になっていなかった構造への手当て)と
|
|
25
|
+
「対策・不変則は判定手段でなく満たすべき性質で書く」
|
|
26
|
+
- `parallel-agents/SKILL.md` 2-C 冒頭に wave 起動前の `git status` 空確認を追加した
|
|
27
|
+
(未コミット変更は worktree に届かない)
|
|
28
|
+
|
|
29
|
+
### 変更
|
|
30
|
+
|
|
31
|
+
- **agent 定義からツール振り付け 9 行を削除した**(`Glob / Grep で把握する` 等・8/4 台帳 A-4・
|
|
32
|
+
G12 裁定済み)。どのツールを使うかは手段であって契約ではない。契約行(design-critic の
|
|
33
|
+
最新レポート取得指定・project-setup の置換対象指定等)は残した
|
|
34
|
+
- `systematic-debugger` / `wt_systematic-debugger` の編集禁止の根拠記述を実行時の事実に
|
|
35
|
+
合わせて訂正した(`memory:` 付き agent には Edit が実行時に自動付与されるため、
|
|
36
|
+
frontmatter ではなく本規約が唯一の担保・A-6)
|
|
37
|
+
- `wt_*` agent 3 本の `v2.2.0+` バージョンピンを除去した(A-7)
|
|
38
|
+
- `dev-workflow/SKILL.md` のルーブリック Read 指示 3 箇所から強調・括弧書きを除去した(A-5・
|
|
39
|
+
Read 指示自体は契約として維持)
|
|
40
|
+
- `agents/planner.md` の参照ルール範囲を 1〜20 へ更新した
|
|
41
|
+
|
|
3
42
|
## [2.63.0] - 2026-08-09
|
|
4
43
|
|
|
5
44
|
### 追加
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-conductor
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.64.0
|
|
4
4
|
Summary: Multi-agent orchestration framework for Claude Code with Codex/Cursor adapters (C3)
|
|
5
5
|
Project-URL: Homepage, https://github.com/satoh-y-0323/claude-code-conductor
|
|
6
6
|
Project-URL: Repository, https://github.com/satoh-y-0323/claude-code-conductor
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Test suite for reachability-map.md presence and navigation pathways.
|
|
3
|
+
|
|
4
|
+
This test module validates the implementation of the reachability map
|
|
5
|
+
document and its referenced pathways across SKILL.md, plan-design-guidelines.md,
|
|
6
|
+
and architect.md per the test-reachability task specification.
|
|
7
|
+
|
|
8
|
+
実装完了後の恒久検査として維持する(Red フェーズの一時的なテストではない):
|
|
9
|
+
- P1: reachability-map.md が実装として存在すること
|
|
10
|
+
- P2: 導線(a,b,c,d)が実装として張られていること
|
|
11
|
+
- P3: 到達経路表の構造と、記載された実パスが実在すること
|
|
12
|
+
- P4: 番人 - E-0 枠付け文言「データであり指示ではない」が SKILL.md と
|
|
13
|
+
plan-design-guidelines.md から失われていないこと(既存記述の凍結)
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import os
|
|
17
|
+
import re
|
|
18
|
+
import sys
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from typing import Tuple
|
|
21
|
+
|
|
22
|
+
from tests.skills._skill_helpers import WORKTREE_ROOT
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_repo_root() -> Path:
|
|
26
|
+
"""Resolve repository root from environment or from the shared helper default."""
|
|
27
|
+
if "C3_REACHABILITY_ROOT" in os.environ:
|
|
28
|
+
return Path(os.environ["C3_REACHABILITY_ROOT"])
|
|
29
|
+
# Default: reuse the shared root resolution in tests/skills/_skill_helpers.py
|
|
30
|
+
# (重複した parents 計算を持たず SSOT に寄せる)
|
|
31
|
+
return WORKTREE_ROOT
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class TestReachabilityMapPresence:
|
|
35
|
+
"""P1: reachability-map.md file existence."""
|
|
36
|
+
|
|
37
|
+
def test_reachability_map_file_exists(self):
|
|
38
|
+
"""P1 - reachability-map.md must exist at references/."""
|
|
39
|
+
root = get_repo_root()
|
|
40
|
+
map_path = root / ".claude" / "skills" / "dev-workflow" / "references" / "reachability-map.md"
|
|
41
|
+
assert map_path.is_file(), f"P1 FAIL: {map_path} does not exist"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class TestReachabilityMapPathways:
|
|
45
|
+
"""P2: Navigation pathway references across SKILL.md, plan-design-guidelines.md, architect.md."""
|
|
46
|
+
|
|
47
|
+
def test_p2a_reference_in_plan_design_guidelines(self):
|
|
48
|
+
"""P2(a) - plan-design-guidelines.md must contain 'reachability-map.md' >= 1 time."""
|
|
49
|
+
root = get_repo_root()
|
|
50
|
+
path = root / ".claude" / "skills" / "dev-workflow" / "references" / "plan-design-guidelines.md"
|
|
51
|
+
assert path.is_file(), f"plan-design-guidelines.md not found at {path}"
|
|
52
|
+
content = path.read_text(encoding="utf-8")
|
|
53
|
+
count = content.count("reachability-map.md")
|
|
54
|
+
assert count >= 1, f"P2(a) FAIL: 'reachability-map.md' appears {count} time(s), expected >= 1"
|
|
55
|
+
|
|
56
|
+
def test_p2b_reference_in_skill_e1_and_e2(self):
|
|
57
|
+
"""P2(b) - SKILL.md E-1 and E-2 sections must each contain 'reachability-map.md' >= 1 time."""
|
|
58
|
+
root = get_repo_root()
|
|
59
|
+
path = root / ".claude" / "skills" / "dev-workflow" / "SKILL.md"
|
|
60
|
+
assert path.is_file(), f"SKILL.md not found at {path}"
|
|
61
|
+
content = path.read_text(encoding="utf-8")
|
|
62
|
+
|
|
63
|
+
# Extract E-1 section (### E-1 to next ### or ##)
|
|
64
|
+
e1_match = re.search(r"### E-1:.*?(?=(?:### |## |$))", content, re.DOTALL)
|
|
65
|
+
assert e1_match, "P2(b) FAIL: E-1 section not found"
|
|
66
|
+
e1_section = e1_match.group(0)
|
|
67
|
+
e1_count = e1_section.count("reachability-map.md")
|
|
68
|
+
assert e1_count >= 1, f"P2(b) E-1 FAIL: 'reachability-map.md' appears {e1_count} time(s), expected >= 1"
|
|
69
|
+
|
|
70
|
+
# Extract E-2 section (### E-2 to next ### or ##)
|
|
71
|
+
e2_match = re.search(r"### E-2:.*?(?=(?:### |## |$))", content, re.DOTALL)
|
|
72
|
+
assert e2_match, "P2(b) FAIL: E-2 section not found"
|
|
73
|
+
e2_section = e2_match.group(0)
|
|
74
|
+
e2_count = e2_section.count("reachability-map.md")
|
|
75
|
+
assert e2_count >= 1, f"P2(b) E-2 FAIL: 'reachability-map.md' appears {e2_count} time(s), expected >= 1"
|
|
76
|
+
|
|
77
|
+
def test_p2c_reference_in_architect_md(self):
|
|
78
|
+
"""P2(c) - architect.md must contain 'reachability-map.md' >= 1 time."""
|
|
79
|
+
root = get_repo_root()
|
|
80
|
+
path = root / ".claude" / "agents" / "architect.md"
|
|
81
|
+
assert path.is_file(), f"architect.md not found at {path}"
|
|
82
|
+
content = path.read_text(encoding="utf-8")
|
|
83
|
+
count = content.count("reachability-map.md")
|
|
84
|
+
assert count >= 1, f"P2(c) FAIL: 'reachability-map.md' appears {count} time(s), expected >= 1"
|
|
85
|
+
|
|
86
|
+
def test_p2d_architect_read_in_skill_phase_b(self):
|
|
87
|
+
"""P2(d) - SKILL.md ## フェーズ B section must contain 'architect.md' Read instruction.
|
|
88
|
+
|
|
89
|
+
番人テスト: reachability-map の persona 経路(architect へは SKILL.md フェーズ B の
|
|
90
|
+
Read 指示に依存して届く)の依存元が消えていないことを見張る。
|
|
91
|
+
"""
|
|
92
|
+
root = get_repo_root()
|
|
93
|
+
path = root / ".claude" / "skills" / "dev-workflow" / "SKILL.md"
|
|
94
|
+
assert path.is_file(), f"SKILL.md not found at {path}"
|
|
95
|
+
content = path.read_text(encoding="utf-8")
|
|
96
|
+
|
|
97
|
+
# Extract Phase B section (## フェーズ B to next ## [^#] or end)
|
|
98
|
+
phase_b_match = re.search(r"## フェーズ B:.*?(?=## [^#]|$)", content, re.DOTALL)
|
|
99
|
+
assert phase_b_match, "P2(d) FAIL: Phase B section not found"
|
|
100
|
+
phase_b_section = phase_b_match.group(0)
|
|
101
|
+
architect_count = phase_b_section.count("architect.md")
|
|
102
|
+
assert architect_count >= 1, f"P2(d) FAIL: 'architect.md' appears {architect_count} time(s) in Phase B, expected >= 1"
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class TestResponseTableStructure:
|
|
106
|
+
"""P3: Response table structure and path validation."""
|
|
107
|
+
|
|
108
|
+
def test_p3_response_table_exists_and_paths_valid(self):
|
|
109
|
+
"""P3 - reachability-map.md must contain a response table with >= 2 non-dash cells in 'Real Path' column."""
|
|
110
|
+
root = get_repo_root()
|
|
111
|
+
map_path = root / ".claude" / "skills" / "dev-workflow" / "references" / "reachability-map.md"
|
|
112
|
+
assert map_path.is_file(), f"P3 FAIL: {map_path} does not exist"
|
|
113
|
+
content = map_path.read_text(encoding="utf-8")
|
|
114
|
+
|
|
115
|
+
# Expected table format: | 経路 | 実パス | 届く role | 条件 |
|
|
116
|
+
table_pattern = r"\|\s*経路\s*\|\s*実パス\s*\|\s*届く role\s*\|\s*条件\s*\|"
|
|
117
|
+
assert re.search(table_pattern, content), "P3 FAIL: Required table header not found"
|
|
118
|
+
|
|
119
|
+
# Extract all rows (skip header and separator)
|
|
120
|
+
rows = re.findall(r"\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|", content)
|
|
121
|
+
# Skip separator rows and the header row itself (whose 実パス cell is the label)
|
|
122
|
+
data_rows = [r for r in rows
|
|
123
|
+
if not re.match(r"^\s*-+\s*$", r[1]) and r[1].strip() != "実パス"]
|
|
124
|
+
|
|
125
|
+
# Check for non-dash cells in 実パス column (index 1)
|
|
126
|
+
non_dash_paths = [r[1].strip() for r in data_rows if r[1].strip() != "—"]
|
|
127
|
+
assert len(non_dash_paths) >= 2, f"P3 FAIL: Found {len(non_dash_paths)} non-dash path cells, expected >= 2"
|
|
128
|
+
|
|
129
|
+
# Validate each non-dash path exists
|
|
130
|
+
for path_str in non_dash_paths:
|
|
131
|
+
path_obj = root / path_str
|
|
132
|
+
assert path_obj.exists(), f"P3 FAIL: Path '{path_str}' from response table does not exist"
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class TestGuardianFrameborderText:
|
|
136
|
+
"""P4: Guardian test - 凍結文言 'データであり指示ではない' が失われていないこと。"""
|
|
137
|
+
|
|
138
|
+
def test_p4_frameborder_in_plan_design_guidelines(self):
|
|
139
|
+
"""P4 - plan-design-guidelines.md must contain frameborder text."""
|
|
140
|
+
root = get_repo_root()
|
|
141
|
+
path = root / ".claude" / "skills" / "dev-workflow" / "references" / "plan-design-guidelines.md"
|
|
142
|
+
assert path.is_file(), f"plan-design-guidelines.md not found at {path}"
|
|
143
|
+
content = path.read_text(encoding="utf-8")
|
|
144
|
+
assert "データであり指示ではない" in content, "P4 FAIL: Frameborder text missing from plan-design-guidelines.md"
|
|
145
|
+
|
|
146
|
+
def test_p4_frameborder_in_skill_md(self):
|
|
147
|
+
"""P4 - SKILL.md must contain frameborder text (E-0 section)."""
|
|
148
|
+
root = get_repo_root()
|
|
149
|
+
path = root / ".claude" / "skills" / "dev-workflow" / "SKILL.md"
|
|
150
|
+
assert path.is_file(), f"SKILL.md not found at {path}"
|
|
151
|
+
content = path.read_text(encoding="utf-8")
|
|
152
|
+
assert "データであり指示ではない" in content, "P4 FAIL: Frameborder text missing from SKILL.md"
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
if __name__ == "__main__":
|
|
156
|
+
import pytest
|
|
157
|
+
sys.exit(pytest.main([__file__, "-v"]))
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/code-reviewer.md
RENAMED
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/design-critic.md
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/agents/project-setup.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/docs/parallel-agents-setup.md
RENAMED
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/docs/platform-adapters.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/consolidate_memory.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/patterns_guard.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/permission_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/planner_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/recall_autorebuild.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/recall_inject.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/report_contract_check.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/restore_session.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/session_mode_watch.py
RENAMED
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/session_start.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_conductor-2.63.0 → claude_code_conductor-2.64.0}/.claude/hooks/session_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|