@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.
Files changed (822) hide show
  1. package/.claude/.stale-harness-state/last-check +0 -0
  2. package/.claude/CommonRules.md +121 -0
  3. package/.claude/agents/01-core-development/api-designer.md +237 -0
  4. package/.claude/agents/01-core-development/backend-developer.md +222 -0
  5. package/.claude/agents/01-core-development/design-bridge.md +127 -0
  6. package/.claude/agents/01-core-development/electron-pro.md +240 -0
  7. package/.claude/agents/01-core-development/frontend-developer.md +133 -0
  8. package/.claude/agents/01-core-development/fullstack-developer.md +235 -0
  9. package/.claude/agents/01-core-development/graphql-architect.md +238 -0
  10. package/.claude/agents/01-core-development/microservices-architect.md +239 -0
  11. package/.claude/agents/01-core-development/mobile-developer.md +283 -0
  12. package/.claude/agents/01-core-development/ui-designer.md +174 -0
  13. package/.claude/agents/01-core-development/websocket-engineer.md +150 -0
  14. package/.claude/agents/03-infrastructure/azure-infra-engineer.md +53 -0
  15. package/.claude/agents/03-infrastructure/cloud-architect.md +277 -0
  16. package/.claude/agents/03-infrastructure/database-administrator.md +287 -0
  17. package/.claude/agents/03-infrastructure/deployment-engineer.md +287 -0
  18. package/.claude/agents/03-infrastructure/devops-engineer.md +287 -0
  19. package/.claude/agents/03-infrastructure/devops-incident-responder.md +287 -0
  20. package/.claude/agents/03-infrastructure/docker-expert.md +278 -0
  21. package/.claude/agents/03-infrastructure/incident-responder.md +287 -0
  22. package/.claude/agents/03-infrastructure/kubernetes-specialist.md +287 -0
  23. package/.claude/agents/03-infrastructure/network-engineer.md +287 -0
  24. package/.claude/agents/03-infrastructure/platform-engineer.md +287 -0
  25. package/.claude/agents/03-infrastructure/security-engineer.md +277 -0
  26. package/.claude/agents/03-infrastructure/sre-engineer.md +287 -0
  27. package/.claude/agents/03-infrastructure/terraform-engineer.md +287 -0
  28. package/.claude/agents/03-infrastructure/terragrunt-expert.md +307 -0
  29. package/.claude/agents/03-infrastructure/windows-infra-admin.md +52 -0
  30. package/.claude/agents/04-quality-security/accessibility-tester.md +277 -0
  31. package/.claude/agents/04-quality-security/ad-security-reviewer.md +56 -0
  32. package/.claude/agents/04-quality-security/ai-writing-auditor.md +77 -0
  33. package/.claude/agents/04-quality-security/architect-reviewer.md +287 -0
  34. package/.claude/agents/04-quality-security/chaos-engineer.md +277 -0
  35. package/.claude/agents/04-quality-security/code-reviewer.md +287 -0
  36. package/.claude/agents/04-quality-security/compliance-auditor.md +277 -0
  37. package/.claude/agents/04-quality-security/debugger.md +287 -0
  38. package/.claude/agents/04-quality-security/error-detective.md +287 -0
  39. package/.claude/agents/04-quality-security/penetration-tester.md +287 -0
  40. package/.claude/agents/04-quality-security/performance-engineer.md +287 -0
  41. package/.claude/agents/04-quality-security/powershell-security-hardening.md +54 -0
  42. package/.claude/agents/04-quality-security/qa-expert.md +287 -0
  43. package/.claude/agents/04-quality-security/security-auditor.md +287 -0
  44. package/.claude/agents/04-quality-security/test-automator.md +287 -0
  45. package/.claude/agents/04-quality-security/ui-ux-tester.md +234 -0
  46. package/.claude/agents/06-developer-experience/build-engineer.md +286 -0
  47. package/.claude/agents/06-developer-experience/cli-developer.md +286 -0
  48. package/.claude/agents/06-developer-experience/dependency-manager.md +286 -0
  49. package/.claude/agents/06-developer-experience/documentation-engineer.md +276 -0
  50. package/.claude/agents/06-developer-experience/dx-optimizer.md +286 -0
  51. package/.claude/agents/06-developer-experience/git-workflow-manager.md +286 -0
  52. package/.claude/agents/06-developer-experience/legacy-modernizer.md +286 -0
  53. package/.claude/agents/06-developer-experience/mcp-developer.md +275 -0
  54. package/.claude/agents/06-developer-experience/powershell-module-architect.md +58 -0
  55. package/.claude/agents/06-developer-experience/powershell-ui-architect.md +135 -0
  56. package/.claude/agents/06-developer-experience/readme-generator.md +238 -0
  57. package/.claude/agents/06-developer-experience/refactoring-specialist.md +286 -0
  58. package/.claude/agents/06-developer-experience/slack-expert.md +232 -0
  59. package/.claude/agents/06-developer-experience/tooling-engineer.md +286 -0
  60. package/.claude/agents/09-meta-orchestration/agent-installer.md +97 -0
  61. package/.claude/agents/09-meta-orchestration/agent-organizer.md +287 -0
  62. package/.claude/agents/09-meta-orchestration/codebase-orchestrator.md +249 -0
  63. package/.claude/agents/09-meta-orchestration/context-manager.md +287 -0
  64. package/.claude/agents/09-meta-orchestration/error-coordinator.md +287 -0
  65. package/.claude/agents/09-meta-orchestration/it-ops-orchestrator.md +60 -0
  66. package/.claude/agents/09-meta-orchestration/knowledge-synthesizer.md +287 -0
  67. package/.claude/agents/09-meta-orchestration/multi-agent-coordinator.md +287 -0
  68. package/.claude/agents/09-meta-orchestration/performance-monitor.md +287 -0
  69. package/.claude/agents/09-meta-orchestration/task-distributor.md +287 -0
  70. package/.claude/agents/09-meta-orchestration/workflow-orchestrator.md +287 -0
  71. package/.claude/agents/10-research-analysis/competitive-analyst.md +287 -0
  72. package/.claude/agents/10-research-analysis/data-researcher.md +287 -0
  73. package/.claude/agents/10-research-analysis/market-researcher.md +287 -0
  74. package/.claude/agents/10-research-analysis/project-idea-validator.md +269 -0
  75. package/.claude/agents/10-research-analysis/research-analyst.md +287 -0
  76. package/.claude/agents/10-research-analysis/scientific-literature-researcher.md +151 -0
  77. package/.claude/agents/10-research-analysis/search-specialist.md +287 -0
  78. package/.claude/agents/10-research-analysis/trend-analyst.md +287 -0
  79. package/.claude/archive/README.md +47 -0
  80. package/.claude/archive/agents/02-language-specialists/angular-architect.md +287 -0
  81. package/.claude/archive/agents/02-language-specialists/cpp-pro.md +277 -0
  82. package/.claude/archive/agents/02-language-specialists/csharp-developer.md +287 -0
  83. package/.claude/archive/agents/02-language-specialists/django-developer.md +287 -0
  84. package/.claude/archive/agents/02-language-specialists/dotnet-core-expert.md +287 -0
  85. package/.claude/archive/agents/02-language-specialists/dotnet-framework-4.8-expert.md +306 -0
  86. package/.claude/archive/agents/02-language-specialists/elixir-expert.md +311 -0
  87. package/.claude/archive/agents/02-language-specialists/expo-react-native-expert.md +268 -0
  88. package/.claude/archive/agents/02-language-specialists/fastapi-developer.md +287 -0
  89. package/.claude/archive/agents/02-language-specialists/flutter-expert.md +287 -0
  90. package/.claude/archive/agents/02-language-specialists/golang-pro.md +277 -0
  91. package/.claude/archive/agents/02-language-specialists/java-architect.md +287 -0
  92. package/.claude/archive/agents/02-language-specialists/javascript-pro.md +277 -0
  93. package/.claude/archive/agents/02-language-specialists/kotlin-specialist.md +287 -0
  94. package/.claude/archive/agents/02-language-specialists/laravel-specialist.md +287 -0
  95. package/.claude/archive/agents/02-language-specialists/nextjs-developer.md +287 -0
  96. package/.claude/archive/agents/02-language-specialists/node-specialist.md +124 -0
  97. package/.claude/archive/agents/02-language-specialists/php-pro.md +287 -0
  98. package/.claude/archive/agents/02-language-specialists/powershell-5.1-expert.md +59 -0
  99. package/.claude/archive/agents/02-language-specialists/powershell-7-expert.md +57 -0
  100. package/.claude/archive/agents/02-language-specialists/python-pro.md +277 -0
  101. package/.claude/archive/agents/02-language-specialists/rails-expert.md +358 -0
  102. package/.claude/archive/agents/02-language-specialists/react-specialist.md +287 -0
  103. package/.claude/archive/agents/02-language-specialists/rust-engineer.md +287 -0
  104. package/.claude/archive/agents/02-language-specialists/spring-boot-engineer.md +287 -0
  105. package/.claude/archive/agents/02-language-specialists/sql-pro.md +287 -0
  106. package/.claude/archive/agents/02-language-specialists/swift-expert.md +287 -0
  107. package/.claude/archive/agents/02-language-specialists/symfony-specialist.md +354 -0
  108. package/.claude/archive/agents/02-language-specialists/typescript-pro.md +277 -0
  109. package/.claude/archive/agents/02-language-specialists/vue-expert.md +287 -0
  110. package/.claude/archive/agents/05-data-ai/ai-engineer.md +287 -0
  111. package/.claude/archive/agents/05-data-ai/data-analyst.md +277 -0
  112. package/.claude/archive/agents/05-data-ai/data-engineer.md +287 -0
  113. package/.claude/archive/agents/05-data-ai/data-scientist.md +287 -0
  114. package/.claude/archive/agents/05-data-ai/database-optimizer.md +287 -0
  115. package/.claude/archive/agents/05-data-ai/llm-architect.md +287 -0
  116. package/.claude/archive/agents/05-data-ai/machine-learning-engineer.md +277 -0
  117. package/.claude/archive/agents/05-data-ai/ml-engineer.md +287 -0
  118. package/.claude/archive/agents/05-data-ai/mlops-engineer.md +287 -0
  119. package/.claude/archive/agents/05-data-ai/nlp-engineer.md +287 -0
  120. package/.claude/archive/agents/05-data-ai/postgres-pro.md +287 -0
  121. package/.claude/archive/agents/05-data-ai/prompt-engineer.md +287 -0
  122. package/.claude/archive/agents/05-data-ai/reinforcement-learning-engineer.md +277 -0
  123. package/.claude/archive/agents/07-specialized-domains/api-documenter.md +277 -0
  124. package/.claude/archive/agents/07-specialized-domains/blockchain-developer.md +287 -0
  125. package/.claude/archive/agents/07-specialized-domains/embedded-systems.md +287 -0
  126. package/.claude/archive/agents/07-specialized-domains/fintech-engineer.md +287 -0
  127. package/.claude/archive/agents/07-specialized-domains/game-developer.md +287 -0
  128. package/.claude/archive/agents/07-specialized-domains/healthcare-admin.md +199 -0
  129. package/.claude/archive/agents/07-specialized-domains/iot-engineer.md +287 -0
  130. package/.claude/archive/agents/07-specialized-domains/m365-admin.md +48 -0
  131. package/.claude/archive/agents/07-specialized-domains/mobile-app-developer.md +287 -0
  132. package/.claude/archive/agents/07-specialized-domains/payment-integration.md +287 -0
  133. package/.claude/archive/agents/07-specialized-domains/quant-analyst.md +287 -0
  134. package/.claude/archive/agents/07-specialized-domains/risk-manager.md +287 -0
  135. package/.claude/archive/agents/07-specialized-domains/seo-specialist.md +184 -0
  136. package/.claude/archive/agents/08-business-product/business-analyst.md +287 -0
  137. package/.claude/archive/agents/08-business-product/content-marketer.md +287 -0
  138. package/.claude/archive/agents/08-business-product/customer-success-manager.md +287 -0
  139. package/.claude/archive/agents/08-business-product/legal-advisor.md +287 -0
  140. package/.claude/archive/agents/08-business-product/license-engineer.md +295 -0
  141. package/.claude/archive/agents/08-business-product/product-manager.md +287 -0
  142. package/.claude/archive/agents/08-business-product/project-manager.md +287 -0
  143. package/.claude/archive/agents/08-business-product/sales-engineer.md +287 -0
  144. package/.claude/archive/agents/08-business-product/scrum-master.md +287 -0
  145. package/.claude/archive/agents/08-business-product/technical-writer.md +287 -0
  146. package/.claude/archive/agents/08-business-product/ux-researcher.md +287 -0
  147. package/.claude/archive/agents/08-business-product/wordpress-master.md +316 -0
  148. package/.claude/archive/skills/competitive-ads-extractor/SKILL.md +293 -0
  149. package/.claude/archive/skills/developer-growth-analysis/SKILL.md +322 -0
  150. package/.claude/archive/skills/document-docx/LICENSE.txt +30 -0
  151. package/.claude/archive/skills/document-docx/SKILL.md +197 -0
  152. package/.claude/archive/skills/document-docx/docx-js.md +350 -0
  153. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  154. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  155. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  156. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  157. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  158. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  159. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  160. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  161. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  162. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  163. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  164. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  165. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  166. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  167. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  168. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  169. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  170. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  171. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  172. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  173. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  174. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  175. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  176. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  177. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  178. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  179. package/.claude/archive/skills/document-docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  180. package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  181. package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  182. package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  183. package/.claude/archive/skills/document-docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  184. package/.claude/archive/skills/document-docx/ooxml/schemas/mce/mc.xsd +75 -0
  185. package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  186. package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  187. package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  188. package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  189. package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  190. package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  191. package/.claude/archive/skills/document-docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  192. package/.claude/archive/skills/document-docx/ooxml/scripts/pack.py +159 -0
  193. package/.claude/archive/skills/document-docx/ooxml/scripts/unpack.py +29 -0
  194. package/.claude/archive/skills/document-docx/ooxml/scripts/validate.py +69 -0
  195. package/.claude/archive/skills/document-docx/ooxml/scripts/validation/__init__.py +15 -0
  196. package/.claude/archive/skills/document-docx/ooxml/scripts/validation/base.py +951 -0
  197. package/.claude/archive/skills/document-docx/ooxml/scripts/validation/docx.py +274 -0
  198. package/.claude/archive/skills/document-docx/ooxml/scripts/validation/pptx.py +315 -0
  199. package/.claude/archive/skills/document-docx/ooxml/scripts/validation/redlining.py +279 -0
  200. package/.claude/archive/skills/document-docx/ooxml.md +610 -0
  201. package/.claude/archive/skills/document-docx/scripts/__init__.py +1 -0
  202. package/.claude/archive/skills/document-docx/scripts/document.py +1276 -0
  203. package/.claude/archive/skills/document-docx/scripts/templates/comments.xml +3 -0
  204. package/.claude/archive/skills/document-docx/scripts/templates/commentsExtended.xml +3 -0
  205. package/.claude/archive/skills/document-docx/scripts/templates/commentsExtensible.xml +3 -0
  206. package/.claude/archive/skills/document-docx/scripts/templates/commentsIds.xml +3 -0
  207. package/.claude/archive/skills/document-docx/scripts/templates/people.xml +3 -0
  208. package/.claude/archive/skills/document-docx/scripts/utilities.py +374 -0
  209. package/.claude/archive/skills/document-pdf/LICENSE.txt +30 -0
  210. package/.claude/archive/skills/document-pdf/SKILL.md +294 -0
  211. package/.claude/archive/skills/document-pdf/forms.md +205 -0
  212. package/.claude/archive/skills/document-pdf/reference.md +612 -0
  213. package/.claude/archive/skills/document-pdf/scripts/check_bounding_boxes.py +70 -0
  214. package/.claude/archive/skills/document-pdf/scripts/check_bounding_boxes_test.py +226 -0
  215. package/.claude/archive/skills/document-pdf/scripts/check_fillable_fields.py +12 -0
  216. package/.claude/archive/skills/document-pdf/scripts/convert_pdf_to_images.py +35 -0
  217. package/.claude/archive/skills/document-pdf/scripts/create_validation_image.py +41 -0
  218. package/.claude/archive/skills/document-pdf/scripts/extract_form_field_info.py +152 -0
  219. package/.claude/archive/skills/document-pdf/scripts/fill_fillable_fields.py +114 -0
  220. package/.claude/archive/skills/document-pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  221. package/.claude/archive/skills/document-pptx/LICENSE.txt +30 -0
  222. package/.claude/archive/skills/document-pptx/SKILL.md +484 -0
  223. package/.claude/archive/skills/document-pptx/html2pptx.md +625 -0
  224. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  225. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  226. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  227. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  228. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  229. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  230. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  231. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  232. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  233. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  234. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  235. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  236. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  237. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  238. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  239. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  240. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  241. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  242. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  243. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  244. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  245. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  246. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  247. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  248. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  249. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  250. package/.claude/archive/skills/document-pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  251. package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  252. package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  253. package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  254. package/.claude/archive/skills/document-pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  255. package/.claude/archive/skills/document-pptx/ooxml/schemas/mce/mc.xsd +75 -0
  256. package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  257. package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  258. package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  259. package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  260. package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  261. package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  262. package/.claude/archive/skills/document-pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  263. package/.claude/archive/skills/document-pptx/ooxml/scripts/pack.py +159 -0
  264. package/.claude/archive/skills/document-pptx/ooxml/scripts/unpack.py +29 -0
  265. package/.claude/archive/skills/document-pptx/ooxml/scripts/validate.py +69 -0
  266. package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/__init__.py +15 -0
  267. package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/base.py +951 -0
  268. package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/docx.py +274 -0
  269. package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/pptx.py +315 -0
  270. package/.claude/archive/skills/document-pptx/ooxml/scripts/validation/redlining.py +279 -0
  271. package/.claude/archive/skills/document-pptx/ooxml.md +427 -0
  272. package/.claude/archive/skills/document-pptx/scripts/html2pptx.js +979 -0
  273. package/.claude/archive/skills/document-pptx/scripts/inventory.py +1020 -0
  274. package/.claude/archive/skills/document-pptx/scripts/rearrange.py +231 -0
  275. package/.claude/archive/skills/document-pptx/scripts/replace.py +385 -0
  276. package/.claude/archive/skills/document-pptx/scripts/thumbnail.py +450 -0
  277. package/.claude/archive/skills/document-xlsx/LICENSE.txt +30 -0
  278. package/.claude/archive/skills/document-xlsx/SKILL.md +289 -0
  279. package/.claude/archive/skills/document-xlsx/recalc.py +178 -0
  280. package/.claude/archive/skills/image-enhancer/SKILL.md +99 -0
  281. package/.claude/archive/skills/meeting-insights-analyzer/SKILL.md +327 -0
  282. package/.claude/archive/skills/slack-gif-creator/LICENSE.txt +202 -0
  283. package/.claude/archive/skills/slack-gif-creator/SKILL.md +646 -0
  284. package/.claude/archive/skills/slack-gif-creator/core/color_palettes.py +302 -0
  285. package/.claude/archive/skills/slack-gif-creator/core/easing.py +230 -0
  286. package/.claude/archive/skills/slack-gif-creator/core/frame_composer.py +469 -0
  287. package/.claude/archive/skills/slack-gif-creator/core/gif_builder.py +246 -0
  288. package/.claude/archive/skills/slack-gif-creator/core/typography.py +357 -0
  289. package/.claude/archive/skills/slack-gif-creator/core/validators.py +264 -0
  290. package/.claude/archive/skills/slack-gif-creator/core/visual_effects.py +494 -0
  291. package/.claude/archive/skills/slack-gif-creator/requirements.txt +4 -0
  292. package/.claude/archive/skills/slack-gif-creator/templates/bounce.py +106 -0
  293. package/.claude/archive/skills/slack-gif-creator/templates/explode.py +331 -0
  294. package/.claude/archive/skills/slack-gif-creator/templates/fade.py +329 -0
  295. package/.claude/archive/skills/slack-gif-creator/templates/flip.py +291 -0
  296. package/.claude/archive/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  297. package/.claude/archive/skills/slack-gif-creator/templates/morph.py +329 -0
  298. package/.claude/archive/skills/slack-gif-creator/templates/move.py +293 -0
  299. package/.claude/archive/skills/slack-gif-creator/templates/pulse.py +268 -0
  300. package/.claude/archive/skills/slack-gif-creator/templates/shake.py +127 -0
  301. package/.claude/archive/skills/slack-gif-creator/templates/slide.py +291 -0
  302. package/.claude/archive/skills/slack-gif-creator/templates/spin.py +269 -0
  303. package/.claude/archive/skills/slack-gif-creator/templates/wiggle.py +300 -0
  304. package/.claude/archive/skills/slack-gif-creator/templates/zoom.py +312 -0
  305. package/.claude/archive/skills/twitter-algorithm-optimizer/SKILL.md +327 -0
  306. package/.claude/archive/skills/video-downloader/SKILL.md +99 -0
  307. package/.claude/archive/skills/video-downloader/scripts/download_video.py +145 -0
  308. package/.claude/bash-whitelist-requests/2026-05-28-grep-find-rg.md +68 -0
  309. package/.claude/bash-whitelist-requests/2026-06-01-readonly-filters.md +76 -0
  310. package/.claude/bash-whitelist.txt +124 -0
  311. package/.claude/commands/agent-introspect.md +89 -0
  312. package/.claude/commands/apply-rules.md +363 -0
  313. package/.claude/commands/approve-design.md +219 -0
  314. package/.claude/commands/approve-org-money.md +267 -0
  315. package/.claude/commands/build.md +234 -0
  316. package/.claude/commands/commit.md +97 -0
  317. package/.claude/commands/context-fetch.md +113 -0
  318. package/.claude/commands/create-tool.md +496 -0
  319. package/.claude/commands/design-review.md +138 -0
  320. package/.claude/commands/design.md +807 -0
  321. package/.claude/commands/discharge-byproduct.md +208 -0
  322. package/.claude/commands/doc-review.md +165 -0
  323. package/.claude/commands/document-pair.md +76 -0
  324. package/.claude/commands/error-triage.md +435 -0
  325. package/.claude/commands/eval.md +70 -0
  326. package/.claude/commands/evolve.md +49 -0
  327. package/.claude/commands/finish-task.md +105 -0
  328. package/.claude/commands/gan-build.md +91 -0
  329. package/.claude/commands/gan-design.md +82 -0
  330. package/.claude/commands/gate-bypass.md +77 -0
  331. package/.claude/commands/gate-clear.md +45 -0
  332. package/.claude/commands/gate-status.md +46 -0
  333. package/.claude/commands/harness-audit.md +151 -0
  334. package/.claude/commands/hearing.md +138 -0
  335. package/.claude/commands/impact-check.md +486 -0
  336. package/.claude/commands/init-tasks.md +49 -0
  337. package/.claude/commands/instinct-export.md +47 -0
  338. package/.claude/commands/instinct-import.md +41 -0
  339. package/.claude/commands/instinct-status.md +43 -0
  340. package/.claude/commands/investigate.md +547 -0
  341. package/.claude/commands/learn.md +55 -0
  342. package/.claude/commands/lint-rules.md +400 -0
  343. package/.claude/commands/mode.md +58 -0
  344. package/.claude/commands/modify-feature.md +209 -0
  345. package/.claude/commands/module-review.md +149 -0
  346. package/.claude/commands/move-section.md +67 -0
  347. package/.claude/commands/new-draft.md +67 -0
  348. package/.claude/commands/new-feature.md +286 -0
  349. package/.claude/commands/new-task.md +156 -0
  350. package/.claude/commands/notification.md +107 -0
  351. package/.claude/commands/pm-start.md +119 -0
  352. package/.claude/commands/projects.md +32 -0
  353. package/.claude/commands/promote.md +43 -0
  354. package/.claude/commands/rasis-report.md +1323 -0
  355. package/.claude/commands/release-note.md +130 -0
  356. package/.claude/commands/reply-watch.md +149 -0
  357. package/.claude/commands/requirement.md +352 -0
  358. package/.claude/commands/resume-state.md +187 -0
  359. package/.claude/commands/reviewpr.md +118 -0
  360. package/.claude/commands/save-state.md +100 -0
  361. package/.claude/commands/sentry-pr.md +157 -0
  362. package/.claude/commands/start-task.md +87 -0
  363. package/.claude/commands/system-review.md +147 -0
  364. package/.claude/commands/task-bypass.md +70 -0
  365. package/.claude/commands/task-estimate.md +100 -0
  366. package/.claude/commands/template-apply.md +89 -0
  367. package/.claude/commands/test-design.md +116 -0
  368. package/.claude/commands/transfer-mismatch.md +317 -0
  369. package/.claude/commands/verify.md +51 -0
  370. package/.claude/evals/grader-loop-mode-autonomy.sh +165 -0
  371. package/.claude/evals/grader-system-reminder-attention.sh +99 -0
  372. package/.claude/evals/loop-mode-autonomy.md +121 -0
  373. package/.claude/evals/loop-mode-autonomy.results.template.md +133 -0
  374. package/.claude/evals/system-reminder-attention.md +123 -0
  375. package/.claude/evals/system-reminder-attention.results.template.md +93 -0
  376. package/.claude/evals/system-reminder-attention.runner.md +353 -0
  377. package/.claude/harness-config.local.yml +48 -0
  378. package/.claude/harness-config.yml +534 -0
  379. package/.claude/hooks/agent-marker-clear.sh +43 -0
  380. package/.claude/hooks/agent-marker-set.sh +40 -0
  381. package/.claude/hooks/agent-router-suggest.sh +123 -0
  382. package/.claude/hooks/autonomous-action-guard.sh +242 -0
  383. package/.claude/hooks/byproduct-discharge-guard.sh +128 -0
  384. package/.claude/hooks/check-md-mermaid.sh +144 -0
  385. package/.claude/hooks/check-required-env.sh +95 -0
  386. package/.claude/hooks/check-serena-mcp.sh +123 -0
  387. package/.claude/hooks/confidence-gate.sh +139 -0
  388. package/.claude/hooks/context-budget.sh +233 -0
  389. package/.claude/hooks/delegation-guard.sh +99 -0
  390. package/.claude/hooks/dispatcher-manifest.tsv +38 -0
  391. package/.claude/hooks/draft-flow-guard.sh +304 -0
  392. package/.claude/hooks/failure-loop-detect.sh +139 -0
  393. package/.claude/hooks/gateguard.sh +209 -0
  394. package/.claude/hooks/improvement-proposal.sh +112 -0
  395. package/.claude/hooks/init-tasks-on-start.sh +34 -0
  396. package/.claude/hooks/lib/bypass-logger.sh +82 -0
  397. package/.claude/hooks/lib/confidence-gate/bypass.sh +48 -0
  398. package/.claude/hooks/lib/confidence-gate/extract.sh +99 -0
  399. package/.claude/hooks/lib/confidence-gate/major-agent-filter.sh +59 -0
  400. package/.claude/hooks/lib/confidence-gate/messages.sh +53 -0
  401. package/.claude/hooks/lib/config-loader.sh +784 -0
  402. package/.claude/hooks/lib/delegation-guard/bash-whitelist.sh +323 -0
  403. package/.claude/hooks/lib/delegation-guard/git-deny.sh +188 -0
  404. package/.claude/hooks/lib/delegation-guard/protected-paths.sh +105 -0
  405. package/.claude/hooks/lib/delegation-guard/subagent-detect.sh +40 -0
  406. package/.claude/hooks/lib/dispatcher-core.sh +454 -0
  407. package/.claude/hooks/lib/improvement-proposal/aggregate.py +466 -0
  408. package/.claude/hooks/lib/improvement-proposal/cache.sh +78 -0
  409. package/.claude/hooks/lib/mode-loader.sh +80 -0
  410. package/.claude/hooks/lib/next-actions-parser.sh +153 -0
  411. package/.claude/hooks/lib/project-root.sh +60 -0
  412. package/.claude/hooks/list-md-plan-first-reminder.sh +143 -0
  413. package/.claude/hooks/loop-auto-progress-reminder.sh +108 -0
  414. package/.claude/hooks/loop-confirmation-detector.sh +241 -0
  415. package/.claude/hooks/mode-asana-prompt.sh +61 -0
  416. package/.claude/hooks/mode-enforce.sh +57 -0
  417. package/.claude/hooks/mode-session-start.sh +93 -0
  418. package/.claude/hooks/next-actions-surface.sh +136 -0
  419. package/.claude/hooks/notification-dispatcher.sh +9 -0
  420. package/.claude/hooks/notify.sh +27 -0
  421. package/.claude/hooks/parallel-subagent-reminder.sh +469 -0
  422. package/.claude/hooks/post-tool-use-dispatcher.sh +9 -0
  423. package/.claude/hooks/pre-tool-use-dispatcher.sh +9 -0
  424. package/.claude/hooks/reviewer-count-guard.sh +313 -0
  425. package/.claude/hooks/session-help-surface.sh +192 -0
  426. package/.claude/hooks/session-start-dispatcher.sh +9 -0
  427. package/.claude/hooks/session-start-wrapper.sh +156 -0
  428. package/.claude/hooks/stale-harness-detect.sh +422 -0
  429. package/.claude/hooks/stop-dispatcher.sh +9 -0
  430. package/.claude/hooks/stop.sh +25 -0
  431. package/.claude/hooks/subagent-stop-dispatcher.sh +9 -0
  432. package/.claude/hooks/task-rule-guard.sh +317 -0
  433. package/.claude/hooks/tests/run-tests.sh +23 -0
  434. package/.claude/hooks/tests/test-agent-marker-warn.sh +86 -0
  435. package/.claude/hooks/tests/test-check-required-env.sh +138 -0
  436. package/.claude/hooks/tests/test-confidence-gate.sh +170 -0
  437. package/.claude/hooks/tests/test-config-env-override.sh +220 -0
  438. package/.claude/hooks/tests/test-gate-disable.sh +118 -0
  439. package/.claude/hooks/tests/test-improvement-proposal.sh +284 -0
  440. package/.claude/hooks/tool-call-slip-detector.sh +188 -0
  441. package/.claude/hooks/user-prompt-submit-dispatcher.sh +9 -0
  442. package/.claude/hooks/why-x5-reminder.sh +45 -0
  443. package/.claude/hooks/why-x5-violation-detect.sh +152 -0
  444. package/.claude/hooks/workflow-guard.sh +263 -0
  445. package/.claude/mode.yml +28 -0
  446. package/.claude/project-rules/development-process.md +8 -0
  447. package/.claude/project-rules/git-workflow.md +8 -0
  448. package/.claude/project-rules/modes.md +8 -0
  449. package/.claude/project-rules/self-improvement.md +8 -0
  450. package/.claude/project-rules/task-management.md +8 -0
  451. package/.claude/project-rules/why-x5-output.md +8 -0
  452. package/.claude/project-rules/workflow.md +8 -0
  453. package/.claude/rules/development-process.md +293 -0
  454. package/.claude/rules/git-workflow.md +71 -0
  455. package/.claude/rules/modes.md +189 -0
  456. package/.claude/rules/self-improvement.md +76 -0
  457. package/.claude/rules/task-management.md +261 -0
  458. package/.claude/rules/why-x5-output.md +97 -0
  459. package/.claude/rules/workflow.md +157 -0
  460. package/.claude/rules-details/README.md +67 -0
  461. package/.claude/rules-details/development-process/confidence-gate.md +22 -0
  462. package/.claude/rules-details/development-process/cross-repo-write.md +35 -0
  463. package/.claude/rules-details/development-process/delegation-requirements.md +158 -0
  464. package/.claude/rules-details/development-process/harness-sync.md +21 -0
  465. package/.claude/rules-details/development-process/origin.md +13 -0
  466. package/.claude/rules-details/development-process/parallelization-origin.md +22 -0
  467. package/.claude/rules-details/development-process/research-reuse.md +22 -0
  468. package/.claude/rules-details/development-process/staging-strategy.md +47 -0
  469. package/.claude/rules-details/modes/artifacts.md +34 -0
  470. package/.claude/rules-details/modes/compliance-items.md +120 -0
  471. package/.claude/rules-details/modes/five-layer-enforcement.md +46 -0
  472. package/.claude/rules-details/modes/mode-hooks.md +51 -0
  473. package/.claude/rules-details/modes/origin.md +17 -0
  474. package/.claude/rules-details/self-improvement/l4-mechanics.md +36 -0
  475. package/.claude/rules-details/self-improvement/origin.md +8 -0
  476. package/.claude/rules-details/self-improvement/related-skills.md +35 -0
  477. package/.claude/rules-details/self-improvement/when-to-use-layers.md +39 -0
  478. package/.claude/rules-details/task-management/hook-enforcement.md +25 -0
  479. package/.claude/rules-details/task-management/mandatory-reading.md +20 -0
  480. package/.claude/rules-details/task-management/origin.md +12 -0
  481. package/.claude/rules-details/task-management/parking-lot.md +26 -0
  482. package/.claude/rules-details/task-management/plan-first.md +44 -0
  483. package/.claude/rules-details/task-management/six-articles.md +68 -0
  484. package/.claude/rules-details/task-management/task-migration.md +16 -0
  485. package/.claude/rules-details/task-management/ui-detection.md +11 -0
  486. package/.claude/rules-details/why-x5-output/examples.md +41 -0
  487. package/.claude/rules-details/why-x5-output/feedback-memory.md +14 -0
  488. package/.claude/rules-details/why-x5-output/origin.md +10 -0
  489. package/.claude/rules-details/why-x5-output/v1-v10-history.md +19 -0
  490. package/.claude/rules-details/workflow/10-stage.md +43 -0
  491. package/.claude/rules-details/workflow/14-stage.md +52 -0
  492. package/.claude/rules-details/workflow/byproduct-discharge.md +39 -0
  493. package/.claude/rules-details/workflow/draft-flow-guard.md +31 -0
  494. package/.claude/rules-details/workflow/fan-out.md +70 -0
  495. package/.claude/rules-details/workflow/mece-20.md +36 -0
  496. package/.claude/rules-details/workflow/origin.md +14 -0
  497. package/.claude/rules-details/workflow/refactoring.md +48 -0
  498. package/.claude/rules-details/workflow/related-skills.md +22 -0
  499. package/.claude/rules-details/workflow/reviewer-prompt.md +100 -0
  500. package/.claude/rules-details/workflow/session-persistence.md +46 -0
  501. package/.claude/rules-details/workflow/workflow-guard.md +36 -0
  502. package/.claude/scripts/__pycache__/harness-audit.cpython-313.pyc +0 -0
  503. package/.claude/scripts/agent-stocktake.py +421 -0
  504. package/.claude/scripts/check-md-mermaid.mjs +138 -0
  505. package/.claude/scripts/generate-settings.sh +0 -0
  506. package/.claude/scripts/harness-audit.py +1547 -0
  507. package/.claude/scripts/hc-config.sh +2265 -0
  508. package/.claude/scripts/init-tasks.sh +117 -0
  509. package/.claude/scripts/lib/enforcement-matrix-parse.sh +81 -0
  510. package/.claude/scripts/lib/hc-config-metadata.sh +190 -0
  511. package/.claude/scripts/lib/hc-config-web-server.js +1528 -0
  512. package/.claude/scripts/lib/hc-config-web-ui/app.js +1054 -0
  513. package/.claude/scripts/lib/hc-config-web-ui/index.html +130 -0
  514. package/.claude/scripts/lib/hc-config-web-ui/style.css +522 -0
  515. package/.claude/scripts/new-task-helper.sh +432 -0
  516. package/.claude/scripts/observe-repair.sh +437 -0
  517. package/.claude/scripts/observe-rotate.sh +311 -0
  518. package/.claude/scripts/statusline.sh +239 -0
  519. package/.claude/settings.generated.preview.json +211 -0
  520. package/.claude/settings.json +215 -0
  521. package/.claude/settings.local.example.json +20 -0
  522. package/.claude/settings.local.json +36 -0
  523. package/.claude/skills/agent-introspection-debugging/SKILL.md +123 -0
  524. package/.claude/skills/agent-router/README.md +137 -0
  525. package/.claude/skills/agent-router/SKILL.md +74 -0
  526. package/.claude/skills/agent-router/dispatch-table.yml +352 -0
  527. package/.claude/skills/agent-router/router.py +1086 -0
  528. package/.claude/skills/agent-router/samples/representative_prompts.txt +24 -0
  529. package/.claude/skills/agent-router/tests/__init__.py +0 -0
  530. package/.claude/skills/agent-router/tests/test_router.py +762 -0
  531. package/.claude/skills/artifacts-builder/LICENSE.txt +202 -0
  532. package/.claude/skills/artifacts-builder/SKILL.md +74 -0
  533. package/.claude/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  534. package/.claude/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  535. package/.claude/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  536. package/.claude/skills/brand-guidelines/LICENSE.txt +202 -0
  537. package/.claude/skills/brand-guidelines/SKILL.md +73 -0
  538. package/.claude/skills/canvas-design/LICENSE.txt +202 -0
  539. package/.claude/skills/canvas-design/SKILL.md +130 -0
  540. package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  541. package/.claude/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  542. package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  543. package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  544. package/.claude/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  545. package/.claude/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  546. package/.claude/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  547. package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  548. package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  549. package/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  550. package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  551. package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  552. package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  553. package/.claude/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  554. package/.claude/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  555. package/.claude/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  556. package/.claude/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  557. package/.claude/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  558. package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  559. package/.claude/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  560. package/.claude/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  561. package/.claude/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  562. package/.claude/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  563. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  564. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  565. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  566. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  567. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  568. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  569. package/.claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  570. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  571. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  572. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  573. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  574. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  575. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  576. package/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  577. package/.claude/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  578. package/.claude/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  579. package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  580. package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  581. package/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  582. package/.claude/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  583. package/.claude/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  584. package/.claude/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  585. package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  586. package/.claude/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  587. package/.claude/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  588. package/.claude/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  589. package/.claude/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  590. package/.claude/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  591. package/.claude/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  592. package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  593. package/.claude/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  594. package/.claude/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  595. package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  596. package/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  597. package/.claude/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  598. package/.claude/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  599. package/.claude/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  600. package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  601. package/.claude/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  602. package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  603. package/.claude/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  604. package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  605. package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  606. package/.claude/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  607. package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  608. package/.claude/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  609. package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  610. package/.claude/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  611. package/.claude/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  612. package/.claude/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  613. package/.claude/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  614. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  615. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  616. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  617. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  618. package/.claude/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  619. package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  620. package/.claude/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  621. package/.claude/skills/changelog-generator/SKILL.md +104 -0
  622. package/.claude/skills/check-md-mermaid/SKILL.md +62 -0
  623. package/.claude/skills/connect/SKILL.md +156 -0
  624. package/.claude/skills/connect-apps/SKILL.md +80 -0
  625. package/.claude/skills/content-research-writer/SKILL.md +538 -0
  626. package/.claude/skills/continuous-agent-loop/SKILL.md +187 -0
  627. package/.claude/skills/continuous-learning-v2/SKILL.md +238 -0
  628. package/.claude/skills/continuous-learning-v2/config.json +35 -0
  629. package/.claude/skills/continuous-learning-v2/hooks/observe.sh +333 -0
  630. package/.claude/skills/continuous-learning-v2/instinct-cli.py +406 -0
  631. package/.claude/skills/domain-name-brainstormer/SKILL.md +212 -0
  632. package/.claude/skills/eval-harness/SKILL.md +100 -0
  633. package/.claude/skills/eval-harness/swe-bench/README.md +80 -0
  634. package/.claude/skills/eval-harness/swe-bench/config.yml +29 -0
  635. package/.claude/skills/eval-harness/swe-bench/docker/Dockerfile +25 -0
  636. package/.claude/skills/eval-harness/swe-bench/docker/docker-compose.yml +18 -0
  637. package/.claude/skills/eval-harness/swe-bench/results/dry-run-2026-05-04.json +137 -0
  638. package/.claude/skills/eval-harness/swe-bench/results/dry-run-comparison-2026-05-04.md +112 -0
  639. package/.claude/skills/eval-harness/swe-bench/results/dry-run-improved-2026-05-04.json +165 -0
  640. package/.claude/skills/eval-harness/swe-bench/results/raw/astropy__astropy-12907.patch +12 -0
  641. package/.claude/skills/eval-harness/swe-bench/results/raw/astropy__astropy-12907.txt +322 -0
  642. package/.claude/skills/eval-harness/swe-bench/results/raw/astropy__astropy-12907.whole-file.txt +322 -0
  643. package/.claude/skills/eval-harness/swe-bench/runner.py +845 -0
  644. package/.claude/skills/eval-harness/swe-bench/scoring.py +298 -0
  645. package/.claude/skills/eval-harness/swe-bench/tasks/fetch_tasks.py +81 -0
  646. package/.claude/skills/eval-harness/swe-bench/tasks/lite-50.json +702 -0
  647. package/.claude/skills/file-organizer/SKILL.md +433 -0
  648. package/.claude/skills/gan-style-harness/SKILL.md +111 -0
  649. package/.claude/skills/gateguard/.gateguard.yml +47 -0
  650. package/.claude/skills/gateguard/SKILL.md +99 -0
  651. package/.claude/skills/internal-comms/LICENSE.txt +202 -0
  652. package/.claude/skills/internal-comms/SKILL.md +32 -0
  653. package/.claude/skills/internal-comms/examples/3p-updates.md +47 -0
  654. package/.claude/skills/internal-comms/examples/company-newsletter.md +65 -0
  655. package/.claude/skills/internal-comms/examples/faq-answers.md +30 -0
  656. package/.claude/skills/internal-comms/examples/general-comms.md +16 -0
  657. package/.claude/skills/invoice-organizer/SKILL.md +446 -0
  658. package/.claude/skills/karpathy-guidelines/SKILL.md +67 -0
  659. package/.claude/skills/langsmith-fetch/SKILL.md +485 -0
  660. package/.claude/skills/lead-research-assistant/SKILL.md +199 -0
  661. package/.claude/skills/mcp-builder/LICENSE.txt +202 -0
  662. package/.claude/skills/mcp-builder/SKILL.md +328 -0
  663. package/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
  664. package/.claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  665. package/.claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  666. package/.claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  667. package/.claude/skills/mcp-builder/scripts/connections.py +151 -0
  668. package/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
  669. package/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  670. package/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
  671. package/.claude/skills/raffle-winner-picker/SKILL.md +159 -0
  672. package/.claude/skills/repo-map/README.md +125 -0
  673. package/.claude/skills/repo-map/SKILL.md +128 -0
  674. package/.claude/skills/repo-map/examples/sample-output.md +1194 -0
  675. package/.claude/skills/repo-map/repo-map.py +715 -0
  676. package/.claude/skills/salesforce-e2e-testing/SKILL.md +116 -0
  677. package/.claude/skills/salesforce-e2e-testing/catalog-template.md +161 -0
  678. package/.claude/skills/salesforce-e2e-testing/methodology.md +179 -0
  679. package/.claude/skills/salesforce-e2e-testing/observation-rules.md +280 -0
  680. package/.claude/skills/salesforce-e2e-testing/pattern-taxonomy.md +392 -0
  681. package/.claude/skills/salesforce-e2e-testing/procedure-template.md +376 -0
  682. package/.claude/skills/skill-creator/LICENSE.txt +202 -0
  683. package/.claude/skills/skill-creator/SKILL.md +209 -0
  684. package/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
  685. package/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
  686. package/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
  687. package/.claude/skills/skill-share/SKILL.md +80 -0
  688. package/.claude/skills/tailored-resume-generator/SKILL.md +345 -0
  689. package/.claude/skills/template-skill/SKILL.md +6 -0
  690. package/.claude/skills/theme-factory/LICENSE.txt +202 -0
  691. package/.claude/skills/theme-factory/SKILL.md +59 -0
  692. package/.claude/skills/theme-factory/theme-showcase.pdf +0 -0
  693. package/.claude/skills/theme-factory/themes/arctic-frost.md +19 -0
  694. package/.claude/skills/theme-factory/themes/botanical-garden.md +19 -0
  695. package/.claude/skills/theme-factory/themes/desert-rose.md +19 -0
  696. package/.claude/skills/theme-factory/themes/forest-canopy.md +19 -0
  697. package/.claude/skills/theme-factory/themes/golden-hour.md +19 -0
  698. package/.claude/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  699. package/.claude/skills/theme-factory/themes/modern-minimalist.md +19 -0
  700. package/.claude/skills/theme-factory/themes/ocean-depths.md +19 -0
  701. package/.claude/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  702. package/.claude/skills/theme-factory/themes/tech-innovation.md +19 -0
  703. package/.claude/skills/verification-loop/SKILL.md +129 -0
  704. package/.claude/skills/webapp-testing/LICENSE.txt +202 -0
  705. package/.claude/skills/webapp-testing/SKILL.md +96 -0
  706. package/.claude/skills/webapp-testing/examples/console_logging.py +35 -0
  707. package/.claude/skills/webapp-testing/examples/element_discovery.py +40 -0
  708. package/.claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
  709. package/.claude/skills/webapp-testing/scripts/with_server.py +106 -0
  710. package/.claude/templates/docs/draft/_DRAFT_TEMPLATE.md +162 -0
  711. package/.claude/templates/docs/draft/_TEST_DESIGN_TEMPLATE.md +76 -0
  712. package/.claude/templates/docs/tasks/_TASK_TEMPLATE.md +276 -0
  713. package/.claude/templates/docs/tasks/list.md +80 -0
  714. package/.claude/templates/docs/tasks/parking-lot.md +82 -0
  715. package/.claude/templates/settings.user-level.json.template +306 -0
  716. package/.claude/tests/SMOKE-CLASSIFICATION.md +199 -0
  717. package/.claude/tests/action-space-count-smoke.sh +130 -0
  718. package/.claude/tests/agent-router-suggest-wiring-smoke.sh +188 -0
  719. package/.claude/tests/audit-followups-smoke.sh +158 -0
  720. package/.claude/tests/autonomous-action-guard-relaxation-smoke.sh +479 -0
  721. package/.claude/tests/autonomous-action-guard-smoke.sh +187 -0
  722. package/.claude/tests/check-serena-mcp-smoke.sh +156 -0
  723. package/.claude/tests/common-rules-import-smoke.sh +209 -0
  724. package/.claude/tests/confidence-gate-smoke.sh +220 -0
  725. package/.claude/tests/config-feature-toggles-smoke.sh +389 -0
  726. package/.claude/tests/context-budget-smoke.sh +222 -0
  727. package/.claude/tests/custom-pm-commands-smoke.sh +93 -0
  728. package/.claude/tests/delegation-guard-code-smoke.sh +244 -0
  729. package/.claude/tests/delegation-guard-deny-layers-smoke.sh +356 -0
  730. package/.claude/tests/delegation-guard-readonly-filter-smoke.sh +205 -0
  731. package/.claude/tests/delegation-guard-search-whitelist-smoke.sh +152 -0
  732. package/.claude/tests/delegation-guard-segment-smoke.sh +109 -0
  733. package/.claude/tests/dispatcher-blocker-invariance-smoke.sh +700 -0
  734. package/.claude/tests/dispatcher-core-smoke.sh +452 -0
  735. package/.claude/tests/dispatcher-merge-matrix-smoke.sh +825 -0
  736. package/.claude/tests/dispatcher-success-stdout-smoke.sh +290 -0
  737. package/.claude/tests/draft-flow-guard-approved-dir-smoke.sh +234 -0
  738. package/.claude/tests/draft-flow-guard-smoke.sh +194 -0
  739. package/.claude/tests/dual-mode-portability-smoke.sh +131 -0
  740. package/.claude/tests/effective-hook-matrix-smoke.sh +261 -0
  741. package/.claude/tests/enforcement-mismatch-smoke.sh +263 -0
  742. package/.claude/tests/fixtures/cascade-sample.jsonl +9 -0
  743. package/.claude/tests/fixtures/next-actions/case-clean.md +14 -0
  744. package/.claude/tests/fixtures/next-actions/case-with-red.md +16 -0
  745. package/.claude/tests/fixtures/next-actions/case-with-yellow-only.md +14 -0
  746. package/.claude/tests/fixtures/normal-broken-scatter.jsonl +5 -0
  747. package/.claude/tests/fixtures/task-71/blocker-baseline.tsv +24 -0
  748. package/.claude/tests/fixtures/task-71/settings-inventory.tsv +37 -0
  749. package/.claude/tests/fixtures/transcript-50pct.jsonl +2 -0
  750. package/.claude/tests/fixtures/transcript-60pct.jsonl +2 -0
  751. package/.claude/tests/fixtures/transcript-80pct.jsonl +2 -0
  752. package/.claude/tests/fixtures/transcript-95pct.jsonl +2 -0
  753. package/.claude/tests/fixtures/workflow-guard/case-2-mid.json +21 -0
  754. package/.claude/tests/fixtures/workflow-guard/case-3-blocked.json +33 -0
  755. package/.claude/tests/fixtures/workflow-guard/case-4-clean.json +27 -0
  756. package/.claude/tests/fixtures/workflow-guard/case-8-modify.json +23 -0
  757. package/.claude/tests/fixtures/workflow-guard/inputs/case-1.json +1 -0
  758. package/.claude/tests/fixtures/workflow-guard/inputs/case-2.json +1 -0
  759. package/.claude/tests/fixtures/workflow-guard/inputs/case-3.json +1 -0
  760. package/.claude/tests/fixtures/workflow-guard/inputs/case-4.json +1 -0
  761. package/.claude/tests/fixtures/workflow-guard/inputs/case-5.json +1 -0
  762. package/.claude/tests/fixtures/workflow-guard/inputs/case-6.json +1 -0
  763. package/.claude/tests/fixtures/workflow-guard/inputs/case-7.json +1 -0
  764. package/.claude/tests/fixtures/workflow-guard/inputs/case-8.json +1 -0
  765. package/.claude/tests/gateguard-smoke.sh +213 -0
  766. package/.claude/tests/git-deny-mainline-policy-smoke.sh +222 -0
  767. package/.claude/tests/harness-audit-c-batch-smoke.sh +270 -0
  768. package/.claude/tests/harness-audit-compare-smoke.sh +186 -0
  769. package/.claude/tests/harness-audit-pipeline-health-smoke.sh +326 -0
  770. package/.claude/tests/harness-config-local-smoke.sh +232 -0
  771. package/.claude/tests/hc-config-git-policy-smoke.sh +241 -0
  772. package/.claude/tests/hc-config-key-parity-smoke.sh +149 -0
  773. package/.claude/tests/hc-config-migration-smoke.sh +251 -0
  774. package/.claude/tests/hc-config-script-smoke.sh +1106 -0
  775. package/.claude/tests/hc-config-tui-smoke.sh +801 -0
  776. package/.claude/tests/hc-config-web-ui-smoke.sh +3224 -0
  777. package/.claude/tests/hook-cwd-robustness-smoke.sh +206 -0
  778. package/.claude/tests/hook-frequency-tweaks-smoke.sh +312 -0
  779. package/.claude/tests/improvement-proposal-cache-smoke.sh +238 -0
  780. package/.claude/tests/install-sh-overwrite-all-smoke.sh +274 -0
  781. package/.claude/tests/install-sh-regen-settings-smoke.sh +301 -0
  782. package/.claude/tests/install-sh-sync-drift-smoke.sh +285 -0
  783. package/.claude/tests/layer-b-context-isolation-smoke.sh +392 -0
  784. package/.claude/tests/list-md-plan-first-reminder-smoke.sh +313 -0
  785. package/.claude/tests/loop-auto-progress-smoke.sh +372 -0
  786. package/.claude/tests/loop-confirmation-detector-smoke.sh +674 -0
  787. package/.claude/tests/new-task-batch-update-smoke.sh +664 -0
  788. package/.claude/tests/next-actions-hooks-smoke.sh +283 -0
  789. package/.claude/tests/npx-cli-smoke.sh +696 -0
  790. package/.claude/tests/observe-flock-smoke.sh +223 -0
  791. package/.claude/tests/observe-jq-parse-smoke.sh +250 -0
  792. package/.claude/tests/observe-repair-smoke.sh +475 -0
  793. package/.claude/tests/observe-rotate-smoke.sh +428 -0
  794. package/.claude/tests/observe-subagent-stop-smoke.sh +476 -0
  795. package/.claude/tests/parallel-subagent-reminder-smoke.sh +918 -0
  796. package/.claude/tests/project-root-smoke.sh +140 -0
  797. package/.claude/tests/project-rules-protection-smoke.sh +199 -0
  798. package/.claude/tests/review-required-min-count-smoke.sh +286 -0
  799. package/.claude/tests/reviewer-count-guard-smoke.sh +490 -0
  800. package/.claude/tests/rule-architecture-smoke.sh +418 -0
  801. package/.claude/tests/rule-change-draft-flow-guard-smoke.sh +343 -0
  802. package/.claude/tests/run-all-smokes.sh +340 -0
  803. package/.claude/tests/session-help-surface-smoke.sh +224 -0
  804. package/.claude/tests/session-start-parallel-smoke.sh +165 -0
  805. package/.claude/tests/sessionstart-budget-smoke.sh +185 -0
  806. package/.claude/tests/sessionstart-footprint-smoke.sh +258 -0
  807. package/.claude/tests/settings-dispatcher-baseline-smoke.sh +709 -0
  808. package/.claude/tests/settings-generation-feature-pruning-smoke.sh +196 -0
  809. package/.claude/tests/stale-harness-detect-smoke.sh +974 -0
  810. package/.claude/tests/statusline-smoke.sh +180 -0
  811. package/.claude/tests/task-rule-guard-smoke.sh +656 -0
  812. package/.claude/tests/tool-call-slip-detector-smoke.sh +101 -0
  813. package/.claude/tests/wave-precheck-template-smoke.sh +159 -0
  814. package/.claude/tests/why-x5-violation-detect-smoke.sh +157 -0
  815. package/.claude/tests/workflow-guard-smoke.sh +266 -0
  816. package/CLAUDE.md +75 -0
  817. package/LICENSE +21 -0
  818. package/README.md +790 -0
  819. package/bin/cli.js +395 -0
  820. package/docs/INVENTORY.md +163 -0
  821. package/install.sh +769 -0
  822. 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
+ }