aios-core 2.1.6 → 2.2.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/.aios-core/core/README.md +229 -229
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/core/data/aios-kb.md +923 -923
- package/.aios-core/core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/core/docs/component-creation-guide.md +457 -457
- package/.aios-core/core/docs/session-update-pattern.md +307 -307
- package/.aios-core/core/docs/template-syntax.md +266 -266
- package/.aios-core/core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/core/elicitation/elicitation-engine.js +1 -1
- package/.aios-core/core/index.esm.js +42 -42
- package/.aios-core/core/index.js +1 -1
- package/.aios-core/core/migration/migration-config.yaml +83 -83
- package/.aios-core/core/migration/module-mapping.yaml +89 -89
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +1 -1
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -86
- package/.aios-core/core/registry/README.md +179 -179
- package/.aios-core/core/utils/security-utils.js +1 -1
- package/.aios-core/core-config.yaml +391 -382
- package/.aios-core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/data/aios-kb.md +923 -923
- package/.aios-core/data/technical-preferences.md +3 -3
- package/.aios-core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/development/README.md +142 -142
- package/.aios-core/development/agent-teams/team-all.yaml +15 -15
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -18
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -10
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -13
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -155
- package/.aios-core/development/agents/aios-master.md +339 -339
- package/.aios-core/development/agents/analyst.md +195 -195
- package/.aios-core/development/agents/architect.md +359 -359
- package/.aios-core/development/agents/data-engineer.md +468 -468
- package/.aios-core/development/agents/dev.md +390 -390
- package/.aios-core/development/agents/devops.md +398 -398
- package/.aios-core/development/agents/pm.md +198 -198
- package/.aios-core/development/agents/po.md +256 -256
- package/.aios-core/development/agents/qa.md +312 -312
- package/.aios-core/development/agents/sm.md +220 -220
- package/.aios-core/development/agents/ux-design-expert.md +451 -451
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -85
- package/.aios-core/development/tasks/add-mcp.md +319 -319
- package/.aios-core/development/tasks/advanced-elicitation.md +318 -318
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +341 -341
- package/.aios-core/development/tasks/analyze-framework.md +696 -696
- package/.aios-core/development/tasks/analyze-performance.md +637 -637
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -340
- package/.aios-core/development/tasks/architect-analyze-impact.md +826 -826
- package/.aios-core/development/tasks/audit-codebase.md +429 -429
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -270
- package/.aios-core/development/tasks/audit-utilities.md +358 -358
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -286
- package/.aios-core/development/tasks/brownfield-create-epic.md +485 -485
- package/.aios-core/development/tasks/brownfield-create-story.md +356 -356
- package/.aios-core/development/tasks/build-component.md +478 -478
- package/.aios-core/development/tasks/calculate-roi.md +455 -455
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -764
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -670
- package/.aios-core/development/tasks/collaborative-edit.md +1108 -1108
- package/.aios-core/development/tasks/compose-molecule.md +284 -284
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -414
- package/.aios-core/development/tasks/correct-course.md +279 -279
- package/.aios-core/development/tasks/create-agent.md +321 -321
- package/.aios-core/development/tasks/create-brownfield-story.md +726 -726
- package/.aios-core/development/tasks/create-deep-research-prompt.md +498 -498
- package/.aios-core/development/tasks/create-doc.md +316 -316
- package/.aios-core/development/tasks/create-next-story.md +774 -774
- package/.aios-core/development/tasks/create-suite.md +283 -283
- package/.aios-core/development/tasks/create-task.md +371 -371
- package/.aios-core/development/tasks/create-workflow.md +370 -370
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -572
- package/.aios-core/development/tasks/db-apply-migration.md +381 -381
- package/.aios-core/development/tasks/db-bootstrap.md +642 -642
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -693
- package/.aios-core/development/tasks/db-dry-run.md +293 -293
- package/.aios-core/development/tasks/db-env-check.md +260 -260
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -663
- package/.aios-core/development/tasks/db-explain.md +631 -631
- package/.aios-core/development/tasks/db-impersonate.md +495 -495
- package/.aios-core/development/tasks/db-load-csv.md +593 -593
- package/.aios-core/development/tasks/db-policy-apply.md +653 -653
- package/.aios-core/development/tasks/db-rls-audit.md +411 -411
- package/.aios-core/development/tasks/db-rollback.md +739 -739
- package/.aios-core/development/tasks/db-run-sql.md +613 -613
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -1011
- package/.aios-core/development/tasks/db-seed.md +390 -390
- package/.aios-core/development/tasks/db-smoke-test.md +351 -351
- package/.aios-core/development/tasks/db-snapshot.md +569 -569
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -712
- package/.aios-core/development/tasks/db-verify-order.md +515 -515
- package/.aios-core/development/tasks/deprecate-component.md +956 -956
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -318
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -469
- package/.aios-core/development/tasks/dev-develop-story.md +846 -846
- package/.aios-core/development/tasks/dev-improve-code-quality.md +872 -872
- package/.aios-core/development/tasks/dev-optimize-performance.md +1033 -1033
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +870 -870
- package/.aios-core/development/tasks/dev-validate-next-story.md +348 -348
- package/.aios-core/development/tasks/document-project.md +552 -552
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -1311
- package/.aios-core/development/tasks/execute-checklist.md +301 -301
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -274
- package/.aios-core/development/tasks/extend-pattern.md +269 -269
- package/.aios-core/development/tasks/extract-tokens.md +467 -467
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -518
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +260 -260
- package/.aios-core/development/tasks/generate-documentation.md +284 -284
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -522
- package/.aios-core/development/tasks/generate-shock-report.md +501 -501
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -427
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -733
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -374
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -483
- package/.aios-core/development/tasks/improve-self.md +822 -822
- package/.aios-core/development/tasks/index-docs.md +387 -387
- package/.aios-core/development/tasks/init-project-status.md +506 -506
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -314
- package/.aios-core/development/tasks/kb-mode-interaction.md +283 -283
- package/.aios-core/development/tasks/learn-patterns.md +900 -900
- package/.aios-core/development/tasks/mcp-workflow.md +437 -437
- package/.aios-core/development/tasks/modify-agent.md +381 -381
- package/.aios-core/development/tasks/modify-task.md +424 -424
- package/.aios-core/development/tasks/modify-workflow.md +465 -465
- package/.aios-core/development/tasks/po-backlog-add.md +370 -370
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -523
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -540
- package/.aios-core/development/tasks/po-pull-story.md +316 -316
- package/.aios-core/development/tasks/po-stories-index.md +351 -351
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -457
- package/.aios-core/development/tasks/po-sync-story.md +303 -303
- package/.aios-core/development/tasks/pr-automation.md +701 -701
- package/.aios-core/development/tasks/propose-modification.md +842 -842
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -425
- package/.aios-core/development/tasks/qa-gate.md +373 -373
- package/.aios-core/development/tasks/qa-generate-tests.md +1174 -1174
- package/.aios-core/development/tasks/qa-nfr-assess.md +557 -557
- package/.aios-core/development/tasks/qa-review-proposal.md +1157 -1157
- package/.aios-core/development/tasks/qa-review-story.md +682 -682
- package/.aios-core/development/tasks/qa-risk-profile.md +566 -566
- package/.aios-core/development/tasks/qa-run-tests.md +277 -277
- package/.aios-core/development/tasks/qa-test-design.md +387 -387
- package/.aios-core/development/tasks/qa-trace-requirements.md +476 -476
- package/.aios-core/development/tasks/release-management.md +723 -723
- package/.aios-core/development/tasks/security-audit.md +554 -554
- package/.aios-core/development/tasks/security-scan.md +790 -790
- package/.aios-core/development/tasks/setup-database.md +741 -741
- package/.aios-core/development/tasks/setup-design-system.md +462 -462
- package/.aios-core/development/tasks/setup-github.md +874 -874
- package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -584
- package/.aios-core/development/tasks/setup-project-docs.md +1 -1
- package/.aios-core/development/tasks/shard-doc.md +537 -537
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -480
- package/.aios-core/development/tasks/sync-documentation.md +864 -864
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -294
- package/.aios-core/development/tasks/test-as-user.md +621 -621
- package/.aios-core/development/tasks/test-validation-task.md +171 -171
- package/.aios-core/development/tasks/undo-last.md +346 -346
- package/.aios-core/development/tasks/update-manifest.md +409 -409
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -617
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -672
- package/.aios-core/development/tasks/ux-user-research.md +559 -559
- package/.aios-core/development/tasks/validate-next-story.md +422 -422
- package/.aios-core/development/workflows/README.md +83 -83
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -297
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -187
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -197
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -333
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -206
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -235
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/docs/component-creation-guide.md +457 -457
- package/.aios-core/docs/session-update-pattern.md +307 -307
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -572
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -185
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -354
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -1963
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -821
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -1190
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -439
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -1339
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -5398
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -697
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -511
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -556
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -210
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -550
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -1414
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -523
- package/.aios-core/docs/template-syntax.md +266 -266
- package/.aios-core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/index.esm.js +15 -15
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/README.md +126 -126
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -59
- package/.aios-core/infrastructure/scripts/approval-workflow.js +1 -1
- package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
- package/.aios-core/infrastructure/scripts/component-generator.js +3 -3
- package/.aios-core/infrastructure/scripts/component-metadata.js +1 -1
- package/.aios-core/infrastructure/scripts/component-search.js +1 -1
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/improvement-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +26 -13
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.sh +108 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.sh +65 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.sh +16 -0
- package/.aios-core/infrastructure/scripts/llm-routing/usage-tracker/index.js +549 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -134
- package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
- package/.aios-core/infrastructure/scripts/template-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/template-validator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-generator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/transaction-manager.js +1 -1
- package/.aios-core/infrastructure/scripts/usage-analytics.js +1 -1
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +2 -2
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -109
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -621
- package/.aios-core/infrastructure/tools/README.md +222 -222
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -200
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -260
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -224
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -261
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -127
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -534
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -78
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -180
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -930
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -551
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -808
- package/.aios-core/install-manifest.yaml +347 -347
- package/.aios-core/product/README.md +56 -56
- package/.aios-core/product/checklists/accessibility-wcag-checklist.md +80 -0
- package/.aios-core/product/checklists/architect-checklist.md +443 -443
- package/.aios-core/product/checklists/change-checklist.md +182 -182
- package/.aios-core/product/checklists/component-quality-checklist.md +74 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -119
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -97
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -99
- package/.aios-core/product/checklists/migration-readiness-checklist.md +75 -0
- package/.aios-core/product/checklists/pattern-audit-checklist.md +88 -0
- package/.aios-core/product/checklists/pm-checklist.md +375 -375
- package/.aios-core/product/checklists/po-master-checklist.md +441 -441
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -108
- package/.aios-core/product/checklists/release-checklist.md +122 -122
- package/.aios-core/product/checklists/story-dod-checklist.md +101 -101
- package/.aios-core/product/checklists/story-draft-checklist.md +215 -215
- package/.aios-core/product/data/atomic-design-principles.md +108 -0
- package/.aios-core/product/data/brainstorming-techniques.md +36 -36
- package/.aios-core/product/data/consolidation-algorithms.md +142 -0
- package/.aios-core/product/data/database-best-practices.md +182 -0
- package/.aios-core/product/data/design-token-best-practices.md +107 -0
- package/.aios-core/product/data/elicitation-methods.md +134 -134
- package/.aios-core/product/data/integration-patterns.md +207 -0
- package/.aios-core/product/data/migration-safety-guide.md +329 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -471
- package/.aios-core/product/data/postgres-tuning-guide.md +300 -0
- package/.aios-core/product/data/rls-security-patterns.md +333 -0
- package/.aios-core/product/data/roi-calculation-guide.md +142 -0
- package/.aios-core/product/data/supabase-patterns.md +330 -0
- package/.aios-core/product/data/test-levels-framework.md +148 -148
- package/.aios-core/product/data/test-priorities-matrix.md +174 -174
- package/.aios-core/product/data/wcag-compliance-guide.md +267 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -225
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -63
- package/.aios-core/product/templates/activation-instructions-template.md +258 -258
- package/.aios-core/product/templates/agent-template.yaml +120 -120
- package/.aios-core/product/templates/architecture-tmpl.yaml +650 -650
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +155 -155
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +475 -475
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +279 -279
- package/.aios-core/product/templates/changelog-template.md +134 -134
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -152
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +292 -292
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -587
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -70
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +205 -205
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +348 -348
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +804 -804
- package/.aios-core/product/templates/github-pr-template.md +67 -67
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -140
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -221
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -84
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -92
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -85
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -86
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -104
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -80
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -53
- package/.aios-core/product/templates/market-research-tmpl.yaml +251 -251
- package/.aios-core/product/templates/mcp-workflow.js +271 -271
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -1022
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -524
- package/.aios-core/product/templates/personalized-agent-template.md +258 -258
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -340
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -905
- package/.aios-core/product/templates/personalized-task-template.md +344 -344
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -322
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -460
- package/.aios-core/product/templates/prd-tmpl.yaml +201 -201
- package/.aios-core/product/templates/project-brief-tmpl.yaml +220 -220
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -240
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -1203
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -428
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -219
- package/.aios-core/product/templates/story-tmpl.yaml +331 -331
- package/.aios-core/product/templates/task-execution-report.md +495 -495
- package/.aios-core/product/templates/task-template.md +122 -122
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -395
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -305
- package/.aios-core/product/templates/workflow-template.yaml +133 -133
- package/.aios-core/scripts/README.md +354 -354
- package/.aios-core/scripts/aios-doc-template.md +325 -325
- package/.aios-core/scripts/elicitation-engine.js +1 -1
- package/.aios-core/scripts/test-template-system.js +1 -1
- package/.aios-core/scripts/workflow-management.md +69 -69
- package/.aios-core/user-guide.md +1413 -1413
- package/.aios-core/working-in-the-brownfield.md +361 -361
- package/LICENSE +1 -1
- package/README.md +702 -703
- package/bin/aios-init-old.js +3 -3
- package/bin/aios-init-v4.js +1 -1
- package/bin/aios-init.backup-v1.1.4.js +1 -1
- package/bin/aios-init.js +3 -3
- package/bin/aios.js +279 -279
- package/bin/utils/install-errors.js +339 -339
- package/bin/utils/install-transaction.js +445 -445
- package/index.d.ts +18 -18
- package/index.esm.js +20 -20
- package/index.js +6 -6
- package/package.json +8 -10
- package/packages/installer/src/config/templates/env-template.js +27 -4
- package/packages/installer/src/detection/detect-project-type.js +81 -81
- package/packages/installer/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +8 -8
- package/src/config/ide-configs.js +1 -1
- package/src/wizard/feedback.js +2 -2
- package/src/wizard/index.js +1 -1
- package/src/wizard/validation/report-generator.js +1 -1
- package/src/wizard/validation/troubleshooting-system.js +13 -13
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +0 -122
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +0 -89
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +0 -780
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +0 -950
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +0 -425
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +0 -132
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +0 -381
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +0 -203
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +0 -24
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +0 -51
- package/.aios-core/tasks/find-component.md.legacy +0 -391
- package/.aios-core/tasks/generate-commit-message.md.legacy +0 -426
- package/.aios-core/tasks/generate-migration.md.legacy +0 -382
- package/.aios-core/tasks/rollback-modification.md.legacy +0 -307
- package/.aios-core/tasks/update-tests.md.legacy +0 -283
|
@@ -1,540 +1,540 @@
|
|
|
1
|
-
---
|
|
2
|
-
tools:
|
|
3
|
-
- clickup # Required for ClickUp integration
|
|
4
|
-
checklists:
|
|
5
|
-
- po-master-checklist.md
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# pull-story-from-clickup
|
|
9
|
-
|
|
10
|
-
**Purpose:** Pull complete story updates from ClickUp to local file, including task completions, description changes, and status updates. This is the **reverse direction** of sync-story-to-clickup.
|
|
11
|
-
|
|
12
|
-
**When to Use:**
|
|
13
|
-
- After making changes directly in ClickUp UI (marking checkboxes, updating description)
|
|
14
|
-
- When you need to pull latest state from ClickUp to continue work locally
|
|
15
|
-
- After collaborators update the ClickUp task
|
|
16
|
-
- To resolve sync conflicts (ClickUp is the source of truth)
|
|
17
|
-
|
|
18
|
-
**Important:** This overwrites local changes with ClickUp data. Use carefully if you have uncommitted local edits.
|
|
19
|
-
|
|
20
|
-
## Execution Modes
|
|
21
|
-
|
|
22
|
-
**Choose your execution mode:**
|
|
23
|
-
|
|
24
|
-
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
25
|
-
- Autonomous decision making with logging
|
|
26
|
-
- Minimal user interaction
|
|
27
|
-
- **Best for:** Simple, deterministic tasks
|
|
28
|
-
|
|
29
|
-
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
30
|
-
- Explicit decision checkpoints
|
|
31
|
-
- Educational explanations
|
|
32
|
-
- **Best for:** Learning, complex decisions
|
|
33
|
-
|
|
34
|
-
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
35
|
-
- Task analysis phase (identify all ambiguities)
|
|
36
|
-
- Zero ambiguity execution
|
|
37
|
-
- **Best for:** Ambiguous requirements, critical work
|
|
38
|
-
|
|
39
|
-
**Parameter:** `mode` (optional, default: `interactive`)
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Task Definition (AIOS Task Format V1.0)
|
|
44
|
-
|
|
45
|
-
```yaml
|
|
46
|
-
task: poPullStoryFromClickup()
|
|
47
|
-
responsável: Pax (Balancer)
|
|
48
|
-
responsavel_type: Agente
|
|
49
|
-
atomic_layer: Organism
|
|
50
|
-
|
|
51
|
-
**Entrada:**
|
|
52
|
-
- campo: task
|
|
53
|
-
tipo: string
|
|
54
|
-
origem: User Input
|
|
55
|
-
obrigatório: true
|
|
56
|
-
validação: Must be registered task
|
|
57
|
-
|
|
58
|
-
- campo: parameters
|
|
59
|
-
tipo: object
|
|
60
|
-
origem: User Input
|
|
61
|
-
obrigatório: false
|
|
62
|
-
validação: Valid task parameters
|
|
63
|
-
|
|
64
|
-
- campo: mode
|
|
65
|
-
tipo: string
|
|
66
|
-
origem: User Input
|
|
67
|
-
obrigatório: false
|
|
68
|
-
validação: yolo|interactive|pre-flight
|
|
69
|
-
|
|
70
|
-
**Saída:**
|
|
71
|
-
- campo: execution_result
|
|
72
|
-
tipo: object
|
|
73
|
-
destino: Memory
|
|
74
|
-
persistido: false
|
|
75
|
-
|
|
76
|
-
- campo: logs
|
|
77
|
-
tipo: array
|
|
78
|
-
destino: File (.ai/logs/*)
|
|
79
|
-
persistido: true
|
|
80
|
-
|
|
81
|
-
- campo: state
|
|
82
|
-
tipo: object
|
|
83
|
-
destino: State management
|
|
84
|
-
persistido: true
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## Pre-Conditions
|
|
90
|
-
|
|
91
|
-
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
92
|
-
|
|
93
|
-
**Checklist:**
|
|
94
|
-
|
|
95
|
-
```yaml
|
|
96
|
-
pre-conditions:
|
|
97
|
-
- [ ] Task is registered; required parameters provided; dependencies met
|
|
98
|
-
tipo: pre-condition
|
|
99
|
-
blocker: true
|
|
100
|
-
validação: |
|
|
101
|
-
Check task is registered; required parameters provided; dependencies met
|
|
102
|
-
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## Post-Conditions
|
|
108
|
-
|
|
109
|
-
**Purpose:** Validate execution success AFTER task completes
|
|
110
|
-
|
|
111
|
-
**Checklist:**
|
|
112
|
-
|
|
113
|
-
```yaml
|
|
114
|
-
post-conditions:
|
|
115
|
-
- [ ] Task completed; exit code 0; expected outputs created
|
|
116
|
-
tipo: post-condition
|
|
117
|
-
blocker: true
|
|
118
|
-
validação: |
|
|
119
|
-
Verify task completed; exit code 0; expected outputs created
|
|
120
|
-
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Acceptance Criteria
|
|
126
|
-
|
|
127
|
-
**Purpose:** Definitive pass/fail criteria for task completion
|
|
128
|
-
|
|
129
|
-
**Checklist:**
|
|
130
|
-
|
|
131
|
-
```yaml
|
|
132
|
-
acceptance-criteria:
|
|
133
|
-
- [ ] Task completed as expected; side effects documented
|
|
134
|
-
tipo: acceptance-criterion
|
|
135
|
-
blocker: true
|
|
136
|
-
validação: |
|
|
137
|
-
Assert task completed as expected; side effects documented
|
|
138
|
-
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## Tools
|
|
144
|
-
|
|
145
|
-
**External/shared resources used by this task:**
|
|
146
|
-
|
|
147
|
-
- **Tool:** task-runner
|
|
148
|
-
- **Purpose:** Task execution and orchestration
|
|
149
|
-
- **Source:** .aios-core/core/task-runner.js
|
|
150
|
-
|
|
151
|
-
- **Tool:** logger
|
|
152
|
-
- **Purpose:** Execution logging and error tracking
|
|
153
|
-
- **Source:** .aios-core/utils/logger.js
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Scripts
|
|
158
|
-
|
|
159
|
-
**Agent-specific code for this task:**
|
|
160
|
-
|
|
161
|
-
- **Script:** execute-task.js
|
|
162
|
-
- **Purpose:** Generic task execution wrapper
|
|
163
|
-
- **Language:** JavaScript
|
|
164
|
-
- **Location:** .aios-core/scripts/execute-task.js
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## Error Handling
|
|
169
|
-
|
|
170
|
-
**Strategy:** retry
|
|
171
|
-
|
|
172
|
-
**Common Errors:**
|
|
173
|
-
|
|
174
|
-
1. **Error:** Task Not Found
|
|
175
|
-
- **Cause:** Specified task not registered in system
|
|
176
|
-
- **Resolution:** Verify task name and registration
|
|
177
|
-
- **Recovery:** List available tasks, suggest similar
|
|
178
|
-
|
|
179
|
-
2. **Error:** Invalid Parameters
|
|
180
|
-
- **Cause:** Task parameters do not match expected schema
|
|
181
|
-
- **Resolution:** Validate parameters against task definition
|
|
182
|
-
- **Recovery:** Provide parameter template, reject execution
|
|
183
|
-
|
|
184
|
-
3. **Error:** Execution Timeout
|
|
185
|
-
- **Cause:** Task exceeds maximum execution time
|
|
186
|
-
- **Resolution:** Optimize task or increase timeout
|
|
187
|
-
- **Recovery:** Kill task, cleanup resources, log state
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## Performance
|
|
192
|
-
|
|
193
|
-
**Expected Metrics:**
|
|
194
|
-
|
|
195
|
-
```yaml
|
|
196
|
-
duration_expected: 5-15 min (estimated)
|
|
197
|
-
cost_estimated: $0.003-0.010
|
|
198
|
-
token_usage: ~3,000-10,000 tokens
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
**Optimization Notes:**
|
|
202
|
-
- Break into smaller workflows; implement checkpointing; use async processing where possible
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## Metadata
|
|
207
|
-
|
|
208
|
-
```yaml
|
|
209
|
-
story: N/A
|
|
210
|
-
version: 1.0.0
|
|
211
|
-
dependencies:
|
|
212
|
-
- N/A
|
|
213
|
-
tags:
|
|
214
|
-
- product-management
|
|
215
|
-
- planning
|
|
216
|
-
updated_at: 2025-11-17
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
## Task Inputs
|
|
223
|
-
|
|
224
|
-
```yaml
|
|
225
|
-
required:
|
|
226
|
-
- story_id: '{epic}.{story}' # e.g., "99.2" or "5.2.2"
|
|
227
|
-
|
|
228
|
-
optional:
|
|
229
|
-
- force: false # If true, pull even if last_sync indicates local is newer
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
## Prerequisites
|
|
233
|
-
|
|
234
|
-
- Story file must exist in `docs/stories/`
|
|
235
|
-
- Story must have ClickUp metadata in frontmatter (clickup.task_id)
|
|
236
|
-
- ClickUp MCP tool must be available and authenticated
|
|
237
|
-
|
|
238
|
-
## Task Execution Steps
|
|
239
|
-
|
|
240
|
-
### Step 1: Locate Story File
|
|
241
|
-
|
|
242
|
-
- Find story file in `docs/stories/` matching story_id pattern
|
|
243
|
-
- Expected format: `{epic}.{story}.*.md`
|
|
244
|
-
- If multiple files found, show list and ask user to clarify
|
|
245
|
-
- If no file found, ERROR and exit
|
|
246
|
-
|
|
247
|
-
### Step 2: Get ClickUp Task Data
|
|
248
|
-
|
|
249
|
-
```javascript
|
|
250
|
-
const clickupTool = await getClickUpTool();
|
|
251
|
-
|
|
252
|
-
// Get complete task data including description
|
|
253
|
-
const task = await clickupTool.getTask({
|
|
254
|
-
taskId: storyData.frontmatter.clickup.task_id
|
|
255
|
-
});
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
**What to extract from ClickUp task:**
|
|
259
|
-
- Task description (contains full story markdown)
|
|
260
|
-
- Story-status custom field
|
|
261
|
-
- Task native status
|
|
262
|
-
- Tags
|
|
263
|
-
- Custom fields (epic_number, story_number, story_file_path)
|
|
264
|
-
|
|
265
|
-
### Step 3: Parse ClickUp Description
|
|
266
|
-
|
|
267
|
-
The ClickUp task description contains the **complete story markdown**. We need to:
|
|
268
|
-
|
|
269
|
-
1. Extract the markdown from `task.description`
|
|
270
|
-
2. Parse sections:
|
|
271
|
-
- Story Statement
|
|
272
|
-
- Context
|
|
273
|
-
- Acceptance Criteria (with checkboxes)
|
|
274
|
-
- Tasks/Subtasks (with checkboxes)
|
|
275
|
-
- Dev Notes
|
|
276
|
-
- Testing
|
|
277
|
-
- File List
|
|
278
|
-
- QA Results
|
|
279
|
-
- Notes
|
|
280
|
-
- Change Log
|
|
281
|
-
|
|
282
|
-
3. **Critical:** Preserve checkbox states from ClickUp
|
|
283
|
-
- `- [x] Task` = completed
|
|
284
|
-
- `- [ ] Task` = pending
|
|
285
|
-
|
|
286
|
-
### Step 4: Merge with Local Frontmatter
|
|
287
|
-
|
|
288
|
-
**DO NOT overwrite entire file** - preserve frontmatter structure:
|
|
289
|
-
|
|
290
|
-
```javascript
|
|
291
|
-
const localFrontmatter = storyData.frontmatter;
|
|
292
|
-
const clickupFrontmatter = {
|
|
293
|
-
version: localFrontmatter.version,
|
|
294
|
-
story_id: localFrontmatter.story_id,
|
|
295
|
-
epic_id: localFrontmatter.epic_id,
|
|
296
|
-
title: task.name,
|
|
297
|
-
status: mapStatusFromClickUp(task.custom_fields.find(f => f.name === 'story-status').value),
|
|
298
|
-
created: localFrontmatter.created,
|
|
299
|
-
updated: new Date().toISOString().split('T')[0], // Today's date
|
|
300
|
-
clickup: {
|
|
301
|
-
task_id: task.id,
|
|
302
|
-
epic_task_id: task.parent,
|
|
303
|
-
list: task.list.name,
|
|
304
|
-
list_id: task.list.id,
|
|
305
|
-
url: task.url,
|
|
306
|
-
last_sync: new Date().toISOString(),
|
|
307
|
-
custom_fields: {
|
|
308
|
-
epic_number: task.custom_fields.find(f => f.name === 'epic-number')?.value || localFrontmatter.clickup.custom_fields.epic_number,
|
|
309
|
-
story_number: task.custom_fields.find(f => f.name === 'story-number')?.value || localFrontmatter.clickup.custom_fields.story_number,
|
|
310
|
-
story_file_path: task.custom_fields.find(f => f.name === 'story-file-path')?.value || localFrontmatter.clickup.custom_fields.story_file_path,
|
|
311
|
-
'story-status': task.custom_fields.find(f => f.name === 'story-status')?.value
|
|
312
|
-
}
|
|
313
|
-
},
|
|
314
|
-
tags: task.tags.map(t => t.name)
|
|
315
|
-
};
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
### Step 5: Reconstruct Story File
|
|
319
|
-
|
|
320
|
-
Build complete story markdown:
|
|
321
|
-
|
|
322
|
-
```markdown
|
|
323
|
-
# Story {story_id}: {title}
|
|
324
|
-
|
|
325
|
-
```yaml
|
|
326
|
-
{frontmatter}
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
{story body from ClickUp description}
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
**Important:** Use the ClickUp description as the **source of truth** for the story body.
|
|
333
|
-
|
|
334
|
-
### Step 6: Write Updated Story File
|
|
335
|
-
|
|
336
|
-
```javascript
|
|
337
|
-
const { saveStoryFile } = require('../../common/scripts/story-manager');
|
|
338
|
-
|
|
339
|
-
// Save with skipSync=true to avoid circular sync
|
|
340
|
-
await saveStoryFile(storyFilePath, newContent, true);
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
**Why skipSync=true?**
|
|
344
|
-
- We just pulled from ClickUp, so we don't want to immediately push back
|
|
345
|
-
- Prevents infinite sync loops
|
|
346
|
-
|
|
347
|
-
### Step 7: Display Sync Summary
|
|
348
|
-
|
|
349
|
-
```markdown
|
|
350
|
-
✅ Story {story_id} pulled from ClickUp
|
|
351
|
-
|
|
352
|
-
**Task ID:** {task_id}
|
|
353
|
-
**Task URL:** {url}
|
|
354
|
-
**Last Sync:** {timestamp}
|
|
355
|
-
|
|
356
|
-
**Changes Pulled:**
|
|
357
|
-
- Status: {old_status} → {new_status} (if changed)
|
|
358
|
-
- Tasks completed: {count of checkboxes changed from [ ] to [x]}
|
|
359
|
-
- Tasks reopened: {count of checkboxes changed from [x] to [ ]}
|
|
360
|
-
- Description updated: {yes/no}
|
|
361
|
-
- Tags updated: {changes}
|
|
362
|
-
|
|
363
|
-
**Local File Updated:**
|
|
364
|
-
- Frontmatter: ✓
|
|
365
|
-
- Story Body: ✓
|
|
366
|
-
- Checkbox States: ✓
|
|
367
|
-
- Last Sync Timestamp: ✓
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
## Error Handling
|
|
371
|
-
|
|
372
|
-
**Error: Story file not found**
|
|
373
|
-
```
|
|
374
|
-
❌ Story file not found for ID: {story_id}
|
|
375
|
-
|
|
376
|
-
Please check:
|
|
377
|
-
- Story ID format correct? (e.g., "99.2" not "Story 99.2")
|
|
378
|
-
- Story file exists in docs/stories/?
|
|
379
|
-
- File naming follows pattern: {epic}.{story}.*.md
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
**Error: No ClickUp metadata**
|
|
383
|
-
```
|
|
384
|
-
❌ Story has no ClickUp integration
|
|
385
|
-
|
|
386
|
-
This story was not created via ClickUp workflow and has no task_id.
|
|
387
|
-
Cannot pull from ClickUp without task_id in frontmatter.
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
**Error: ClickUp task not found**
|
|
391
|
-
```
|
|
392
|
-
❌ ClickUp task not found: {task_id}
|
|
393
|
-
|
|
394
|
-
Possible reasons:
|
|
395
|
-
- Task was deleted from ClickUp
|
|
396
|
-
- Task ID is incorrect in frontmatter
|
|
397
|
-
- You don't have access to this task
|
|
398
|
-
- ClickUp API authentication failed
|
|
399
|
-
|
|
400
|
-
Verify task exists: {task_url}
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
**Error: Description empty or malformed**
|
|
404
|
-
```
|
|
405
|
-
❌ ClickUp task description is empty or malformed
|
|
406
|
-
|
|
407
|
-
The task description should contain the full story markdown.
|
|
408
|
-
This may indicate:
|
|
409
|
-
- Task was created manually in ClickUp (not via story-manager)
|
|
410
|
-
- Description was accidentally cleared
|
|
411
|
-
- Task needs to be synced from local first
|
|
412
|
-
|
|
413
|
-
Recommendation:
|
|
414
|
-
1. Run: *sync-story {story_id}
|
|
415
|
-
2. Then try pulling again
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
## Usage Examples
|
|
419
|
-
|
|
420
|
-
### Basic Pull
|
|
421
|
-
```
|
|
422
|
-
*pull-story 99.2
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
### Force Pull (even if local is newer)
|
|
426
|
-
```
|
|
427
|
-
*pull-story 5.2.2 --force
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
### After ClickUp Updates
|
|
431
|
-
```
|
|
432
|
-
# Scenario: You marked checkboxes in ClickUp UI
|
|
433
|
-
1. Run: *pull-story {story_id}
|
|
434
|
-
2. Review changes shown in summary
|
|
435
|
-
3. Local file now matches ClickUp
|
|
436
|
-
4. Continue working locally
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
## Integration Notes
|
|
440
|
-
|
|
441
|
-
**For PO Agent:**
|
|
442
|
-
- Add to po.md commands: `pull-story {story}`: Pull story updates from ClickUp
|
|
443
|
-
- Use after collaborators update ClickUp tasks
|
|
444
|
-
- Use before starting validation if task was modified in ClickUp
|
|
445
|
-
|
|
446
|
-
**For Dev Agent:**
|
|
447
|
-
- Add to dev.md commands: `pull-story {story}`: Pull story updates from ClickUp
|
|
448
|
-
- Use at start of work session to get latest state
|
|
449
|
-
- Use after QA or PO updates task in ClickUp
|
|
450
|
-
|
|
451
|
-
**For QA Agent:**
|
|
452
|
-
- Add to qa.md commands: `pull-story {story}`: Pull story updates from ClickUp
|
|
453
|
-
- Use before starting review to get latest state
|
|
454
|
-
- Use after Dev marks tasks complete in ClickUp
|
|
455
|
-
|
|
456
|
-
**Best Practice:**
|
|
457
|
-
- Pull at the **start** of work sessions
|
|
458
|
-
- Push (*sync-story) at the **end** of work sessions
|
|
459
|
-
- ClickUp is the source of truth for collaborative updates
|
|
460
|
-
- Local file is the source of truth for agent work
|
|
461
|
-
|
|
462
|
-
## Workflow Examples
|
|
463
|
-
|
|
464
|
-
### Collaborative Workflow
|
|
465
|
-
```
|
|
466
|
-
1. PO updates story in ClickUp UI (adds acceptance criteria)
|
|
467
|
-
2. Dev pulls story: *pull-story 5.2.2
|
|
468
|
-
3. Dev implements locally, marks tasks done
|
|
469
|
-
4. Dev pushes to ClickUp: *sync-story 5.2.2
|
|
470
|
-
5. QA pulls latest: *pull-story 5.2.2
|
|
471
|
-
6. QA reviews and updates locally
|
|
472
|
-
7. QA pushes results: *sync-story 5.2.2
|
|
473
|
-
```
|
|
474
|
-
|
|
475
|
-
### Conflict Resolution
|
|
476
|
-
```
|
|
477
|
-
# If local and ClickUp diverged:
|
|
478
|
-
|
|
479
|
-
Option 1: ClickUp wins (recommended for collaborative work)
|
|
480
|
-
*pull-story 5.2.2 --force
|
|
481
|
-
|
|
482
|
-
Option 2: Local wins (when you have important uncommitted work)
|
|
483
|
-
*sync-story 5.2.2 --force
|
|
484
|
-
|
|
485
|
-
Option 3: Manual merge (complex changes)
|
|
486
|
-
1. Backup local file
|
|
487
|
-
2. Pull from ClickUp
|
|
488
|
-
3. Compare with backup
|
|
489
|
-
4. Manually merge important changes
|
|
490
|
-
5. Push back to ClickUp
|
|
491
|
-
```
|
|
492
|
-
|
|
493
|
-
## Technical Implementation
|
|
494
|
-
|
|
495
|
-
**Dependencies:**
|
|
496
|
-
- `common/scripts/story-manager.js` - saveStoryFile, parseStoryFile
|
|
497
|
-
- `common/scripts/status-mapper.js` - mapStatusFromClickUp
|
|
498
|
-
- ClickUp MCP tool (via global.mcp__clickup__* or tool-resolver)
|
|
499
|
-
|
|
500
|
-
**Process Flow:**
|
|
501
|
-
```
|
|
502
|
-
Task invoked
|
|
503
|
-
↓
|
|
504
|
-
Read local story file
|
|
505
|
-
↓
|
|
506
|
-
Extract task_id from frontmatter
|
|
507
|
-
↓
|
|
508
|
-
Fetch complete task from ClickUp (via MCP tool)
|
|
509
|
-
↓
|
|
510
|
-
Parse ClickUp description (story markdown)
|
|
511
|
-
↓
|
|
512
|
-
Merge frontmatter (preserve local structure, update from ClickUp)
|
|
513
|
-
↓
|
|
514
|
-
Reconstruct complete story file
|
|
515
|
-
↓
|
|
516
|
-
├─ Frontmatter (merged)
|
|
517
|
-
├─ Story body (from ClickUp description)
|
|
518
|
-
└─ Checkbox states (from ClickUp description)
|
|
519
|
-
↓
|
|
520
|
-
Write to local file (skipSync=true)
|
|
521
|
-
↓
|
|
522
|
-
Display sync summary
|
|
523
|
-
```
|
|
524
|
-
|
|
525
|
-
## Testing This Task
|
|
526
|
-
|
|
527
|
-
**Manual Test:**
|
|
528
|
-
1. Mark checkboxes in ClickUp UI for Story 99.2
|
|
529
|
-
2. Run: `*pull-story 99.2`
|
|
530
|
-
3. Verify:
|
|
531
|
-
- Checkboxes updated in local file
|
|
532
|
-
- last_sync timestamp updated
|
|
533
|
-
- Status changes reflected
|
|
534
|
-
- Summary shows correct change count
|
|
535
|
-
|
|
536
|
-
**Automated Test:** `tests/tasks/pull-story-from-clickup.test.js`
|
|
537
|
-
|
|
538
|
-
---
|
|
539
|
-
|
|
540
|
-
*Task created to provide reverse synchronization from ClickUp to local story files*
|
|
1
|
+
---
|
|
2
|
+
tools:
|
|
3
|
+
- clickup # Required for ClickUp integration
|
|
4
|
+
checklists:
|
|
5
|
+
- po-master-checklist.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# pull-story-from-clickup
|
|
9
|
+
|
|
10
|
+
**Purpose:** Pull complete story updates from ClickUp to local file, including task completions, description changes, and status updates. This is the **reverse direction** of sync-story-to-clickup.
|
|
11
|
+
|
|
12
|
+
**When to Use:**
|
|
13
|
+
- After making changes directly in ClickUp UI (marking checkboxes, updating description)
|
|
14
|
+
- When you need to pull latest state from ClickUp to continue work locally
|
|
15
|
+
- After collaborators update the ClickUp task
|
|
16
|
+
- To resolve sync conflicts (ClickUp is the source of truth)
|
|
17
|
+
|
|
18
|
+
**Important:** This overwrites local changes with ClickUp data. Use carefully if you have uncommitted local edits.
|
|
19
|
+
|
|
20
|
+
## Execution Modes
|
|
21
|
+
|
|
22
|
+
**Choose your execution mode:**
|
|
23
|
+
|
|
24
|
+
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
25
|
+
- Autonomous decision making with logging
|
|
26
|
+
- Minimal user interaction
|
|
27
|
+
- **Best for:** Simple, deterministic tasks
|
|
28
|
+
|
|
29
|
+
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
30
|
+
- Explicit decision checkpoints
|
|
31
|
+
- Educational explanations
|
|
32
|
+
- **Best for:** Learning, complex decisions
|
|
33
|
+
|
|
34
|
+
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
35
|
+
- Task analysis phase (identify all ambiguities)
|
|
36
|
+
- Zero ambiguity execution
|
|
37
|
+
- **Best for:** Ambiguous requirements, critical work
|
|
38
|
+
|
|
39
|
+
**Parameter:** `mode` (optional, default: `interactive`)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Task Definition (AIOS Task Format V1.0)
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
task: poPullStoryFromClickup()
|
|
47
|
+
responsável: Pax (Balancer)
|
|
48
|
+
responsavel_type: Agente
|
|
49
|
+
atomic_layer: Organism
|
|
50
|
+
|
|
51
|
+
**Entrada:**
|
|
52
|
+
- campo: task
|
|
53
|
+
tipo: string
|
|
54
|
+
origem: User Input
|
|
55
|
+
obrigatório: true
|
|
56
|
+
validação: Must be registered task
|
|
57
|
+
|
|
58
|
+
- campo: parameters
|
|
59
|
+
tipo: object
|
|
60
|
+
origem: User Input
|
|
61
|
+
obrigatório: false
|
|
62
|
+
validação: Valid task parameters
|
|
63
|
+
|
|
64
|
+
- campo: mode
|
|
65
|
+
tipo: string
|
|
66
|
+
origem: User Input
|
|
67
|
+
obrigatório: false
|
|
68
|
+
validação: yolo|interactive|pre-flight
|
|
69
|
+
|
|
70
|
+
**Saída:**
|
|
71
|
+
- campo: execution_result
|
|
72
|
+
tipo: object
|
|
73
|
+
destino: Memory
|
|
74
|
+
persistido: false
|
|
75
|
+
|
|
76
|
+
- campo: logs
|
|
77
|
+
tipo: array
|
|
78
|
+
destino: File (.ai/logs/*)
|
|
79
|
+
persistido: true
|
|
80
|
+
|
|
81
|
+
- campo: state
|
|
82
|
+
tipo: object
|
|
83
|
+
destino: State management
|
|
84
|
+
persistido: true
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Pre-Conditions
|
|
90
|
+
|
|
91
|
+
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
92
|
+
|
|
93
|
+
**Checklist:**
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
pre-conditions:
|
|
97
|
+
- [ ] Task is registered; required parameters provided; dependencies met
|
|
98
|
+
tipo: pre-condition
|
|
99
|
+
blocker: true
|
|
100
|
+
validação: |
|
|
101
|
+
Check task is registered; required parameters provided; dependencies met
|
|
102
|
+
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Post-Conditions
|
|
108
|
+
|
|
109
|
+
**Purpose:** Validate execution success AFTER task completes
|
|
110
|
+
|
|
111
|
+
**Checklist:**
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
post-conditions:
|
|
115
|
+
- [ ] Task completed; exit code 0; expected outputs created
|
|
116
|
+
tipo: post-condition
|
|
117
|
+
blocker: true
|
|
118
|
+
validação: |
|
|
119
|
+
Verify task completed; exit code 0; expected outputs created
|
|
120
|
+
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Acceptance Criteria
|
|
126
|
+
|
|
127
|
+
**Purpose:** Definitive pass/fail criteria for task completion
|
|
128
|
+
|
|
129
|
+
**Checklist:**
|
|
130
|
+
|
|
131
|
+
```yaml
|
|
132
|
+
acceptance-criteria:
|
|
133
|
+
- [ ] Task completed as expected; side effects documented
|
|
134
|
+
tipo: acceptance-criterion
|
|
135
|
+
blocker: true
|
|
136
|
+
validação: |
|
|
137
|
+
Assert task completed as expected; side effects documented
|
|
138
|
+
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Tools
|
|
144
|
+
|
|
145
|
+
**External/shared resources used by this task:**
|
|
146
|
+
|
|
147
|
+
- **Tool:** task-runner
|
|
148
|
+
- **Purpose:** Task execution and orchestration
|
|
149
|
+
- **Source:** .aios-core/core/task-runner.js
|
|
150
|
+
|
|
151
|
+
- **Tool:** logger
|
|
152
|
+
- **Purpose:** Execution logging and error tracking
|
|
153
|
+
- **Source:** .aios-core/utils/logger.js
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Scripts
|
|
158
|
+
|
|
159
|
+
**Agent-specific code for this task:**
|
|
160
|
+
|
|
161
|
+
- **Script:** execute-task.js
|
|
162
|
+
- **Purpose:** Generic task execution wrapper
|
|
163
|
+
- **Language:** JavaScript
|
|
164
|
+
- **Location:** .aios-core/scripts/execute-task.js
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Error Handling
|
|
169
|
+
|
|
170
|
+
**Strategy:** retry
|
|
171
|
+
|
|
172
|
+
**Common Errors:**
|
|
173
|
+
|
|
174
|
+
1. **Error:** Task Not Found
|
|
175
|
+
- **Cause:** Specified task not registered in system
|
|
176
|
+
- **Resolution:** Verify task name and registration
|
|
177
|
+
- **Recovery:** List available tasks, suggest similar
|
|
178
|
+
|
|
179
|
+
2. **Error:** Invalid Parameters
|
|
180
|
+
- **Cause:** Task parameters do not match expected schema
|
|
181
|
+
- **Resolution:** Validate parameters against task definition
|
|
182
|
+
- **Recovery:** Provide parameter template, reject execution
|
|
183
|
+
|
|
184
|
+
3. **Error:** Execution Timeout
|
|
185
|
+
- **Cause:** Task exceeds maximum execution time
|
|
186
|
+
- **Resolution:** Optimize task or increase timeout
|
|
187
|
+
- **Recovery:** Kill task, cleanup resources, log state
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Performance
|
|
192
|
+
|
|
193
|
+
**Expected Metrics:**
|
|
194
|
+
|
|
195
|
+
```yaml
|
|
196
|
+
duration_expected: 5-15 min (estimated)
|
|
197
|
+
cost_estimated: $0.003-0.010
|
|
198
|
+
token_usage: ~3,000-10,000 tokens
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Optimization Notes:**
|
|
202
|
+
- Break into smaller workflows; implement checkpointing; use async processing where possible
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Metadata
|
|
207
|
+
|
|
208
|
+
```yaml
|
|
209
|
+
story: N/A
|
|
210
|
+
version: 1.0.0
|
|
211
|
+
dependencies:
|
|
212
|
+
- N/A
|
|
213
|
+
tags:
|
|
214
|
+
- product-management
|
|
215
|
+
- planning
|
|
216
|
+
updated_at: 2025-11-17
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
## Task Inputs
|
|
223
|
+
|
|
224
|
+
```yaml
|
|
225
|
+
required:
|
|
226
|
+
- story_id: '{epic}.{story}' # e.g., "99.2" or "5.2.2"
|
|
227
|
+
|
|
228
|
+
optional:
|
|
229
|
+
- force: false # If true, pull even if last_sync indicates local is newer
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Prerequisites
|
|
233
|
+
|
|
234
|
+
- Story file must exist in `docs/stories/`
|
|
235
|
+
- Story must have ClickUp metadata in frontmatter (clickup.task_id)
|
|
236
|
+
- ClickUp MCP tool must be available and authenticated
|
|
237
|
+
|
|
238
|
+
## Task Execution Steps
|
|
239
|
+
|
|
240
|
+
### Step 1: Locate Story File
|
|
241
|
+
|
|
242
|
+
- Find story file in `docs/stories/` matching story_id pattern
|
|
243
|
+
- Expected format: `{epic}.{story}.*.md`
|
|
244
|
+
- If multiple files found, show list and ask user to clarify
|
|
245
|
+
- If no file found, ERROR and exit
|
|
246
|
+
|
|
247
|
+
### Step 2: Get ClickUp Task Data
|
|
248
|
+
|
|
249
|
+
```javascript
|
|
250
|
+
const clickupTool = await getClickUpTool();
|
|
251
|
+
|
|
252
|
+
// Get complete task data including description
|
|
253
|
+
const task = await clickupTool.getTask({
|
|
254
|
+
taskId: storyData.frontmatter.clickup.task_id
|
|
255
|
+
});
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**What to extract from ClickUp task:**
|
|
259
|
+
- Task description (contains full story markdown)
|
|
260
|
+
- Story-status custom field
|
|
261
|
+
- Task native status
|
|
262
|
+
- Tags
|
|
263
|
+
- Custom fields (epic_number, story_number, story_file_path)
|
|
264
|
+
|
|
265
|
+
### Step 3: Parse ClickUp Description
|
|
266
|
+
|
|
267
|
+
The ClickUp task description contains the **complete story markdown**. We need to:
|
|
268
|
+
|
|
269
|
+
1. Extract the markdown from `task.description`
|
|
270
|
+
2. Parse sections:
|
|
271
|
+
- Story Statement
|
|
272
|
+
- Context
|
|
273
|
+
- Acceptance Criteria (with checkboxes)
|
|
274
|
+
- Tasks/Subtasks (with checkboxes)
|
|
275
|
+
- Dev Notes
|
|
276
|
+
- Testing
|
|
277
|
+
- File List
|
|
278
|
+
- QA Results
|
|
279
|
+
- Notes
|
|
280
|
+
- Change Log
|
|
281
|
+
|
|
282
|
+
3. **Critical:** Preserve checkbox states from ClickUp
|
|
283
|
+
- `- [x] Task` = completed
|
|
284
|
+
- `- [ ] Task` = pending
|
|
285
|
+
|
|
286
|
+
### Step 4: Merge with Local Frontmatter
|
|
287
|
+
|
|
288
|
+
**DO NOT overwrite entire file** - preserve frontmatter structure:
|
|
289
|
+
|
|
290
|
+
```javascript
|
|
291
|
+
const localFrontmatter = storyData.frontmatter;
|
|
292
|
+
const clickupFrontmatter = {
|
|
293
|
+
version: localFrontmatter.version,
|
|
294
|
+
story_id: localFrontmatter.story_id,
|
|
295
|
+
epic_id: localFrontmatter.epic_id,
|
|
296
|
+
title: task.name,
|
|
297
|
+
status: mapStatusFromClickUp(task.custom_fields.find(f => f.name === 'story-status').value),
|
|
298
|
+
created: localFrontmatter.created,
|
|
299
|
+
updated: new Date().toISOString().split('T')[0], // Today's date
|
|
300
|
+
clickup: {
|
|
301
|
+
task_id: task.id,
|
|
302
|
+
epic_task_id: task.parent,
|
|
303
|
+
list: task.list.name,
|
|
304
|
+
list_id: task.list.id,
|
|
305
|
+
url: task.url,
|
|
306
|
+
last_sync: new Date().toISOString(),
|
|
307
|
+
custom_fields: {
|
|
308
|
+
epic_number: task.custom_fields.find(f => f.name === 'epic-number')?.value || localFrontmatter.clickup.custom_fields.epic_number,
|
|
309
|
+
story_number: task.custom_fields.find(f => f.name === 'story-number')?.value || localFrontmatter.clickup.custom_fields.story_number,
|
|
310
|
+
story_file_path: task.custom_fields.find(f => f.name === 'story-file-path')?.value || localFrontmatter.clickup.custom_fields.story_file_path,
|
|
311
|
+
'story-status': task.custom_fields.find(f => f.name === 'story-status')?.value
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
tags: task.tags.map(t => t.name)
|
|
315
|
+
};
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Step 5: Reconstruct Story File
|
|
319
|
+
|
|
320
|
+
Build complete story markdown:
|
|
321
|
+
|
|
322
|
+
```markdown
|
|
323
|
+
# Story {story_id}: {title}
|
|
324
|
+
|
|
325
|
+
```yaml
|
|
326
|
+
{frontmatter}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
{story body from ClickUp description}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**Important:** Use the ClickUp description as the **source of truth** for the story body.
|
|
333
|
+
|
|
334
|
+
### Step 6: Write Updated Story File
|
|
335
|
+
|
|
336
|
+
```javascript
|
|
337
|
+
const { saveStoryFile } = require('../../common/scripts/story-manager');
|
|
338
|
+
|
|
339
|
+
// Save with skipSync=true to avoid circular sync
|
|
340
|
+
await saveStoryFile(storyFilePath, newContent, true);
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**Why skipSync=true?**
|
|
344
|
+
- We just pulled from ClickUp, so we don't want to immediately push back
|
|
345
|
+
- Prevents infinite sync loops
|
|
346
|
+
|
|
347
|
+
### Step 7: Display Sync Summary
|
|
348
|
+
|
|
349
|
+
```markdown
|
|
350
|
+
✅ Story {story_id} pulled from ClickUp
|
|
351
|
+
|
|
352
|
+
**Task ID:** {task_id}
|
|
353
|
+
**Task URL:** {url}
|
|
354
|
+
**Last Sync:** {timestamp}
|
|
355
|
+
|
|
356
|
+
**Changes Pulled:**
|
|
357
|
+
- Status: {old_status} → {new_status} (if changed)
|
|
358
|
+
- Tasks completed: {count of checkboxes changed from [ ] to [x]}
|
|
359
|
+
- Tasks reopened: {count of checkboxes changed from [x] to [ ]}
|
|
360
|
+
- Description updated: {yes/no}
|
|
361
|
+
- Tags updated: {changes}
|
|
362
|
+
|
|
363
|
+
**Local File Updated:**
|
|
364
|
+
- Frontmatter: ✓
|
|
365
|
+
- Story Body: ✓
|
|
366
|
+
- Checkbox States: ✓
|
|
367
|
+
- Last Sync Timestamp: ✓
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## Error Handling
|
|
371
|
+
|
|
372
|
+
**Error: Story file not found**
|
|
373
|
+
```
|
|
374
|
+
❌ Story file not found for ID: {story_id}
|
|
375
|
+
|
|
376
|
+
Please check:
|
|
377
|
+
- Story ID format correct? (e.g., "99.2" not "Story 99.2")
|
|
378
|
+
- Story file exists in docs/stories/?
|
|
379
|
+
- File naming follows pattern: {epic}.{story}.*.md
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**Error: No ClickUp metadata**
|
|
383
|
+
```
|
|
384
|
+
❌ Story has no ClickUp integration
|
|
385
|
+
|
|
386
|
+
This story was not created via ClickUp workflow and has no task_id.
|
|
387
|
+
Cannot pull from ClickUp without task_id in frontmatter.
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
**Error: ClickUp task not found**
|
|
391
|
+
```
|
|
392
|
+
❌ ClickUp task not found: {task_id}
|
|
393
|
+
|
|
394
|
+
Possible reasons:
|
|
395
|
+
- Task was deleted from ClickUp
|
|
396
|
+
- Task ID is incorrect in frontmatter
|
|
397
|
+
- You don't have access to this task
|
|
398
|
+
- ClickUp API authentication failed
|
|
399
|
+
|
|
400
|
+
Verify task exists: {task_url}
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Error: Description empty or malformed**
|
|
404
|
+
```
|
|
405
|
+
❌ ClickUp task description is empty or malformed
|
|
406
|
+
|
|
407
|
+
The task description should contain the full story markdown.
|
|
408
|
+
This may indicate:
|
|
409
|
+
- Task was created manually in ClickUp (not via story-manager)
|
|
410
|
+
- Description was accidentally cleared
|
|
411
|
+
- Task needs to be synced from local first
|
|
412
|
+
|
|
413
|
+
Recommendation:
|
|
414
|
+
1. Run: *sync-story {story_id}
|
|
415
|
+
2. Then try pulling again
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
## Usage Examples
|
|
419
|
+
|
|
420
|
+
### Basic Pull
|
|
421
|
+
```
|
|
422
|
+
*pull-story 99.2
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Force Pull (even if local is newer)
|
|
426
|
+
```
|
|
427
|
+
*pull-story 5.2.2 --force
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### After ClickUp Updates
|
|
431
|
+
```
|
|
432
|
+
# Scenario: You marked checkboxes in ClickUp UI
|
|
433
|
+
1. Run: *pull-story {story_id}
|
|
434
|
+
2. Review changes shown in summary
|
|
435
|
+
3. Local file now matches ClickUp
|
|
436
|
+
4. Continue working locally
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
## Integration Notes
|
|
440
|
+
|
|
441
|
+
**For PO Agent:**
|
|
442
|
+
- Add to po.md commands: `pull-story {story}`: Pull story updates from ClickUp
|
|
443
|
+
- Use after collaborators update ClickUp tasks
|
|
444
|
+
- Use before starting validation if task was modified in ClickUp
|
|
445
|
+
|
|
446
|
+
**For Dev Agent:**
|
|
447
|
+
- Add to dev.md commands: `pull-story {story}`: Pull story updates from ClickUp
|
|
448
|
+
- Use at start of work session to get latest state
|
|
449
|
+
- Use after QA or PO updates task in ClickUp
|
|
450
|
+
|
|
451
|
+
**For QA Agent:**
|
|
452
|
+
- Add to qa.md commands: `pull-story {story}`: Pull story updates from ClickUp
|
|
453
|
+
- Use before starting review to get latest state
|
|
454
|
+
- Use after Dev marks tasks complete in ClickUp
|
|
455
|
+
|
|
456
|
+
**Best Practice:**
|
|
457
|
+
- Pull at the **start** of work sessions
|
|
458
|
+
- Push (*sync-story) at the **end** of work sessions
|
|
459
|
+
- ClickUp is the source of truth for collaborative updates
|
|
460
|
+
- Local file is the source of truth for agent work
|
|
461
|
+
|
|
462
|
+
## Workflow Examples
|
|
463
|
+
|
|
464
|
+
### Collaborative Workflow
|
|
465
|
+
```
|
|
466
|
+
1. PO updates story in ClickUp UI (adds acceptance criteria)
|
|
467
|
+
2. Dev pulls story: *pull-story 5.2.2
|
|
468
|
+
3. Dev implements locally, marks tasks done
|
|
469
|
+
4. Dev pushes to ClickUp: *sync-story 5.2.2
|
|
470
|
+
5. QA pulls latest: *pull-story 5.2.2
|
|
471
|
+
6. QA reviews and updates locally
|
|
472
|
+
7. QA pushes results: *sync-story 5.2.2
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
### Conflict Resolution
|
|
476
|
+
```
|
|
477
|
+
# If local and ClickUp diverged:
|
|
478
|
+
|
|
479
|
+
Option 1: ClickUp wins (recommended for collaborative work)
|
|
480
|
+
*pull-story 5.2.2 --force
|
|
481
|
+
|
|
482
|
+
Option 2: Local wins (when you have important uncommitted work)
|
|
483
|
+
*sync-story 5.2.2 --force
|
|
484
|
+
|
|
485
|
+
Option 3: Manual merge (complex changes)
|
|
486
|
+
1. Backup local file
|
|
487
|
+
2. Pull from ClickUp
|
|
488
|
+
3. Compare with backup
|
|
489
|
+
4. Manually merge important changes
|
|
490
|
+
5. Push back to ClickUp
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
## Technical Implementation
|
|
494
|
+
|
|
495
|
+
**Dependencies:**
|
|
496
|
+
- `common/scripts/story-manager.js` - saveStoryFile, parseStoryFile
|
|
497
|
+
- `common/scripts/status-mapper.js` - mapStatusFromClickUp
|
|
498
|
+
- ClickUp MCP tool (via global.mcp__clickup__* or tool-resolver)
|
|
499
|
+
|
|
500
|
+
**Process Flow:**
|
|
501
|
+
```
|
|
502
|
+
Task invoked
|
|
503
|
+
↓
|
|
504
|
+
Read local story file
|
|
505
|
+
↓
|
|
506
|
+
Extract task_id from frontmatter
|
|
507
|
+
↓
|
|
508
|
+
Fetch complete task from ClickUp (via MCP tool)
|
|
509
|
+
↓
|
|
510
|
+
Parse ClickUp description (story markdown)
|
|
511
|
+
↓
|
|
512
|
+
Merge frontmatter (preserve local structure, update from ClickUp)
|
|
513
|
+
↓
|
|
514
|
+
Reconstruct complete story file
|
|
515
|
+
↓
|
|
516
|
+
├─ Frontmatter (merged)
|
|
517
|
+
├─ Story body (from ClickUp description)
|
|
518
|
+
└─ Checkbox states (from ClickUp description)
|
|
519
|
+
↓
|
|
520
|
+
Write to local file (skipSync=true)
|
|
521
|
+
↓
|
|
522
|
+
Display sync summary
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
## Testing This Task
|
|
526
|
+
|
|
527
|
+
**Manual Test:**
|
|
528
|
+
1. Mark checkboxes in ClickUp UI for Story 99.2
|
|
529
|
+
2. Run: `*pull-story 99.2`
|
|
530
|
+
3. Verify:
|
|
531
|
+
- Checkboxes updated in local file
|
|
532
|
+
- last_sync timestamp updated
|
|
533
|
+
- Status changes reflected
|
|
534
|
+
- Summary shows correct change count
|
|
535
|
+
|
|
536
|
+
**Automated Test:** `tests/tasks/pull-story-from-clickup.test.js`
|
|
537
|
+
|
|
538
|
+
---
|
|
539
|
+
|
|
540
|
+
*Task created to provide reverse synchronization from ClickUp to local story files*
|