@takuma-hirai/hirai-method 0.1.0
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.
- package/.claude/.stale-harness-state/last-check +0 -0
- package/.claude/CommonRules.md +121 -0
- package/.claude/agents/01-core-development/api-designer.md +237 -0
- package/.claude/agents/01-core-development/backend-developer.md +222 -0
- package/.claude/agents/01-core-development/design-bridge.md +127 -0
- package/.claude/agents/01-core-development/electron-pro.md +240 -0
- package/.claude/agents/01-core-development/frontend-developer.md +133 -0
- package/.claude/agents/01-core-development/fullstack-developer.md +235 -0
- package/.claude/agents/01-core-development/graphql-architect.md +238 -0
- package/.claude/agents/01-core-development/microservices-architect.md +239 -0
- package/.claude/agents/01-core-development/mobile-developer.md +283 -0
- package/.claude/agents/01-core-development/ui-designer.md +174 -0
- package/.claude/agents/01-core-development/websocket-engineer.md +150 -0
- package/.claude/agents/03-infrastructure/azure-infra-engineer.md +53 -0
- package/.claude/agents/03-infrastructure/cloud-architect.md +277 -0
- package/.claude/agents/03-infrastructure/database-administrator.md +287 -0
- package/.claude/agents/03-infrastructure/deployment-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/devops-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/devops-incident-responder.md +287 -0
- package/.claude/agents/03-infrastructure/docker-expert.md +278 -0
- package/.claude/agents/03-infrastructure/incident-responder.md +287 -0
- package/.claude/agents/03-infrastructure/kubernetes-specialist.md +287 -0
- package/.claude/agents/03-infrastructure/network-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/platform-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/security-engineer.md +277 -0
- package/.claude/agents/03-infrastructure/sre-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/terraform-engineer.md +287 -0
- package/.claude/agents/03-infrastructure/terragrunt-expert.md +307 -0
- package/.claude/agents/03-infrastructure/windows-infra-admin.md +52 -0
- package/.claude/agents/04-quality-security/accessibility-tester.md +277 -0
- package/.claude/agents/04-quality-security/ad-security-reviewer.md +56 -0
- package/.claude/agents/04-quality-security/ai-writing-auditor.md +77 -0
- package/.claude/agents/04-quality-security/architect-reviewer.md +287 -0
- package/.claude/agents/04-quality-security/chaos-engineer.md +277 -0
- package/.claude/agents/04-quality-security/code-reviewer.md +287 -0
- package/.claude/agents/04-quality-security/compliance-auditor.md +277 -0
- package/.claude/agents/04-quality-security/debugger.md +287 -0
- package/.claude/agents/04-quality-security/error-detective.md +287 -0
- package/.claude/agents/04-quality-security/penetration-tester.md +287 -0
- package/.claude/agents/04-quality-security/performance-engineer.md +287 -0
- package/.claude/agents/04-quality-security/powershell-security-hardening.md +54 -0
- package/.claude/agents/04-quality-security/qa-expert.md +287 -0
- package/.claude/agents/04-quality-security/security-auditor.md +287 -0
- package/.claude/agents/04-quality-security/test-automator.md +287 -0
- package/.claude/agents/04-quality-security/ui-ux-tester.md +234 -0
- package/.claude/agents/06-developer-experience/build-engineer.md +286 -0
- package/.claude/agents/06-developer-experience/cli-developer.md +286 -0
- package/.claude/agents/06-developer-experience/dependency-manager.md +286 -0
- package/.claude/agents/06-developer-experience/documentation-engineer.md +276 -0
- package/.claude/agents/06-developer-experience/dx-optimizer.md +286 -0
- package/.claude/agents/06-developer-experience/git-workflow-manager.md +286 -0
- package/.claude/agents/06-developer-experience/legacy-modernizer.md +286 -0
- package/.claude/agents/06-developer-experience/mcp-developer.md +275 -0
- package/.claude/agents/06-developer-experience/powershell-module-architect.md +58 -0
- package/.claude/agents/06-developer-experience/powershell-ui-architect.md +135 -0
- package/.claude/agents/06-developer-experience/readme-generator.md +238 -0
- package/.claude/agents/06-developer-experience/refactoring-specialist.md +286 -0
- package/.claude/agents/06-developer-experience/slack-expert.md +232 -0
- package/.claude/agents/06-developer-experience/tooling-engineer.md +286 -0
- package/.claude/agents/09-meta-orchestration/agent-installer.md +97 -0
- package/.claude/agents/09-meta-orchestration/agent-organizer.md +287 -0
- package/.claude/agents/09-meta-orchestration/codebase-orchestrator.md +249 -0
- package/.claude/agents/09-meta-orchestration/context-manager.md +287 -0
- package/.claude/agents/09-meta-orchestration/error-coordinator.md +287 -0
- package/.claude/agents/09-meta-orchestration/it-ops-orchestrator.md +60 -0
- package/.claude/agents/09-meta-orchestration/knowledge-synthesizer.md +287 -0
- package/.claude/agents/09-meta-orchestration/multi-agent-coordinator.md +287 -0
- package/.claude/agents/09-meta-orchestration/performance-monitor.md +287 -0
- package/.claude/agents/09-meta-orchestration/task-distributor.md +287 -0
- package/.claude/agents/09-meta-orchestration/workflow-orchestrator.md +287 -0
- package/.claude/agents/10-research-analysis/competitive-analyst.md +287 -0
- package/.claude/agents/10-research-analysis/data-researcher.md +287 -0
- package/.claude/agents/10-research-analysis/market-researcher.md +287 -0
- package/.claude/agents/10-research-analysis/project-idea-validator.md +269 -0
- package/.claude/agents/10-research-analysis/research-analyst.md +287 -0
- package/.claude/agents/10-research-analysis/scientific-literature-researcher.md +151 -0
- package/.claude/agents/10-research-analysis/search-specialist.md +287 -0
- package/.claude/agents/10-research-analysis/trend-analyst.md +287 -0
- package/.claude/archive/README.md +47 -0
- package/.claude/archive/agents/02-language-specialists/angular-architect.md +287 -0
- package/.claude/archive/agents/02-language-specialists/cpp-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/csharp-developer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/django-developer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/dotnet-core-expert.md +287 -0
- package/.claude/archive/agents/02-language-specialists/dotnet-framework-4.8-expert.md +306 -0
- package/.claude/archive/agents/02-language-specialists/elixir-expert.md +311 -0
- package/.claude/archive/agents/02-language-specialists/expo-react-native-expert.md +268 -0
- package/.claude/archive/agents/02-language-specialists/fastapi-developer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/flutter-expert.md +287 -0
- package/.claude/archive/agents/02-language-specialists/golang-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/java-architect.md +287 -0
- package/.claude/archive/agents/02-language-specialists/javascript-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/kotlin-specialist.md +287 -0
- package/.claude/archive/agents/02-language-specialists/laravel-specialist.md +287 -0
- package/.claude/archive/agents/02-language-specialists/nextjs-developer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/node-specialist.md +124 -0
- package/.claude/archive/agents/02-language-specialists/php-pro.md +287 -0
- package/.claude/archive/agents/02-language-specialists/powershell-5.1-expert.md +59 -0
- package/.claude/archive/agents/02-language-specialists/powershell-7-expert.md +57 -0
- package/.claude/archive/agents/02-language-specialists/python-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/rails-expert.md +358 -0
- package/.claude/archive/agents/02-language-specialists/react-specialist.md +287 -0
- package/.claude/archive/agents/02-language-specialists/rust-engineer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/spring-boot-engineer.md +287 -0
- package/.claude/archive/agents/02-language-specialists/sql-pro.md +287 -0
- package/.claude/archive/agents/02-language-specialists/swift-expert.md +287 -0
- package/.claude/archive/agents/02-language-specialists/symfony-specialist.md +354 -0
- package/.claude/archive/agents/02-language-specialists/typescript-pro.md +277 -0
- package/.claude/archive/agents/02-language-specialists/vue-expert.md +287 -0
- package/.claude/archive/agents/05-data-ai/ai-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/data-analyst.md +277 -0
- package/.claude/archive/agents/05-data-ai/data-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/data-scientist.md +287 -0
- package/.claude/archive/agents/05-data-ai/database-optimizer.md +287 -0
- package/.claude/archive/agents/05-data-ai/llm-architect.md +287 -0
- package/.claude/archive/agents/05-data-ai/machine-learning-engineer.md +277 -0
- package/.claude/archive/agents/05-data-ai/ml-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/mlops-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/nlp-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/postgres-pro.md +287 -0
- package/.claude/archive/agents/05-data-ai/prompt-engineer.md +287 -0
- package/.claude/archive/agents/05-data-ai/reinforcement-learning-engineer.md +277 -0
- package/.claude/archive/agents/07-specialized-domains/api-documenter.md +277 -0
- package/.claude/archive/agents/07-specialized-domains/blockchain-developer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/embedded-systems.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/fintech-engineer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/game-developer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/healthcare-admin.md +199 -0
- package/.claude/archive/agents/07-specialized-domains/iot-engineer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/m365-admin.md +48 -0
- package/.claude/archive/agents/07-specialized-domains/mobile-app-developer.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/payment-integration.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/quant-analyst.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/risk-manager.md +287 -0
- package/.claude/archive/agents/07-specialized-domains/seo-specialist.md +184 -0
- package/.claude/archive/agents/08-business-product/business-analyst.md +287 -0
- package/.claude/archive/agents/08-business-product/content-marketer.md +287 -0
- package/.claude/archive/agents/08-business-product/customer-success-manager.md +287 -0
- package/.claude/archive/agents/08-business-product/legal-advisor.md +287 -0
- package/.claude/archive/agents/08-business-product/license-engineer.md +295 -0
- package/.claude/archive/agents/08-business-product/product-manager.md +287 -0
- package/.claude/archive/agents/08-business-product/project-manager.md +287 -0
- package/.claude/archive/agents/08-business-product/sales-engineer.md +287 -0
- package/.claude/archive/agents/08-business-product/scrum-master.md +287 -0
- package/.claude/archive/agents/08-business-product/technical-writer.md +287 -0
- package/.claude/archive/agents/08-business-product/ux-researcher.md +287 -0
- package/.claude/archive/agents/08-business-product/wordpress-master.md +316 -0
- package/.claude/archive/skills/competitive-ads-extractor/SKILL.md +293 -0
- package/.claude/archive/skills/developer-growth-analysis/SKILL.md +322 -0
- package/.claude/archive/skills/document-docx/LICENSE.txt +30 -0
- package/.claude/archive/skills/document-docx/SKILL.md +197 -0
- package/.claude/archive/skills/document-docx/docx-js.md +350 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/pack.py +159 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/unpack.py +29 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validate.py +69 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/__init__.py +15 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/base.py +951 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/docx.py +274 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/pptx.py +315 -0
- package/.claude/archive/skills/document-docx/ooxml/scripts/validation/redlining.py +279 -0
- package/.claude/archive/skills/document-docx/ooxml.md +610 -0
- package/.claude/archive/skills/document-docx/scripts/__init__.py +1 -0
- package/.claude/archive/skills/document-docx/scripts/document.py +1276 -0
- package/.claude/archive/skills/document-docx/scripts/templates/comments.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/templates/commentsExtended.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/templates/commentsExtensible.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/templates/commentsIds.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/templates/people.xml +3 -0
- package/.claude/archive/skills/document-docx/scripts/utilities.py +374 -0
- package/.claude/archive/skills/document-pdf/LICENSE.txt +30 -0
- package/.claude/archive/skills/document-pdf/SKILL.md +294 -0
- package/.claude/archive/skills/document-pdf/forms.md +205 -0
- package/.claude/archive/skills/document-pdf/reference.md +612 -0
- package/.claude/archive/skills/document-pdf/scripts/check_bounding_boxes.py +70 -0
- package/.claude/archive/skills/document-pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/.claude/archive/skills/document-pdf/scripts/check_fillable_fields.py +12 -0
- package/.claude/archive/skills/document-pdf/scripts/convert_pdf_to_images.py +35 -0
- package/.claude/archive/skills/document-pdf/scripts/create_validation_image.py +41 -0
- package/.claude/archive/skills/document-pdf/scripts/extract_form_field_info.py +152 -0
- package/.claude/archive/skills/document-pdf/scripts/fill_fillable_fields.py +114 -0
- package/.claude/archive/skills/document-pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/.claude/archive/skills/document-pptx/LICENSE.txt +30 -0
- package/.claude/archive/skills/document-pptx/SKILL.md +484 -0
- package/.claude/archive/skills/document-pptx/html2pptx.md +625 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/pack.py +159 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/unpack.py +29 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validate.py +69 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/base.py +951 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/docx.py +274 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/.claude/archive/skills/document-pptx/ooxml.md +427 -0
- package/.claude/archive/skills/document-pptx/scripts/html2pptx.js +979 -0
- package/.claude/archive/skills/document-pptx/scripts/inventory.py +1020 -0
- package/.claude/archive/skills/document-pptx/scripts/rearrange.py +231 -0
- package/.claude/archive/skills/document-pptx/scripts/replace.py +385 -0
- package/.claude/archive/skills/document-pptx/scripts/thumbnail.py +450 -0
- package/.claude/archive/skills/document-xlsx/LICENSE.txt +30 -0
- package/.claude/archive/skills/document-xlsx/SKILL.md +289 -0
- package/.claude/archive/skills/document-xlsx/recalc.py +178 -0
- package/.claude/archive/skills/image-enhancer/SKILL.md +99 -0
- package/.claude/archive/skills/meeting-insights-analyzer/SKILL.md +327 -0
- package/.claude/archive/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/.claude/archive/skills/slack-gif-creator/SKILL.md +646 -0
- package/.claude/archive/skills/slack-gif-creator/core/color_palettes.py +302 -0
- package/.claude/archive/skills/slack-gif-creator/core/easing.py +230 -0
- package/.claude/archive/skills/slack-gif-creator/core/frame_composer.py +469 -0
- package/.claude/archive/skills/slack-gif-creator/core/gif_builder.py +246 -0
- package/.claude/archive/skills/slack-gif-creator/core/typography.py +357 -0
- package/.claude/archive/skills/slack-gif-creator/core/validators.py +264 -0
- package/.claude/archive/skills/slack-gif-creator/core/visual_effects.py +494 -0
- package/.claude/archive/skills/slack-gif-creator/requirements.txt +4 -0
- package/.claude/archive/skills/slack-gif-creator/templates/bounce.py +106 -0
- package/.claude/archive/skills/slack-gif-creator/templates/explode.py +331 -0
- package/.claude/archive/skills/slack-gif-creator/templates/fade.py +329 -0
- package/.claude/archive/skills/slack-gif-creator/templates/flip.py +291 -0
- package/.claude/archive/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
- package/.claude/archive/skills/slack-gif-creator/templates/morph.py +329 -0
- package/.claude/archive/skills/slack-gif-creator/templates/move.py +293 -0
- package/.claude/archive/skills/slack-gif-creator/templates/pulse.py +268 -0
- package/.claude/archive/skills/slack-gif-creator/templates/shake.py +127 -0
- package/.claude/archive/skills/slack-gif-creator/templates/slide.py +291 -0
- package/.claude/archive/skills/slack-gif-creator/templates/spin.py +269 -0
- package/.claude/archive/skills/slack-gif-creator/templates/wiggle.py +300 -0
- package/.claude/archive/skills/slack-gif-creator/templates/zoom.py +312 -0
- package/.claude/archive/skills/twitter-algorithm-optimizer/SKILL.md +327 -0
- package/.claude/archive/skills/video-downloader/SKILL.md +99 -0
- package/.claude/archive/skills/video-downloader/scripts/download_video.py +145 -0
- package/.claude/bash-whitelist-requests/2026-05-28-grep-find-rg.md +68 -0
- package/.claude/bash-whitelist-requests/2026-06-01-readonly-filters.md +76 -0
- package/.claude/bash-whitelist.txt +124 -0
- package/.claude/commands/agent-introspect.md +89 -0
- package/.claude/commands/apply-rules.md +363 -0
- package/.claude/commands/approve-design.md +219 -0
- package/.claude/commands/approve-org-money.md +267 -0
- package/.claude/commands/build.md +234 -0
- package/.claude/commands/commit.md +97 -0
- package/.claude/commands/context-fetch.md +113 -0
- package/.claude/commands/create-tool.md +496 -0
- package/.claude/commands/design-review.md +138 -0
- package/.claude/commands/design.md +807 -0
- package/.claude/commands/discharge-byproduct.md +208 -0
- package/.claude/commands/doc-review.md +165 -0
- package/.claude/commands/document-pair.md +76 -0
- package/.claude/commands/error-triage.md +435 -0
- package/.claude/commands/eval.md +70 -0
- package/.claude/commands/evolve.md +49 -0
- package/.claude/commands/finish-task.md +105 -0
- package/.claude/commands/gan-build.md +91 -0
- package/.claude/commands/gan-design.md +82 -0
- package/.claude/commands/gate-bypass.md +77 -0
- package/.claude/commands/gate-clear.md +45 -0
- package/.claude/commands/gate-status.md +46 -0
- package/.claude/commands/harness-audit.md +151 -0
- package/.claude/commands/hearing.md +138 -0
- package/.claude/commands/impact-check.md +486 -0
- package/.claude/commands/init-tasks.md +49 -0
- package/.claude/commands/instinct-export.md +47 -0
- package/.claude/commands/instinct-import.md +41 -0
- package/.claude/commands/instinct-status.md +43 -0
- package/.claude/commands/investigate.md +547 -0
- package/.claude/commands/learn.md +55 -0
- package/.claude/commands/lint-rules.md +400 -0
- package/.claude/commands/mode.md +58 -0
- package/.claude/commands/modify-feature.md +209 -0
- package/.claude/commands/module-review.md +149 -0
- package/.claude/commands/move-section.md +67 -0
- package/.claude/commands/new-draft.md +67 -0
- package/.claude/commands/new-feature.md +286 -0
- package/.claude/commands/new-task.md +156 -0
- package/.claude/commands/notification.md +107 -0
- package/.claude/commands/pm-start.md +119 -0
- package/.claude/commands/projects.md +32 -0
- package/.claude/commands/promote.md +43 -0
- package/.claude/commands/rasis-report.md +1323 -0
- package/.claude/commands/release-note.md +130 -0
- package/.claude/commands/reply-watch.md +149 -0
- package/.claude/commands/requirement.md +352 -0
- package/.claude/commands/resume-state.md +187 -0
- package/.claude/commands/reviewpr.md +118 -0
- package/.claude/commands/save-state.md +100 -0
- package/.claude/commands/sentry-pr.md +157 -0
- package/.claude/commands/start-task.md +87 -0
- package/.claude/commands/system-review.md +147 -0
- package/.claude/commands/task-bypass.md +70 -0
- package/.claude/commands/task-estimate.md +100 -0
- package/.claude/commands/template-apply.md +89 -0
- package/.claude/commands/test-design.md +116 -0
- package/.claude/commands/transfer-mismatch.md +317 -0
- package/.claude/commands/verify.md +51 -0
- package/.claude/evals/grader-loop-mode-autonomy.sh +165 -0
- package/.claude/evals/grader-system-reminder-attention.sh +99 -0
- package/.claude/evals/loop-mode-autonomy.md +121 -0
- package/.claude/evals/loop-mode-autonomy.results.template.md +133 -0
- package/.claude/evals/system-reminder-attention.md +123 -0
- package/.claude/evals/system-reminder-attention.results.template.md +93 -0
- package/.claude/evals/system-reminder-attention.runner.md +353 -0
- package/.claude/harness-config.local.yml +48 -0
- package/.claude/harness-config.yml +534 -0
- package/.claude/hooks/agent-marker-clear.sh +43 -0
- package/.claude/hooks/agent-marker-set.sh +40 -0
- package/.claude/hooks/agent-router-suggest.sh +123 -0
- package/.claude/hooks/autonomous-action-guard.sh +242 -0
- package/.claude/hooks/byproduct-discharge-guard.sh +128 -0
- package/.claude/hooks/check-md-mermaid.sh +144 -0
- package/.claude/hooks/check-required-env.sh +95 -0
- package/.claude/hooks/check-serena-mcp.sh +123 -0
- package/.claude/hooks/confidence-gate.sh +139 -0
- package/.claude/hooks/context-budget.sh +233 -0
- package/.claude/hooks/delegation-guard.sh +99 -0
- package/.claude/hooks/dispatcher-manifest.tsv +38 -0
- package/.claude/hooks/draft-flow-guard.sh +304 -0
- package/.claude/hooks/failure-loop-detect.sh +139 -0
- package/.claude/hooks/gateguard.sh +209 -0
- package/.claude/hooks/improvement-proposal.sh +112 -0
- package/.claude/hooks/init-tasks-on-start.sh +34 -0
- package/.claude/hooks/lib/bypass-logger.sh +82 -0
- package/.claude/hooks/lib/confidence-gate/bypass.sh +48 -0
- package/.claude/hooks/lib/confidence-gate/extract.sh +99 -0
- package/.claude/hooks/lib/confidence-gate/major-agent-filter.sh +59 -0
- package/.claude/hooks/lib/confidence-gate/messages.sh +53 -0
- package/.claude/hooks/lib/config-loader.sh +784 -0
- package/.claude/hooks/lib/delegation-guard/bash-whitelist.sh +323 -0
- package/.claude/hooks/lib/delegation-guard/git-deny.sh +188 -0
- package/.claude/hooks/lib/delegation-guard/protected-paths.sh +105 -0
- package/.claude/hooks/lib/delegation-guard/subagent-detect.sh +40 -0
- package/.claude/hooks/lib/dispatcher-core.sh +454 -0
- package/.claude/hooks/lib/improvement-proposal/aggregate.py +466 -0
- package/.claude/hooks/lib/improvement-proposal/cache.sh +78 -0
- package/.claude/hooks/lib/mode-loader.sh +80 -0
- package/.claude/hooks/lib/next-actions-parser.sh +153 -0
- package/.claude/hooks/lib/project-root.sh +60 -0
- package/.claude/hooks/list-md-plan-first-reminder.sh +143 -0
- package/.claude/hooks/loop-auto-progress-reminder.sh +108 -0
- package/.claude/hooks/loop-confirmation-detector.sh +241 -0
- package/.claude/hooks/mode-asana-prompt.sh +61 -0
- package/.claude/hooks/mode-enforce.sh +57 -0
- package/.claude/hooks/mode-session-start.sh +93 -0
- package/.claude/hooks/next-actions-surface.sh +136 -0
- package/.claude/hooks/notification-dispatcher.sh +9 -0
- package/.claude/hooks/notify.sh +27 -0
- package/.claude/hooks/parallel-subagent-reminder.sh +469 -0
- package/.claude/hooks/post-tool-use-dispatcher.sh +9 -0
- package/.claude/hooks/pre-tool-use-dispatcher.sh +9 -0
- package/.claude/hooks/reviewer-count-guard.sh +313 -0
- package/.claude/hooks/session-help-surface.sh +192 -0
- package/.claude/hooks/session-start-dispatcher.sh +9 -0
- package/.claude/hooks/session-start-wrapper.sh +156 -0
- package/.claude/hooks/stale-harness-detect.sh +422 -0
- package/.claude/hooks/stop-dispatcher.sh +9 -0
- package/.claude/hooks/stop.sh +25 -0
- package/.claude/hooks/subagent-stop-dispatcher.sh +9 -0
- package/.claude/hooks/task-rule-guard.sh +317 -0
- package/.claude/hooks/tests/run-tests.sh +23 -0
- package/.claude/hooks/tests/test-agent-marker-warn.sh +86 -0
- package/.claude/hooks/tests/test-check-required-env.sh +138 -0
- package/.claude/hooks/tests/test-confidence-gate.sh +170 -0
- package/.claude/hooks/tests/test-config-env-override.sh +220 -0
- package/.claude/hooks/tests/test-gate-disable.sh +118 -0
- package/.claude/hooks/tests/test-improvement-proposal.sh +284 -0
- package/.claude/hooks/tool-call-slip-detector.sh +188 -0
- package/.claude/hooks/user-prompt-submit-dispatcher.sh +9 -0
- package/.claude/hooks/why-x5-reminder.sh +45 -0
- package/.claude/hooks/why-x5-violation-detect.sh +152 -0
- package/.claude/hooks/workflow-guard.sh +263 -0
- package/.claude/mode.yml +28 -0
- package/.claude/project-rules/development-process.md +8 -0
- package/.claude/project-rules/git-workflow.md +8 -0
- package/.claude/project-rules/modes.md +8 -0
- package/.claude/project-rules/self-improvement.md +8 -0
- package/.claude/project-rules/task-management.md +8 -0
- package/.claude/project-rules/why-x5-output.md +8 -0
- package/.claude/project-rules/workflow.md +8 -0
- package/.claude/rules/development-process.md +293 -0
- package/.claude/rules/git-workflow.md +71 -0
- package/.claude/rules/modes.md +189 -0
- package/.claude/rules/self-improvement.md +76 -0
- package/.claude/rules/task-management.md +261 -0
- package/.claude/rules/why-x5-output.md +97 -0
- package/.claude/rules/workflow.md +157 -0
- package/.claude/rules-details/README.md +67 -0
- package/.claude/rules-details/development-process/confidence-gate.md +22 -0
- package/.claude/rules-details/development-process/cross-repo-write.md +35 -0
- package/.claude/rules-details/development-process/delegation-requirements.md +158 -0
- package/.claude/rules-details/development-process/harness-sync.md +21 -0
- package/.claude/rules-details/development-process/origin.md +13 -0
- package/.claude/rules-details/development-process/parallelization-origin.md +22 -0
- package/.claude/rules-details/development-process/research-reuse.md +22 -0
- package/.claude/rules-details/development-process/staging-strategy.md +47 -0
- package/.claude/rules-details/modes/artifacts.md +34 -0
- package/.claude/rules-details/modes/compliance-items.md +120 -0
- package/.claude/rules-details/modes/five-layer-enforcement.md +46 -0
- package/.claude/rules-details/modes/mode-hooks.md +51 -0
- package/.claude/rules-details/modes/origin.md +17 -0
- package/.claude/rules-details/self-improvement/l4-mechanics.md +36 -0
- package/.claude/rules-details/self-improvement/origin.md +8 -0
- package/.claude/rules-details/self-improvement/related-skills.md +35 -0
- package/.claude/rules-details/self-improvement/when-to-use-layers.md +39 -0
- package/.claude/rules-details/task-management/hook-enforcement.md +25 -0
- package/.claude/rules-details/task-management/mandatory-reading.md +20 -0
- package/.claude/rules-details/task-management/origin.md +12 -0
- package/.claude/rules-details/task-management/parking-lot.md +26 -0
- package/.claude/rules-details/task-management/plan-first.md +44 -0
- package/.claude/rules-details/task-management/six-articles.md +68 -0
- package/.claude/rules-details/task-management/task-migration.md +16 -0
- package/.claude/rules-details/task-management/ui-detection.md +11 -0
- package/.claude/rules-details/why-x5-output/examples.md +41 -0
- package/.claude/rules-details/why-x5-output/feedback-memory.md +14 -0
- package/.claude/rules-details/why-x5-output/origin.md +10 -0
- package/.claude/rules-details/why-x5-output/v1-v10-history.md +19 -0
- package/.claude/rules-details/workflow/10-stage.md +43 -0
- package/.claude/rules-details/workflow/14-stage.md +52 -0
- package/.claude/rules-details/workflow/byproduct-discharge.md +39 -0
- package/.claude/rules-details/workflow/draft-flow-guard.md +31 -0
- package/.claude/rules-details/workflow/fan-out.md +70 -0
- package/.claude/rules-details/workflow/mece-20.md +36 -0
- package/.claude/rules-details/workflow/origin.md +14 -0
- package/.claude/rules-details/workflow/refactoring.md +48 -0
- package/.claude/rules-details/workflow/related-skills.md +22 -0
- package/.claude/rules-details/workflow/reviewer-prompt.md +100 -0
- package/.claude/rules-details/workflow/session-persistence.md +46 -0
- package/.claude/rules-details/workflow/workflow-guard.md +36 -0
- package/.claude/scripts/__pycache__/harness-audit.cpython-313.pyc +0 -0
- package/.claude/scripts/agent-stocktake.py +421 -0
- package/.claude/scripts/check-md-mermaid.mjs +138 -0
- package/.claude/scripts/generate-settings.sh +0 -0
- package/.claude/scripts/harness-audit.py +1547 -0
- package/.claude/scripts/hc-config.sh +2265 -0
- package/.claude/scripts/init-tasks.sh +117 -0
- package/.claude/scripts/lib/enforcement-matrix-parse.sh +81 -0
- package/.claude/scripts/lib/hc-config-metadata.sh +190 -0
- package/.claude/scripts/lib/hc-config-web-server.js +1528 -0
- package/.claude/scripts/lib/hc-config-web-ui/app.js +1054 -0
- package/.claude/scripts/lib/hc-config-web-ui/index.html +130 -0
- package/.claude/scripts/lib/hc-config-web-ui/style.css +522 -0
- package/.claude/scripts/new-task-helper.sh +432 -0
- package/.claude/scripts/observe-repair.sh +437 -0
- package/.claude/scripts/observe-rotate.sh +311 -0
- package/.claude/scripts/statusline.sh +239 -0
- package/.claude/settings.generated.preview.json +211 -0
- package/.claude/settings.json +215 -0
- package/.claude/settings.local.example.json +20 -0
- package/.claude/settings.local.json +36 -0
- package/.claude/skills/agent-introspection-debugging/SKILL.md +123 -0
- package/.claude/skills/agent-router/README.md +137 -0
- package/.claude/skills/agent-router/SKILL.md +74 -0
- package/.claude/skills/agent-router/dispatch-table.yml +352 -0
- package/.claude/skills/agent-router/router.py +1086 -0
- package/.claude/skills/agent-router/samples/representative_prompts.txt +24 -0
- package/.claude/skills/agent-router/tests/__init__.py +0 -0
- package/.claude/skills/agent-router/tests/test_router.py +762 -0
- package/.claude/skills/artifacts-builder/LICENSE.txt +202 -0
- package/.claude/skills/artifacts-builder/SKILL.md +74 -0
- package/.claude/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/.claude/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/.claude/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/.claude/skills/brand-guidelines/LICENSE.txt +202 -0
- package/.claude/skills/brand-guidelines/SKILL.md +73 -0
- package/.claude/skills/canvas-design/LICENSE.txt +202 -0
- package/.claude/skills/canvas-design/SKILL.md +130 -0
- package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/.claude/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/.claude/skills/changelog-generator/SKILL.md +104 -0
- package/.claude/skills/check-md-mermaid/SKILL.md +62 -0
- package/.claude/skills/connect/SKILL.md +156 -0
- package/.claude/skills/connect-apps/SKILL.md +80 -0
- package/.claude/skills/content-research-writer/SKILL.md +538 -0
- package/.claude/skills/continuous-agent-loop/SKILL.md +187 -0
- package/.claude/skills/continuous-learning-v2/SKILL.md +238 -0
- package/.claude/skills/continuous-learning-v2/config.json +35 -0
- package/.claude/skills/continuous-learning-v2/hooks/observe.sh +333 -0
- package/.claude/skills/continuous-learning-v2/instinct-cli.py +406 -0
- package/.claude/skills/domain-name-brainstormer/SKILL.md +212 -0
- package/.claude/skills/eval-harness/SKILL.md +100 -0
- package/.claude/skills/eval-harness/swe-bench/README.md +80 -0
- package/.claude/skills/eval-harness/swe-bench/config.yml +29 -0
- package/.claude/skills/eval-harness/swe-bench/docker/Dockerfile +25 -0
- package/.claude/skills/eval-harness/swe-bench/docker/docker-compose.yml +18 -0
- package/.claude/skills/eval-harness/swe-bench/results/dry-run-2026-05-04.json +137 -0
- package/.claude/skills/eval-harness/swe-bench/results/dry-run-comparison-2026-05-04.md +112 -0
- package/.claude/skills/eval-harness/swe-bench/results/dry-run-improved-2026-05-04.json +165 -0
- package/.claude/skills/eval-harness/swe-bench/results/raw/astropy__astropy-12907.patch +12 -0
- package/.claude/skills/eval-harness/swe-bench/results/raw/astropy__astropy-12907.txt +322 -0
- package/.claude/skills/eval-harness/swe-bench/results/raw/astropy__astropy-12907.whole-file.txt +322 -0
- package/.claude/skills/eval-harness/swe-bench/runner.py +845 -0
- package/.claude/skills/eval-harness/swe-bench/scoring.py +298 -0
- package/.claude/skills/eval-harness/swe-bench/tasks/fetch_tasks.py +81 -0
- package/.claude/skills/eval-harness/swe-bench/tasks/lite-50.json +702 -0
- package/.claude/skills/file-organizer/SKILL.md +433 -0
- package/.claude/skills/gan-style-harness/SKILL.md +111 -0
- package/.claude/skills/gateguard/.gateguard.yml +47 -0
- package/.claude/skills/gateguard/SKILL.md +99 -0
- package/.claude/skills/internal-comms/LICENSE.txt +202 -0
- package/.claude/skills/internal-comms/SKILL.md +32 -0
- package/.claude/skills/internal-comms/examples/3p-updates.md +47 -0
- package/.claude/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/.claude/skills/internal-comms/examples/faq-answers.md +30 -0
- package/.claude/skills/internal-comms/examples/general-comms.md +16 -0
- package/.claude/skills/invoice-organizer/SKILL.md +446 -0
- package/.claude/skills/karpathy-guidelines/SKILL.md +67 -0
- package/.claude/skills/langsmith-fetch/SKILL.md +485 -0
- package/.claude/skills/lead-research-assistant/SKILL.md +199 -0
- package/.claude/skills/mcp-builder/LICENSE.txt +202 -0
- package/.claude/skills/mcp-builder/SKILL.md +328 -0
- package/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
- package/.claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/.claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
- package/.claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
- package/.claude/skills/mcp-builder/scripts/connections.py +151 -0
- package/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/.claude/skills/raffle-winner-picker/SKILL.md +159 -0
- package/.claude/skills/repo-map/README.md +125 -0
- package/.claude/skills/repo-map/SKILL.md +128 -0
- package/.claude/skills/repo-map/examples/sample-output.md +1194 -0
- package/.claude/skills/repo-map/repo-map.py +715 -0
- package/.claude/skills/salesforce-e2e-testing/SKILL.md +116 -0
- package/.claude/skills/salesforce-e2e-testing/catalog-template.md +161 -0
- package/.claude/skills/salesforce-e2e-testing/methodology.md +179 -0
- package/.claude/skills/salesforce-e2e-testing/observation-rules.md +280 -0
- package/.claude/skills/salesforce-e2e-testing/pattern-taxonomy.md +392 -0
- package/.claude/skills/salesforce-e2e-testing/procedure-template.md +376 -0
- package/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/.claude/skills/skill-creator/SKILL.md +209 -0
- package/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/.claude/skills/skill-share/SKILL.md +80 -0
- package/.claude/skills/tailored-resume-generator/SKILL.md +345 -0
- package/.claude/skills/template-skill/SKILL.md +6 -0
- package/.claude/skills/theme-factory/LICENSE.txt +202 -0
- package/.claude/skills/theme-factory/SKILL.md +59 -0
- package/.claude/skills/theme-factory/theme-showcase.pdf +0 -0
- package/.claude/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/.claude/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/.claude/skills/theme-factory/themes/desert-rose.md +19 -0
- package/.claude/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/.claude/skills/theme-factory/themes/golden-hour.md +19 -0
- package/.claude/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/.claude/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/.claude/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/.claude/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/.claude/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/.claude/skills/verification-loop/SKILL.md +129 -0
- package/.claude/skills/webapp-testing/LICENSE.txt +202 -0
- package/.claude/skills/webapp-testing/SKILL.md +96 -0
- package/.claude/skills/webapp-testing/examples/console_logging.py +35 -0
- package/.claude/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/.claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/.claude/skills/webapp-testing/scripts/with_server.py +106 -0
- package/.claude/templates/docs/draft/_DRAFT_TEMPLATE.md +162 -0
- package/.claude/templates/docs/draft/_TEST_DESIGN_TEMPLATE.md +76 -0
- package/.claude/templates/docs/tasks/_TASK_TEMPLATE.md +276 -0
- package/.claude/templates/docs/tasks/list.md +80 -0
- package/.claude/templates/docs/tasks/parking-lot.md +82 -0
- package/.claude/templates/settings.user-level.json.template +306 -0
- package/.claude/tests/SMOKE-CLASSIFICATION.md +199 -0
- package/.claude/tests/action-space-count-smoke.sh +130 -0
- package/.claude/tests/agent-router-suggest-wiring-smoke.sh +188 -0
- package/.claude/tests/audit-followups-smoke.sh +158 -0
- package/.claude/tests/autonomous-action-guard-relaxation-smoke.sh +479 -0
- package/.claude/tests/autonomous-action-guard-smoke.sh +187 -0
- package/.claude/tests/check-serena-mcp-smoke.sh +156 -0
- package/.claude/tests/common-rules-import-smoke.sh +209 -0
- package/.claude/tests/confidence-gate-smoke.sh +220 -0
- package/.claude/tests/config-feature-toggles-smoke.sh +389 -0
- package/.claude/tests/context-budget-smoke.sh +222 -0
- package/.claude/tests/custom-pm-commands-smoke.sh +93 -0
- package/.claude/tests/delegation-guard-code-smoke.sh +244 -0
- package/.claude/tests/delegation-guard-deny-layers-smoke.sh +356 -0
- package/.claude/tests/delegation-guard-readonly-filter-smoke.sh +205 -0
- package/.claude/tests/delegation-guard-search-whitelist-smoke.sh +152 -0
- package/.claude/tests/delegation-guard-segment-smoke.sh +109 -0
- package/.claude/tests/dispatcher-blocker-invariance-smoke.sh +700 -0
- package/.claude/tests/dispatcher-core-smoke.sh +452 -0
- package/.claude/tests/dispatcher-merge-matrix-smoke.sh +825 -0
- package/.claude/tests/dispatcher-success-stdout-smoke.sh +290 -0
- package/.claude/tests/draft-flow-guard-approved-dir-smoke.sh +234 -0
- package/.claude/tests/draft-flow-guard-smoke.sh +194 -0
- package/.claude/tests/dual-mode-portability-smoke.sh +131 -0
- package/.claude/tests/effective-hook-matrix-smoke.sh +261 -0
- package/.claude/tests/enforcement-mismatch-smoke.sh +263 -0
- package/.claude/tests/fixtures/cascade-sample.jsonl +9 -0
- package/.claude/tests/fixtures/next-actions/case-clean.md +14 -0
- package/.claude/tests/fixtures/next-actions/case-with-red.md +16 -0
- package/.claude/tests/fixtures/next-actions/case-with-yellow-only.md +14 -0
- package/.claude/tests/fixtures/normal-broken-scatter.jsonl +5 -0
- package/.claude/tests/fixtures/task-71/blocker-baseline.tsv +24 -0
- package/.claude/tests/fixtures/task-71/settings-inventory.tsv +37 -0
- package/.claude/tests/fixtures/transcript-50pct.jsonl +2 -0
- package/.claude/tests/fixtures/transcript-60pct.jsonl +2 -0
- package/.claude/tests/fixtures/transcript-80pct.jsonl +2 -0
- package/.claude/tests/fixtures/transcript-95pct.jsonl +2 -0
- package/.claude/tests/fixtures/workflow-guard/case-2-mid.json +21 -0
- package/.claude/tests/fixtures/workflow-guard/case-3-blocked.json +33 -0
- package/.claude/tests/fixtures/workflow-guard/case-4-clean.json +27 -0
- package/.claude/tests/fixtures/workflow-guard/case-8-modify.json +23 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-1.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-2.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-3.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-4.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-5.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-6.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-7.json +1 -0
- package/.claude/tests/fixtures/workflow-guard/inputs/case-8.json +1 -0
- package/.claude/tests/gateguard-smoke.sh +213 -0
- package/.claude/tests/git-deny-mainline-policy-smoke.sh +222 -0
- package/.claude/tests/harness-audit-c-batch-smoke.sh +270 -0
- package/.claude/tests/harness-audit-compare-smoke.sh +186 -0
- package/.claude/tests/harness-audit-pipeline-health-smoke.sh +326 -0
- package/.claude/tests/harness-config-local-smoke.sh +232 -0
- package/.claude/tests/hc-config-git-policy-smoke.sh +241 -0
- package/.claude/tests/hc-config-key-parity-smoke.sh +149 -0
- package/.claude/tests/hc-config-migration-smoke.sh +251 -0
- package/.claude/tests/hc-config-script-smoke.sh +1106 -0
- package/.claude/tests/hc-config-tui-smoke.sh +801 -0
- package/.claude/tests/hc-config-web-ui-smoke.sh +3224 -0
- package/.claude/tests/hook-cwd-robustness-smoke.sh +206 -0
- package/.claude/tests/hook-frequency-tweaks-smoke.sh +312 -0
- package/.claude/tests/improvement-proposal-cache-smoke.sh +238 -0
- package/.claude/tests/install-sh-overwrite-all-smoke.sh +274 -0
- package/.claude/tests/install-sh-regen-settings-smoke.sh +301 -0
- package/.claude/tests/install-sh-sync-drift-smoke.sh +285 -0
- package/.claude/tests/layer-b-context-isolation-smoke.sh +392 -0
- package/.claude/tests/list-md-plan-first-reminder-smoke.sh +313 -0
- package/.claude/tests/loop-auto-progress-smoke.sh +372 -0
- package/.claude/tests/loop-confirmation-detector-smoke.sh +674 -0
- package/.claude/tests/new-task-batch-update-smoke.sh +664 -0
- package/.claude/tests/next-actions-hooks-smoke.sh +283 -0
- package/.claude/tests/npx-cli-smoke.sh +696 -0
- package/.claude/tests/observe-flock-smoke.sh +223 -0
- package/.claude/tests/observe-jq-parse-smoke.sh +250 -0
- package/.claude/tests/observe-repair-smoke.sh +475 -0
- package/.claude/tests/observe-rotate-smoke.sh +428 -0
- package/.claude/tests/observe-subagent-stop-smoke.sh +476 -0
- package/.claude/tests/parallel-subagent-reminder-smoke.sh +918 -0
- package/.claude/tests/project-root-smoke.sh +140 -0
- package/.claude/tests/project-rules-protection-smoke.sh +199 -0
- package/.claude/tests/review-required-min-count-smoke.sh +286 -0
- package/.claude/tests/reviewer-count-guard-smoke.sh +490 -0
- package/.claude/tests/rule-architecture-smoke.sh +418 -0
- package/.claude/tests/rule-change-draft-flow-guard-smoke.sh +343 -0
- package/.claude/tests/run-all-smokes.sh +340 -0
- package/.claude/tests/session-help-surface-smoke.sh +224 -0
- package/.claude/tests/session-start-parallel-smoke.sh +165 -0
- package/.claude/tests/sessionstart-budget-smoke.sh +185 -0
- package/.claude/tests/sessionstart-footprint-smoke.sh +258 -0
- package/.claude/tests/settings-dispatcher-baseline-smoke.sh +709 -0
- package/.claude/tests/settings-generation-feature-pruning-smoke.sh +196 -0
- package/.claude/tests/stale-harness-detect-smoke.sh +974 -0
- package/.claude/tests/statusline-smoke.sh +180 -0
- package/.claude/tests/task-rule-guard-smoke.sh +656 -0
- package/.claude/tests/tool-call-slip-detector-smoke.sh +101 -0
- package/.claude/tests/wave-precheck-template-smoke.sh +159 -0
- package/.claude/tests/why-x5-violation-detect-smoke.sh +157 -0
- package/.claude/tests/workflow-guard-smoke.sh +266 -0
- package/CLAUDE.md +75 -0
- package/LICENSE +21 -0
- package/README.md +790 -0
- package/bin/cli.js +395 -0
- package/docs/INVENTORY.md +163 -0
- package/install.sh +769 -0
- package/package.json +25 -0
package/install.sh
ADDED
|
@@ -0,0 +1,769 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# 平井メソッド (hirai-method) — robust installer
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# ./install.sh <target-project-dir> [--update|--force|--overwrite-all] [--dry-run] [--no-mcp] [--no-docs]
|
|
6
|
+
#
|
|
7
|
+
# Modes (--update / --force / --overwrite-all are mutually exclusive):
|
|
8
|
+
# (default) : 新規 install。既存 .claude / CLAUDE.md は .bak タイムスタンプ付きで退避。
|
|
9
|
+
# CLAUDE.md は CLAUDE.md.template として配置(user が <...> placeholder を埋める)。
|
|
10
|
+
# --update : 既存 .claude/ を退避せず rsync で増分上書き。state dir / settings.local.json は保持。
|
|
11
|
+
# CLAUDE.md / .mcp.json / .gitignore は触らない (既存保護)。
|
|
12
|
+
# 完了時に sync 変更 file 一覧 + 分離 commit 案内を出力 (task-58 G1)。
|
|
13
|
+
# --commit : (--update と併用、opt-in) sync 対象 .claude/ path のみ git add + chore(harness): sync で
|
|
14
|
+
# 自動 commit する。project file (root README.md 等) は触らない。git reset 禁止 (HIGH 教訓)。
|
|
15
|
+
# 非 git target なら commit skip + WARN (task-58 G1)。
|
|
16
|
+
# --force : 既存 .claude / CLAUDE.md を backup せず上書き。CLAUDE.md は placeholder 入りで上書き。
|
|
17
|
+
# --overwrite-all : (task-79) drift した target を SSoT へ強制リセットする全上書き mode。
|
|
18
|
+
# 既存 .claude/ を rsync で上書きするが **settings.local.json のみ** 温存し、それ以外
|
|
19
|
+
# (settings.json / harness-config.local.yml / state dir 群 / worktrees) も source で上書き。
|
|
20
|
+
# `--delete` は使わない (= 上書きのみ、target 独自 file は残す)。CLAUDE.md / .mcp.json /
|
|
21
|
+
# .gitignore は --force 準拠。注意: target の local override は失われる (settings.local.json のみ残る)。
|
|
22
|
+
# --dry-run : 実行内容を表示するのみ (rsync -n + 各 cp / mkdir を echo)。
|
|
23
|
+
# --no-mcp : .mcp.json を配置しない (Serena 不要な project)。
|
|
24
|
+
# --no-docs : docs/tasks/, docs/draft/ の templates 配置を skip。
|
|
25
|
+
#
|
|
26
|
+
# Exclude (state / user-local):
|
|
27
|
+
# .gateguard-state/ .taskguard-state/ .confidence-gate-state/ .failure-window/
|
|
28
|
+
# .agent-markers/ .context-budget-state/ .improvement-proposal-state/ .workflow-state/
|
|
29
|
+
# settings.local.json settings.local.example.json bash-whitelist-requests/ worktrees/ project-rules/ (task-82, project-owned)
|
|
30
|
+
#
|
|
31
|
+
# Dependencies: rsync, bash 4+
|
|
32
|
+
#
|
|
33
|
+
# ============================================================
|
|
34
|
+
# WARNING: cross-repo execution restriction
|
|
35
|
+
# ============================================================
|
|
36
|
+
# This script is a cross-repo write operation
|
|
37
|
+
# (writes from this repo into an external target project directory).
|
|
38
|
+
# Claude Code agent context cannot execute this — sandbox + delegation-guard
|
|
39
|
+
# 二重制約 により cross-repo write は denied される。
|
|
40
|
+
#
|
|
41
|
+
# **user manual (terminal) 実行のみ可能** です。
|
|
42
|
+
# (agent / subagent / hook bypass env いずれも回避不可)
|
|
43
|
+
#
|
|
44
|
+
# 同様に `--update` / `--overwrite-all <target>` mode (既存 .claude/ への上書き) も
|
|
45
|
+
# user manual (terminal) 実行のみ可能 です。
|
|
46
|
+
#
|
|
47
|
+
# 詳細: .claude/rules/development-process.md §「cross-repo write 例外」を参照
|
|
48
|
+
# ============================================================
|
|
49
|
+
|
|
50
|
+
set -euo pipefail
|
|
51
|
+
|
|
52
|
+
# ============================================================
|
|
53
|
+
# arg parse
|
|
54
|
+
# ============================================================
|
|
55
|
+
TARGET=""
|
|
56
|
+
MODE="install" # install / update / force / overwrite-all
|
|
57
|
+
DRY_RUN=false
|
|
58
|
+
WITH_MCP=true
|
|
59
|
+
WITH_DOCS=true
|
|
60
|
+
COMMIT_AFTER_SYNC=false # --commit flag (task-58 G1, opt-in for --update only)
|
|
61
|
+
|
|
62
|
+
# M-1: detect conflicting mode flags. --update / --force / --overwrite-all each set
|
|
63
|
+
# MODE; specifying more than one (or repeating one) would silently last-wins into an
|
|
64
|
+
# unintended mode (e.g. --update --force → force rm -rf). Track whether MODE was
|
|
65
|
+
# already chosen and abort instead of guessing. (task-79: --overwrite-all joins the
|
|
66
|
+
# 3-way mutual exclusion.)
|
|
67
|
+
MODE_SET=false
|
|
68
|
+
for arg in "$@"; do
|
|
69
|
+
case "$arg" in
|
|
70
|
+
--update|--force|--overwrite-all)
|
|
71
|
+
if $MODE_SET; then
|
|
72
|
+
echo "[install] error: conflicting mode flags (--update / --force / --overwrite-all are mutually exclusive — give at most one)" >&2
|
|
73
|
+
exit 64
|
|
74
|
+
fi
|
|
75
|
+
MODE_SET=true
|
|
76
|
+
case "$arg" in
|
|
77
|
+
--update) MODE="update" ;;
|
|
78
|
+
--force) MODE="force" ;;
|
|
79
|
+
--overwrite-all) MODE="overwrite-all" ;;
|
|
80
|
+
esac
|
|
81
|
+
;;
|
|
82
|
+
--commit) COMMIT_AFTER_SYNC=true ;;
|
|
83
|
+
--dry-run) DRY_RUN=true ;;
|
|
84
|
+
--no-mcp) WITH_MCP=false ;;
|
|
85
|
+
--no-docs) WITH_DOCS=false ;;
|
|
86
|
+
-h|--help)
|
|
87
|
+
# L-2: print the full header comment block including the cross-repo WARNING
|
|
88
|
+
# (ends at the closing ===== of the WARNING box before `set -euo pipefail`;
|
|
89
|
+
# task-79 added 4 mode-doc lines so the box now ends at line 48).
|
|
90
|
+
sed -n '2,48p' "$0"
|
|
91
|
+
exit 0
|
|
92
|
+
;;
|
|
93
|
+
-*)
|
|
94
|
+
echo "[install] unknown option: $arg" >&2
|
|
95
|
+
exit 64
|
|
96
|
+
;;
|
|
97
|
+
*)
|
|
98
|
+
if [[ -z "$TARGET" ]]; then
|
|
99
|
+
TARGET="$arg"
|
|
100
|
+
else
|
|
101
|
+
echo "[install] too many positional args: $arg" >&2
|
|
102
|
+
exit 64
|
|
103
|
+
fi
|
|
104
|
+
;;
|
|
105
|
+
esac
|
|
106
|
+
done
|
|
107
|
+
|
|
108
|
+
if [[ -z "$TARGET" ]]; then
|
|
109
|
+
echo "usage: ./install.sh <target-project-dir> [--update [--commit]|--force|--overwrite-all|--dry-run|--no-mcp|--no-docs]" >&2
|
|
110
|
+
exit 64
|
|
111
|
+
fi
|
|
112
|
+
|
|
113
|
+
# --commit は --update mode 専用 (task-58 G1)
|
|
114
|
+
if $COMMIT_AFTER_SYNC && [[ "$MODE" != "update" ]]; then
|
|
115
|
+
echo "[install] error: --commit requires --update mode" >&2
|
|
116
|
+
exit 64
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
if [[ ! -d "$TARGET" ]]; then
|
|
120
|
+
echo "[install] error: '$TARGET' is not a directory" >&2
|
|
121
|
+
exit 64
|
|
122
|
+
fi
|
|
123
|
+
|
|
124
|
+
# absolute paths
|
|
125
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
126
|
+
TARGET="$(cd "$TARGET" && pwd)"
|
|
127
|
+
|
|
128
|
+
if [[ "$SCRIPT_DIR" == "$TARGET" ]]; then
|
|
129
|
+
echo "[install] error: target equals source ($SCRIPT_DIR). Run from harness repo, install into another dir." >&2
|
|
130
|
+
exit 64
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
if ! command -v rsync >/dev/null 2>&1; then
|
|
134
|
+
echo "[install] error: rsync not found. Install rsync first (macOS: brew install rsync, Debian: apt install rsync)." >&2
|
|
135
|
+
exit 69
|
|
136
|
+
fi
|
|
137
|
+
|
|
138
|
+
STAMP="$(date +%Y%m%d-%H%M%S)"
|
|
139
|
+
echo "[install] source : $SCRIPT_DIR"
|
|
140
|
+
echo "[install] target : $TARGET"
|
|
141
|
+
echo "[install] mode : $MODE (dry-run=$DRY_RUN, with-mcp=$WITH_MCP, with-docs=$WITH_DOCS)"
|
|
142
|
+
echo ""
|
|
143
|
+
|
|
144
|
+
# ============================================================
|
|
145
|
+
# dirty-tree safety: --update / --force / --overwrite-all 前に target の未 commit 変更を warn
|
|
146
|
+
# (task-55: user 無警告で上書き rsync する事故を防ぐ。block ではなく warn のみ)
|
|
147
|
+
# (task-79: --overwrite-all は local override も上書きするため warn は特に重要)
|
|
148
|
+
# ============================================================
|
|
149
|
+
if [[ "$MODE" == "update" || "$MODE" == "force" || "$MODE" == "overwrite-all" ]] && ! $DRY_RUN; then
|
|
150
|
+
if command -v git >/dev/null 2>&1 && [[ -d "$TARGET/.git" ]]; then
|
|
151
|
+
DIRTY=$(cd "$TARGET" && git status --short 2>/dev/null | head -20)
|
|
152
|
+
if [[ -n "$DIRTY" ]]; then
|
|
153
|
+
echo "[install] WARN: target has uncommitted changes (showing up to 20 lines):"
|
|
154
|
+
echo "$DIRTY" | sed 's/^/ /'
|
|
155
|
+
echo "[install] WARN: rsync is about to overwrite .claude/ — review or commit/stash first."
|
|
156
|
+
echo "[install] WARN: continuing in 3s (Ctrl-C to abort)..."
|
|
157
|
+
sleep 3 || true
|
|
158
|
+
fi
|
|
159
|
+
fi
|
|
160
|
+
fi
|
|
161
|
+
|
|
162
|
+
# ============================================================
|
|
163
|
+
# migration helper: project 固有 override が SSoT yml に直接書かれている場合の案内
|
|
164
|
+
# (task-55: docs_approved_dir 等が SSoT yml に書かれていると --update で巻き戻る潜在事故。
|
|
165
|
+
# 自動移動はしない、案内のみ。違反が見つかったら user が手で local.yml へ移行する)
|
|
166
|
+
# (task-79: --overwrite-all は最も破壊的な mode (local override も上書き) なので、
|
|
167
|
+
# SSoT drift 案内が出ない非対称を解消するため対象に含める。案内のみで自動移動はしない。)
|
|
168
|
+
# ============================================================
|
|
169
|
+
if [[ "$MODE" == "update" || "$MODE" == "force" || "$MODE" == "overwrite-all" ]] && ! $DRY_RUN; then
|
|
170
|
+
TARGET_SSOT="$TARGET/.claude/harness-config.yml"
|
|
171
|
+
SRC_SSOT="$SCRIPT_DIR/.claude/harness-config.yml"
|
|
172
|
+
if [[ -f "$TARGET_SSOT" && -f "$SRC_SSOT" ]]; then
|
|
173
|
+
# 比較対象 key (project 固有 override が起こりやすい代表例)
|
|
174
|
+
for key in docs_approved_dir task_dir draft_dir protected_paths; do
|
|
175
|
+
# `|| true` で fail-open: target yml に該当 key が不在で grep exit 1 → pipefail
|
|
176
|
+
# で script abort する事故を防ぐ (task-42 後発見、2026-05-28、classlab-weekly-news
|
|
177
|
+
# 同期失敗を契機)。key 不在は「project 固有 override なし」を意味するため、空文字で
|
|
178
|
+
# 続行が正しい挙動 (該当 if 文は -n "$tgt_val" で空時 skip される)。
|
|
179
|
+
tgt_val=$(grep -E "^${key}:" "$TARGET_SSOT" 2>/dev/null | head -1 | sed -E "s/^${key}:[[:space:]]*//; s/[[:space:]]*$//" || true)
|
|
180
|
+
src_val=$(grep -E "^${key}:" "$SRC_SSOT" 2>/dev/null | head -1 | sed -E "s/^${key}:[[:space:]]*//; s/[[:space:]]*$//" || true)
|
|
181
|
+
if [[ -n "$tgt_val" && "$tgt_val" != "$src_val" ]]; then
|
|
182
|
+
echo "[install] MIGRATE: $TARGET_SSOT has project-specific '$key: $tgt_val' (SSoT default: '$src_val')."
|
|
183
|
+
echo "[install] MIGRATE: --update will overwrite SSoT yml. Move this value to .claude/harness-config.local.yml to preserve it across updates."
|
|
184
|
+
fi
|
|
185
|
+
done
|
|
186
|
+
unset key tgt_val src_val
|
|
187
|
+
fi
|
|
188
|
+
unset TARGET_SSOT SRC_SSOT
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
# helper: run or echo (dry-run aware)
|
|
193
|
+
# H-1: array-based exec — no eval/word-split/glob re-expansion. Each arg passed
|
|
194
|
+
# verbatim, safe for paths containing spaces / quotes / $ / glob chars.
|
|
195
|
+
# dry-run prints %q-quoted form so the displayed command is copy-paste safe.
|
|
196
|
+
run() {
|
|
197
|
+
if $DRY_RUN; then
|
|
198
|
+
printf '[dry-run]'
|
|
199
|
+
printf ' %q' "$@"
|
|
200
|
+
echo
|
|
201
|
+
else
|
|
202
|
+
"$@"
|
|
203
|
+
fi
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
# ============================================================
|
|
207
|
+
# rsync excludes (state / user-local)
|
|
208
|
+
# ============================================================
|
|
209
|
+
RSYNC_EXCLUDES=(
|
|
210
|
+
--exclude=.gateguard-state/
|
|
211
|
+
--exclude=.taskguard-state/
|
|
212
|
+
--exclude=.confidence-gate-state/
|
|
213
|
+
--exclude=.failure-window/
|
|
214
|
+
--exclude=.agent-markers/
|
|
215
|
+
--exclude=.context-budget-state/
|
|
216
|
+
--exclude=.improvement-proposal-state/
|
|
217
|
+
--exclude=.workflow-state/
|
|
218
|
+
--exclude=settings.json
|
|
219
|
+
--exclude=settings.local.json
|
|
220
|
+
--exclude=settings.local.example.json
|
|
221
|
+
--exclude=harness-config.local.yml
|
|
222
|
+
--exclude=bash-whitelist-requests/
|
|
223
|
+
--exclude=worktrees/
|
|
224
|
+
--exclude=project-rules/
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
# RSYNC_EXCLUDES_MINIMAL (task-79、--overwrite-all 専用):
|
|
228
|
+
# 「全上書き」mode 用。machine-local な settings.local.json **のみ** を温存し、
|
|
229
|
+
# それ以外 (settings.json / harness-config.local.yml / state dir 群 / worktrees) は
|
|
230
|
+
# すべて source の状態で上書きする (drift した target を SSoT へ強制リセットする用途)。
|
|
231
|
+
# `--delete` は使わない (= 上書きのみ、target にしかない file は残す)。
|
|
232
|
+
RSYNC_EXCLUDES_MINIMAL=(
|
|
233
|
+
--exclude=settings.local.json
|
|
234
|
+
--exclude=project-rules/
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
# NOTE (task-82): `.claude/project-rules/<name>.md` は **project 所有** (consuming repo の
|
|
238
|
+
# harness rule override / 追補)。harness 7 rule (`.claude/rules/*.md`) から `@import` され、
|
|
239
|
+
# rsync で上書きすると project 固有編集が消失するため両 exclude set に project-rules/ を含める
|
|
240
|
+
# (overwrite-all でも project-rules は守る = project の override は drift リセット対象外)。
|
|
241
|
+
# 不在 target には下記「project-rules create-if-absent」block が空テンプレを配置する。
|
|
242
|
+
|
|
243
|
+
# NOTE (task-71 H2、2026-06-02): `settings.json` は exclude する。task-71 で settings.json は
|
|
244
|
+
# permissions verbatim 同梱の generated artifact (harness 本体は harness-dev preset の
|
|
245
|
+
# permissions + dispatcher 配線) になったため、rsync で配布すると consuming repo の repo 固有
|
|
246
|
+
# permissions / preset を上書きする回帰になる。dispatcher 機能本体 (wrapper 群 / manifest /
|
|
247
|
+
# generate-settings.sh / dispatcher-core.sh) は `.claude/` 配下なので引き続き配布される。
|
|
248
|
+
# consuming repo は `bash .claude/scripts/generate-settings.sh --out .claude/settings.json` で
|
|
249
|
+
# 自リポの permissions + 配布済 manifest から settings.json を再生成して dispatcher 配線を採用する。
|
|
250
|
+
|
|
251
|
+
# NOTE (task-51 A 案、2026-05-28): `.claude/rules-details/` (Layer B 詳細規範) は
|
|
252
|
+
# 意図的に exclude していない。Claude Code は `.claude/rules/` のみを startup 注入する
|
|
253
|
+
# (公式 doc: code.claude.com/docs/en/memory.md) ため、Layer B を別 dir に置くことで
|
|
254
|
+
# context bloat を回避する設計。rsync -a で `.claude/rules-details/` 配下も自動同期
|
|
255
|
+
# されるため 4 リポでも Layer A↔B link が保たれる。SSoT: `.claude/rules-details/README.md`。
|
|
256
|
+
|
|
257
|
+
# ============================================================
|
|
258
|
+
# 1. .claude/ install
|
|
259
|
+
# ============================================================
|
|
260
|
+
case "$MODE" in
|
|
261
|
+
install)
|
|
262
|
+
if [[ -d "$TARGET/.claude" ]]; then
|
|
263
|
+
echo "[install] existing .claude detected → backup to .claude.bak.$STAMP"
|
|
264
|
+
run mv "$TARGET/.claude" "$TARGET/.claude.bak.$STAMP"
|
|
265
|
+
fi
|
|
266
|
+
echo "[install] rsync .claude/ → $TARGET/.claude/"
|
|
267
|
+
if $DRY_RUN; then
|
|
268
|
+
rsync -an "${RSYNC_EXCLUDES[@]}" "$SCRIPT_DIR/.claude/" "$TARGET/.claude/" | head -30
|
|
269
|
+
echo "[dry-run] ... (truncated)"
|
|
270
|
+
else
|
|
271
|
+
rsync -a "${RSYNC_EXCLUDES[@]}" "$SCRIPT_DIR/.claude/" "$TARGET/.claude/"
|
|
272
|
+
fi
|
|
273
|
+
;;
|
|
274
|
+
update)
|
|
275
|
+
if [[ ! -d "$TARGET/.claude" ]]; then
|
|
276
|
+
echo "[install] error: --update requires existing $TARGET/.claude. Use default mode for fresh install." >&2
|
|
277
|
+
exit 64
|
|
278
|
+
fi
|
|
279
|
+
echo "[install] rsync (increment) .claude/ → $TARGET/.claude/ (preserving state dirs / settings.local.json)"
|
|
280
|
+
if $DRY_RUN; then
|
|
281
|
+
rsync -an "${RSYNC_EXCLUDES[@]}" "$SCRIPT_DIR/.claude/" "$TARGET/.claude/" | head -30
|
|
282
|
+
echo "[dry-run] ... (truncated)"
|
|
283
|
+
else
|
|
284
|
+
rsync -a "${RSYNC_EXCLUDES[@]}" "$SCRIPT_DIR/.claude/" "$TARGET/.claude/"
|
|
285
|
+
fi
|
|
286
|
+
;;
|
|
287
|
+
force)
|
|
288
|
+
if [[ -d "$TARGET/.claude" ]]; then
|
|
289
|
+
echo "[install] WARN: --force will OVERWRITE existing .claude (no backup)"
|
|
290
|
+
run rm -rf "$TARGET/.claude"
|
|
291
|
+
fi
|
|
292
|
+
echo "[install] rsync .claude/ → $TARGET/.claude/"
|
|
293
|
+
if $DRY_RUN; then
|
|
294
|
+
rsync -an "${RSYNC_EXCLUDES[@]}" "$SCRIPT_DIR/.claude/" "$TARGET/.claude/" | head -30
|
|
295
|
+
else
|
|
296
|
+
rsync -a "${RSYNC_EXCLUDES[@]}" "$SCRIPT_DIR/.claude/" "$TARGET/.claude/"
|
|
297
|
+
fi
|
|
298
|
+
;;
|
|
299
|
+
overwrite-all)
|
|
300
|
+
# task-79: 全上書き mode。settings.local.json のみ温存し、それ以外 (settings.json /
|
|
301
|
+
# harness-config.local.yml / state dir / worktrees) も source で上書きする。
|
|
302
|
+
# `--delete` は使わない → target にしかない file は残す (上書きのみ)。
|
|
303
|
+
if [[ ! -d "$TARGET/.claude" ]]; then
|
|
304
|
+
echo "[install] error: --overwrite-all requires existing $TARGET/.claude. Use default mode for fresh install." >&2
|
|
305
|
+
exit 64
|
|
306
|
+
fi
|
|
307
|
+
echo "[install] WARN: --overwrite-all overwrites ALL local overrides (settings.json / harness-config.local.yml / state dirs)"
|
|
308
|
+
echo "[install] WARN: only settings.local.json is preserved. No --delete (target-only files are kept)."
|
|
309
|
+
echo "[install] rsync (overwrite-all) .claude/ → $TARGET/.claude/ (preserving settings.local.json only)"
|
|
310
|
+
if $DRY_RUN; then
|
|
311
|
+
# `| head -30` closes the pipe early; under set -euo pipefail rsync's SIGPIPE
|
|
312
|
+
# (exit 141) would propagate and abort the script (CLAUDE.md HIGH lesson:
|
|
313
|
+
# SIGPIPE → pipefail → errexit → silent death). `|| true` keeps dry-run preview
|
|
314
|
+
# tolerant when the change set exceeds 30 lines (e.g. state dirs under overwrite-all).
|
|
315
|
+
rsync -an "${RSYNC_EXCLUDES_MINIMAL[@]}" "$SCRIPT_DIR/.claude/" "$TARGET/.claude/" | head -30 || true
|
|
316
|
+
echo "[dry-run] ... (truncated)"
|
|
317
|
+
else
|
|
318
|
+
rsync -a "${RSYNC_EXCLUDES_MINIMAL[@]}" "$SCRIPT_DIR/.claude/" "$TARGET/.claude/"
|
|
319
|
+
fi
|
|
320
|
+
;;
|
|
321
|
+
esac
|
|
322
|
+
|
|
323
|
+
# ============================================================
|
|
324
|
+
# 2. CLAUDE.md (template として配置、既存は保護)
|
|
325
|
+
# ============================================================
|
|
326
|
+
if [[ "$MODE" == "update" ]]; then
|
|
327
|
+
echo "[install] (update mode) CLAUDE.md は触らない"
|
|
328
|
+
else
|
|
329
|
+
if [[ -f "$TARGET/CLAUDE.md" ]]; then
|
|
330
|
+
if [[ "$MODE" == "force" || "$MODE" == "overwrite-all" ]]; then
|
|
331
|
+
echo "[install] WARN: --$MODE overwriting $TARGET/CLAUDE.md (no backup)"
|
|
332
|
+
run cp "$SCRIPT_DIR/CLAUDE.md" "$TARGET/CLAUDE.md"
|
|
333
|
+
else
|
|
334
|
+
echo "[install] existing CLAUDE.md → backup to CLAUDE.md.bak.$STAMP, install as CLAUDE.md.template"
|
|
335
|
+
run mv "$TARGET/CLAUDE.md" "$TARGET/CLAUDE.md.bak.$STAMP"
|
|
336
|
+
run cp "$SCRIPT_DIR/CLAUDE.md" "$TARGET/CLAUDE.md.template"
|
|
337
|
+
fi
|
|
338
|
+
else
|
|
339
|
+
echo "[install] copying CLAUDE.md → $TARGET/CLAUDE.md.template (edit <...> placeholders then rename to CLAUDE.md)"
|
|
340
|
+
run cp "$SCRIPT_DIR/CLAUDE.md" "$TARGET/CLAUDE.md.template"
|
|
341
|
+
fi
|
|
342
|
+
fi
|
|
343
|
+
|
|
344
|
+
# ============================================================
|
|
345
|
+
# 3. .mcp.json (Serena MCP は /save-state /pm-start に必須)
|
|
346
|
+
# ============================================================
|
|
347
|
+
if $WITH_MCP; then
|
|
348
|
+
if [[ -f "$TARGET/.mcp.json" ]]; then
|
|
349
|
+
echo "[install] existing .mcp.json detected → keep as-is (manual merge if you need harness defaults)"
|
|
350
|
+
else
|
|
351
|
+
echo "[install] copying .mcp.json → $TARGET/.mcp.json"
|
|
352
|
+
run cp "$SCRIPT_DIR/.mcp.json" "$TARGET/.mcp.json"
|
|
353
|
+
fi
|
|
354
|
+
else
|
|
355
|
+
echo "[install] (--no-mcp) skip .mcp.json"
|
|
356
|
+
fi
|
|
357
|
+
|
|
358
|
+
# ============================================================
|
|
359
|
+
# 4. .gitignore (既存があれば merge、無ければ新規)
|
|
360
|
+
# ============================================================
|
|
361
|
+
if [[ -f "$TARGET/.gitignore" ]]; then
|
|
362
|
+
# 既存に harness state 除外行が無ければ追記
|
|
363
|
+
if grep -q '.claude/.gateguard-state' "$TARGET/.gitignore" 2>/dev/null; then
|
|
364
|
+
echo "[install] $TARGET/.gitignore already contains harness state ignores → skip"
|
|
365
|
+
else
|
|
366
|
+
echo "[install] appending harness state ignores to existing $TARGET/.gitignore"
|
|
367
|
+
if $DRY_RUN; then
|
|
368
|
+
echo "[dry-run] cat >> $TARGET/.gitignore (harness state block)"
|
|
369
|
+
else
|
|
370
|
+
cat >> "$TARGET/.gitignore" <<'GITIGNORE_HARNESS'
|
|
371
|
+
|
|
372
|
+
# === HIRAI Method harness state (auto-appended by install.sh) ===
|
|
373
|
+
.claude/.gateguard-state/
|
|
374
|
+
.claude/.taskguard-state/
|
|
375
|
+
.claude/.confidence-gate-state/
|
|
376
|
+
.claude/.failure-window/
|
|
377
|
+
.claude/.confidence-bypass.cleared
|
|
378
|
+
.claude/.confidence-bypass.log
|
|
379
|
+
.claude/.agent-markers/
|
|
380
|
+
.claude/.context-budget-state/
|
|
381
|
+
.claude/.improvement-proposal-state/
|
|
382
|
+
.claude/.workflow-state/
|
|
383
|
+
.claude/settings.local.json
|
|
384
|
+
.claude/settings.generated.preview.json
|
|
385
|
+
.claude/worktrees/
|
|
386
|
+
.claude/bash-whitelist-requests/
|
|
387
|
+
GITIGNORE_HARNESS
|
|
388
|
+
fi
|
|
389
|
+
fi
|
|
390
|
+
else
|
|
391
|
+
echo "[install] copying .gitignore → $TARGET/.gitignore"
|
|
392
|
+
run cp "$SCRIPT_DIR/.gitignore" "$TARGET/.gitignore"
|
|
393
|
+
fi
|
|
394
|
+
|
|
395
|
+
# ============================================================
|
|
396
|
+
# 5. docs/tasks/ docs/draft/ (templates から初期化、既存は保護)
|
|
397
|
+
# ============================================================
|
|
398
|
+
if $WITH_DOCS; then
|
|
399
|
+
run mkdir -p "$TARGET/docs/tasks" "$TARGET/docs/draft"
|
|
400
|
+
for f in list.md parking-lot.md _TASK_TEMPLATE.md; do
|
|
401
|
+
src="$SCRIPT_DIR/.claude/templates/docs/tasks/$f"
|
|
402
|
+
dst="$TARGET/docs/tasks/$f"
|
|
403
|
+
if [[ -f "$dst" ]]; then
|
|
404
|
+
echo "[install] $dst exists → skip"
|
|
405
|
+
elif [[ -f "$src" ]]; then
|
|
406
|
+
echo "[install] copy template $f → docs/tasks/"
|
|
407
|
+
run cp "$src" "$dst"
|
|
408
|
+
fi
|
|
409
|
+
done
|
|
410
|
+
src="$SCRIPT_DIR/.claude/templates/docs/draft/_DRAFT_TEMPLATE.md"
|
|
411
|
+
dst="$TARGET/docs/draft/_DRAFT_TEMPLATE.md"
|
|
412
|
+
if [[ -f "$dst" ]]; then
|
|
413
|
+
echo "[install] $dst exists → skip"
|
|
414
|
+
elif [[ -f "$src" ]]; then
|
|
415
|
+
echo "[install] copy template _DRAFT_TEMPLATE.md → docs/draft/"
|
|
416
|
+
run cp "$src" "$dst"
|
|
417
|
+
fi
|
|
418
|
+
else
|
|
419
|
+
echo "[install] (--no-docs) skip docs/tasks/ docs/draft/ templates"
|
|
420
|
+
fi
|
|
421
|
+
|
|
422
|
+
# ============================================================
|
|
423
|
+
# 5.5. project-rules/ create-if-absent (task-82、全 mode 共通、project 所有保護)
|
|
424
|
+
# ============================================================
|
|
425
|
+
# `.claude/project-rules/<name>.md` は consuming repo の harness rule override / 追補を書く
|
|
426
|
+
# **project 所有** file。harness 7 rule (`.claude/rules/*.md`) から `@import` され、harness
|
|
427
|
+
# rule の後に結合 load される。RSYNC_EXCLUDES / RSYNC_EXCLUDES_MINIMAL の `--exclude=project-rules/`
|
|
428
|
+
# により rsync では一切 touch しない (= 既存 project 編集を上書きしない、保護)。
|
|
429
|
+
# ここで「なければ空テンプレを配置・あれば skip」する冪等 cp で初回雛形を提供する
|
|
430
|
+
# (docs/tasks templates と同じ create-if-absent ロジック)。全 mode (install/update/force/
|
|
431
|
+
# overwrite-all) で適用 — project-rules は project 所有のため force/overwrite-all でも上書きしない。
|
|
432
|
+
PROJECT_RULES_SRC="$SCRIPT_DIR/.claude/project-rules"
|
|
433
|
+
PROJECT_RULES_DST="$TARGET/.claude/project-rules"
|
|
434
|
+
if [[ -d "$PROJECT_RULES_SRC" ]]; then
|
|
435
|
+
run mkdir -p "$PROJECT_RULES_DST"
|
|
436
|
+
for src in "$PROJECT_RULES_SRC"/*.md; do
|
|
437
|
+
[[ -e "$src" ]] || continue # nullglob 非依存 (no-match で literal glob を skip)
|
|
438
|
+
base="$(basename "$src")"
|
|
439
|
+
dst="$PROJECT_RULES_DST/$base"
|
|
440
|
+
if [[ -f "$dst" ]]; then
|
|
441
|
+
echo "[install] project-rules/$base exists → skip (project-owned, protected)"
|
|
442
|
+
else
|
|
443
|
+
echo "[install] copy project-rules template $base → .claude/project-rules/"
|
|
444
|
+
run cp "$src" "$dst"
|
|
445
|
+
fi
|
|
446
|
+
done
|
|
447
|
+
unset src base dst
|
|
448
|
+
fi
|
|
449
|
+
unset PROJECT_RULES_SRC PROJECT_RULES_DST
|
|
450
|
+
|
|
451
|
+
# ============================================================
|
|
452
|
+
# 6. hook 実行権限 (rsync -a で保持されるが、念のため)
|
|
453
|
+
# ============================================================
|
|
454
|
+
# L-4: chmod runs in ALL modes (install / update / force). The previous
|
|
455
|
+
# `if [[ "$MODE" != "update" ]] || true` was always true (dead condition); we want
|
|
456
|
+
# exec bits restored even on --update since rsync can drop them via staging, so the
|
|
457
|
+
# guard is removed and chmod is unconditional.
|
|
458
|
+
if $DRY_RUN; then
|
|
459
|
+
echo "[dry-run] chmod +x .claude/hooks/*.sh .claude/scripts/*.{sh,py,mjs}"
|
|
460
|
+
else
|
|
461
|
+
find "$TARGET/.claude/hooks" -maxdepth 2 -type f -name '*.sh' -exec chmod +x {} + 2>/dev/null || true
|
|
462
|
+
find "$TARGET/.claude/scripts" -type f \( -name '*.sh' -o -name '*.py' -o -name '*.mjs' \) -exec chmod +x {} + 2>/dev/null || true
|
|
463
|
+
fi
|
|
464
|
+
|
|
465
|
+
# ============================================================
|
|
466
|
+
# 6.3. settings.json 自動再生成 (statusLine / dispatcher 配線同期、task-80)
|
|
467
|
+
# ============================================================
|
|
468
|
+
# task-71 H2 で settings.json は rsync exclude (repo 固有 permissions 保護) になったため、
|
|
469
|
+
# statusLine / dispatcher 配線が consuming repo に同期されない問題があった (user 報告)。
|
|
470
|
+
# sync mode (install / update / force / overwrite-all) で rsync 後に generate-settings.sh を自動実行し、
|
|
471
|
+
# 既存 settings.json の permissions を verbatim 保持したまま statusLine / dispatcher を再配線する。
|
|
472
|
+
# fail-open: jq 不在 / generate-settings.sh 不在 / 再生成失敗は WARN + skip で install 自体は継続する
|
|
473
|
+
# (permissions 喪失 / die を回避)。
|
|
474
|
+
# CLAUDE.md HIGH 教訓: 再生成は subshell ( cd ...; bash ... ) で実行し caller の shell flags
|
|
475
|
+
# (set -e 等) に影響させない。
|
|
476
|
+
# L-1 保険: subshell に HC_PROJECT_ROOT="$TARGET" を明示注入する。generate-settings.sh の
|
|
477
|
+
# resolve_project_root は HC_PROJECT_ROOT を最優先 key とするため、TARGET が git 未 init かつ
|
|
478
|
+
# 環境に CLAUDE_PROJECT_DIR が残っている場合でも ROOT が TARGET に固定される (取り違え防止)。
|
|
479
|
+
# 挙動不変: 通常 path も ROOT=TARGET のまま (cd "$TARGET" 後の git/pwd も TARGET を指す)。
|
|
480
|
+
# mode 別の permissions 帰結 (M-1):
|
|
481
|
+
# install : 既存不在なら source から seed copy + 再配線。既存ありなら backup + permissions verbatim 保持で再配線。
|
|
482
|
+
# update : 既存 settings.json の permissions を verbatim 保持して再配線 (既存不在は seed copy)。
|
|
483
|
+
# force : rm -rf .claude で破壊的リセット + settings.json は rsync exclude のため
|
|
484
|
+
# 再生成時には既存不在 → source から seed copy + 再配線。
|
|
485
|
+
# overwrite-all : settings.json も source で上書き済のため、ここで保持される permissions は
|
|
486
|
+
# source 由来 (consuming repo の permissions は失われる = task-79 既定)。
|
|
487
|
+
if [[ "$MODE" == "install" || "$MODE" == "update" || "$MODE" == "force" || "$MODE" == "overwrite-all" ]] && ! $DRY_RUN; then
|
|
488
|
+
GEN_SETTINGS="$TARGET/.claude/scripts/generate-settings.sh"
|
|
489
|
+
LIVE_SETTINGS="$TARGET/.claude/settings.json"
|
|
490
|
+
SOURCE_SETTINGS="$SCRIPT_DIR/.claude/settings.json"
|
|
491
|
+
BACKUP_SETTINGS=""
|
|
492
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
493
|
+
echo "[install] WARN: jq 不在のため settings.json 自動再生成 skip。手動: bash .claude/scripts/generate-settings.sh --out .claude/settings.json" >&2
|
|
494
|
+
elif [[ ! -f "$GEN_SETTINGS" ]]; then
|
|
495
|
+
echo "[install] WARN: generate-settings.sh 不在、settings.json 自動再生成 skip" >&2
|
|
496
|
+
elif [[ ! -f "$LIVE_SETTINGS" ]]; then
|
|
497
|
+
if [[ -f "$SOURCE_SETTINGS" ]]; then
|
|
498
|
+
run cp "$SOURCE_SETTINGS" "$LIVE_SETTINGS"
|
|
499
|
+
echo "[install] settings.json 不在 → source から seed copy: $LIVE_SETTINGS"
|
|
500
|
+
if ( cd "$TARGET" && HC_PROJECT_ROOT="$TARGET" bash .claude/scripts/generate-settings.sh --out .claude/settings.json ); then
|
|
501
|
+
echo "[install] settings.json 生成済 (seed + statusLine / dispatcher 配線)"
|
|
502
|
+
else
|
|
503
|
+
echo "[install] WARN: settings.json 再生成失敗 (seed は残置、手動再生成を検討)" >&2
|
|
504
|
+
fi
|
|
505
|
+
else
|
|
506
|
+
echo "[install] WARN: source 側 settings.json 不在のため bootstrap skip" >&2
|
|
507
|
+
fi
|
|
508
|
+
else
|
|
509
|
+
BACKUP_SETTINGS="${LIVE_SETTINGS}.bak.${STAMP}"
|
|
510
|
+
run cp "$LIVE_SETTINGS" "$BACKUP_SETTINGS"
|
|
511
|
+
echo "[install] settings.json backup: $BACKUP_SETTINGS"
|
|
512
|
+
if ( cd "$TARGET" && HC_PROJECT_ROOT="$TARGET" bash .claude/scripts/generate-settings.sh --out .claude/settings.json ); then
|
|
513
|
+
echo "[install] settings.json 再生成済 (statusLine / dispatcher 配線同期、permissions 保持)"
|
|
514
|
+
else
|
|
515
|
+
echo "[install] WARN: settings.json 自動再生成 失敗 (install は継続)。手動再生成を検討" >&2
|
|
516
|
+
echo "[install] HINT: backup 復元: cp \"$BACKUP_SETTINGS\" \"$LIVE_SETTINGS\"" >&2
|
|
517
|
+
fi
|
|
518
|
+
fi
|
|
519
|
+
unset GEN_SETTINGS LIVE_SETTINGS SOURCE_SETTINGS BACKUP_SETTINGS
|
|
520
|
+
fi
|
|
521
|
+
|
|
522
|
+
# ============================================================
|
|
523
|
+
# 6.5. harness_version stamp 書込 (task-56 F)
|
|
524
|
+
# ============================================================
|
|
525
|
+
# stale-harness-detect.sh (SessionStart hook) が読む同期 stamp。
|
|
526
|
+
# `bash install.sh --update <repo>` 実行日 (UTC) を YYYY-MM-DD で
|
|
527
|
+
# target の harness-config.yml に書き込む (in-place、portable sed -i 互換)。
|
|
528
|
+
# 既存 `harness_version:` 行があれば差し替え、無ければ追記。
|
|
529
|
+
# fail-open: stamp 書込失敗は WARN のみで install 自体は継続。
|
|
530
|
+
if ! $DRY_RUN; then
|
|
531
|
+
TARGET_HC="$TARGET/.claude/harness-config.yml"
|
|
532
|
+
if [[ -f "$TARGET_HC" ]]; then
|
|
533
|
+
NEW_STAMP="$(date -u +%Y-%m-%d)"
|
|
534
|
+
if grep -qE '^harness_version:' "$TARGET_HC" 2>/dev/null; then
|
|
535
|
+
# 既存 line を置換 (BSD sed / GNU sed 両対応: -i '' / -i バックアップ拡張子なし)
|
|
536
|
+
TMP_HC="$(mktemp /tmp/harness-config.XXXXXX.yml)"
|
|
537
|
+
sed -E "s|^harness_version:.*|harness_version: \"${NEW_STAMP}\"|" "$TARGET_HC" > "$TMP_HC" 2>/dev/null \
|
|
538
|
+
&& mv "$TMP_HC" "$TARGET_HC" \
|
|
539
|
+
&& echo "[install] harness_version stamp updated -> $NEW_STAMP" \
|
|
540
|
+
|| echo "[install] WARN: failed to update harness_version stamp (install continues)" >&2
|
|
541
|
+
rm -f "$TMP_HC" 2>/dev/null || true
|
|
542
|
+
else
|
|
543
|
+
# 未設定なら top に append (insert at top of file)
|
|
544
|
+
{
|
|
545
|
+
echo "# === Harness Version Stamp (task-56 F, install.sh が書込) ==="
|
|
546
|
+
echo "harness_version: \"${NEW_STAMP}\""
|
|
547
|
+
echo ""
|
|
548
|
+
cat "$TARGET_HC"
|
|
549
|
+
} > "${TARGET_HC}.tmp" 2>/dev/null \
|
|
550
|
+
&& mv "${TARGET_HC}.tmp" "$TARGET_HC" \
|
|
551
|
+
&& echo "[install] harness_version stamp inserted -> $NEW_STAMP" \
|
|
552
|
+
|| echo "[install] WARN: failed to insert harness_version stamp (install continues)" >&2
|
|
553
|
+
fi
|
|
554
|
+
unset NEW_STAMP TMP_HC
|
|
555
|
+
fi
|
|
556
|
+
unset TARGET_HC
|
|
557
|
+
fi
|
|
558
|
+
|
|
559
|
+
# ============================================================
|
|
560
|
+
# 6.6. harness_npm_version stamp 書込 (task-84 Step 1)
|
|
561
|
+
# ============================================================
|
|
562
|
+
# stale-harness-detect.sh (SessionStart hook) が npm registry latest と
|
|
563
|
+
# semver 比較するための同期 stamp。install.sh 自身の package.json の
|
|
564
|
+
# `.version` (semver x.y.z) を target の harness-config.yml に書き込む。
|
|
565
|
+
# 既存 `harness_npm_version:` 行があれば差し替え、無ければ追記。
|
|
566
|
+
# 既存 date stamp (harness_version) とは独立に併存する。
|
|
567
|
+
# fail-safe: package.json 不在 / version 取得不能なら stamp を skip
|
|
568
|
+
# (既存挙動を壊さない)。stamp 書込失敗は WARN のみで install 継続。
|
|
569
|
+
if ! $DRY_RUN; then
|
|
570
|
+
TARGET_HC_NPM="$TARGET/.claude/harness-config.yml"
|
|
571
|
+
SRC_PKG="$SCRIPT_DIR/package.json"
|
|
572
|
+
NPM_VER=""
|
|
573
|
+
if [[ -f "$SRC_PKG" ]]; then
|
|
574
|
+
if command -v node >/dev/null 2>&1; then
|
|
575
|
+
# L-2 (task-84 fix): path を JS 文字列へ直接埋め込まず argv 経由で渡す
|
|
576
|
+
# (path injection 回避)。$SRC_PKG にメタ文字が含まれても安全。
|
|
577
|
+
NPM_VER="$(node -e 'try{process.stdout.write(String(require(process.argv[1]).version||""))}catch(e){}' "$SRC_PKG" 2>/dev/null || true)"
|
|
578
|
+
fi
|
|
579
|
+
# node 不在 / 取得失敗時の fallback: grep/sed で "version": "x.y.z" を抽出
|
|
580
|
+
if [[ -z "$NPM_VER" || "$NPM_VER" == "undefined" ]]; then
|
|
581
|
+
NPM_VER="$(grep -E '"version"[[:space:]]*:' "$SRC_PKG" 2>/dev/null \
|
|
582
|
+
| head -1 | sed -E 's/.*"version"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/' || true)"
|
|
583
|
+
fi
|
|
584
|
+
fi
|
|
585
|
+
if [[ -f "$TARGET_HC_NPM" && -n "$NPM_VER" && "$NPM_VER" != "undefined" ]]; then
|
|
586
|
+
if grep -qE '^harness_npm_version:' "$TARGET_HC_NPM" 2>/dev/null; then
|
|
587
|
+
TMP_HC_NPM="$(mktemp /tmp/harness-config-npm.XXXXXX.yml)"
|
|
588
|
+
sed -E "s|^harness_npm_version:.*|harness_npm_version: \"${NPM_VER}\"|" "$TARGET_HC_NPM" > "$TMP_HC_NPM" 2>/dev/null \
|
|
589
|
+
&& mv "$TMP_HC_NPM" "$TARGET_HC_NPM" \
|
|
590
|
+
&& echo "[install] harness_npm_version stamp updated -> $NPM_VER" \
|
|
591
|
+
|| echo "[install] WARN: failed to update harness_npm_version stamp (install continues)" >&2
|
|
592
|
+
rm -f "$TMP_HC_NPM" 2>/dev/null || true
|
|
593
|
+
else
|
|
594
|
+
{
|
|
595
|
+
echo "# === Harness NPM Version Stamp (task-84, install.sh が書込) ==="
|
|
596
|
+
echo "harness_npm_version: \"${NPM_VER}\""
|
|
597
|
+
echo ""
|
|
598
|
+
cat "$TARGET_HC_NPM"
|
|
599
|
+
} > "${TARGET_HC_NPM}.tmp" 2>/dev/null \
|
|
600
|
+
&& mv "${TARGET_HC_NPM}.tmp" "$TARGET_HC_NPM" \
|
|
601
|
+
&& echo "[install] harness_npm_version stamp inserted -> $NPM_VER" \
|
|
602
|
+
|| echo "[install] WARN: failed to insert harness_npm_version stamp (install continues)" >&2
|
|
603
|
+
fi
|
|
604
|
+
elif [[ -f "$TARGET_HC_NPM" ]]; then
|
|
605
|
+
echo "[install] NOTE: package.json version 取得不能のため harness_npm_version stamp skip (fail-safe)" >&2
|
|
606
|
+
fi
|
|
607
|
+
unset TARGET_HC_NPM SRC_PKG NPM_VER TMP_HC_NPM
|
|
608
|
+
fi
|
|
609
|
+
|
|
610
|
+
# ============================================================
|
|
611
|
+
# 6.7. sync drift 案内 + --commit による分離 commit (task-58 G1)
|
|
612
|
+
# ============================================================
|
|
613
|
+
# install.sh --update が SSoT を同期した直後、target 側 .claude/ 配下の
|
|
614
|
+
# git diff を検出して user に「分離 commit せよ」案内 + 変更 file 一覧を出力。
|
|
615
|
+
# --commit flag 併用時のみ harness-sync 対象 path のみ git add + 単独 commit。
|
|
616
|
+
# project file (root README.md 等) は完全に触らない。git reset 禁止 (HIGH 教訓)。
|
|
617
|
+
# 設計: docs/draft/harness-sync-uncommitted-drift.md (採用案 C ハイブリッド)
|
|
618
|
+
if [[ "$MODE" == "update" ]] && ! $DRY_RUN; then
|
|
619
|
+
if command -v git >/dev/null 2>&1 && [[ -d "$TARGET/.git" ]]; then
|
|
620
|
+
# .claude/ 配下の変更 path を git status --porcelain で安全に列挙
|
|
621
|
+
# (rename 検出は対象外、付属 path のみ抽出)
|
|
622
|
+
SYNC_CHANGES=$(cd "$TARGET" && git status --porcelain -- .claude/ 2>/dev/null | awk '{
|
|
623
|
+
# XY status (2 char) + space + path. rename は " -> " で arrow 後ろを採用
|
|
624
|
+
sub(/^.. /, "")
|
|
625
|
+
if (match($0, / -> /)) {
|
|
626
|
+
print substr($0, RSTART + 4)
|
|
627
|
+
} else {
|
|
628
|
+
print
|
|
629
|
+
}
|
|
630
|
+
}')
|
|
631
|
+
if [[ -n "$SYNC_CHANGES" ]]; then
|
|
632
|
+
SYNC_COUNT=$(printf '%s\n' "$SYNC_CHANGES" | wc -l | tr -d ' ')
|
|
633
|
+
echo ""
|
|
634
|
+
echo "[install] === harness sync drift detected ==="
|
|
635
|
+
echo "[install] ${SYNC_COUNT} file(s) under .claude/ changed by this --update:"
|
|
636
|
+
printf '%s\n' "$SYNC_CHANGES" | sed 's/^/ - /'
|
|
637
|
+
echo ""
|
|
638
|
+
if $COMMIT_AFTER_SYNC; then
|
|
639
|
+
# 安全な git add (specific paths only、CLAUDE.md HIGH 教訓: git reset 禁止)
|
|
640
|
+
# path に space を含む場合に備えて while-read + git add 個別
|
|
641
|
+
echo "[install] --commit: staging ${SYNC_COUNT} synced file(s) (project files untouched)"
|
|
642
|
+
ADDED=0
|
|
643
|
+
while IFS= read -r p; do
|
|
644
|
+
[[ -z "$p" ]] && continue
|
|
645
|
+
if (cd "$TARGET" && git add -- "$p" 2>/dev/null); then
|
|
646
|
+
ADDED=$((ADDED + 1))
|
|
647
|
+
else
|
|
648
|
+
echo "[install] WARN: git add skipped: $p" >&2
|
|
649
|
+
fi
|
|
650
|
+
done <<<"$SYNC_CHANGES"
|
|
651
|
+
if [[ "$ADDED" -gt 0 ]]; then
|
|
652
|
+
# commit 対象が staging にあるか最終確認 (空 commit 防止)
|
|
653
|
+
if (cd "$TARGET" && git diff --cached --quiet); then
|
|
654
|
+
echo "[install] WARN: nothing staged after git add — skip commit" >&2
|
|
655
|
+
else
|
|
656
|
+
COMMIT_MSG="chore(harness): sync .claude/ from hirai-method $(date -u +%Y-%m-%d)"
|
|
657
|
+
if (cd "$TARGET" && git commit -q -m "$COMMIT_MSG"); then
|
|
658
|
+
COMMIT_SHA=$(cd "$TARGET" && git rev-parse --short HEAD)
|
|
659
|
+
echo "[install] committed harness sync: ${COMMIT_SHA} (${ADDED} file(s))"
|
|
660
|
+
else
|
|
661
|
+
echo "[install] WARN: git commit failed (manual commit needed)" >&2
|
|
662
|
+
fi
|
|
663
|
+
fi
|
|
664
|
+
else
|
|
665
|
+
echo "[install] WARN: no files staged — skip commit" >&2
|
|
666
|
+
fi
|
|
667
|
+
unset ADDED COMMIT_MSG COMMIT_SHA
|
|
668
|
+
else
|
|
669
|
+
# default 案内 (honor system、user に分離 commit を促す)
|
|
670
|
+
echo "[install] HINT: commit these as a SEPARATE commit, e.g.:"
|
|
671
|
+
echo " cd $TARGET"
|
|
672
|
+
echo " git add .claude/"
|
|
673
|
+
echo " git commit -m 'chore(harness): sync .claude/ from hirai-method'"
|
|
674
|
+
echo "[install] HINT: or rerun with '--commit' to auto-commit harness sync only:"
|
|
675
|
+
echo " bash install.sh $TARGET --update --commit"
|
|
676
|
+
echo "[install] NOTE: keeping harness-sync separate from project work helps revert / blame."
|
|
677
|
+
fi
|
|
678
|
+
unset SYNC_COUNT
|
|
679
|
+
fi
|
|
680
|
+
unset SYNC_CHANGES
|
|
681
|
+
else
|
|
682
|
+
if $COMMIT_AFTER_SYNC; then
|
|
683
|
+
echo "[install] WARN: --commit requested but target is not a git repo — skip commit"
|
|
684
|
+
echo "[install] HINT: initialize git first: cd $TARGET && git init"
|
|
685
|
+
fi
|
|
686
|
+
fi
|
|
687
|
+
fi
|
|
688
|
+
|
|
689
|
+
# ============================================================
|
|
690
|
+
# 7. 検証 (config-loader 動作確認)
|
|
691
|
+
# ============================================================
|
|
692
|
+
if ! $DRY_RUN; then
|
|
693
|
+
echo ""
|
|
694
|
+
echo "[install] verifying config-loader.sh..."
|
|
695
|
+
if ( cd "$TARGET" && bash -c 'source .claude/hooks/lib/config-loader.sh && [[ -n "$HC_PROTECTED_PATHS" ]] && [[ -n "$HC_TASK_DIR" ]]' ); then
|
|
696
|
+
echo "[install] config-loader OK (HC_PROTECTED_PATHS / HC_TASK_DIR loaded)"
|
|
697
|
+
else
|
|
698
|
+
echo "[install] WARN: config-loader.sh did not export expected vars. Check $TARGET/.claude/harness-config.yml" >&2
|
|
699
|
+
fi
|
|
700
|
+
fi
|
|
701
|
+
|
|
702
|
+
# ============================================================
|
|
703
|
+
# 8. summary
|
|
704
|
+
# ============================================================
|
|
705
|
+
cat <<EOF
|
|
706
|
+
|
|
707
|
+
[install] DONE ($MODE mode).
|
|
708
|
+
|
|
709
|
+
Counts at target:
|
|
710
|
+
agents: $(find "$TARGET/.claude/agents" -maxdepth 2 -name '*.md' 2>/dev/null | wc -l | tr -d ' ')
|
|
711
|
+
skills: $(find "$TARGET/.claude/skills" -maxdepth 2 -name 'SKILL.md' 2>/dev/null | wc -l | tr -d ' ')
|
|
712
|
+
commands: $(find "$TARGET/.claude/commands" -maxdepth 1 -name '*.md' 2>/dev/null | wc -l | tr -d ' ')
|
|
713
|
+
hooks: $(find "$TARGET/.claude/hooks" -maxdepth 1 -name '*.sh' 2>/dev/null | wc -l | tr -d ' ')
|
|
714
|
+
rules: $(find "$TARGET/.claude/rules" -name '*.md' 2>/dev/null | wc -l | tr -d ' ')
|
|
715
|
+
|
|
716
|
+
Next steps:
|
|
717
|
+
1. cd $TARGET
|
|
718
|
+
2. project 固有 override (docs_approved_dir / protected_paths 追加分 等) は
|
|
719
|
+
\$EDITOR .claude/harness-config.local.yml # ←ココに書く (install.sh --update で温存される)
|
|
720
|
+
(SSoT .claude/harness-config.yml は触らない — --update で SSoT 値が上書きされる)
|
|
721
|
+
3. \$EDITOR .claude/bash-whitelist.txt # 使う CLI (pnpm/poetry/cargo/...) を追記
|
|
722
|
+
4. mv CLAUDE.md.template CLAUDE.md && \$EDITOR CLAUDE.md # <...> placeholders を埋める
|
|
723
|
+
5. (recommended) git init # observe.sh の project hash 検出を有効化
|
|
724
|
+
6. Claude Code session 起動 → /init-tasks → /mode loop
|
|
725
|
+
|
|
726
|
+
settings.json について (task-71 H2 / task-80):
|
|
727
|
+
- settings.json 本体は rsync exclude (repo 固有 permissions / preset を守る)。
|
|
728
|
+
- sync mode (--update / --force / --overwrite-all) では rsync 後に
|
|
729
|
+
generate-settings.sh で settings.json を **自動再生成済** (statusLine / dispatcher 配線同期、
|
|
730
|
+
permissions は verbatim 保持)。手動実行は不要 (失敗時のみ下記を手動実行):
|
|
731
|
+
bash .claude/scripts/generate-settings.sh --out .claude/settings.json
|
|
732
|
+
- mode 別の permissions 帰結 (意味が異なる):
|
|
733
|
+
--update : 既存 settings.json の permissions を verbatim 保持して再配線。
|
|
734
|
+
--force : .claude を破壊的リセット + settings.json は exclude のため再生成時は
|
|
735
|
+
既存不在 → fail-open skip (permissions 保持の前提は成立しない)。
|
|
736
|
+
--overwrite-all : settings.json も source で上書き済のため、保持される permissions は
|
|
737
|
+
**source 由来** (consuming repo の permissions は失われる = task-79 既定)。
|
|
738
|
+
- 自動再生成 skip 条件: jq 不在 / generate-settings.sh 不在 / 既存 settings.json 不在
|
|
739
|
+
(いずれも WARN/NOTE + install 継続)。新規 install (default mode) は settings.json を
|
|
740
|
+
配布しないため対象外。
|
|
741
|
+
- 注意: 手編集した独自トップレベル key / 独自 hook は manifest 由来に置換され脱落する。
|
|
742
|
+
独自 hook は dispatcher-manifest.tsv に登録すること (再生成で配線が保たれる)。
|
|
743
|
+
|
|
744
|
+
--overwrite-all について (task-79):
|
|
745
|
+
- drift した target を SSoT へ強制リセットする全上書き mode。
|
|
746
|
+
- settings.local.json **のみ** 温存し、それ以外 (settings.json / harness-config.local.yml /
|
|
747
|
+
state dir 群 / worktrees) も source で上書きする = target の local override は失われる。
|
|
748
|
+
- settings.json も上書きされるため、consuming repo は実行後
|
|
749
|
+
bash .claude/scripts/generate-settings.sh --out .claude/settings.json
|
|
750
|
+
で repo 固有 permissions から再生成すること (task-71 dispatcher 配線復元)。
|
|
751
|
+
- --delete は使わないため target にしかない file は残る (上書きのみ)。
|
|
752
|
+
- 用途は drift リセット専用。日常の harness 取込は --update を使うこと (local 設定を温存)。
|
|
753
|
+
|
|
754
|
+
project-rules/ について (task-82):
|
|
755
|
+
- .claude/project-rules/<name>.md は **project 所有** (update 免除)。harness 7 rule
|
|
756
|
+
(.claude/rules/*.md) から @import され、harness rule の後に結合 load される。
|
|
757
|
+
- harness rule の override / 追補はここに書く (7 harness rule 本体は触らない)。
|
|
758
|
+
update/force/overwrite-all いずれの mode でも rsync exclude + create-if-absent で保護
|
|
759
|
+
(なければ空テンプレ配置・あれば skip、既存編集は上書きされない)。
|
|
760
|
+
|
|
761
|
+
Override precedence (高 → 低):
|
|
762
|
+
env(HC_*) > .claude/harness-config.local.yml > .claude/harness-config.yml (SSoT) > hardcoded default
|
|
763
|
+
|
|
764
|
+
Documentation:
|
|
765
|
+
- README.md (採用 5 ステップ)
|
|
766
|
+
- docs/INVENTORY.md (全構成要素の Path 表)
|
|
767
|
+
- docs/PORTABILITY.md (他リポへの移植仕様)
|
|
768
|
+
- docs/SELF_IMPROVEMENT.md (F1-F3 + L1-L5)
|
|
769
|
+
EOF
|