claude-code-pilot 2.0.0 → 3.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/README.md +76 -97
- package/bin/install.js +267 -250
- package/manifest.json +5 -18
- package/package.json +5 -7
- package/src/agents/build-error-resolver.md +114 -0
- package/src/agents/ccp-advisor-researcher.md +104 -0
- package/src/agents/ccp-assumptions-analyzer.md +105 -0
- package/{gsd/agents/gsd-codebase-mapper.md → src/agents/ccp-codebase-mapper.md} +7 -7
- package/{gsd/agents/gsd-debugger.md → src/agents/ccp-debugger.md} +125 -8
- package/{gsd/agents/gsd-executor.md → src/agents/ccp-executor.md} +31 -20
- package/{gsd/agents/gsd-integration-checker.md → src/agents/ccp-integration-checker.md} +2 -2
- package/{gsd/agents/gsd-nyquist-auditor.md → src/agents/ccp-nyquist-auditor.md} +3 -3
- package/{gsd/agents/gsd-phase-researcher.md → src/agents/ccp-phase-researcher.md} +127 -13
- package/{gsd/agents/gsd-plan-checker.md → src/agents/ccp-plan-checker.md} +57 -21
- package/{gsd/agents/gsd-planner.md → src/agents/ccp-planner.md} +61 -23
- package/{gsd/agents/gsd-project-researcher.md → src/agents/ccp-project-researcher.md} +33 -6
- package/{gsd/agents/gsd-research-synthesizer.md → src/agents/ccp-research-synthesizer.md} +11 -11
- package/{gsd/agents/gsd-roadmapper.md → src/agents/ccp-roadmapper.md} +39 -10
- package/src/agents/ccp-ui-auditor.md +439 -0
- package/src/agents/ccp-ui-checker.md +300 -0
- package/src/agents/ccp-ui-researcher.md +357 -0
- package/{gsd/agents/gsd-verifier.md → src/agents/ccp-verifier.md} +81 -15
- package/src/agents/cpp-build-resolver.md +90 -0
- package/src/agents/cpp-reviewer.md +72 -0
- package/src/agents/database-reviewer.md +91 -0
- package/{ecc → src}/agents/doc-updater.md +1 -1
- package/src/agents/docs-lookup.md +68 -0
- package/src/agents/flutter-reviewer.md +243 -0
- package/src/agents/gan-evaluator.md +209 -0
- package/src/agents/gan-generator.md +131 -0
- package/src/agents/gan-planner.md +99 -0
- package/src/agents/go-build-resolver.md +94 -0
- package/src/agents/go-reviewer.md +76 -0
- package/src/agents/harness-optimizer.md +35 -0
- package/src/agents/java-build-resolver.md +153 -0
- package/src/agents/java-reviewer.md +92 -0
- package/src/agents/kotlin-build-resolver.md +118 -0
- package/src/agents/kotlin-reviewer.md +159 -0
- package/src/agents/loop-operator.md +36 -0
- package/src/agents/opensource-forker.md +198 -0
- package/src/agents/opensource-packager.md +249 -0
- package/src/agents/opensource-sanitizer.md +188 -0
- package/src/agents/performance-optimizer.md +446 -0
- package/src/agents/planner.md +212 -0
- package/src/agents/python-reviewer.md +98 -0
- package/src/agents/pytorch-build-resolver.md +120 -0
- package/src/agents/refactor-cleaner.md +85 -0
- package/src/agents/rust-build-resolver.md +148 -0
- package/src/agents/rust-reviewer.md +94 -0
- package/src/agents/typescript-reviewer.md +112 -0
- package/src/available-rules/README.md +80 -0
- package/src/available-rules/cpp/coding-style.md +44 -0
- package/src/available-rules/cpp/hooks.md +39 -0
- package/src/available-rules/cpp/patterns.md +51 -0
- package/src/available-rules/cpp/security.md +51 -0
- package/src/available-rules/cpp/testing.md +44 -0
- package/src/available-rules/csharp/coding-style.md +72 -0
- package/src/available-rules/csharp/hooks.md +25 -0
- package/src/available-rules/csharp/patterns.md +50 -0
- package/src/available-rules/csharp/security.md +58 -0
- package/src/available-rules/csharp/testing.md +46 -0
- package/src/available-rules/java/coding-style.md +114 -0
- package/src/available-rules/java/hooks.md +18 -0
- package/src/available-rules/java/patterns.md +146 -0
- package/src/available-rules/java/security.md +100 -0
- package/src/available-rules/java/testing.md +131 -0
- package/src/available-rules/kotlin/hooks.md +17 -0
- package/src/available-rules/rust/coding-style.md +151 -0
- package/src/available-rules/rust/hooks.md +16 -0
- package/src/available-rules/rust/patterns.md +168 -0
- package/src/available-rules/rust/security.md +141 -0
- package/src/available-rules/rust/testing.md +154 -0
- package/src/commands/ccp/add-backlog.md +76 -0
- package/{gsd/commands-gsd → src/commands/ccp}/add-phase.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/add-tests.md +5 -5
- package/{gsd/commands-gsd → src/commands/ccp}/add-todo.md +4 -4
- package/src/commands/ccp/aside.md +165 -0
- package/{gsd/commands-gsd → src/commands/ccp}/audit-milestone.md +3 -3
- package/src/commands/ccp/audit-uat.md +24 -0
- package/src/commands/ccp/autonomous.md +41 -0
- package/src/commands/ccp/build-fix.md +67 -0
- package/{gsd/commands-gsd → src/commands/ccp}/check-todos.md +3 -3
- package/{ecc/commands → src/commands/ccp}/checkpoint.md +12 -7
- package/{gsd/commands-gsd → src/commands/ccp}/cleanup.md +3 -3
- package/src/commands/ccp/code-review.md +45 -0
- package/{gsd/commands-gsd → src/commands/ccp}/complete-milestone.md +9 -9
- package/src/commands/ccp/context-budget.md +30 -0
- package/src/commands/ccp/cpp-build.md +174 -0
- package/src/commands/ccp/cpp-review.md +133 -0
- package/src/commands/ccp/cpp-test.md +252 -0
- package/{gsd/commands-gsd → src/commands/ccp}/debug.md +14 -9
- package/src/commands/ccp/discuss-phase.md +64 -0
- package/src/commands/ccp/do.md +30 -0
- package/src/commands/ccp/docs-update.md +48 -0
- package/src/commands/ccp/docs.md +32 -0
- package/src/commands/ccp/e2e.md +365 -0
- package/src/commands/ccp/eval.md +125 -0
- package/{ecc/commands → src/commands/ccp}/evolve.md +5 -5
- package/src/commands/ccp/execute-phase.md +59 -0
- package/src/commands/ccp/fast.md +30 -0
- package/src/commands/ccp/forensics.md +56 -0
- package/src/commands/ccp/go-build.md +184 -0
- package/src/commands/ccp/go-review.md +149 -0
- package/src/commands/ccp/go-test.md +269 -0
- package/src/commands/ccp/gradle-build.md +71 -0
- package/src/commands/ccp/harness-audit.md +76 -0
- package/{gsd/commands-gsd → src/commands/ccp}/health.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/help.md +5 -5
- package/{gsd/commands-gsd → src/commands/ccp}/insert-phase.md +3 -3
- package/src/commands/ccp/kotlin-build.md +175 -0
- package/src/commands/ccp/kotlin-review.md +141 -0
- package/src/commands/ccp/kotlin-test.md +313 -0
- package/{ecc/commands → src/commands/ccp}/learn.md +7 -2
- package/{gsd/commands-gsd → src/commands/ccp}/list-phase-assumptions.md +2 -2
- package/src/commands/ccp/manager.md +39 -0
- package/{gsd/commands-gsd → src/commands/ccp}/map-codebase.md +7 -7
- package/src/commands/ccp/milestone-summary.md +51 -0
- package/{ecc/commands → src/commands/ccp}/model-route.md +6 -1
- package/{gsd/commands-gsd → src/commands/ccp}/new-milestone.md +8 -8
- package/{gsd/commands-gsd → src/commands/ccp}/new-project.md +8 -8
- package/src/commands/ccp/next.md +24 -0
- package/src/commands/ccp/note.md +34 -0
- package/src/commands/ccp/orchestrate.md +232 -0
- package/{gsd/commands-gsd → src/commands/ccp}/pause-work.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/plan-milestone-gaps.md +5 -5
- package/{gsd/commands-gsd → src/commands/ccp}/plan-phase.md +9 -7
- package/src/commands/ccp/plan.md +115 -0
- package/src/commands/ccp/plant-seed.md +28 -0
- package/src/commands/ccp/pr-branch.md +25 -0
- package/src/commands/ccp/profile-user.md +46 -0
- package/{gsd/commands-gsd → src/commands/ccp}/progress.md +3 -3
- package/src/commands/ccp/prompt-optimize.md +39 -0
- package/src/commands/ccp/prune.md +25 -0
- package/src/commands/ccp/python-review.md +298 -0
- package/{ecc/commands → src/commands/ccp}/quality-gate.md +7 -2
- package/{gsd/commands-gsd → src/commands/ccp}/quick.md +10 -8
- package/src/commands/ccp/refactor-clean.md +85 -0
- package/{gsd/commands-gsd → src/commands/ccp}/remove-phase.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/research-phase.md +17 -12
- package/{ecc/commands → src/commands/ccp}/resume-session.md +9 -8
- package/{gsd/commands-gsd → src/commands/ccp}/resume-work.md +3 -3
- package/src/commands/ccp/review-backlog.md +61 -0
- package/src/commands/ccp/review.md +37 -0
- package/src/commands/ccp/rules-distill.md +12 -0
- package/src/commands/ccp/rust-build.md +188 -0
- package/src/commands/ccp/rust-review.md +143 -0
- package/src/commands/ccp/rust-test.md +309 -0
- package/{ecc/commands → src/commands/ccp}/save-session.md +2 -1
- package/src/commands/ccp/secure-phase.md +35 -0
- package/src/commands/ccp/session-report.md +19 -0
- package/{ecc/commands → src/commands/ccp}/sessions.md +39 -34
- package/src/commands/ccp/set-profile.md +12 -0
- package/{gsd/commands-gsd → src/commands/ccp}/settings.md +5 -5
- package/src/commands/ccp/setup-pm.md +81 -0
- package/{kit/commands → src/commands/ccp}/setup-refresh.md +4 -3
- package/{kit/commands → src/commands/ccp}/setup.md +67 -40
- package/src/commands/ccp/ship.md +23 -0
- package/src/commands/ccp/skill-create.md +172 -0
- package/src/commands/ccp/skill-health.md +51 -0
- package/src/commands/ccp/stats.md +18 -0
- package/src/commands/ccp/tdd.md +329 -0
- package/src/commands/ccp/test-coverage.md +74 -0
- package/src/commands/ccp/thread.md +127 -0
- package/{kit/commands → src/commands/ccp}/tool-guide.md +2 -1
- package/src/commands/ccp/ui-phase.md +34 -0
- package/src/commands/ccp/ui-review.md +32 -0
- package/src/commands/ccp/update-codemaps.md +77 -0
- package/src/commands/ccp/update-docs.md +89 -0
- package/{gsd/commands-gsd → src/commands/ccp}/update.md +5 -5
- package/{gsd/commands-gsd → src/commands/ccp}/validate-phase.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/verify-work.md +5 -5
- package/{ecc/commands → src/commands/ccp}/verify.md +5 -0
- package/src/commands/ccp/workstreams.md +68 -0
- package/{ecc → src}/examples/CLAUDE.md +4 -4
- package/{ecc → src}/examples/django-api-CLAUDE.md +5 -5
- package/{ecc → src}/examples/go-microservice-CLAUDE.md +6 -6
- package/{ecc → src}/examples/rust-api-CLAUDE.md +4 -4
- package/{ecc → src}/examples/saas-nextjs-CLAUDE.md +8 -8
- package/{gsd/hooks/gsd-context-monitor.js → src/hooks/ccp-context-monitor.js} +3 -3
- package/src/hooks/ccp-prompt-guard.js +96 -0
- package/{gsd/hooks/gsd-statusline.js → src/hooks/ccp-statusline.js} +7 -7
- package/src/hooks/ccp-workflow-guard.js +94 -0
- package/src/hooks/config-protection.js +141 -0
- package/{kit → src}/hooks/kit-check-update.js +7 -4
- package/src/hooks/mcp-health-check.js +620 -0
- package/{ecc/scripts → src}/hooks/run-with-flags-shell.sh +1 -1
- package/{ecc/scripts → src}/hooks/run-with-flags.js +74 -13
- package/src/hooks/session-end-marker.js +29 -0
- package/{ecc/scripts → src}/hooks/session-end.js +83 -40
- package/{ecc/scripts → src}/hooks/session-start.js +76 -10
- package/{ecc/scripts → src}/lib/hook-flags.js +8 -4
- package/{ecc/scripts → src}/lib/project-detect.js +2 -1
- package/{ecc/scripts → src}/lib/session-manager.d.ts +5 -1
- package/{ecc/scripts → src}/lib/session-manager.js +202 -92
- package/{ecc/scripts → src}/lib/utils.d.ts +23 -1
- package/{ecc/scripts → src}/lib/utils.js +91 -3
- package/{gsd/get-shit-done/bin/gsd-tools.cjs → src/pilot/bin/ccp-tools.cjs} +257 -86
- package/{gsd/get-shit-done → src/pilot}/bin/lib/commands.cjs +1 -1
- package/src/pilot/bin/lib/config.cjs +444 -0
- package/src/pilot/bin/lib/core.cjs +1190 -0
- package/src/pilot/bin/lib/init.cjs +1281 -0
- package/src/pilot/bin/lib/model-profiles.cjs +67 -0
- package/{gsd/get-shit-done → src/pilot}/bin/lib/phase.cjs +2 -2
- package/src/pilot/bin/lib/security.cjs +382 -0
- package/{gsd/get-shit-done → src/pilot}/bin/lib/state.cjs +1 -1
- package/src/pilot/bin/lib/uat.cjs +282 -0
- package/{gsd/get-shit-done → src/pilot}/bin/lib/verify.cjs +10 -10
- package/{gsd/get-shit-done → src/pilot}/references/continuation-format.md +16 -16
- package/{gsd/get-shit-done → src/pilot}/references/decimal-phase-calculation.md +5 -5
- package/{gsd/get-shit-done → src/pilot}/references/git-integration.md +5 -5
- package/{gsd/get-shit-done → src/pilot}/references/git-planning-commit.md +4 -4
- package/src/pilot/references/mcp-servers.json +153 -0
- package/{gsd/get-shit-done → src/pilot}/references/model-profile-resolution.md +2 -2
- package/{gsd/get-shit-done → src/pilot}/references/model-profiles.md +20 -20
- package/{gsd/get-shit-done → src/pilot}/references/phase-argument-parsing.md +4 -4
- package/{gsd/get-shit-done → src/pilot}/references/planning-config.md +15 -15
- package/{gsd/get-shit-done → src/pilot}/references/ui-brand.md +5 -5
- package/{gsd/get-shit-done → src/pilot}/references/verification-patterns.md +1 -1
- package/{gsd/get-shit-done → src/pilot}/templates/DEBUG.md +1 -1
- package/{gsd/get-shit-done → src/pilot}/templates/UAT.md +3 -3
- package/src/pilot/templates/UI-SPEC.md +100 -0
- package/{gsd/get-shit-done → src/pilot}/templates/VALIDATION.md +1 -1
- package/src/pilot/templates/claude-md.md +122 -0
- package/{gsd/get-shit-done → src/pilot}/templates/codebase/architecture.md +2 -2
- package/{gsd/get-shit-done → src/pilot}/templates/codebase/structure.md +13 -13
- package/{gsd/get-shit-done → src/pilot}/templates/context.md +4 -4
- package/src/pilot/templates/copilot-instructions.md +7 -0
- package/{gsd/get-shit-done → src/pilot}/templates/debug-subagent-prompt.md +4 -4
- package/src/pilot/templates/dev-preferences.md +21 -0
- package/{gsd/get-shit-done → src/pilot}/templates/discovery.md +2 -2
- package/src/pilot/templates/discussion-log.md +63 -0
- package/{gsd/get-shit-done → src/pilot}/templates/phase-prompt.md +12 -12
- package/{gsd/get-shit-done → src/pilot}/templates/planner-subagent-prompt.md +7 -7
- package/{gsd/get-shit-done → src/pilot}/templates/project.md +1 -1
- package/{gsd/get-shit-done → src/pilot}/templates/research.md +2 -2
- package/{gsd/get-shit-done → src/pilot}/templates/state.md +2 -2
- package/{gsd/get-shit-done → src/pilot}/templates/summary-complex.md +1 -1
- package/{gsd/get-shit-done → src/pilot}/workflows/add-phase.md +11 -11
- package/{gsd/get-shit-done → src/pilot}/workflows/add-tests.md +15 -15
- package/{gsd/get-shit-done → src/pilot}/workflows/add-todo.md +7 -7
- package/{gsd/get-shit-done → src/pilot}/workflows/audit-milestone.md +24 -16
- package/src/pilot/workflows/audit-uat.md +109 -0
- package/src/pilot/workflows/autonomous.md +891 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/check-todos.md +10 -10
- package/{gsd/get-shit-done → src/pilot}/workflows/cleanup.md +3 -3
- package/{gsd/get-shit-done → src/pilot}/workflows/complete-milestone.md +19 -16
- package/{gsd/get-shit-done → src/pilot}/workflows/diagnose-issues.md +9 -4
- package/{gsd/get-shit-done → src/pilot}/workflows/discovery-phase.md +8 -8
- package/src/pilot/workflows/discuss-phase-assumptions.md +653 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/discuss-phase.md +407 -49
- package/src/pilot/workflows/do.md +104 -0
- package/src/pilot/workflows/docs-update.md +1165 -0
- package/src/pilot/workflows/execute-phase.md +821 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/execute-plan.md +79 -28
- package/src/pilot/workflows/fast.md +105 -0
- package/src/pilot/workflows/forensics.md +265 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/health.md +34 -11
- package/src/pilot/workflows/help.md +767 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/insert-phase.md +10 -10
- package/{gsd/get-shit-done → src/pilot}/workflows/list-phase-assumptions.md +4 -4
- package/src/pilot/workflows/manager.md +362 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/map-codebase.md +27 -17
- package/src/pilot/workflows/milestone-summary.md +223 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/new-milestone.md +135 -33
- package/{gsd/get-shit-done → src/pilot}/workflows/new-project.md +152 -79
- package/src/pilot/workflows/next.md +97 -0
- package/src/pilot/workflows/node-repair.md +92 -0
- package/src/pilot/workflows/note.md +156 -0
- package/src/pilot/workflows/pause-work.md +177 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/plan-milestone-gaps.md +10 -11
- package/src/pilot/workflows/plan-phase.md +859 -0
- package/src/pilot/workflows/plant-seed.md +169 -0
- package/src/pilot/workflows/pr-branch.md +129 -0
- package/src/pilot/workflows/profile-user.md +452 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/progress.md +95 -34
- package/{gsd/get-shit-done → src/pilot}/workflows/quick.md +33 -21
- package/{gsd/get-shit-done → src/pilot}/workflows/remove-phase.md +14 -14
- package/{gsd/get-shit-done → src/pilot}/workflows/research-phase.md +18 -10
- package/{gsd/get-shit-done → src/pilot}/workflows/resume-project.md +37 -18
- package/src/pilot/workflows/review.md +244 -0
- package/src/pilot/workflows/secure-phase.md +164 -0
- package/src/pilot/workflows/session-report.md +146 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/set-profile.md +7 -7
- package/{gsd/get-shit-done → src/pilot}/workflows/settings.md +75 -22
- package/src/pilot/workflows/ship.md +228 -0
- package/src/pilot/workflows/stats.md +60 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/transition.md +57 -17
- package/src/pilot/workflows/ui-phase.md +302 -0
- package/src/pilot/workflows/ui-review.md +165 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/update.md +88 -58
- package/{gsd/get-shit-done → src/pilot}/workflows/validate-phase.md +24 -17
- package/{gsd/get-shit-done → src/pilot}/workflows/verify-phase.md +26 -15
- package/{gsd/get-shit-done → src/pilot}/workflows/verify-work.md +89 -37
- package/{ecc → src}/rules/common/agents.md +1 -0
- package/src/rules/common/code-review.md +124 -0
- package/{ecc → src}/rules/common/coding-style.md +21 -0
- package/src/rules/zh/README.md +108 -0
- package/src/rules/zh/agents.md +50 -0
- package/src/rules/zh/code-review.md +124 -0
- package/src/rules/zh/coding-style.md +48 -0
- package/src/rules/zh/development-workflow.md +44 -0
- package/src/rules/zh/git-workflow.md +24 -0
- package/src/rules/zh/hooks.md +30 -0
- package/src/rules/zh/patterns.md +31 -0
- package/src/rules/zh/performance.md +55 -0
- package/src/rules/zh/security.md +29 -0
- package/src/rules/zh/testing.md +29 -0
- package/src/skills/agentic-engineering/SKILL.md +63 -0
- package/src/skills/ai-first-engineering/SKILL.md +51 -0
- package/src/skills/ai-regression-testing/SKILL.md +385 -0
- package/src/skills/api-design/SKILL.md +523 -0
- package/src/skills/architecture-decision-records/SKILL.md +179 -0
- package/src/skills/autonomous-agent-harness/SKILL.md +267 -0
- package/src/skills/autonomous-loops/SKILL.md +610 -0
- package/src/skills/backend-patterns/SKILL.md +598 -0
- package/src/skills/benchmark/SKILL.md +87 -0
- package/src/skills/blueprint/SKILL.md +90 -0
- package/src/skills/browser-qa/SKILL.md +81 -0
- package/src/skills/bun-runtime/SKILL.md +84 -0
- package/src/skills/claude-api/SKILL.md +337 -0
- package/src/skills/codebase-onboarding/SKILL.md +233 -0
- package/src/skills/coding-standards/SKILL.md +530 -0
- package/src/skills/content-hash-cache-pattern/SKILL.md +161 -0
- package/src/skills/context-budget/SKILL.md +135 -0
- package/{ecc → src}/skills/continuous-learning-v2/SKILL.md +6 -6
- package/{ecc → src}/skills/continuous-learning-v2/agents/observer-loop.sh +1 -1
- package/{ecc → src}/skills/continuous-learning-v2/agents/observer.md +1 -1
- package/src/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/src/skills/cpp-coding-standards/SKILL.md +723 -0
- package/src/skills/cpp-testing/SKILL.md +324 -0
- package/src/skills/database-migrations/SKILL.md +429 -0
- package/src/skills/deep-research/SKILL.md +155 -0
- package/src/skills/deployment-patterns/SKILL.md +427 -0
- package/src/skills/design-system/SKILL.md +82 -0
- package/src/skills/django-patterns/SKILL.md +734 -0
- package/src/skills/django-security/SKILL.md +593 -0
- package/src/skills/django-tdd/SKILL.md +729 -0
- package/src/skills/django-verification/SKILL.md +469 -0
- package/src/skills/docker-patterns/SKILL.md +364 -0
- package/src/skills/documentation-lookup/SKILL.md +90 -0
- package/src/skills/e2e-testing/SKILL.md +326 -0
- package/src/skills/eval-harness/SKILL.md +270 -0
- package/src/skills/exa-search/SKILL.md +103 -0
- package/src/skills/flutter-dart-code-review/SKILL.md +435 -0
- package/src/skills/frontend-patterns/SKILL.md +642 -0
- package/src/skills/gan-style-harness/SKILL.md +278 -0
- package/src/skills/git-workflow/SKILL.md +715 -0
- package/src/skills/golang-patterns/SKILL.md +674 -0
- package/src/skills/golang-testing/SKILL.md +720 -0
- package/src/skills/hexagonal-architecture/SKILL.md +276 -0
- package/src/skills/iterative-retrieval/SKILL.md +211 -0
- package/src/skills/java-coding-standards/SKILL.md +147 -0
- package/src/skills/jpa-patterns/SKILL.md +151 -0
- package/src/skills/kotlin-coroutines-flows/SKILL.md +284 -0
- package/src/skills/kotlin-exposed-patterns/SKILL.md +719 -0
- package/src/skills/kotlin-ktor-patterns/SKILL.md +689 -0
- package/src/skills/kotlin-patterns/SKILL.md +711 -0
- package/src/skills/kotlin-testing/SKILL.md +824 -0
- package/src/skills/laravel-patterns/SKILL.md +415 -0
- package/src/skills/laravel-plugin-discovery/SKILL.md +229 -0
- package/src/skills/laravel-security/SKILL.md +285 -0
- package/src/skills/laravel-tdd/SKILL.md +283 -0
- package/src/skills/laravel-verification/SKILL.md +179 -0
- package/src/skills/mcp-server-patterns/SKILL.md +67 -0
- package/src/skills/nextjs-turbopack/SKILL.md +44 -0
- package/src/skills/nuxt4-patterns/SKILL.md +100 -0
- package/src/skills/opensource-pipeline/SKILL.md +255 -0
- package/src/skills/perl-patterns/SKILL.md +504 -0
- package/src/skills/perl-security/SKILL.md +503 -0
- package/src/skills/perl-testing/SKILL.md +475 -0
- package/src/skills/postgres-patterns/SKILL.md +147 -0
- package/src/skills/project-flow-ops/SKILL.md +111 -0
- package/src/skills/project-guidelines-example/SKILL.md +349 -0
- package/src/skills/prompt-optimizer/SKILL.md +397 -0
- package/src/skills/python-patterns/SKILL.md +750 -0
- package/src/skills/python-testing/SKILL.md +816 -0
- package/src/skills/pytorch-patterns/SKILL.md +396 -0
- package/src/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
- package/src/skills/repo-scan/SKILL.md +78 -0
- package/src/skills/rules-distill/SKILL.md +264 -0
- package/src/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/src/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/src/skills/rust-patterns/SKILL.md +499 -0
- package/src/skills/rust-testing/SKILL.md +500 -0
- package/src/skills/safety-guard/SKILL.md +69 -0
- package/src/skills/search-first/SKILL.md +161 -0
- package/src/skills/security-review/SKILL.md +495 -0
- package/src/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/src/skills/security-scan/SKILL.md +165 -0
- package/src/skills/springboot-patterns/SKILL.md +314 -0
- package/src/skills/springboot-security/SKILL.md +272 -0
- package/src/skills/springboot-tdd/SKILL.md +158 -0
- package/src/skills/springboot-verification/SKILL.md +231 -0
- package/src/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/src/skills/tdd-workflow/SKILL.md +410 -0
- package/src/skills/token-budget-advisor/SKILL.md +133 -0
- package/{ecc/skills/verification-loop-SKILL.md → src/skills/verification-loop/SKILL.md} +1 -1
- package/src/skills/workspace-surface-audit/SKILL.md +125 -0
- package/ecc/scripts/hooks/session-end-marker.js +0 -15
- package/gsd/LICENSE +0 -21
- package/gsd/commands-gsd/discuss-phase.md +0 -90
- package/gsd/commands-gsd/execute-phase.md +0 -41
- package/gsd/commands-gsd/join-discord.md +0 -18
- package/gsd/commands-gsd/reapply-patches.md +0 -123
- package/gsd/commands-gsd/set-profile.md +0 -34
- package/gsd/get-shit-done/bin/lib/config.cjs +0 -169
- package/gsd/get-shit-done/bin/lib/core.cjs +0 -492
- package/gsd/get-shit-done/bin/lib/init.cjs +0 -710
- package/gsd/get-shit-done/workflows/execute-phase.md +0 -459
- package/gsd/get-shit-done/workflows/help.md +0 -489
- package/gsd/get-shit-done/workflows/pause-work.md +0 -122
- package/gsd/get-shit-done/workflows/plan-phase.md +0 -560
- package/gsd/hooks/gsd-check-update.js +0 -81
- package/kit/CLAUDE.md +0 -43
- package/kit/commands/kit/update.md +0 -46
- package/kit/mcp.json +0 -10
- package/kit/rules/code-style.md +0 -24
- /package/{ecc → src}/agents/architect.md +0 -0
- /package/{ecc → src}/agents/code-reviewer.md +0 -0
- /package/{ecc → src}/agents/e2e-runner.md +0 -0
- /package/{ecc → src}/agents/security-reviewer.md +0 -0
- /package/{ecc → src}/agents/tdd-guide.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/kotlin/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/kotlin/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/kotlin/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/kotlin/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/testing.md +0 -0
- /package/{ecc → src}/contexts/dev.md +0 -0
- /package/{ecc → src}/contexts/research.md +0 -0
- /package/{ecc → src}/contexts/review.md +0 -0
- /package/{ecc → src}/examples/user-CLAUDE.md +0 -0
- /package/{ecc/scripts → src}/hooks/check-hook-enabled.js +0 -0
- /package/{ecc/scripts → src}/hooks/evaluate-session.js +0 -0
- /package/{ecc/scripts → src}/hooks/pre-compact.js +0 -0
- /package/{ecc/scripts → src}/hooks/suggest-compact.js +0 -0
- /package/{ecc/scripts → src}/lib/package-manager.d.ts +0 -0
- /package/{ecc/scripts → src}/lib/package-manager.js +0 -0
- /package/{ecc/scripts → src}/lib/resolve-formatter.js +0 -0
- /package/{ecc/scripts → src}/lib/session-aliases.d.ts +0 -0
- /package/{ecc/scripts → src}/lib/session-aliases.js +0 -0
- /package/{ecc/scripts → src}/lib/shell-split.js +0 -0
- /package/{gsd/get-shit-done → src/pilot}/bin/lib/frontmatter.cjs +0 -0
- /package/{gsd/get-shit-done → src/pilot}/bin/lib/milestone.cjs +0 -0
- /package/{gsd/get-shit-done → src/pilot}/bin/lib/roadmap.cjs +0 -0
- /package/{gsd/get-shit-done → src/pilot}/bin/lib/template.cjs +0 -0
- /package/{gsd/get-shit-done → src/pilot}/references/checkpoints.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/references/questioning.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/references/tdd.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/concerns.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/conventions.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/integrations.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/stack.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/testing.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/config.json +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/continue-here.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/milestone-archive.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/milestone.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/requirements.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/ARCHITECTURE.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/FEATURES.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/PITFALLS.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/STACK.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/SUMMARY.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/retrospective.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/roadmap.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/summary-minimal.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/summary-standard.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/summary.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/user-setup.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/verification-report.md +0 -0
- /package/{ecc → src}/rules/common/development-workflow.md +0 -0
- /package/{ecc → src}/rules/common/git-workflow.md +0 -0
- /package/{ecc → src}/rules/common/hooks.md +0 -0
- /package/{ecc → src}/rules/common/patterns.md +0 -0
- /package/{ecc → src}/rules/common/performance.md +0 -0
- /package/{ecc → src}/rules/common/security.md +0 -0
- /package/{ecc → src}/rules/common/testing.md +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/agents/start-observer.sh +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/config.json +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/hooks/observe.sh +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/scripts/detect-project.sh +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/scripts/instinct-cli.py +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/scripts/test_parse_instinct.py +0 -0
- /package/{ecc → src}/skills/strategic-compact/SKILL.md +0 -0
- /package/{ecc → src}/skills/strategic-compact/suggest-compact.sh +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:do
|
|
3
|
+
description: Route freeform text to the right CCP command automatically
|
|
4
|
+
argument-hint: "<description of what you want to do>"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Bash
|
|
8
|
+
- AskUserQuestion
|
|
9
|
+
---
|
|
10
|
+
<objective>
|
|
11
|
+
Analyze freeform natural language input and dispatch to the most appropriate CCP command.
|
|
12
|
+
|
|
13
|
+
Acts as a smart dispatcher — never does the work itself. Matches intent to the best CCP command using routing rules, confirms the match, then hands off.
|
|
14
|
+
|
|
15
|
+
Use when you know what you want but don't know which `/ccp:*` command to run.
|
|
16
|
+
</objective>
|
|
17
|
+
|
|
18
|
+
<execution_context>
|
|
19
|
+
@~/.claude/pilot/workflows/do.md
|
|
20
|
+
@~/.claude/pilot/references/ui-brand.md
|
|
21
|
+
</execution_context>
|
|
22
|
+
|
|
23
|
+
<context>
|
|
24
|
+
$ARGUMENTS
|
|
25
|
+
</context>
|
|
26
|
+
|
|
27
|
+
<process>
|
|
28
|
+
Execute the do workflow from @~/.claude/pilot/workflows/do.md end-to-end.
|
|
29
|
+
Route user intent to the best CCP command and invoke it.
|
|
30
|
+
</process>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:docs-update
|
|
3
|
+
description: Generate or update project documentation verified against the codebase
|
|
4
|
+
argument-hint: "[--force] [--verify-only]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Edit
|
|
9
|
+
- Bash
|
|
10
|
+
- Glob
|
|
11
|
+
- Grep
|
|
12
|
+
- Task
|
|
13
|
+
- AskUserQuestion
|
|
14
|
+
---
|
|
15
|
+
<objective>
|
|
16
|
+
Generate and update up to 9 documentation files for the current project. Each doc type is written by a ccp-doc-writer subagent that explores the codebase directly — no hallucinated paths, phantom endpoints, or stale signatures.
|
|
17
|
+
|
|
18
|
+
Flag handling rule:
|
|
19
|
+
- The optional flags documented below are available behaviors, not implied active behaviors
|
|
20
|
+
- A flag is active only when its literal token appears in `$ARGUMENTS`
|
|
21
|
+
- If a documented flag is absent from `$ARGUMENTS`, treat it as inactive
|
|
22
|
+
- `--force`: skip preservation prompts, regenerate all docs regardless of existing content or GSD markers
|
|
23
|
+
- `--verify-only`: check existing docs for accuracy against codebase, no generation (full verification requires Phase 4 verifier)
|
|
24
|
+
- If `--force` and `--verify-only` both appear in `$ARGUMENTS`, `--force` takes precedence
|
|
25
|
+
</objective>
|
|
26
|
+
|
|
27
|
+
<execution_context>
|
|
28
|
+
@~/.claude/pilot/workflows/docs-update.md
|
|
29
|
+
</execution_context>
|
|
30
|
+
|
|
31
|
+
<context>
|
|
32
|
+
Arguments: $ARGUMENTS
|
|
33
|
+
|
|
34
|
+
**Available optional flags (documentation only — not automatically active):**
|
|
35
|
+
- `--force` — Regenerate all docs. Overwrites hand-written and GSD docs alike. No preservation prompts.
|
|
36
|
+
- `--verify-only` — Check existing docs for accuracy against the codebase. No files are written. Reports VERIFY marker count. Full codebase fact-checking requires the ccp-doc-verifier agent (Phase 4).
|
|
37
|
+
|
|
38
|
+
**Active flags must be derived from `$ARGUMENTS`:**
|
|
39
|
+
- `--force` is active only if the literal `--force` token is present in `$ARGUMENTS`
|
|
40
|
+
- `--verify-only` is active only if the literal `--verify-only` token is present in `$ARGUMENTS`
|
|
41
|
+
- If neither token appears, run the standard full-phase generation flow
|
|
42
|
+
- Do not infer that a flag is active just because it is documented in this prompt
|
|
43
|
+
</context>
|
|
44
|
+
|
|
45
|
+
<process>
|
|
46
|
+
Execute the docs-update workflow from @~/.claude/pilot/workflows/docs-update.md end-to-end.
|
|
47
|
+
Preserve all workflow gates (preservation_check, flag handling, wave execution, monorepo dispatch, commit, reporting).
|
|
48
|
+
</process>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:docs
|
|
3
|
+
description: Look up current documentation for a library or topic via Context7.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /ccp:docs
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Look up up-to-date documentation for a library, framework, or API and return a summarized answer with relevant code snippets. Uses the Context7 MCP (resolve-library-id and query-docs) so answers reflect current docs, not training data.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/ccp:docs [library name] [question]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Use quotes for multi-word arguments so they are parsed as a single token. Example: `/ccp:docs "Next.js" "How do I configure middleware?"`
|
|
19
|
+
|
|
20
|
+
If library or question is omitted, prompt the user for:
|
|
21
|
+
1. The library or product name (e.g. Next.js, Prisma, Supabase).
|
|
22
|
+
2. The specific question or task (e.g. "How do I set up middleware?", "Auth methods").
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
1. **Resolve library ID** — Call the Context7 tool `resolve-library-id` with the library name and the user's question to get a Context7-compatible library ID (e.g. `/vercel/next.js`).
|
|
27
|
+
2. **Query docs** — Call `query-docs` with that library ID and the user's question.
|
|
28
|
+
3. **Summarize** — Return a concise answer and include relevant code examples from the fetched documentation. Mention the library (and version if relevant).
|
|
29
|
+
|
|
30
|
+
## Output
|
|
31
|
+
|
|
32
|
+
The user receives a short, accurate answer backed by current docs, plus any code snippets that help. If Context7 is not available, say so and answer from training data with a note that docs may be outdated.
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:e2e
|
|
3
|
+
description: Generate and run end-to-end tests with Playwright. Creates test journeys, runs tests, captures screenshots/videos/traces, and uploads artifacts.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# E2E Command
|
|
7
|
+
|
|
8
|
+
This command invokes the **e2e-runner** agent to generate, maintain, and execute end-to-end tests using Playwright.
|
|
9
|
+
|
|
10
|
+
## What This Command Does
|
|
11
|
+
|
|
12
|
+
1. **Generate Test Journeys** - Create Playwright tests for user flows
|
|
13
|
+
2. **Run E2E Tests** - Execute tests across browsers
|
|
14
|
+
3. **Capture Artifacts** - Screenshots, videos, traces on failures
|
|
15
|
+
4. **Upload Results** - HTML reports and JUnit XML
|
|
16
|
+
5. **Identify Flaky Tests** - Quarantine unstable tests
|
|
17
|
+
|
|
18
|
+
## When to Use
|
|
19
|
+
|
|
20
|
+
Use `/ccp:e2e` when:
|
|
21
|
+
- Testing critical user journeys (login, trading, payments)
|
|
22
|
+
- Verifying multi-step flows work end-to-end
|
|
23
|
+
- Testing UI interactions and navigation
|
|
24
|
+
- Validating integration between frontend and backend
|
|
25
|
+
- Preparing for production deployment
|
|
26
|
+
|
|
27
|
+
## How It Works
|
|
28
|
+
|
|
29
|
+
The e2e-runner agent will:
|
|
30
|
+
|
|
31
|
+
1. **Analyze user flow** and identify test scenarios
|
|
32
|
+
2. **Generate Playwright test** using Page Object Model pattern
|
|
33
|
+
3. **Run tests** across multiple browsers (Chrome, Firefox, Safari)
|
|
34
|
+
4. **Capture failures** with screenshots, videos, and traces
|
|
35
|
+
5. **Generate report** with results and artifacts
|
|
36
|
+
6. **Identify flaky tests** and recommend fixes
|
|
37
|
+
|
|
38
|
+
## Example Usage
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
User: /ccp:e2e Test the market search and view flow
|
|
42
|
+
|
|
43
|
+
Agent (e2e-runner):
|
|
44
|
+
# E2E Test Generation: Market Search and View Flow
|
|
45
|
+
|
|
46
|
+
## Test Scenario Identified
|
|
47
|
+
|
|
48
|
+
**User Journey:** Market Search → View Results → Click Market → View Details
|
|
49
|
+
|
|
50
|
+
**Test Coverage:**
|
|
51
|
+
1. Navigate to markets page
|
|
52
|
+
2. Perform semantic search
|
|
53
|
+
3. Verify search results
|
|
54
|
+
4. Click on first result
|
|
55
|
+
5. Verify market details page loads
|
|
56
|
+
6. Verify chart renders
|
|
57
|
+
|
|
58
|
+
## Generated Test Code
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// tests/e2e/markets/search-and-view.spec.ts
|
|
62
|
+
import { test, expect } from '@playwright/test'
|
|
63
|
+
import { MarketsPage } from '../../pages/MarketsPage'
|
|
64
|
+
import { MarketDetailsPage } from '../../pages/MarketDetailsPage'
|
|
65
|
+
|
|
66
|
+
test.describe('Market Search and View Flow', () => {
|
|
67
|
+
test('user can search markets and view details', async ({ page }) => {
|
|
68
|
+
// 1. Navigate to markets page
|
|
69
|
+
const marketsPage = new MarketsPage(page)
|
|
70
|
+
await marketsPage.goto()
|
|
71
|
+
|
|
72
|
+
// Verify page loaded
|
|
73
|
+
await expect(page).toHaveTitle(/Markets/)
|
|
74
|
+
await expect(page.locator('h1')).toContainText('Markets')
|
|
75
|
+
|
|
76
|
+
// 2. Perform semantic search
|
|
77
|
+
await marketsPage.searchMarkets('election')
|
|
78
|
+
|
|
79
|
+
// Wait for API response
|
|
80
|
+
await page.waitForResponse(resp =>
|
|
81
|
+
resp.url().includes('/api/markets/search') && resp.status() === 200
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
// 3. Verify search results
|
|
85
|
+
const marketCards = marketsPage.marketCards
|
|
86
|
+
await expect(marketCards.first()).toBeVisible()
|
|
87
|
+
const resultCount = await marketCards.count()
|
|
88
|
+
expect(resultCount).toBeGreaterThan(0)
|
|
89
|
+
|
|
90
|
+
// Take screenshot of search results
|
|
91
|
+
await page.screenshot({ path: 'artifacts/search-results.png' })
|
|
92
|
+
|
|
93
|
+
// 4. Click on first result
|
|
94
|
+
const firstMarketTitle = await marketCards.first().textContent()
|
|
95
|
+
await marketCards.first().click()
|
|
96
|
+
|
|
97
|
+
// 5. Verify market details page loads
|
|
98
|
+
await expect(page).toHaveURL(/\/markets\/[a-z0-9-]+/)
|
|
99
|
+
|
|
100
|
+
const detailsPage = new MarketDetailsPage(page)
|
|
101
|
+
await expect(detailsPage.marketName).toBeVisible()
|
|
102
|
+
await expect(detailsPage.marketDescription).toBeVisible()
|
|
103
|
+
|
|
104
|
+
// 6. Verify chart renders
|
|
105
|
+
await expect(detailsPage.priceChart).toBeVisible()
|
|
106
|
+
|
|
107
|
+
// Verify market name matches
|
|
108
|
+
const detailsTitle = await detailsPage.marketName.textContent()
|
|
109
|
+
expect(detailsTitle?.toLowerCase()).toContain(
|
|
110
|
+
firstMarketTitle?.toLowerCase().substring(0, 20) || ''
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
// Take screenshot of market details
|
|
114
|
+
await page.screenshot({ path: 'artifacts/market-details.png' })
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
test('search with no results shows empty state', async ({ page }) => {
|
|
118
|
+
const marketsPage = new MarketsPage(page)
|
|
119
|
+
await marketsPage.goto()
|
|
120
|
+
|
|
121
|
+
// Search for non-existent market
|
|
122
|
+
await marketsPage.searchMarkets('xyznonexistentmarket123456')
|
|
123
|
+
|
|
124
|
+
// Verify empty state
|
|
125
|
+
await expect(page.locator('[data-testid="no-results"]')).toBeVisible()
|
|
126
|
+
await expect(page.locator('[data-testid="no-results"]')).toContainText(
|
|
127
|
+
/no.*results|no.*markets/i
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
const marketCount = await marketsPage.marketCards.count()
|
|
131
|
+
expect(marketCount).toBe(0)
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
test('can clear search and see all markets again', async ({ page }) => {
|
|
135
|
+
const marketsPage = new MarketsPage(page)
|
|
136
|
+
await marketsPage.goto()
|
|
137
|
+
|
|
138
|
+
// Initial market count
|
|
139
|
+
const initialCount = await marketsPage.marketCards.count()
|
|
140
|
+
|
|
141
|
+
// Perform search
|
|
142
|
+
await marketsPage.searchMarkets('trump')
|
|
143
|
+
await page.waitForLoadState('networkidle')
|
|
144
|
+
|
|
145
|
+
// Verify filtered results
|
|
146
|
+
const filteredCount = await marketsPage.marketCards.count()
|
|
147
|
+
expect(filteredCount).toBeLessThan(initialCount)
|
|
148
|
+
|
|
149
|
+
// Clear search
|
|
150
|
+
await marketsPage.searchInput.clear()
|
|
151
|
+
await page.waitForLoadState('networkidle')
|
|
152
|
+
|
|
153
|
+
// Verify all markets shown again
|
|
154
|
+
const finalCount = await marketsPage.marketCards.count()
|
|
155
|
+
expect(finalCount).toBe(initialCount)
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Running Tests
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# Run the generated test
|
|
164
|
+
npx playwright test tests/e2e/markets/search-and-view.spec.ts
|
|
165
|
+
|
|
166
|
+
Running 3 tests using 3 workers
|
|
167
|
+
|
|
168
|
+
✓ [chromium] › search-and-view.spec.ts:5:3 › user can search markets and view details (4.2s)
|
|
169
|
+
✓ [chromium] › search-and-view.spec.ts:52:3 › search with no results shows empty state (1.8s)
|
|
170
|
+
✓ [chromium] › search-and-view.spec.ts:67:3 › can clear search and see all markets again (2.9s)
|
|
171
|
+
|
|
172
|
+
3 passed (9.1s)
|
|
173
|
+
|
|
174
|
+
Artifacts generated:
|
|
175
|
+
- artifacts/search-results.png
|
|
176
|
+
- artifacts/market-details.png
|
|
177
|
+
- playwright-report/index.html
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Test Report
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
184
|
+
║ E2E Test Results ║
|
|
185
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
186
|
+
║ Status: ✅ ALL TESTS PASSED ║
|
|
187
|
+
║ Total: 3 tests ║
|
|
188
|
+
║ Passed: 3 (100%) ║
|
|
189
|
+
║ Failed: 0 ║
|
|
190
|
+
║ Flaky: 0 ║
|
|
191
|
+
║ Duration: 9.1s ║
|
|
192
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
193
|
+
|
|
194
|
+
Artifacts:
|
|
195
|
+
📸 Screenshots: 2 files
|
|
196
|
+
📹 Videos: 0 files (only on failure)
|
|
197
|
+
🔍 Traces: 0 files (only on failure)
|
|
198
|
+
📊 HTML Report: playwright-report/index.html
|
|
199
|
+
|
|
200
|
+
View report: npx playwright show-report
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
✅ E2E test suite ready for CI/CD integration!
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Test Artifacts
|
|
207
|
+
|
|
208
|
+
When tests run, the following artifacts are captured:
|
|
209
|
+
|
|
210
|
+
**On All Tests:**
|
|
211
|
+
- HTML Report with timeline and results
|
|
212
|
+
- JUnit XML for CI integration
|
|
213
|
+
|
|
214
|
+
**On Failure Only:**
|
|
215
|
+
- Screenshot of the failing state
|
|
216
|
+
- Video recording of the test
|
|
217
|
+
- Trace file for debugging (step-by-step replay)
|
|
218
|
+
- Network logs
|
|
219
|
+
- Console logs
|
|
220
|
+
|
|
221
|
+
## Viewing Artifacts
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# View HTML report in browser
|
|
225
|
+
npx playwright show-report
|
|
226
|
+
|
|
227
|
+
# View specific trace file
|
|
228
|
+
npx playwright show-trace artifacts/trace-abc123.zip
|
|
229
|
+
|
|
230
|
+
# Screenshots are saved in artifacts/ directory
|
|
231
|
+
open artifacts/search-results.png
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Flaky Test Detection
|
|
235
|
+
|
|
236
|
+
If a test fails intermittently:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
⚠️ FLAKY TEST DETECTED: tests/e2e/markets/trade.spec.ts
|
|
240
|
+
|
|
241
|
+
Test passed 7/10 runs (70% pass rate)
|
|
242
|
+
|
|
243
|
+
Common failure:
|
|
244
|
+
"Timeout waiting for element '[data-testid="confirm-btn"]'"
|
|
245
|
+
|
|
246
|
+
Recommended fixes:
|
|
247
|
+
1. Add explicit wait: await page.waitForSelector('[data-testid="confirm-btn"]')
|
|
248
|
+
2. Increase timeout: { timeout: 10000 }
|
|
249
|
+
3. Check for race conditions in component
|
|
250
|
+
4. Verify element is not hidden by animation
|
|
251
|
+
|
|
252
|
+
Quarantine recommendation: Mark as test.fixme() until fixed
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Browser Configuration
|
|
256
|
+
|
|
257
|
+
Tests run on multiple browsers by default:
|
|
258
|
+
- ✅ Chromium (Desktop Chrome)
|
|
259
|
+
- ✅ Firefox (Desktop)
|
|
260
|
+
- ✅ WebKit (Desktop Safari)
|
|
261
|
+
- ✅ Mobile Chrome (optional)
|
|
262
|
+
|
|
263
|
+
Configure in `playwright.config.ts` to adjust browsers.
|
|
264
|
+
|
|
265
|
+
## CI/CD Integration
|
|
266
|
+
|
|
267
|
+
Add to your CI pipeline:
|
|
268
|
+
|
|
269
|
+
```yaml
|
|
270
|
+
# .github/workflows/e2e.yml
|
|
271
|
+
- name: Install Playwright
|
|
272
|
+
run: npx playwright install --with-deps
|
|
273
|
+
|
|
274
|
+
- name: Run E2E tests
|
|
275
|
+
run: npx playwright test
|
|
276
|
+
|
|
277
|
+
- name: Upload artifacts
|
|
278
|
+
if: always()
|
|
279
|
+
uses: actions/upload-artifact@v3
|
|
280
|
+
with:
|
|
281
|
+
name: playwright-report
|
|
282
|
+
path: playwright-report/
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## PMX-Specific Critical Flows
|
|
286
|
+
|
|
287
|
+
For PMX, prioritize these E2E tests:
|
|
288
|
+
|
|
289
|
+
**🔴 CRITICAL (Must Always Pass):**
|
|
290
|
+
1. User can connect wallet
|
|
291
|
+
2. User can browse markets
|
|
292
|
+
3. User can search markets (semantic search)
|
|
293
|
+
4. User can view market details
|
|
294
|
+
5. User can place trade (with test funds)
|
|
295
|
+
6. Market resolves correctly
|
|
296
|
+
7. User can withdraw funds
|
|
297
|
+
|
|
298
|
+
**🟡 IMPORTANT:**
|
|
299
|
+
1. Market creation flow
|
|
300
|
+
2. User profile updates
|
|
301
|
+
3. Real-time price updates
|
|
302
|
+
4. Chart rendering
|
|
303
|
+
5. Filter and sort markets
|
|
304
|
+
6. Mobile responsive layout
|
|
305
|
+
|
|
306
|
+
## Best Practices
|
|
307
|
+
|
|
308
|
+
**DO:**
|
|
309
|
+
- ✅ Use Page Object Model for maintainability
|
|
310
|
+
- ✅ Use data-testid attributes for selectors
|
|
311
|
+
- ✅ Wait for API responses, not arbitrary timeouts
|
|
312
|
+
- ✅ Test critical user journeys end-to-end
|
|
313
|
+
- ✅ Run tests before merging to main
|
|
314
|
+
- ✅ Review artifacts when tests fail
|
|
315
|
+
|
|
316
|
+
**DON'T:**
|
|
317
|
+
- ❌ Use brittle selectors (CSS classes can change)
|
|
318
|
+
- ❌ Test implementation details
|
|
319
|
+
- ❌ Run tests against production
|
|
320
|
+
- ❌ Ignore flaky tests
|
|
321
|
+
- ❌ Skip artifact review on failures
|
|
322
|
+
- ❌ Test every edge case with E2E (use unit tests)
|
|
323
|
+
|
|
324
|
+
## Important Notes
|
|
325
|
+
|
|
326
|
+
**CRITICAL for PMX:**
|
|
327
|
+
- E2E tests involving real money MUST run on testnet/staging only
|
|
328
|
+
- Never run trading tests against production
|
|
329
|
+
- Set `test.skip(process.env.NODE_ENV === 'production')` for financial tests
|
|
330
|
+
- Use test wallets with small test funds only
|
|
331
|
+
|
|
332
|
+
## Integration with Other Commands
|
|
333
|
+
|
|
334
|
+
- Use `/ccp:plan` to identify critical journeys to test
|
|
335
|
+
- Use `/ccp:tdd` for unit tests (faster, more granular)
|
|
336
|
+
- Use `/ccp:e2e` for integration and user journey tests
|
|
337
|
+
- Use `/ccp:code-review` to verify test quality
|
|
338
|
+
|
|
339
|
+
## Related Agents
|
|
340
|
+
|
|
341
|
+
This command invokes the `e2e-runner` agent.
|
|
342
|
+
|
|
343
|
+
Source file: `~/.claude/agents/e2e-runner.md`
|
|
344
|
+
|
|
345
|
+
## Quick Commands
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
# Run all E2E tests
|
|
349
|
+
npx playwright test
|
|
350
|
+
|
|
351
|
+
# Run specific test file
|
|
352
|
+
npx playwright test tests/e2e/markets/search.spec.ts
|
|
353
|
+
|
|
354
|
+
# Run in headed mode (see browser)
|
|
355
|
+
npx playwright test --headed
|
|
356
|
+
|
|
357
|
+
# Debug test
|
|
358
|
+
npx playwright test --debug
|
|
359
|
+
|
|
360
|
+
# Generate test code
|
|
361
|
+
npx playwright codegen http://localhost:3000
|
|
362
|
+
|
|
363
|
+
# View report
|
|
364
|
+
npx playwright show-report
|
|
365
|
+
```
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:eval
|
|
3
|
+
description: "Manage eval-driven development workflow"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Eval Command
|
|
7
|
+
|
|
8
|
+
Manage eval-driven development workflow.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
`/ccp:eval [define|check|report|list] [feature-name]`
|
|
13
|
+
|
|
14
|
+
## Define Evals
|
|
15
|
+
|
|
16
|
+
`/ccp:eval define feature-name`
|
|
17
|
+
|
|
18
|
+
Create a new eval definition:
|
|
19
|
+
|
|
20
|
+
1. Create `.claude/evals/feature-name.md` with template:
|
|
21
|
+
|
|
22
|
+
```markdown
|
|
23
|
+
## EVAL: feature-name
|
|
24
|
+
Created: $(date)
|
|
25
|
+
|
|
26
|
+
### Capability Evals
|
|
27
|
+
- [ ] [Description of capability 1]
|
|
28
|
+
- [ ] [Description of capability 2]
|
|
29
|
+
|
|
30
|
+
### Regression Evals
|
|
31
|
+
- [ ] [Existing behavior 1 still works]
|
|
32
|
+
- [ ] [Existing behavior 2 still works]
|
|
33
|
+
|
|
34
|
+
### Success Criteria
|
|
35
|
+
- pass@3 > 90% for capability evals
|
|
36
|
+
- pass^3 = 100% for regression evals
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. Prompt user to fill in specific criteria
|
|
40
|
+
|
|
41
|
+
## Check Evals
|
|
42
|
+
|
|
43
|
+
`/ccp:eval check feature-name`
|
|
44
|
+
|
|
45
|
+
Run evals for a feature:
|
|
46
|
+
|
|
47
|
+
1. Read eval definition from `.claude/evals/feature-name.md`
|
|
48
|
+
2. For each capability eval:
|
|
49
|
+
- Attempt to verify criterion
|
|
50
|
+
- Record PASS/FAIL
|
|
51
|
+
- Log attempt in `.claude/evals/feature-name.log`
|
|
52
|
+
3. For each regression eval:
|
|
53
|
+
- Run relevant tests
|
|
54
|
+
- Compare against baseline
|
|
55
|
+
- Record PASS/FAIL
|
|
56
|
+
4. Report current status:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
EVAL CHECK: feature-name
|
|
60
|
+
========================
|
|
61
|
+
Capability: X/Y passing
|
|
62
|
+
Regression: X/Y passing
|
|
63
|
+
Status: IN PROGRESS / READY
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Report Evals
|
|
67
|
+
|
|
68
|
+
`/ccp:eval report feature-name`
|
|
69
|
+
|
|
70
|
+
Generate comprehensive eval report:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
EVAL REPORT: feature-name
|
|
74
|
+
=========================
|
|
75
|
+
Generated: $(date)
|
|
76
|
+
|
|
77
|
+
CAPABILITY EVALS
|
|
78
|
+
----------------
|
|
79
|
+
[eval-1]: PASS (pass@1)
|
|
80
|
+
[eval-2]: PASS (pass@2) - required retry
|
|
81
|
+
[eval-3]: FAIL - see notes
|
|
82
|
+
|
|
83
|
+
REGRESSION EVALS
|
|
84
|
+
----------------
|
|
85
|
+
[test-1]: PASS
|
|
86
|
+
[test-2]: PASS
|
|
87
|
+
[test-3]: PASS
|
|
88
|
+
|
|
89
|
+
METRICS
|
|
90
|
+
-------
|
|
91
|
+
Capability pass@1: 67%
|
|
92
|
+
Capability pass@3: 100%
|
|
93
|
+
Regression pass^3: 100%
|
|
94
|
+
|
|
95
|
+
NOTES
|
|
96
|
+
-----
|
|
97
|
+
[Any issues, edge cases, or observations]
|
|
98
|
+
|
|
99
|
+
RECOMMENDATION
|
|
100
|
+
--------------
|
|
101
|
+
[SHIP / NEEDS WORK / BLOCKED]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## List Evals
|
|
105
|
+
|
|
106
|
+
`/ccp:eval list`
|
|
107
|
+
|
|
108
|
+
Show all eval definitions:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
EVAL DEFINITIONS
|
|
112
|
+
================
|
|
113
|
+
feature-auth [3/5 passing] IN PROGRESS
|
|
114
|
+
feature-search [5/5 passing] READY
|
|
115
|
+
feature-export [0/4 passing] NOT STARTED
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Arguments
|
|
119
|
+
|
|
120
|
+
$ARGUMENTS:
|
|
121
|
+
- `define <name>` - Create new eval definition
|
|
122
|
+
- `check <name>` - Run and check evals
|
|
123
|
+
- `report <name>` - Generate full report
|
|
124
|
+
- `list` - Show all evals
|
|
125
|
+
- `clean` - Remove old eval logs (keeps last 10 runs)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: evolve
|
|
2
|
+
name: ccp:evolve
|
|
3
3
|
description: Analyze instincts and suggest or generate evolved structures
|
|
4
4
|
command: true
|
|
5
5
|
---
|
|
@@ -11,10 +11,10 @@ command: true
|
|
|
11
11
|
Run the instinct CLI using the plugin root path:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
python3 "$
|
|
14
|
+
python3 "$(getClaudeDir)/skills/continuous-learning-v2/scripts/instinct-cli.py" evolve [--generate]
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
Or if `
|
|
17
|
+
Or if `CCP_CLAUDE_DIR` is not set (manual installation):
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve [--generate]
|
|
@@ -28,8 +28,8 @@ Analyzes instincts and clusters related ones into higher-level structures:
|
|
|
28
28
|
## Usage
|
|
29
29
|
|
|
30
30
|
```
|
|
31
|
-
/evolve # Analyze all instincts and suggest evolutions
|
|
32
|
-
/evolve --generate # Also generate files under evolved/{skills,commands,agents}
|
|
31
|
+
/ccp:evolve # Analyze all instincts and suggest evolutions
|
|
32
|
+
/ccp:evolve --generate # Also generate files under evolved/{skills,commands,agents}
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## Evolution Rules
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:execute-phase
|
|
3
|
+
description: Execute all plans in a phase with wave-based parallelization
|
|
4
|
+
argument-hint: "<phase-number> [--wave N] [--gaps-only] [--interactive]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Edit
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- Bash
|
|
12
|
+
- Task
|
|
13
|
+
- TodoWrite
|
|
14
|
+
- AskUserQuestion
|
|
15
|
+
---
|
|
16
|
+
<objective>
|
|
17
|
+
Execute all plans in a phase using wave-based parallel execution.
|
|
18
|
+
|
|
19
|
+
Orchestrator stays lean: discover plans, analyze dependencies, group into waves, spawn subagents, collect results. Each subagent loads the full execute-plan context and handles its own plan.
|
|
20
|
+
|
|
21
|
+
Optional wave filter:
|
|
22
|
+
- `--wave N` executes only Wave `N` for pacing, quota management, or staged rollout
|
|
23
|
+
- phase verification/completion still only happens when no incomplete plans remain after the selected wave finishes
|
|
24
|
+
|
|
25
|
+
Flag handling rule:
|
|
26
|
+
- The optional flags documented below are available behaviors, not implied active behaviors
|
|
27
|
+
- A flag is active only when its literal token appears in `$ARGUMENTS`
|
|
28
|
+
- If a documented flag is absent from `$ARGUMENTS`, treat it as inactive
|
|
29
|
+
|
|
30
|
+
Context budget: ~15% orchestrator, 100% fresh per subagent.
|
|
31
|
+
</objective>
|
|
32
|
+
|
|
33
|
+
<execution_context>
|
|
34
|
+
@~/.claude/pilot/workflows/execute-phase.md
|
|
35
|
+
@~/.claude/pilot/references/ui-brand.md
|
|
36
|
+
</execution_context>
|
|
37
|
+
|
|
38
|
+
<context>
|
|
39
|
+
Phase: $ARGUMENTS
|
|
40
|
+
|
|
41
|
+
**Available optional flags (documentation only — not automatically active):**
|
|
42
|
+
- `--wave N` — Execute only Wave `N` in the phase. Use when you want to pace execution or stay inside usage limits.
|
|
43
|
+
- `--gaps-only` — Execute only gap closure plans (plans with `gap_closure: true` in frontmatter). Use after verify-work creates fix plans.
|
|
44
|
+
- `--interactive` — Execute plans sequentially inline (no subagents) with user checkpoints between tasks. Lower token usage, pair-programming style. Best for small phases, bug fixes, and verification gaps.
|
|
45
|
+
|
|
46
|
+
**Active flags must be derived from `$ARGUMENTS`:**
|
|
47
|
+
- `--wave N` is active only if the literal `--wave` token is present in `$ARGUMENTS`
|
|
48
|
+
- `--gaps-only` is active only if the literal `--gaps-only` token is present in `$ARGUMENTS`
|
|
49
|
+
- `--interactive` is active only if the literal `--interactive` token is present in `$ARGUMENTS`
|
|
50
|
+
- If none of these tokens appear, run the standard full-phase execution flow with no flag-specific filtering
|
|
51
|
+
- Do not infer that a flag is active just because it is documented in this prompt
|
|
52
|
+
|
|
53
|
+
Context files are resolved inside the workflow via `ccp-tools init execute-phase` and per-subagent `<files_to_read>` blocks.
|
|
54
|
+
</context>
|
|
55
|
+
|
|
56
|
+
<process>
|
|
57
|
+
Execute the execute-phase workflow from @~/.claude/pilot/workflows/execute-phase.md end-to-end.
|
|
58
|
+
Preserve all workflow gates (wave execution, checkpoint handling, verification, state updates, routing).
|
|
59
|
+
</process>
|