@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,974 @@
1
+ #!/usr/bin/env bash
2
+ # stale-harness-detect-smoke.sh — task-56 F + task-84 (stale-harness-detect)
3
+ #
4
+ # Cases:
5
+ # 1: marker 全在 + harness_version 正常 (今日) → silent (exit 0, stdout/stderr 0 byte)
6
+ # 2: marker 欠落 (CommonRules.md 不在) → WARN 発火 (<system-reminder> + 'stale harness')
7
+ # 3: harness_version stamp 異常 (非 YYYY-MM-DD) → UNKNOWN 表示 + WARN
8
+ # 4: 未来日付 (>= 翌日) → 別 WARN「stamp 異常 (future)」
9
+ # 5: 同一 session 2 回目実行 → 重複抑制 (silent)
10
+ # 6: feature OFF (HC_FEATURE_STALE_HARNESS_DETECT_ENABLED=false) → no-op silent
11
+ # --- task-84 registry 比較シナリオ (Cases 11-15) ---
12
+ # 11: stamp 古 + registry 新 (local http server) → WARN「新版」「npx」「update」
13
+ # + assert: system-reminder / block しません / 9.9.9 / 0.0.1 の 4 点
14
+ # 12: stamp == registry → silent
15
+ # 13: registry 取得失敗 (不正 base) → fail-open silent + exit 0
16
+ # 14: throttle — 2 回目は registry 取得せず skip → silent
17
+ # 15: feature OFF → no-op exit 0
18
+ # 7: config 不在 (HC_CONFIG_PATH を bogus path) → silent fail-open (exit 0)
19
+ # 8: marker list 未設定 (yml に stale_harness_markers 空) → silent fail-open
20
+ # 9: harness_version key 欠落 (yml に key 自体無し) + marker 全在 → WARN 「stamp 未設定」
21
+ # --- task-84 追加 gap カバレッジ (Cases 16-19) ---
22
+ # 16: Gap-A throttle 境界 — last-check mtime が interval ちょうど前 → registry 取得走る
23
+ # 17: Gap-B fallback 経路 — cli_path 不在 (node fallback) → 同一 WARN 結果
24
+ # 18: Gap-C harness_npm_version 行不在 → fail-open silent (version 比較 skip)
25
+ # 19: Gap-D 不正 semver stamp (not-a-version) → fail-open silent
26
+ #
27
+ # 重要制約:
28
+ # - file-top に set -euo pipefail を書かない (CLAUDE.md Critical Lesson HIGH 遵守)
29
+ # - 各 case 関数は ( set -uo pipefail; ... ) でラップ
30
+ # - 各 case は tmp dir を per-case 隔離して順序依存を排除
31
+ #
32
+ # 実行:
33
+ # bash .claude/tests/stale-harness-detect-smoke.sh
34
+ #
35
+ # 終了コード:
36
+ # 0 = 全 case PASS / 1 = 1 件以上 FAIL
37
+
38
+ set -u
39
+
40
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
41
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
42
+ HOOK="$PROJECT_ROOT/.claude/hooks/stale-harness-detect.sh"
43
+
44
+ if [ ! -f "$HOOK" ]; then
45
+ printf 'ERROR: hook not found: %s\n' "$HOOK" >&2
46
+ exit 1
47
+ fi
48
+
49
+ TMP_BASE="$(mktemp -d /tmp/stale-harness-detect-smoke.XXXXXX)"
50
+ trap 'rm -rf "$TMP_BASE"' EXIT
51
+
52
+ PASS=0
53
+ FAIL=0
54
+ FAILED_CASES=()
55
+
56
+ _root_for() {
57
+ local case_id="$1"
58
+ printf '%s/root-%s' "$TMP_BASE" "$case_id"
59
+ }
60
+
61
+ run_case() {
62
+ local case_id="$1"
63
+ local desc="$2"
64
+ local test_fn="$3"
65
+ if ( set -uo pipefail; "$test_fn" ) >/dev/null 2>&1; then
66
+ printf ' PASS Case %s: %s\n' "$case_id" "$desc"
67
+ PASS=$((PASS+1))
68
+ else
69
+ printf ' FAIL Case %s: %s\n' "$case_id" "$desc"
70
+ FAIL=$((FAIL+1))
71
+ FAILED_CASES+=("$case_id")
72
+ fi
73
+ }
74
+
75
+ # ---- fixture builders ----
76
+
77
+ # layout_full <root> <harness_version> [marker_list_or_empty]
78
+ # .claude/CommonRules.md + scripts/hc-config.sh + lib/hc-config-metadata.sh
79
+ # + hooks/loop-confirmation-detector.sh + harness-config.yml 全在
80
+ # harness_version stamp を yml に書き込み
81
+ _layout_full() {
82
+ local root="$1"
83
+ local hv="$2"
84
+ local markers_line="${3:-stale_harness_markers: [CommonRules.md, scripts/hc-config.sh, hooks/lib/config-loader.sh, hooks/loop-confirmation-detector.sh]}"
85
+
86
+ mkdir -p \
87
+ "$root/.claude" \
88
+ "$root/.claude/scripts" \
89
+ "$root/.claude/hooks" \
90
+ "$root/.claude/hooks/lib"
91
+
92
+ : > "$root/.claude/CommonRules.md"
93
+ : > "$root/.claude/scripts/hc-config.sh"
94
+ : > "$root/.claude/hooks/lib/config-loader.sh"
95
+ : > "$root/.claude/hooks/loop-confirmation-detector.sh"
96
+
97
+ cat > "$root/.claude/harness-config.yml" <<EOF
98
+ # test fixture
99
+ harness_version: "${hv}"
100
+ ${markers_line}
101
+ feature_stale_harness_detect_enabled: true
102
+ EOF
103
+ }
104
+
105
+ _state_dir_for() {
106
+ local root="$1"
107
+ printf '%s/.claude/.stale-harness-state' "$root"
108
+ }
109
+
110
+ # Today / future date helpers (BSD/GNU compat)
111
+ _today() {
112
+ date -u +%Y-%m-%d
113
+ }
114
+ _future() {
115
+ # +1 day
116
+ if date -v +1d +%Y-%m-%d >/dev/null 2>&1; then
117
+ date -u -v +1d +%Y-%m-%d
118
+ else
119
+ date -u -d "+1 day" +%Y-%m-%d
120
+ fi
121
+ }
122
+
123
+ # === Case 1: marker 全在 + version 正常 → silent ===
124
+ case_1_silent_when_healthy() {
125
+ local root
126
+ root=$(_root_for 1)
127
+ _layout_full "$root" "$(_today)"
128
+
129
+ local out err
130
+ out=$(
131
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
132
+ CLAUDE_PROJECT_DIR="$root" \
133
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
134
+ bash "$HOOK" </dev/null 2>/tmp/case1-err
135
+ )
136
+ err=$(cat /tmp/case1-err)
137
+ rm -f /tmp/case1-err
138
+
139
+ if [ -n "$out" ]; then
140
+ printf 'expected stdout empty, got:\n%s\n' "$out" >&2
141
+ return 1
142
+ fi
143
+ if [ -n "$err" ]; then
144
+ printf 'expected stderr empty (healthy harness), got:\n%s\n' "$err" >&2
145
+ return 1
146
+ fi
147
+ return 0
148
+ }
149
+
150
+ # === Case 2: marker 欠落 (CommonRules.md 不在) → WARN ===
151
+ case_2_warn_on_missing_marker() {
152
+ local root
153
+ root=$(_root_for 2)
154
+ _layout_full "$root" "$(_today)"
155
+ rm -f "$root/.claude/CommonRules.md"
156
+
157
+ local err
158
+ err=$(
159
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
160
+ CLAUDE_PROJECT_DIR="$root" \
161
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
162
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
163
+ )
164
+ if [ -z "$err" ]; then
165
+ printf 'expected stderr WARN, got empty\n' >&2
166
+ return 1
167
+ fi
168
+ if ! printf '%s' "$err" | grep -q 'system-reminder'; then
169
+ printf 'missing system-reminder tag. stderr:\n%s\n' "$err" >&2
170
+ return 1
171
+ fi
172
+ if ! printf '%s' "$err" | grep -q 'stale harness'; then
173
+ printf 'missing "stale harness" keyword. stderr:\n%s\n' "$err" >&2
174
+ return 1
175
+ fi
176
+ if ! printf '%s' "$err" | grep -q 'CommonRules.md'; then
177
+ printf 'expected missing marker name (CommonRules.md) in warning. stderr:\n%s\n' "$err" >&2
178
+ return 1
179
+ fi
180
+ # 「bash install.sh --update」案内を含む
181
+ if ! printf '%s' "$err" | grep -q 'install.sh --update'; then
182
+ printf 'expected install.sh --update guidance. stderr:\n%s\n' "$err" >&2
183
+ return 1
184
+ fi
185
+ return 0
186
+ }
187
+
188
+ # === Case 3: version stamp 異常 (非 YYYY-MM-DD) → UNKNOWN + WARN ===
189
+ case_3_sanitize_bad_version_stamp() {
190
+ local root
191
+ root=$(_root_for 3)
192
+ _layout_full "$root" 'aaaa $(rm -rf /)'
193
+
194
+ local err
195
+ err=$(
196
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
197
+ CLAUDE_PROJECT_DIR="$root" \
198
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
199
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
200
+ )
201
+ if [ -z "$err" ]; then
202
+ printf 'expected stderr WARN, got empty\n' >&2
203
+ return 1
204
+ fi
205
+ if ! printf '%s' "$err" | grep -q 'UNKNOWN'; then
206
+ printf 'expected UNKNOWN in warning (sanitize). stderr:\n%s\n' "$err" >&2
207
+ return 1
208
+ fi
209
+ # injection attempt 文字列 (rm -rf /) が stderr に出てはいけない
210
+ if printf '%s' "$err" | grep -qF 'rm -rf'; then
211
+ printf 'SECURITY: bad input leaked to stderr. stderr:\n%s\n' "$err" >&2
212
+ return 1
213
+ fi
214
+ return 0
215
+ }
216
+
217
+ # === Case 4: 未来日付 → 別 WARN「stamp 異常」===
218
+ case_4_warn_on_future_date() {
219
+ local root
220
+ root=$(_root_for 4)
221
+ _layout_full "$root" "$(_future)"
222
+
223
+ local err
224
+ err=$(
225
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
226
+ CLAUDE_PROJECT_DIR="$root" \
227
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
228
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
229
+ )
230
+ if [ -z "$err" ]; then
231
+ printf 'expected stderr WARN (future date), got empty\n' >&2
232
+ return 1
233
+ fi
234
+ if ! printf '%s' "$err" | grep -qE 'future|未来'; then
235
+ printf 'expected future-date warning. stderr:\n%s\n' "$err" >&2
236
+ return 1
237
+ fi
238
+ return 0
239
+ }
240
+
241
+ # === Case 5: 同一 session 2 回目 → 重複抑制 ===
242
+ case_5_dedup_within_session() {
243
+ local root
244
+ root=$(_root_for 5)
245
+ _layout_full "$root" "$(_today)"
246
+ rm -f "$root/.claude/CommonRules.md" # marker 欠落で WARN trigger
247
+
248
+ # 1 回目: WARN 発火
249
+ local err1
250
+ err1=$(
251
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
252
+ CLAUDE_PROJECT_DIR="$root" \
253
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
254
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
255
+ )
256
+ if [ -z "$err1" ]; then
257
+ printf 'precondition: first run should fire WARN, got empty\n' >&2
258
+ return 1
259
+ fi
260
+
261
+ # state file が作られたはず
262
+ if ! ls "$(_state_dir_for "$root")"/*.fired >/dev/null 2>&1; then
263
+ printf 'expected state file *.fired in %s\n' "$(_state_dir_for "$root")" >&2
264
+ return 1
265
+ fi
266
+
267
+ # 2 回目: 同 root, 同 sha → silent
268
+ local err2
269
+ err2=$(
270
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
271
+ CLAUDE_PROJECT_DIR="$root" \
272
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
273
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
274
+ )
275
+ if [ -n "$err2" ]; then
276
+ printf 'expected silent on 2nd run (dedup), got:\n%s\n' "$err2" >&2
277
+ return 1
278
+ fi
279
+ return 0
280
+ }
281
+
282
+ # === Case 6: feature OFF → no-op silent ===
283
+ case_6_feature_off_noop() {
284
+ local root
285
+ root=$(_root_for 6)
286
+ _layout_full "$root" "$(_today)"
287
+ rm -f "$root/.claude/CommonRules.md" # 本来 WARN 出る
288
+
289
+ local err
290
+ err=$(
291
+ HC_FEATURE_STALE_HARNESS_DETECT_ENABLED=false \
292
+ CLAUDE_PROJECT_DIR="$root" \
293
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
294
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
295
+ )
296
+ if [ -n "$err" ]; then
297
+ printf 'expected silent (feature OFF), got:\n%s\n' "$err" >&2
298
+ return 1
299
+ fi
300
+ return 0
301
+ }
302
+
303
+ # === Case 7: config 不在 → silent fail-open ===
304
+ case_7_silent_when_no_config() {
305
+ local root
306
+ root=$(_root_for 7)
307
+ mkdir -p "$root"
308
+ # yml も marker も無し
309
+ local err rc
310
+ err=$(
311
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
312
+ CLAUDE_PROJECT_DIR="$root" \
313
+ HC_CONFIG_PATH="$root/.claude/no-such-config.yml" \
314
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
315
+ )
316
+ rc=$?
317
+ if [ "$rc" -ne 0 ]; then
318
+ printf 'expected exit 0 (fail-open), got %d\n' "$rc" >&2
319
+ return 1
320
+ fi
321
+ if [ -n "$err" ]; then
322
+ printf 'expected silent (no config fail-open), got:\n%s\n' "$err" >&2
323
+ return 1
324
+ fi
325
+ return 0
326
+ }
327
+
328
+ # === Case 8: marker list 未設定 → silent fail-open ===
329
+ case_8_silent_when_no_markers() {
330
+ local root
331
+ root=$(_root_for 8)
332
+ # yml は存在するが stale_harness_markers が空配列
333
+ mkdir -p "$root/.claude"
334
+ cat > "$root/.claude/harness-config.yml" <<EOF
335
+ harness_version: "$(_today)"
336
+ stale_harness_markers: []
337
+ feature_stale_harness_detect_enabled: true
338
+ EOF
339
+ local err rc
340
+ err=$(
341
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
342
+ CLAUDE_PROJECT_DIR="$root" \
343
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
344
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
345
+ )
346
+ rc=$?
347
+ if [ "$rc" -ne 0 ]; then
348
+ printf 'expected exit 0 (no markers fail-open), got %d\n' "$rc" >&2
349
+ return 1
350
+ fi
351
+ if [ -n "$err" ]; then
352
+ printf 'expected silent (no markers configured), got:\n%s\n' "$err" >&2
353
+ return 1
354
+ fi
355
+ return 0
356
+ }
357
+
358
+ # === Case 9: version key 欠落 + marker 全在 → WARN「stamp 未設定」===
359
+ case_9_warn_on_missing_version_key() {
360
+ local root
361
+ root=$(_root_for 9)
362
+ # marker 全在 layout、ただし yml に harness_version 行を含めない
363
+ mkdir -p \
364
+ "$root/.claude" \
365
+ "$root/.claude/scripts" \
366
+ "$root/.claude/hooks/lib"
367
+ : > "$root/.claude/CommonRules.md"
368
+ : > "$root/.claude/scripts/hc-config.sh"
369
+ : > "$root/.claude/hooks/lib/config-loader.sh"
370
+ : > "$root/.claude/hooks/loop-confirmation-detector.sh"
371
+ cat > "$root/.claude/harness-config.yml" <<EOF
372
+ # harness_version key intentionally absent
373
+ stale_harness_markers: [CommonRules.md, scripts/hc-config.sh, hooks/lib/config-loader.sh, hooks/loop-confirmation-detector.sh]
374
+ feature_stale_harness_detect_enabled: true
375
+ EOF
376
+
377
+ local err
378
+ err=$(
379
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
380
+ CLAUDE_PROJECT_DIR="$root" \
381
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
382
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
383
+ )
384
+ if [ -z "$err" ]; then
385
+ printf 'expected stderr WARN (missing version key), got empty\n' >&2
386
+ return 1
387
+ fi
388
+ # UNKNOWN 表示で出ているはず
389
+ if ! printf '%s' "$err" | grep -q 'UNKNOWN'; then
390
+ printf 'expected UNKNOWN for missing version key. stderr:\n%s\n' "$err" >&2
391
+ return 1
392
+ fi
393
+ return 0
394
+ }
395
+
396
+ # === Case 10: WARN 取込手順 strengthen (task-59 G2 連携) ===
397
+ # 規範: .claude/rules/development-process.md §「harness 取込チェックリスト」
398
+ # F の WARN 文に install.sh --update 案内 + 採用案内構造 (system-reminder / 対処 keyword)
399
+ # が含まれることを strengthen verify。Case 2 既存検証 (install.sh --update 含有) を
400
+ # 補強し、task-59 採用案 C ハイブリッドの「F WARN 連携」を smoke で固定化する。
401
+ case_10_warn_includes_proactive_sync_guidance() {
402
+ local root
403
+ root=$(_root_for 10)
404
+ _layout_full "$root" "$(_today)"
405
+ # marker 欠落で WARN を発火させる (Case 2 と同じ trigger だが verify 観点が異なる)
406
+ rm -f "$root/.claude/CommonRules.md"
407
+
408
+ local err
409
+ err=$(
410
+ unset HC_FEATURE_STALE_HARNESS_DETECT_ENABLED
411
+ CLAUDE_PROJECT_DIR="$root" \
412
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
413
+ bash "$HOOK" </dev/null 2>&1 >/dev/null
414
+ )
415
+ if [ -z "$err" ]; then
416
+ printf 'expected stderr WARN (proactive sync guidance), got empty\n' >&2
417
+ return 1
418
+ fi
419
+ # (1) install.sh --update 案内 (task-59 G2 case C: F WARN 連携の核心)
420
+ if ! printf '%s' "$err" | grep -q 'install.sh --update'; then
421
+ printf '[case 10/1] missing install.sh --update guidance. stderr:\n%s\n' "$err" >&2
422
+ return 1
423
+ fi
424
+ # (2) terminal 経路明示 (cross-repo write は user manual 必須、規範 §「cross-repo write 例外」連携)
425
+ if ! printf '%s' "$err" | grep -qE 'terminal|user manual|手動'; then
426
+ printf '[case 10/2] missing terminal/manual hint. stderr:\n%s\n' "$err" >&2
427
+ return 1
428
+ fi
429
+ # (3) system-reminder tag (Claude Code 注入経路、SessionStart hook の標準)
430
+ if ! printf '%s' "$err" | grep -q 'system-reminder'; then
431
+ printf '[case 10/3] missing system-reminder tag. stderr:\n%s\n' "$err" >&2
432
+ return 1
433
+ fi
434
+ # (4) bash prefix (実行コマンドであることを user に明示)
435
+ if ! printf '%s' "$err" | grep -qE 'bash[[:space:]]+install\.sh'; then
436
+ printf '[case 10/4] missing bash command prefix. stderr:\n%s\n' "$err" >&2
437
+ return 1
438
+ fi
439
+ return 0
440
+ }
441
+
442
+ # =====================================================================
443
+ # task-84 registry 比較シナリオ (Cases 11-15)
444
+ # =====================================================================
445
+ # helper: python3 ベースの local http server を動的 port で起動し、
446
+ # port を stdout の 1 行目に出力して serve_forever する。
447
+ # 引数 $1 = registry version (json "version" 値として返す)
448
+ # 注: bash 3.2 互換のため process substitution を使わず tmp file 経由。
449
+ # trap は caller 側で管理 (server pid を 変数で受け取る)。
450
+
451
+ # _shd_ensure_registry_server_script — サーバースクリプトを $TMP_BASE/registry-server.py に配置
452
+ _shd_ensure_registry_server_script() {
453
+ local script_path="${TMP_BASE}/registry-server.py"
454
+ if [ ! -f "$script_path" ]; then
455
+ cat > "$script_path" <<'PYEOF'
456
+ import http.server, socketserver, json, sys
457
+ ver = sys.argv[1] if len(sys.argv) > 1 else "1.0.0"
458
+ class H(http.server.BaseHTTPRequestHandler):
459
+ def do_GET(self):
460
+ self.send_response(200)
461
+ self.send_header("Content-Type","application/json")
462
+ self.end_headers()
463
+ self.wfile.write(json.dumps({"version": ver}).encode())
464
+ def log_message(self, *a): pass
465
+ with socketserver.TCPServer(("127.0.0.1", 0), H) as s:
466
+ port = s.server_address[1]
467
+ import sys as _sys; _sys.stdout.write(str(port)+"\n"); _sys.stdout.flush()
468
+ s.serve_forever()
469
+ PYEOF
470
+ fi
471
+ printf '%s' "$script_path"
472
+ }
473
+
474
+ # _shd_start_registry_server <version> <port_file> — サーバー起動、PID を返す (echo)
475
+ # port_file に port が書き込まれるまで _shd_wait_server_port で待つ。
476
+ _shd_start_registry_server() {
477
+ local ver="$1"
478
+ local port_file="$2"
479
+ local script_path
480
+ script_path=$(_shd_ensure_registry_server_script)
481
+ python3 "$script_path" "$ver" > "$port_file" &
482
+ printf '%s' "$!"
483
+ }
484
+
485
+ # _shd_wait_server_port <port_file> [timeout_iterations] — port 書き込みを最大 iterations×0.1s 待つ
486
+ # timeout_iterations のデフォルトは 30 (= 3 秒)。sleep 0.1 ごとに elapsed を +1 するため
487
+ # 引数は「秒数」ではなく「イテレーション数」として扱う (HIGH flaky 修正 contract)。
488
+ _shd_wait_server_port() {
489
+ local port_file="$1"
490
+ local timeout_iterations="${2:-30}"
491
+ local elapsed=0
492
+ while [ "$elapsed" -lt "$timeout_iterations" ]; do
493
+ if [ -s "$port_file" ]; then
494
+ head -1 "$port_file"
495
+ return 0
496
+ fi
497
+ sleep 0.1
498
+ elapsed=$((elapsed + 1))
499
+ done
500
+ return 1
501
+ }
502
+
503
+ # _shd_layout_npm <root> <npm_version> [markers_line]
504
+ # 既存 _layout_full に加えて harness_npm_version を yml に書く
505
+ _shd_layout_npm() {
506
+ local root="$1"
507
+ local npm_ver="$2"
508
+ local markers_line="${3:-stale_harness_markers: [CommonRules.md, scripts/hc-config.sh, hooks/lib/config-loader.sh, hooks/loop-confirmation-detector.sh]}"
509
+
510
+ mkdir -p \
511
+ "$root/.claude" \
512
+ "$root/.claude/scripts" \
513
+ "$root/.claude/hooks" \
514
+ "$root/.claude/hooks/lib"
515
+
516
+ : > "$root/.claude/CommonRules.md"
517
+ : > "$root/.claude/scripts/hc-config.sh"
518
+ : > "$root/.claude/hooks/lib/config-loader.sh"
519
+ : > "$root/.claude/hooks/loop-confirmation-detector.sh"
520
+
521
+ cat > "$root/.claude/harness-config.yml" <<EOF
522
+ # test fixture (task-84)
523
+ harness_version: "$(_today)"
524
+ harness_npm_version: "${npm_ver}"
525
+ ${markers_line}
526
+ feature_stale_harness_detect_enabled: true
527
+ stale_harness_check_interval_hours: 24
528
+ EOF
529
+ }
530
+
531
+ # === Case 11: stamp 古 + registry 新 → WARN (新版 / npx / update) ===
532
+ case_11_warn_when_stamp_older_than_registry() {
533
+ local root
534
+ root=$(_root_for 11)
535
+ _shd_layout_npm "$root" "0.0.1"
536
+
537
+ # state dir は隔離 (実 repo の .stale-harness-state を汚さない)
538
+ local state_dir="${root}/.claude/.stale-harness-state"
539
+ mkdir -p "$state_dir"
540
+ # last-check なし (throttle スルー)
541
+
542
+ # local registry server を起動
543
+ local port_file="${TMP_BASE}/srv11-port.txt"
544
+ local srv_pid
545
+ srv_pid=$(_shd_start_registry_server "9.9.9" "$port_file")
546
+ local port
547
+ port=$(_shd_wait_server_port "$port_file") || {
548
+ kill "$srv_pid" 2>/dev/null
549
+ printf 'server did not start in time\n' >&2
550
+ return 1
551
+ }
552
+
553
+ local combined
554
+ combined=$(
555
+ CLAUDE_PROJECT_DIR="$root" \
556
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
557
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
558
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:${port}" \
559
+ bash "$HOOK" </dev/null 2>&1
560
+ )
561
+ kill "$srv_pid" 2>/dev/null
562
+
563
+ # WARN が出ていることを確認 (「新版」「npx」「update」の 3 keyword + 内容 assert 4 点)
564
+ local ok=1
565
+ if ! printf '%s' "$combined" | grep -q '新版'; then
566
+ printf 'missing "新版" in output:\n%s\n' "$combined" >&2; ok=0
567
+ fi
568
+ if ! printf '%s' "$combined" | grep -q 'npx'; then
569
+ printf 'missing "npx" in output:\n%s\n' "$combined" >&2; ok=0
570
+ fi
571
+ if ! printf '%s' "$combined" | grep -q 'update'; then
572
+ printf 'missing "update" in output:\n%s\n' "$combined" >&2; ok=0
573
+ fi
574
+ # 内容 assert 4 点 (contract Case 11 WARN 内容 assert)
575
+ # (1) system-reminder タグ
576
+ if ! printf '%s' "$combined" | grep -q 'system-reminder'; then
577
+ printf '[case11 assert1] missing system-reminder tag. output:\n%s\n' "$combined" >&2; ok=0
578
+ fi
579
+ # (2) block しません — 安全注記
580
+ if ! printf '%s' "$combined" | grep -q 'block'; then
581
+ printf '[case11 assert2] missing "block" safety note. output:\n%s\n' "$combined" >&2; ok=0
582
+ fi
583
+ # (3) registry version 9.9.9 が出力に含まれる
584
+ if ! printf '%s' "$combined" | grep -q '9.9.9'; then
585
+ printf '[case11 assert3] missing registry version "9.9.9". output:\n%s\n' "$combined" >&2; ok=0
586
+ fi
587
+ # (4) stamp version 0.0.1 が出力に含まれる
588
+ if ! printf '%s' "$combined" | grep -q '0.0.1'; then
589
+ printf '[case11 assert4] missing stamp version "0.0.1". output:\n%s\n' "$combined" >&2; ok=0
590
+ fi
591
+ [ "$ok" -eq 1 ]
592
+ }
593
+
594
+ # === Case 12: stamp == registry → silent ===
595
+ case_12_silent_when_same_version() {
596
+ local root
597
+ root=$(_root_for 12)
598
+ _shd_layout_npm "$root" "1.2.3"
599
+
600
+ local state_dir="${root}/.claude/.stale-harness-state"
601
+ mkdir -p "$state_dir"
602
+
603
+ local port_file="${TMP_BASE}/srv12-port.txt"
604
+ local srv_pid
605
+ srv_pid=$(_shd_start_registry_server "1.2.3" "$port_file")
606
+ local port
607
+ port=$(_shd_wait_server_port "$port_file") || {
608
+ kill "$srv_pid" 2>/dev/null
609
+ printf 'server did not start in time\n' >&2
610
+ return 1
611
+ }
612
+
613
+ local combined
614
+ combined=$(
615
+ CLAUDE_PROJECT_DIR="$root" \
616
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
617
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
618
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:${port}" \
619
+ bash "$HOOK" </dev/null 2>&1
620
+ )
621
+ kill "$srv_pid" 2>/dev/null
622
+
623
+ if [ -n "$combined" ]; then
624
+ printf 'expected silent (same version), got:\n%s\n' "$combined" >&2
625
+ return 1
626
+ fi
627
+ return 0
628
+ }
629
+
630
+ # === Case 13: registry 取得失敗 → fail-open silent + exit 0 ===
631
+ case_13_fail_open_on_registry_error() {
632
+ local root
633
+ root=$(_root_for 13)
634
+ _shd_layout_npm "$root" "0.0.1"
635
+
636
+ local state_dir="${root}/.claude/.stale-harness-state"
637
+ mkdir -p "$state_dir"
638
+
639
+ local combined rc
640
+ combined=$(
641
+ CLAUDE_PROJECT_DIR="$root" \
642
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
643
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
644
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:1" \
645
+ bash "$HOOK" </dev/null 2>&1
646
+ )
647
+ rc=$?
648
+
649
+ if [ "$rc" -ne 0 ]; then
650
+ printf 'expected exit 0 (fail-open), got %d\n' "$rc" >&2
651
+ return 1
652
+ fi
653
+ # WARN メッセージなし (fail-open silent)
654
+ if printf '%s' "$combined" | grep -q 'stale-harness-detect.*新版'; then
655
+ printf 'unexpected registry WARN on failure:\n%s\n' "$combined" >&2
656
+ return 1
657
+ fi
658
+ return 0
659
+ }
660
+
661
+ # === Case 14: throttle — 2 回目は registry 取得せず skip ===
662
+ # 1 回目: last-check ファイルを作成 (registry WARN なし = silent or marker WARN)
663
+ # 2 回目: サーバーを落としても silent exit 0 (throttle が効いているため)
664
+ case_14_throttle_skips_registry_on_2nd_run() {
665
+ local root
666
+ root=$(_root_for 14)
667
+ _shd_layout_npm "$root" "0.0.1"
668
+
669
+ local state_dir="${root}/.claude/.stale-harness-state"
670
+ mkdir -p "$state_dir"
671
+
672
+ # 1 回目: サーバーあり → last-check が作られる
673
+ local port_file="${TMP_BASE}/srv14-port.txt"
674
+ local srv_pid
675
+ srv_pid=$(_shd_start_registry_server "9.9.9" "$port_file")
676
+ local port
677
+ port=$(_shd_wait_server_port "$port_file") || {
678
+ kill "$srv_pid" 2>/dev/null
679
+ printf 'server did not start in time\n' >&2
680
+ return 1
681
+ }
682
+
683
+ CLAUDE_PROJECT_DIR="$root" \
684
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
685
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
686
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:${port}" \
687
+ bash "$HOOK" </dev/null >/dev/null 2>&1
688
+ kill "$srv_pid" 2>/dev/null
689
+
690
+ # last-check が作られたことを確認
691
+ if [ ! -f "${state_dir}/last-check" ]; then
692
+ printf 'expected last-check marker after 1st run, not found in %s\n' "$state_dir" >&2
693
+ return 1
694
+ fi
695
+
696
+ # 2 回目: サーバーなし (port 1 = 接続拒否) でも throttle により silent
697
+ local combined2 rc2
698
+ combined2=$(
699
+ CLAUDE_PROJECT_DIR="$root" \
700
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
701
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
702
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:1" \
703
+ bash "$HOOK" </dev/null 2>&1
704
+ )
705
+ rc2=$?
706
+
707
+ if [ "$rc2" -ne 0 ]; then
708
+ printf 'expected exit 0 on throttled 2nd run, got %d\n' "$rc2" >&2
709
+ return 1
710
+ fi
711
+ # 「新版」WARN は出ない (throttle で registry 未取得)
712
+ if printf '%s' "$combined2" | grep -q '新版'; then
713
+ printf 'unexpected registry WARN on throttled 2nd run:\n%s\n' "$combined2" >&2
714
+ return 1
715
+ fi
716
+ return 0
717
+ }
718
+
719
+ # === Case 15: feature OFF → no-op exit 0 ===
720
+ case_15_feature_off_noop_registry() {
721
+ local root
722
+ root=$(_root_for 15)
723
+ _shd_layout_npm "$root" "0.0.1"
724
+
725
+ local state_dir="${root}/.claude/.stale-harness-state"
726
+ mkdir -p "$state_dir"
727
+
728
+ local combined rc
729
+ combined=$(
730
+ HC_FEATURE_STALE_HARNESS_DETECT_ENABLED=false \
731
+ CLAUDE_PROJECT_DIR="$root" \
732
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
733
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
734
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:1" \
735
+ bash "$HOOK" </dev/null 2>&1
736
+ )
737
+ rc=$?
738
+
739
+ if [ "$rc" -ne 0 ]; then
740
+ printf 'expected exit 0 (feature OFF), got %d\n' "$rc" >&2
741
+ return 1
742
+ fi
743
+ if [ -n "$combined" ]; then
744
+ printf 'expected silent (feature OFF), got:\n%s\n' "$combined" >&2
745
+ return 1
746
+ fi
747
+ return 0
748
+ }
749
+
750
+ # =====================================================================
751
+ # task-84 追加 gap カバレッジ (Cases 16-19)
752
+ # =====================================================================
753
+
754
+ # === Case 16: Gap-A throttle 境界 — last-check が interval ちょうど前 → registry 取得走る ===
755
+ # last-check の mtime を (interval_hours * 3600) 秒前に設定する。
756
+ # age_sec >= interval_sec となり throttle を抜けて registry 取得が走ることを確認。
757
+ case_16_throttle_boundary_fetches_registry() {
758
+ local root
759
+ root=$(_root_for 16)
760
+ _shd_layout_npm "$root" "0.0.1"
761
+
762
+ local state_dir="${root}/.claude/.stale-harness-state"
763
+ mkdir -p "$state_dir"
764
+
765
+ # local registry server を起動 (新版 9.9.9)
766
+ local port_file="${TMP_BASE}/srv16-port.txt"
767
+ local srv_pid
768
+ srv_pid=$(_shd_start_registry_server "9.9.9" "$port_file")
769
+ local port
770
+ port=$(_shd_wait_server_port "$port_file") || {
771
+ kill "$srv_pid" 2>/dev/null
772
+ printf 'server did not start in time\n' >&2
773
+ return 1
774
+ }
775
+
776
+ # last-check ファイルを interval ちょうど前に設定 (age_sec == interval_sec → fetch 走る)
777
+ # stale_harness_check_interval_hours: 24 → 86400 秒前
778
+ # touch -t でタイムスタンプを 86401 秒前に設定 (age_sec > interval_sec 確実)
779
+ local last_check="${state_dir}/last-check"
780
+ : > "$last_check"
781
+ # BSD/GNU 両対応: 86401 秒前の時刻を YYYYMMDDHHMM.SS 形式で計算
782
+ local ts_old
783
+ if date -v -86401S +"%Y%m%d%H%M.%S" >/dev/null 2>&1; then
784
+ ts_old=$(date -v -86401S +"%Y%m%d%H%M.%S")
785
+ else
786
+ ts_old=$(date -d "-86401 seconds" +"%Y%m%d%H%M.%S" 2>/dev/null || date -u +"%Y%m%d%H%M.%S")
787
+ fi
788
+ touch -t "$ts_old" "$last_check" 2>/dev/null || true
789
+
790
+ local combined
791
+ combined=$(
792
+ CLAUDE_PROJECT_DIR="$root" \
793
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
794
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
795
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:${port}" \
796
+ bash "$HOOK" </dev/null 2>&1
797
+ )
798
+ kill "$srv_pid" 2>/dev/null
799
+
800
+ # registry 取得が走り WARN が出るはず (throttle を抜けた証拠)
801
+ if ! printf '%s' "$combined" | grep -q '新版'; then
802
+ printf '[Gap-A] throttle boundary: expected WARN with "新版" (registry fetch ran), got:\n%s\n' "$combined" >&2
803
+ return 1
804
+ fi
805
+ return 0
806
+ }
807
+
808
+ # === Case 17: Gap-B fallback 経路 — cli_path 不在で fallback semver 比較 → 同一 WARN 結果 ===
809
+ # bin/cli.js が存在しない (または node なし) 環境でも fallback 経路で WARN が出ることを確認。
810
+ # bin/cli.js を存在しない path にリダイレクトし、fallback _shd_semver_fallback が使われることを検証。
811
+ case_17_fallback_semver_same_warn() {
812
+ local root
813
+ root=$(_root_for 17)
814
+ _shd_layout_npm "$root" "0.0.1"
815
+ # bin/cli.js を作らない (存在しない → cli.js 経路スキップ → fallback 使用)
816
+
817
+ local state_dir="${root}/.claude/.stale-harness-state"
818
+ mkdir -p "$state_dir"
819
+
820
+ local port_file="${TMP_BASE}/srv17-port.txt"
821
+ local srv_pid
822
+ srv_pid=$(_shd_start_registry_server "9.9.9" "$port_file")
823
+ local port
824
+ port=$(_shd_wait_server_port "$port_file") || {
825
+ kill "$srv_pid" 2>/dev/null
826
+ printf 'server did not start in time\n' >&2
827
+ return 1
828
+ }
829
+
830
+ local combined
831
+ combined=$(
832
+ CLAUDE_PROJECT_DIR="$root" \
833
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
834
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
835
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:${port}" \
836
+ bash "$HOOK" </dev/null 2>&1
837
+ )
838
+ kill "$srv_pid" 2>/dev/null
839
+
840
+ # fallback でも同一の WARN が出るはず
841
+ local ok=1
842
+ if ! printf '%s' "$combined" | grep -q '新版'; then
843
+ printf '[Gap-B] fallback path: missing "新版". output:\n%s\n' "$combined" >&2; ok=0
844
+ fi
845
+ if ! printf '%s' "$combined" | grep -q 'npx'; then
846
+ printf '[Gap-B] fallback path: missing "npx". output:\n%s\n' "$combined" >&2; ok=0
847
+ fi
848
+ if ! printf '%s' "$combined" | grep -q '9.9.9'; then
849
+ printf '[Gap-B] fallback path: missing registry version "9.9.9". output:\n%s\n' "$combined" >&2; ok=0
850
+ fi
851
+ [ "$ok" -eq 1 ]
852
+ }
853
+
854
+ # === Case 18: Gap-C harness_npm_version 行不在 → fail-open silent (version 比較 skip) ===
855
+ # yml に harness_npm_version キー自体が存在しない場合、registry 比較を skip して silent になる。
856
+ case_18_no_npm_version_key_silent() {
857
+ local root
858
+ root=$(_root_for 18)
859
+ # _layout_full を使用 (harness_npm_version 行なし)
860
+ _layout_full "$root" "$(_today)"
861
+
862
+ local state_dir="${root}/.claude/.stale-harness-state"
863
+ mkdir -p "$state_dir"
864
+
865
+ # server を起動しても registry WARN が出ないことを確認 (harness_npm_version 不在 → skip)
866
+ local port_file="${TMP_BASE}/srv18-port.txt"
867
+ local srv_pid
868
+ srv_pid=$(_shd_start_registry_server "9.9.9" "$port_file")
869
+ local port
870
+ port=$(_shd_wait_server_port "$port_file") || {
871
+ kill "$srv_pid" 2>/dev/null
872
+ printf 'server did not start in time\n' >&2
873
+ return 1
874
+ }
875
+
876
+ local combined rc
877
+ combined=$(
878
+ CLAUDE_PROJECT_DIR="$root" \
879
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
880
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
881
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:${port}" \
882
+ bash "$HOOK" </dev/null 2>&1
883
+ )
884
+ rc=$?
885
+ kill "$srv_pid" 2>/dev/null
886
+
887
+ if [ "$rc" -ne 0 ]; then
888
+ printf '[Gap-C] expected exit 0 (fail-open, no npm version key), got %d\n' "$rc" >&2
889
+ return 1
890
+ fi
891
+ # registry WARN (新版 keyword) は出てはいけない
892
+ if printf '%s' "$combined" | grep -q '新版'; then
893
+ printf '[Gap-C] unexpected registry WARN when harness_npm_version absent:\n%s\n' "$combined" >&2
894
+ return 1
895
+ fi
896
+ return 0
897
+ }
898
+
899
+ # === Case 19: Gap-D 不正 semver stamp (not-a-version) → fail-open silent ===
900
+ # harness_npm_version に不正な semver 文字列が設定されている場合、
901
+ # semver regex 不一致で exit 0 (fail-open) silent になることを確認。
902
+ case_19_invalid_semver_stamp_silent() {
903
+ local root
904
+ root=$(_root_for 19)
905
+ _shd_layout_npm "$root" "not-a-version"
906
+
907
+ local state_dir="${root}/.claude/.stale-harness-state"
908
+ mkdir -p "$state_dir"
909
+
910
+ local port_file="${TMP_BASE}/srv19-port.txt"
911
+ local srv_pid
912
+ srv_pid=$(_shd_start_registry_server "9.9.9" "$port_file")
913
+ local port
914
+ port=$(_shd_wait_server_port "$port_file") || {
915
+ kill "$srv_pid" 2>/dev/null
916
+ printf 'server did not start in time\n' >&2
917
+ return 1
918
+ }
919
+
920
+ local combined rc
921
+ combined=$(
922
+ CLAUDE_PROJECT_DIR="$root" \
923
+ HC_CONFIG_PATH="$root/.claude/harness-config.yml" \
924
+ HC_STALE_HARNESS_DETECT_STATE_DIR="$state_dir" \
925
+ HIRAI_METHOD_REGISTRY_BASE="http://127.0.0.1:${port}" \
926
+ bash "$HOOK" </dev/null 2>&1
927
+ )
928
+ rc=$?
929
+ kill "$srv_pid" 2>/dev/null
930
+
931
+ if [ "$rc" -ne 0 ]; then
932
+ printf '[Gap-D] expected exit 0 (fail-open, invalid semver stamp), got %d\n' "$rc" >&2
933
+ return 1
934
+ fi
935
+ # 不正 semver → registry 比較 skip → registry WARN なし
936
+ if printf '%s' "$combined" | grep -q '新版'; then
937
+ printf '[Gap-D] unexpected registry WARN for invalid semver stamp:\n%s\n' "$combined" >&2
938
+ return 1
939
+ fi
940
+ return 0
941
+ }
942
+
943
+ printf '===== task-56 stale-harness-detect smoke =====\n'
944
+ run_case 1 'silent when healthy (markers + valid version)' case_1_silent_when_healthy
945
+ run_case 2 'WARN on missing marker (CommonRules.md absent)' case_2_warn_on_missing_marker
946
+ run_case 3 'sanitize bad version stamp -> UNKNOWN + WARN' case_3_sanitize_bad_version_stamp
947
+ run_case 4 'WARN on future-date stamp' case_4_warn_on_future_date
948
+ run_case 5 'dedup within same session (2nd run silent)' case_5_dedup_within_session
949
+ run_case 6 'feature OFF -> no-op silent' case_6_feature_off_noop
950
+ run_case 7 'no config -> silent fail-open' case_7_silent_when_no_config
951
+ run_case 8 'empty marker list -> silent fail-open' case_8_silent_when_no_markers
952
+ run_case 9 'missing version key -> WARN UNKNOWN' case_9_warn_on_missing_version_key
953
+ run_case 10 'WARN includes proactive sync guidance (task-59 G2)' case_10_warn_includes_proactive_sync_guidance
954
+ printf '\n--- task-84: registry 比較シナリオ ---\n'
955
+ run_case 11 'stamp older -> WARN (新版/npx/update)' case_11_warn_when_stamp_older_than_registry
956
+ run_case 12 'stamp == registry -> silent' case_12_silent_when_same_version
957
+ run_case 13 'registry fetch fail -> fail-open silent + exit 0' case_13_fail_open_on_registry_error
958
+ run_case 14 'throttle: 2nd run skips registry fetch' case_14_throttle_skips_registry_on_2nd_run
959
+ run_case 15 'feature OFF -> no-op exit 0 (registry path)' case_15_feature_off_noop_registry
960
+ printf '\n--- task-84: gap カバレッジ (Cases 16-19) ---\n'
961
+ run_case 16 'Gap-A throttle boundary: age>=interval -> registry fetch runs' case_16_throttle_boundary_fetches_registry
962
+ run_case 17 'Gap-B fallback semver: cli_path absent -> same WARN result' case_17_fallback_semver_same_warn
963
+ run_case 18 'Gap-C harness_npm_version absent -> fail-open silent' case_18_no_npm_version_key_silent
964
+ run_case 19 'Gap-D invalid semver stamp (not-a-version) -> fail-open silent' case_19_invalid_semver_stamp_silent
965
+
966
+ printf '\n===== Result =====\n'
967
+ TOTAL=$((PASS + FAIL))
968
+ printf 'PASS: %d / %d\n' "$PASS" "$TOTAL"
969
+ printf 'FAIL: %d / %d\n' "$FAIL" "$TOTAL"
970
+ if [ "$FAIL" -gt 0 ]; then
971
+ printf 'Failed cases: %s\n' "${FAILED_CASES[*]}"
972
+ exit 1
973
+ fi
974
+ exit 0