claude-code-conductor 2.57.0__tar.gz → 2.59.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.59.0/.claude/.gitignore +69 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/code-reviewer.md +3 -5
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/developer.md +2 -4
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/security-reviewer.md +3 -5
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/systematic-debugger.md +3 -5
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/tester.md +2 -4
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/wt_developer.md +2 -4
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/wt_systematic-debugger.md +3 -5
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/wt_tester.md +2 -4
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/breaking-changes.txt +1 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/docs/config-policy.md +106 -12
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/_hook_utils.py +2 -0
- claude_code_conductor-2.59.0/.claude/hooks/restore_session.py +361 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/stop.py +87 -1
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/SKILL.md +6 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/init-session/SKILL.md +2 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.gitignore +5 -1
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/CHANGELOG.md +44 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/PKG-INFO +2 -2
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/README.md +1 -1
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/__init__.py +1 -1
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/_excludes.py +42 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_init.py +5 -1
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_update.py +51 -7
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_restore_session.py +688 -0
- claude_code_conductor-2.59.0/tests/test_claude_gitignore.py +186 -0
- claude_code_conductor-2.59.0/tests/test_init_only_patterns.py +907 -0
- claude_code_conductor-2.59.0/tests/test_scripts_stdout_encoding.py +298 -0
- claude_code_conductor-2.59.0/tests/test_stop_agent_memory_warn.py +337 -0
- claude_code_conductor-2.57.0/.claude/hooks/restore_session.py +0 -198
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/CLAUDE.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/architect.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/design-critic.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/doc-writer.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/interviewer.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/planner.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/project-setup.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/deletions.txt +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/docs/autonomous-mode-onboarding.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/docs/nul-boundary.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/docs/parallel-agents-setup.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/docs/platform-adapters.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/docs/settings.json.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/check_agent_invocation.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/consolidate_memory.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/patterns_guard.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/permission_handler.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/permission_handler_toast.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/planner_check.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/post_tool.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/pre_compact.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/pre_tool.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/recall_autorebuild.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/recall_inject.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/report_contract_check.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/select_tier.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/session_mode_watch.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/session_start.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/session_stop.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/session_utils.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/statusline.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/tier_autoapply.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/tier_gap_check.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/hooks/worktree_guard.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/memory/.gitkeep +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/permission_rules.json +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/rules/promoted/index.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/settings.json +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/autonomous-mode/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/autonomous-mode/scripts/mode_line.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/brainstorm/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/codex-review/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/scripts/record_agent_outcome.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/develop/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/doc/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/extract-lib/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/init-session/scripts/session_guard.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/mcp-config/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/parallel-agents/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/pattern-status/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/recall/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/review-phase/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/setup/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/setup/reference.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/skills/start/SKILL.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/state/.gitkeep +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/ARCHITECTURE.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/LICENSE +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/LICENSES/fastembed-LICENSE +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/LICENSES/fastembed-NOTICE +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/LICENSES/numpy-LICENSE +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/LICENSES/onnxruntime-LICENSE +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/hatch_build.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/pyproject.toml +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/__main__.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/_db_params.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/_terminal.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/adapters.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_ask.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_doctor.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_list.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_metrics.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_plan.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_recall.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_run.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/cli_tier.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/db.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/embedding.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/gitutil.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/mcp_server.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/migrate.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/migrations/001_initial.sql +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/migrations/003_tier_cost.sql +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/migrations/004_agent_outcomes.sql +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/migrations/005_drop_agent_tier_bandit.sql +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/migrations/006_review_decisions_severity.sql +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/migrations/README.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/migrations/__init__.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/paths.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/plan_validator.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/platforms.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/pricing.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/question.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/recall_chunker.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/recall_index.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/src/c3/usage_ingester.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/__init__.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/_pre_compact_helpers.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/conftest.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/fixtures/usage/README.md +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/fixtures/usage/mainline.jsonl +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/__init__.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_check_agent_invocation.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_consolidate_memory.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_hook_utils.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_permission_handler.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_permission_handler_toast.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_planner_check.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_planner_check_dev.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_post_tool.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_pre_tool.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_recall_autorebuild.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_recall_inject.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_record_agent_outcome.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_record_review_decision.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_review_hint_inject.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_select_tier.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_select_tier_escalation.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_session_start.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_session_stop.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_session_utils.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_settings_tier_autoapply_registration.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_similarity_boost.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_statusline.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_statusline_template_sync.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_sync_check.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_template_guard.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_tier_autoapply.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_tier_gap_check.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/hooks/test_tier_security_fixes.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/__init__.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/_skill_helpers.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_init_session_no_task_type.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_marker_compliance.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_parallel_agents_skill_tier.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_planner_lightweight.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_recall_skill.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_session_guard.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_setup_templates.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_start_skill_new_flow.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_adapters.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_check_deletions.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_ask.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_doctor.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_doctor_launcher.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_entry.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_init.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_list.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_metrics.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_plan.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_recall.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_run.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_tier.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_update_breaking_changes.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_cli_update_deletions.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_db.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_docstring_consistency.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_embedding.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_excludes.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_extract_breaking_changes.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_gitutil.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_hooks_stdin_idiom.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_mcp_server_elicit.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_migrate.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_mode_line.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_no_bare_python_launcher.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_nul_boundary_lint.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_paths.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_patterns_guard.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_plan_validator.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_pre_compact.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_pre_tool_hook.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_precompact_additional.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_precompact_toctou_fixes.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_pricing.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_recall_chunker.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_recall_index.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_references_migration.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_report_contract_check.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_session_mode_watch.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_session_utils_additional.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_settings_hooks_registration.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_skill_no_builtin_conflict.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_statusline.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_stop_additional.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_stop_hook.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_stop_precompact_fixes.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_sync_template_stop.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_template_pre_tool_hook.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_usage_ingester.py +0 -0
- {claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/tests/test_worktree_guard.py +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# C3 が利用先プロジェクトへ配置する .gitignore
|
|
3
|
+
#
|
|
4
|
+
# 方針: 実行時生成領域は「載せない理由があるもの以外は git 管理する」。
|
|
5
|
+
# C3 は使いながら育てるフレームワークで、育った結果(agent-memory / reports /
|
|
6
|
+
# memory / state/c3.db)はチームの引き継ぎ資産になる。載せなければ、その資産は
|
|
7
|
+
# 最初に動かした人のマシンにしか残らない。
|
|
8
|
+
# 分類の根拠と public リポジトリでの注意は docs/config-policy.md §1-2 を参照。
|
|
9
|
+
#
|
|
10
|
+
# ここで除外するのは次の 2 種類だけ:
|
|
11
|
+
# (a) 再生成可能 … 元データから再構築できる
|
|
12
|
+
# (b) セッション一時 … 1 セッション限りで意味を失う
|
|
13
|
+
#
|
|
14
|
+
# このファイルは c3 init が配置する。**c3 update は上書きしない**ため
|
|
15
|
+
# (_excludes.py の INIT_ONLY_PATTERNS)、プロジェクト固有の除外をここへ追記しても
|
|
16
|
+
# アップデートで失われない。ただし C3 側の分類更新(新しい一時ファイルの追加など)も
|
|
17
|
+
# 自動では届かないので、リリースノートで案内された変更は手動でマージすること。
|
|
18
|
+
# =============================================================================
|
|
19
|
+
|
|
20
|
+
# --- (a) 再生成可能 ----------------------------------------------------------
|
|
21
|
+
# recall インデックス。`c3 recall rebuild` で元データから再構築できる。
|
|
22
|
+
# 実測で数十 MB あり、更新のたびに履歴を太らせるため除外する。
|
|
23
|
+
state/recall.hnsw
|
|
24
|
+
state/recall_meta.json
|
|
25
|
+
state/*.bak
|
|
26
|
+
|
|
27
|
+
# --- (b) セッション一時 ------------------------------------------------------
|
|
28
|
+
# hook が毎セッション書き換える使い捨てファイル。
|
|
29
|
+
# ただし setup_done.flag は「/setup 実行済み」というプロジェクト単位の状態なので
|
|
30
|
+
# 除外しない(新しく参加した人が setup 未実施と誤判定されるのを防ぐ)。
|
|
31
|
+
state/*.flag
|
|
32
|
+
!state/setup_done.flag
|
|
33
|
+
state/tier_selection.json
|
|
34
|
+
state/*.lock
|
|
35
|
+
|
|
36
|
+
# SQLite の WAL サイドカー(db.py は PRAGMA journal_mode=WAL で開く)。
|
|
37
|
+
# 通常はチェックポイントで c3.db 本体へ取り込まれるが、プロセス異常終了時に
|
|
38
|
+
# 残存しうる。トランザクション中間データを「引き継ぎ資産」として commit しない。
|
|
39
|
+
state/*-wal
|
|
40
|
+
state/*-shm
|
|
41
|
+
|
|
42
|
+
# 実行ログ・並列実行の一時領域(.gitkeep は空ディレクトリ維持のため残す)
|
|
43
|
+
logs/
|
|
44
|
+
worktrees/
|
|
45
|
+
tmp/*
|
|
46
|
+
!tmp/.gitkeep
|
|
47
|
+
|
|
48
|
+
# --- 個人設定 ----------------------------------------------------------------
|
|
49
|
+
# per-user / per-environment の設定。C3 は触らない。
|
|
50
|
+
settings.local.json
|
|
51
|
+
|
|
52
|
+
# =============================================================================
|
|
53
|
+
# 意図的に tracked にしているもの(ここで除外しない)
|
|
54
|
+
#
|
|
55
|
+
# state/c3.db tier-routing の学習と review-hint の判断記録
|
|
56
|
+
# (許容例外・是正履歴)。載せないと「この
|
|
57
|
+
# プロジェクトではこの指摘を許容する」という
|
|
58
|
+
# 合意が、記録した個人に閉じる
|
|
59
|
+
# state/setup_done.flag /setup 実行済みマーカー
|
|
60
|
+
# state/security_audit_exceptions.json 許容例外の設定
|
|
61
|
+
# state/tier_autoapply.jsonl tier 適用ログ
|
|
62
|
+
# agent-memory/ 各 agent が蓄積した判断基準
|
|
63
|
+
# reports/ PR で「レポート+実差分」を並べて読める
|
|
64
|
+
# memory/ セッション記録・学習パターン
|
|
65
|
+
#
|
|
66
|
+
# public リポジトリでは security 系(security-reviewer の agent-memory と
|
|
67
|
+
# security-review-report-*.md)が「既知の弱点と、それを見逃している理由の一覧」に
|
|
68
|
+
# なるため、公開プロジェクトではそれらの除外を検討する(docs/config-policy.md §1-2)。
|
|
69
|
+
# =============================================================================
|
{claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/code-reviewer.md
RENAMED
|
@@ -19,13 +19,11 @@ tools:
|
|
|
19
19
|
コードの品質・保守性・パフォーマンスをレビューし、改善提案を code-review-report として出力する。
|
|
20
20
|
|
|
21
21
|
## Memory
|
|
22
|
-
-
|
|
23
|
-
- 作業終了時、次回以降のレビューに役立つ知見があれば MEMORY.md に追記する。記録対象は以下に限定する:
|
|
22
|
+
- 作業終了時、次回以降のレビューに役立つ知見があれば `.claude/agent-memory/code-reviewer/MEMORY.md` に追記する。記録対象は以下に限定する:
|
|
24
23
|
- 再現価値のあるレビュー観点・指摘パターン
|
|
25
|
-
- **許容例外**:
|
|
24
|
+
- **許容例外**: ユーザーが指摘を許容した観点と理由(`[許容例外]` プレフィックスを付ける。次回レビューでの再指摘を防ぐ)
|
|
26
25
|
- 本プロジェクト特有のコーディング規約・トレードオフ判断
|
|
27
|
-
- 雑記録・一回性の進捗ログは記録しない。MEMORY.md
|
|
28
|
-
- 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。許容例外は `[許容例外]` プレフィックスを付けて理由を併記する。
|
|
26
|
+
- 雑記録・一回性の進捗ログは記録しない。1 エントリ 1 行で簡潔に書き、MEMORY.md 全体は 200 行 / 25KB 以内に保つ(超過分は起動時に読まれない・超えたら価値の低いエントリから削除する)。
|
|
29
27
|
|
|
30
28
|
## Key Scope
|
|
31
29
|
|
|
@@ -20,13 +20,11 @@ tools:
|
|
|
20
20
|
plan-report に基づき実装・デバッグ・リファクタリングを行い、tester が検証できる状態にする。
|
|
21
21
|
|
|
22
22
|
## Memory
|
|
23
|
-
-
|
|
24
|
-
- 作業終了時、次回以降の作業に役立つ知見があれば MEMORY.md に追記する。記録対象は以下に限定する:
|
|
23
|
+
- 作業終了時、次回以降の作業に役立つ知見があれば `.claude/agent-memory/developer/MEMORY.md` に追記する。記録対象は以下に限定する:
|
|
25
24
|
- 再現価値のある実装・リファクタリングのパターン
|
|
26
25
|
- 同じハマり方を繰り返さないための注意点(言語・ライブラリ・ツール特有の落とし穴)
|
|
27
26
|
- 本プロジェクト特有の制約・許容例外(理由とセットで)
|
|
28
|
-
- 雑記録・一回性の進捗ログは記録しない。MEMORY.md
|
|
29
|
-
- 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。日付や ID は不要(コンテンツ自身が自己説明的であること)。
|
|
27
|
+
- 雑記録・一回性の進捗ログは記録しない。1 エントリ 1 行で簡潔に書き、MEMORY.md 全体は 200 行 / 25KB 以内に保つ(超過分は起動時に読まれない・超えたら価値の低いエントリから削除する)。
|
|
30
28
|
|
|
31
29
|
## Key Scope
|
|
32
30
|
|
{claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/security-reviewer.md
RENAMED
|
@@ -19,13 +19,11 @@ tools:
|
|
|
19
19
|
SQLインジェクション・XSS・認証認可・秘密情報漏洩などの脆弱性を診断し、security-review-report を出力する。
|
|
20
20
|
|
|
21
21
|
## Memory
|
|
22
|
-
-
|
|
23
|
-
- 作業終了時、次回以降の診断に役立つ知見があれば MEMORY.md に追記する。記録対象は以下に限定する:
|
|
22
|
+
- 作業終了時、次回以降の診断に役立つ知見があれば `.claude/agent-memory/security-reviewer/MEMORY.md` に追記する。記録対象は以下に限定する:
|
|
24
23
|
- 再現価値のある脆弱性パターン・診断観点
|
|
25
|
-
- **許容例外**:
|
|
24
|
+
- **許容例外**: ユーザーが指摘を許容したリスク・脅威モデル外と判断した観点と理由(`[許容例外]` プレフィックスを付ける。次回診断での再指摘を防ぐ)
|
|
26
25
|
- 本プロジェクト特有の脅威モデル・信頼境界・許容されている設計(理由とセットで)
|
|
27
|
-
- 雑記録・一回性の進捗ログは記録しない。MEMORY.md
|
|
28
|
-
- 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。許容例外は `[許容例外]` プレフィックスを付けて理由を併記する。
|
|
26
|
+
- 雑記録・一回性の進捗ログは記録しない。1 エントリ 1 行で簡潔に書き、MEMORY.md 全体は 200 行 / 25KB 以内に保つ(超過分は起動時に読まれない・超えたら価値の低いエントリから削除する)。
|
|
29
27
|
|
|
30
28
|
## Key Scope
|
|
31
29
|
|
{claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/systematic-debugger.md
RENAMED
|
@@ -19,13 +19,11 @@ developer が詰まった問題の根本原因を調査し、debug-analysis-repo
|
|
|
19
19
|
コードの修正は行わない。調査と分析のみ担当する。
|
|
20
20
|
|
|
21
21
|
## Memory
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
- **過去の根本原因パターン**: 「症状 → 原因」のペア(同じ症状を再調査せずに済む)
|
|
22
|
+
- 作業終了時、次回以降の調査に役立つ知見があれば `.claude/agent-memory/systematic-debugger/MEMORY.md` に追記する。記録対象は以下に限定する:
|
|
23
|
+
- **過去の根本原因パターン**: 「症状 → 原因」のペア(矢印で明示する。同じ症状を再調査せずに済む)
|
|
25
24
|
- **有効だった調査経路**: 短時間で原因到達できた Grep / コマンド・差分の見方
|
|
26
25
|
- 本プロジェクト特有の落とし穴(環境・設定・依存関係に起因する繰り返し問題)
|
|
27
|
-
- 雑記録・一回性の進捗ログは記録しない。MEMORY.md
|
|
28
|
-
- 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。「症状 → 原因」のペアは矢印で明示する。
|
|
26
|
+
- 雑記録・一回性の進捗ログは記録しない。1 エントリ 1 行で簡潔に書き、MEMORY.md 全体は 200 行 / 25KB 以内に保つ(超過分は起動時に読まれない・超えたら価値の低いエントリから削除する)。
|
|
29
27
|
|
|
30
28
|
## Key Scope
|
|
31
29
|
|
|
@@ -18,13 +18,11 @@ tools:
|
|
|
18
18
|
テスト仕様の設計・テストコード作成・テスト実行を行い、品質状況を test-report として出力する。
|
|
19
19
|
|
|
20
20
|
## Memory
|
|
21
|
-
-
|
|
22
|
-
- 作業終了時、次回以降の作業に役立つ知見があれば MEMORY.md に追記する。記録対象は以下に限定する:
|
|
21
|
+
- 作業終了時、次回以降の作業に役立つ知見があれば `.claude/agent-memory/tester/MEMORY.md` に追記する。記録対象は以下に限定する:
|
|
23
22
|
- 再現価値のあるテスト設計パターン(Red の書き方・テスト分割の粒度・モック戦略)
|
|
24
23
|
- 本プロジェクト特有のテスト落とし穴(環境依存・並行実行・フレーク要因)
|
|
25
24
|
- テスト実行コマンド・前提条件などプロジェクト特有の情報
|
|
26
|
-
- 雑記録・一回性の進捗ログは記録しない。MEMORY.md
|
|
27
|
-
- 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。日付や ID は不要(コンテンツ自身が自己説明的であること)。
|
|
25
|
+
- 雑記録・一回性の進捗ログは記録しない。1 エントリ 1 行で簡潔に書き、MEMORY.md 全体は 200 行 / 25KB 以内に保つ(超過分は起動時に読まれない・超えたら価値の低いエントリから削除する)。
|
|
28
26
|
|
|
29
27
|
## Key Scope
|
|
30
28
|
|
{claude_code_conductor-2.57.0 → claude_code_conductor-2.59.0}/.claude/agents/wt_developer.md
RENAMED
|
@@ -25,13 +25,11 @@ tools:
|
|
|
25
25
|
plan-report に基づき実装・デバッグ・リファクタリングを行い、tester が検証できる状態にする。
|
|
26
26
|
|
|
27
27
|
## Memory
|
|
28
|
-
-
|
|
29
|
-
- 作業終了時、次回以降の作業に役立つ知見があれば MEMORY.md に追記する。記録対象は以下に限定する:
|
|
28
|
+
- 作業終了時、次回以降の作業に役立つ知見があれば `.claude/agent-memory/wt_developer/MEMORY.md` に追記する。記録対象は以下に限定する:
|
|
30
29
|
- 再現価値のある実装・リファクタリングのパターン
|
|
31
30
|
- 同じハマり方を繰り返さないための注意点(言語・ライブラリ・ツール特有の落とし穴)
|
|
32
31
|
- 本プロジェクト特有の制約・許容例外(理由とセットで)
|
|
33
|
-
- 雑記録・一回性の進捗ログは記録しない。MEMORY.md
|
|
34
|
-
- 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。日付や ID は不要(コンテンツ自身が自己説明的であること)。
|
|
32
|
+
- 雑記録・一回性の進捗ログは記録しない。1 エントリ 1 行で簡潔に書き、MEMORY.md 全体は 200 行 / 25KB 以内に保つ(超過分は起動時に読まれない・超えたら価値の低いエントリから削除する)。
|
|
35
33
|
|
|
36
34
|
## Key Scope
|
|
37
35
|
|
|
@@ -24,13 +24,11 @@ developer が詰まった問題の根本原因を調査し、debug-analysis-repo
|
|
|
24
24
|
コードの修正は行わない。調査と分析のみ担当する。
|
|
25
25
|
|
|
26
26
|
## Memory
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
- **過去の根本原因パターン**: 「症状 → 原因」のペア(同じ症状を再調査せずに済む)
|
|
27
|
+
- 作業終了時、次回以降の調査に役立つ知見があれば `.claude/agent-memory/wt_systematic-debugger/MEMORY.md` に追記する。記録対象は以下に限定する:
|
|
28
|
+
- **過去の根本原因パターン**: 「症状 → 原因」のペア(矢印で明示する。同じ症状を再調査せずに済む)
|
|
30
29
|
- **有効だった調査経路**: 短時間で原因到達できた Grep / コマンド・差分の見方
|
|
31
30
|
- 本プロジェクト特有の落とし穴(環境・設定・依存関係に起因する繰り返し問題)
|
|
32
|
-
- 雑記録・一回性の進捗ログは記録しない。MEMORY.md
|
|
33
|
-
- 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。「症状 → 原因」のペアは矢印で明示する。
|
|
31
|
+
- 雑記録・一回性の進捗ログは記録しない。1 エントリ 1 行で簡潔に書き、MEMORY.md 全体は 200 行 / 25KB 以内に保つ(超過分は起動時に読まれない・超えたら価値の低いエントリから削除する)。
|
|
34
32
|
|
|
35
33
|
## Key Scope
|
|
36
34
|
|
|
@@ -23,13 +23,11 @@ tools:
|
|
|
23
23
|
テスト仕様の設計・テストコード作成・テスト実行を行い、品質状況を test-report として出力する。
|
|
24
24
|
|
|
25
25
|
## Memory
|
|
26
|
-
-
|
|
27
|
-
- 作業終了時、次回以降の作業に役立つ知見があれば MEMORY.md に追記する。記録対象は以下に限定する:
|
|
26
|
+
- 作業終了時、次回以降の作業に役立つ知見があれば `.claude/agent-memory/wt_tester/MEMORY.md` に追記する。記録対象は以下に限定する:
|
|
28
27
|
- 再現価値のあるテスト設計パターン(Red の書き方・テスト分割の粒度・モック戦略)
|
|
29
28
|
- 本プロジェクト特有のテスト落とし穴(環境依存・並行実行・フレーク要因)
|
|
30
29
|
- テスト実行コマンド・前提条件などプロジェクト特有の情報
|
|
31
|
-
- 雑記録・一回性の進捗ログは記録しない。MEMORY.md
|
|
32
|
-
- 形式は箇条書き 1 行 + 必要なら次行にインデントで補足。日付や ID は不要(コンテンツ自身が自己説明的であること)。
|
|
30
|
+
- 雑記録・一回性の進捗ログは記録しない。1 エントリ 1 行で簡潔に書き、MEMORY.md 全体は 200 行 / 25KB 以内に保つ(超過分は起動時に読まれない・超えたら価値の低いエントリから削除する)。
|
|
33
31
|
|
|
34
32
|
## Key Scope
|
|
35
33
|
|
|
@@ -9,3 +9,4 @@ v2.20.0|hooks/schema.sql removed; SQLite schema is now managed by c3/migrations/
|
|
|
9
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)|
|
|
10
10
|
v2.43.0|Dropped agent_tier_bandit table (migration 005; bandit params now derived from agent_outcomes event log at read time, learning data preserved). Removed update_agent_tier_params and five v2.41.0 deprecated shims (read_tier_params, read_tier_failure_rate, update_tier_params, record_tier_recent_outcome, sync_tier_bandit_cost). read_agent_failure_rate signature changed: last_n replaced by window_days (time-based window, default 14 days via C3_FAILURE_WINDOW_DAYS).|
|
|
11
11
|
v2.51.0|Hook and statusLine launchers in the distributed settings.json changed from bare 'python' to 'c3 run'. Run 'c3 update' to migrate. If you customized settings.json directly, review 'c3 update --dry-run' first and move customizations to settings.local.json before updating.|配布 settings.json の hook / statusLine 起動子が python から c3 run 前提に変更。c3 update で移行。settings.json を直接カスタムしている場合は c3 update --dry-run で差分確認しカスタムを settings.local.json へ移してから update。
|
|
12
|
+
v2.58.0|c3 init and c3 update now place .claude/.gitignore in the target project. It excludes only regenerable files (state/recall.*) and session-scoped files (state/*.flag, state/tier_selection.json, logs/, worktrees/, tmp/). Existing projects that already committed those must run 'git rm -r --cached .claude/state/recall.hnsw .claude/state/recall_meta.json .claude/logs .claude/worktrees' once and commit, because .gitignore has no effect on already-tracked files. If your root .gitignore excludes the whole .claude/state/ directory, git never descends into it and the negation patterns in .claude/.gitignore do not apply; change the root rule to .claude/state/* or remove it. See .claude/docs/config-policy.md section 1-2.|c3 init / c3 update が .claude/.gitignore を配置するようになりました。除外は再生成可能なもの(state/recall.*)とセッション一時のもの(state/*.flag・state/tier_selection.json・logs/・worktrees/・tmp/)のみです。既にこれらを commit している既存プロジェクトは、.gitignore が tracked ファイルに効かないため git rm -r --cached を一度実行してください。ルートの .gitignore で .claude/state/ をディレクトリごと除外している場合は否定パターンが効かないため、ワイルドカード形式へ変更するか削除してください。詳細は .claude/docs/config-policy.md §1-2 を参照。
|
|
@@ -37,14 +37,85 @@ src/c3/migrations/ SQLite schema migration SQL ファイル
|
|
|
37
37
|
.claude/rules/ c3 init で配置・c3 update で更新
|
|
38
38
|
.claude/rules/promoted/index.md c3 init で空雛形のみ配置(c3 update は触らない)
|
|
39
39
|
.claude/hooks/ c3 init で配置・c3 update で更新
|
|
40
|
-
.claude/state/ 実行時生成(
|
|
41
|
-
.claude/memory/
|
|
42
|
-
.claude/agent-memory/
|
|
43
|
-
.claude/reports/
|
|
44
|
-
.claude/worktrees/
|
|
45
|
-
.claude/logs/
|
|
40
|
+
.claude/state/ 実行時生成(c3.db 等は git 管理を推奨・一部除外。下記参照)
|
|
41
|
+
.claude/memory/ 実行時生成(チーム開発では git 管理を推奨。下記参照)
|
|
42
|
+
.claude/agent-memory/ 実行時生成(チーム開発では git 管理を推奨。下記参照)
|
|
43
|
+
.claude/reports/ 実行時生成(チーム開発では git 管理を推奨。下記参照)
|
|
44
|
+
.claude/worktrees/ 並列実行時一時生成(.claude/.gitignore が自動除外)
|
|
45
|
+
.claude/logs/ 実行時生成(.claude/.gitignore が自動除外)
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
+
> **`.claude/` 実行時生成領域のコミット方針**: **チーム開発では「載せない理由があるもの以外は
|
|
49
|
+
> git 管理する」を既定とする。** C3 は使いながら育てるフレームワークで、育った結果の大半は
|
|
50
|
+
> これらの領域に溜まる。載せなければ、その資産は最初に動かした人のマシンにしか存在しない。
|
|
51
|
+
> **`c3 init` は `.claude/.gitignore` を配置する**(プロジェクトルートの `.gitignore` は編集しない)。
|
|
52
|
+
> そこで除外されない領域は既定で tracked になる。
|
|
53
|
+
>
|
|
54
|
+
> **載せない**(載せても価値がないか、載せると邪魔になるもの):
|
|
55
|
+
>
|
|
56
|
+
> | 対象 | 理由 |
|
|
57
|
+
> |---|---|
|
|
58
|
+
> | `state/recall.hnsw` / `state/recall_meta.json`(+ `.bak`) | **元データから再生成可能**。実測 63MB あり履歴を無用に太らせる |
|
|
59
|
+
> | `state/*.flag` / `state/tier_selection.json` | hook が動的生成する**セッション一時**ファイル |
|
|
60
|
+
> | `logs/` / `worktrees/` | 実行ログ・並列実行の一時領域 |
|
|
61
|
+
>
|
|
62
|
+
> > **既存プロジェクトへの移行(重要)**: **`.gitignore` は「既に tracked のファイル」には効かない。**
|
|
63
|
+
> > v2.58.0 より前から C3 を使っていて `state/recall.hnsw`(実測 63MB)等を既に commit している場合、
|
|
64
|
+
> > `c3 update` で `.claude/.gitignore` が配置されても**それだけでは追跡から外れない**。
|
|
65
|
+
> > 一度だけ以下を実行する(作業ツリーのファイルは消えない):
|
|
66
|
+
> >
|
|
67
|
+
> > ```bash
|
|
68
|
+
> > git rm -r --cached .claude/state/recall.hnsw .claude/state/recall_meta.json \
|
|
69
|
+
> > .claude/logs .claude/worktrees 2>/dev/null
|
|
70
|
+
> > git status # 削除予定が想定どおりか確認してから commit する
|
|
71
|
+
> > ```
|
|
72
|
+
> >
|
|
73
|
+
> > 履歴からも消したい場合(63MB が clone を重くしている等)は `git filter-repo` 等での
|
|
74
|
+
> > 履歴書き換えが必要で、共有ブランチでは force push を伴うためチームと合意してから行う。
|
|
75
|
+
> > **未 commit のプロジェクトでは何もしなくてよい**(`.claude/.gitignore` が最初から効く)。
|
|
76
|
+
> >
|
|
77
|
+
> > また、プロジェクトルートの `.gitignore` で `.claude/state/` のように**ディレクトリごと**除外して
|
|
78
|
+
> > いる場合、git はその配下へ降りないため `.claude/.gitignore` の否定パターン(`!state/setup_done.flag`
|
|
79
|
+
> > 等)が**効かない**。ルート側を `.claude/state/*` のようなワイルドカード形式にするか、
|
|
80
|
+
> > ルート側の当該行を削除して `.claude/.gitignore` に一本化する。
|
|
81
|
+
>
|
|
82
|
+
> **載せる**(引き継ぎ資産):
|
|
83
|
+
>
|
|
84
|
+
> | 対象 | 何が引き継がれるか |
|
|
85
|
+
> |---|---|
|
|
86
|
+
> | `agent-memory/` | 各 agent が蓄積した判断基準。とりわけ reviewer の `[許容例外]`(この指摘はこのプロジェクトでは許容する、というユーザー判断の記録)は、コミットして初めてチーム全員の reviewer が同じ判断を再現できる |
|
|
87
|
+
> | `reports/` | 個々の変更の記録。PR レビュー時に「レポート+実差分」を並べて読め、レビュアーが変更の意図まで追える(実運用で有効性を確認済み) |
|
|
88
|
+
> | `memory/` | セッション記録(現在地・残タスク・うまくいったアプローチ)と学習パターン。次に触る人が前回の文脈から再開できる |
|
|
89
|
+
> | `state/c3.db` | tier-routing の学習データと review-hint の判断記録(許容例外・是正履歴)。載せないと「このプロジェクトではこの指摘を許容する」という合意が記録した個人に閉じる |
|
|
90
|
+
> | `state/security_audit_exceptions.json` / `state/tier_autoapply.jsonl` | 許容例外の設定と tier 適用ログ |
|
|
91
|
+
>
|
|
92
|
+
> agent-memory は Claude Code の `memory: project` スコープの実体で、公式仕様でも「バージョン管理で
|
|
93
|
+
> 共有可能」な領域として設計されている(共有したくないものは `user` / `local` スコープに置く)。
|
|
94
|
+
>
|
|
95
|
+
> **c3.db のコンフリクトについて**: SQLite バイナリは git でマージできないため、同一プロジェクトを
|
|
96
|
+
> 複数人が**同時に**改修する運用では、衝突時の解決手段が「どちらかの DB を丸ごと選ぶ」しかなく
|
|
97
|
+
> 片方の記録が失われる。2026-07-28 時点の実運用ではコンフリクトは発生していない(同一プロジェクトへの
|
|
98
|
+
> 同時改修という運用形態を取っていないため)。**まず載せる方針とし、実際に衝突が問題化した時点で
|
|
99
|
+
> エクスポート方式(DB を JSONL 等へダンプして tracked にし、DB 本体は再構築する)を検討する。**
|
|
100
|
+
> 衝突の起きやすさはチームの運用形態に依存するため、一律の正解はない。
|
|
101
|
+
>
|
|
102
|
+
> **前提となる規律**: コミットする以上、agent 定義の `## Memory` 節が定める**記録対象の限定**
|
|
103
|
+
> (秘密情報・一時情報・雑記録を書かない)が守られている必要がある。共有するとこの規律は
|
|
104
|
+
> 「自分だけの問題」ではなくなる。
|
|
105
|
+
>
|
|
106
|
+
> **public リポジトリでの注意**: security-reviewer の MEMORY.md と `security-review-report-*.md`
|
|
107
|
+
> には構造上「この脅威はこのプロジェクトでは許容する・理由は〜」が蓄積される。private repo では
|
|
108
|
+
> チームの資産だが、public では「**既知の弱点と、それを見逃している理由の一覧**」を公開することに
|
|
109
|
+
> なる。公開プロジェクトでは security 系(reviewer の agent-memory と security-review-report)を
|
|
110
|
+
> `.gitignore` に加えるか `local` スコープへ移すことを検討する。
|
|
111
|
+
> (C3 配布元リポジトリ自身が `.claude/agent-memory/` と `.claude/reports/` を gitignore して
|
|
112
|
+
> いるのは、この理由と、配布物と開発ログを分けるためであって、「共有すべきでない領域だから」
|
|
113
|
+
> ではない。)
|
|
114
|
+
>
|
|
115
|
+
> なお各 `MEMORY.md` は起動時に**先頭 200 行 / 25KB まで**しか system prompt に載らない(超過分は
|
|
116
|
+
> 読まれない)。共有運用ではこれは「チーム全員の reviewer が過去の合意を読めなくなる」ことを意味する
|
|
117
|
+
> ため、`stop.py` が 80% 到達で stderr 警告を出す。警告が出たら価値の低いエントリから削って予算内に戻す。
|
|
118
|
+
|
|
48
119
|
### 1-3. ディレクトリの命名・配置チート
|
|
49
120
|
|
|
50
121
|
各ディレクトリの **命名・役割・配置判断** は `.claude/docs/taxonomy.md` を参照。
|
|
@@ -61,7 +132,7 @@ src/c3/migrations/ SQLite schema migration SQL ファイル
|
|
|
61
132
|
同じキー(`permissions.allow` など)が複数ファイルで定義されている場合、
|
|
62
133
|
**上位ファイルが下位ファイルを上書き**する(高 → 低の順):
|
|
63
134
|
|
|
64
|
-
1. `.claude/settings.local.json` — 個人 override(`.gitignore`
|
|
135
|
+
1. `.claude/settings.local.json` — 個人 override(`.claude/.gitignore` が自動除外。c3 update の対象外)
|
|
65
136
|
2. `.claude/settings.json` — プロジェクト共通設定(git 管理)
|
|
66
137
|
3. `~/.claude/settings.json` — グローバル個人設定(マシンローカル)
|
|
67
138
|
|
|
@@ -103,10 +174,11 @@ src/c3/migrations/ SQLite schema migration SQL ファイル
|
|
|
103
174
|
| `.claude/CLAUDE.md` | ○ | ○ | △(c3 update で上書きされる前提で) |
|
|
104
175
|
| `.claude/rules/*.md` | ○ | ○ | △(同上) |
|
|
105
176
|
| `.claude/rules/promoted/index.md` | ○(空雛形のみ) | × | ○(`/promote-pattern` が追記、手動編集も可) |
|
|
177
|
+
| `.claude/.gitignore` | ○ | ×(INIT_ONLY) | ○(追記は `c3 update` で失われない。C3 側の分類更新は手動マージ) |
|
|
106
178
|
|
|
107
179
|
---
|
|
108
180
|
|
|
109
|
-
## 3. 配布判断マトリクス(
|
|
181
|
+
## 3. 配布判断マトリクス(15 カテゴリ)
|
|
110
182
|
|
|
111
183
|
`_excludes.py` の `EXCLUDE_PATTERNS` / `KEEP_PATTERNS` を実装照合した結果。
|
|
112
184
|
各カテゴリに配布有無・c3 update の更新有無・理由を明示する。
|
|
@@ -117,7 +189,7 @@ src/c3/migrations/ SQLite schema migration SQL ファイル
|
|
|
117
189
|
| 2 | `.claude/agents/*.md` | ○ | ○ | ペルソナ定義。配布先で読まれる。例外: `tdd-develop.md` のみ除外(v2.1.0 廃止) |
|
|
118
190
|
| 3 | `.claude/skills/*/` | ○ | ○ | オーケストレーション/ユーティリティ skill 定義(`scripts/` / `templates/` 等サブディレクトリ含む)。例外: `worktree-tdd-workflow/*` のみ除外(v2.1.0 廃止) |
|
|
119
191
|
| 4 | `.claude/rules/*.md` | ○ | ○ | C3 配布デフォルトルール(常時注入対象) |
|
|
120
|
-
| 5 | `.claude/rules/promoted/*` | ○ |
|
|
192
|
+
| 5 | `.claude/rules/promoted/*` | ○ | ×(`index.md` は INIT_ONLY) | プロジェクト固有昇格ルール。配布元の `promoted/index.md` は空雛形のみ配布。利用先で `/promote-pattern` が追記する **ユーザー所有領域**。`index.md` は `INIT_ONLY_PATTERNS` で上書きから保護される。昇格ルール本体(`YYYYMMDD-{id}.md`)は template 側に存在しないため `_walk_diff` の走査対象にならず元から無事 |
|
|
121
193
|
| 6 | `.claude/docs/*.md` | △(一部のみ) | ○ | 利用先向けリファレンス。配布対象は `platform-adapters.md` / `settings.json.md` / `parallel-agents-setup.md` / `config-policy.md`(本ドキュメント)の 4 ファイル。配布元固有の設計メモ等は `_excludes.py` で個別除外。`taxonomy.md` は tracked(GitHub 公開)だが EXCLUDE 対象のため wheel 非配布(詳細は §7 落とし穴 2 参照)。 |
|
|
122
194
|
| 7 | `.claude/CLAUDE.md` | ○ | ○ | 配布先で常時注入される共通ルール |
|
|
123
195
|
| 8 | `.claude/settings.json` | ○ | ○ | プロジェクト共通設定(hooks 登録・permissions など) |
|
|
@@ -127,6 +199,7 @@ src/c3/migrations/ SQLite schema migration SQL ファイル
|
|
|
127
199
|
| 12 | `.dev/*` / `/CLAUDE.md` / `/AGENTS.md` / `/.codex/` / `/.cursor/` / `/.agents/` | × | — | 配布元専用または adapter 生成物。wheel には構造的に含まれない(`src/c3/_template/.claude/` 配下のみ同梱)が、配布元 `.gitignore` で commit 混入も防ぐ |
|
|
128
200
|
| 13 | `.claude/deletions.txt` | ○ | ○ | `c3 update` が読み込み、利用先 `.claude/` から該当ファイルを削除候補として扱う。配布元の `.claude/deletions.txt` に追記したエントリは次回 pip install → `c3 update` で利用先に伝播。`KEEP_PATTERNS` で明示配布。`c3 update` 自体は本ファイルを削除しない(§7 落とし穴 5 参照) |
|
|
129
201
|
| 14 | `.claude/breaking-changes.txt` | ○ | ○ | `c3 update` が読み込み、利用先の `.claude/state/c3_version.txt`(バージョン checkpoint)と diff を計算して破壊的変更を表示する。MAJOR bump 時は y/N 承認プロンプトを発火。`KEEP_PATTERNS` で明示配布。配布元 `.claude/breaking-changes.txt` を更新すれば次回 pip install → `c3 update` で利用先に伝播。利用先 git 管理は tracked(上書きされる) |
|
|
202
|
+
| 15 | `.claude/.gitignore` | ○ | ×(INIT_ONLY) | 利用先の実行時生成領域のうち「再生成可能」「セッション一時」だけを除外する配布 `.gitignore`(§1-2 の方針の実装)。プロジェクトルートの `.gitignore` は編集しないため既存設定と衝突しない。`INIT_ONLY_PATTERNS` により初回配置のみで **c3 update は上書きしない**(利用先の追記を守る)。C3 側で分類を更新した場合はリリースノートで手動マージを案内する |
|
|
130
203
|
|
|
131
204
|
> **注意 (カテゴリ #6)**: `taxonomy.md` は `_excludes.py` の EXCLUDE 対象だが、`.gitignore` では tracked 状態(GitHub に公開済み)。
|
|
132
205
|
> **wheel には含まれない**点に注意。gitignore と wheel 配布は別レイヤーであり、
|
|
@@ -148,7 +221,7 @@ src/c3/migrations/ SQLite schema migration SQL ファイル
|
|
|
148
221
|
|
|
149
222
|
> **注意**: `git add -f` の強制オプションを使うと `.gitignore` が無効化されるため、秘匿情報が誤ってコミットされるリスクがある。CI/CD パイプラインでの自動 `add` 設定にも注意すること。
|
|
150
223
|
|
|
151
|
-
> **注意**: `c3 init` はプロジェクトルートの `.gitignore`
|
|
224
|
+
> **注意**: `c3 init` はプロジェクトルートの `.gitignore` を自動編集しない。代わりに `.claude/.gitignore` を配置し、その中で `settings.local.json` を除外している(v2.58.0〜)。**それ以前に `c3 init` した既存プロジェクトには `.claude/.gitignore` が無い**ため、`c3 update` で配置されるまではユーザー自身がルートの `.gitignore` に `.claude/settings.local.json` を追加すること。
|
|
152
225
|
|
|
153
226
|
### 原則 2: c3 update は触らない
|
|
154
227
|
|
|
@@ -203,7 +276,7 @@ C3 の wheel 配布除外パターンは **3 つのファイルに分散して
|
|
|
203
276
|
|
|
204
277
|
| ファイル | 役割 | 変更が必要な場面 |
|
|
205
278
|
|---|---|---|
|
|
206
|
-
| `.gitignore` | git
|
|
279
|
+
| `.gitignore` | git 追跡から除外(配布元リポジトリの実行時データ・開発ログを管理外に。利用先の推奨方針は §1-2 の注記を参照) | 配布元で新たに除外すべきファイルが増えた時 |
|
|
207
280
|
| `src/c3/_excludes.py` | `c3 init` / `c3 update` 時の除外判断(Python 実装) | 配布先への配布/非配布を変更する時 |
|
|
208
281
|
| `hatch_build.py` | wheel ビルド時の除外判断(`_excludes.py` の重複定義) | `_excludes.py` を変更した時(必ず同期) |
|
|
209
282
|
|
|
@@ -265,11 +338,26 @@ C3 の wheel 配布除外パターンは **3 つのファイルに分散して
|
|
|
265
338
|
または「なぜ promoted/ は更新されないのか」と疑問に思う。
|
|
266
339
|
|
|
267
340
|
**原因**: `.claude/rules/promoted/index.md` は **ユーザー所有領域**。
|
|
268
|
-
c3 update が上書きすると利用先で `/promote-pattern`
|
|
341
|
+
c3 update が上書きすると利用先で `/promote-pattern` が追記した目録行が消失するため、
|
|
342
|
+
`_excludes.py` の **`INIT_ONLY_PATTERNS`** で「初回配置のみ・update は触らない」に指定している(§3 カテゴリ #5 参照)。
|
|
343
|
+
|
|
344
|
+
> **経緯(v2.58.0)**: それ以前は「意図的に除外している」と書きながら実装が伴っておらず
|
|
345
|
+
> (`should_skip("rules/promoted/index.md")` は `False`)、実際には `c3 update` の上書き対象だった。
|
|
346
|
+
> 原因は `should_skip` が「wheel 収録 / init 配置 / update 上書き」の 3 つを 1 つの真偽値で兼ねており、
|
|
347
|
+
> 「init では配置するが update では触らない」を表現できなかったこと。`INIT_ONLY_PATTERNS` で
|
|
348
|
+
> 3 番目の軸を分離して解消した。
|
|
269
349
|
|
|
270
350
|
**対処**: `promoted/` への変更は `c3 update` に委ねず、手動または `/promote-pattern` skill で管理する。
|
|
271
351
|
C3 side で `promoted/` の雛形を更新した場合は、リリースノートで手動マージ手順を案内する。
|
|
272
352
|
|
|
353
|
+
**削除経路**: INIT_ONLY ファイルは `_walk_diff` だけでなく `.claude/deletions.txt` 経由の削除からも保護される。
|
|
354
|
+
配布元が誤って `rules/promoted/index.md` を `deletions.txt` に追記しても、利用先ユーザーが育てた
|
|
355
|
+
目録行が完全削除されることはない(セーフガード step 13 で弾かれ、warning が出力される)。
|
|
356
|
+
|
|
357
|
+
**意図的廃止の場合**: INIT_ONLY をユーザーの同意のもと廃止したい場合、`deletions.txt` は使えない
|
|
358
|
+
(セーフガード構造上、INIT_ONLY は削除不能に設計)。代わりにリリースノートで「利用先ユーザーが
|
|
359
|
+
手動で削除するよう案内する」手順を記載する(c3 update では自動削除できない制約を明記)。
|
|
360
|
+
|
|
273
361
|
### 落とし穴 4: `deletions.txt` 自身は削除されない・絶対パスは無視される
|
|
274
362
|
|
|
275
363
|
**症状**: `deletions.txt` が利用先に残り続ける / 絶対パスを書いたのに削除されない / `..` 含みパスが効かない。
|
|
@@ -285,6 +373,12 @@ C3 side で `promoted/` の雛形を更新した場合は、リリースノー
|
|
|
285
373
|
- シンボリックリンク経由のパス
|
|
286
374
|
- ディレクトリ(ファイルのみサポート)
|
|
287
375
|
- `\` (バックスラッシュ)を含むパス
|
|
376
|
+
- INIT_ONLY ファイル(`.gitignore` / `rules/promoted/index.md`)。判定は解決済み実体パスに対して
|
|
377
|
+
成分正規化(各パートに `.lower().rstrip('. ')` 適用)して行われるため、表記ゆれ(二重スラッシュ
|
|
378
|
+
`rules//promoted/`・末尾スラッシュ `rules/promoted/index.md/`・大小違い `RULES/PROMOTED/INDEX.MD` や
|
|
379
|
+
`.GITIGNORE`)でも全 OS で保護される。実在しないファイルに対しても保護が成立する(従来は実体ケース
|
|
380
|
+
正準化に依存していたが、実体がない場合は `Path.resolve()` はケース正準化を行わないため、全 OS 対応には
|
|
381
|
+
成分正規化が必須。また Unicode 正規化形の差(macOS の NFD など)は `.lower()` では畳まれないという制限あり)
|
|
288
382
|
|
|
289
383
|
**対処**:
|
|
290
384
|
- 削除候補に書くパスは「.claude/ からの相対 POSIX パス」のみ(例: `agents/foo.md`)
|
|
@@ -36,6 +36,8 @@ DEBUG_ENV = "C3_HOOK_DEBUG"
|
|
|
36
36
|
_CONTROL_CHARS_RE = re.compile(r"[\x00-\x1f\x7f-\x9f]")
|
|
37
37
|
|
|
38
38
|
|
|
39
|
+
# NOTE: 同一ロジックが src/c3/cli_update.py::_validate_deletion_path の step 13 に
|
|
40
|
+
# 複製されている(import 経路がないため)。変更時は両方を揃えること。
|
|
39
41
|
def norm_component(s: str) -> str:
|
|
40
42
|
"""パス成分を正規化する(ケース非依存化・末尾ドット/スペース除去)。
|
|
41
43
|
|