@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.
- package/CHANGELOG.md +12 -0
- package/HR-Resource/academic-academic-anthropologist/SKILL.md +142 -0
- package/HR-Resource/academic-academic-geographer/SKILL.md +144 -0
- package/HR-Resource/academic-academic-historian/SKILL.md +140 -0
- package/HR-Resource/academic-academic-narratologist/SKILL.md +135 -0
- package/HR-Resource/academic-academic-psychologist/SKILL.md +135 -0
- package/HR-Resource/brick-office/SKILL.md +20 -0
- package/HR-Resource/cdo/SKILL.md +33 -0
- package/HR-Resource/ceo/SKILL.md +36 -0
- package/HR-Resource/coo/SKILL.md +36 -0
- package/HR-Resource/cqo/SKILL.md +33 -0
- package/HR-Resource/cto/SKILL.md +36 -0
- package/HR-Resource/design-design-brand-guardian/SKILL.md +339 -0
- package/HR-Resource/design-design-image-prompt-engineer/SKILL.md +253 -0
- package/HR-Resource/design-design-inclusive-visuals-specialist/SKILL.md +88 -0
- package/HR-Resource/design-design-ui-designer/SKILL.md +400 -0
- package/HR-Resource/design-design-ux-architect/SKILL.md +486 -0
- package/HR-Resource/design-design-ux-researcher/SKILL.md +346 -0
- package/HR-Resource/design-design-visual-storyteller/SKILL.md +166 -0
- package/HR-Resource/design-design-whimsy-injector/SKILL.md +455 -0
- package/HR-Resource/engineering-engineering-ai-data-remediation-engineer/SKILL.md +227 -0
- package/HR-Resource/engineering-engineering-ai-engineer/SKILL.md +163 -0
- package/HR-Resource/engineering-engineering-autonomous-optimization-architect/SKILL.md +124 -0
- package/HR-Resource/engineering-engineering-backend-architect/SKILL.md +252 -0
- package/HR-Resource/engineering-engineering-cms-developer/SKILL.md +553 -0
- package/HR-Resource/engineering-engineering-code-reviewer/SKILL.md +93 -0
- package/HR-Resource/engineering-engineering-codebase-onboarding-engineer/SKILL.md +190 -0
- package/HR-Resource/engineering-engineering-data-engineer/SKILL.md +323 -0
- package/HR-Resource/engineering-engineering-database-optimizer/SKILL.md +193 -0
- package/HR-Resource/engineering-engineering-devops-automator/SKILL.md +393 -0
- package/HR-Resource/engineering-engineering-email-intelligence-engineer/SKILL.md +370 -0
- package/HR-Resource/engineering-engineering-embedded-firmware-engineer/SKILL.md +190 -0
- package/HR-Resource/engineering-engineering-feishu-integration-developer/SKILL.md +615 -0
- package/HR-Resource/engineering-engineering-filament-optimization-specialist/SKILL.md +300 -0
- package/HR-Resource/engineering-engineering-frontend-developer/SKILL.md +242 -0
- package/HR-Resource/engineering-engineering-git-workflow-master/SKILL.md +101 -0
- package/HR-Resource/engineering-engineering-incident-response-commander/SKILL.md +461 -0
- package/HR-Resource/engineering-engineering-minimal-change-engineer/SKILL.md +224 -0
- package/HR-Resource/engineering-engineering-mobile-app-builder/SKILL.md +510 -0
- package/HR-Resource/engineering-engineering-rapid-prototyper/SKILL.md +479 -0
- package/HR-Resource/engineering-engineering-security-engineer/SKILL.md +321 -0
- package/HR-Resource/engineering-engineering-senior-developer/SKILL.md +193 -0
- package/HR-Resource/engineering-engineering-software-architect/SKILL.md +98 -0
- package/HR-Resource/engineering-engineering-solidity-smart-contract-engineer/SKILL.md +539 -0
- package/HR-Resource/engineering-engineering-sre/SKILL.md +107 -0
- package/HR-Resource/engineering-engineering-technical-writer/SKILL.md +410 -0
- package/HR-Resource/engineering-engineering-threat-detection-engineer/SKILL.md +551 -0
- package/HR-Resource/engineering-engineering-voice-ai-integration-engineer/SKILL.md +578 -0
- package/HR-Resource/engineering-engineering-wechat-mini-program-developer/SKILL.md +367 -0
- package/HR-Resource/finance-finance-bookkeeper-controller/SKILL.md +277 -0
- package/HR-Resource/finance-finance-financial-analyst/SKILL.md +251 -0
- package/HR-Resource/finance-finance-fpa-analyst/SKILL.md +280 -0
- package/HR-Resource/finance-finance-investment-researcher/SKILL.md +289 -0
- package/HR-Resource/finance-finance-tax-strategist/SKILL.md +256 -0
- package/HR-Resource/game-development-blender-blender-addon-engineer/SKILL.md +251 -0
- package/HR-Resource/game-development-game-audio-engineer/SKILL.md +281 -0
- package/HR-Resource/game-development-game-designer/SKILL.md +184 -0
- package/HR-Resource/game-development-godot-godot-gameplay-scripter/SKILL.md +351 -0
- package/HR-Resource/game-development-godot-godot-multiplayer-engineer/SKILL.md +314 -0
- package/HR-Resource/game-development-godot-godot-shader-developer/SKILL.md +283 -0
- package/HR-Resource/game-development-level-designer/SKILL.md +225 -0
- package/HR-Resource/game-development-narrative-designer/SKILL.md +260 -0
- package/HR-Resource/game-development-roblox-studio-roblox-avatar-creator/SKILL.md +314 -0
- package/HR-Resource/game-development-roblox-studio-roblox-experience-designer/SKILL.md +322 -0
- package/HR-Resource/game-development-roblox-studio-roblox-systems-scripter/SKILL.md +342 -0
- package/HR-Resource/game-development-technical-artist/SKILL.md +246 -0
- package/HR-Resource/game-development-unity-unity-architect/SKILL.md +288 -0
- package/HR-Resource/game-development-unity-unity-editor-tool-developer/SKILL.md +327 -0
- package/HR-Resource/game-development-unity-unity-multiplayer-engineer/SKILL.md +338 -0
- package/HR-Resource/game-development-unity-unity-shader-graph-artist/SKILL.md +286 -0
- package/HR-Resource/game-development-unreal-engine-unreal-multiplayer-architect/SKILL.md +330 -0
- package/HR-Resource/game-development-unreal-engine-unreal-systems-engineer/SKILL.md +327 -0
- package/HR-Resource/game-development-unreal-engine-unreal-technical-artist/SKILL.md +273 -0
- package/HR-Resource/game-development-unreal-engine-unreal-world-builder/SKILL.md +290 -0
- package/HR-Resource/hiring/SKILL.md +28 -0
- package/HR-Resource/index.json +747 -0
- package/HR-Resource/integrations-mcp-memory-backend-architect-with-memory/SKILL.md +264 -0
- package/HR-Resource/marketing-marketing-agentic-search-optimizer/SKILL.md +328 -0
- package/HR-Resource/marketing-marketing-ai-citation-strategist/SKILL.md +187 -0
- package/HR-Resource/marketing-marketing-app-store-optimizer/SKILL.md +338 -0
- package/HR-Resource/marketing-marketing-baidu-seo-specialist/SKILL.md +243 -0
- package/HR-Resource/marketing-marketing-bilibili-content-strategist/SKILL.md +216 -0
- package/HR-Resource/marketing-marketing-book-co-author/SKILL.md +127 -0
- package/HR-Resource/marketing-marketing-carousel-growth-engine/SKILL.md +216 -0
- package/HR-Resource/marketing-marketing-china-ecommerce-operator/SKILL.md +300 -0
- package/HR-Resource/marketing-marketing-china-market-localization-strategist/SKILL.md +300 -0
- package/HR-Resource/marketing-marketing-content-creator/SKILL.md +71 -0
- package/HR-Resource/marketing-marketing-cross-border-ecommerce/SKILL.md +276 -0
- package/HR-Resource/marketing-marketing-douyin-strategist/SKILL.md +166 -0
- package/HR-Resource/marketing-marketing-growth-hacker/SKILL.md +71 -0
- package/HR-Resource/marketing-marketing-instagram-curator/SKILL.md +130 -0
- package/HR-Resource/marketing-marketing-kuaishou-strategist/SKILL.md +240 -0
- package/HR-Resource/marketing-marketing-linkedin-content-creator/SKILL.md +230 -0
- package/HR-Resource/marketing-marketing-livestream-commerce-coach/SKILL.md +322 -0
- package/HR-Resource/marketing-marketing-podcast-strategist/SKILL.md +294 -0
- package/HR-Resource/marketing-marketing-private-domain-operator/SKILL.md +325 -0
- package/HR-Resource/marketing-marketing-reddit-community-builder/SKILL.md +140 -0
- package/HR-Resource/marketing-marketing-seo-specialist/SKILL.md +338 -0
- package/HR-Resource/marketing-marketing-short-video-editing-coach/SKILL.md +429 -0
- package/HR-Resource/marketing-marketing-social-media-strategist/SKILL.md +142 -0
- package/HR-Resource/marketing-marketing-tiktok-strategist/SKILL.md +142 -0
- package/HR-Resource/marketing-marketing-twitter-engager/SKILL.md +143 -0
- package/HR-Resource/marketing-marketing-video-optimization-specialist/SKILL.md +136 -0
- package/HR-Resource/marketing-marketing-wechat-official-account/SKILL.md +162 -0
- package/HR-Resource/marketing-marketing-weibo-strategist/SKILL.md +257 -0
- package/HR-Resource/marketing-marketing-xiaohongshu-specialist/SKILL.md +155 -0
- package/HR-Resource/marketing-marketing-zhihu-strategist/SKILL.md +179 -0
- package/HR-Resource/ops/SKILL.md +46 -0
- package/HR-Resource/paid-media-paid-media-auditor/SKILL.md +88 -0
- package/HR-Resource/paid-media-paid-media-creative-strategist/SKILL.md +88 -0
- package/HR-Resource/paid-media-paid-media-paid-social-strategist/SKILL.md +88 -0
- package/HR-Resource/paid-media-paid-media-ppc-strategist/SKILL.md +88 -0
- package/HR-Resource/paid-media-paid-media-programmatic-buyer/SKILL.md +88 -0
- package/HR-Resource/paid-media-paid-media-search-query-analyst/SKILL.md +88 -0
- package/HR-Resource/paid-media-paid-media-tracking-specialist/SKILL.md +88 -0
- package/HR-Resource/product-product-behavioral-nudge-engine/SKILL.md +97 -0
- package/HR-Resource/product-product-feedback-synthesizer/SKILL.md +136 -0
- package/HR-Resource/product-product-manager/SKILL.md +486 -0
- package/HR-Resource/product-product-sprint-prioritizer/SKILL.md +171 -0
- package/HR-Resource/product-product-trend-researcher/SKILL.md +176 -0
- package/HR-Resource/project-management-project-management-experiment-tracker/SKILL.md +215 -0
- package/HR-Resource/project-management-project-management-jira-workflow-steward/SKILL.md +247 -0
- package/HR-Resource/project-management-project-management-project-shepherd/SKILL.md +211 -0
- package/HR-Resource/project-management-project-management-studio-operations/SKILL.md +217 -0
- package/HR-Resource/project-management-project-management-studio-producer/SKILL.md +220 -0
- package/HR-Resource/project-management-project-manager-senior/SKILL.md +152 -0
- package/HR-Resource/resource-manager/SKILL.md +23 -0
- package/HR-Resource/sales-sales-account-strategist/SKILL.md +244 -0
- package/HR-Resource/sales-sales-coach/SKILL.md +288 -0
- package/HR-Resource/sales-sales-deal-strategist/SKILL.md +197 -0
- package/HR-Resource/sales-sales-discovery-coach/SKILL.md +242 -0
- package/HR-Resource/sales-sales-engineer/SKILL.md +199 -0
- package/HR-Resource/sales-sales-outbound-strategist/SKILL.md +218 -0
- package/HR-Resource/sales-sales-pipeline-analyst/SKILL.md +284 -0
- package/HR-Resource/sales-sales-proposal-strategist/SKILL.md +234 -0
- package/HR-Resource/spatial-computing-macos-spatial-metal-engineer/SKILL.md +354 -0
- package/HR-Resource/spatial-computing-terminal-integration-specialist/SKILL.md +87 -0
- package/HR-Resource/spatial-computing-visionos-spatial-engineer/SKILL.md +71 -0
- package/HR-Resource/spatial-computing-xr-cockpit-interaction-specialist/SKILL.md +49 -0
- package/HR-Resource/spatial-computing-xr-immersive-developer/SKILL.md +49 -0
- package/HR-Resource/spatial-computing-xr-interface-architect/SKILL.md +49 -0
- package/HR-Resource/specialized-accounts-payable-agent/SKILL.md +202 -0
- package/HR-Resource/specialized-agentic-identity-trust/SKILL.md +404 -0
- package/HR-Resource/specialized-agents-orchestrator/SKILL.md +384 -0
- package/HR-Resource/specialized-automation-governance-architect/SKILL.md +233 -0
- package/HR-Resource/specialized-blockchain-security-auditor/SKILL.md +480 -0
- package/HR-Resource/specialized-compliance-auditor/SKILL.md +175 -0
- package/HR-Resource/specialized-corporate-training-designer/SKILL.md +209 -0
- package/HR-Resource/specialized-customer-service/SKILL.md +415 -0
- package/HR-Resource/specialized-data-consolidation-agent/SKILL.md +77 -0
- package/HR-Resource/specialized-government-digital-presales-consultant/SKILL.md +380 -0
- package/HR-Resource/specialized-healthcare-customer-service/SKILL.md +406 -0
- package/HR-Resource/specialized-healthcare-marketing-compliance/SKILL.md +412 -0
- package/HR-Resource/specialized-hospitality-guest-services/SKILL.md +620 -0
- package/HR-Resource/specialized-hr-onboarding/SKILL.md +468 -0
- package/HR-Resource/specialized-identity-graph-operator/SKILL.md +277 -0
- package/HR-Resource/specialized-language-translator/SKILL.md +281 -0
- package/HR-Resource/specialized-legal-billing-time-tracking/SKILL.md +586 -0
- package/HR-Resource/specialized-legal-client-intake/SKILL.md +509 -0
- package/HR-Resource/specialized-legal-document-review/SKILL.md +471 -0
- package/HR-Resource/specialized-loan-officer-assistant/SKILL.md +572 -0
- package/HR-Resource/specialized-lsp-index-engineer/SKILL.md +331 -0
- package/HR-Resource/specialized-real-estate-buyer-seller/SKILL.md +613 -0
- package/HR-Resource/specialized-recruitment-specialist/SKILL.md +526 -0
- package/HR-Resource/specialized-report-distribution-agent/SKILL.md +82 -0
- package/HR-Resource/specialized-retail-customer-returns/SKILL.md +583 -0
- package/HR-Resource/specialized-sales-data-extraction-agent/SKILL.md +84 -0
- package/HR-Resource/specialized-sales-outreach/SKILL.md +442 -0
- package/HR-Resource/specialized-specialized-chief-of-staff/SKILL.md +296 -0
- package/HR-Resource/specialized-specialized-civil-engineer/SKILL.md +373 -0
- package/HR-Resource/specialized-specialized-cultural-intelligence-strategist/SKILL.md +105 -0
- package/HR-Resource/specialized-specialized-developer-advocate/SKILL.md +334 -0
- package/HR-Resource/specialized-specialized-document-generator/SKILL.md +72 -0
- package/HR-Resource/specialized-specialized-french-consulting-market/SKILL.md +209 -0
- package/HR-Resource/specialized-specialized-korean-business-navigator/SKILL.md +233 -0
- package/HR-Resource/specialized-specialized-mcp-builder/SKILL.md +265 -0
- package/HR-Resource/specialized-specialized-model-qa/SKILL.md +505 -0
- package/HR-Resource/specialized-specialized-salesforce-architect/SKILL.md +197 -0
- package/HR-Resource/specialized-specialized-workflow-architect/SKILL.md +614 -0
- package/HR-Resource/specialized-study-abroad-advisor/SKILL.md +299 -0
- package/HR-Resource/specialized-supply-chain-strategist/SKILL.md +599 -0
- package/HR-Resource/specialized-zk-steward/SKILL.md +228 -0
- package/HR-Resource/support-support-analytics-reporter/SKILL.md +382 -0
- package/HR-Resource/support-support-executive-summary-generator/SKILL.md +229 -0
- package/HR-Resource/support-support-finance-tracker/SKILL.md +459 -0
- package/HR-Resource/support-support-infrastructure-maintainer/SKILL.md +635 -0
- package/HR-Resource/support-support-legal-compliance-checker/SKILL.md +605 -0
- package/HR-Resource/support-support-support-responder/SKILL.md +602 -0
- package/HR-Resource/testing-testing-accessibility-auditor/SKILL.md +333 -0
- package/HR-Resource/testing-testing-api-tester/SKILL.md +323 -0
- package/HR-Resource/testing-testing-evidence-collector/SKILL.md +227 -0
- package/HR-Resource/testing-testing-performance-benchmarker/SKILL.md +285 -0
- package/HR-Resource/testing-testing-reality-checker/SKILL.md +253 -0
- package/HR-Resource/testing-testing-test-results-analyzer/SKILL.md +322 -0
- package/HR-Resource/testing-testing-tool-evaluator/SKILL.md +411 -0
- package/HR-Resource/testing-testing-workflow-optimizer/SKILL.md +467 -0
- package/assets/launchd/com.walwal.harness-wake.plist.template +1 -1
- package/assets/templates/company-pipeline-manifest.json +71 -0
- package/assets/templates/config.json +40 -2
- package/bin/init.js +208 -109
- package/commands/goal.md +25 -0
- package/commands/hot-fix.md +25 -0
- package/commands/play-harness.md +22 -0
- package/commands/release-harness.md +22 -0
- package/commands/stop-harness.md +21 -0
- package/conventions/README.md +14 -88
- package/conventions/brick-office.md +5 -0
- package/conventions/cdo.md +6 -0
- package/conventions/ceo.md +9 -0
- package/conventions/coo.md +6 -0
- package/conventions/cqo.md +6 -23
- package/conventions/cto.md +5 -23
- package/conventions/hiring.md +7 -0
- package/conventions/ops.md +9 -0
- package/conventions/resource-manager.md +6 -0
- package/conventions/shared.md +29 -40
- package/gotchas/README.md +14 -82
- package/gotchas/brick-office.md +9 -0
- package/gotchas/cdo.md +9 -0
- package/gotchas/ceo.md +9 -0
- package/gotchas/coo.md +9 -0
- package/gotchas/cqo.md +6 -19
- package/gotchas/cto.md +6 -19
- package/gotchas/hiring.md +9 -0
- package/gotchas/ops.md +17 -0
- package/gotchas/resource-manager.md +9 -0
- package/gotchas/shared.md +13 -0
- package/package.json +11 -17
- package/scripts/conductor-tick.sh +97 -4
- package/scripts/harness-hourly-review.sh +284 -5
- package/scripts/harness-parity-audit.sh +101 -0
- package/scripts/harness-queue-manager.sh +1 -1
- package/scripts/harness-runtime-stop.sh +58 -0
- package/scripts/harness-service-ops-monitor.sh +207 -18
- package/scripts/harness-stop.sh +18 -0
- package/scripts/harness-wake-install.sh +1 -0
- package/scripts/harness-wake.sh +100 -8
- package/scripts/harness-worker-dispatch.sh +52 -21
- package/scripts/harness-worker-evidence-validate.sh +59 -0
- package/scripts/import-agency-agents.js +102 -0
- package/scripts/lib/harness-agent-resolver.sh +127 -0
- package/scripts/play.sh +104 -0
- package/scripts/release.sh +89 -0
- package/conventions/conductor.md +0 -24
- package/conventions/coo-developer.md +0 -24
- package/conventions/dispatcher.md +0 -24
- package/conventions/documentationer.md +0 -24
- package/conventions/evaluator-architecture.md +0 -24
- package/conventions/evaluator-code-quality.md +0 -24
- package/conventions/evaluator-functional.md +0 -24
- package/conventions/evaluator-security.md +0 -24
- package/conventions/evaluator-visual.md +0 -24
- package/conventions/generator-backend.md +0 -24
- package/conventions/generator-designer.md +0 -24
- package/conventions/generator-devops.md +0 -24
- package/conventions/generator-frontend.md +0 -24
- package/conventions/meeting-manager.md +0 -24
- package/conventions/planner.md +0 -24
- package/conventions/service-ops.md +0 -24
- package/gotchas/conductor.md +0 -38
- package/gotchas/coo-developer.md +0 -22
- package/gotchas/dispatcher.md +0 -38
- package/gotchas/documentationer.md +0 -22
- package/gotchas/evaluator-architecture.md +0 -22
- package/gotchas/evaluator-code-quality.md +0 -22
- package/gotchas/evaluator-functional.md +0 -22
- package/gotchas/evaluator-security.md +0 -22
- package/gotchas/evaluator-visual.md +0 -22
- package/gotchas/generator-backend-laravel.md +0 -19
- package/gotchas/generator-backend.md +0 -22
- package/gotchas/generator-designer.md +0 -22
- package/gotchas/generator-devops.md +0 -22
- package/gotchas/generator-frontend.md +0 -22
- package/gotchas/meeting-manager.md +0 -30
- package/gotchas/planner.md +0 -22
- package/gotchas/service-ops.md +0 -30
- package/skills/_shared/dynamic-registration.md +0 -120
- package/skills/brainstorming/SKILL.md +0 -220
- package/skills/brainstorming/references/attribution.md +0 -109
- package/skills/brainstorming/references/spec-document-reviewer-prompt.md +0 -49
- package/skills/brainstorming/references/visual-companion.md +0 -287
- package/skills/brainstorming/scripts/frame-template.html +0 -214
- package/skills/brainstorming/scripts/helper.js +0 -88
- package/skills/brainstorming/scripts/server.cjs +0 -354
- package/skills/brainstorming/scripts/start-server.sh +0 -148
- package/skills/brainstorming/scripts/stop-server.sh +0 -56
- package/skills/conductor/SKILL.md +0 -336
- package/skills/coo-developer/SKILL.md +0 -72
- package/skills/cqo/SKILL.md +0 -146
- package/skills/cto/SKILL.md +0 -141
- package/skills/dispatcher/SKILL.md +0 -298
- package/skills/dispatcher/persona-ceo.md +0 -169
- package/skills/dispatcher/references/convention-flow.md +0 -111
- package/skills/dispatcher/references/gotcha-flow.md +0 -79
- package/skills/dispatcher/references/initialization.md +0 -53
- package/skills/dispatcher/references/pipeline-definitions.md +0 -151
- package/skills/documentationer/SKILL.md +0 -92
- package/skills/evaluator-architecture/SKILL.md +0 -173
- package/skills/evaluator-code-quality/SKILL.md +0 -218
- package/skills/evaluator-code-quality/references/scoring-rubric.md +0 -104
- package/skills/evaluator-functional/SKILL.md +0 -271
- package/skills/evaluator-functional/references/ia-compliance.md +0 -37
- package/skills/evaluator-functional/references/playwright-tools.md +0 -43
- package/skills/evaluator-functional/references/scoring-rubric.md +0 -52
- package/skills/evaluator-security/SKILL.md +0 -172
- package/skills/evaluator-visual/SKILL.md +0 -165
- package/skills/evaluator-visual/references/responsive-checklist.md +0 -44
- package/skills/evaluator-visual/references/scoring-rubric.md +0 -59
- package/skills/generator-backend/SKILL.md +0 -153
- package/skills/generator-backend/references/nestjs-msa-patterns.md +0 -69
- package/skills/generator-backend/references/sprint-contract-be.md +0 -32
- package/skills/generator-designer/SKILL.md +0 -219
- package/skills/generator-devops/SKILL.md +0 -201
- package/skills/generator-frontend/SKILL.md +0 -155
- package/skills/generator-frontend/references/_web-react-legacy/ai-forbidden-patterns.md +0 -89
- package/skills/generator-frontend/references/_web-react-legacy/component-patterns.md +0 -52
- package/skills/generator-frontend/references/_web-react-legacy/design-system-rules.md +0 -139
- package/skills/generator-frontend/references/_web-react-legacy/vercel-best-practices.md +0 -54
- package/skills/meeting-manager/SKILL.md +0 -419
- package/skills/planner/SKILL.md +0 -243
- package/skills/planner/hr-onboard.md +0 -134
- package/skills/planner/hr-recruit.md +0 -99
- package/skills/planner/persona-coo-hr.md +0 -182
- package/skills/planner/references/api-contract-schema.md +0 -34
- package/skills/planner/references/fe-stack-detection.md +0 -164
- package/skills/planner/references/ia-map-guide.md +0 -31
- package/skills/planner/references/plan-template.md +0 -51
- 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 [ "$
|
|
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
|
-
|
|
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" ] &&
|
|
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
|
-
|
|
97
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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)
|