@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,801 @@
1
+ #!/usr/bin/env bash
2
+ # .claude/tests/hc-config-tui-smoke.sh — task-48 (TUI 化 + metadata 表示) smoke test
3
+ #
4
+ # 目的:
5
+ # hc-config.sh TUI 化 + key metadata 表示 (task-48) の smoke test。
6
+ # - lib/hc-config-metadata.sh (description / effect / category)
7
+ # - hc-config.sh --list 説明列拡張 / --verbose / --show-default
8
+ # - 矢印キー TUI (TTY 必須、render seam を非 TTY で検証) + 非 TTY 番号選択 fallback
9
+ #
10
+ # iter1 review fixes (本 commit、6 reviewer CRIT/HIGH/MED 反映):
11
+ # C2 : Case 6 の env が pipe 先 bash に渡らない偽陽性を修正 (env を bash 側に置く)。
12
+ # H7 : 番号 menu 経由の [y/N]=N rollback 検証 case 追加 (yml 無変化 assert)。
13
+ # H8 : 空 yml の --list 挙動 (exit 0) 検証 case 追加。
14
+ # H9 : Case 5/6 を「非 TTY pipe で numeric menu が実出力される」振る舞い検証中心化、
15
+ # `[ -t 0 ]` 汎用 grep を除去しターゲットを絞る。
16
+ # H10 : Case 7 を「yml inline comment と metadata description の包含一致」(drift 検出) に変更。
17
+ # H11 : TUI render seam (_tui_render) を非 TTY で呼び選択行 `> <key>` 出力を検証する case 追加。
18
+ # 完全な ↑↓ pty simulate は Phase 2 defer (コメント明記)。
19
+ # H12 : Case 1 に description 最低文字数 / effect != description 先頭 substring / category 6 分類検証を追加。
20
+ # H13 : Case 1 に yml 実 key 数 == metadata key 総数 の双方向一致検証を追加。
21
+ # MED : Case 3/4 に代表 key の description 内容検証、--show-default の DEFAULT 列検証、
22
+ # --verbose --show-default 3 引数の無害性、ANSI escape 値の --list exit 0、
23
+ # FORCE_NUMERIC 判定の "1" 限定 を追加。
24
+ #
25
+ # 設計:
26
+ # - subshell 関数 ( set -uo pipefail; ... ) で各 case を隔離
27
+ # - PASS/FAIL カウンタ + 結果出力 + 全 PASS で exit 0
28
+ #
29
+ # 重要制約:
30
+ # - file-top に set -euo pipefail を書かない (feedback_set_e_in_sourced_libs 規範)
31
+ # - BSD/GNU bash 両対応 (macOS bash 3.2 + Linux bash 5.x)
32
+ # - 一時 yml は /tmp/ に作成、EXIT trap で cleanup
33
+
34
+ set -uo pipefail
35
+
36
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
37
+ REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
38
+ HC_CONFIG_SCRIPT="${REPO_ROOT}/.claude/scripts/hc-config.sh"
39
+ HC_CONFIG_YML="${REPO_ROOT}/.claude/harness-config.yml"
40
+ HC_CONFIG_METADATA_LIB="${REPO_ROOT}/.claude/scripts/lib/hc-config-metadata.sh"
41
+
42
+ # tmp dir (cleanup on exit)
43
+ TMP_DIR="$(mktemp -d "/tmp/hc-config-tui-smoke.XXXXXX")"
44
+ trap 'rm -rf "$TMP_DIR"' EXIT
45
+
46
+ PASS=0
47
+ FAIL=0
48
+ FAILED_CASES=""
49
+
50
+ # --- helpers ---
51
+
52
+ _record() {
53
+ local result="$1"
54
+ local case_id="$2"
55
+ local desc="$3"
56
+ if [ "$result" = "PASS" ]; then
57
+ printf ' PASS Case %s: %s\n' "$case_id" "$desc"
58
+ PASS=$((PASS + 1))
59
+ else
60
+ printf ' FAIL Case %s: %s\n' "$case_id" "$desc"
61
+ FAIL=$((FAIL + 1))
62
+ FAILED_CASES="${FAILED_CASES} ${case_id}"
63
+ fi
64
+ }
65
+
66
+ # timeout fallback (BSD / macOS で `timeout` 不在の環境向け)
67
+ # iter1 注意: 旧 fallback は `"$@" &` で対象を background 化していたため、
68
+ # stdin pipe を食わせる case (番号 menu の編集 path 検証等) で stdin が detach され
69
+ # 入力が届かず偽 PASS / 偽 FAIL になっていた。
70
+ # perl の alarm + exec は stdin を保持したまま実時間 timeout を提供する
71
+ # (perl は macOS / Linux に標準搭載)。perl も無ければ無 timeout で実行 (script は
72
+ # `5`/`q`/EOF で自己終了するため stdin EOF で確実に止まる)。
73
+ if ! command -v timeout >/dev/null 2>&1; then
74
+ if command -v perl >/dev/null 2>&1; then
75
+ timeout() {
76
+ local sec="$1"; shift
77
+ # alarm shift で sec 秒後に SIGALRM、exec で対象に置換 (stdin/stdout 継承)
78
+ perl -e 'alarm shift; exec @ARGV or exit 127' "$sec" "$@"
79
+ }
80
+ else
81
+ timeout() {
82
+ # 無 timeout fallback: stdin を foreground で保持して実行
83
+ shift
84
+ "$@"
85
+ }
86
+ fi
87
+ fi
88
+
89
+ # 全 key を harness-config.yml から抽出するヘルパー
90
+ # MED fix: hc-config.sh の _yml_list_keys と同一 regex に統一
91
+ # (^[a-z_][a-zA-Z0-9_]*: 行頭アンカー、インデント非許容)。
92
+ # format: KEY1 KEY2 KEY3 ... (改行区切り)
93
+ #
94
+ # task-69: HC_TUI_SMOKE_EXCLUDE_KEYS 撤廃。task-60 Step 5 iter 2 H5 で暫定 exclude していた
95
+ # `harness_version` / `stale_harness_markers` / `feature_stale_harness_detect_enabled` の 3 key は
96
+ # task-69 Step 2 で `lib/hc-config-metadata.sh` に正規登録 (新 category harness_meta) され、
97
+ # `feature_reviewer_count_guard_enabled` も feature_toggle に追加された。
98
+ # yml key 数 == metadata key 数 の双方向一致は Case 1 が動的に検証するため hardcode 不要。
99
+ # (task-69 Step 8: key 数は _get_all_config_keys で動的計算、fixed count は持たない)
100
+ _get_all_config_keys() {
101
+ grep -E '^[a-z_][a-zA-Z0-9_]*:' "${HC_CONFIG_YML}" \
102
+ | sed -E 's/:.*$//'
103
+ }
104
+
105
+ # task-69: exclude 撤廃に伴い filtered 版は素の _get_all_config_keys と同義 (後方互換 alias)。
106
+ _get_all_config_keys_filtered() {
107
+ _get_all_config_keys
108
+ }
109
+
110
+ # hc-config.sh の TUI 関数を非 TTY で呼ぶための sourceable 変種を生成 (H11 render seam 用)。
111
+ # 末尾の `main "$@"` 呼び出しのみ除去して source する (関数定義はそのまま、副作用なし)。
112
+ _make_sourceable_hcconfig() {
113
+ local out="$1"
114
+ # ta 注記: 末尾の `main "$@"` 呼び出し行のみ除去して source 可能にする (関数定義は温存)。
115
+ # grep pattern を空白許容 (`^[[:space:]]*main[[:space:]]+"\$@"[[:space:]]*$`) にして、
116
+ # 将来 hc-config.sh の末尾呼び出しがインデント / 末尾空白付きになっても確実に除去する。
117
+ grep -vE '^[[:space:]]*main[[:space:]]+"\$@"[[:space:]]*$' "${HC_CONFIG_SCRIPT}" > "$out"
118
+ }
119
+
120
+ # ============================================================
121
+ # Case 1: metadata 完全性 — 全 yml key に description + effect、双方向一致、最低品質
122
+ # (key 数は yml から動的取得、hardcode しない)
123
+ # ============================================================
124
+ # H12 + H13: description 最低文字数 / effect != description 先頭 substring /
125
+ # category 7 分類 (task-69) / yml key 数 == metadata key 総数。
126
+ _case_1() (
127
+ set -uo pipefail
128
+
129
+ if [ ! -f "${HC_CONFIG_METADATA_LIB}" ]; then
130
+ printf 'Case 1: lib/hc-config-metadata.sh not found\n' >&2
131
+ return 1
132
+ fi
133
+ # shellcheck disable=SC1090
134
+ source "${HC_CONFIG_METADATA_LIB}"
135
+
136
+ local all_keys
137
+ # task-60 Step 5 iter 2 H5 fix: Case 1 は filtered 版を使用 (exclude key を除外して評価)。
138
+ all_keys="$(_get_all_config_keys_filtered)"
139
+ local yml_count meta_count missing=0
140
+ yml_count=$(printf '%s\n' "$all_keys" | grep -c .)
141
+
142
+ # 有効 category 集合 (task-69 で harness_meta 追加 → 7 分類)
143
+ local valid_cats="保護パス ファイル配置 state_dir Gate/Confidence feature_toggle reviewer_control harness_meta"
144
+
145
+ while IFS= read -r key; do
146
+ [ -z "$key" ] && continue
147
+ local desc effect cat
148
+ desc="$(hc_metadata_description "$key" 2>/dev/null || true)"
149
+ effect="$(hc_metadata_effect "$key" 2>/dev/null || true)"
150
+ cat="$(hc_metadata_category "$key" 2>/dev/null || true)"
151
+
152
+ # description 存在 + 最低文字数 (>= 8、H12)
153
+ if [ -z "$desc" ]; then
154
+ printf 'Case 1: missing description for key: %s\n' "$key" >&2
155
+ missing=$((missing + 1))
156
+ elif [ "${#desc}" -lt 8 ]; then
157
+ printf 'Case 1: description too short (<8) for key: %s (%s)\n' "$key" "$desc" >&2
158
+ missing=$((missing + 1))
159
+ fi
160
+ # effect 存在
161
+ if [ -z "$effect" ]; then
162
+ printf 'Case 1: missing effect for key: %s\n' "$key" >&2
163
+ missing=$((missing + 1))
164
+ fi
165
+ # H12: effect が description の先頭 substring でない (CSV/TSV 誤 parse 検出)
166
+ # 誤 parse 時は effect が description の途中切れ断片になりがち。
167
+ if [ -n "$desc" ] && [ -n "$effect" ]; then
168
+ case "$desc" in
169
+ "${effect}"*)
170
+ printf 'Case 1: effect is a leading substring of description for %s (parse corruption?)\n' "$key" >&2
171
+ missing=$((missing + 1))
172
+ ;;
173
+ esac
174
+ fi
175
+ # H12: category が 6 分類のいずれか
176
+ case " $valid_cats " in
177
+ *" $cat "*) : ;;
178
+ *)
179
+ printf 'Case 1: invalid/empty category for key: %s (got: %s)\n' "$key" "$cat" >&2
180
+ missing=$((missing + 1))
181
+ ;;
182
+ esac
183
+ done <<< "$all_keys"
184
+
185
+ # H13: yml 実 key 数 == metadata key 総数 (双方向一致)
186
+ # task-78 Step 1: label_ja (5 列目) 追加で NF==5 になったため NF>=4 に緩和 (key 列の抽出に列数は不問)
187
+ meta_count=$(_hc_metadata_table | awk -F'\t' 'NF>=4 {print $1}' | grep -c .)
188
+ if [ "$yml_count" -ne "$meta_count" ]; then
189
+ printf 'Case 1: key count mismatch: yml=%d metadata=%d\n' "$yml_count" "$meta_count" >&2
190
+ # yml にあって metadata に無い key (および逆)
191
+ local meta_keys
192
+ meta_keys=$(_hc_metadata_table | awk -F'\t' 'NF>=4 {print $1}')
193
+ printf 'Case 1: in yml not in metadata:\n' >&2
194
+ comm -23 <(printf '%s\n' "$all_keys" | sort) <(printf '%s\n' "$meta_keys" | sort) >&2
195
+ printf 'Case 1: in metadata not in yml:\n' >&2
196
+ comm -13 <(printf '%s\n' "$all_keys" | sort) <(printf '%s\n' "$meta_keys" | sort) >&2
197
+ missing=$((missing + 1))
198
+ fi
199
+
200
+ [ "$missing" -eq 0 ]
201
+ )
202
+
203
+ # ============================================================
204
+ # Case 2: category グルーピング — 7 category 全 key 分類 (task-69)、未分類 key 0
205
+ # ============================================================
206
+ _case_2() (
207
+ set -uo pipefail
208
+
209
+ if [ ! -f "${HC_CONFIG_METADATA_LIB}" ]; then
210
+ printf 'Case 2: lib/hc-config-metadata.sh not found\n' >&2
211
+ return 1
212
+ fi
213
+ # shellcheck disable=SC1090
214
+ source "${HC_CONFIG_METADATA_LIB}"
215
+
216
+ local expected_categories="保護パス ファイル配置 state_dir Gate/Confidence feature_toggle reviewer_control harness_meta"
217
+ local missing_categories=0
218
+
219
+ for cat in $expected_categories; do
220
+ if ! hc_metadata_keys_by_category "$cat" 2>/dev/null | grep -q '.'; then
221
+ printf 'Case 2: category not found or empty: %s\n' "$cat" >&2
222
+ missing_categories=$((missing_categories + 1))
223
+ fi
224
+ done
225
+
226
+ local all_keys
227
+ # task-60 Step 5 iter 2 H5 fix: Case 2 は filtered 版を使用 (exclude key を除外して評価)。
228
+ all_keys="$(_get_all_config_keys_filtered)"
229
+ local unclassified=0
230
+
231
+ while IFS= read -r key; do
232
+ [ -z "$key" ] && continue
233
+ local cat
234
+ cat="$(hc_metadata_category "$key" 2>/dev/null || true)"
235
+ if [ -z "$cat" ]; then
236
+ printf 'Case 2: key has no category: %s\n' "$key" >&2
237
+ unclassified=$((unclassified + 1))
238
+ fi
239
+ done <<< "$all_keys"
240
+
241
+ [ "$missing_categories" -eq 0 ] && [ "$unclassified" -eq 0 ]
242
+ )
243
+
244
+ # ============================================================
245
+ # Case 3: --list 説明列拡張 — 説明列ヘッダー + 代表 key の description 内容
246
+ # ============================================================
247
+ # MED: header keyword だけでなく代表 key (confidence_threshold) の description が data 行に含まれる。
248
+ _case_3() (
249
+ set -uo pipefail
250
+
251
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
252
+ printf 'Case 3: hc-config.sh not executable\n' >&2
253
+ return 1
254
+ fi
255
+
256
+ local output exit_code
257
+ output="$(bash "${HC_CONFIG_SCRIPT}" --list 2>/dev/null)"
258
+ exit_code=$?
259
+
260
+ if [ $exit_code -ne 0 ]; then
261
+ printf 'Case 3: --list returned exit code %d\n' "$exit_code" >&2
262
+ return 1
263
+ fi
264
+ # 説明列ヘッダー
265
+ if ! printf '%s' "$output" | grep -q '説明'; then
266
+ printf 'Case 3: --list does not contain 説明 column header\n' >&2
267
+ return 1
268
+ fi
269
+ # MED: 代表 key confidence_threshold の description 主要語が data 行に含まれる
270
+ if ! printf '%s' "$output" | grep '^confidence_threshold' | grep -q 'Confidence Gate'; then
271
+ printf 'Case 3: confidence_threshold data row missing its description content\n' >&2
272
+ return 1
273
+ fi
274
+ return 0
275
+ )
276
+
277
+ # ============================================================
278
+ # Case 4: --list --verbose — 変更効果列 + 代表 key の effect 内容
279
+ # ============================================================
280
+ _case_4() (
281
+ set -uo pipefail
282
+
283
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
284
+ printf 'Case 4: hc-config.sh not executable\n' >&2
285
+ return 1
286
+ fi
287
+
288
+ local output exit_code
289
+ output="$(bash "${HC_CONFIG_SCRIPT}" --list --verbose 2>/dev/null)"
290
+ exit_code=$?
291
+
292
+ if [ $exit_code -ne 0 ]; then
293
+ printf 'Case 4: --list --verbose returned exit code %d\n' "$exit_code" >&2
294
+ return 1
295
+ fi
296
+ if ! printf '%s' "$output" | grep -q '変更効果'; then
297
+ printf 'Case 4: --list --verbose does not contain 変更効果 column header\n' >&2
298
+ return 1
299
+ fi
300
+ # MED: 代表 key の effect 主要語が出力に含まれる
301
+ if ! printf '%s' "$output" | grep -q '上げると subagent の completion confidence'; then
302
+ printf 'Case 4: confidence_threshold effect content missing in --verbose\n' >&2
303
+ return 1
304
+ fi
305
+ return 0
306
+ )
307
+
308
+ # ============================================================
309
+ # Case 5: 非 TTY pipe で numeric menu が実出力される (振る舞い検証、H9)
310
+ # ============================================================
311
+ # H9: symbol grep を _cmd_interactive_numeric にターゲット絞り + pipe 経由の実出力 (numeric menu) を検証。
312
+ # `[ -t 0 ]` 汎用 grep は除去。
313
+ _case_5() (
314
+ set -uo pipefail
315
+
316
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
317
+ printf 'Case 5: hc-config.sh not executable\n' >&2
318
+ return 1
319
+ fi
320
+
321
+ # 実装 seam: numeric fallback 関数が存在
322
+ if ! grep -q '_cmd_interactive_numeric' "${HC_CONFIG_SCRIPT}"; then
323
+ printf 'Case 5: _cmd_interactive_numeric not implemented\n' >&2
324
+ return 1
325
+ fi
326
+
327
+ # 振る舞い: 非 TTY pipe で numeric menu が実出力される
328
+ local output
329
+ output="$(printf 'q\n' | timeout 5 bash "${HC_CONFIG_SCRIPT}" 2>/dev/null || true)"
330
+ if ! printf '%s' "$output" | grep -q 'hc-config interactive menu'; then
331
+ printf 'Case 5: numeric menu not shown in non-TTY (pipe) context\n' >&2
332
+ return 1
333
+ fi
334
+ # H5: 非 TTY fallback 案内行も出る
335
+ if ! printf '%s' "$output" | grep -q '非 TTY 環境のため番号選択モード'; then
336
+ printf 'Case 5: non-TTY fallback notice missing\n' >&2
337
+ return 1
338
+ fi
339
+ return 0
340
+ )
341
+
342
+ # ============================================================
343
+ # Case 6: HC_HC_CONFIG_FORCE_NUMERIC=1 で強制番号選択 (env を bash 側に付与、C2)
344
+ # ============================================================
345
+ # C2 fix: 旧実装は env を pipe 元の printf に付与しており bash に渡らず偽陽性だった。
346
+ # env を pipe 先 bash 側に置く。
347
+ # 制約 (Case 6 コメント): 非 TTY pipe では FORCE_NUMERIC 無しでも numeric に降格するため、
348
+ # 「TTY 環境での FORCE_NUMERIC による強制降格」は expect/pty なしには自動検証不可。
349
+ # 本 case は (1) 実装シンボル存在 + (2) env を bash 側に渡して numeric menu が出る までを検証する。
350
+ _case_6() (
351
+ set -uo pipefail
352
+
353
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
354
+ printf 'Case 6: hc-config.sh not executable\n' >&2
355
+ return 1
356
+ fi
357
+
358
+ # 実装 seam: HC_HC_CONFIG_FORCE_NUMERIC が判定に使われている
359
+ if ! grep -q 'HC_HC_CONFIG_FORCE_NUMERIC' "${HC_CONFIG_SCRIPT}"; then
360
+ printf 'Case 6: HC_HC_CONFIG_FORCE_NUMERIC not implemented\n' >&2
361
+ return 1
362
+ fi
363
+
364
+ # C2: env を pipe 先 bash 側に置く (printf ではなく bash に付与)
365
+ local output
366
+ output="$(printf 'q\n' | HC_HC_CONFIG_FORCE_NUMERIC=1 timeout 5 bash "${HC_CONFIG_SCRIPT}" 2>/dev/null || true)"
367
+ if ! printf '%s' "$output" | grep -q 'hc-config interactive menu'; then
368
+ printf 'Case 6: HC_HC_CONFIG_FORCE_NUMERIC=1 did not produce numeric menu\n' >&2
369
+ return 1
370
+ fi
371
+ return 0
372
+ )
373
+
374
+ # ============================================================
375
+ # Case 7: metadata と yml inline comment の一致検証 (drift 検出、H10)
376
+ # ============================================================
377
+ # H10 fix: 旧 Case 7 は静的 hardcode への keyword match で tautology (動的抽出 regression 不検出)。
378
+ # inline comment を持つ key について「comment 主要語が metadata description に包含される」を検証。
379
+ _case_7() (
380
+ set -uo pipefail
381
+
382
+ if [ ! -f "${HC_CONFIG_METADATA_LIB}" ]; then
383
+ printf 'Case 7: lib/hc-config-metadata.sh not found\n' >&2
384
+ return 1
385
+ fi
386
+ # shellcheck disable=SC1090
387
+ source "${HC_CONFIG_METADATA_LIB}"
388
+
389
+ # inline comment を持つ代表 key (yml の `key: val # comment` から comment を抽出)。
390
+ # comment 主要語 (最初の token) が metadata description に含まれることを確認 (drift 検出)。
391
+ # ta 注記: check_keys は harness-config.yml で `# comment` を持つ key である前提。
392
+ # comment を持たない key を入れると comment 抽出が空になり「test key invalid」で FAIL する
393
+ # (本 case の主旨は drift 検出であり、comment 不在 key の検証ではないため意図的に除外)。
394
+ local check_keys="review_iteration_max feature_loop_mode_enforcement_enabled feature_draft_flow_guard_enabled"
395
+ local mismatch=0
396
+ local key
397
+ for key in $check_keys; do
398
+ local comment desc token
399
+ # yml から inline comment 抽出 (`# ` 以降)
400
+ comment="$(grep -E "^${key}:" "${HC_CONFIG_YML}" | head -n 1 | sed -n 's/.*#[[:space:]]*//p')"
401
+ if [ -z "$comment" ]; then
402
+ printf 'Case 7: no inline comment found for %s (test key invalid)\n' "$key" >&2
403
+ mismatch=$((mismatch + 1))
404
+ continue
405
+ fi
406
+ desc="$(hc_metadata_description "$key" 2>/dev/null || true)"
407
+ if [ -z "$desc" ]; then
408
+ printf 'Case 7: no metadata description for %s\n' "$key" >&2
409
+ mismatch=$((mismatch + 1))
410
+ continue
411
+ fi
412
+ # comment の主要語 (最初の語、whitespace/区切りまで) を取り、description が含むか確認。
413
+ # 記号で始まる comment (例 "loop-confirmation-detector + ...") は最初の単語を token とする。
414
+ token="$(printf '%s' "$comment" | awk '{print $1}')"
415
+ if [ -z "$token" ]; then
416
+ printf 'Case 7: empty token from comment for %s\n' "$key" >&2
417
+ mismatch=$((mismatch + 1))
418
+ continue
419
+ fi
420
+ if ! printf '%s' "$desc" | grep -qF "$token"; then
421
+ printf 'Case 7: drift detected — %s comment token "%s" not in metadata description\n' "$key" "$token" >&2
422
+ printf ' comment: %s\n desc : %s\n' "$comment" "$desc" >&2
423
+ mismatch=$((mismatch + 1))
424
+ fi
425
+ done
426
+
427
+ [ "$mismatch" -eq 0 ]
428
+ )
429
+
430
+ # ============================================================
431
+ # Case 8: 空 yml の --list が exit 0 (異常終了しない、H8)
432
+ # ============================================================
433
+ _case_8() (
434
+ set -uo pipefail
435
+
436
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
437
+ printf 'Case 8: hc-config.sh not executable\n' >&2
438
+ return 1
439
+ fi
440
+
441
+ local empty_yml="${TMP_DIR}/empty.yml"
442
+ printf '' > "$empty_yml"
443
+
444
+ local exit_code
445
+ bash "${HC_CONFIG_SCRIPT}" --config "$empty_yml" --list >/dev/null 2>&1
446
+ exit_code=$?
447
+ if [ "$exit_code" -ne 0 ]; then
448
+ printf 'Case 8: --list on empty yml returned exit %d (expected 0)\n' "$exit_code" >&2
449
+ return 1
450
+ fi
451
+ return 0
452
+ )
453
+
454
+ # ============================================================
455
+ # Case 9: 番号 menu 経由 [y/N]=N (空) で yml が変更されない (rollback 検証、H7)
456
+ # ============================================================
457
+ # H7: TUI は TTY 必須で自動不可なため、番号選択 menu の編集 path で検証。
458
+ # key 編集 (option 2) → 新値入力 → 確認で N → yml 無変化 を diff で assert。
459
+ # 番号 menu の option 2 では「new value」入力後に即 cmd_set するため、
460
+ # "確認 N で rollback" を再現するには空入力 (skip) を使う。
461
+ # ここでは「新値を空入力で skip すれば書込みが起きず yml 無変化」を検証する。
462
+ _case_9() (
463
+ set -uo pipefail
464
+
465
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
466
+ printf 'Case 9: hc-config.sh not executable\n' >&2
467
+ return 1
468
+ fi
469
+
470
+ local test_yml="${TMP_DIR}/rollback.yml"
471
+ cp "${HC_CONFIG_YML}" "$test_yml"
472
+ local before
473
+ before="$(cat "$test_yml")"
474
+
475
+ # option 2 (key 編集) → key 名 → 新値を空入力 (skip = rollback 相当) → 5 (終了)
476
+ # qa MED-3: numeric menu の異常終了を `|| true` で握り潰さず exit code を確認する。
477
+ # numeric menu は `5` で正常終了 (exit 0) するため、非 0 は menu 自体の故障を示す。
478
+ # (TUI [y/N]=N rollback は pty 必須で Phase2 defer。本 case は numeric menu の
479
+ # 「空入力 skip で書込みが起きない」rollback 相当の振る舞いを検証する)
480
+ local menu_ec
481
+ printf '2\nreview_iteration_max\n\n5\n' \
482
+ | timeout 5 bash "${HC_CONFIG_SCRIPT}" --config "$test_yml" >/dev/null 2>&1
483
+ menu_ec=$?
484
+ if [ "$menu_ec" -ne 0 ]; then
485
+ printf 'Case 9: numeric menu exited non-zero (%d) — menu malfunction, not a clean skip\n' "$menu_ec" >&2
486
+ return 1
487
+ fi
488
+
489
+ local after
490
+ after="$(cat "$test_yml")"
491
+ if [ "$before" != "$after" ]; then
492
+ printf 'Case 9: yml changed despite skip (empty new value), rollback violated\n' >&2
493
+ diff <(printf '%s' "$before") <(printf '%s' "$after") >&2 || true
494
+ return 1
495
+ fi
496
+ return 0
497
+ )
498
+
499
+ # ============================================================
500
+ # Case 10: 番号 menu 経由 編集 → 新値あり で yml が実変更される (編集 path 振る舞い、H11 代替)
501
+ # ============================================================
502
+ # H11: 完全な TUI ↑↓ pty simulate は Phase 2 defer。本 case は numeric menu の編集 path の
503
+ # 「新値ありで実際に書き換わる」振る舞いを検証 (cmd_set 経路の end-to-end)。
504
+ _case_10() (
505
+ set -uo pipefail
506
+
507
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
508
+ printf 'Case 10: hc-config.sh not executable\n' >&2
509
+ return 1
510
+ fi
511
+
512
+ local test_yml="${TMP_DIR}/edit.yml"
513
+ cp "${HC_CONFIG_YML}" "$test_yml"
514
+
515
+ # option 2 → key → 新値 3 → 5 (終了)
516
+ printf '2\nreview_iteration_max\n3\n5\n' \
517
+ | timeout 5 bash "${HC_CONFIG_SCRIPT}" --config "$test_yml" >/dev/null 2>&1 || true
518
+
519
+ local newval
520
+ newval="$(bash "${HC_CONFIG_SCRIPT}" --config "$test_yml" --get review_iteration_max 2>/dev/null | tr -d '[:space:]')"
521
+ if [ "$newval" != "3" ]; then
522
+ printf 'Case 10: edit path did not persist new value (got: %s, expected 3)\n' "$newval" >&2
523
+ return 1
524
+ fi
525
+ return 0
526
+ )
527
+
528
+ # ============================================================
529
+ # Case 11: TUI render seam — _tui_render が選択行 `> <key>` を非 TTY で出力する (H11)
530
+ # ============================================================
531
+ # H11: 矢印キー入力の pty simulate は Phase 2 defer。本 case は描画関数 _tui_render を
532
+ # 非 TTY で直接呼び、選択 index の key が `> ` プレフィックス付きで出力されること、
533
+ # category 区切り行 (=== <cat> ... ===) が含まれることを検証する。
534
+ # ↑↓ ナビゲーションの動的検証は Phase 2 (pty) defer。
535
+ _case_11() (
536
+ set -uo pipefail
537
+
538
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
539
+ printf 'Case 11: hc-config.sh not executable\n' >&2
540
+ return 1
541
+ fi
542
+
543
+ local src="${TMP_DIR}/hc-config-src.sh"
544
+ _make_sourceable_hcconfig "$src"
545
+
546
+ # CONFIG_PATH 設定が必要な理由: _tui_render は内部で _get_current → _get_default を呼び、
547
+ # さらに effect panel で _yml_get_raw "$CONFIG_PATH" を参照する。未設定だと unbound で死ぬ。
548
+ # metadata を先 source する理由: _tui_order_keys_by_category / _tui_render が _meta_category /
549
+ # _meta_effect を呼ぶため、hc-config.sh より先に lib/hc-config-metadata.sh を source して
550
+ # hc_metadata_* 関数を可視化しておく必要がある (順序逆だと category 解決が全て空になる)。
551
+
552
+ # iter2 CRIT C-iter2-1 regression ガード (stdout 純度):
553
+ # _tui_order_keys_by_category の戻りが正確に yml key 数 (= yml top-level key の総数、動的) 行 かつ
554
+ # `^[a-z_]+=` ゴミ行 0 を assert。bash 3.2 local+cmdsubst 漏洩で `kc=...` 等が
555
+ # 混入すると total が膨らむ (例: ゴミ 73 行混入で total=147)。
556
+ local order_out yml_key_count order_total order_garbage
557
+ yml_key_count=$(_get_all_config_keys | grep -c .)
558
+ order_out="$(
559
+ # shellcheck disable=SC1090
560
+ source "${HC_CONFIG_METADATA_LIB}"
561
+ # shellcheck disable=SC1090
562
+ source "$src"
563
+ CONFIG_PATH="${HC_CONFIG_YML}"
564
+ local keys
565
+ keys=$(_yml_list_keys "$CONFIG_PATH")
566
+ _tui_order_keys_by_category "$keys"
567
+ )" || true
568
+ order_total=$(printf '%s\n' "$order_out" | grep -c .)
569
+ order_garbage=$(printf '%s\n' "$order_out" | grep -cE '^[a-z_]+=' || true)
570
+ if [ "$order_total" -ne "$yml_key_count" ]; then
571
+ printf 'Case 11: _tui_order_keys_by_category total=%d != yml key count=%d (stdout leak?)\n' \
572
+ "$order_total" "$yml_key_count" >&2
573
+ return 1
574
+ fi
575
+ if [ "$order_garbage" -ne 0 ]; then
576
+ printf 'Case 11: _tui_order_keys_by_category emitted %d garbage assignment lines (^[a-z_]+=)\n' \
577
+ "$order_garbage" >&2
578
+ printf '%s\n' "$order_out" | grep -E '^[a-z_]+=' | head -5 >&2
579
+ return 1
580
+ fi
581
+
582
+ # 別 bash で source して _tui_render を呼ぶ
583
+ local rendered
584
+ rendered="$(
585
+ # shellcheck disable=SC1090
586
+ source "${HC_CONFIG_METADATA_LIB}"
587
+ # shellcheck disable=SC1090
588
+ source "$src"
589
+ CONFIG_PATH="${HC_CONFIG_YML}"
590
+ local keys ordered
591
+ keys=$(_yml_list_keys "$CONFIG_PATH")
592
+ ordered=$(_tui_order_keys_by_category "$keys")
593
+ _tui_render "$ordered" 0 2>/dev/null
594
+ )" || true
595
+
596
+ # ANSI escape を strip して検査
597
+ local clean
598
+ clean="$(printf '%s' "$rendered" | sed -E "s/$(printf '\033')\[[0-9;]*[A-Za-z]//g")"
599
+
600
+ # iter2 CRIT C-iter2-2 regression ガード (stdout 純度):
601
+ # _tui_render の clean 出力に `kc=` / `cat_count=` のゴミ代入行が混入しない (negative assert)。
602
+ # bash 3.2 local+cmdsubst 漏洩で端末描画にゴミ行が混入すると TUI レイアウトが崩壊する。
603
+ if printf '%s\n' "$clean" | grep -qE '^(kc|cat_count)='; then
604
+ printf 'Case 11: _tui_render emitted garbage assignment lines (kc=/cat_count=) in output\n' >&2
605
+ printf '%s\n' "$clean" | grep -E '^(kc|cat_count)=' | head -5 >&2
606
+ return 1
607
+ fi
608
+
609
+ # sel=0 の先頭 key が `> ` 付きで出る
610
+ if ! printf '%s' "$clean" | grep -qE '^> [a-z_]'; then
611
+ printf 'Case 11: _tui_render did not emit a selected row (> <key>)\n' >&2
612
+ return 1
613
+ fi
614
+ # category 区切り行が含まれる (H3)
615
+ if ! printf '%s' "$clean" | grep -qE '=== .* keys\) ==='; then
616
+ printf 'Case 11: _tui_render did not emit category separator rows\n' >&2
617
+ return 1
618
+ fi
619
+ # effect panel (変更効果) が含まれる (H4 seam)
620
+ if ! printf '%s' "$clean" | grep -q '変更効果'; then
621
+ printf 'Case 11: _tui_render did not emit effect panel\n' >&2
622
+ return 1
623
+ fi
624
+ return 0
625
+ )
626
+
627
+ # ============================================================
628
+ # Case 12: --list --show-default で DEFAULT 列が出る + --verbose --show-default が無害 (MED)
629
+ # ============================================================
630
+ _case_12() (
631
+ set -uo pipefail
632
+
633
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
634
+ printf 'Case 12: hc-config.sh not executable\n' >&2
635
+ return 1
636
+ fi
637
+
638
+ # --show-default: DEFAULT 列
639
+ local out1 ec1
640
+ out1="$(bash "${HC_CONFIG_SCRIPT}" --list --show-default 2>/dev/null)"
641
+ ec1=$?
642
+ if [ $ec1 -ne 0 ]; then
643
+ printf 'Case 12: --list --show-default exit %d\n' "$ec1" >&2
644
+ return 1
645
+ fi
646
+ if ! printf '%s' "$out1" | grep -q 'DEFAULT'; then
647
+ printf 'Case 12: --show-default missing DEFAULT column\n' >&2
648
+ return 1
649
+ fi
650
+
651
+ # --verbose --show-default 3 引数: 第 3 引数が無視されてもエラーにならない
652
+ local ec2
653
+ bash "${HC_CONFIG_SCRIPT}" --list --verbose --show-default >/dev/null 2>&1
654
+ ec2=$?
655
+ if [ $ec2 -ne 0 ]; then
656
+ printf 'Case 12: --list --verbose --show-default returned exit %d (expected 0)\n' "$ec2" >&2
657
+ return 1
658
+ fi
659
+ return 0
660
+ )
661
+
662
+ # ============================================================
663
+ # Case 13: FORCE_NUMERIC 判定が "1" 限定 (=0/=false は強制しない、MED negative)
664
+ # ============================================================
665
+ # 非 TTY pipe では元々 numeric なので「TUI 側に行く」直接観測は不可。
666
+ # 本 case は判定ロジックが "1" 限定であることをコード上で検証 (`!= "1"` パターン)。
667
+ # 加えて FORCE_NUMERIC=0 / =false でも非 TTY なら numeric menu が出る (壊れない) ことを確認。
668
+ _case_13() (
669
+ set -uo pipefail
670
+
671
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
672
+ printf 'Case 13: hc-config.sh not executable\n' >&2
673
+ return 1
674
+ fi
675
+
676
+ # ロジックが "1" 限定 ( != "1" で TUI、== "1" で numeric強制) であることを確認
677
+ if ! grep -qE 'HC_HC_CONFIG_FORCE_NUMERIC:-.*!=[[:space:]]*"1"' "${HC_CONFIG_SCRIPT}"; then
678
+ printf 'Case 13: FORCE_NUMERIC dispatch is not gated on exact "1" value\n' >&2
679
+ return 1
680
+ fi
681
+
682
+ # =0 / =false でも非 TTY では numeric menu が壊れず出る
683
+ local out0 outf
684
+ out0="$(printf 'q\n' | HC_HC_CONFIG_FORCE_NUMERIC=0 timeout 5 bash "${HC_CONFIG_SCRIPT}" 2>/dev/null || true)"
685
+ outf="$(printf 'q\n' | HC_HC_CONFIG_FORCE_NUMERIC=false timeout 5 bash "${HC_CONFIG_SCRIPT}" 2>/dev/null || true)"
686
+ if ! printf '%s' "$out0" | grep -q 'hc-config interactive menu'; then
687
+ printf 'Case 13: FORCE_NUMERIC=0 broke non-TTY numeric menu\n' >&2
688
+ return 1
689
+ fi
690
+ if ! printf '%s' "$outf" | grep -q 'hc-config interactive menu'; then
691
+ printf 'Case 13: FORCE_NUMERIC=false broke non-TTY numeric menu\n' >&2
692
+ return 1
693
+ fi
694
+ return 0
695
+ )
696
+
697
+ # ============================================================
698
+ # Case 14: ANSI escape を含む値の --list が exit 0 (MED)
699
+ # ============================================================
700
+ _case_14() (
701
+ set -uo pipefail
702
+
703
+ if [ ! -x "${HC_CONFIG_SCRIPT}" ]; then
704
+ printf 'Case 14: hc-config.sh not executable\n' >&2
705
+ return 1
706
+ fi
707
+
708
+ local esc_yml="${TMP_DIR}/ansi.yml"
709
+ cp "${HC_CONFIG_YML}" "$esc_yml"
710
+ # qa MED-4: notify_sound は yml に既存のため、append すると重複 key で invalid yaml になり
711
+ # PyYAML validate が常に reject して本 case の主旨 (ANSI 値の --list が exit 0) を検証できない。
712
+ # 既存 notify_sound 行を事前削除してから ANSI 値付きで append し直す (重複回避)。
713
+ # ESC を含む値を notify_sound に設定 (double-quote 形式)
714
+ sed -i.bak '/^notify_sound:/d' "$esc_yml" && rm -f "${esc_yml}.bak"
715
+ printf '\nnotify_sound: "%sred%s"\n' "$(printf '\033')[31m" "$(printf '\033')[0m" >> "$esc_yml"
716
+
717
+ local ec
718
+ bash "${HC_CONFIG_SCRIPT}" --config "$esc_yml" --list >/dev/null 2>&1
719
+ ec=$?
720
+ if [ "$ec" -ne 0 ]; then
721
+ printf 'Case 14: --list with ANSI-escape value returned exit %d (expected 0)\n' "$ec" >&2
722
+ return 1
723
+ fi
724
+ return 0
725
+ )
726
+
727
+ # ============================================================
728
+ # テスト実行
729
+ # ============================================================
730
+
731
+ printf '\n=== hc-config-tui-smoke (task-48: 14 cases, iter1 review fixes) ===\n\n'
732
+
733
+ if _case_1 2>/dev/null; then _record PASS 1 "metadata 完全性 — 79 key description+effect, 双方向一致, category 7 分類, effect!=desc断片"
734
+ else _record FAIL 1 "metadata 完全性 — 79 key description+effect, 双方向一致, category 7 分類, effect!=desc断片"
735
+ fi
736
+
737
+ if _case_2 2>/dev/null; then _record PASS 2 "category グルーピング — 7 category 全 key 分類、未分類 key 0"
738
+ else _record FAIL 2 "category グルーピング — 7 category 全 key 分類、未分類 key 0"
739
+ fi
740
+
741
+ if _case_3 2>/dev/null; then _record PASS 3 "--list 説明列 — 説明 header + 代表 key description 内容"
742
+ else _record FAIL 3 "--list 説明列 — 説明 header + 代表 key description 内容"
743
+ fi
744
+
745
+ if _case_4 2>/dev/null; then _record PASS 4 "--list --verbose — 変更効果列 + 代表 key effect 内容"
746
+ else _record FAIL 4 "--list --verbose — 変更効果列 + 代表 key effect 内容"
747
+ fi
748
+
749
+ if _case_5 2>/dev/null; then _record PASS 5 "非 TTY pipe で numeric menu 実出力 + fallback 案内 (H9)"
750
+ else _record FAIL 5 "非 TTY pipe で numeric menu 実出力 + fallback 案内 (H9)"
751
+ fi
752
+
753
+ if _case_6 2>/dev/null; then _record PASS 6 "HC_HC_CONFIG_FORCE_NUMERIC=1 (env を bash 側、C2)"
754
+ else _record FAIL 6 "HC_HC_CONFIG_FORCE_NUMERIC=1 (env を bash 側、C2)"
755
+ fi
756
+
757
+ if _case_7 2>/dev/null; then _record PASS 7 "metadata と yml inline comment の一致検証 (drift 検出、H10)"
758
+ else _record FAIL 7 "metadata と yml inline comment の一致検証 (drift 検出、H10)"
759
+ fi
760
+
761
+ if _case_8 2>/dev/null; then _record PASS 8 "空 yml の --list が exit 0 (H8)"
762
+ else _record FAIL 8 "空 yml の --list が exit 0 (H8)"
763
+ fi
764
+
765
+ if _case_9 2>/dev/null; then _record PASS 9 "番号 menu 空入力で yml 無変化 + menu exit 0 (skip 検証、H7 + qa MED-3)"
766
+ else _record FAIL 9 "番号 menu 空入力で yml 無変化 + menu exit 0 (skip 検証、H7 + qa MED-3)"
767
+ fi
768
+
769
+ if _case_10 2>/dev/null; then _record PASS 10 "番号 menu 編集 path で新値が persist (H11 代替)"
770
+ else _record FAIL 10 "番号 menu 編集 path で新値が persist (H11 代替)"
771
+ fi
772
+
773
+ if _case_11 2>/dev/null; then _record PASS 11 "TUI render seam — 選択行/区切り行/effect panel + stdout 純度 (order total==79/ゴミ0, render kc=/cat_count= 0) (H11 + iter2 CRIT)"
774
+ else _record FAIL 11 "TUI render seam — 選択行/区切り行/effect panel + stdout 純度 (order total==79/ゴミ0, render kc=/cat_count= 0) (H11 + iter2 CRIT)"
775
+ fi
776
+
777
+ if _case_12 2>/dev/null; then _record PASS 12 "--show-default で DEFAULT 列 + --verbose --show-default 無害 (MED)"
778
+ else _record FAIL 12 "--show-default で DEFAULT 列 + --verbose --show-default 無害 (MED)"
779
+ fi
780
+
781
+ if _case_13 2>/dev/null; then _record PASS 13 "FORCE_NUMERIC 判定が \"1\" 限定 (=0/=false negative、MED)"
782
+ else _record FAIL 13 "FORCE_NUMERIC 判定が \"1\" 限定 (=0/=false negative、MED)"
783
+ fi
784
+
785
+ if _case_14 2>/dev/null; then _record PASS 14 "ANSI escape 値の --list が exit 0 (MED)"
786
+ else _record FAIL 14 "ANSI escape 値の --list が exit 0 (MED)"
787
+ fi
788
+
789
+ # ============================================================
790
+ # 集計
791
+ # ============================================================
792
+
793
+ TOTAL=$((PASS + FAIL))
794
+ printf '\n--- Result: %d/%d PASS ---\n' "$PASS" "$TOTAL"
795
+
796
+ if [ "$FAIL" -gt 0 ]; then
797
+ printf 'FAILED cases:%s\n' "$FAILED_CASES"
798
+ exit 1
799
+ fi
800
+
801
+ exit 0