aw-ecc 1.4.21
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/.agents/skills/api-design/SKILL.md +523 -0
- package/.agents/skills/api-design/agents/openai.yaml +7 -0
- package/.agents/skills/article-writing/SKILL.md +85 -0
- package/.agents/skills/article-writing/agents/openai.yaml +7 -0
- package/.agents/skills/backend-patterns/SKILL.md +598 -0
- package/.agents/skills/backend-patterns/agents/openai.yaml +7 -0
- package/.agents/skills/bun-runtime/SKILL.md +84 -0
- package/.agents/skills/bun-runtime/agents/openai.yaml +7 -0
- package/.agents/skills/claude-api/SKILL.md +337 -0
- package/.agents/skills/claude-api/agents/openai.yaml +7 -0
- package/.agents/skills/coding-standards/SKILL.md +530 -0
- package/.agents/skills/coding-standards/agents/openai.yaml +7 -0
- package/.agents/skills/content-engine/SKILL.md +88 -0
- package/.agents/skills/content-engine/agents/openai.yaml +7 -0
- package/.agents/skills/crosspost/SKILL.md +188 -0
- package/.agents/skills/crosspost/agents/openai.yaml +7 -0
- package/.agents/skills/deep-research/SKILL.md +155 -0
- package/.agents/skills/deep-research/agents/openai.yaml +7 -0
- package/.agents/skills/dmux-workflows/SKILL.md +144 -0
- package/.agents/skills/dmux-workflows/agents/openai.yaml +7 -0
- package/.agents/skills/documentation-lookup/SKILL.md +90 -0
- package/.agents/skills/documentation-lookup/agents/openai.yaml +7 -0
- package/.agents/skills/e2e-testing/SKILL.md +326 -0
- package/.agents/skills/e2e-testing/agents/openai.yaml +7 -0
- package/.agents/skills/eval-harness/SKILL.md +236 -0
- package/.agents/skills/eval-harness/agents/openai.yaml +7 -0
- package/.agents/skills/everything-claude-code/SKILL.md +442 -0
- package/.agents/skills/everything-claude-code/agents/openai.yaml +6 -0
- package/.agents/skills/exa-search/SKILL.md +170 -0
- package/.agents/skills/exa-search/agents/openai.yaml +7 -0
- package/.agents/skills/fal-ai-media/SKILL.md +277 -0
- package/.agents/skills/fal-ai-media/agents/openai.yaml +7 -0
- package/.agents/skills/frontend-patterns/SKILL.md +642 -0
- package/.agents/skills/frontend-patterns/agents/openai.yaml +7 -0
- package/.agents/skills/frontend-slides/SKILL.md +184 -0
- package/.agents/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/.agents/skills/frontend-slides/agents/openai.yaml +7 -0
- package/.agents/skills/investor-materials/SKILL.md +96 -0
- package/.agents/skills/investor-materials/agents/openai.yaml +7 -0
- package/.agents/skills/investor-outreach/SKILL.md +76 -0
- package/.agents/skills/investor-outreach/agents/openai.yaml +7 -0
- package/.agents/skills/market-research/SKILL.md +75 -0
- package/.agents/skills/market-research/agents/openai.yaml +7 -0
- package/.agents/skills/mcp-server-patterns/SKILL.md +67 -0
- package/.agents/skills/nextjs-turbopack/SKILL.md +44 -0
- package/.agents/skills/nextjs-turbopack/agents/openai.yaml +7 -0
- package/.agents/skills/security-review/SKILL.md +495 -0
- package/.agents/skills/security-review/agents/openai.yaml +7 -0
- package/.agents/skills/strategic-compact/SKILL.md +103 -0
- package/.agents/skills/strategic-compact/agents/openai.yaml +7 -0
- package/.agents/skills/tdd-workflow/SKILL.md +410 -0
- package/.agents/skills/tdd-workflow/agents/openai.yaml +7 -0
- package/.agents/skills/verification-loop/SKILL.md +126 -0
- package/.agents/skills/verification-loop/agents/openai.yaml +7 -0
- package/.agents/skills/video-editing/SKILL.md +308 -0
- package/.agents/skills/video-editing/agents/openai.yaml +7 -0
- package/.agents/skills/x-api/SKILL.md +214 -0
- package/.agents/skills/x-api/agents/openai.yaml +7 -0
- package/.claude-plugin/README.md +17 -0
- package/.claude-plugin/plugin.json +24 -0
- package/.codex/AGENTS.md +93 -0
- package/.codex/INSTALL.md +64 -0
- package/.codex/agents/docs-researcher.toml +9 -0
- package/.codex/agents/explorer.toml +9 -0
- package/.codex/agents/reviewer.toml +9 -0
- package/.codex/config.toml +108 -0
- package/.codex/hooks/aw-post-tool-use.sh +5 -0
- package/.codex/hooks/aw-pre-tool-use.sh +5 -0
- package/.codex/hooks/aw-session-start.sh +21 -0
- package/.codex/hooks/aw-stop.sh +5 -0
- package/.codex/hooks/aw-user-prompt-submit.sh +9 -0
- package/.codex/hooks.json +62 -0
- package/.cursor/INSTALL.md +40 -0
- package/.cursor/hooks/adapter.js +120 -0
- package/.cursor/hooks/after-file-edit.js +11 -0
- package/.cursor/hooks/after-mcp-execution.js +11 -0
- package/.cursor/hooks/after-shell-execution.js +11 -0
- package/.cursor/hooks/after-tab-file-edit.js +12 -0
- package/.cursor/hooks/aw-phase-adapter.js +43 -0
- package/.cursor/hooks/before-mcp-execution.js +11 -0
- package/.cursor/hooks/before-read-file.js +13 -0
- package/.cursor/hooks/before-shell-execution.js +11 -0
- package/.cursor/hooks/before-submit-prompt.js +41 -0
- package/.cursor/hooks/before-tab-file-read.js +13 -0
- package/.cursor/hooks/pre-compact.js +11 -0
- package/.cursor/hooks/session-end.js +11 -0
- package/.cursor/hooks/session-start.js +11 -0
- package/.cursor/hooks/shared/aw-phase-definitions.js +190 -0
- package/.cursor/hooks/shared/aw-phase-runner.js +61 -0
- package/.cursor/hooks/shared/session-start.sh +20 -0
- package/.cursor/hooks/shared/user-prompt-submit.sh +155 -0
- package/.cursor/hooks/stop.js +11 -0
- package/.cursor/hooks/subagent-start.js +10 -0
- package/.cursor/hooks/subagent-stop.js +10 -0
- package/.cursor/hooks.json +115 -0
- package/.cursor/rules/common-agents.md +53 -0
- package/.cursor/rules/common-coding-style.md +52 -0
- package/.cursor/rules/common-development-workflow.md +33 -0
- package/.cursor/rules/common-git-workflow.md +28 -0
- package/.cursor/rules/common-hooks.md +34 -0
- package/.cursor/rules/common-patterns.md +35 -0
- package/.cursor/rules/common-performance.md +59 -0
- package/.cursor/rules/common-security.md +33 -0
- package/.cursor/rules/common-testing.md +33 -0
- package/.cursor/rules/golang-coding-style.md +31 -0
- package/.cursor/rules/golang-hooks.md +16 -0
- package/.cursor/rules/golang-patterns.md +44 -0
- package/.cursor/rules/golang-security.md +33 -0
- package/.cursor/rules/golang-testing.md +30 -0
- package/.cursor/rules/kotlin-coding-style.md +39 -0
- package/.cursor/rules/kotlin-hooks.md +16 -0
- package/.cursor/rules/kotlin-patterns.md +50 -0
- package/.cursor/rules/kotlin-security.md +58 -0
- package/.cursor/rules/kotlin-testing.md +38 -0
- package/.cursor/rules/php-coding-style.md +25 -0
- package/.cursor/rules/php-hooks.md +21 -0
- package/.cursor/rules/php-patterns.md +23 -0
- package/.cursor/rules/php-security.md +24 -0
- package/.cursor/rules/php-testing.md +26 -0
- package/.cursor/rules/python-coding-style.md +42 -0
- package/.cursor/rules/python-hooks.md +19 -0
- package/.cursor/rules/python-patterns.md +39 -0
- package/.cursor/rules/python-security.md +30 -0
- package/.cursor/rules/python-testing.md +38 -0
- package/.cursor/rules/swift-coding-style.md +47 -0
- package/.cursor/rules/swift-hooks.md +20 -0
- package/.cursor/rules/swift-patterns.md +66 -0
- package/.cursor/rules/swift-security.md +33 -0
- package/.cursor/rules/swift-testing.md +45 -0
- package/.cursor/rules/typescript-coding-style.md +63 -0
- package/.cursor/rules/typescript-hooks.md +20 -0
- package/.cursor/rules/typescript-patterns.md +50 -0
- package/.cursor/rules/typescript-security.md +26 -0
- package/.cursor/rules/typescript-testing.md +16 -0
- package/.cursor/skills/article-writing/SKILL.md +85 -0
- package/.cursor/skills/bun-runtime/SKILL.md +84 -0
- package/.cursor/skills/content-engine/SKILL.md +88 -0
- package/.cursor/skills/documentation-lookup/SKILL.md +90 -0
- package/.cursor/skills/frontend-slides/SKILL.md +184 -0
- package/.cursor/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/.cursor/skills/investor-materials/SKILL.md +96 -0
- package/.cursor/skills/investor-outreach/SKILL.md +76 -0
- package/.cursor/skills/market-research/SKILL.md +75 -0
- package/.cursor/skills/mcp-server-patterns/SKILL.md +67 -0
- package/.cursor/skills/nextjs-turbopack/SKILL.md +44 -0
- package/.opencode/MIGRATION.md +368 -0
- package/.opencode/README.md +204 -0
- package/.opencode/commands/build-fix.md +56 -0
- package/.opencode/commands/checkpoint.md +67 -0
- package/.opencode/commands/code-review.md +68 -0
- package/.opencode/commands/e2e.md +105 -0
- package/.opencode/commands/eval.md +88 -0
- package/.opencode/commands/evolve.md +36 -0
- package/.opencode/commands/go-build.md +87 -0
- package/.opencode/commands/go-review.md +71 -0
- package/.opencode/commands/go-test.md +131 -0
- package/.opencode/commands/harness-audit.md +71 -0
- package/.opencode/commands/instinct-export.md +93 -0
- package/.opencode/commands/instinct-import.md +88 -0
- package/.opencode/commands/instinct-status.md +29 -0
- package/.opencode/commands/learn.md +61 -0
- package/.opencode/commands/loop-start.md +32 -0
- package/.opencode/commands/loop-status.md +24 -0
- package/.opencode/commands/model-route.md +26 -0
- package/.opencode/commands/orchestrate.md +88 -0
- package/.opencode/commands/plan.md +49 -0
- package/.opencode/commands/projects.md +23 -0
- package/.opencode/commands/promote.md +23 -0
- package/.opencode/commands/quality-gate.md +29 -0
- package/.opencode/commands/refactor-clean.md +102 -0
- package/.opencode/commands/rust-build.md +78 -0
- package/.opencode/commands/rust-review.md +65 -0
- package/.opencode/commands/rust-test.md +104 -0
- package/.opencode/commands/security.md +89 -0
- package/.opencode/commands/setup-pm.md +67 -0
- package/.opencode/commands/skill-create.md +117 -0
- package/.opencode/commands/tdd.md +66 -0
- package/.opencode/commands/test-coverage.md +80 -0
- package/.opencode/commands/update-codemaps.md +81 -0
- package/.opencode/commands/update-docs.md +67 -0
- package/.opencode/commands/verify.md +67 -0
- package/.opencode/index.ts +79 -0
- package/.opencode/instructions/INSTRUCTIONS.md +337 -0
- package/.opencode/opencode.json +319 -0
- package/.opencode/package.json +70 -0
- package/.opencode/plugins/ecc-hooks.ts +455 -0
- package/.opencode/plugins/index.ts +12 -0
- package/.opencode/prompts/agents/architect.txt +175 -0
- package/.opencode/prompts/agents/build-error-resolver.txt +233 -0
- package/.opencode/prompts/agents/code-reviewer.txt +103 -0
- package/.opencode/prompts/agents/database-reviewer.txt +247 -0
- package/.opencode/prompts/agents/doc-updater.txt +192 -0
- package/.opencode/prompts/agents/e2e-runner.txt +305 -0
- package/.opencode/prompts/agents/go-build-resolver.txt +325 -0
- package/.opencode/prompts/agents/go-reviewer.txt +241 -0
- package/.opencode/prompts/agents/planner.txt +112 -0
- package/.opencode/prompts/agents/refactor-cleaner.txt +241 -0
- package/.opencode/prompts/agents/rust-build-resolver.txt +93 -0
- package/.opencode/prompts/agents/rust-reviewer.txt +61 -0
- package/.opencode/prompts/agents/security-reviewer.txt +207 -0
- package/.opencode/prompts/agents/tdd-guide.txt +211 -0
- package/.opencode/tools/check-coverage.ts +170 -0
- package/.opencode/tools/format-code.ts +68 -0
- package/.opencode/tools/git-summary.ts +54 -0
- package/.opencode/tools/index.ts +13 -0
- package/.opencode/tools/lint-check.ts +85 -0
- package/.opencode/tools/run-tests.ts +139 -0
- package/.opencode/tools/security-audit.ts +277 -0
- package/.opencode/tsconfig.json +29 -0
- package/AGENTS.md +124 -0
- package/LICENSE +21 -0
- package/README.md +146 -0
- package/README.zh-CN.md +552 -0
- package/agents/architect.md +211 -0
- package/agents/build-error-resolver.md +114 -0
- package/agents/chief-of-staff.md +151 -0
- package/agents/code-reviewer.md +237 -0
- package/agents/cpp-build-resolver.md +90 -0
- package/agents/cpp-reviewer.md +72 -0
- package/agents/database-reviewer.md +91 -0
- package/agents/doc-updater.md +107 -0
- package/agents/docs-lookup.md +68 -0
- package/agents/e2e-runner.md +107 -0
- package/agents/evals/code-reviewer-scenarios.json +23 -0
- package/agents/flutter-reviewer.md +243 -0
- package/agents/go-build-resolver.md +94 -0
- package/agents/go-reviewer.md +76 -0
- package/agents/harness-optimizer.md +35 -0
- package/agents/java-build-resolver.md +153 -0
- package/agents/java-reviewer.md +92 -0
- package/agents/kotlin-build-resolver.md +118 -0
- package/agents/kotlin-reviewer.md +159 -0
- package/agents/loop-operator.md +36 -0
- package/agents/planner.md +212 -0
- package/agents/python-reviewer.md +98 -0
- package/agents/pytorch-build-resolver.md +120 -0
- package/agents/refactor-cleaner.md +85 -0
- package/agents/rust-build-resolver.md +148 -0
- package/agents/rust-reviewer.md +94 -0
- package/agents/security-reviewer.md +108 -0
- package/agents/tdd-guide.md +91 -0
- package/agents/typescript-reviewer.md +112 -0
- package/commands/aside.md +164 -0
- package/commands/brainstorm.md +16 -0
- package/commands/build-fix.md +70 -0
- package/commands/build.md +91 -0
- package/commands/checkpoint.md +74 -0
- package/commands/claw.md +51 -0
- package/commands/code-review.md +24 -0
- package/commands/context-budget.md +29 -0
- package/commands/cpp-build.md +174 -0
- package/commands/cpp-review.md +132 -0
- package/commands/cpp-test.md +252 -0
- package/commands/deploy.md +75 -0
- package/commands/devfleet.md +92 -0
- package/commands/docs.md +31 -0
- package/commands/e2e.md +373 -0
- package/commands/eval.md +120 -0
- package/commands/evolve.md +178 -0
- package/commands/execute.md +51 -0
- package/commands/finish.md +22 -0
- package/commands/go-build.md +184 -0
- package/commands/go-review.md +148 -0
- package/commands/go-test.md +269 -0
- package/commands/gradle-build.md +70 -0
- package/commands/harness-audit.md +71 -0
- package/commands/instinct-export.md +66 -0
- package/commands/instinct-import.md +114 -0
- package/commands/instinct-status.md +59 -0
- package/commands/investigate.md +63 -0
- package/commands/kotlin-build.md +175 -0
- package/commands/kotlin-review.md +140 -0
- package/commands/kotlin-test.md +313 -0
- package/commands/learn-eval.md +116 -0
- package/commands/learn.md +70 -0
- package/commands/loop-start.md +32 -0
- package/commands/loop-status.md +24 -0
- package/commands/model-route.md +26 -0
- package/commands/multi-backend.md +166 -0
- package/commands/multi-execute.md +324 -0
- package/commands/multi-frontend.md +165 -0
- package/commands/multi-plan.md +277 -0
- package/commands/multi-workflow.md +200 -0
- package/commands/orchestrate.md +240 -0
- package/commands/plan.md +130 -0
- package/commands/pm2.md +272 -0
- package/commands/projects.md +39 -0
- package/commands/promote.md +41 -0
- package/commands/prompt-optimize.md +38 -0
- package/commands/prune.md +31 -0
- package/commands/python-review.md +297 -0
- package/commands/quality-gate.md +29 -0
- package/commands/refactor-clean.md +89 -0
- package/commands/resume-session.md +155 -0
- package/commands/review.md +64 -0
- package/commands/rules-distill.md +11 -0
- package/commands/rust-build.md +188 -0
- package/commands/rust-review.md +142 -0
- package/commands/rust-test.md +309 -0
- package/commands/save-session.md +275 -0
- package/commands/sessions.md +333 -0
- package/commands/setup-pm.md +80 -0
- package/commands/ship.md +77 -0
- package/commands/skill-create.md +174 -0
- package/commands/skill-health.md +54 -0
- package/commands/tdd.md +20 -0
- package/commands/test-coverage.md +77 -0
- package/commands/test.md +64 -0
- package/commands/update-codemaps.md +72 -0
- package/commands/update-docs.md +84 -0
- package/commands/verify.md +55 -0
- package/contexts/dev.md +20 -0
- package/contexts/research.md +26 -0
- package/contexts/review.md +22 -0
- package/examples/CLAUDE.md +100 -0
- package/examples/statusline.json +19 -0
- package/examples/user-CLAUDE.md +109 -0
- package/hooks/README.md +219 -0
- package/hooks/hooks.json +320 -0
- package/hooks/run-hook.cmd +31 -0
- package/hooks/session-start +6 -0
- package/install.ps1 +38 -0
- package/install.sh +17 -0
- package/manifests/install-components.json +415 -0
- package/manifests/install-modules.json +500 -0
- package/manifests/install-profiles.json +80 -0
- package/mcp-configs/mcp-servers.json +153 -0
- package/package.json +131 -0
- package/plugins/README.md +85 -0
- package/rules/README.md +106 -0
- package/rules/common/agents.md +50 -0
- package/rules/common/coding-style.md +48 -0
- package/rules/common/development-workflow.md +38 -0
- package/rules/common/git-workflow.md +24 -0
- package/rules/common/hooks.md +30 -0
- package/rules/common/patterns.md +31 -0
- package/rules/common/performance.md +55 -0
- package/rules/common/security.md +29 -0
- package/rules/common/testing.md +29 -0
- package/rules/cpp/coding-style.md +44 -0
- package/rules/cpp/hooks.md +39 -0
- package/rules/cpp/patterns.md +51 -0
- package/rules/cpp/security.md +51 -0
- package/rules/cpp/testing.md +44 -0
- package/rules/csharp/coding-style.md +72 -0
- package/rules/csharp/hooks.md +25 -0
- package/rules/csharp/patterns.md +50 -0
- package/rules/csharp/security.md +58 -0
- package/rules/csharp/testing.md +46 -0
- package/rules/golang/coding-style.md +32 -0
- package/rules/golang/hooks.md +17 -0
- package/rules/golang/patterns.md +45 -0
- package/rules/golang/security.md +34 -0
- package/rules/golang/testing.md +31 -0
- package/rules/java/coding-style.md +114 -0
- package/rules/java/hooks.md +18 -0
- package/rules/java/patterns.md +146 -0
- package/rules/java/security.md +100 -0
- package/rules/java/testing.md +131 -0
- package/rules/kotlin/coding-style.md +86 -0
- package/rules/kotlin/hooks.md +17 -0
- package/rules/kotlin/patterns.md +146 -0
- package/rules/kotlin/security.md +82 -0
- package/rules/kotlin/testing.md +128 -0
- package/rules/perl/coding-style.md +46 -0
- package/rules/perl/hooks.md +22 -0
- package/rules/perl/patterns.md +76 -0
- package/rules/perl/security.md +69 -0
- package/rules/perl/testing.md +54 -0
- package/rules/php/coding-style.md +40 -0
- package/rules/php/hooks.md +24 -0
- package/rules/php/patterns.md +33 -0
- package/rules/php/security.md +37 -0
- package/rules/php/testing.md +39 -0
- package/rules/python/coding-style.md +42 -0
- package/rules/python/hooks.md +19 -0
- package/rules/python/patterns.md +39 -0
- package/rules/python/security.md +30 -0
- package/rules/python/testing.md +38 -0
- package/rules/rust/coding-style.md +151 -0
- package/rules/rust/hooks.md +16 -0
- package/rules/rust/patterns.md +168 -0
- package/rules/rust/security.md +141 -0
- package/rules/rust/testing.md +154 -0
- package/rules/swift/coding-style.md +47 -0
- package/rules/swift/hooks.md +20 -0
- package/rules/swift/patterns.md +66 -0
- package/rules/swift/security.md +33 -0
- package/rules/swift/testing.md +45 -0
- package/rules/typescript/coding-style.md +199 -0
- package/rules/typescript/hooks.md +22 -0
- package/rules/typescript/patterns.md +52 -0
- package/rules/typescript/security.md +28 -0
- package/rules/typescript/testing.md +18 -0
- package/schemas/ecc-install-config.schema.json +58 -0
- package/schemas/hooks.schema.json +197 -0
- package/schemas/install-components.schema.json +58 -0
- package/schemas/install-modules.schema.json +105 -0
- package/schemas/install-profiles.schema.json +45 -0
- package/schemas/install-state.schema.json +210 -0
- package/schemas/package-manager.schema.json +23 -0
- package/schemas/plugin.schema.json +58 -0
- package/schemas/provenance.schema.json +31 -0
- package/schemas/state-store.schema.json +316 -0
- package/scripts/ci/catalog.js +245 -0
- package/scripts/ci/validate-agents.js +81 -0
- package/scripts/ci/validate-commands.js +136 -0
- package/scripts/ci/validate-hooks.js +239 -0
- package/scripts/ci/validate-install-manifests.js +214 -0
- package/scripts/ci/validate-no-personal-paths.js +63 -0
- package/scripts/ci/validate-rules.js +81 -0
- package/scripts/ci/validate-skills.js +56 -0
- package/scripts/claw.js +473 -0
- package/scripts/codex/merge-mcp-config.js +304 -0
- package/scripts/cursor-aw-home/hooks.json +115 -0
- package/scripts/cursor-aw-hooks/adapter.js +120 -0
- package/scripts/cursor-aw-hooks/after-file-edit.js +11 -0
- package/scripts/cursor-aw-hooks/after-mcp-execution.js +11 -0
- package/scripts/cursor-aw-hooks/after-shell-execution.js +11 -0
- package/scripts/cursor-aw-hooks/aw-phase-adapter.js +43 -0
- package/scripts/cursor-aw-hooks/before-mcp-execution.js +11 -0
- package/scripts/cursor-aw-hooks/before-shell-execution.js +11 -0
- package/scripts/cursor-aw-hooks/before-submit-prompt.js +41 -0
- package/scripts/cursor-aw-hooks/pre-compact.js +11 -0
- package/scripts/cursor-aw-hooks/session-end.js +11 -0
- package/scripts/cursor-aw-hooks/session-start.js +11 -0
- package/scripts/cursor-aw-hooks/stop.js +11 -0
- package/scripts/doctor.js +110 -0
- package/scripts/ecc.js +208 -0
- package/scripts/generate-aw-hooks.js +110 -0
- package/scripts/harness-audit.js +512 -0
- package/scripts/hooks/auto-tmux-dev.js +88 -0
- package/scripts/hooks/check-console-log.js +71 -0
- package/scripts/hooks/check-hook-enabled.js +12 -0
- package/scripts/hooks/config-protection.js +125 -0
- package/scripts/hooks/cost-tracker.js +78 -0
- package/scripts/hooks/doc-file-warning.js +63 -0
- package/scripts/hooks/evaluate-session.js +100 -0
- package/scripts/hooks/governance-capture.js +280 -0
- package/scripts/hooks/insaits-security-monitor.py +269 -0
- package/scripts/hooks/insaits-security-wrapper.js +88 -0
- package/scripts/hooks/mcp-health-check.js +588 -0
- package/scripts/hooks/post-bash-build-complete.js +27 -0
- package/scripts/hooks/post-bash-pr-created.js +37 -0
- package/scripts/hooks/post-edit-console-warn.js +54 -0
- package/scripts/hooks/post-edit-format.js +109 -0
- package/scripts/hooks/post-edit-typecheck.js +96 -0
- package/scripts/hooks/post-mcp-log.js +27 -0
- package/scripts/hooks/pre-bash-dev-server-block.js +187 -0
- package/scripts/hooks/pre-bash-git-push-reminder.js +28 -0
- package/scripts/hooks/pre-bash-tmux-reminder.js +33 -0
- package/scripts/hooks/pre-compact.js +48 -0
- package/scripts/hooks/pre-mcp-log.js +26 -0
- package/scripts/hooks/pre-write-doc-warn.js +9 -0
- package/scripts/hooks/quality-gate.js +168 -0
- package/scripts/hooks/run-with-flags-shell.sh +32 -0
- package/scripts/hooks/run-with-flags.js +120 -0
- package/scripts/hooks/session-end-marker.js +29 -0
- package/scripts/hooks/session-end.js +301 -0
- package/scripts/hooks/session-start-rules-context.sh +5 -0
- package/scripts/hooks/session-start.js +98 -0
- package/scripts/hooks/shared/aw-phase-definitions.js +190 -0
- package/scripts/hooks/shared/aw-phase-runner.js +61 -0
- package/scripts/hooks/shared/session-start.sh +20 -0
- package/scripts/hooks/shared/user-prompt-submit.sh +155 -0
- package/scripts/hooks/suggest-compact.js +80 -0
- package/scripts/install-apply.js +140 -0
- package/scripts/install-plan.js +254 -0
- package/scripts/lib/agent-compress.js +244 -0
- package/scripts/lib/aw-harness-registry.js +122 -0
- package/scripts/lib/aw-hook-contract.js +86 -0
- package/scripts/lib/claude-aw-hook-files.js +28 -0
- package/scripts/lib/claude-hook-config.js +76 -0
- package/scripts/lib/codex-aw-hook-files.js +38 -0
- package/scripts/lib/codex-hook-config.js +88 -0
- package/scripts/lib/cursor-aw-hook-files.js +62 -0
- package/scripts/lib/cursor-hook-config.js +148 -0
- package/scripts/lib/hook-flags.js +74 -0
- package/scripts/lib/inspection.js +212 -0
- package/scripts/lib/install/apply.js +23 -0
- package/scripts/lib/install/config.js +82 -0
- package/scripts/lib/install/request.js +120 -0
- package/scripts/lib/install/runtime.js +54 -0
- package/scripts/lib/install-executor.js +778 -0
- package/scripts/lib/install-lifecycle.js +1311 -0
- package/scripts/lib/install-manifests.js +448 -0
- package/scripts/lib/install-state.js +313 -0
- package/scripts/lib/install-targets/antigravity-project.js +69 -0
- package/scripts/lib/install-targets/claude-home.js +54 -0
- package/scripts/lib/install-targets/codex-home.js +62 -0
- package/scripts/lib/install-targets/cursor-project.js +80 -0
- package/scripts/lib/install-targets/helpers.js +307 -0
- package/scripts/lib/install-targets/opencode-home.js +10 -0
- package/scripts/lib/install-targets/registry.js +66 -0
- package/scripts/lib/orchestration-session.js +299 -0
- package/scripts/lib/package-manager.d.ts +119 -0
- package/scripts/lib/package-manager.js +431 -0
- package/scripts/lib/project-detect.js +428 -0
- package/scripts/lib/resolve-ecc-root.js +89 -0
- package/scripts/lib/resolve-formatter.js +185 -0
- package/scripts/lib/session-adapters/canonical-session.js +531 -0
- package/scripts/lib/session-adapters/claude-history.js +160 -0
- package/scripts/lib/session-adapters/dmux-tmux.js +90 -0
- package/scripts/lib/session-adapters/registry.js +127 -0
- package/scripts/lib/session-aliases.d.ts +136 -0
- package/scripts/lib/session-aliases.js +481 -0
- package/scripts/lib/session-manager.d.ts +131 -0
- package/scripts/lib/session-manager.js +464 -0
- package/scripts/lib/shell-split.js +86 -0
- package/scripts/lib/skill-evolution/dashboard.js +401 -0
- package/scripts/lib/skill-evolution/health.js +263 -0
- package/scripts/lib/skill-evolution/index.js +20 -0
- package/scripts/lib/skill-evolution/provenance.js +187 -0
- package/scripts/lib/skill-evolution/tracker.js +146 -0
- package/scripts/lib/skill-evolution/versioning.js +237 -0
- package/scripts/lib/skill-improvement/amendify.js +89 -0
- package/scripts/lib/skill-improvement/evaluate.js +59 -0
- package/scripts/lib/skill-improvement/health.js +118 -0
- package/scripts/lib/skill-improvement/observations.js +108 -0
- package/scripts/lib/state-store/index.js +191 -0
- package/scripts/lib/state-store/migrations.js +178 -0
- package/scripts/lib/state-store/queries.js +697 -0
- package/scripts/lib/state-store/schema.js +92 -0
- package/scripts/lib/tmux-worktree-orchestrator.js +475 -0
- package/scripts/lib/utils.d.ts +183 -0
- package/scripts/lib/utils.js +564 -0
- package/scripts/list-installed.js +90 -0
- package/scripts/orchestrate-codex-worker.sh +107 -0
- package/scripts/orchestrate-worktrees.js +40 -0
- package/scripts/orchestration-status.js +82 -0
- package/scripts/repair.js +97 -0
- package/scripts/session-inspect.js +150 -0
- package/scripts/sessions-cli.js +177 -0
- package/scripts/setup-package-manager.js +204 -0
- package/scripts/skill-create-output.js +244 -0
- package/scripts/status.js +176 -0
- package/scripts/uninstall.js +96 -0
- package/skills/agent-eval/SKILL.md +145 -0
- package/skills/agent-harness-construction/SKILL.md +73 -0
- package/skills/agentic-engineering/SKILL.md +63 -0
- package/skills/ai-first-engineering/SKILL.md +51 -0
- package/skills/ai-regression-testing/SKILL.md +385 -0
- package/skills/android-clean-architecture/SKILL.md +339 -0
- package/skills/api-and-interface-design/SKILL.md +75 -0
- package/skills/api-design/SKILL.md +523 -0
- package/skills/architecture-decision-records/SKILL.md +179 -0
- package/skills/article-writing/SKILL.md +85 -0
- package/skills/autonomous-loops/SKILL.md +610 -0
- package/skills/aw-brainstorm/SKILL.md +115 -0
- package/skills/aw-build/SKILL.md +189 -0
- package/skills/aw-build/evals/build-stage-cases.json +28 -0
- package/skills/aw-debug/SKILL.md +49 -0
- package/skills/aw-deploy/SKILL.md +101 -0
- package/skills/aw-deploy/evals/deploy-stage-cases.json +32 -0
- package/skills/aw-execute/SKILL.md +47 -0
- package/skills/aw-execute/references/mode-code.md +47 -0
- package/skills/aw-execute/references/mode-docs.md +28 -0
- package/skills/aw-execute/references/mode-infra.md +44 -0
- package/skills/aw-execute/references/mode-migration.md +58 -0
- package/skills/aw-execute/references/worker-implementer.md +26 -0
- package/skills/aw-execute/references/worker-parallel-worker.md +23 -0
- package/skills/aw-execute/references/worker-quality-reviewer.md +23 -0
- package/skills/aw-execute/references/worker-spec-reviewer.md +23 -0
- package/skills/aw-execute/scripts/build-worker-bundle.js +229 -0
- package/skills/aw-finish/SKILL.md +111 -0
- package/skills/aw-investigate/SKILL.md +109 -0
- package/skills/aw-plan/SKILL.md +399 -0
- package/skills/aw-prepare/SKILL.md +118 -0
- package/skills/aw-review/SKILL.md +123 -0
- package/skills/aw-rules/SKILL.md +129 -0
- package/skills/aw-rules/references/known-hallucinations.md +43 -0
- package/skills/aw-rules/references/verification-sources.md +50 -0
- package/skills/aw-ship/SKILL.md +115 -0
- package/skills/aw-spec/SKILL.md +128 -0
- package/skills/aw-tasks/SKILL.md +155 -0
- package/skills/aw-test/SKILL.md +118 -0
- package/skills/aw-verify/SKILL.md +51 -0
- package/skills/aw-yolo/SKILL.md +111 -0
- package/skills/backend-patterns/SKILL.md +598 -0
- package/skills/benchmark/SKILL.md +87 -0
- package/skills/blueprint/SKILL.md +105 -0
- package/skills/browser-qa/SKILL.md +81 -0
- package/skills/browser-testing-with-devtools/SKILL.md +81 -0
- package/skills/bun-runtime/SKILL.md +84 -0
- package/skills/canary-watch/SKILL.md +93 -0
- package/skills/carrier-relationship-management/SKILL.md +212 -0
- package/skills/ci-cd-and-automation/SKILL.md +71 -0
- package/skills/claude-api/SKILL.md +337 -0
- package/skills/claude-devfleet/SKILL.md +103 -0
- package/skills/click-path-audit/SKILL.md +244 -0
- package/skills/clickhouse-io/SKILL.md +439 -0
- package/skills/code-simplification/SKILL.md +74 -0
- package/skills/codebase-onboarding/SKILL.md +233 -0
- package/skills/coding-standards/SKILL.md +530 -0
- package/skills/compose-multiplatform-patterns/SKILL.md +299 -0
- package/skills/configure-ecc/SKILL.md +367 -0
- package/skills/content-engine/SKILL.md +88 -0
- package/skills/content-hash-cache-pattern/SKILL.md +161 -0
- package/skills/context-budget/SKILL.md +135 -0
- package/skills/context-engineering/SKILL.md +74 -0
- package/skills/continuous-agent-loop/SKILL.md +45 -0
- package/skills/continuous-learning/SKILL.md +119 -0
- package/skills/continuous-learning/config.json +18 -0
- package/skills/continuous-learning/evaluate-session.sh +69 -0
- package/skills/continuous-learning-v2/SKILL.md +365 -0
- package/skills/continuous-learning-v2/agents/observer-loop.sh +191 -0
- package/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/skills/continuous-learning-v2/agents/start-observer.sh +240 -0
- package/skills/continuous-learning-v2/config.json +8 -0
- package/skills/continuous-learning-v2/hooks/observe.sh +412 -0
- package/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
- package/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
- package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +984 -0
- package/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/skills/cpp-coding-standards/SKILL.md +723 -0
- package/skills/cpp-testing/SKILL.md +324 -0
- package/skills/crosspost/SKILL.md +190 -0
- package/skills/customs-trade-compliance/SKILL.md +263 -0
- package/skills/data-scraper-agent/SKILL.md +764 -0
- package/skills/database-migrations/SKILL.md +429 -0
- package/skills/deep-research/SKILL.md +155 -0
- package/skills/deployment-patterns/SKILL.md +427 -0
- package/skills/deprecation-and-migration/SKILL.md +75 -0
- package/skills/design-system/SKILL.md +76 -0
- package/skills/django-patterns/SKILL.md +734 -0
- package/skills/django-security/SKILL.md +593 -0
- package/skills/django-tdd/SKILL.md +729 -0
- package/skills/django-verification/SKILL.md +469 -0
- package/skills/dmux-workflows/SKILL.md +191 -0
- package/skills/docker-patterns/SKILL.md +364 -0
- package/skills/documentation-and-adrs/SKILL.md +75 -0
- package/skills/documentation-lookup/SKILL.md +90 -0
- package/skills/e2e-testing/SKILL.md +326 -0
- package/skills/energy-procurement/SKILL.md +228 -0
- package/skills/enterprise-agent-ops/SKILL.md +50 -0
- package/skills/eval-harness/SKILL.md +270 -0
- package/skills/exa-search/SKILL.md +103 -0
- package/skills/fal-ai-media/SKILL.md +284 -0
- package/skills/flutter-dart-code-review/SKILL.md +435 -0
- package/skills/foundation-models-on-device/SKILL.md +243 -0
- package/skills/frontend-patterns/SKILL.md +642 -0
- package/skills/frontend-slides/SKILL.md +184 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/frontend-ui-engineering/SKILL.md +68 -0
- package/skills/git-workflow-and-versioning/SKILL.md +75 -0
- package/skills/golang-patterns/SKILL.md +674 -0
- package/skills/golang-testing/SKILL.md +720 -0
- package/skills/idea-refine/SKILL.md +84 -0
- package/skills/incremental-implementation/SKILL.md +86 -0
- package/skills/inventory-demand-planning/SKILL.md +247 -0
- package/skills/investor-materials/SKILL.md +96 -0
- package/skills/investor-outreach/SKILL.md +76 -0
- package/skills/iterative-retrieval/SKILL.md +211 -0
- package/skills/java-coding-standards/SKILL.md +147 -0
- package/skills/jpa-patterns/SKILL.md +151 -0
- package/skills/kotlin-coroutines-flows/SKILL.md +284 -0
- package/skills/kotlin-exposed-patterns/SKILL.md +719 -0
- package/skills/kotlin-ktor-patterns/SKILL.md +689 -0
- package/skills/kotlin-patterns/SKILL.md +711 -0
- package/skills/kotlin-testing/SKILL.md +824 -0
- package/skills/laravel-patterns/SKILL.md +415 -0
- package/skills/laravel-security/SKILL.md +285 -0
- package/skills/laravel-tdd/SKILL.md +283 -0
- package/skills/laravel-verification/SKILL.md +179 -0
- package/skills/liquid-glass-design/SKILL.md +279 -0
- package/skills/logistics-exception-management/SKILL.md +222 -0
- package/skills/market-research/SKILL.md +75 -0
- package/skills/mcp-server-patterns/SKILL.md +67 -0
- package/skills/nanoclaw-repl/SKILL.md +33 -0
- package/skills/nextjs-turbopack/SKILL.md +44 -0
- package/skills/nutrient-document-processing/SKILL.md +167 -0
- package/skills/nuxt4-patterns/SKILL.md +100 -0
- package/skills/performance-optimization/SKILL.md +77 -0
- package/skills/perl-patterns/SKILL.md +504 -0
- package/skills/perl-security/SKILL.md +503 -0
- package/skills/perl-testing/SKILL.md +475 -0
- package/skills/plankton-code-quality/SKILL.md +236 -0
- package/skills/postgres-patterns/SKILL.md +147 -0
- package/skills/product-lens/SKILL.md +79 -0
- package/skills/production-scheduling/SKILL.md +238 -0
- package/skills/project-guidelines-example/SKILL.md +349 -0
- package/skills/prompt-optimizer/SKILL.md +397 -0
- package/skills/python-patterns/SKILL.md +750 -0
- package/skills/python-testing/SKILL.md +816 -0
- package/skills/pytorch-patterns/SKILL.md +396 -0
- package/skills/quality-nonconformance/SKILL.md +260 -0
- package/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
- package/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
- package/skills/returns-reverse-logistics/SKILL.md +240 -0
- package/skills/rules-distill/SKILL.md +264 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/rust-patterns/SKILL.md +499 -0
- package/skills/rust-testing/SKILL.md +500 -0
- package/skills/safety-guard/SKILL.md +69 -0
- package/skills/santa-method/SKILL.md +306 -0
- package/skills/search-first/SKILL.md +161 -0
- package/skills/security-and-hardening/SKILL.md +70 -0
- package/skills/security-review/SKILL.md +495 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/security-scan/SKILL.md +165 -0
- package/skills/skill-comply/SKILL.md +58 -0
- package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/skills/skill-comply/prompts/classifier.md +24 -0
- package/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/skills/skill-comply/pyproject.toml +15 -0
- package/skills/skill-comply/scripts/__init__.py +0 -0
- package/skills/skill-comply/scripts/classifier.py +85 -0
- package/skills/skill-comply/scripts/grader.py +122 -0
- package/skills/skill-comply/scripts/parser.py +107 -0
- package/skills/skill-comply/scripts/report.py +170 -0
- package/skills/skill-comply/scripts/run.py +127 -0
- package/skills/skill-comply/scripts/runner.py +161 -0
- package/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/skills/skill-comply/scripts/utils.py +13 -0
- package/skills/skill-comply/tests/test_grader.py +137 -0
- package/skills/skill-comply/tests/test_parser.py +90 -0
- package/skills/skill-quality-review/SKILL.md +102 -0
- package/skills/skill-quality-review/references/review-rubric.md +112 -0
- package/skills/skill-stocktake/SKILL.md +197 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/springboot-patterns/SKILL.md +314 -0
- package/skills/springboot-security/SKILL.md +272 -0
- package/skills/springboot-tdd/SKILL.md +158 -0
- package/skills/springboot-verification/SKILL.md +231 -0
- package/skills/strategic-compact/SKILL.md +131 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/swift-actor-persistence/SKILL.md +143 -0
- package/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/swift-protocol-di-testing/SKILL.md +190 -0
- package/skills/swiftui-patterns/SKILL.md +259 -0
- package/skills/tdd-workflow/SKILL.md +145 -0
- package/skills/team-builder/SKILL.md +161 -0
- package/skills/using-aw-skills/SKILL.md +290 -0
- package/skills/using-aw-skills/evals/skill-trigger-cases.tsv +25 -0
- package/skills/using-aw-skills/evals/test-skill-triggers.sh +171 -0
- package/skills/using-aw-skills/hooks/hooks.json +9 -0
- package/skills/using-aw-skills/hooks/session-start.sh +188 -0
- package/skills/using-platform-skills/SKILL.md +163 -0
- package/skills/using-platform-skills/evals/platform-selection-cases.json +52 -0
- package/skills/verification-loop/SKILL.md +126 -0
- package/skills/video-editing/SKILL.md +310 -0
- package/skills/videodb/SKILL.md +374 -0
- package/skills/videodb/reference/api-reference.md +550 -0
- package/skills/videodb/reference/capture-reference.md +407 -0
- package/skills/videodb/reference/capture.md +101 -0
- package/skills/videodb/reference/editor.md +443 -0
- package/skills/videodb/reference/generative.md +331 -0
- package/skills/videodb/reference/rtstream-reference.md +564 -0
- package/skills/videodb/reference/rtstream.md +65 -0
- package/skills/videodb/reference/search.md +230 -0
- package/skills/videodb/reference/streaming.md +406 -0
- package/skills/videodb/reference/use-cases.md +118 -0
- package/skills/videodb/scripts/ws_listener.py +282 -0
- package/skills/visa-doc-translate/README.md +86 -0
- package/skills/visa-doc-translate/SKILL.md +117 -0
- package/skills/x-api/SKILL.md +208 -0
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cpp-testing
|
|
3
|
+
description: Use only when writing/updating/fixing C++ tests, configuring GoogleTest/CTest, diagnosing failing or flaky tests, or adding coverage/sanitizers.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# C++ Testing (Agent Skill)
|
|
8
|
+
|
|
9
|
+
Agent-focused testing workflow for modern C++ (C++17/20) using GoogleTest/GoogleMock with CMake/CTest.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- Writing new C++ tests or fixing existing tests
|
|
14
|
+
- Designing unit/integration test coverage for C++ components
|
|
15
|
+
- Adding test coverage, CI gating, or regression protection
|
|
16
|
+
- Configuring CMake/CTest workflows for consistent execution
|
|
17
|
+
- Investigating test failures or flaky behavior
|
|
18
|
+
- Enabling sanitizers for memory/race diagnostics
|
|
19
|
+
|
|
20
|
+
### When NOT to Use
|
|
21
|
+
|
|
22
|
+
- Implementing new product features without test changes
|
|
23
|
+
- Large-scale refactors unrelated to test coverage or failures
|
|
24
|
+
- Performance tuning without test regressions to validate
|
|
25
|
+
- Non-C++ projects or non-test tasks
|
|
26
|
+
|
|
27
|
+
## Core Concepts
|
|
28
|
+
|
|
29
|
+
- **TDD loop**: red → green → refactor (tests first, minimal fix, then cleanups).
|
|
30
|
+
- **Isolation**: prefer dependency injection and fakes over global state.
|
|
31
|
+
- **Test layout**: `tests/unit`, `tests/integration`, `tests/testdata`.
|
|
32
|
+
- **Mocks vs fakes**: mock for interactions, fake for stateful behavior.
|
|
33
|
+
- **CTest discovery**: use `gtest_discover_tests()` for stable test discovery.
|
|
34
|
+
- **CI signal**: run subset first, then full suite with `--output-on-failure`.
|
|
35
|
+
|
|
36
|
+
## TDD Workflow
|
|
37
|
+
|
|
38
|
+
Follow the RED → GREEN → REFACTOR loop:
|
|
39
|
+
|
|
40
|
+
1. **RED**: write a failing test that captures the new behavior
|
|
41
|
+
2. **GREEN**: implement the smallest change to pass
|
|
42
|
+
3. **REFACTOR**: clean up while tests stay green
|
|
43
|
+
|
|
44
|
+
```cpp
|
|
45
|
+
// tests/add_test.cpp
|
|
46
|
+
#include <gtest/gtest.h>
|
|
47
|
+
|
|
48
|
+
int Add(int a, int b); // Provided by production code.
|
|
49
|
+
|
|
50
|
+
TEST(AddTest, AddsTwoNumbers) { // RED
|
|
51
|
+
EXPECT_EQ(Add(2, 3), 5);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// src/add.cpp
|
|
55
|
+
int Add(int a, int b) { // GREEN
|
|
56
|
+
return a + b;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// REFACTOR: simplify/rename once tests pass
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Code Examples
|
|
63
|
+
|
|
64
|
+
### Basic Unit Test (gtest)
|
|
65
|
+
|
|
66
|
+
```cpp
|
|
67
|
+
// tests/calculator_test.cpp
|
|
68
|
+
#include <gtest/gtest.h>
|
|
69
|
+
|
|
70
|
+
int Add(int a, int b); // Provided by production code.
|
|
71
|
+
|
|
72
|
+
TEST(CalculatorTest, AddsTwoNumbers) {
|
|
73
|
+
EXPECT_EQ(Add(2, 3), 5);
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Fixture (gtest)
|
|
78
|
+
|
|
79
|
+
```cpp
|
|
80
|
+
// tests/user_store_test.cpp
|
|
81
|
+
// Pseudocode stub: replace UserStore/User with project types.
|
|
82
|
+
#include <gtest/gtest.h>
|
|
83
|
+
#include <memory>
|
|
84
|
+
#include <optional>
|
|
85
|
+
#include <string>
|
|
86
|
+
|
|
87
|
+
struct User { std::string name; };
|
|
88
|
+
class UserStore {
|
|
89
|
+
public:
|
|
90
|
+
explicit UserStore(std::string /*path*/) {}
|
|
91
|
+
void Seed(std::initializer_list<User> /*users*/) {}
|
|
92
|
+
std::optional<User> Find(const std::string &/*name*/) { return User{"alice"}; }
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
class UserStoreTest : public ::testing::Test {
|
|
96
|
+
protected:
|
|
97
|
+
void SetUp() override {
|
|
98
|
+
store = std::make_unique<UserStore>(":memory:");
|
|
99
|
+
store->Seed({{"alice"}, {"bob"}});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
std::unique_ptr<UserStore> store;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
TEST_F(UserStoreTest, FindsExistingUser) {
|
|
106
|
+
auto user = store->Find("alice");
|
|
107
|
+
ASSERT_TRUE(user.has_value());
|
|
108
|
+
EXPECT_EQ(user->name, "alice");
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Mock (gmock)
|
|
113
|
+
|
|
114
|
+
```cpp
|
|
115
|
+
// tests/notifier_test.cpp
|
|
116
|
+
#include <gmock/gmock.h>
|
|
117
|
+
#include <gtest/gtest.h>
|
|
118
|
+
#include <string>
|
|
119
|
+
|
|
120
|
+
class Notifier {
|
|
121
|
+
public:
|
|
122
|
+
virtual ~Notifier() = default;
|
|
123
|
+
virtual void Send(const std::string &message) = 0;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
class MockNotifier : public Notifier {
|
|
127
|
+
public:
|
|
128
|
+
MOCK_METHOD(void, Send, (const std::string &message), (override));
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
class Service {
|
|
132
|
+
public:
|
|
133
|
+
explicit Service(Notifier ¬ifier) : notifier_(notifier) {}
|
|
134
|
+
void Publish(const std::string &message) { notifier_.Send(message); }
|
|
135
|
+
|
|
136
|
+
private:
|
|
137
|
+
Notifier ¬ifier_;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
TEST(ServiceTest, SendsNotifications) {
|
|
141
|
+
MockNotifier notifier;
|
|
142
|
+
Service service(notifier);
|
|
143
|
+
|
|
144
|
+
EXPECT_CALL(notifier, Send("hello")).Times(1);
|
|
145
|
+
service.Publish("hello");
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### CMake/CTest Quickstart
|
|
150
|
+
|
|
151
|
+
```cmake
|
|
152
|
+
# CMakeLists.txt (excerpt)
|
|
153
|
+
cmake_minimum_required(VERSION 3.20)
|
|
154
|
+
project(example LANGUAGES CXX)
|
|
155
|
+
|
|
156
|
+
set(CMAKE_CXX_STANDARD 20)
|
|
157
|
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
158
|
+
|
|
159
|
+
include(FetchContent)
|
|
160
|
+
# Prefer project-locked versions. If using a tag, use a pinned version per project policy.
|
|
161
|
+
set(GTEST_VERSION v1.17.0) # Adjust to project policy.
|
|
162
|
+
FetchContent_Declare(
|
|
163
|
+
googletest
|
|
164
|
+
# Google Test framework (official repository)
|
|
165
|
+
URL https://github.com/google/googletest/archive/refs/tags/${GTEST_VERSION}.zip
|
|
166
|
+
)
|
|
167
|
+
FetchContent_MakeAvailable(googletest)
|
|
168
|
+
|
|
169
|
+
add_executable(example_tests
|
|
170
|
+
tests/calculator_test.cpp
|
|
171
|
+
src/calculator.cpp
|
|
172
|
+
)
|
|
173
|
+
target_link_libraries(example_tests GTest::gtest GTest::gmock GTest::gtest_main)
|
|
174
|
+
|
|
175
|
+
enable_testing()
|
|
176
|
+
include(GoogleTest)
|
|
177
|
+
gtest_discover_tests(example_tests)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
|
|
182
|
+
cmake --build build -j
|
|
183
|
+
ctest --test-dir build --output-on-failure
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Running Tests
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
ctest --test-dir build --output-on-failure
|
|
190
|
+
ctest --test-dir build -R ClampTest
|
|
191
|
+
ctest --test-dir build -R "UserStoreTest.*" --output-on-failure
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
./build/example_tests --gtest_filter=ClampTest.*
|
|
196
|
+
./build/example_tests --gtest_filter=UserStoreTest.FindsExistingUser
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Debugging Failures
|
|
200
|
+
|
|
201
|
+
1. Re-run the single failing test with gtest filter.
|
|
202
|
+
2. Add scoped logging around the failing assertion.
|
|
203
|
+
3. Re-run with sanitizers enabled.
|
|
204
|
+
4. Expand to full suite once the root cause is fixed.
|
|
205
|
+
|
|
206
|
+
## Coverage
|
|
207
|
+
|
|
208
|
+
Prefer target-level settings instead of global flags.
|
|
209
|
+
|
|
210
|
+
```cmake
|
|
211
|
+
option(ENABLE_COVERAGE "Enable coverage flags" OFF)
|
|
212
|
+
|
|
213
|
+
if(ENABLE_COVERAGE)
|
|
214
|
+
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
|
215
|
+
target_compile_options(example_tests PRIVATE --coverage)
|
|
216
|
+
target_link_options(example_tests PRIVATE --coverage)
|
|
217
|
+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
218
|
+
target_compile_options(example_tests PRIVATE -fprofile-instr-generate -fcoverage-mapping)
|
|
219
|
+
target_link_options(example_tests PRIVATE -fprofile-instr-generate)
|
|
220
|
+
endif()
|
|
221
|
+
endif()
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
GCC + gcov + lcov:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
cmake -S . -B build-cov -DENABLE_COVERAGE=ON
|
|
228
|
+
cmake --build build-cov -j
|
|
229
|
+
ctest --test-dir build-cov
|
|
230
|
+
lcov --capture --directory build-cov --output-file coverage.info
|
|
231
|
+
lcov --remove coverage.info '/usr/*' --output-file coverage.info
|
|
232
|
+
genhtml coverage.info --output-directory coverage
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Clang + llvm-cov:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
cmake -S . -B build-llvm -DENABLE_COVERAGE=ON -DCMAKE_CXX_COMPILER=clang++
|
|
239
|
+
cmake --build build-llvm -j
|
|
240
|
+
LLVM_PROFILE_FILE="build-llvm/default.profraw" ctest --test-dir build-llvm
|
|
241
|
+
llvm-profdata merge -sparse build-llvm/default.profraw -o build-llvm/default.profdata
|
|
242
|
+
llvm-cov report build-llvm/example_tests -instr-profile=build-llvm/default.profdata
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Sanitizers
|
|
246
|
+
|
|
247
|
+
```cmake
|
|
248
|
+
option(ENABLE_ASAN "Enable AddressSanitizer" OFF)
|
|
249
|
+
option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer" OFF)
|
|
250
|
+
option(ENABLE_TSAN "Enable ThreadSanitizer" OFF)
|
|
251
|
+
|
|
252
|
+
if(ENABLE_ASAN)
|
|
253
|
+
add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
|
|
254
|
+
add_link_options(-fsanitize=address)
|
|
255
|
+
endif()
|
|
256
|
+
if(ENABLE_UBSAN)
|
|
257
|
+
add_compile_options(-fsanitize=undefined -fno-omit-frame-pointer)
|
|
258
|
+
add_link_options(-fsanitize=undefined)
|
|
259
|
+
endif()
|
|
260
|
+
if(ENABLE_TSAN)
|
|
261
|
+
add_compile_options(-fsanitize=thread)
|
|
262
|
+
add_link_options(-fsanitize=thread)
|
|
263
|
+
endif()
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Flaky Tests Guardrails
|
|
267
|
+
|
|
268
|
+
- Never use `sleep` for synchronization; use condition variables or latches.
|
|
269
|
+
- Make temp directories unique per test and always clean them.
|
|
270
|
+
- Avoid real time, network, or filesystem dependencies in unit tests.
|
|
271
|
+
- Use deterministic seeds for randomized inputs.
|
|
272
|
+
|
|
273
|
+
## Best Practices
|
|
274
|
+
|
|
275
|
+
### DO
|
|
276
|
+
|
|
277
|
+
- Keep tests deterministic and isolated
|
|
278
|
+
- Prefer dependency injection over globals
|
|
279
|
+
- Use `ASSERT_*` for preconditions, `EXPECT_*` for multiple checks
|
|
280
|
+
- Separate unit vs integration tests in CTest labels or directories
|
|
281
|
+
- Run sanitizers in CI for memory and race detection
|
|
282
|
+
|
|
283
|
+
### DON'T
|
|
284
|
+
|
|
285
|
+
- Don't depend on real time or network in unit tests
|
|
286
|
+
- Don't use sleeps as synchronization when a condition variable can be used
|
|
287
|
+
- Don't over-mock simple value objects
|
|
288
|
+
- Don't use brittle string matching for non-critical logs
|
|
289
|
+
|
|
290
|
+
### Common Pitfalls
|
|
291
|
+
|
|
292
|
+
- **Using fixed temp paths** → Generate unique temp directories per test and clean them.
|
|
293
|
+
- **Relying on wall clock time** → Inject a clock or use fake time sources.
|
|
294
|
+
- **Flaky concurrency tests** → Use condition variables/latches and bounded waits.
|
|
295
|
+
- **Hidden global state** → Reset global state in fixtures or remove globals.
|
|
296
|
+
- **Over-mocking** → Prefer fakes for stateful behavior and only mock interactions.
|
|
297
|
+
- **Missing sanitizer runs** → Add ASan/UBSan/TSan builds in CI.
|
|
298
|
+
- **Coverage on debug-only builds** → Ensure coverage targets use consistent flags.
|
|
299
|
+
|
|
300
|
+
## Optional Appendix: Fuzzing / Property Testing
|
|
301
|
+
|
|
302
|
+
Only use if the project already supports LLVM/libFuzzer or a property-testing library.
|
|
303
|
+
|
|
304
|
+
- **libFuzzer**: best for pure functions with minimal I/O.
|
|
305
|
+
- **RapidCheck**: property-based tests to validate invariants.
|
|
306
|
+
|
|
307
|
+
Minimal libFuzzer harness (pseudocode: replace ParseConfig):
|
|
308
|
+
|
|
309
|
+
```cpp
|
|
310
|
+
#include <cstddef>
|
|
311
|
+
#include <cstdint>
|
|
312
|
+
#include <string>
|
|
313
|
+
|
|
314
|
+
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
|
315
|
+
std::string input(reinterpret_cast<const char *>(data), size);
|
|
316
|
+
// ParseConfig(input); // project function
|
|
317
|
+
return 0;
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## Alternatives to GoogleTest
|
|
322
|
+
|
|
323
|
+
- **Catch2**: header-only, expressive matchers
|
|
324
|
+
- **doctest**: lightweight, minimal compile overhead
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: crosspost
|
|
3
|
+
description: Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Crosspost
|
|
8
|
+
|
|
9
|
+
Distribute content across multiple social platforms with platform-native adaptation.
|
|
10
|
+
|
|
11
|
+
## When to Activate
|
|
12
|
+
|
|
13
|
+
- User wants to post content to multiple platforms
|
|
14
|
+
- Publishing announcements, launches, or updates across social media
|
|
15
|
+
- Repurposing a post from one platform to others
|
|
16
|
+
- User says "crosspost", "post everywhere", "share on all platforms", or "distribute this"
|
|
17
|
+
|
|
18
|
+
## Core Rules
|
|
19
|
+
|
|
20
|
+
1. **Never post identical content cross-platform.** Each platform gets a native adaptation.
|
|
21
|
+
2. **Primary platform first.** Post to the main platform, then adapt for others.
|
|
22
|
+
3. **Respect platform conventions.** Length limits, formatting, link handling all differ.
|
|
23
|
+
4. **One idea per post.** If the source content has multiple ideas, split across posts.
|
|
24
|
+
5. **Attribution matters.** If crossposting someone else's content, credit the source.
|
|
25
|
+
|
|
26
|
+
## Platform Specifications
|
|
27
|
+
|
|
28
|
+
| Platform | Max Length | Link Handling | Hashtags | Media |
|
|
29
|
+
|----------|-----------|---------------|----------|-------|
|
|
30
|
+
| X | 280 chars (4000 for Premium) | Counted in length | Minimal (1-2 max) | Images, video, GIFs |
|
|
31
|
+
| LinkedIn | 3000 chars | Not counted in length | 3-5 relevant | Images, video, docs, carousels |
|
|
32
|
+
| Threads | 500 chars | Separate link attachment | None typical | Images, video |
|
|
33
|
+
| Bluesky | 300 chars | Via facets (rich text) | None (use feeds) | Images |
|
|
34
|
+
|
|
35
|
+
## Workflow
|
|
36
|
+
|
|
37
|
+
### Step 1: Create Source Content
|
|
38
|
+
|
|
39
|
+
Start with the core idea. Use `content-engine` skill for high-quality drafts:
|
|
40
|
+
- Identify the single core message
|
|
41
|
+
- Determine the primary platform (where the audience is biggest)
|
|
42
|
+
- Draft the primary platform version first
|
|
43
|
+
|
|
44
|
+
### Step 2: Identify Target Platforms
|
|
45
|
+
|
|
46
|
+
Ask the user or determine from context:
|
|
47
|
+
- Which platforms to target
|
|
48
|
+
- Priority order (primary gets the best version)
|
|
49
|
+
- Any platform-specific requirements (e.g., LinkedIn needs professional tone)
|
|
50
|
+
|
|
51
|
+
### Step 3: Adapt Per Platform
|
|
52
|
+
|
|
53
|
+
For each target platform, transform the content:
|
|
54
|
+
|
|
55
|
+
**X adaptation:**
|
|
56
|
+
- Open with a hook, not a summary
|
|
57
|
+
- Cut to the core insight fast
|
|
58
|
+
- Keep links out of main body when possible
|
|
59
|
+
- Use thread format for longer content
|
|
60
|
+
|
|
61
|
+
**LinkedIn adaptation:**
|
|
62
|
+
- Strong first line (visible before "see more")
|
|
63
|
+
- Short paragraphs with line breaks
|
|
64
|
+
- Frame around lessons, results, or professional takeaways
|
|
65
|
+
- More explicit context than X (LinkedIn audience needs framing)
|
|
66
|
+
|
|
67
|
+
**Threads adaptation:**
|
|
68
|
+
- Conversational, casual tone
|
|
69
|
+
- Shorter than LinkedIn, less compressed than X
|
|
70
|
+
- Visual-first if possible
|
|
71
|
+
|
|
72
|
+
**Bluesky adaptation:**
|
|
73
|
+
- Direct and concise (300 char limit)
|
|
74
|
+
- Community-oriented tone
|
|
75
|
+
- Use feeds/lists for topic targeting instead of hashtags
|
|
76
|
+
|
|
77
|
+
### Step 4: Post Primary Platform
|
|
78
|
+
|
|
79
|
+
Post to the primary platform first:
|
|
80
|
+
- Use `x-api` skill for X
|
|
81
|
+
- Use platform-specific APIs or tools for others
|
|
82
|
+
- Capture the post URL for cross-referencing
|
|
83
|
+
|
|
84
|
+
### Step 5: Post to Secondary Platforms
|
|
85
|
+
|
|
86
|
+
Post adapted versions to remaining platforms:
|
|
87
|
+
- Stagger timing (not all at once — 30-60 min gaps)
|
|
88
|
+
- Include cross-platform references where appropriate ("longer thread on X" etc.)
|
|
89
|
+
|
|
90
|
+
## Content Adaptation Examples
|
|
91
|
+
|
|
92
|
+
### Source: Product Launch
|
|
93
|
+
|
|
94
|
+
**X version:**
|
|
95
|
+
```
|
|
96
|
+
We just shipped [feature].
|
|
97
|
+
|
|
98
|
+
[One specific thing it does that's impressive]
|
|
99
|
+
|
|
100
|
+
[Link]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**LinkedIn version:**
|
|
104
|
+
```
|
|
105
|
+
Excited to share: we just launched [feature] at [Company].
|
|
106
|
+
|
|
107
|
+
Here's why it matters:
|
|
108
|
+
|
|
109
|
+
[2-3 short paragraphs with context]
|
|
110
|
+
|
|
111
|
+
[Takeaway for the audience]
|
|
112
|
+
|
|
113
|
+
[Link]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Threads version:**
|
|
117
|
+
```
|
|
118
|
+
just shipped something cool — [feature]
|
|
119
|
+
|
|
120
|
+
[casual explanation of what it does]
|
|
121
|
+
|
|
122
|
+
link in bio
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Source: Technical Insight
|
|
126
|
+
|
|
127
|
+
**X version:**
|
|
128
|
+
```
|
|
129
|
+
TIL: [specific technical insight]
|
|
130
|
+
|
|
131
|
+
[Why it matters in one sentence]
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**LinkedIn version:**
|
|
135
|
+
```
|
|
136
|
+
A pattern I've been using that's made a real difference:
|
|
137
|
+
|
|
138
|
+
[Technical insight with professional framing]
|
|
139
|
+
|
|
140
|
+
[How it applies to teams/orgs]
|
|
141
|
+
|
|
142
|
+
#relevantHashtag
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## API Integration
|
|
146
|
+
|
|
147
|
+
### Batch Crossposting Service (Example Pattern)
|
|
148
|
+
If using a crossposting service (e.g., Postbridge, Buffer, or a custom API), the pattern looks like:
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
import os
|
|
152
|
+
import requests
|
|
153
|
+
|
|
154
|
+
resp = requests.post(
|
|
155
|
+
"https://your-crosspost-service.example/api/posts",
|
|
156
|
+
headers={"Authorization": f"Bearer {os.environ['POSTBRIDGE_API_KEY']}"},
|
|
157
|
+
json={
|
|
158
|
+
"platforms": ["twitter", "linkedin", "threads"],
|
|
159
|
+
"content": {
|
|
160
|
+
"twitter": {"text": x_version},
|
|
161
|
+
"linkedin": {"text": linkedin_version},
|
|
162
|
+
"threads": {"text": threads_version}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
timeout=30,
|
|
166
|
+
)
|
|
167
|
+
resp.raise_for_status()
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Manual Posting
|
|
171
|
+
Without Postbridge, post to each platform using its native API:
|
|
172
|
+
- X: Use `x-api` skill patterns
|
|
173
|
+
- LinkedIn: LinkedIn API v2 with OAuth 2.0
|
|
174
|
+
- Threads: Threads API (Meta)
|
|
175
|
+
- Bluesky: AT Protocol API
|
|
176
|
+
|
|
177
|
+
## Quality Gate
|
|
178
|
+
|
|
179
|
+
Before posting:
|
|
180
|
+
- [ ] Each platform version reads naturally for that platform
|
|
181
|
+
- [ ] No identical content across platforms
|
|
182
|
+
- [ ] Length limits respected
|
|
183
|
+
- [ ] Links work and are placed appropriately
|
|
184
|
+
- [ ] Tone matches platform conventions
|
|
185
|
+
- [ ] Media is sized correctly for each platform
|
|
186
|
+
|
|
187
|
+
## Related Skills
|
|
188
|
+
|
|
189
|
+
- `content-engine` — Generate platform-native content
|
|
190
|
+
- `x-api` — X/Twitter API integration
|