@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
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: harness-evaluator-visual
|
|
3
|
-
description: "하네스 Visual Evaluator. Playwright MCP로 스크린샷, 반응형 검증, 접근성 트리 분석, AI슬롭 감지를 수행한다. Evaluator-Functional이 PASS한 후에만 실행. 기준 미달 = FAIL → Generator-Frontend 재작업."
|
|
4
|
-
disable-model-invocation: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Evaluator-Visual — Design & Accessibility
|
|
8
|
-
|
|
9
|
-
## progress.json 업데이트 규칙 (v5.6.3+)
|
|
10
|
-
|
|
11
|
-
⚠️ **절대로 progress.json 을 통째로 재작성하지 마라**. `Write` 도구로 전체 파일을
|
|
12
|
-
덮어쓰면 `mode` / `company_state` / 기타 top-level 필드가 누락되어 회사모드 병렬 루프가
|
|
13
|
-
끊기는 등 런타임 오류가 발생한다.
|
|
14
|
-
|
|
15
|
-
**올바른 방법** — 반드시 partial update 로 갱신:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# 헬퍼 스크립트 (권장)
|
|
19
|
-
bash scripts/harness-progress-set.sh . '.current_agent = "planner" | .agent_status = "running"'
|
|
20
|
-
|
|
21
|
-
# 또는 직접 jq 로 partial update
|
|
22
|
-
jq '.agent_status = "completed" | .completed_agents += ["planner"]' .harness/progress.json > .harness/progress.json.tmp && mv .harness/progress.json.tmp .harness/progress.json
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
위 두 방식은 파일의 나머지 필드를 보존한다. Read → 수정 → Write 패턴은 사용 금지.
|
|
26
|
-
|
|
27
|
-
## Session Boundary Protocol
|
|
28
|
-
|
|
29
|
-
### On Start
|
|
30
|
-
1. `.harness/progress.json` 읽기 — `next_agent`가 `"evaluator-visual"`인지 확인
|
|
31
|
-
2. progress.json 업데이트: `current_agent` → `"evaluator-visual"`, `agent_status` → `"running"`, `updated_at` 갱신
|
|
32
|
-
|
|
33
|
-
### On Complete (PASS)
|
|
34
|
-
1. **Screenshot Cleanup** — 이번 평가에서 `browser_take_screenshot` 으로 생성한 모든 PNG/JPEG 파일 삭제:
|
|
35
|
-
```bash
|
|
36
|
-
find . -maxdepth 3 \( -name "screenshot*.png" -o -name "screenshot*.jpg" -o -name "playwright-*.png" \) -newer .harness/progress.json -delete 2>/dev/null
|
|
37
|
-
```
|
|
38
|
-
판정 증거는 `evaluation-visual.md` 에 텍스트로 기술 — 파일은 남기지 않는다.
|
|
39
|
-
2. progress.json 업데이트:
|
|
40
|
-
- `agent_status` → `"completed"`
|
|
41
|
-
- `completed_agents`에 `"evaluator-visual"` 추가
|
|
42
|
-
- `next_agent` → `"archive"`
|
|
43
|
-
- `failure` 필드 초기화
|
|
44
|
-
3. `feature-list.json`의 통과 feature `passes`에 `"evaluator-visual"` 추가
|
|
45
|
-
4. `.harness/progress.log`에 PASS 요약 추가
|
|
46
|
-
5. 출력: `"✓ Evaluator-Visual PASS. 자동 핸드오프 (Conductor 자율 시동) (아카이브)."`
|
|
47
|
-
6. **즉시 내부 핸드오프 (scripts/harness-next.sh) 를 호출하여 아카이브 단계로 자동 핸드오프** (회사모드 내부 핸드오프).
|
|
48
|
-
|
|
49
|
-
### On Fail
|
|
50
|
-
1. **Screenshot Cleanup** — PASS 와 동일하게 스크린샷 파일 삭제 (FAIL 시에도 정리 필수).
|
|
51
|
-
2. progress.json 업데이트:
|
|
52
|
-
- `agent_status` → `"failed"`
|
|
53
|
-
- `failure.agent` → `"evaluator-visual"`
|
|
54
|
-
- `failure.location` → `"frontend"` (비주얼 = 항상 프론트)
|
|
55
|
-
- `failure.message` → 실패 요약 (1줄)
|
|
56
|
-
- `failure.retry_target` → `"generator-frontend"`
|
|
57
|
-
- `next_agent` → `"generator-frontend"`
|
|
58
|
-
- `sprint.retry_count` 증가
|
|
59
|
-
3. `sprint.retry_count >= 10`이면 `agent_status` → `"blocked"`, 사용자 개입 요청
|
|
60
|
-
4. `.harness/progress.log`에 FAIL 요약 추가
|
|
61
|
-
5. 출력: `"✖ Evaluator-Visual FAIL. 자동 핸드오프 (Conductor 자율 시동) (재작업 대상으로 라우팅)."`
|
|
62
|
-
6. **즉시 내부 핸드오프 (scripts/harness-next.sh) 를 호출하여 `failure.retry_target` 으로 자동 핸드오프** (회사모드 내부 핸드오프).
|
|
63
|
-
|
|
64
|
-
## FE Playwright Mandatory Rule (v5.4)
|
|
65
|
-
|
|
66
|
-
**웹 렌더링 가능한 FE Feature에 대해서는 Playwright MCP 사용이 강제**된다 (`validation.visual.enabled == true` 또는 전통 웹 스택).
|
|
67
|
-
|
|
68
|
-
- 필수 호출: `mcp__playwright__browser_navigate` + `mcp__playwright__browser_take_screenshot` (AC당 최소 1장) + 레이아웃/반응형 검증을 위한 `browser_resize`.
|
|
69
|
-
- 접근성: `browser_snapshot`으로 accessibility tree 확보 후 axe-core 평가 연결.
|
|
70
|
-
- **금지**: 스크린샷/스냅샷 없이 "코드만 봐서 OK" 처리.
|
|
71
|
-
- `evaluation-visual.md`에 사용한 playwright 도구 이름과 뷰포트/URL을 명시. 도구 호출 증거 없으면 해당 기준 자동 0점.
|
|
72
|
-
- `validation.visual.enabled == false`인 네이티브 스택은 Visual Skip Flow 적용 (예외).
|
|
73
|
-
|
|
74
|
-
## Startup
|
|
75
|
-
|
|
76
|
-
1. `AGENTS.md` 읽기
|
|
77
|
-
2. `CONVENTIONS.md` (루트) 읽기 — 프로젝트 최상위 원칙 (있을 때만)
|
|
78
|
-
3. `.harness/conventions/shared.md` + `.harness/conventions/evaluator-visual.md` — **긍정 하우스 스타일 적용**
|
|
79
|
-
4. `.harness/gotchas/evaluator-visual.md` 읽기 — **과거 실수 반복 금지**
|
|
80
|
-
5. `.harness/memory.md` 읽기 — **프로젝트 공유 학습 규칙 적용**
|
|
81
|
-
6. `actions/evaluation-functional.md` — Verdict: PASS 확인
|
|
82
|
-
7. **Stack-Adaptive Gate** (v5.2) — `scan-result.json.tech_stack` 으로 스택 확인 후 `.harness/ref/fe-<stack>.md` 의 `validation.visual` 파싱:
|
|
83
|
-
- `visual.enabled == false`: 즉시 **MANUAL_REQUIRED 모드** 로 전환 — 아래 "Visual Skip Flow" 수행 후 종료
|
|
84
|
-
- `visual.enabled == true` (또는 ref-docs 없이 웹 전통 스택): 계속 진행, ref 에 `visual.base_url` 이 있으면 그 URL 로, 없으면 `ref.runner.dev_command` 로 서버 기동 후 Playwright 접속
|
|
85
|
-
|
|
86
|
-
## Visual Skip Flow (네이티브 앱 / 비-브라우저 스택)
|
|
87
|
-
|
|
88
|
-
`validation.visual.enabled == false` (예: Swift macOS, Flutter mobile, CLI 앱) 인 경우:
|
|
89
|
-
|
|
90
|
-
1. Playwright 스크린샷·axe-core·AI슬롭 감지 **전부 skip**
|
|
91
|
-
2. `.harness/actions/evaluation-visual.md` 에 다음을 기록:
|
|
92
|
-
```
|
|
93
|
-
VERDICT: MANUAL_REQUIRED
|
|
94
|
-
STACK: <stack>
|
|
95
|
-
REASON: {ref.validation.visual.reason}
|
|
96
|
-
MANUAL_CHECK: {ref.validation.visual.manual_check}
|
|
97
|
-
```
|
|
98
|
-
3. progress.json: `agent_status = "completed"`, `next_agent = "archive"` (PASS 경로와 동일 라우팅)
|
|
99
|
-
4. `progress.log` 에 `"visual skipped (manual required)"` 이벤트 기록
|
|
100
|
-
5. 사용자에게 `manual_check` 문자열 출력 + 확인 요청
|
|
101
|
-
|
|
102
|
-
## Evaluation Steps
|
|
103
|
-
|
|
104
|
-
1. **Full Page Capture** — 모든 라우트 Desktop 스크린샷
|
|
105
|
-
2. **Responsive Check** — 375px / 768px / 1280px 3 breakpoint
|
|
106
|
-
3. **Design Consistency** — 색상, 타이포, 간격, 모서리 통일성
|
|
107
|
-
4. **AI Slop Detection** — 감점 패턴 감지
|
|
108
|
-
5. **Accessibility** — 시맨틱 HTML, 키보드 네비게이션, 색상 대비
|
|
109
|
-
|
|
110
|
-
반응형 체크리스트 → [참조](references/responsive-checklist.md)
|
|
111
|
-
채점 기준 → [스코어링 루브릭](references/scoring-rubric.md)
|
|
112
|
-
|
|
113
|
-
## Scoring
|
|
114
|
-
|
|
115
|
-
| 차원 | 가중치 | 하드 임계값 |
|
|
116
|
-
|------|--------|------------|
|
|
117
|
-
| Design Consistency | 30% | 6/10 |
|
|
118
|
-
| Responsiveness | 25% | 7/10 |
|
|
119
|
-
| Accessibility | 25% | 6/10 |
|
|
120
|
-
| Originality | 20% | 5/10 |
|
|
121
|
-
|
|
122
|
-
**어떤 차원이든 하드 임계값 미달 → FAIL**
|
|
123
|
-
|
|
124
|
-
## Auto Gotcha Registration — v5.7.1+
|
|
125
|
-
|
|
126
|
-
**필수 emission**: `actions/evaluation-visual.md` 끝부분에 `gotcha_candidates` JSON 블록을 반드시 포함 (후보 없으면 `[]`). `harness-next.sh` 가 Evaluator 완료 직후 이 블록을 스캔해 자동 등록한다.
|
|
127
|
-
|
|
128
|
-
````
|
|
129
|
-
```gotcha_candidates
|
|
130
|
-
[
|
|
131
|
-
{
|
|
132
|
-
"target": "generator-frontend",
|
|
133
|
-
"rule_id": "fe-contrast-fail",
|
|
134
|
-
"title": "텍스트 대비 WCAG AA 미달",
|
|
135
|
-
"wrong": "버튼 #888 on #aaa — 3.0:1 (AA 4.5:1 미만)",
|
|
136
|
-
"right": "primary 버튼은 body 컬러 대비 4.5:1 이상 보장. Tailwind tokens 활용.",
|
|
137
|
-
"why": "접근성은 Evaluator-Visual 하드 임계",
|
|
138
|
-
"scope": "모든 인터랙티브 엘리먼트",
|
|
139
|
-
"source": "evaluator-visual:F-004"
|
|
140
|
-
}
|
|
141
|
-
]
|
|
142
|
-
```
|
|
143
|
-
````
|
|
144
|
-
|
|
145
|
-
등록 규칙:
|
|
146
|
-
- `target`: 실수를 반복할 대상 에이전트 (일반적으로 `generator-frontend`, 디자인 토큰 결함은 `planner`).
|
|
147
|
-
- `rule_id`: dedup 키.
|
|
148
|
-
- 신규 항목은 `Status: unverified`. Planner 리뷰 후 `verified` 승격.
|
|
149
|
-
- **FAIL 시**: 실패 근본 원인 1건 이상 반드시 등록.
|
|
150
|
-
- **PASS 시**: 감지된 경미한 디자인 편차가 있으면 등록 (반복 방지).
|
|
151
|
-
|
|
152
|
-
## After Evaluation
|
|
153
|
-
|
|
154
|
-
- **PASS** → Session Boundary Protocol On Complete (PASS) 실행
|
|
155
|
-
- **FAIL** → Session Boundary Protocol On Fail 실행
|
|
156
|
-
|
|
157
|
-
## ⚠ MANDATORY — 동적 Gotcha / Convention 등록
|
|
158
|
-
|
|
159
|
-
evaluation-visual.md 의 끝에 **반드시 `gotcha_candidates` 와 `convention_candidates` fenced JSON 블록**을 작성한다 (비어 있으면 `[]`). harness-next.sh / Team Lead 가 자동 스캔하여 `.harness/gotchas/` `.harness/conventions/` 에 dedup append.
|
|
160
|
-
|
|
161
|
-
**Visual eval 특화 검출 대상**:
|
|
162
|
-
- 콘솔 에러/Hydration mismatch → `gotcha_candidates` (target=generator-frontend)
|
|
163
|
-
- 디자인 토큰 불일치, 일관된 spacing/font 룰 → `convention_candidates` (scope=generator-frontend)
|
|
164
|
-
|
|
165
|
-
상세 스키마 / 예시 / 필수 필드 → [공통 가이드 — dynamic-registration](../_shared/dynamic-registration.md)
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# Responsive Checklist
|
|
2
|
-
|
|
3
|
-
## Breakpoints
|
|
4
|
-
|
|
5
|
-
| Breakpoint | Size | 검증 항목 |
|
|
6
|
-
|------------|------|----------|
|
|
7
|
-
| Mobile | 375x812 | 단일 컬럼, 터치 타겟 44px+, 햄버거 메뉴 |
|
|
8
|
-
| Tablet | 768x1024 | 적응형 레이아웃, 사이드바 토글 |
|
|
9
|
-
| Desktop | 1280x720 | 풀 레이아웃, 사이드바 상시 표시 |
|
|
10
|
-
|
|
11
|
-
## 검증 절차
|
|
12
|
-
|
|
13
|
-
각 breakpoint에서 모든 페이지:
|
|
14
|
-
```
|
|
15
|
-
1. browser_resize → 해당 크기
|
|
16
|
-
2. browser_take_screenshot → 캡처
|
|
17
|
-
3. browser_snapshot → 레이아웃 구조 확인
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## 확인 항목
|
|
21
|
-
|
|
22
|
-
- [ ] 콘텐츠 잘림 / 오버플로우 없음
|
|
23
|
-
- [ ] 가로 스크롤 없음
|
|
24
|
-
- [ ] 텍스트 가독성 (mobile 최소 14px)
|
|
25
|
-
- [ ] 터치 타겟 크기 (mobile 44px+)
|
|
26
|
-
- [ ] 네비게이션 접근성
|
|
27
|
-
|
|
28
|
-
## 키보드 네비게이션
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
1. browser_press_key → Tab (반복)
|
|
32
|
-
2. 포커스 이동 순서 논리적인지 확인
|
|
33
|
-
3. browser_press_key → Enter (인터랙티브 요소 활성화)
|
|
34
|
-
4. browser_press_key → Escape (모달 닫기)
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## 접근성 트리 (browser_snapshot)
|
|
38
|
-
|
|
39
|
-
확인:
|
|
40
|
-
- 시맨틱: button, nav, main, header, footer, form
|
|
41
|
-
- heading 순서: h1 → h2 → h3 (건너뛰기 없음)
|
|
42
|
-
- 인터랙티브 요소에 접근 가능한 이름
|
|
43
|
-
- 이미지 alt 텍스트
|
|
44
|
-
- 폼 label 연결
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# Scoring Rubric — Visual Evaluation
|
|
2
|
-
|
|
3
|
-
## 차원별 채점
|
|
4
|
-
|
|
5
|
-
| 차원 | 가중치 | 하드 임계값 |
|
|
6
|
-
|------|--------|------------|
|
|
7
|
-
| Design Consistency | 30% | 6/10 |
|
|
8
|
-
| Responsiveness | 25% | 7/10 |
|
|
9
|
-
| Accessibility | 25% | 6/10 |
|
|
10
|
-
| Originality | 20% | 5/10 |
|
|
11
|
-
|
|
12
|
-
**어떤 차원이든 하드 임계값 미달 → FAIL**
|
|
13
|
-
|
|
14
|
-
## AI Slop 감점표
|
|
15
|
-
|
|
16
|
-
| 패턴 | 감점 |
|
|
17
|
-
|------|------|
|
|
18
|
-
| 보라색/파란색 그라디언트 + 흰 카드 | -2 |
|
|
19
|
-
| 과도한 box-shadow 남발 | -1 |
|
|
20
|
-
| 기본 아이콘팩 무분별 사용 | -1 |
|
|
21
|
-
| "Welcome to [AppName]" 히어로 | -1 |
|
|
22
|
-
| 둥근 아바타 + 카드 그리드 | -1 |
|
|
23
|
-
| 전체 fade-in 애니메이션 | -1 |
|
|
24
|
-
| 과도한 보더/구분선 | -1 |
|
|
25
|
-
|
|
26
|
-
## evaluation-visual.md 출력 형식
|
|
27
|
-
|
|
28
|
-
```markdown
|
|
29
|
-
# Visual Evaluation: Sprint [N]
|
|
30
|
-
|
|
31
|
-
## Date / Verdict / Attempt
|
|
32
|
-
|
|
33
|
-
## Responsive Check
|
|
34
|
-
| Page | Mobile (375) | Tablet (768) | Desktop (1280) | Issues |
|
|
35
|
-
|
|
36
|
-
## Design Consistency
|
|
37
|
-
- Color Palette: [통일/혼재]
|
|
38
|
-
- Typography Scale: [일관/불일관]
|
|
39
|
-
- Spacing System: [체계적/비체계적]
|
|
40
|
-
- Border Radius: [통일/혼재]
|
|
41
|
-
|
|
42
|
-
## AI Slop Detection
|
|
43
|
-
| Pattern | Found | Deduction |
|
|
44
|
-
| **Total Deduction** | | **-X** |
|
|
45
|
-
|
|
46
|
-
## Accessibility
|
|
47
|
-
- Semantic HTML: PASS/FAIL
|
|
48
|
-
- Heading Order: PASS/FAIL
|
|
49
|
-
- Keyboard Navigation: PASS/FAIL
|
|
50
|
-
- Color Contrast: PASS/FAIL
|
|
51
|
-
- Form Labels: PASS/FAIL
|
|
52
|
-
|
|
53
|
-
## Scores
|
|
54
|
-
| Dimension | Score | Threshold | Status |
|
|
55
|
-
|
|
56
|
-
## Failures Detail
|
|
57
|
-
### [차원명]
|
|
58
|
-
- Issue / Screenshot / Recommendation
|
|
59
|
-
```
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: harness-generator-backend
|
|
3
|
-
description: "하네스 Backend Generator. 스택 독립(adaptive) — scan-result.json 의 be_stack / language 에 따라 .harness/ref/be-<stack>.md 를 로드해 runner/paths/api/validation 을 따른다. 모든 BE 스택(FastAPI / Django / Go / Rails / Phoenix / Spring / Express 등) 대응."
|
|
4
|
-
disable-model-invocation: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Generator-Backend — Adaptive (Stack-Agnostic)
|
|
8
|
-
|
|
9
|
-
## progress.json 업데이트 규칙 (v5.6.3+)
|
|
10
|
-
|
|
11
|
-
⚠️ **절대로 progress.json 을 통째로 재작성하지 마라**. `Write` 도구로 전체 파일을
|
|
12
|
-
덮어쓰면 `mode` / `company_state` / 기타 top-level 필드가 누락되어 회사모드 병렬 루프가
|
|
13
|
-
끊기는 등 런타임 오류가 발생한다.
|
|
14
|
-
|
|
15
|
-
**올바른 방법** — 반드시 partial update 로 갱신:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# 헬퍼 스크립트 (권장)
|
|
19
|
-
bash scripts/harness-progress-set.sh . '.current_agent = "planner" | .agent_status = "running"'
|
|
20
|
-
|
|
21
|
-
# 또는 직접 jq 로 partial update
|
|
22
|
-
jq '.agent_status = "completed" | .completed_agents += ["planner"]' .harness/progress.json > .harness/progress.json.tmp && mv .harness/progress.json.tmp .harness/progress.json
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
위 두 방식은 파일의 나머지 필드를 보존한다. Read → 수정 → Write 패턴은 사용 금지.
|
|
26
|
-
|
|
27
|
-
## Session Boundary Protocol
|
|
28
|
-
|
|
29
|
-
### On Start
|
|
30
|
-
1. `.harness/progress.json` 읽기 — `next_agent` 가 `"generator-backend"` 인지 확인
|
|
31
|
-
2. progress.json 업데이트: `current_agent` → `"generator-backend"`, `agent_status` → `"running"`, `updated_at` 갱신
|
|
32
|
-
3. `failure` 필드 확인 — retry 인 경우 평가 문서의 실패 사유 우선 읽기
|
|
33
|
-
|
|
34
|
-
### On Complete
|
|
35
|
-
1. progress.json 업데이트:
|
|
36
|
-
- `agent_status` → `"completed"`
|
|
37
|
-
- `completed_agents` 에 `"generator-backend"` 추가
|
|
38
|
-
- `next_agent` → 파이프라인에 따라 (`"generator-frontend"` 또는 `"evaluator-functional"`)
|
|
39
|
-
- `failure` 필드 초기화 (retry 성공 시)
|
|
40
|
-
2. `feature-list.json` 의 해당 feature `passes` 에 `"generator-backend"` 추가
|
|
41
|
-
3. `.harness/progress.log` 에 요약 추가
|
|
42
|
-
4. 출력: `"✓ Generator-Backend 완료. 자동 핸드오프 (Conductor 자율 시동)."`
|
|
43
|
-
5. **즉시 내부 핸드오프 (scripts/harness-next.sh) 를 호출하여 다음 에이전트로 자동 핸드오프** (회사모드 내부 핸드오프).
|
|
44
|
-
|
|
45
|
-
## Startup (Adaptive Loading)
|
|
46
|
-
|
|
47
|
-
1. `AGENTS.md` 읽기 — IA-MAP, 권한 확인
|
|
48
|
-
2. `CONVENTIONS.md` (루트) 읽기 — 프로젝트 최상위 원칙 (있을 때만)
|
|
49
|
-
3. **Conventions 로드** — 세 파일 모두 (있는 것만):
|
|
50
|
-
- `.harness/conventions/shared.md` (모든 에이전트 공통)
|
|
51
|
-
- `.harness/conventions/generator-backend.md` (BE 스코프)
|
|
52
|
-
- `.harness/conventions/generator-backend-<stack>.md` (스택별, 선택)
|
|
53
|
-
4. `.harness/actions/scan-result.json` 읽기 → `tech_stack.backend` 또는 `tech_stack.language` 로 현재 스택 확정 (이하 `<stack>`)
|
|
54
|
-
5. **Ref-docs 로드** — `.harness/ref/be-<stack>.md`
|
|
55
|
-
- 파일 없음 → STOP + 안내: `"ref-docs 가 없습니다. bash init.sh init 실행 또는 bash scripts/init-ref-docs.sh --claude-prompt --stack <stack> --role be . 실행하세요."`
|
|
56
|
-
- frontmatter 파싱 실패 → 경고 출력 + 기본값으로 degrade
|
|
57
|
-
6. **Gotchas 로드** — 두 파일 모두 (있는 것만):
|
|
58
|
-
- `.harness/gotchas/generator-backend.md` (공통)
|
|
59
|
-
- `.harness/gotchas/generator-backend-<stack>.md` (스택별)
|
|
60
|
-
7. `.harness/memory.md` 읽기 — 프로젝트 공유 학습 규칙
|
|
61
|
-
8. `pwd` + `.harness/progress.json` + `git log --oneline -20`
|
|
62
|
-
9. `.harness/actions/api-contract.json` 읽기 — **이 계약이 유일한 BE 외부 인터페이스**
|
|
63
|
-
10. `.harness/actions/feature-list.json` — 지정된 `FEATURE_ID` 또는 `layer: "backend"` 필터
|
|
64
|
-
11. **DB / 외부 의존성 부트스트랩**:
|
|
65
|
-
- `ref.runner.install_command` 가 있으면 1회 실행
|
|
66
|
-
- `ref.runner.dev_command` 를 백그라운드 실행 (있는 경우)
|
|
67
|
-
|
|
68
|
-
## Feature-Level Company Worker
|
|
69
|
-
|
|
70
|
-
Team Worker 가 호출할 때 프롬프트에 `FEATURE_ID` 가 지정된다. Feature branch 에서 단일 feature 만 구현.
|
|
71
|
-
|
|
72
|
-
## AGENTS.md — 읽기 전용
|
|
73
|
-
|
|
74
|
-
`[BE]` + `→ Generator-Backend` 소유 경로만 쓰기 가능. 스택별 실제 소스 경로는 `ref.paths.source_roots` 가 권위 있는 출처 (예: FastAPI `app/`, Go `cmd/` + `internal/`, Rails `app/`).
|
|
75
|
-
|
|
76
|
-
## Sprint Workflow
|
|
77
|
-
|
|
78
|
-
1. **Sprint Contract BE 섹션 추가** — 엔드포인트 / DB 스키마 / 서비스 분할 / 성공 기준
|
|
79
|
-
2. **구현** — api-contract.json ↔ 해당 스택 타입 시스템 1:1 매핑
|
|
80
|
-
3. **Self-Verification** — `ref.validation.pre_eval_gate` 의 모든 명령 실행
|
|
81
|
-
4. **Handoff** → Evaluator-Functional (또는 Generator-Frontend, 파이프라인에 따라)
|
|
82
|
-
|
|
83
|
-
## 스택 치환 규칙 (Adaptive Core)
|
|
84
|
-
|
|
85
|
-
구현 시 **모든 스택 의존 값은 ref-docs 에서 치환**한다:
|
|
86
|
-
|
|
87
|
-
| 치환 키 | 출처 | 예시 |
|
|
88
|
-
|---------|------|------|
|
|
89
|
-
| `<source_roots>` | `ref.paths.source_roots` | FastAPI: `app/` · Go: `cmd/`, `internal/` · Rails: `app/` |
|
|
90
|
-
| `<test_roots>` | `ref.paths.test_roots` | FastAPI: `tests/` · Go: `_test.go` 동거 · Rails: `spec/` |
|
|
91
|
-
| `<dev_command>` | `ref.runner.dev_command` | FastAPI: `uvicorn app.main:app` · Go: `go run ./cmd/server` |
|
|
92
|
-
| `<api_base_url>` | `ref.api.base_url` | 로컬 개발 baseurl (ref-docs 참조) |
|
|
93
|
-
| `<pre_eval_gate>` | `ref.validation.pre_eval_gate` | FastAPI: `[ruff, mypy, pytest]` · Go: `[go vet, go test ./...]` |
|
|
94
|
-
| `<anti_patterns>` | `ref.validation.anti_pattern_rules` | 스택별 grep/lint 규칙 |
|
|
95
|
-
|
|
96
|
-
api-contract.json 의 DTO 스키마는 해당 스택의 타입 표현(Pydantic / struct / class-validator / ActiveRecord 등)으로 직접 매핑한다.
|
|
97
|
-
|
|
98
|
-
## 서비스 간 통신 규칙
|
|
99
|
-
|
|
100
|
-
- MSA 환경이면 서비스 간 **직접 DB 접근 금지** (메시지 큐 / 이벤트 / RPC 만)
|
|
101
|
-
- 모놀리스 환경이면 modules/packages 경계 준수
|
|
102
|
-
- 어느 쪽인지 `ref.paths.source_roots` 구조와 `ref` 본문의 "Architecture" 섹션으로 판단
|
|
103
|
-
|
|
104
|
-
## 핵심 규칙 (스택 무관)
|
|
105
|
-
|
|
106
|
-
- api-contract.json 에 없는 엔드포인트 **구현 금지**
|
|
107
|
-
- 로깅 / 에러 핸들링 / 트랜잭션 경계 필수
|
|
108
|
-
- 보안: OWASP Top 10 (인증·인가·입력 검증·SQL Injection 등) 기본 준수
|
|
109
|
-
- 테스트: `ref.validation.functional_tests` 에 나열된 명령이 전부 통과해야 PASS
|
|
110
|
-
|
|
111
|
-
## 금지 사항
|
|
112
|
-
|
|
113
|
-
- **ref.paths.source_roots 밖의 프로덕션 코드 수정** (FE/HARNESS 영역 침범 금지)
|
|
114
|
-
- api-contract.json 에 없는 엔드포인트 신설
|
|
115
|
-
- `.harness/ref/` 직접 편집 (refresh 는 `bash init.sh refresh-ref` 경유)
|
|
116
|
-
- 공통 `generator-backend.md` / 스택별 `generator-backend-<stack>.md` gotcha 에 적힌 실수 반복
|
|
117
|
-
|
|
118
|
-
## 디버깅 / Fallback
|
|
119
|
-
|
|
120
|
-
- `ref-docs` 가 placeholder 상태 → 본격 구현 전에 `bash init.sh refresh-ref be <stack>` 으로 채우기 권고
|
|
121
|
-
- `scan-result.json.tech_stack_confidence == "unknown"` → 사용자에게 객관식 + 자유입력 fallback 로 스택 확인 요청
|
|
122
|
-
|
|
123
|
-
## ⚠ MANDATORY — 동적 Gotcha / Convention 등록 (Generator 도 mandatory)
|
|
124
|
-
|
|
125
|
-
작업 완료 시 `.harness/actions/gen-report-{FEATURE_ID}.md` 를 작성하고 끝에 **`gotcha_candidates` 와 `convention_candidates` fenced JSON 블록 두 개**를 포함한다 (비어 있으면 `[]`). harness-next.sh / Team Lead 가 자동 스캔하여 `.harness/gotchas/` `.harness/conventions/` 에 dedup append.
|
|
126
|
-
|
|
127
|
-
**Generator 가 등록해야 하는 패턴** (자기 발견):
|
|
128
|
-
- 한 번 시도했다가 깨졌던 접근, 자체 fix 한 코드 실수 → `gotcha_candidates` (target=generator-backend, source="generator-backend:F-XXX")
|
|
129
|
-
- 작업 중 적용한 일관된 코드 구조/패턴 (다른 feature 가 모방해야 할) → `convention_candidates` (scope=generator-backend)
|
|
130
|
-
|
|
131
|
-
`gen-report-{FEATURE_ID}.md` 최소 형식:
|
|
132
|
-
```markdown
|
|
133
|
-
# Generator-Backend Report — {FEATURE_ID}
|
|
134
|
-
|
|
135
|
-
## 변경 파일
|
|
136
|
-
- ...
|
|
137
|
-
|
|
138
|
-
## 자체 게이트 결과
|
|
139
|
-
- tsc: OK · eslint: 0 warn · jest: N/N
|
|
140
|
-
|
|
141
|
-
## 발견 패턴
|
|
142
|
-
(짧은 설명)
|
|
143
|
-
|
|
144
|
-
```gotcha_candidates
|
|
145
|
-
[]
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
```convention_candidates
|
|
149
|
-
[]
|
|
150
|
-
```
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
상세 스키마 → [공통 가이드 — dynamic-registration](../_shared/dynamic-registration.md)
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# NestJS MSA Patterns
|
|
2
|
-
|
|
3
|
-
## 모노레포 구조
|
|
4
|
-
|
|
5
|
-
```
|
|
6
|
-
apps/
|
|
7
|
-
├── gateway/ # API Gateway (port 3000)
|
|
8
|
-
│ └── src/
|
|
9
|
-
│ ├── main.ts # bootstrap, CORS
|
|
10
|
-
│ ├── app.module.ts # ClientsModule 등록
|
|
11
|
-
│ ├── controllers/ # HTTP → MessagePattern 변환
|
|
12
|
-
│ └── guards/
|
|
13
|
-
├── service-[name]/ # Microservice (TCP)
|
|
14
|
-
│ └── src/
|
|
15
|
-
│ ├── main.ts # TCP bootstrap
|
|
16
|
-
│ ├── [name].module.ts
|
|
17
|
-
│ ├── [name].controller.ts # @MessagePattern 핸들러
|
|
18
|
-
│ ├── [name].service.ts
|
|
19
|
-
│ └── entities/
|
|
20
|
-
└── web/ # (Frontend — 별도 에이전트)
|
|
21
|
-
|
|
22
|
-
libs/
|
|
23
|
-
├── shared-dto/ # api-contract.json에서 파생
|
|
24
|
-
├── database/ # TypeORM/Prisma 설정
|
|
25
|
-
└── common/ # 필터, 인터셉터, 가드
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 통합 러너 (package.json)
|
|
29
|
-
|
|
30
|
-
```json
|
|
31
|
-
{
|
|
32
|
-
"scripts": {
|
|
33
|
-
"dev": "concurrently \"npm run start:gateway\" \"npm run start:service-a\"",
|
|
34
|
-
"start:gateway": "nest start gateway --watch",
|
|
35
|
-
"start:service-a": "nest start service-a --watch"
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Gateway ↔ Microservice 패턴
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
// apps/gateway/src/controllers/items.controller.ts
|
|
44
|
-
@Controller('api/v1/items')
|
|
45
|
-
export class ItemsController {
|
|
46
|
-
constructor(@Inject('SERVICE_A') private readonly serviceA: ClientProxy) {}
|
|
47
|
-
|
|
48
|
-
@Post()
|
|
49
|
-
create(@Body() dto: CreateItemDto) {
|
|
50
|
-
return this.serviceA.send({ cmd: 'create_item' }, dto);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// apps/service-a/src/items.controller.ts
|
|
55
|
-
@Controller()
|
|
56
|
-
export class ItemsController {
|
|
57
|
-
@MessagePattern({ cmd: 'create_item' })
|
|
58
|
-
create(dto: CreateItemDto) {
|
|
59
|
-
return this.service.create(dto);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## 규칙
|
|
65
|
-
|
|
66
|
-
- Gateway = 라우팅 + 검증만, 비즈니스 로직은 서비스에서
|
|
67
|
-
- 서비스 간 통신: `ClientProxy.send()` (요청-응답)
|
|
68
|
-
- CORS: Gateway에서 `localhost:5173` 허용
|
|
69
|
-
- 각 서비스 독립 기동 가능해야 함
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Sprint Contract — Backend Section Template
|
|
2
|
-
|
|
3
|
-
```markdown
|
|
4
|
-
## Backend Scope
|
|
5
|
-
|
|
6
|
-
### Services Affected
|
|
7
|
-
| Service | Port | Changes |
|
|
8
|
-
|---------|------|---------|
|
|
9
|
-
| gateway | 3000 | EP-XXX 라우팅 추가 |
|
|
10
|
-
| service-a | 3001 | message_pattern 핸들러 추가 |
|
|
11
|
-
|
|
12
|
-
### Message Patterns
|
|
13
|
-
| Pattern | From | To | Payload | Response |
|
|
14
|
-
|---------|------|----|---------|----------|
|
|
15
|
-
| create_item | gateway | service-a | CreateItemDto | ItemResponse |
|
|
16
|
-
|
|
17
|
-
### Database Schema Changes
|
|
18
|
-
- Service-A DB: items (id, name, description, created_at, updated_at)
|
|
19
|
-
|
|
20
|
-
### Shared DTOs (libs/shared-dto)
|
|
21
|
-
- CreateItemDto: { name: string, description?: string }
|
|
22
|
-
- ItemResponse: { id: number, name: string, created_at: string }
|
|
23
|
-
|
|
24
|
-
### Success Criteria (Backend)
|
|
25
|
-
1. [ ] Gateway → POST /api/v1/items → service-a → 201
|
|
26
|
-
2. [ ] 유효성 검증 — 빈 name → 400
|
|
27
|
-
3. [ ] 서비스 간 TCP 통신 정상
|
|
28
|
-
4. [ ] Jest 통과
|
|
29
|
-
|
|
30
|
-
### Test Commands
|
|
31
|
-
curl -X POST http://localhost:3000/api/v1/items -H "Content-Type: application/json" -d '{"name":"Test"}'
|
|
32
|
-
```
|