@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
|
@@ -0,0 +1,784 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# config-loader.sh — pure-bash YAML loader for .claude/harness-config.yml
|
|
3
|
+
#
|
|
4
|
+
# 役割:
|
|
5
|
+
# harness-config.yml を読み、shell 変数として export する。
|
|
6
|
+
# 外部依存 (yq / python / jq) ゼロ。
|
|
7
|
+
#
|
|
8
|
+
# 値解決の優先順 (高 → 低):
|
|
9
|
+
# 1. 呼び出し時に既に export されている `HC_*` 環境変数 (env override)
|
|
10
|
+
# 2. `.claude/harness-config.yml` の値 (YAML)
|
|
11
|
+
# 3. 本ファイル内のハードコード defaults (fallback)
|
|
12
|
+
#
|
|
13
|
+
# これにより、プロジェクト切替は `.env` / shell rc / direnv で
|
|
14
|
+
# export HC_TASK_DIR=docs/tickets
|
|
15
|
+
# export HC_PROTECTED_PATHS=$'app\nlib\nscripts'
|
|
16
|
+
# と書くだけで完結する (yaml を編集する必要が無い)。
|
|
17
|
+
#
|
|
18
|
+
# 使い方:
|
|
19
|
+
# source .claude/hooks/lib/config-loader.sh
|
|
20
|
+
# echo "$HC_TASK_DIR" # docs/tasks
|
|
21
|
+
# echo "$HC_PROTECTED_PATHS" # 改行区切り: src\ntests\nscripts
|
|
22
|
+
# for p in $HC_PROTECTED_PATHS; do ... done # space split (改行→space で iterable)
|
|
23
|
+
#
|
|
24
|
+
# サポート YAML 形式:
|
|
25
|
+
# key: value → HC_KEY="value"
|
|
26
|
+
# key: "value" → HC_KEY="value" (quote 自動 strip)
|
|
27
|
+
# key: 'value' → HC_KEY="value"
|
|
28
|
+
# key: [a, b, c] → HC_KEY=$'a\nb\nc' (改行区切りリスト)
|
|
29
|
+
# key: value # comment → HC_KEY="value" (行末コメント strip、task-64 Step 1)
|
|
30
|
+
# # comment → 行頭 # スキップ
|
|
31
|
+
# (空行) → スキップ
|
|
32
|
+
#
|
|
33
|
+
# 行末コメント strip (task-64 Step 1):
|
|
34
|
+
# `key: value # comment` の行末コメントを除去する (hc-config.sh _yml_get_raw と同一ロジック)。
|
|
35
|
+
# 前後 `"..."` (double-quote) で囲んだ値は comment strip を skip し値内 `#` を保護する
|
|
36
|
+
# (例: `key: "https://x/#frag"` → `https://x/#frag`)。これにより hc-config.sh の
|
|
37
|
+
# read path (comment strip 済) と config-loader の read path の非対称が解消される。
|
|
38
|
+
#
|
|
39
|
+
# 非サポート (やらない):
|
|
40
|
+
# - ネスト (" child: value")
|
|
41
|
+
# - 複数行値 (`|` `>`)
|
|
42
|
+
# - YAML アンカー / リファレンス
|
|
43
|
+
# - 非 quote 値の mid-value `#` 保護 (例: `key: a#b` → `a` に truncate。
|
|
44
|
+
# `#` を含む値は `"a#b"` と double-quote する。hc-config.sh の書込挙動と一致)
|
|
45
|
+
#
|
|
46
|
+
# tilde 展開:
|
|
47
|
+
# `~` および `~/` で始まる値は $HOME に展開する (例: ~/.claude/homunculus → /Users/.../.claude/homunculus)。
|
|
48
|
+
# env override 経由で渡す場合も同様に展開される (`HC_HOMUNCULUS_ROOT=~/foo` → `$HOME/foo`)。
|
|
49
|
+
#
|
|
50
|
+
# fail-open 設計:
|
|
51
|
+
# - config 不在: WARN を stderr に出して既定値を export する
|
|
52
|
+
# - parse 失敗 1 行: その行のみスキップ
|
|
53
|
+
# - 必須キー欠如: 既定値 fallback (hook が動作不能にならないよう)
|
|
54
|
+
#
|
|
55
|
+
# bash 互換性:
|
|
56
|
+
# bash 3.2 (macOS 標準) でも動作する。`declare -g` `${var:-}` 等の
|
|
57
|
+
# bash 4+ 機能は使用しない。env preserve は eval ベースで実装。
|
|
58
|
+
|
|
59
|
+
# --- 設定ファイルパス決定 ---
|
|
60
|
+
# 優先順:
|
|
61
|
+
# 1. HC_CONFIG_PATH (環境変数で明示指定)
|
|
62
|
+
# 2. CLAUDE_PROJECT_DIR/.claude/harness-config.yml (Claude Code 注入)
|
|
63
|
+
# 3. <pwd>/.claude/harness-config.yml ("ハーネスがサブディレクトリ" な構成への対応)
|
|
64
|
+
# 4. <git toplevel>/.claude/harness-config.yml
|
|
65
|
+
# 5. <pwd>/.claude/harness-config.yml (最終 fallback)
|
|
66
|
+
_hc_resolve_config() {
|
|
67
|
+
if [ -n "${HC_CONFIG_PATH:-}" ]; then
|
|
68
|
+
printf '%s' "$HC_CONFIG_PATH"
|
|
69
|
+
return
|
|
70
|
+
fi
|
|
71
|
+
if [ -n "${CLAUDE_PROJECT_DIR:-}" ] && [ -f "${CLAUDE_PROJECT_DIR}/.claude/harness-config.yml" ]; then
|
|
72
|
+
printf '%s' "${CLAUDE_PROJECT_DIR}/.claude/harness-config.yml"
|
|
73
|
+
return
|
|
74
|
+
fi
|
|
75
|
+
if [ -f "$(pwd)/.claude/harness-config.yml" ]; then
|
|
76
|
+
printf '%s' "$(pwd)/.claude/harness-config.yml"
|
|
77
|
+
return
|
|
78
|
+
fi
|
|
79
|
+
if _hc_top=$(git rev-parse --show-toplevel 2>/dev/null); then
|
|
80
|
+
if [ -f "${_hc_top}/.claude/harness-config.yml" ]; then
|
|
81
|
+
printf '%s' "${_hc_top}/.claude/harness-config.yml"
|
|
82
|
+
return
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
# 最終 fallback (存在しなくても WARN だけ出して defaults で続行)
|
|
86
|
+
printf '%s' "$(pwd)/.claude/harness-config.yml"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
HC_CONFIG_PATH=$(_hc_resolve_config)
|
|
90
|
+
unset -f _hc_resolve_config
|
|
91
|
+
|
|
92
|
+
# --- 既知キー一覧 (env override の対象) ---
|
|
93
|
+
# YAML の key を _ 区切り大文字化したものを並べる。
|
|
94
|
+
# ここに無いキーは YAML から動的に load されるが、env override は適用されない
|
|
95
|
+
# (= 既存の挙動: env で先行設定してあっても YAML が上書きする)。
|
|
96
|
+
# 新規キーを追加した場合は本リストにも追加すること。
|
|
97
|
+
#
|
|
98
|
+
# task-44 (2026-05-27): feature toggle 21 + review 13 = 新 34 key 追加。
|
|
99
|
+
# 各 key は yml 未設定でも本 file 内 defaults で fallback 動作可能 (backward compat)。
|
|
100
|
+
_HC_KNOWN_KEYS="\
|
|
101
|
+
TASK_DIR \
|
|
102
|
+
DRAFT_DIR \
|
|
103
|
+
PROTECTED_PATHS \
|
|
104
|
+
BASH_WHITELIST_PATH \
|
|
105
|
+
GATEGUARD_STATE_DIR \
|
|
106
|
+
TASKGUARD_STATE_DIR \
|
|
107
|
+
AGENT_MARKER_DIR \
|
|
108
|
+
FAILURE_WINDOW_DIR \
|
|
109
|
+
HOMUNCULUS_ROOT \
|
|
110
|
+
NOTIFY_SOUND \
|
|
111
|
+
STOP_SOUND \
|
|
112
|
+
CONFIDENCE_THRESHOLD \
|
|
113
|
+
CONFIDENCE_REQUIRED \
|
|
114
|
+
CONFIDENCE_STATE_DIR \
|
|
115
|
+
REQUIRED_ENV \
|
|
116
|
+
IMPROVEMENT_PROPOSAL_ENABLED \
|
|
117
|
+
IMPROVEMENT_PROPOSAL_LOOKBACK_DAYS \
|
|
118
|
+
IMPROVEMENT_PROPOSAL_MAX_COUNT \
|
|
119
|
+
IMPROVEMENT_PROPOSAL_STATE_DIR \
|
|
120
|
+
IMPROVEMENT_PROPOSAL_DEDUP_HOURS \
|
|
121
|
+
CONTEXT_BUDGET_ENABLED \
|
|
122
|
+
CONTEXT_BUDGET_LIMIT \
|
|
123
|
+
CONTEXT_BUDGET_THRESHOLD \
|
|
124
|
+
CONTEXT_BUDGET_STATE_DIR \
|
|
125
|
+
LIST_PLAN_FIRST_REMINDER_ENABLED \
|
|
126
|
+
PARALLEL_SUBAGENT_REMINDER_ENABLED \
|
|
127
|
+
PARALLEL_SUBAGENT_TTL_SEC \
|
|
128
|
+
PARALLEL_SUBAGENT_STATE_DIR \
|
|
129
|
+
AGENT_TYPE_KEYWORD_MAPPING \
|
|
130
|
+
REVIEWER_REGISTRY_DESIGN \
|
|
131
|
+
REVIEWER_REGISTRY_SECURITY \
|
|
132
|
+
REVIEWER_REGISTRY_TEST \
|
|
133
|
+
REVIEWER_REGISTRY_IMPL \
|
|
134
|
+
WORKFLOW_STAGES_NEW \
|
|
135
|
+
WORKFLOW_STAGES_MODIFY \
|
|
136
|
+
DOCS_APPROVED_DIR \
|
|
137
|
+
RULE_CHANGE_GUARD_ENABLED \
|
|
138
|
+
LOOP_CONFIRMATION_DETECTION_ENABLED \
|
|
139
|
+
LOOP_CONFIRMATION_PATTERNS \
|
|
140
|
+
FEATURE_LOOP_MODE_ENFORCEMENT_ENABLED \
|
|
141
|
+
FEATURE_DRAFT_FLOW_GUARD_ENABLED \
|
|
142
|
+
FEATURE_TASK_RULE_GUARD_ENABLED \
|
|
143
|
+
FEATURE_DELEGATION_GUARD_ENABLED \
|
|
144
|
+
FEATURE_WORKFLOW_ENFORCEMENT_ENABLED \
|
|
145
|
+
FEATURE_CONFIDENCE_GATE_ENABLED \
|
|
146
|
+
FEATURE_GATEGUARD_ENABLED \
|
|
147
|
+
FEATURE_CONTEXT_BUDGET_ENABLED \
|
|
148
|
+
FEATURE_PARALLEL_SUBAGENT_REMINDER_ENABLED \
|
|
149
|
+
FEATURE_AUTONOMOUS_ACTION_GUARD_ENABLED \
|
|
150
|
+
FEATURE_BYPRODUCT_DISCHARGE_ENABLED \
|
|
151
|
+
FEATURE_WHY_X5_ENFORCEMENT_ENABLED \
|
|
152
|
+
FEATURE_SESSION_HELP_SURFACE_ENABLED \
|
|
153
|
+
FEATURE_IMPROVEMENT_PROPOSAL_ENABLED \
|
|
154
|
+
FEATURE_MODE_SESSION_START_ENABLED \
|
|
155
|
+
FEATURE_CHECK_SERENA_MCP_ENABLED \
|
|
156
|
+
FEATURE_CHECK_REQUIRED_ENV_ENABLED \
|
|
157
|
+
FEATURE_INIT_TASKS_ON_START_ENABLED \
|
|
158
|
+
FEATURE_NOTIFY_ENABLED \
|
|
159
|
+
FEATURE_CHECK_MD_MERMAID_ENABLED \
|
|
160
|
+
FEATURE_FAILURE_LOOP_DETECT_ENABLED \
|
|
161
|
+
FEATURE_REVIEWER_COUNT_GUARD_ENABLED \
|
|
162
|
+
FEATURE_TOOL_CALL_SLIP_DETECT_ENABLED \
|
|
163
|
+
FEATURE_HC_CONFIG_TUI_LEGACY_ENABLED \
|
|
164
|
+
FEATURE_STALE_HARNESS_DETECT_ENABLED \
|
|
165
|
+
STALE_HARNESS_CHECK_INTERVAL_HOURS \
|
|
166
|
+
HARNESS_NPM_VERSION \
|
|
167
|
+
FEATURE_AGENT_ROUTER_SUGGEST_ENABLED \
|
|
168
|
+
REVIEW_REQUIRED_DESIGN \
|
|
169
|
+
REVIEW_MIN_COUNT_DESIGN \
|
|
170
|
+
REVIEW_MAX_COUNT_DESIGN \
|
|
171
|
+
REVIEW_REQUIRED_TEST \
|
|
172
|
+
REVIEW_MIN_COUNT_TEST \
|
|
173
|
+
REVIEW_MAX_COUNT_TEST \
|
|
174
|
+
REVIEW_REQUIRED_MODULE \
|
|
175
|
+
REVIEW_MIN_COUNT_MODULE \
|
|
176
|
+
REVIEW_MAX_COUNT_MODULE \
|
|
177
|
+
REVIEW_REQUIRED_SYSTEM \
|
|
178
|
+
REVIEW_MIN_COUNT_SYSTEM \
|
|
179
|
+
REVIEW_MAX_COUNT_SYSTEM \
|
|
180
|
+
REVIEW_REQUIRED_SECURITY \
|
|
181
|
+
REVIEW_MIN_COUNT_SECURITY \
|
|
182
|
+
REVIEW_ITERATION_MAX \
|
|
183
|
+
MAINLINE_BRANCH \
|
|
184
|
+
MAINLINE_INTEGRATION_POLICY"
|
|
185
|
+
|
|
186
|
+
# --- Step 1: 呼び出し時 env をスナップショット ---
|
|
187
|
+
# bash 3.2 互換のため eval を使う (declare -g / ${!var} はあるが eval が最も安全)。
|
|
188
|
+
# preset key 一覧は _HC_PRESET_KEYS に保持し、step 4 で復元時に参照する。
|
|
189
|
+
_HC_PRESET_KEYS=""
|
|
190
|
+
for _hc_k in $_HC_KNOWN_KEYS; do
|
|
191
|
+
eval "_hc_v=\${HC_${_hc_k}-}"
|
|
192
|
+
eval "_hc_set=\${HC_${_hc_k}+set}"
|
|
193
|
+
# 「未設定」 と 「空文字列で設定済」 を区別するため `+set` を使う。
|
|
194
|
+
# env で `export HC_FOO=""` しているケースは「空で上書きしたい」意図とみなし
|
|
195
|
+
# YAML 値より優先する (YAML 側もシンプルに defaults へ戻すには unset すべき)。
|
|
196
|
+
if [ "$_hc_set" = "set" ]; then
|
|
197
|
+
_HC_PRESET_KEYS="$_HC_PRESET_KEYS $_hc_k"
|
|
198
|
+
eval "_HC_PRESET_${_hc_k}=\$_hc_v"
|
|
199
|
+
fi
|
|
200
|
+
done
|
|
201
|
+
unset _hc_k _hc_v _hc_set
|
|
202
|
+
|
|
203
|
+
# --- Step 1b: 真の env preset key 名 set をスナップショット (task-55) ---
|
|
204
|
+
# 目的: 「env で genuine に設定された HC_* key」を Step 2 defaults / YAML load 値と
|
|
205
|
+
# 区別するため、source 時点で env に存在する全 HC_* key 名を space-delimited で保持する。
|
|
206
|
+
#
|
|
207
|
+
# 背景 (task-55 で判明した既存 bug):
|
|
208
|
+
# 旧 parse loop は env > YAML guard を `${HC_<KEY>+set}` の live check で行っていたが、
|
|
209
|
+
# Step 2 defaults が全 known key を set 済にするため、known key の YAML 値が
|
|
210
|
+
# defaults に上書き skip され「YAML を書いても効かない」状態だった
|
|
211
|
+
# (docs_approved_dir / task_dir 等の project override が SSoT yml で効かなかった真因)。
|
|
212
|
+
#
|
|
213
|
+
# 修正方針:
|
|
214
|
+
# parse guard は live value ではなく本 Step 1b で取った「genuine env preset set」
|
|
215
|
+
# への所属判定で行う。これにより:
|
|
216
|
+
# - Step 2 defaults は YAML / local.yml に上書きされる (期待動作)
|
|
217
|
+
# - genuine env preset (known / 任意 key 問わず) は YAML / local.yml に勝つ
|
|
218
|
+
# _HC_KNOWN_KEYS に無い任意 key (例: HC_FEATURE_FOO_ENABLED) も拾うため、
|
|
219
|
+
# `env` / compgen ではなく POSIX 互換の `set` 出力 grep で HC_ 接頭辞 key を抽出する。
|
|
220
|
+
#
|
|
221
|
+
# 値解決の優先順 (高 → 低): env(HC_*) > local.yml > SSoT yml > hardcoded default
|
|
222
|
+
_HC_ENV_PRESET_SET=" "
|
|
223
|
+
while IFS='=' read -r _hc_envk _hc_envrest; do
|
|
224
|
+
case "$_hc_envk" in
|
|
225
|
+
HC_*)
|
|
226
|
+
# `HC_` 接頭辞を除去し upper key 名のみ保持 (space で囲んで部分一致誤検出を防ぐ)
|
|
227
|
+
_hc_envk="${_hc_envk#HC_}"
|
|
228
|
+
case " $_HC_ENV_PRESET_SET " in
|
|
229
|
+
*" $_hc_envk "*) ;; # 既出なら skip
|
|
230
|
+
*) _HC_ENV_PRESET_SET="${_HC_ENV_PRESET_SET}${_hc_envk} " ;;
|
|
231
|
+
esac
|
|
232
|
+
;;
|
|
233
|
+
esac
|
|
234
|
+
done <<EOF
|
|
235
|
+
$(set | grep '^HC_[A-Za-z0-9_]*=' 2>/dev/null || true)
|
|
236
|
+
EOF
|
|
237
|
+
unset _hc_envk _hc_envrest
|
|
238
|
+
|
|
239
|
+
# _hc_is_env_preset <UPPER_KEY> — genuine env preset への所属判定 (return 0 = preset)
|
|
240
|
+
_hc_is_env_preset() {
|
|
241
|
+
case "$_HC_ENV_PRESET_SET" in
|
|
242
|
+
*" $1 "*) return 0 ;;
|
|
243
|
+
*) return 1 ;;
|
|
244
|
+
esac
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
# --- Step 2: 既定値 (fallback) ---
|
|
248
|
+
# config 不在時 / 該当 key 欠如時にこの値が採用される。
|
|
249
|
+
# 旧来の hardcode と同等の振る舞いを保つ。
|
|
250
|
+
HC_PROTECTED_PATHS=$'src\ntests\nscripts'
|
|
251
|
+
HC_TASK_DIR="docs/tasks"
|
|
252
|
+
HC_DRAFT_DIR="docs/draft"
|
|
253
|
+
HC_BASH_WHITELIST_PATH=".claude/bash-whitelist.txt"
|
|
254
|
+
HC_GATEGUARD_STATE_DIR=".claude/.gateguard-state"
|
|
255
|
+
HC_TASKGUARD_STATE_DIR=".claude/.taskguard-state"
|
|
256
|
+
HC_AGENT_MARKER_DIR=".claude/.agent-markers"
|
|
257
|
+
HC_FAILURE_WINDOW_DIR=".claude/.failure-window"
|
|
258
|
+
HC_HOMUNCULUS_ROOT="$HOME/.claude/homunculus"
|
|
259
|
+
HC_NOTIFY_SOUND="/System/Library/Sounds/Hero.aiff"
|
|
260
|
+
HC_STOP_SOUND="/System/Library/Sounds/Glass.aiff"
|
|
261
|
+
HC_CONFIDENCE_THRESHOLD="0.6"
|
|
262
|
+
HC_CONFIDENCE_REQUIRED="true"
|
|
263
|
+
HC_CONFIDENCE_STATE_DIR=".claude/.confidence-gate-state"
|
|
264
|
+
HC_REQUIRED_ENV=""
|
|
265
|
+
HC_IMPROVEMENT_PROPOSAL_ENABLED="true"
|
|
266
|
+
HC_IMPROVEMENT_PROPOSAL_LOOKBACK_DAYS="7"
|
|
267
|
+
HC_IMPROVEMENT_PROPOSAL_MAX_COUNT="3"
|
|
268
|
+
HC_IMPROVEMENT_PROPOSAL_STATE_DIR=".claude/.improvement-proposal-state"
|
|
269
|
+
HC_IMPROVEMENT_PROPOSAL_DEDUP_HOURS="24"
|
|
270
|
+
HC_CONTEXT_BUDGET_ENABLED="true"
|
|
271
|
+
HC_CONTEXT_BUDGET_LIMIT="1000000"
|
|
272
|
+
HC_CONTEXT_BUDGET_THRESHOLD="0.60"
|
|
273
|
+
HC_CONTEXT_BUDGET_STATE_DIR=".claude/.context-budget-state"
|
|
274
|
+
HC_LIST_PLAN_FIRST_REMINDER_ENABLED="true"
|
|
275
|
+
HC_PARALLEL_SUBAGENT_REMINDER_ENABLED="true"
|
|
276
|
+
HC_PARALLEL_SUBAGENT_TTL_SEC="300"
|
|
277
|
+
# PARALLEL_SUBAGENT_STATE_DIR: 空文字なら hook 内 fallback (`$repo_root/.claude/.parallel-subagent-state/`) を使用。
|
|
278
|
+
# テスト isolation 用に上書きしたい場合のみ設定 (例: env `HC_PARALLEL_SUBAGENT_STATE_DIR=/tmp/foo`)。
|
|
279
|
+
HC_PARALLEL_SUBAGENT_STATE_DIR=""
|
|
280
|
+
# AGENT_TYPE_KEYWORD_MAPPING: hook 内 hardcode default を採用 (draft §4.5.0 設定不要原則)。
|
|
281
|
+
# 空文字が default、env override 経由でのみ上書き可。yaml 経由の multi-line value は
|
|
282
|
+
# config-loader.sh 単行 parser の制約で flat 1 行構文 (例: "keyword1|type1,keyword2|type2") 推奨。
|
|
283
|
+
HC_AGENT_TYPE_KEYWORD_MAPPING=""
|
|
284
|
+
HC_REVIEWER_REGISTRY_DESIGN=$'architect\narchitect-reviewer\ncode-architect'
|
|
285
|
+
HC_REVIEWER_REGISTRY_SECURITY=$'security-auditor\nsecurity-reviewer'
|
|
286
|
+
HC_REVIEWER_REGISTRY_TEST=$'tdd-guide\ntest-automator\nqa-expert'
|
|
287
|
+
HC_REVIEWER_REGISTRY_IMPL=$'code-reviewer\nrefactoring-specialist'
|
|
288
|
+
HC_WORKFLOW_STAGES_NEW=$'requirements\nbasic-design\ndetailed-design\ntest-design\ndesign-review\nuser-approval\ntask-creation\ntdd\nmodule-review\nlocal-test\nsystem-review\nci-cd\nscenario-test\nfinish'
|
|
289
|
+
HC_WORKFLOW_STAGES_MODIFY=$'branch-decision\ncheckout\nrecover-design\npre-test\nredesign\nretest-design\ntdd\nmodule-review\nfull-test\nsystem-review'
|
|
290
|
+
HC_DOCS_APPROVED_DIR=""
|
|
291
|
+
# RULE_CHANGE_GUARD_ENABLED (task-40): draft-flow-guard.sh の .claude/rules/*.md 等への
|
|
292
|
+
# 規範変更 BLOCK 機構を on/off するスイッチ。default true (機械強制 BLOCK 有効)。
|
|
293
|
+
# false で task-40 拡張のみ完全停止 (docs/ 直下 block は維持)。
|
|
294
|
+
HC_RULE_CHANGE_GUARD_ENABLED="true"
|
|
295
|
+
# LOOP_CONFIRMATION_DETECTION_ENABLED (task-41): Stop hook loop-confirmation-detector.sh の
|
|
296
|
+
# Loop モード確認質問検出機構を on/off するスイッチ。default true。
|
|
297
|
+
# false で hook を完全停止 (Normal モードと等価動作)。
|
|
298
|
+
HC_LOOP_CONFIRMATION_DETECTION_ENABLED="true"
|
|
299
|
+
# LOOP_CONFIRMATION_PATTERNS (task-41): 確認質問検出 regex リスト (改行区切り)。
|
|
300
|
+
# 空文字なら hook 内 default 使用 (推奨)。env override 経由でのみ上書き可。
|
|
301
|
+
HC_LOOP_CONFIRMATION_PATTERNS=""
|
|
302
|
+
|
|
303
|
+
# --- Feature toggles (task-44 Phase 1、2026-05-27 追加) ---
|
|
304
|
+
# 機能単位 on/off スイッチ (21 件)。default true (全 feature 有効)。
|
|
305
|
+
# 各 feature は関連 hook 群を統括する上位 layer。
|
|
306
|
+
# 採用先 yml に key 不在でも本 defaults で fallback 動作 (backward compat)。
|
|
307
|
+
# env override: HC_FEATURE_<NAME>_ENABLED=false で個別 OFF 可能。
|
|
308
|
+
HC_FEATURE_LOOP_MODE_ENFORCEMENT_ENABLED="true"
|
|
309
|
+
HC_FEATURE_DRAFT_FLOW_GUARD_ENABLED="true"
|
|
310
|
+
HC_FEATURE_TASK_RULE_GUARD_ENABLED="true"
|
|
311
|
+
HC_FEATURE_DELEGATION_GUARD_ENABLED="true"
|
|
312
|
+
HC_FEATURE_WORKFLOW_ENFORCEMENT_ENABLED="true"
|
|
313
|
+
HC_FEATURE_CONFIDENCE_GATE_ENABLED="true"
|
|
314
|
+
HC_FEATURE_GATEGUARD_ENABLED="true"
|
|
315
|
+
HC_FEATURE_CONTEXT_BUDGET_ENABLED="true"
|
|
316
|
+
HC_FEATURE_PARALLEL_SUBAGENT_REMINDER_ENABLED="true"
|
|
317
|
+
HC_FEATURE_AUTONOMOUS_ACTION_GUARD_ENABLED="true"
|
|
318
|
+
HC_FEATURE_BYPRODUCT_DISCHARGE_ENABLED="true"
|
|
319
|
+
HC_FEATURE_WHY_X5_ENFORCEMENT_ENABLED="true"
|
|
320
|
+
HC_FEATURE_SESSION_HELP_SURFACE_ENABLED="true"
|
|
321
|
+
HC_FEATURE_IMPROVEMENT_PROPOSAL_ENABLED="true"
|
|
322
|
+
HC_FEATURE_MODE_SESSION_START_ENABLED="true"
|
|
323
|
+
HC_FEATURE_CHECK_SERENA_MCP_ENABLED="true"
|
|
324
|
+
HC_FEATURE_CHECK_REQUIRED_ENV_ENABLED="true"
|
|
325
|
+
HC_FEATURE_INIT_TASKS_ON_START_ENABLED="true"
|
|
326
|
+
HC_FEATURE_NOTIFY_ENABLED="true"
|
|
327
|
+
HC_FEATURE_CHECK_MD_MERMAID_ENABLED="true"
|
|
328
|
+
HC_FEATURE_FAILURE_LOOP_DETECT_ENABLED="true"
|
|
329
|
+
# reviewer-count-guard.sh (task-64 Step 5): PreToolUse(Agent) reviewer 数上限 warn hook
|
|
330
|
+
HC_FEATURE_REVIEWER_COUNT_GUARD_ENABLED="true"
|
|
331
|
+
# tool-call-slip-detector.sh (next-actions #66): Stop hook、tool-call markup slip 検出
|
|
332
|
+
HC_FEATURE_TOOL_CALL_SLIP_DETECT_ENABLED="true"
|
|
333
|
+
# stale-harness-detect.sh (task-56 F): SessionStart hook、consuming repo の harness 鮮度検出
|
|
334
|
+
HC_FEATURE_STALE_HARNESS_DETECT_ENABLED="true"
|
|
335
|
+
# stale-harness-detect.sh (task-84): registry 比較の throttle 間隔 (時間) + npm semver stamp
|
|
336
|
+
HC_STALE_HARNESS_CHECK_INTERVAL_HOURS="24"
|
|
337
|
+
# L3 (task-84 fix): HC_HARNESS_NPM_VERSION は対称性のため export するが、
|
|
338
|
+
# stale-harness-detect.sh は throttle / stamp 比較で yml を直接 grep するため本 env を消費しない
|
|
339
|
+
# (env override で stamp を偽装できない設計)。consumer 追加時はここを更新する。
|
|
340
|
+
HC_HARNESS_NPM_VERSION=""
|
|
341
|
+
# agent-router-suggest.sh (task-81): UserPromptSubmit hook、named agent 推薦 hint を条件付き 1 行注入
|
|
342
|
+
HC_FEATURE_AGENT_ROUTER_SUGGEST_ENABLED="true"
|
|
343
|
+
# hc-config.sh interactive の TUI legacy fallback (task-61 Step 5 iter 4 D、
|
|
344
|
+
# config-loader.sh の対称性 + env override snapshot を確保。default false = Web UI 起動)
|
|
345
|
+
HC_FEATURE_HC_CONFIG_TUI_LEGACY_ENABLED="false"
|
|
346
|
+
|
|
347
|
+
# --- Enforcement Preset (task-70 Phase 2) ---
|
|
348
|
+
# default_preset: 本 repo で適用する preset (advisory/team-default/strict/harness-dev)。
|
|
349
|
+
# --summary / enforcement-mismatch-smoke が guard の期待 enabled 状態を引く基準。
|
|
350
|
+
# 実 enforcement の on/off は feature_*_enabled が SSoT (本 key は照合用の期待値選択のみ)。
|
|
351
|
+
# enforcement_matrix は nested block のため flat parser では HC_ENFORCEMENT_MATRIX="" になる
|
|
352
|
+
# (top-level key としてのみ認識)。matrix 内容は yml 直 parse で読む (--summary / smoke)。
|
|
353
|
+
HC_DEFAULT_PRESET="harness-dev"
|
|
354
|
+
HC_ENFORCEMENT_MATRIX=""
|
|
355
|
+
|
|
356
|
+
# --- Git 統合ポリシー (task-77、draft git-integration-policy.md §3.1/§3.4) ---
|
|
357
|
+
# mainline_branch: AI が merge 先とする本流(統合)ブランチ (master/develop/trunk 等に変更可)。
|
|
358
|
+
# mainline_integration_policy: 本流への統合ポリシー (pr-required/local-merge/local-merge-push)。
|
|
359
|
+
# 値解決: env(HC_*) > local.yml > yml > default。不正/未知値は hook 実行時に
|
|
360
|
+
# fail-safe で pr-required 扱い (本 default で fallback、guard 側で再検証)。
|
|
361
|
+
HC_MAINLINE_BRANCH="main"
|
|
362
|
+
HC_MAINLINE_INTEGRATION_POLICY="pr-required"
|
|
363
|
+
|
|
364
|
+
# --- Reviewer 制御 (task-44 Phase 1、2026-05-27 追加) ---
|
|
365
|
+
# review_required_* (bool default true、security のみ false): false で当該 review command を skip
|
|
366
|
+
# review_min_count_* (int): reviewer 並列起動最低数 (採用 6 条 4 同期)
|
|
367
|
+
# review_max_count_* (int): reviewer 並列起動上限 (registry 件数で絞り込み)
|
|
368
|
+
# review_iteration_max: 反復上限 (default 5、超過時 user escalation)
|
|
369
|
+
HC_REVIEW_REQUIRED_DESIGN="true"
|
|
370
|
+
HC_REVIEW_MIN_COUNT_DESIGN="3"
|
|
371
|
+
HC_REVIEW_MAX_COUNT_DESIGN="7"
|
|
372
|
+
HC_REVIEW_REQUIRED_TEST="true"
|
|
373
|
+
HC_REVIEW_MIN_COUNT_TEST="5"
|
|
374
|
+
HC_REVIEW_MAX_COUNT_TEST="10"
|
|
375
|
+
HC_REVIEW_REQUIRED_MODULE="true"
|
|
376
|
+
HC_REVIEW_MIN_COUNT_MODULE="2"
|
|
377
|
+
HC_REVIEW_MAX_COUNT_MODULE="5"
|
|
378
|
+
HC_REVIEW_REQUIRED_SYSTEM="true"
|
|
379
|
+
HC_REVIEW_MIN_COUNT_SYSTEM="2"
|
|
380
|
+
HC_REVIEW_MAX_COUNT_SYSTEM="5"
|
|
381
|
+
HC_REVIEW_REQUIRED_SECURITY="false"
|
|
382
|
+
HC_REVIEW_MIN_COUNT_SECURITY="1"
|
|
383
|
+
HC_REVIEW_ITERATION_MAX="5"
|
|
384
|
+
|
|
385
|
+
# --- 値整形 helper ---
|
|
386
|
+
# tilde 展開 + クォート strip + 前後空白 trim
|
|
387
|
+
_hc_normalize() {
|
|
388
|
+
local v="$1"
|
|
389
|
+
# 前後空白 trim
|
|
390
|
+
v="${v#"${v%%[![:space:]]*}"}"
|
|
391
|
+
v="${v%"${v##*[![:space:]]}"}"
|
|
392
|
+
# 外側のクォート strip ('value' / "value")
|
|
393
|
+
if [ "${#v}" -ge 2 ]; then
|
|
394
|
+
case "$v" in
|
|
395
|
+
\"*\") v="${v#\"}"; v="${v%\"}" ;;
|
|
396
|
+
\'*\') v="${v#\'}"; v="${v%\'}" ;;
|
|
397
|
+
esac
|
|
398
|
+
fi
|
|
399
|
+
# tilde 展開 (~/foo / ~ のみ。~user/foo は非対応)
|
|
400
|
+
# 注: ${v#~/} は bash の tilde 展開が走り `/Users/.../~/...` になるので、
|
|
401
|
+
# パターンは必ず `"~/"` のように引用符で囲む。
|
|
402
|
+
case "$v" in
|
|
403
|
+
"~") v="$HOME" ;;
|
|
404
|
+
"~/"*) v="$HOME/${v#"~/"}" ;;
|
|
405
|
+
esac
|
|
406
|
+
printf '%s' "$v"
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
# --- 行末コメント strip helper (task-64 Step 1) ---
|
|
410
|
+
# yml 単行 value の行末コメント (`value # comment`) を除去する。
|
|
411
|
+
# hc-config.sh の _yml_get_raw と同一ロジックで実装し、2 read path の非対称
|
|
412
|
+
# (config-loader = comment 込み export / hc-config = comment strip 済) を解消する。
|
|
413
|
+
#
|
|
414
|
+
# 入力前提:
|
|
415
|
+
# $1 = 前後空白 trim 済の value 文字列 (caller 側で trim 後に渡す)
|
|
416
|
+
#
|
|
417
|
+
# ロジック (_yml_get_raw L293-308 と同一):
|
|
418
|
+
# 1. 前後 `"..."` (double-quote) 形式なら comment strip を skip:
|
|
419
|
+
# → quote 解除 + `\\`→`\` (先) + `\"`→`"` (後) unescape のみ実施。
|
|
420
|
+
# (hc-config.sh が HC_ALLOW_HASH_IN_VALUE=1 で # 含む値を double-quote 保存する
|
|
421
|
+
# round-trip 整合性のため。値内 `#` を保護する唯一の正規 path。)
|
|
422
|
+
# 2. それ以外 (quote なし) は `${val%%#*}` で **最初の `#` 以降を strip** + trailing 空白再 trim。
|
|
423
|
+
# (非 quote 値が mid-value `#` を含む状況は hc-config.sh 書込時に reject されるため、
|
|
424
|
+
# inline array `[a, b, c] # comment` も含めて本 strip で安全に comment 除去できる。)
|
|
425
|
+
#
|
|
426
|
+
# 注意:
|
|
427
|
+
# - 外側 quote (single/double) の最終 strip は _hc_normalize / 配列 parser 側が担うため、
|
|
428
|
+
# 本 helper は double-quote escape path のみ自前で unquote する (round-trip 値の確定のため)。
|
|
429
|
+
# - 単一引用符 `'value' # comment` も非 double-quote path に入り `#` strip される
|
|
430
|
+
# (_yml_get_raw と同じ。single-quote 内 `#` 保護は元々非対応で挙動一致)。
|
|
431
|
+
_hc_strip_inline_comment() {
|
|
432
|
+
_hcsic_v="$1"
|
|
433
|
+
# 前後 `"..."` (double-quote) 形式判定 (length >= 2)
|
|
434
|
+
if [ "${#_hcsic_v}" -ge 2 ] \
|
|
435
|
+
&& [ "${_hcsic_v:0:1}" = '"' ] \
|
|
436
|
+
&& [ "${_hcsic_v: -1}" = '"' ]; then
|
|
437
|
+
# double-quote 解除 + unescape (comment strip skip、値内 `#` 保護)
|
|
438
|
+
_hcsic_v="${_hcsic_v#\"}"
|
|
439
|
+
_hcsic_v="${_hcsic_v%\"}"
|
|
440
|
+
_hcsic_v="${_hcsic_v//\\\\/\\}"
|
|
441
|
+
_hcsic_v="${_hcsic_v//\\\"/\"}"
|
|
442
|
+
printf '%s' "$_hcsic_v"
|
|
443
|
+
return 0
|
|
444
|
+
fi
|
|
445
|
+
# 通常 path: 最初の `#` 以降を strip + trailing 空白再 trim
|
|
446
|
+
_hcsic_v="${_hcsic_v%%#*}"
|
|
447
|
+
_hcsic_v="${_hcsic_v%"${_hcsic_v##*[![:space:]]}"}"
|
|
448
|
+
printf '%s' "$_hcsic_v"
|
|
449
|
+
return 0
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
# --- Step 3 helper: 1 つの YAML file を parse して HC_* に反映 ---
|
|
453
|
+
# _hc_parse_yaml_file <path>
|
|
454
|
+
# file の各 key: value 行を HC_<UPPER>= に load する。
|
|
455
|
+
# genuine env preset key (Step 1b の _HC_ENV_PRESET_SET 所属) は上書き skip
|
|
456
|
+
# (env > file priority)。defaults / 先に load した別 file の値は上書きする
|
|
457
|
+
# (これにより local.yml が SSoT yml に勝つ tier 関係を実現)。
|
|
458
|
+
# 存在しない file は no-op (graceful、SSoT 不在時のみ caller が WARN を出す)。
|
|
459
|
+
_hc_parse_yaml_file() {
|
|
460
|
+
_hc_file="$1"
|
|
461
|
+
[ -f "$_hc_file" ] || return 0
|
|
462
|
+
# bash の read を使う。IFS で分割しない (line 全体保持)。
|
|
463
|
+
while IFS= read -r _hc_line || [ -n "$_hc_line" ]; do
|
|
464
|
+
# 行頭空白 trim (CRLF も除去)
|
|
465
|
+
_hc_line="${_hc_line%$'\r'}"
|
|
466
|
+
_hc_stripped="${_hc_line#"${_hc_line%%[![:space:]]*}"}"
|
|
467
|
+
# コメント / 空行
|
|
468
|
+
case "$_hc_stripped" in
|
|
469
|
+
''|\#*) continue ;;
|
|
470
|
+
esac
|
|
471
|
+
# ネスト行 (先頭インデントあり) は非対応 → skip
|
|
472
|
+
case "$_hc_line" in
|
|
473
|
+
[[:space:]]*) continue ;;
|
|
474
|
+
esac
|
|
475
|
+
# `key:` 区切り判定
|
|
476
|
+
case "$_hc_stripped" in
|
|
477
|
+
*:*) ;;
|
|
478
|
+
*) continue ;;
|
|
479
|
+
esac
|
|
480
|
+
_hc_key="${_hc_stripped%%:*}"
|
|
481
|
+
_hc_val="${_hc_stripped#*:}"
|
|
482
|
+
# key を大文字 + 非英数を _ に正規化
|
|
483
|
+
_hc_key_upper=$(printf '%s' "$_hc_key" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]_' '_')
|
|
484
|
+
_hc_key_upper="${_hc_key_upper%_}" # 末尾 _ 除去
|
|
485
|
+
# 値の前後空白 trim
|
|
486
|
+
_hc_val="${_hc_val#"${_hc_val%%[![:space:]]*}"}"
|
|
487
|
+
_hc_val="${_hc_val%"${_hc_val##*[![:space:]]}"}"
|
|
488
|
+
# 行末コメント strip (task-64 Step 1、hc-config.sh _yml_get_raw と同一ロジック)。
|
|
489
|
+
# `key: value # comment` → `value`。前後 `"..."` 値は comment strip skip + unquote
|
|
490
|
+
# (値内 `#` 保護)。array `[a, b] # comment` も非 quote path で安全に comment 除去。
|
|
491
|
+
# 旧挙動 (comment 込み export、L36 制約) を解消し 2 read path の非対称を是正する。
|
|
492
|
+
_hc_val=$(_hc_strip_inline_comment "$_hc_val")
|
|
493
|
+
# env > file priority guard (task-55 修正):
|
|
494
|
+
# genuine env preset (Step 1b で snapshot した key) のみ上書き skip。
|
|
495
|
+
# 旧実装は `${HC_<KEY>+set}` の live check だったが、Step 2 defaults が
|
|
496
|
+
# 全 known key を set 済にするため YAML 値が defaults に負ける bug があった。
|
|
497
|
+
# 本判定は env preset set への所属で行うため、defaults / 別 file の load 値は
|
|
498
|
+
# 正しく上書きされる (local.yml > SSoT yml > defaults の tier が成立)。
|
|
499
|
+
if _hc_is_env_preset "$_hc_key_upper"; then
|
|
500
|
+
continue
|
|
501
|
+
fi
|
|
502
|
+
# 配列構文 [a, b, c] 判定
|
|
503
|
+
case "$_hc_val" in
|
|
504
|
+
\[*\])
|
|
505
|
+
_hc_inner="${_hc_val#\[}"
|
|
506
|
+
_hc_inner="${_hc_inner%\]}"
|
|
507
|
+
_hc_list=""
|
|
508
|
+
# 空配列 `[]` は中身なしで eval (set -u 下で _hc_items[@] unbound を回避)
|
|
509
|
+
# 内側を trim して空判定
|
|
510
|
+
_hc_inner_trim="${_hc_inner#"${_hc_inner%%[![:space:]]*}"}"
|
|
511
|
+
_hc_inner_trim="${_hc_inner_trim%"${_hc_inner_trim##*[![:space:]]}"}"
|
|
512
|
+
if [ -n "$_hc_inner_trim" ]; then
|
|
513
|
+
# `,` で分割
|
|
514
|
+
IFS=',' read -ra _hc_items <<< "$_hc_inner"
|
|
515
|
+
for _hc_item in "${_hc_items[@]}"; do
|
|
516
|
+
_hc_norm=$(_hc_normalize "$_hc_item")
|
|
517
|
+
if [ -n "$_hc_norm" ]; then
|
|
518
|
+
if [ -z "$_hc_list" ]; then
|
|
519
|
+
_hc_list="$_hc_norm"
|
|
520
|
+
else
|
|
521
|
+
_hc_list="$_hc_list"$'\n'"$_hc_norm"
|
|
522
|
+
fi
|
|
523
|
+
fi
|
|
524
|
+
done
|
|
525
|
+
fi
|
|
526
|
+
eval "HC_${_hc_key_upper}=\"\$_hc_list\""
|
|
527
|
+
;;
|
|
528
|
+
*)
|
|
529
|
+
_hc_norm=$(_hc_normalize "$_hc_val")
|
|
530
|
+
eval "HC_${_hc_key_upper}=\"\$_hc_norm\""
|
|
531
|
+
;;
|
|
532
|
+
esac
|
|
533
|
+
done < "$_hc_file"
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
# --- Step 3: SSoT YAML parse ---
|
|
537
|
+
# config 不在は warning のみ (fail-open)。
|
|
538
|
+
if [ ! -f "$HC_CONFIG_PATH" ]; then
|
|
539
|
+
printf '[config-loader] WARN: %s not found, using defaults\n' "$HC_CONFIG_PATH" >&2
|
|
540
|
+
else
|
|
541
|
+
_hc_parse_yaml_file "$HC_CONFIG_PATH"
|
|
542
|
+
fi
|
|
543
|
+
|
|
544
|
+
# --- Step 3.5: project 固有 override (harness-config.local.yml) parse (task-55) ---
|
|
545
|
+
# 役割:
|
|
546
|
+
# project 固有の override 値を SSoT harness-config.yml とは別 file に置く。
|
|
547
|
+
# この file は install.sh の rsync で除外される (settings.local.json と同じ扱い)
|
|
548
|
+
# ため、`install.sh --update` で SSoT が上書きされても project override が温存される。
|
|
549
|
+
#
|
|
550
|
+
# 値解決の優先順 (高 → 低): env(HC_*) > local.yml > SSoT yml > hardcoded default
|
|
551
|
+
# - local.yml は SSoT load 後に parse するため SSoT 値に勝つ
|
|
552
|
+
# - genuine env preset には負ける (_hc_parse_yaml_file の env guard で skip)
|
|
553
|
+
#
|
|
554
|
+
# graceful degrade:
|
|
555
|
+
# local.yml 不在環境は完全に現状通り (no-op)。`cp -r .claude` で即動く portability を維持。
|
|
556
|
+
#
|
|
557
|
+
# path 解決:
|
|
558
|
+
# SSoT yml と同 dir の harness-config.local.yml を採用。
|
|
559
|
+
# HC_LOCAL_CONFIG_PATH env で明示上書きも可 (test isolation 用)。
|
|
560
|
+
if [ -n "${HC_LOCAL_CONFIG_PATH:-}" ]; then
|
|
561
|
+
_hc_local_config="$HC_LOCAL_CONFIG_PATH"
|
|
562
|
+
else
|
|
563
|
+
_hc_config_dir=$(dirname "$HC_CONFIG_PATH")
|
|
564
|
+
_hc_local_config="${_hc_config_dir}/harness-config.local.yml"
|
|
565
|
+
unset _hc_config_dir
|
|
566
|
+
fi
|
|
567
|
+
# 不在なら no-op (graceful)。存在すれば SSoT 値を上書き parse。
|
|
568
|
+
_hc_parse_yaml_file "$_hc_local_config"
|
|
569
|
+
export HC_LOCAL_CONFIG_PATH="$_hc_local_config"
|
|
570
|
+
|
|
571
|
+
# --- Step 3.6: unknown_local_key warning (task-69 Step 4) ---
|
|
572
|
+
# 役割:
|
|
573
|
+
# local.yml にのみ存在し SSoT yml に無い top-level key を WARN として stderr 出力する。
|
|
574
|
+
# local override は「既存 SSoT key の値を上書きする層」であり、key 追加の SSoT にはしない
|
|
575
|
+
# (draft §4.1「local override の扱い」)。local にだけある key は誤字 (typo) の可能性が高いため
|
|
576
|
+
# 検出して operator に知らせる。
|
|
577
|
+
#
|
|
578
|
+
# 設計:
|
|
579
|
+
# - SSoT yml と local.yml の両方が存在する時のみ実行 (どちらか不在は no-op = graceful)。
|
|
580
|
+
# - top-level key 抽出は `^[a-z_][a-zA-Z0-9_]*:` (hc-config.sh _yml_list_keys / parity smoke と同一 regex)。
|
|
581
|
+
# - SSoT key set を space で囲んだ string にして部分一致誤検出を防ぐ membership 判定 (bash 3.2 互換)。
|
|
582
|
+
# - fail-open: warning のみで export 値や exit code には影響させない (hook を壊さない)。
|
|
583
|
+
# - 一時無効化: HC_UNKNOWN_LOCAL_KEY_WARN=0 で抑止 (騒がしい環境向け)。
|
|
584
|
+
_hc_list_top_keys() {
|
|
585
|
+
grep -E '^[a-z_][a-zA-Z0-9_]*:' "$1" 2>/dev/null | sed -E 's/:.*$//' || true
|
|
586
|
+
}
|
|
587
|
+
if [ "${HC_UNKNOWN_LOCAL_KEY_WARN:-1}" != "0" ] \
|
|
588
|
+
&& [ -f "$HC_CONFIG_PATH" ] && [ -f "$_hc_local_config" ]; then
|
|
589
|
+
_hc_ssot_keyset=" "
|
|
590
|
+
while IFS= read -r _hc_kk; do
|
|
591
|
+
[ -z "$_hc_kk" ] && continue
|
|
592
|
+
_hc_ssot_keyset="${_hc_ssot_keyset}${_hc_kk} "
|
|
593
|
+
done <<EOF
|
|
594
|
+
$(_hc_list_top_keys "$HC_CONFIG_PATH")
|
|
595
|
+
EOF
|
|
596
|
+
while IFS= read -r _hc_lk; do
|
|
597
|
+
[ -z "$_hc_lk" ] && continue
|
|
598
|
+
case "$_hc_ssot_keyset" in
|
|
599
|
+
*" $_hc_lk "*) ;; # SSoT に存在 = 正規 override
|
|
600
|
+
*) printf '[config-loader] WARN: unknown_local_key: %s (in %s but not in SSoT %s; possible typo)\n' \
|
|
601
|
+
"$_hc_lk" "$_hc_local_config" "$HC_CONFIG_PATH" >&2 ;;
|
|
602
|
+
esac
|
|
603
|
+
done <<EOF
|
|
604
|
+
$(_hc_list_top_keys "$_hc_local_config")
|
|
605
|
+
EOF
|
|
606
|
+
unset _hc_ssot_keyset _hc_kk _hc_lk
|
|
607
|
+
fi
|
|
608
|
+
unset -f _hc_list_top_keys
|
|
609
|
+
|
|
610
|
+
unset _hc_local_config
|
|
611
|
+
unset -f _hc_parse_yaml_file
|
|
612
|
+
|
|
613
|
+
# --- Step 4: env preset を復元 (env > local.yml > YAML > defaults) ---
|
|
614
|
+
# Step 1 で snapshot した preset key について、env 値を強制適用する。
|
|
615
|
+
# tilde 展開は env override 値に対しても適用する (homunculus_root 等で
|
|
616
|
+
# `~/foo` を export している場合に展開される)。
|
|
617
|
+
for _hc_k in $_HC_PRESET_KEYS; do
|
|
618
|
+
eval "_hc_v=\$_HC_PRESET_${_hc_k}"
|
|
619
|
+
_hc_v=$(_hc_normalize "$_hc_v")
|
|
620
|
+
eval "HC_${_hc_k}=\$_hc_v"
|
|
621
|
+
done
|
|
622
|
+
|
|
623
|
+
# --- Step 5: preset 一時変数を unset (caller を汚染しない) ---
|
|
624
|
+
for _hc_k in $_HC_PRESET_KEYS; do
|
|
625
|
+
unset "_HC_PRESET_${_hc_k}"
|
|
626
|
+
done
|
|
627
|
+
unset _HC_PRESET_KEYS _HC_KNOWN_KEYS
|
|
628
|
+
unset _HC_ENV_PRESET_SET
|
|
629
|
+
unset -f _hc_is_env_preset
|
|
630
|
+
unset _hc_k _hc_v
|
|
631
|
+
|
|
632
|
+
# --- protected_paths 派生値 ---
|
|
633
|
+
# delegation-guard が case glob で使うパターン (例: "*/src/*|*/tests/*|*/scripts/*")
|
|
634
|
+
HC_PROTECTED_GLOB_FILE=""
|
|
635
|
+
HC_PROTECTED_GLOB_DIR=""
|
|
636
|
+
HC_PROTECTED_LEAK_REGEX=""
|
|
637
|
+
while IFS= read -r _hc_p; do
|
|
638
|
+
[ -z "$_hc_p" ] && continue
|
|
639
|
+
if [ -z "$HC_PROTECTED_GLOB_FILE" ]; then
|
|
640
|
+
HC_PROTECTED_GLOB_FILE="*/${_hc_p}/*"
|
|
641
|
+
else
|
|
642
|
+
HC_PROTECTED_GLOB_FILE="${HC_PROTECTED_GLOB_FILE}|*/${_hc_p}/*"
|
|
643
|
+
fi
|
|
644
|
+
# Grep/Glob 用 (path 末尾 = ディレクトリ指定も対象)
|
|
645
|
+
if [ -z "$HC_PROTECTED_GLOB_DIR" ]; then
|
|
646
|
+
HC_PROTECTED_GLOB_DIR="*/${_hc_p}/*|*/${_hc_p}"
|
|
647
|
+
else
|
|
648
|
+
HC_PROTECTED_GLOB_DIR="${HC_PROTECTED_GLOB_DIR}|*/${_hc_p}/*|*/${_hc_p}"
|
|
649
|
+
fi
|
|
650
|
+
# Bash path-leak 検査用 alternation (regex の OR)
|
|
651
|
+
if [ -z "$HC_PROTECTED_LEAK_REGEX" ]; then
|
|
652
|
+
HC_PROTECTED_LEAK_REGEX="${_hc_p}"
|
|
653
|
+
else
|
|
654
|
+
HC_PROTECTED_LEAK_REGEX="${HC_PROTECTED_LEAK_REGEX}|${_hc_p}"
|
|
655
|
+
fi
|
|
656
|
+
done <<< "$HC_PROTECTED_PATHS"
|
|
657
|
+
|
|
658
|
+
# --- ヒューマンリーダブル形 (エラーメッセージ用) ---
|
|
659
|
+
# "src/ tests/ scripts/" のような表示文字列。
|
|
660
|
+
HC_PROTECTED_DISPLAY=""
|
|
661
|
+
while IFS= read -r _hc_p; do
|
|
662
|
+
[ -z "$_hc_p" ] && continue
|
|
663
|
+
if [ -z "$HC_PROTECTED_DISPLAY" ]; then
|
|
664
|
+
HC_PROTECTED_DISPLAY="${_hc_p}/"
|
|
665
|
+
else
|
|
666
|
+
HC_PROTECTED_DISPLAY="${HC_PROTECTED_DISPLAY} ${_hc_p}/"
|
|
667
|
+
fi
|
|
668
|
+
done <<< "$HC_PROTECTED_PATHS"
|
|
669
|
+
|
|
670
|
+
# --- export ---
|
|
671
|
+
# subshell でも参照できるよう export する。
|
|
672
|
+
export HC_CONFIG_PATH
|
|
673
|
+
export HC_PROTECTED_PATHS HC_PROTECTED_GLOB_FILE HC_PROTECTED_GLOB_DIR
|
|
674
|
+
export HC_PROTECTED_LEAK_REGEX HC_PROTECTED_DISPLAY
|
|
675
|
+
export HC_TASK_DIR HC_DRAFT_DIR
|
|
676
|
+
export HC_BASH_WHITELIST_PATH
|
|
677
|
+
export HC_GATEGUARD_STATE_DIR HC_TASKGUARD_STATE_DIR
|
|
678
|
+
export HC_AGENT_MARKER_DIR HC_FAILURE_WINDOW_DIR
|
|
679
|
+
export HC_HOMUNCULUS_ROOT
|
|
680
|
+
export HC_NOTIFY_SOUND HC_STOP_SOUND
|
|
681
|
+
export HC_CONFIDENCE_THRESHOLD HC_CONFIDENCE_REQUIRED HC_CONFIDENCE_STATE_DIR
|
|
682
|
+
export HC_REQUIRED_ENV
|
|
683
|
+
export HC_IMPROVEMENT_PROPOSAL_ENABLED HC_IMPROVEMENT_PROPOSAL_LOOKBACK_DAYS
|
|
684
|
+
export HC_IMPROVEMENT_PROPOSAL_MAX_COUNT HC_IMPROVEMENT_PROPOSAL_STATE_DIR
|
|
685
|
+
export HC_IMPROVEMENT_PROPOSAL_DEDUP_HOURS
|
|
686
|
+
export HC_CONTEXT_BUDGET_ENABLED HC_CONTEXT_BUDGET_LIMIT
|
|
687
|
+
export HC_CONTEXT_BUDGET_THRESHOLD HC_CONTEXT_BUDGET_STATE_DIR
|
|
688
|
+
export HC_LIST_PLAN_FIRST_REMINDER_ENABLED
|
|
689
|
+
export HC_PARALLEL_SUBAGENT_REMINDER_ENABLED HC_PARALLEL_SUBAGENT_TTL_SEC
|
|
690
|
+
export HC_PARALLEL_SUBAGENT_STATE_DIR
|
|
691
|
+
export HC_AGENT_TYPE_KEYWORD_MAPPING
|
|
692
|
+
export HC_REVIEWER_REGISTRY_DESIGN HC_REVIEWER_REGISTRY_SECURITY
|
|
693
|
+
export HC_REVIEWER_REGISTRY_TEST HC_REVIEWER_REGISTRY_IMPL
|
|
694
|
+
export HC_WORKFLOW_STAGES_NEW HC_WORKFLOW_STAGES_MODIFY
|
|
695
|
+
export HC_DOCS_APPROVED_DIR
|
|
696
|
+
export HC_RULE_CHANGE_GUARD_ENABLED
|
|
697
|
+
export HC_LOOP_CONFIRMATION_DETECTION_ENABLED HC_LOOP_CONFIRMATION_PATTERNS
|
|
698
|
+
|
|
699
|
+
# Feature toggles (task-44 Phase 1)
|
|
700
|
+
export HC_FEATURE_LOOP_MODE_ENFORCEMENT_ENABLED HC_FEATURE_DRAFT_FLOW_GUARD_ENABLED
|
|
701
|
+
export HC_FEATURE_TASK_RULE_GUARD_ENABLED HC_FEATURE_DELEGATION_GUARD_ENABLED
|
|
702
|
+
export HC_FEATURE_WORKFLOW_ENFORCEMENT_ENABLED HC_FEATURE_CONFIDENCE_GATE_ENABLED
|
|
703
|
+
export HC_FEATURE_GATEGUARD_ENABLED HC_FEATURE_CONTEXT_BUDGET_ENABLED
|
|
704
|
+
export HC_FEATURE_PARALLEL_SUBAGENT_REMINDER_ENABLED HC_FEATURE_AUTONOMOUS_ACTION_GUARD_ENABLED
|
|
705
|
+
export HC_FEATURE_BYPRODUCT_DISCHARGE_ENABLED HC_FEATURE_WHY_X5_ENFORCEMENT_ENABLED
|
|
706
|
+
export HC_FEATURE_SESSION_HELP_SURFACE_ENABLED HC_FEATURE_IMPROVEMENT_PROPOSAL_ENABLED
|
|
707
|
+
export HC_FEATURE_MODE_SESSION_START_ENABLED HC_FEATURE_CHECK_SERENA_MCP_ENABLED
|
|
708
|
+
export HC_FEATURE_CHECK_REQUIRED_ENV_ENABLED HC_FEATURE_INIT_TASKS_ON_START_ENABLED
|
|
709
|
+
export HC_FEATURE_NOTIFY_ENABLED HC_FEATURE_CHECK_MD_MERMAID_ENABLED
|
|
710
|
+
export HC_FEATURE_FAILURE_LOOP_DETECT_ENABLED HC_FEATURE_HC_CONFIG_TUI_LEGACY_ENABLED
|
|
711
|
+
export HC_FEATURE_REVIEWER_COUNT_GUARD_ENABLED HC_FEATURE_TOOL_CALL_SLIP_DETECT_ENABLED
|
|
712
|
+
export HC_FEATURE_STALE_HARNESS_DETECT_ENABLED HC_FEATURE_AGENT_ROUTER_SUGGEST_ENABLED
|
|
713
|
+
export HC_STALE_HARNESS_CHECK_INTERVAL_HOURS HC_HARNESS_NPM_VERSION
|
|
714
|
+
|
|
715
|
+
# Reviewer 制御 (task-44 Phase 1)
|
|
716
|
+
export HC_REVIEW_REQUIRED_DESIGN HC_REVIEW_MIN_COUNT_DESIGN HC_REVIEW_MAX_COUNT_DESIGN
|
|
717
|
+
export HC_REVIEW_REQUIRED_TEST HC_REVIEW_MIN_COUNT_TEST HC_REVIEW_MAX_COUNT_TEST
|
|
718
|
+
export HC_REVIEW_REQUIRED_MODULE HC_REVIEW_MIN_COUNT_MODULE HC_REVIEW_MAX_COUNT_MODULE
|
|
719
|
+
export HC_REVIEW_REQUIRED_SYSTEM HC_REVIEW_MIN_COUNT_SYSTEM HC_REVIEW_MAX_COUNT_SYSTEM
|
|
720
|
+
export HC_REVIEW_REQUIRED_SECURITY HC_REVIEW_MIN_COUNT_SECURITY
|
|
721
|
+
export HC_REVIEW_ITERATION_MAX
|
|
722
|
+
|
|
723
|
+
# Git 統合ポリシー (task-77)
|
|
724
|
+
export HC_MAINLINE_BRANCH HC_MAINLINE_INTEGRATION_POLICY
|
|
725
|
+
|
|
726
|
+
# --- 内部変数を unset (caller を汚染しない) ---
|
|
727
|
+
unset _hc_root _hc_top _hc_line _hc_stripped _hc_key _hc_key_upper
|
|
728
|
+
unset _hc_val _hc_inner _hc_inner_trim _hc_list _hc_items _hc_item _hc_norm _hc_p
|
|
729
|
+
unset _hcsic_v
|
|
730
|
+
unset -f _hc_strip_inline_comment 2>/dev/null || true
|
|
731
|
+
|
|
732
|
+
# --- is_feature_enabled <feature_name> 共通関数 (task-44 Phase 1) ---
|
|
733
|
+
# 用途: hook 冒頭で `if ! is_feature_enabled <name>; then exit 0; fi` で feature OFF 即 skip
|
|
734
|
+
#
|
|
735
|
+
# 引数:
|
|
736
|
+
# $1: feature 名 (lowercase、例: "loop_mode_enforcement" / "draft_flow_guard")
|
|
737
|
+
# env / yml key は `HC_FEATURE_<UPPER>_ENABLED` / `feature_<lower>_enabled` を参照
|
|
738
|
+
#
|
|
739
|
+
# 戻り値:
|
|
740
|
+
# 0 = enabled (feature ON、hook 続行)
|
|
741
|
+
# 1 = disabled (feature OFF、hook skip)
|
|
742
|
+
#
|
|
743
|
+
# 値解決の優先順 (高 → 低):
|
|
744
|
+
# 1. 直接 export された env `HC_FEATURE_<UPPER>_ENABLED` (config-loader.sh Step 4 で復元済)
|
|
745
|
+
# 2. yml `feature_<lower>_enabled` の load 値 (Step 3 で eval 済)
|
|
746
|
+
# 3. 本 file 内 defaults "true" (Step 2 で設定済)
|
|
747
|
+
#
|
|
748
|
+
# 1〜3 はすべて同名 env として export 済なので、本関数は env を indirect read する。
|
|
749
|
+
# bash 3.2 互換のため `${!var}` ではなく eval を使う。
|
|
750
|
+
#
|
|
751
|
+
# 値判定:
|
|
752
|
+
# "false" / "False" / "FALSE" / "0" / "off" / "no" → disabled (return 1)
|
|
753
|
+
# それ以外 (空文字含む) → enabled (return 0、backward compat for safety)
|
|
754
|
+
#
|
|
755
|
+
# 例:
|
|
756
|
+
# if ! is_feature_enabled loop_mode_enforcement; then
|
|
757
|
+
# exit 0 # feature OFF、hook を no-op skip
|
|
758
|
+
# fi
|
|
759
|
+
is_feature_enabled() {
|
|
760
|
+
local name="$1"
|
|
761
|
+
if [ -z "$name" ]; then
|
|
762
|
+
# 引数欠如は安全側 (enabled) で扱う、stderr WARN
|
|
763
|
+
printf '[is_feature_enabled] WARN: feature name required\n' >&2
|
|
764
|
+
return 0
|
|
765
|
+
fi
|
|
766
|
+
# lowercase → uppercase 化、非英数を _ に正規化 (config-loader 命名と同期)
|
|
767
|
+
local upper
|
|
768
|
+
upper=$(printf '%s' "$name" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]_' '_')
|
|
769
|
+
upper="${upper%_}"
|
|
770
|
+
# env indirect read (bash 3.2 互換: eval ベース)
|
|
771
|
+
local value=""
|
|
772
|
+
eval "value=\${HC_FEATURE_${upper}_ENABLED-}"
|
|
773
|
+
# value lowercase 化して判定 (大小文字無視)
|
|
774
|
+
local lc
|
|
775
|
+
lc=$(printf '%s' "$value" | tr '[:upper:]' '[:lower:]')
|
|
776
|
+
case "$lc" in
|
|
777
|
+
false|0|off|no)
|
|
778
|
+
return 1
|
|
779
|
+
;;
|
|
780
|
+
*)
|
|
781
|
+
return 0
|
|
782
|
+
;;
|
|
783
|
+
esac
|
|
784
|
+
}
|