@walwal-harness/cli 6.1.5 → 7.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 (328) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/HR-Resource/academic-academic-anthropologist/SKILL.md +142 -0
  3. package/HR-Resource/academic-academic-geographer/SKILL.md +144 -0
  4. package/HR-Resource/academic-academic-historian/SKILL.md +140 -0
  5. package/HR-Resource/academic-academic-narratologist/SKILL.md +135 -0
  6. package/HR-Resource/academic-academic-psychologist/SKILL.md +135 -0
  7. package/HR-Resource/brick-office/SKILL.md +20 -0
  8. package/HR-Resource/cdo/SKILL.md +33 -0
  9. package/HR-Resource/ceo/SKILL.md +36 -0
  10. package/HR-Resource/coo/SKILL.md +36 -0
  11. package/HR-Resource/cqo/SKILL.md +33 -0
  12. package/HR-Resource/cto/SKILL.md +36 -0
  13. package/HR-Resource/design-design-brand-guardian/SKILL.md +339 -0
  14. package/HR-Resource/design-design-image-prompt-engineer/SKILL.md +253 -0
  15. package/HR-Resource/design-design-inclusive-visuals-specialist/SKILL.md +88 -0
  16. package/HR-Resource/design-design-ui-designer/SKILL.md +400 -0
  17. package/HR-Resource/design-design-ux-architect/SKILL.md +486 -0
  18. package/HR-Resource/design-design-ux-researcher/SKILL.md +346 -0
  19. package/HR-Resource/design-design-visual-storyteller/SKILL.md +166 -0
  20. package/HR-Resource/design-design-whimsy-injector/SKILL.md +455 -0
  21. package/HR-Resource/engineering-engineering-ai-data-remediation-engineer/SKILL.md +227 -0
  22. package/HR-Resource/engineering-engineering-ai-engineer/SKILL.md +163 -0
  23. package/HR-Resource/engineering-engineering-autonomous-optimization-architect/SKILL.md +124 -0
  24. package/HR-Resource/engineering-engineering-backend-architect/SKILL.md +252 -0
  25. package/HR-Resource/engineering-engineering-cms-developer/SKILL.md +553 -0
  26. package/HR-Resource/engineering-engineering-code-reviewer/SKILL.md +93 -0
  27. package/HR-Resource/engineering-engineering-codebase-onboarding-engineer/SKILL.md +190 -0
  28. package/HR-Resource/engineering-engineering-data-engineer/SKILL.md +323 -0
  29. package/HR-Resource/engineering-engineering-database-optimizer/SKILL.md +193 -0
  30. package/HR-Resource/engineering-engineering-devops-automator/SKILL.md +393 -0
  31. package/HR-Resource/engineering-engineering-email-intelligence-engineer/SKILL.md +370 -0
  32. package/HR-Resource/engineering-engineering-embedded-firmware-engineer/SKILL.md +190 -0
  33. package/HR-Resource/engineering-engineering-feishu-integration-developer/SKILL.md +615 -0
  34. package/HR-Resource/engineering-engineering-filament-optimization-specialist/SKILL.md +300 -0
  35. package/HR-Resource/engineering-engineering-frontend-developer/SKILL.md +242 -0
  36. package/HR-Resource/engineering-engineering-git-workflow-master/SKILL.md +101 -0
  37. package/HR-Resource/engineering-engineering-incident-response-commander/SKILL.md +461 -0
  38. package/HR-Resource/engineering-engineering-minimal-change-engineer/SKILL.md +224 -0
  39. package/HR-Resource/engineering-engineering-mobile-app-builder/SKILL.md +510 -0
  40. package/HR-Resource/engineering-engineering-rapid-prototyper/SKILL.md +479 -0
  41. package/HR-Resource/engineering-engineering-security-engineer/SKILL.md +321 -0
  42. package/HR-Resource/engineering-engineering-senior-developer/SKILL.md +193 -0
  43. package/HR-Resource/engineering-engineering-software-architect/SKILL.md +98 -0
  44. package/HR-Resource/engineering-engineering-solidity-smart-contract-engineer/SKILL.md +539 -0
  45. package/HR-Resource/engineering-engineering-sre/SKILL.md +107 -0
  46. package/HR-Resource/engineering-engineering-technical-writer/SKILL.md +410 -0
  47. package/HR-Resource/engineering-engineering-threat-detection-engineer/SKILL.md +551 -0
  48. package/HR-Resource/engineering-engineering-voice-ai-integration-engineer/SKILL.md +578 -0
  49. package/HR-Resource/engineering-engineering-wechat-mini-program-developer/SKILL.md +367 -0
  50. package/HR-Resource/finance-finance-bookkeeper-controller/SKILL.md +277 -0
  51. package/HR-Resource/finance-finance-financial-analyst/SKILL.md +251 -0
  52. package/HR-Resource/finance-finance-fpa-analyst/SKILL.md +280 -0
  53. package/HR-Resource/finance-finance-investment-researcher/SKILL.md +289 -0
  54. package/HR-Resource/finance-finance-tax-strategist/SKILL.md +256 -0
  55. package/HR-Resource/game-development-blender-blender-addon-engineer/SKILL.md +251 -0
  56. package/HR-Resource/game-development-game-audio-engineer/SKILL.md +281 -0
  57. package/HR-Resource/game-development-game-designer/SKILL.md +184 -0
  58. package/HR-Resource/game-development-godot-godot-gameplay-scripter/SKILL.md +351 -0
  59. package/HR-Resource/game-development-godot-godot-multiplayer-engineer/SKILL.md +314 -0
  60. package/HR-Resource/game-development-godot-godot-shader-developer/SKILL.md +283 -0
  61. package/HR-Resource/game-development-level-designer/SKILL.md +225 -0
  62. package/HR-Resource/game-development-narrative-designer/SKILL.md +260 -0
  63. package/HR-Resource/game-development-roblox-studio-roblox-avatar-creator/SKILL.md +314 -0
  64. package/HR-Resource/game-development-roblox-studio-roblox-experience-designer/SKILL.md +322 -0
  65. package/HR-Resource/game-development-roblox-studio-roblox-systems-scripter/SKILL.md +342 -0
  66. package/HR-Resource/game-development-technical-artist/SKILL.md +246 -0
  67. package/HR-Resource/game-development-unity-unity-architect/SKILL.md +288 -0
  68. package/HR-Resource/game-development-unity-unity-editor-tool-developer/SKILL.md +327 -0
  69. package/HR-Resource/game-development-unity-unity-multiplayer-engineer/SKILL.md +338 -0
  70. package/HR-Resource/game-development-unity-unity-shader-graph-artist/SKILL.md +286 -0
  71. package/HR-Resource/game-development-unreal-engine-unreal-multiplayer-architect/SKILL.md +330 -0
  72. package/HR-Resource/game-development-unreal-engine-unreal-systems-engineer/SKILL.md +327 -0
  73. package/HR-Resource/game-development-unreal-engine-unreal-technical-artist/SKILL.md +273 -0
  74. package/HR-Resource/game-development-unreal-engine-unreal-world-builder/SKILL.md +290 -0
  75. package/HR-Resource/hiring/SKILL.md +28 -0
  76. package/HR-Resource/index.json +747 -0
  77. package/HR-Resource/integrations-mcp-memory-backend-architect-with-memory/SKILL.md +264 -0
  78. package/HR-Resource/marketing-marketing-agentic-search-optimizer/SKILL.md +328 -0
  79. package/HR-Resource/marketing-marketing-ai-citation-strategist/SKILL.md +187 -0
  80. package/HR-Resource/marketing-marketing-app-store-optimizer/SKILL.md +338 -0
  81. package/HR-Resource/marketing-marketing-baidu-seo-specialist/SKILL.md +243 -0
  82. package/HR-Resource/marketing-marketing-bilibili-content-strategist/SKILL.md +216 -0
  83. package/HR-Resource/marketing-marketing-book-co-author/SKILL.md +127 -0
  84. package/HR-Resource/marketing-marketing-carousel-growth-engine/SKILL.md +216 -0
  85. package/HR-Resource/marketing-marketing-china-ecommerce-operator/SKILL.md +300 -0
  86. package/HR-Resource/marketing-marketing-china-market-localization-strategist/SKILL.md +300 -0
  87. package/HR-Resource/marketing-marketing-content-creator/SKILL.md +71 -0
  88. package/HR-Resource/marketing-marketing-cross-border-ecommerce/SKILL.md +276 -0
  89. package/HR-Resource/marketing-marketing-douyin-strategist/SKILL.md +166 -0
  90. package/HR-Resource/marketing-marketing-growth-hacker/SKILL.md +71 -0
  91. package/HR-Resource/marketing-marketing-instagram-curator/SKILL.md +130 -0
  92. package/HR-Resource/marketing-marketing-kuaishou-strategist/SKILL.md +240 -0
  93. package/HR-Resource/marketing-marketing-linkedin-content-creator/SKILL.md +230 -0
  94. package/HR-Resource/marketing-marketing-livestream-commerce-coach/SKILL.md +322 -0
  95. package/HR-Resource/marketing-marketing-podcast-strategist/SKILL.md +294 -0
  96. package/HR-Resource/marketing-marketing-private-domain-operator/SKILL.md +325 -0
  97. package/HR-Resource/marketing-marketing-reddit-community-builder/SKILL.md +140 -0
  98. package/HR-Resource/marketing-marketing-seo-specialist/SKILL.md +338 -0
  99. package/HR-Resource/marketing-marketing-short-video-editing-coach/SKILL.md +429 -0
  100. package/HR-Resource/marketing-marketing-social-media-strategist/SKILL.md +142 -0
  101. package/HR-Resource/marketing-marketing-tiktok-strategist/SKILL.md +142 -0
  102. package/HR-Resource/marketing-marketing-twitter-engager/SKILL.md +143 -0
  103. package/HR-Resource/marketing-marketing-video-optimization-specialist/SKILL.md +136 -0
  104. package/HR-Resource/marketing-marketing-wechat-official-account/SKILL.md +162 -0
  105. package/HR-Resource/marketing-marketing-weibo-strategist/SKILL.md +257 -0
  106. package/HR-Resource/marketing-marketing-xiaohongshu-specialist/SKILL.md +155 -0
  107. package/HR-Resource/marketing-marketing-zhihu-strategist/SKILL.md +179 -0
  108. package/HR-Resource/ops/SKILL.md +46 -0
  109. package/HR-Resource/paid-media-paid-media-auditor/SKILL.md +88 -0
  110. package/HR-Resource/paid-media-paid-media-creative-strategist/SKILL.md +88 -0
  111. package/HR-Resource/paid-media-paid-media-paid-social-strategist/SKILL.md +88 -0
  112. package/HR-Resource/paid-media-paid-media-ppc-strategist/SKILL.md +88 -0
  113. package/HR-Resource/paid-media-paid-media-programmatic-buyer/SKILL.md +88 -0
  114. package/HR-Resource/paid-media-paid-media-search-query-analyst/SKILL.md +88 -0
  115. package/HR-Resource/paid-media-paid-media-tracking-specialist/SKILL.md +88 -0
  116. package/HR-Resource/product-product-behavioral-nudge-engine/SKILL.md +97 -0
  117. package/HR-Resource/product-product-feedback-synthesizer/SKILL.md +136 -0
  118. package/HR-Resource/product-product-manager/SKILL.md +486 -0
  119. package/HR-Resource/product-product-sprint-prioritizer/SKILL.md +171 -0
  120. package/HR-Resource/product-product-trend-researcher/SKILL.md +176 -0
  121. package/HR-Resource/project-management-project-management-experiment-tracker/SKILL.md +215 -0
  122. package/HR-Resource/project-management-project-management-jira-workflow-steward/SKILL.md +247 -0
  123. package/HR-Resource/project-management-project-management-project-shepherd/SKILL.md +211 -0
  124. package/HR-Resource/project-management-project-management-studio-operations/SKILL.md +217 -0
  125. package/HR-Resource/project-management-project-management-studio-producer/SKILL.md +220 -0
  126. package/HR-Resource/project-management-project-manager-senior/SKILL.md +152 -0
  127. package/HR-Resource/resource-manager/SKILL.md +23 -0
  128. package/HR-Resource/sales-sales-account-strategist/SKILL.md +244 -0
  129. package/HR-Resource/sales-sales-coach/SKILL.md +288 -0
  130. package/HR-Resource/sales-sales-deal-strategist/SKILL.md +197 -0
  131. package/HR-Resource/sales-sales-discovery-coach/SKILL.md +242 -0
  132. package/HR-Resource/sales-sales-engineer/SKILL.md +199 -0
  133. package/HR-Resource/sales-sales-outbound-strategist/SKILL.md +218 -0
  134. package/HR-Resource/sales-sales-pipeline-analyst/SKILL.md +284 -0
  135. package/HR-Resource/sales-sales-proposal-strategist/SKILL.md +234 -0
  136. package/HR-Resource/spatial-computing-macos-spatial-metal-engineer/SKILL.md +354 -0
  137. package/HR-Resource/spatial-computing-terminal-integration-specialist/SKILL.md +87 -0
  138. package/HR-Resource/spatial-computing-visionos-spatial-engineer/SKILL.md +71 -0
  139. package/HR-Resource/spatial-computing-xr-cockpit-interaction-specialist/SKILL.md +49 -0
  140. package/HR-Resource/spatial-computing-xr-immersive-developer/SKILL.md +49 -0
  141. package/HR-Resource/spatial-computing-xr-interface-architect/SKILL.md +49 -0
  142. package/HR-Resource/specialized-accounts-payable-agent/SKILL.md +202 -0
  143. package/HR-Resource/specialized-agentic-identity-trust/SKILL.md +404 -0
  144. package/HR-Resource/specialized-agents-orchestrator/SKILL.md +384 -0
  145. package/HR-Resource/specialized-automation-governance-architect/SKILL.md +233 -0
  146. package/HR-Resource/specialized-blockchain-security-auditor/SKILL.md +480 -0
  147. package/HR-Resource/specialized-compliance-auditor/SKILL.md +175 -0
  148. package/HR-Resource/specialized-corporate-training-designer/SKILL.md +209 -0
  149. package/HR-Resource/specialized-customer-service/SKILL.md +415 -0
  150. package/HR-Resource/specialized-data-consolidation-agent/SKILL.md +77 -0
  151. package/HR-Resource/specialized-government-digital-presales-consultant/SKILL.md +380 -0
  152. package/HR-Resource/specialized-healthcare-customer-service/SKILL.md +406 -0
  153. package/HR-Resource/specialized-healthcare-marketing-compliance/SKILL.md +412 -0
  154. package/HR-Resource/specialized-hospitality-guest-services/SKILL.md +620 -0
  155. package/HR-Resource/specialized-hr-onboarding/SKILL.md +468 -0
  156. package/HR-Resource/specialized-identity-graph-operator/SKILL.md +277 -0
  157. package/HR-Resource/specialized-language-translator/SKILL.md +281 -0
  158. package/HR-Resource/specialized-legal-billing-time-tracking/SKILL.md +586 -0
  159. package/HR-Resource/specialized-legal-client-intake/SKILL.md +509 -0
  160. package/HR-Resource/specialized-legal-document-review/SKILL.md +471 -0
  161. package/HR-Resource/specialized-loan-officer-assistant/SKILL.md +572 -0
  162. package/HR-Resource/specialized-lsp-index-engineer/SKILL.md +331 -0
  163. package/HR-Resource/specialized-real-estate-buyer-seller/SKILL.md +613 -0
  164. package/HR-Resource/specialized-recruitment-specialist/SKILL.md +526 -0
  165. package/HR-Resource/specialized-report-distribution-agent/SKILL.md +82 -0
  166. package/HR-Resource/specialized-retail-customer-returns/SKILL.md +583 -0
  167. package/HR-Resource/specialized-sales-data-extraction-agent/SKILL.md +84 -0
  168. package/HR-Resource/specialized-sales-outreach/SKILL.md +442 -0
  169. package/HR-Resource/specialized-specialized-chief-of-staff/SKILL.md +296 -0
  170. package/HR-Resource/specialized-specialized-civil-engineer/SKILL.md +373 -0
  171. package/HR-Resource/specialized-specialized-cultural-intelligence-strategist/SKILL.md +105 -0
  172. package/HR-Resource/specialized-specialized-developer-advocate/SKILL.md +334 -0
  173. package/HR-Resource/specialized-specialized-document-generator/SKILL.md +72 -0
  174. package/HR-Resource/specialized-specialized-french-consulting-market/SKILL.md +209 -0
  175. package/HR-Resource/specialized-specialized-korean-business-navigator/SKILL.md +233 -0
  176. package/HR-Resource/specialized-specialized-mcp-builder/SKILL.md +265 -0
  177. package/HR-Resource/specialized-specialized-model-qa/SKILL.md +505 -0
  178. package/HR-Resource/specialized-specialized-salesforce-architect/SKILL.md +197 -0
  179. package/HR-Resource/specialized-specialized-workflow-architect/SKILL.md +614 -0
  180. package/HR-Resource/specialized-study-abroad-advisor/SKILL.md +299 -0
  181. package/HR-Resource/specialized-supply-chain-strategist/SKILL.md +599 -0
  182. package/HR-Resource/specialized-zk-steward/SKILL.md +228 -0
  183. package/HR-Resource/support-support-analytics-reporter/SKILL.md +382 -0
  184. package/HR-Resource/support-support-executive-summary-generator/SKILL.md +229 -0
  185. package/HR-Resource/support-support-finance-tracker/SKILL.md +459 -0
  186. package/HR-Resource/support-support-infrastructure-maintainer/SKILL.md +635 -0
  187. package/HR-Resource/support-support-legal-compliance-checker/SKILL.md +605 -0
  188. package/HR-Resource/support-support-support-responder/SKILL.md +602 -0
  189. package/HR-Resource/testing-testing-accessibility-auditor/SKILL.md +333 -0
  190. package/HR-Resource/testing-testing-api-tester/SKILL.md +323 -0
  191. package/HR-Resource/testing-testing-evidence-collector/SKILL.md +227 -0
  192. package/HR-Resource/testing-testing-performance-benchmarker/SKILL.md +285 -0
  193. package/HR-Resource/testing-testing-reality-checker/SKILL.md +253 -0
  194. package/HR-Resource/testing-testing-test-results-analyzer/SKILL.md +322 -0
  195. package/HR-Resource/testing-testing-tool-evaluator/SKILL.md +411 -0
  196. package/HR-Resource/testing-testing-workflow-optimizer/SKILL.md +467 -0
  197. package/assets/launchd/com.walwal.harness-wake.plist.template +1 -1
  198. package/assets/templates/company-pipeline-manifest.json +71 -0
  199. package/assets/templates/config.json +40 -2
  200. package/bin/init.js +208 -109
  201. package/commands/goal.md +25 -0
  202. package/commands/hot-fix.md +25 -0
  203. package/commands/play-harness.md +22 -0
  204. package/commands/release-harness.md +22 -0
  205. package/commands/stop-harness.md +21 -0
  206. package/conventions/README.md +14 -88
  207. package/conventions/brick-office.md +5 -0
  208. package/conventions/cdo.md +6 -0
  209. package/conventions/ceo.md +9 -0
  210. package/conventions/coo.md +6 -0
  211. package/conventions/cqo.md +6 -23
  212. package/conventions/cto.md +5 -23
  213. package/conventions/hiring.md +7 -0
  214. package/conventions/ops.md +9 -0
  215. package/conventions/resource-manager.md +6 -0
  216. package/conventions/shared.md +29 -40
  217. package/gotchas/README.md +14 -82
  218. package/gotchas/brick-office.md +9 -0
  219. package/gotchas/cdo.md +9 -0
  220. package/gotchas/ceo.md +9 -0
  221. package/gotchas/coo.md +9 -0
  222. package/gotchas/cqo.md +6 -19
  223. package/gotchas/cto.md +6 -19
  224. package/gotchas/hiring.md +9 -0
  225. package/gotchas/ops.md +17 -0
  226. package/gotchas/resource-manager.md +9 -0
  227. package/gotchas/shared.md +13 -0
  228. package/package.json +11 -17
  229. package/scripts/conductor-tick.sh +97 -4
  230. package/scripts/harness-hourly-review.sh +284 -5
  231. package/scripts/harness-parity-audit.sh +101 -0
  232. package/scripts/harness-queue-manager.sh +1 -1
  233. package/scripts/harness-runtime-stop.sh +58 -0
  234. package/scripts/harness-service-ops-monitor.sh +207 -18
  235. package/scripts/harness-stop.sh +18 -0
  236. package/scripts/harness-wake-install.sh +1 -0
  237. package/scripts/harness-wake.sh +100 -8
  238. package/scripts/harness-worker-dispatch.sh +52 -21
  239. package/scripts/harness-worker-evidence-validate.sh +59 -0
  240. package/scripts/import-agency-agents.js +102 -0
  241. package/scripts/lib/harness-agent-resolver.sh +127 -0
  242. package/scripts/play.sh +104 -0
  243. package/scripts/release.sh +89 -0
  244. package/conventions/conductor.md +0 -24
  245. package/conventions/coo-developer.md +0 -24
  246. package/conventions/dispatcher.md +0 -24
  247. package/conventions/documentationer.md +0 -24
  248. package/conventions/evaluator-architecture.md +0 -24
  249. package/conventions/evaluator-code-quality.md +0 -24
  250. package/conventions/evaluator-functional.md +0 -24
  251. package/conventions/evaluator-security.md +0 -24
  252. package/conventions/evaluator-visual.md +0 -24
  253. package/conventions/generator-backend.md +0 -24
  254. package/conventions/generator-designer.md +0 -24
  255. package/conventions/generator-devops.md +0 -24
  256. package/conventions/generator-frontend.md +0 -24
  257. package/conventions/meeting-manager.md +0 -24
  258. package/conventions/planner.md +0 -24
  259. package/conventions/service-ops.md +0 -24
  260. package/gotchas/conductor.md +0 -38
  261. package/gotchas/coo-developer.md +0 -22
  262. package/gotchas/dispatcher.md +0 -38
  263. package/gotchas/documentationer.md +0 -22
  264. package/gotchas/evaluator-architecture.md +0 -22
  265. package/gotchas/evaluator-code-quality.md +0 -22
  266. package/gotchas/evaluator-functional.md +0 -22
  267. package/gotchas/evaluator-security.md +0 -22
  268. package/gotchas/evaluator-visual.md +0 -22
  269. package/gotchas/generator-backend-laravel.md +0 -19
  270. package/gotchas/generator-backend.md +0 -22
  271. package/gotchas/generator-designer.md +0 -22
  272. package/gotchas/generator-devops.md +0 -22
  273. package/gotchas/generator-frontend.md +0 -22
  274. package/gotchas/meeting-manager.md +0 -30
  275. package/gotchas/planner.md +0 -22
  276. package/gotchas/service-ops.md +0 -30
  277. package/skills/_shared/dynamic-registration.md +0 -120
  278. package/skills/brainstorming/SKILL.md +0 -220
  279. package/skills/brainstorming/references/attribution.md +0 -109
  280. package/skills/brainstorming/references/spec-document-reviewer-prompt.md +0 -49
  281. package/skills/brainstorming/references/visual-companion.md +0 -287
  282. package/skills/brainstorming/scripts/frame-template.html +0 -214
  283. package/skills/brainstorming/scripts/helper.js +0 -88
  284. package/skills/brainstorming/scripts/server.cjs +0 -354
  285. package/skills/brainstorming/scripts/start-server.sh +0 -148
  286. package/skills/brainstorming/scripts/stop-server.sh +0 -56
  287. package/skills/conductor/SKILL.md +0 -336
  288. package/skills/coo-developer/SKILL.md +0 -72
  289. package/skills/cqo/SKILL.md +0 -146
  290. package/skills/cto/SKILL.md +0 -141
  291. package/skills/dispatcher/SKILL.md +0 -298
  292. package/skills/dispatcher/persona-ceo.md +0 -169
  293. package/skills/dispatcher/references/convention-flow.md +0 -111
  294. package/skills/dispatcher/references/gotcha-flow.md +0 -79
  295. package/skills/dispatcher/references/initialization.md +0 -53
  296. package/skills/dispatcher/references/pipeline-definitions.md +0 -151
  297. package/skills/documentationer/SKILL.md +0 -92
  298. package/skills/evaluator-architecture/SKILL.md +0 -173
  299. package/skills/evaluator-code-quality/SKILL.md +0 -218
  300. package/skills/evaluator-code-quality/references/scoring-rubric.md +0 -104
  301. package/skills/evaluator-functional/SKILL.md +0 -271
  302. package/skills/evaluator-functional/references/ia-compliance.md +0 -37
  303. package/skills/evaluator-functional/references/playwright-tools.md +0 -43
  304. package/skills/evaluator-functional/references/scoring-rubric.md +0 -52
  305. package/skills/evaluator-security/SKILL.md +0 -172
  306. package/skills/evaluator-visual/SKILL.md +0 -165
  307. package/skills/evaluator-visual/references/responsive-checklist.md +0 -44
  308. package/skills/evaluator-visual/references/scoring-rubric.md +0 -59
  309. package/skills/generator-backend/SKILL.md +0 -153
  310. package/skills/generator-backend/references/nestjs-msa-patterns.md +0 -69
  311. package/skills/generator-backend/references/sprint-contract-be.md +0 -32
  312. package/skills/generator-designer/SKILL.md +0 -219
  313. package/skills/generator-devops/SKILL.md +0 -201
  314. package/skills/generator-frontend/SKILL.md +0 -155
  315. package/skills/generator-frontend/references/_web-react-legacy/ai-forbidden-patterns.md +0 -89
  316. package/skills/generator-frontend/references/_web-react-legacy/component-patterns.md +0 -52
  317. package/skills/generator-frontend/references/_web-react-legacy/design-system-rules.md +0 -139
  318. package/skills/generator-frontend/references/_web-react-legacy/vercel-best-practices.md +0 -54
  319. package/skills/meeting-manager/SKILL.md +0 -419
  320. package/skills/planner/SKILL.md +0 -243
  321. package/skills/planner/hr-onboard.md +0 -134
  322. package/skills/planner/hr-recruit.md +0 -99
  323. package/skills/planner/persona-coo-hr.md +0 -182
  324. package/skills/planner/references/api-contract-schema.md +0 -34
  325. package/skills/planner/references/fe-stack-detection.md +0 -164
  326. package/skills/planner/references/ia-map-guide.md +0 -31
  327. package/skills/planner/references/plan-template.md +0 -51
  328. package/skills/service-ops/SKILL.md +0 -295
@@ -33,6 +33,7 @@ planner_requested_mode=$(jq -r '.planner.requested_mode // "null"' "$PROGRESS")
33
33
  planner_last_brief=$(jq -r '.planner.last_brief // "null"' "$PROGRESS")
34
34
  goal_adherence=$(jq -r '.goals.current_adherence // "null"' "$PROGRESS")
35
35
  meetings_active_count=$(jq -r '(.meetings.active | length) // 0' "$PROGRESS")
36
+ pending_required_execution=$(jq -r 'if (.meetings.decision.required_execution // null) != null then "true" else "false" end' "$PROGRESS")
36
37
  cqo_verdict=$(jq -r '.cqo.sprint_verdict // "pending"' "$PROGRESS")
37
38
  ops_report=$(jq -r '.service_ops.auto_retro.last_report // "null"' "$PROGRESS")
38
39
  cto_hotfixes=$(jq -r '.cto.open_hotfixes // 0' "$PROGRESS")
@@ -120,6 +121,10 @@ ensure_team_queue() {
120
121
 
121
122
  load_meeting_decision() {
122
123
  local decision
124
+ if jq -e '(.meetings.decision.required_execution // null) != null' "$PROGRESS" >/dev/null 2>&1; then
125
+ jq -c '.meetings.decision' "$PROGRESS"
126
+ return 0
127
+ fi
123
128
  decision=$(bash "$SCRIPT_DIR/harness-meeting-doc.sh" "$PROJECT_ROOT" read-decision 2>/dev/null || true)
124
129
  if [ -n "$decision" ]; then
125
130
  echo "$decision"
@@ -135,6 +140,47 @@ dispatch_company_workers() {
135
140
  bash "$SCRIPT_DIR/harness-worker-dispatch.sh" "$PROJECT_ROOT" 2>/dev/null || echo "[]"
136
141
  }
137
142
 
143
+ ensure_strategy_work_package() {
144
+ local required_json="$1"
145
+ local deliverable_path="$2"
146
+ local target_path="$PROJECT_ROOT/$deliverable_path"
147
+ local stamp
148
+ stamp="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
149
+
150
+ [ -n "$deliverable_path" ] && [ "$deliverable_path" != "null" ] || return 0
151
+ mkdir -p "$(dirname "$target_path")"
152
+ if [ ! -f "$target_path" ]; then
153
+ {
154
+ echo "# Strategy Cadence Recovery Work Package"
155
+ echo ""
156
+ echo "- created_at: $stamp"
157
+ echo "- owner: Planner/COO"
158
+ echo "- source_decision: $(jq -r '.source_path // "unknown"' <<<"$required_json")"
159
+ echo "- required_execution_id: $(jq -r '.id // "unknown"' <<<"$required_json")"
160
+ echo "- status: opened"
161
+ echo ""
162
+ echo "## Candidate Idea"
163
+ echo ""
164
+ echo "Planner/COO must define one concrete strategy candidate for this hour. A restatement of the goal is not sufficient."
165
+ echo ""
166
+ echo "## Data Source"
167
+ echo ""
168
+ echo "Name the market data source, lookback window, and any filters used by the candidate."
169
+ echo ""
170
+ echo "## Backtest Command"
171
+ echo ""
172
+ echo '```bash'
173
+ echo "# Fill with the exact command that produces a backtest result artifact."
174
+ echo '```'
175
+ echo ""
176
+ echo "## CQO Acceptance"
177
+ echo ""
178
+ echo "- PASS requires a generated candidate artifact and a backtest/evaluation artifact."
179
+ echo "- If no candidate is generated before the next hourly review, classify the cycle as paperwork_only_failure."
180
+ } > "$target_path"
181
+ fi
182
+ }
183
+
138
184
  effective_mode="$(normalize_company_mode)"
139
185
  ensure_team_queue
140
186
  drift_classification="$(infer_drift_classification)"
@@ -260,7 +306,7 @@ elif [ "$parallel_pending_count" -gt 0 ] && [ "$agent_status" = "completed" ] &&
260
306
  .conductor.rendezvous = null"
261
307
  fi
262
308
 
263
- elif [ "$requested_mode" != "null" ] && [ -n "$requested_mode" ] && [ "$current_agent" != "service-ops" ]; then
309
+ elif [ "$pending_required_execution" != "true" ] && [ "$requested_mode" != "null" ] && [ -n "$requested_mode" ] && [ "$current_agent" != "service-ops" ]; then
264
310
  next="service-ops"
265
311
  action="spawn:service-ops:${requested_mode}"
266
312
 
@@ -292,6 +338,8 @@ elif [ "$current_agent" = "meeting-manager" ] && [ "$agent_status" = "completed"
292
338
  evidence=$(jq -c '.evidence // []' <<<"$meeting_decision")
293
339
  decision_drift=$(jq -r '.drift_classification // "unknown"' <<<"$meeting_decision")
294
340
  source_path=$(jq -r '.source_path // "null"' <<<"$meeting_decision")
341
+ required_execution=$(jq -c '.required_execution // null' <<<"$meeting_decision")
342
+ required_deliverable=$(jq -r '.required_execution.deliverable_path // "null"' <<<"$meeting_decision")
295
343
  # v6.2 — tracks length >= 2 → fork-join, else single. mode 필드 없음.
296
344
  decision_tracks=$(jq -c '.tracks // []' <<<"$meeting_decision")
297
345
  decision_rendezvous=$(jq -c '.rendezvous // null' <<<"$meeting_decision")
@@ -308,10 +356,34 @@ elif [ "$current_agent" = "meeting-manager" ] && [ "$agent_status" = "completed"
308
356
  esac
309
357
  fi
310
358
 
359
+ if [ "$required_execution" = "null" ]; then
360
+ case "$owner:$action_type" in
361
+ planner:continue-current-handoff|planner:execution-plan|cto:continue-current-handoff|cqo:continue-current-handoff|generator-*:continue-current-handoff|evaluator-*:continue-current-handoff)
362
+ next="meeting-manager"
363
+ action="convene:followup-review:execution-contract-missing"
364
+ new_conductor_state="waiting_meeting"
365
+ new_workflow_stage="followup-review"
366
+ meeting_prepare=true
367
+ meeting_filter="
368
+ .meetings.active = [\"meeting-manager\"] |
369
+ .meetings.requested_type = \"followup-review\" |
370
+ .meetings.requested_reason = \"execution-contract-missing\" |
371
+ .meetings.contract_missing = {
372
+ \"owner\": \"$owner\",
373
+ \"action_type\": \"$action_type\",
374
+ \"source_path\": $(escape_json_string "$source_path"),
375
+ \"detected_at\": (now | todate)
376
+ }"
377
+ ;;
378
+ esac
379
+ fi
380
+
311
381
  # v6.2 — Parallel fork: if 2+ tracks, materialize all tracks as running.
312
382
  # `next_agent` keeps the first owner only for backward-compatible handoff display;
313
383
  # the fork state itself must expose every track as active in the same tick.
314
- if [ "$(jq 'length' <<<"$decision_tracks")" -gt 1 ]; then
384
+ if [ "$action" = "convene:followup-review:execution-contract-missing" ]; then
385
+ :
386
+ elif [ "$(jq 'length' <<<"$decision_tracks")" -gt 1 ]; then
315
387
  first_track_owner=$(jq -r '.[0].owner' <<<"$decision_tracks")
316
388
  first_track_action=$(jq -r '.[0].action_type // "triage"' <<<"$decision_tracks")
317
389
  first_track_id=$(jq -r '.[0].id // "track-1"' <<<"$decision_tracks")
@@ -355,6 +427,10 @@ elif [ "$current_agent" = "meeting-manager" ] && [ "$agent_status" = "completed"
355
427
  .conductor.rendezvous = $decision_rendezvous |
356
428
  .conductor.fork_meeting_id = (.meetings.current_id // null)"
357
429
  else
430
+ if [ "$action_type" = "strategy-cadence-recovery" ]; then
431
+ ensure_strategy_work_package "$required_execution" "$required_deliverable"
432
+ owner="planner"
433
+ fi
358
434
  next="$owner"
359
435
  action="dispatch:${owner}:${action_type}"
360
436
  new_workflow_stage="$(meeting_stage_for_owner "$owner")"
@@ -377,6 +453,7 @@ elif [ "$current_agent" = "meeting-manager" ] && [ "$agent_status" = "completed"
377
453
  \"evidence\": $evidence,
378
454
  \"drift_classification\": $(escape_json_string "$decision_drift"),
379
455
  \"source_path\": $(escape_json_string "$source_path"),
456
+ \"required_execution\": $required_execution,
380
457
  \"tracks\": [],
381
458
  \"rendezvous\": null
382
459
  } |
@@ -440,7 +517,17 @@ elif [ "$current_agent" = "coo-developer" ] && [ "$agent_status" = "completed" ]
440
517
  fi
441
518
 
442
519
  elif [ "$current_agent" = "cto" ]; then
443
- if [ "${cto_hotfixes:-0}" -gt 0 ] || [ "${ops_recommendations:-0}" -gt 0 ]; then
520
+ cto_step_b_status=$(jq -r '.cto.step_b_status // ""' "$PROGRESS")
521
+ if [ "$agent_status" = "step-B-code-edited" ] || [[ "$cto_step_b_status" == *deferred* ]]; then
522
+ next="cqo"
523
+ action="spawn:cqo:gateway-typecheck-verify"
524
+ new_workflow_stage="quality-review"
525
+ meeting_filter='
526
+ .cqo.requested_mode = "gateway-typecheck-verify" |
527
+ .meetings.active = ["cqo"] |
528
+ .meetings.requested_type = null |
529
+ .meetings.requested_reason = null'
530
+ elif [ "${cto_hotfixes:-0}" -gt 0 ] || [ "${ops_recommendations:-0}" -gt 0 ]; then
444
531
  next="planner"
445
532
  action="dispatch:planner:execution-plan"
446
533
  new_workflow_stage="coo-replan"
@@ -548,7 +635,13 @@ if [ "$next" = "meeting-manager" ] && [ "$workflow_stage" = "ops-review" ]; then
548
635
  fi
549
636
 
550
637
  worker_dispatches="[]"
551
- if [ "$new_conductor_state" = "running" ] && [ "$next" != "meeting-manager" ] && [ "$next" != "service-ops" ] && [ "$next" != "archive" ]; then
638
+ if [ "$new_conductor_state" = "running" ] &&
639
+ [ "$next" != "meeting-manager" ] &&
640
+ [ "$next" != "service-ops" ] &&
641
+ [ "$next" != "planner" ] &&
642
+ [ "$next" != "cto" ] &&
643
+ [ "$next" != "cqo" ] &&
644
+ [ "$next" != "archive" ]; then
552
645
  worker_dispatches="$(dispatch_company_workers)"
553
646
  if jq -e 'type == "array" and length > 0' >/dev/null 2>&1 <<<"$worker_dispatches"; then
554
647
  dispatch_count="$(jq 'length' <<<"$worker_dispatches")"
@@ -34,6 +34,7 @@ fi
34
34
 
35
35
  ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
36
36
  id="M-$(date -u +%Y%m%dT%H%M%SZ)-hourly"
37
+ stamp="$(date -u +%Y%m%dT%H%M%SZ)"
37
38
  meeting_dir="$PROJECT_ROOT/.harness/actions/meetings/$id"
38
39
  meeting_rel=".harness/actions/meetings/$id/meeting-$id.md"
39
40
  meeting_path="$PROJECT_ROOT/$meeting_rel"
@@ -52,6 +53,7 @@ current_agent="$(jq -r '.current_agent // "none"' "$PROGRESS" 2>/dev/null || ech
52
53
  next_agent="$(jq -r '.next_agent // "none"' "$PROGRESS" 2>/dev/null || echo none)"
53
54
  agent_status="$(jq -r '.agent_status // "unknown"' "$PROGRESS" 2>/dev/null || echo unknown)"
54
55
  conductor_state="$(jq -r '.conductor.state // "idle"' "$PROGRESS" 2>/dev/null || echo idle)"
56
+ conductor_action="$(jq -r '.conductor.current_action // "none"' "$PROGRESS" 2>/dev/null || echo none)"
55
57
  tick_count="$(jq -r '.conductor.tick_count // 0' "$PROGRESS" 2>/dev/null || echo 0)"
56
58
  health_count="$(jq -r '(.service_ops.health // []) | length' "$PROGRESS" 2>/dev/null || echo 0)"
57
59
  alert_count="$(jq -r '[.service_ops.health[]? | select(.status == "down" or .status == "degraded")] | length' "$PROGRESS" 2>/dev/null || echo 0)"
@@ -66,11 +68,63 @@ last_meeting="$(jq -r '.meetings.last_review_path // .meetings.current_record_pa
66
68
  cqo_audit="$(jq -r '.cqo.audit_path // empty' "$PROGRESS" 2>/dev/null || true)"
67
69
  cto_review="$(jq -r '.cto.review_path // empty' "$PROGRESS" 2>/dev/null || true)"
68
70
  open_incidents="$(jq -r '(.service_ops.incident.open // []) | length' "$PROGRESS" 2>/dev/null || echo 0)"
71
+ incident_repeat_count="$(jq -r '.service_ops.incident.repeat_count // 0' "$PROGRESS" 2>/dev/null || echo 0)"
72
+ incident_recovery_required="$(jq -r '.service_ops.incident.recovery_required // false' "$PROGRESS" 2>/dev/null || echo false)"
73
+ prev_required_json="$(jq -c '.meetings.decision.required_execution // .meetings.required_execution // null' "$PROGRESS" 2>/dev/null || echo null)"
74
+ prev_required_action="$(jq -r '(.meetings.decision.required_execution // .meetings.required_execution // {}).action // "none"' "$PROGRESS" 2>/dev/null || echo none)"
75
+ prev_required_owner="$(jq -r '(.meetings.decision.required_execution // .meetings.required_execution // {}).owner // "none"' "$PROGRESS" 2>/dev/null || echo none)"
76
+ prev_required_deliverable="$(jq -r '(.meetings.decision.required_execution // .meetings.required_execution // {}).deliverable_path // ""' "$PROGRESS" 2>/dev/null || true)"
77
+ prev_execution_result="none"
78
+ prev_execution_detail="no prior required_execution"
79
+ if [ "$prev_required_json" != "null" ]; then
80
+ if [ -n "$prev_required_deliverable" ] && [ -f "$PROJECT_ROOT/$prev_required_deliverable" ]; then
81
+ prev_execution_result="executed_unverified"
82
+ prev_execution_detail="deliverable exists: $prev_required_deliverable"
83
+ if [ "$prev_required_action" = "runtime-recovery-runbook" ] && [ "${open_incidents:-0}" -eq 0 ] && [ "$alert_count" -eq 0 ]; then
84
+ prev_execution_result="executed_and_verified"
85
+ prev_execution_detail="deliverable exists and Service-Ops has no open incident"
86
+ fi
87
+ elif [ "$prev_required_action" = "runtime-recovery-runbook" ] && [ "$(jq -r '.cto.step_b_status // .cto.step_a_status // ""' "$PROGRESS" 2>/dev/null || true)" != "" ]; then
88
+ prev_execution_result="attempted_blocked"
89
+ prev_execution_detail="CTO recovery state advanced but required deliverable missing: ${prev_required_deliverable:-unset}"
90
+ else
91
+ prev_execution_result="paperwork_only_failure"
92
+ prev_execution_detail="required deliverable missing: ${prev_required_deliverable:-unset}"
93
+ fi
94
+ fi
69
95
  owner_escalation="false"
96
+ strategy_total_signals=0
97
+ strategy_previous_signals="$(jq -r '.goals.strategy_cadence.total_signals // 0' "$PROGRESS" 2>/dev/null || echo 0)"
98
+ strategy_delta=0
99
+ strategy_status="not_applicable"
100
+ strategy_target_per_hour=0
101
+ strategy_target_per_day=0
102
+ strategy_last_signal="none"
103
+ strategy_required=false
104
+
105
+ if grep -Eiq 'strategy|algo|backtest|신규.?전략|시간당.?1|일.?6|daily.?6|hourly.?1' "$log_path" "$PROJECT_ROOT/.harness/actions/goals.md" 2>/dev/null; then
106
+ strategy_required=true
107
+ strategy_target_per_hour=1
108
+ strategy_target_per_day=6
109
+ strategy_total_signals="$(grep -Eic '(^|[|[:space:]])(new-strategy|strategy-generated|algos?_candidate|backtest-jobs?|backtest_enqueue|신규.?전략|전략.?생성)([|[:space:]]|$)' "$log_path" 2>/dev/null || echo 0)"
110
+ strategy_last_signal="$(grep -Ei '(^|[|[:space:]])(new-strategy|strategy-generated|algos?_candidate|backtest-jobs?|backtest_enqueue|신규.?전략|전략.?생성)([|[:space:]]|$)' "$log_path" 2>/dev/null | tail -1 || true)"
111
+ [ -n "$strategy_last_signal" ] || strategy_last_signal="none"
112
+ if [ "$strategy_total_signals" -lt "$strategy_previous_signals" ]; then
113
+ strategy_previous_signals="$strategy_total_signals"
114
+ fi
115
+ strategy_delta=$((strategy_total_signals - strategy_previous_signals))
116
+ if [ "$strategy_delta" -ge "$strategy_target_per_hour" ]; then
117
+ strategy_status="on_track"
118
+ else
119
+ strategy_status="behind_goal"
120
+ fi
121
+ fi
70
122
 
71
123
  verdict="working"
72
124
  if [ "$alert_count" -gt 0 ]; then
73
125
  verdict="incident"
126
+ elif [ "$strategy_required" = "true" ] && [ "$strategy_status" = "behind_goal" ]; then
127
+ verdict="goal_drift"
74
128
  elif [ "$conductor_state" = "escalated" ]; then
75
129
  verdict="owner_needed"
76
130
  elif [ "$conductor_state" = "waiting_owner" ]; then
@@ -83,6 +137,25 @@ meeting_type="standup"
83
137
  decision_owner="planner"
84
138
  decision_action="execution-plan"
85
139
  decision_rationale="정기 회의에서 active GOAL 대비 현재 작업과 운영 신호를 재정렬하고 다음 work package를 명확히 한다."
140
+ progress_meaningful_json='[]'
141
+ required_execution_json='null'
142
+ handoff_requires_execution=false
143
+ handoff_feature="$(printf "%s" "$conductor_action" | awk -F: '{print $NF}')"
144
+ case "$handoff_feature" in
145
+ ""|none|null|pass-through|monitor|completed|running|ready|execution-plan|continue-current-handoff|goal-alignment)
146
+ handoff_feature="$stamp"
147
+ ;;
148
+ esac
149
+ safe_handoff_feature="$(printf "%s" "$handoff_feature" | tr -cs 'A-Za-z0-9._-' '-' | sed 's/^-//; s/-$//')"
150
+ [ -n "$safe_handoff_feature" ] || safe_handoff_feature="$stamp"
151
+
152
+ case "$next_agent" in
153
+ planner|cto|cqo|generator-*|evaluator-*|documentationer|coo-developer)
154
+ if [ "$next_agent" != "$current_agent" ] || [[ "$conductor_action" == *handoff* ]] || [[ "$conductor_action" == advance:* ]] || [[ "$conductor_action" == spawn:* ]] || [[ "$conductor_action" == dispatch:* ]]; then
155
+ handoff_requires_execution=true
156
+ fi
157
+ ;;
158
+ esac
86
159
  case "$next_agent" in
87
160
  planner|cto|cqo|service-ops|dispatcher)
88
161
  decision_owner="$next_agent"
@@ -93,13 +166,56 @@ esac
93
166
  if [ "$verdict" = "incident" ]; then
94
167
  meeting_type="incident-war-room"
95
168
  decision_owner="cto"
96
- decision_action="runtime-recovery"
97
- decision_rationale="Service-Ops가 down/degraded 신호를 발견했으므로 CTO가 복구 경로를 정하고 CQO가 복구 evidence를 검증한다."
169
+ if [ "$incident_recovery_required" = "true" ] || [ "${incident_repeat_count:-0}" -ge 2 ]; then
170
+ decision_action="runtime-recovery-runbook"
171
+ decision_rationale="동일 운영 장애가 ${incident_repeat_count}회 연속 감지됐다. 반복 회의가 아니라 CTO가 복구 runbook을 실행하고 CQO가 evidence를 검증한다."
172
+ progress_meaningful_json='["runtime-recovery-runbook required"]'
173
+ required_execution_json="$(jq -n --arg id "RE-$stamp-runtime-recovery" --arg source "$meeting_rel" '{
174
+ id:$id,
175
+ owner:"cto",
176
+ action:"runtime-recovery-runbook",
177
+ deliverable_path:".harness/actions/cto-runbook-runtime-recovery-current.md",
178
+ verifier:"cqo+service-ops",
179
+ due:"next_tick",
180
+ source_path:$source,
181
+ success_condition:"Service-Ops verifies every configured production service as ok; partial recovery remains incident."
182
+ }')"
183
+ else
184
+ decision_action="runtime-recovery"
185
+ decision_rationale="Service-Ops가 down/degraded 신호를 발견했으므로 CTO가 복구 경로를 정하고 CQO가 복구 evidence를 검증한다."
186
+ progress_meaningful_json='["runtime-recovery decision"]'
187
+ required_execution_json="$(jq -n --arg id "RE-$stamp-runtime-recovery" --arg source "$meeting_rel" '{
188
+ id:$id,
189
+ owner:"cto",
190
+ action:"runtime-recovery",
191
+ deliverable_path:".harness/actions/cto-action-runtime-recovery-current.md",
192
+ verifier:"service-ops",
193
+ due:"next_tick",
194
+ source_path:$source,
195
+ success_condition:"Service-Ops health improves or records a concrete blocker."
196
+ }')"
197
+ fi
98
198
  elif [ "$verdict" = "idle" ] || [ "$verdict" = "autonomous_review" ]; then
99
199
  meeting_type="followup-review"
100
200
  decision_owner="planner"
101
201
  decision_action="goal-alignment"
102
202
  decision_rationale="Owner 대기 없이 CEO/COO/CTO/CQO/Service-Ops가 GOAL 대비 다음 work package를 재정렬한다."
203
+ elif [ "$verdict" = "goal_drift" ]; then
204
+ meeting_type="spec-review"
205
+ decision_owner="planner"
206
+ decision_action="strategy-cadence-recovery"
207
+ decision_rationale="전략 생성 cadence가 목표보다 뒤처졌다. COO가 다음 시간의 전략 후보 생성/백테스트 work package를 즉시 재배정한다."
208
+ progress_meaningful_json='["strategy cadence recovery decision"]'
209
+ required_execution_json="$(jq -n --arg id "RE-$stamp-strategy-cadence" --arg source "$meeting_rel" --arg deliverable ".harness/actions/strategy-work-package-${stamp}.md" '{
210
+ id:$id,
211
+ owner:"planner",
212
+ action:"create-strategy-work-package",
213
+ deliverable_path:$deliverable,
214
+ verifier:"cqo",
215
+ due:"next_tick",
216
+ source_path:$source,
217
+ success_condition:"A strategy work package exists with candidate idea, data source, backtest command, and CQO acceptance criteria."
218
+ }')"
103
219
  elif [ "$verdict" = "owner_needed" ]; then
104
220
  meeting_type="all-hands"
105
221
  decision_owner="dispatcher"
@@ -108,6 +224,82 @@ elif [ "$verdict" = "owner_needed" ]; then
108
224
  owner_escalation="true"
109
225
  fi
110
226
 
227
+ if [ "$verdict" = "working" ] && [ "$handoff_requires_execution" = "true" ]; then
228
+ decision_owner="$next_agent"
229
+ case "$next_agent" in
230
+ planner)
231
+ decision_action="execution-plan"
232
+ deliverable_path=".harness/actions/planner-execution-plan-${safe_handoff_feature}.md"
233
+ verifier="cto+cqo"
234
+ success_condition="Planner creates a concrete execution plan that reconciles the current handoff with GOAL, queue priority, non-goals, owner, and verifier."
235
+ ;;
236
+ cto)
237
+ decision_action="technical-handoff"
238
+ deliverable_path=".harness/actions/cto-action-${safe_handoff_feature}.md"
239
+ verifier="cqo"
240
+ success_condition="CTO records implementation scope, affected files, validation commands, blocker status, and the next execution owner."
241
+ ;;
242
+ cqo)
243
+ decision_action="quality-verification"
244
+ deliverable_path=".harness/actions/cqo-audit-${safe_handoff_feature}.md"
245
+ verifier="meeting-manager"
246
+ success_condition="CQO records PASS/FAIL with evidence, regressions, and the next routing decision."
247
+ ;;
248
+ generator-*)
249
+ decision_action="implement-${safe_handoff_feature}"
250
+ deliverable_path=".harness/actions/gen-report-${safe_handoff_feature}.md"
251
+ verifier="cqo+evaluator-code-quality"
252
+ success_condition="Generator produces the named implementation report, changed-file list, validation output, and handoff to CQO/evaluator."
253
+ ;;
254
+ evaluator-*)
255
+ decision_action="verify-${safe_handoff_feature}"
256
+ deliverable_path=".harness/actions/evaluation-${safe_handoff_feature}.md"
257
+ verifier="cqo"
258
+ success_condition="Evaluator writes an evidence-backed PASS/FAIL report and does not rubber-stamp missing evidence."
259
+ ;;
260
+ documentationer)
261
+ decision_action="document-${safe_handoff_feature}"
262
+ deliverable_path=".harness/actions/documentation-${safe_handoff_feature}.md"
263
+ verifier="planner"
264
+ success_condition="Documentationer writes the requested brief/report with source paths and decision impact."
265
+ ;;
266
+ coo-developer)
267
+ decision_action="spike-${safe_handoff_feature}"
268
+ deliverable_path=".harness/actions/hypothesis/${safe_handoff_feature}/spike/report.md"
269
+ verifier="planner+cqo"
270
+ success_condition="COO developer records spike result, repro/evidence, and verdict input for Planner."
271
+ ;;
272
+ *)
273
+ decision_action="execute-${safe_handoff_feature}"
274
+ deliverable_path=".harness/actions/execution-${safe_handoff_feature}.md"
275
+ verifier="meeting-manager"
276
+ success_condition="The owner writes a concrete deliverable and next-step evidence before the following hourly review."
277
+ ;;
278
+ esac
279
+ decision_rationale="working 상태라도 현재 handoff는 산출물 없는 '계속 진행'으로 통과할 수 없다. 다음 tick까지 owner가 deliverable을 남기고 verifier가 검증한다."
280
+ progress_meaningful_json="$(jq -n --arg item "execution contract required: $next_agent/$decision_action" '[$item]')"
281
+ required_execution_json="$(jq -n \
282
+ --arg id "RE-$stamp-handoff" \
283
+ --arg owner "$decision_owner" \
284
+ --arg action "$decision_action" \
285
+ --arg deliverable "$deliverable_path" \
286
+ --arg verifier "$verifier" \
287
+ --arg source "$meeting_rel" \
288
+ --arg success "$success_condition" \
289
+ --arg conductor_action "$conductor_action" \
290
+ '{
291
+ id:$id,
292
+ owner:$owner,
293
+ action:$action,
294
+ deliverable_path:$deliverable,
295
+ verifier:$verifier,
296
+ due:"next_tick",
297
+ source_path:$source,
298
+ source_conductor_action:$conductor_action,
299
+ success_condition:$success
300
+ }')"
301
+ fi
302
+
111
303
  decision_json="$(jq -n \
112
304
  --arg owner "$decision_owner" \
113
305
  --arg action_type "$decision_action" \
@@ -117,6 +309,8 @@ decision_json="$(jq -n \
117
309
  --arg ops_report "$ops_report" \
118
310
  --arg cqo_audit "$cqo_audit" \
119
311
  --arg cto_review "$cto_review" \
312
+ --argjson progress_meaningful "$progress_meaningful_json" \
313
+ --argjson required_execution "$required_execution_json" \
120
314
  --argjson owner_escalation "$owner_escalation" '
121
315
  {
122
316
  owner: $owner,
@@ -132,6 +326,11 @@ decision_json="$(jq -n \
132
326
  drift_classification: $drift,
133
327
  source_path: $source,
134
328
  owner_escalation: $owner_escalation,
329
+ progress_classification: {
330
+ meaningful_actions: $progress_meaningful,
331
+ paperwork_only: ["hourly-review", "service-ops-monitor"]
332
+ },
333
+ required_execution: $required_execution,
135
334
  tracks: [],
136
335
  rendezvous: null
137
336
  }')"
@@ -165,6 +364,9 @@ meeting_json="$(jq -n \
165
364
  echo "- drift_classification: $drift"
166
365
  echo "- previous_decision: $last_decision"
167
366
  echo "- previous_meeting: $last_meeting"
367
+ echo "- previous_required_execution: $prev_required_owner/$prev_required_action"
368
+ echo "- previous_execution_result: $prev_execution_result"
369
+ echo "- previous_execution_detail: $prev_execution_detail"
168
370
  if [ -n "$ops_report" ]; then
169
371
  echo "- service_ops_report: $ops_report"
170
372
  fi
@@ -175,6 +377,21 @@ meeting_json="$(jq -n \
175
377
  echo "- cqo_audit: $cqo_audit"
176
378
  fi
177
379
  echo ""
380
+ echo "## Progress Classification"
381
+ echo ""
382
+ echo "- previous_required_execution_result: $prev_execution_result"
383
+ echo "- previous_required_execution_detail: $prev_execution_detail"
384
+ if [ "$verdict" = "incident" ] && { [ "$incident_recovery_required" = "true" ] || [ "${incident_repeat_count:-0}" -ge 2 ]; }; then
385
+ echo "- meaningful_actions: runtime-recovery-runbook required"
386
+ echo "- paperwork_only: hourly meeting minutes, Service-Ops monitor report"
387
+ elif [ "$verdict" = "goal_drift" ]; then
388
+ echo "- meaningful_actions: strategy cadence recovery decision"
389
+ echo "- paperwork_only: hourly meeting minutes, Service-Ops monitor report"
390
+ else
391
+ echo "- meaningful_actions: none detected in this deterministic batch until conductor/agent tick records execution"
392
+ echo "- paperwork_only: hourly meeting minutes, Service-Ops monitor report"
393
+ fi
394
+ echo ""
178
395
  echo "## Role Briefs"
179
396
  echo ""
180
397
  echo "### Dispatcher/CEO"
@@ -214,6 +431,12 @@ meeting_json="$(jq -n \
214
431
  echo "- warnings: $warn_count"
215
432
  echo "- alerts: $alert_count"
216
433
  echo "- open_incidents: $open_incidents"
434
+ echo "- incident_repeat_count: $incident_repeat_count"
435
+ echo "- incident_recovery_required: $incident_recovery_required"
436
+ if [ "$strategy_required" = "true" ]; then
437
+ echo "- strategy_cadence: $strategy_status (delta=$strategy_delta, total_signals=$strategy_total_signals, target_per_hour=$strategy_target_per_hour, target_per_day=$strategy_target_per_day)"
438
+ echo "- last_strategy_signal: $strategy_last_signal"
439
+ fi
217
440
  echo "- 판단: 운영 신호를 회의에 제출하고, 장애 시 incident-war-room을 요구한다."
218
441
  echo ""
219
442
  if [ "$health_count" -gt 0 ]; then
@@ -234,11 +457,22 @@ meeting_json="$(jq -n \
234
457
  case "$verdict" in
235
458
  incident)
236
459
  echo "- Service-Ops: down/degraded 서비스가 있으므로 feature work보다 장애 triage가 우선이다."
237
- echo "- CTO: 복구 절차, 재시작, 설정 누락, 포트 충돌 중 원인을 좁히고 runtime-recovery work item을 받는다."
460
+ if [ "$incident_recovery_required" = "true" ] || [ "${incident_repeat_count:-0}" -ge 2 ]; then
461
+ echo "- CTO: 같은 장애가 반복됐으므로 추가 회의가 아니라 runtime-recovery-runbook 실행으로 전환한다."
462
+ else
463
+ echo "- CTO: 복구 절차, 재시작, 설정 누락, 포트 충돌 중 원인을 좁히고 runtime-recovery work item을 받는다."
464
+ fi
238
465
  echo "- CQO: 복구 완료 주장은 health check와 재현 가능한 evidence 없이는 PASS로 보지 않는다."
239
466
  echo "- COO: 장애 복구가 GOAL 진행을 막는 범위를 queue에 반영한다."
240
467
  echo "- CEO: Owner에게 묻지 않고 내부 복구 루프를 진행한다. 단 GOAL 변경이 필요하면 별도 escalation한다."
241
468
  ;;
469
+ goal_drift)
470
+ echo "- CEO: Owner가 없어도 최초 GOAL의 KPI를 기준으로 회사 루프를 평가한다."
471
+ echo "- COO: 전략 생성/백테스트 cadence가 목표보다 낮으므로 다음 work package를 전략 후보 생성으로 고정한다."
472
+ echo "- CTO: 필요한 데이터/실행 경로가 막혔는지 점검한다."
473
+ echo "- CQO: 후보 전략은 backtest evidence 없이는 유의미 진척으로 인정하지 않는다."
474
+ echo "- Service-Ops: 운영 장애가 cadence 저하 원인인지 계속 감시한다."
475
+ ;;
242
476
  owner_needed)
243
477
  echo "- CEO: conductor escalation의 원인이 내부 해결 가능한지 우선 판정한다."
244
478
  echo "- COO/CTO/CQO/Service-Ops: 각자 해결 가능한 내부 action을 제시하고, 불가능할 때만 Owner escalation을 유지한다."
@@ -272,6 +506,11 @@ meeting_json="$(jq -n \
272
506
  echo "- Service-Ops: 복구 후 monitor를 다시 돌려 last_check와 health evidence를 갱신한다."
273
507
  echo "- CQO: 복구 evidence를 검증하고 regression risk를 기록한다."
274
508
  ;;
509
+ goal_drift)
510
+ echo "- Planner/COO: 다음 autonomous tick에서 전략 후보 생성/백테스트 work package를 발급한다."
511
+ echo "- CTO: 전략 실행 경로와 데이터 의존성 차단 여부를 점검한다."
512
+ echo "- CQO: backtest 결과가 없는 후보를 유의미 진척으로 집계하지 않는다."
513
+ ;;
275
514
  idle|autonomous_review)
276
515
  echo "- Planner/COO: Owner 대기 없이 active GOAL 기준 다음 work package를 정의한다."
277
516
  echo "- Conductor: meeting decision을 읽고 다음 부서를 자동 배정한다."
@@ -280,9 +519,34 @@ meeting_json="$(jq -n \
280
519
  echo "- Conductor: 다음 autonomous tick에서 decision.owner/action_type 기준으로 handoff한다."
281
520
  ;;
282
521
  esac
522
+ echo ""
523
+ echo "## Required Execution"
524
+ echo ""
525
+ if [ "$required_execution_json" = "null" ]; then
526
+ echo "- none"
527
+ else
528
+ jq -r '"- owner: \(.owner)\n- action: \(.action)\n- deliverable_path: \(.deliverable_path)\n- verifier: \(.verifier)\n- due: \(.due)\n- success_condition: \(.success_condition)"' <<<"$required_execution_json"
529
+ fi
283
530
  } > "$meeting_path"
284
531
 
285
- jq --arg ts "$ts" --arg id "$id" --arg rel "$meeting_rel" --arg verdict "$verdict" --arg type "$meeting_type" --argjson decision "$decision_json" '
532
+ jq \
533
+ --arg ts "$ts" \
534
+ --arg id "$id" \
535
+ --arg rel "$meeting_rel" \
536
+ --arg verdict "$verdict" \
537
+ --arg type "$meeting_type" \
538
+ --arg strategy_status "$strategy_status" \
539
+ --arg strategy_last_signal "$strategy_last_signal" \
540
+ --arg prev_execution_result "$prev_execution_result" \
541
+ --arg prev_execution_detail "$prev_execution_detail" \
542
+ --argjson strategy_required "$strategy_required" \
543
+ --argjson strategy_target_per_hour "$strategy_target_per_hour" \
544
+ --argjson strategy_target_per_day "$strategy_target_per_day" \
545
+ --argjson strategy_total_signals "$strategy_total_signals" \
546
+ --argjson strategy_previous_signals "$strategy_previous_signals" \
547
+ --argjson strategy_delta "$strategy_delta" \
548
+ --argjson incident_recovery_required "$incident_recovery_required" \
549
+ --argjson decision "$decision_json" '
286
550
  .meetings.last_type = "hourly-review" |
287
551
  .meetings.last_reason = $verdict |
288
552
  .meetings.last_review_at = $ts |
@@ -291,7 +555,22 @@ jq --arg ts "$ts" --arg id "$id" --arg rel "$meeting_rel" --arg verdict "$verdic
291
555
  .meetings.current_record_path = $rel |
292
556
  .meetings.last_attendees = ["dispatcher","planner","cto","cqo","service-ops","meeting-manager"] |
293
557
  .meetings.decision = $decision |
294
- if $verdict == "incident" or $verdict == "autonomous_review" or $verdict == "idle"
558
+ .meetings.previous_required_execution_result = $prev_execution_result |
559
+ .meetings.previous_required_execution_detail = $prev_execution_detail |
560
+ .meetings.required_execution = $decision.required_execution |
561
+ .goals.strategy_cadence = {
562
+ "required": $strategy_required,
563
+ "status": $strategy_status,
564
+ "target_per_hour": $strategy_target_per_hour,
565
+ "target_per_day": $strategy_target_per_day,
566
+ "total_signals": $strategy_total_signals,
567
+ "previous_total_signals": $strategy_previous_signals,
568
+ "delta_since_last_review": $strategy_delta,
569
+ "last_signal": $strategy_last_signal,
570
+ "last_check": $ts
571
+ } |
572
+ .service_ops.incident.recovery_required = $incident_recovery_required |
573
+ if $verdict == "incident" or $verdict == "autonomous_review" or $verdict == "idle" or $verdict == "goal_drift"
295
574
  then .meetings.active = ((.meetings.active // []) + ["meeting-manager","dispatcher","planner","cto","cqo","service-ops"] | unique) |
296
575
  .meetings.requested_type = (.meetings.requested_type // $type) |
297
576
  .meetings.requested_reason = (.meetings.requested_reason // $verdict)