@mrciphersmith/keryx 0.2.9
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/LICENSE +21 -0
- package/README.md +351 -0
- package/dist/cli.js +48427 -0
- package/dist/proxy-worker.js +381 -0
- package/package.json +63 -0
- package/src/gdgraph/affected.test.ts +100 -0
- package/src/gdgraph/affected.ts +135 -0
- package/src/gdgraph/build-integrity.test.ts +193 -0
- package/src/gdgraph/build-lang.test.ts +399 -0
- package/src/gdgraph/build.test.ts +120 -0
- package/src/gdgraph/build.ts +804 -0
- package/src/gdgraph/config.test.ts +47 -0
- package/src/gdgraph/config.ts +113 -0
- package/src/gdgraph/core-sources.test.ts +99 -0
- package/src/gdgraph/core-sources.ts +20 -0
- package/src/gdgraph/enrich.ts +79 -0
- package/src/gdgraph/fallback.test.ts +153 -0
- package/src/gdgraph/find.test.ts +78 -0
- package/src/gdgraph/find.ts +107 -0
- package/src/gdgraph/pagerank.ts +129 -0
- package/src/gdgraph/path.test.ts +56 -0
- package/src/gdgraph/path.ts +112 -0
- package/src/gdgraph/query.ts +133 -0
- package/src/gdgraph/repomap.test.ts +110 -0
- package/src/gdgraph/repomap.ts +193 -0
- package/src/gdgraph/service.test.ts +59 -0
- package/src/gdgraph/service.ts +51 -0
- package/src/gdgraph/staleness.ts +20 -0
- package/src/gdgraph/symbol.test.ts +89 -0
- package/src/gdgraph/symbol.ts +123 -0
- package/src/gdgraph/symbols-capability.test.ts +41 -0
- package/src/gdgraph/symbols-capability.ts +49 -0
- package/src/gdgraph/target.ts +56 -0
- package/src/gdgraph/treesitter/adapter.test.ts +249 -0
- package/src/gdgraph/treesitter/adapter.ts +213 -0
- package/src/gdgraph/treesitter/extract.test.ts +278 -0
- package/src/gdgraph/treesitter/extract.ts +389 -0
- package/src/gdgraph/treesitter/grammars.ts +110 -0
- package/src/gdgraph/treesitter/no-treesitter-import.test.ts +51 -0
- package/src/gdgraph/treesitter/resolve-calls.test.ts +38 -0
- package/src/gdgraph/types.ts +63 -0
- package/src/gdskills/bundled/rules/core/api-contracts.mdc +148 -0
- package/src/gdskills/bundled/rules/core/async-patterns.mdc +185 -0
- package/src/gdskills/bundled/rules/core/clean-architecture.mdc +163 -0
- package/src/gdskills/bundled/rules/core/code-review-ai-assistant.mdc +49 -0
- package/src/gdskills/bundled/rules/core/code-review-b091-profile.mdc +48 -0
- package/src/gdskills/bundled/rules/core/code-style-patterns.mdc +54 -0
- package/src/gdskills/bundled/rules/core/commit-message-formatting.mdc +25 -0
- package/src/gdskills/bundled/rules/core/database-patterns.mdc +162 -0
- package/src/gdskills/bundled/rules/core/documentation-management.mdc +106 -0
- package/src/gdskills/bundled/rules/core/error-handling.mdc +163 -0
- package/src/gdskills/bundled/rules/core/execution-metrics.md +99 -0
- package/src/gdskills/bundled/rules/core/frontend-assistant.mdc +40 -0
- package/src/gdskills/bundled/rules/core/git-rules.mdc +37 -0
- package/src/gdskills/bundled/rules/core/gproject-contracts.mdc +198 -0
- package/src/gdskills/bundled/rules/core/implementation-doc-mandate.mdc +149 -0
- package/src/gdskills/bundled/rules/core/implementation-plans.mdc +58 -0
- package/src/gdskills/bundled/rules/core/jobs-documentation.mdc +221 -0
- package/src/gdskills/bundled/rules/core/mobx-store-template.mdc +561 -0
- package/src/gdskills/bundled/rules/core/model-selection.mdc +53 -0
- package/src/gdskills/bundled/rules/core/nestjs-dto.mdc +50 -0
- package/src/gdskills/bundled/rules/core/playwright-testing.mdc +321 -0
- package/src/gdskills/bundled/rules/core/requirements-management.mdc +35 -0
- package/src/gdskills/bundled/rules/core/requirements-package-standard.mdc +103 -0
- package/src/gdskills/bundled/rules/core/review-agent-profile.mdc +49 -0
- package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +44 -0
- package/src/gdskills/bundled/rules/core/rule-management-workflow.mdc +62 -0
- package/src/gdskills/bundled/rules/core/security-baseline.mdc +155 -0
- package/src/gdskills/bundled/rules/core/shared-definitions.mdc +79 -0
- package/src/gdskills/bundled/rules/core/skill-lifecycle.mdc +55 -0
- package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +88 -0
- package/src/gdskills/bundled/rules/core/solid-principles.mdc +149 -0
- package/src/gdskills/bundled/rules/core/storybook-guidelines.mdc +36 -0
- package/src/gdskills/bundled/rules/core/subagent-context-construction.md +107 -0
- package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +169 -0
- package/src/gdskills/bundled/rules/core/tdd-workflow.mdc +96 -0
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +47 -0
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +55 -0
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +352 -0
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +39 -0
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +29 -0
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +567 -0
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +567 -0
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +655 -0
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +567 -0
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +567 -0
- package/src/gdskills/bundled/skills/orchestration/context-collector/input-contract.schema.json +134 -0
- package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +183 -0
- package/src/gdskills/bundled/skills/orchestration/context-collector/output-contract.schema.json +208 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +1412 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +1412 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.detail.md +735 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +468 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +1412 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +1412 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.md +62 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.template.md +79 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/input-contract.schema.json +247 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +362 -0
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/output-contract.schema.json +87 -0
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +105 -0
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +105 -0
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +165 -0
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +379 -0
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/input-contract.schema.json +33 -0
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/output-contract.schema.json +41 -0
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +307 -0
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +307 -0
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +373 -0
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +307 -0
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +307 -0
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/input-contract.schema.json +130 -0
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/issue-request.template.md +50 -0
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +155 -0
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/output-contract.schema.json +61 -0
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +365 -0
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +365 -0
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +373 -0
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +365 -0
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +365 -0
- package/src/gdskills/bundled/skills/orchestration/job-documenter/input-contract.schema.json +55 -0
- package/src/gdskills/bundled/skills/orchestration/job-documenter/output-contract.schema.json +58 -0
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +1701 -0
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +1701 -0
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +1734 -0
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +1701 -0
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +1701 -0
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/input-contract.schema.json +188 -0
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/orchestrator-prompt.md +179 -0
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/output-contract.schema.json +103 -0
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/state.schema.json +164 -0
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +395 -0
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +395 -0
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +556 -0
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +395 -0
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +395 -0
- package/src/gdskills/bundled/skills/orchestration/task-implementer/input-contract.schema.json +204 -0
- package/src/gdskills/bundled/skills/orchestration/task-implementer/orchestrator-prompt.md +206 -0
- package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +51 -0
- package/src/gdskills/bundled/skills/orchestration/task-implementer/task-request.template.md +111 -0
- package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +163 -0
- package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +161 -0
- package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +128 -0
- package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +321 -0
- package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +166 -0
- package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +253 -0
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.claude.md +46 -0
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +90 -0
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +90 -0
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +90 -0
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +33 -0
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +33 -0
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +190 -0
- package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +142 -0
- package/src/gdskills/bundled/skills/planning/docpack-orchestrator/input-contract.schema.json +31 -0
- package/src/gdskills/bundled/skills/planning/docpack-orchestrator/output-contract.schema.json +31 -0
- package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +80 -0
- package/src/gdskills/bundled/skills/planning/docpack-review/input-contract.schema.json +20 -0
- package/src/gdskills/bundled/skills/planning/docpack-review/output-contract.schema.json +36 -0
- package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +181 -0
- package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +181 -0
- package/src/gdskills/bundled/skills/planning/interview/SKILL.md +187 -0
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.claude.md +94 -0
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +99 -0
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +99 -0
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +105 -0
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +33 -0
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +33 -0
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +237 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +33 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +33 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.md +190 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +193 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +193 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +193 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +193 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +193 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/input-contract.schema.json +63 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/output-contract.schema.json +175 -0
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +31 -0
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +31 -0
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +153 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +32 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +32 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +166 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +44 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +44 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +243 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +43 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +43 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +193 -0
- package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +47 -0
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +87 -0
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +87 -0
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +87 -0
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +100 -0
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +100 -0
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +100 -0
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.claude.md +45 -0
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +84 -0
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +84 -0
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +84 -0
- package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +66 -0
- package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +66 -0
- package/src/gdskills/bundled/skills/quality/commit/SKILL.md +66 -0
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.claude.md +40 -0
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +66 -0
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +66 -0
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +66 -0
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.claude.md +45 -0
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +81 -0
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +81 -0
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +81 -0
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.claude.md +42 -0
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +70 -0
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +70 -0
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +70 -0
- package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +103 -0
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.claude.md +48 -0
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +83 -0
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +83 -0
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +83 -0
- package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +75 -0
- package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +75 -0
- package/src/gdskills/bundled/skills/quality/pr/SKILL.md +75 -0
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +364 -0
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +295 -0
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +378 -0
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +364 -0
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +38 -0
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/input-contract.schema.json +53 -0
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/output-contract.schema.json +46 -0
- package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +52 -0
- package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +52 -0
- package/src/gdskills/bundled/skills/quality/push/SKILL.md +52 -0
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.claude.md +40 -0
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +61 -0
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +61 -0
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +61 -0
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.claude.md +30 -0
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +75 -0
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +75 -0
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +75 -0
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +64 -0
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +74 -0
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +339 -0
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +48 -0
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +44 -0
- package/src/gdskills/bundled/skills/quality/tests-creator/input-contract.schema.json +121 -0
- package/src/gdskills/bundled/skills/quality/tests-creator/output-contract.schema.json +127 -0
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +204 -0
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +204 -0
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +203 -0
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +204 -0
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +204 -0
- package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.codex.md +209 -0
- package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.cursor.md +209 -0
- package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.md +208 -0
- package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.opencode.md +209 -0
- package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.zed.md +209 -0
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +263 -0
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +263 -0
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +258 -0
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +263 -0
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +263 -0
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +175 -0
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +175 -0
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +168 -0
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +175 -0
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +175 -0
- package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +360 -0
- package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +337 -0
- package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +477 -0
- package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +93 -0
- package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +119 -0
- package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +595 -0
- package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +144 -0
- package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +519 -0
- package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +323 -0
- package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +927 -0
- package/src/gdskills/bundled/skills/review/review-orchestrator/input-contract.schema.json +153 -0
- package/src/gdskills/bundled/skills/review/review-orchestrator/output-contract.schema.json +77 -0
- package/src/gdskills/bundled/skills/review/review-orchestrator/review-context.schema.json +389 -0
- package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-finding.schema.json +189 -0
- package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +241 -0
- package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +344 -0
- package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +327 -0
- package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +348 -0
- package/src/gdskills/bundled/skills/review/review-strict/SKILL.md +328 -0
- package/src/gdskills/bundled/skills/review/review-style/SKILL.md +343 -0
- package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +134 -0
- package/src/gdskills/bundled/skills/shared/git-merge-base.md +33 -0
- package/src/gdskills/contracts/agent-event.schema.json +32 -0
- package/src/gdskills/contracts/orchestrator-state.schema.json +58 -0
- package/src/gdskills/contracts/review-finding.schema.json +59 -0
- package/src/gdskills/contracts/subagent-dispatch.schema.json +123 -0
- package/src/gdskills/contracts/subagent-result.schema.json +136 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tests-creator
|
|
3
|
+
description: "Use when writing test cases BEFORE implementation — converts acceptance criteria into failing test stubs that task-implementer will make pass. Mandatory step in the TDD pipeline between issue-analyzer and task-implementer."
|
|
4
|
+
triggers:
|
|
5
|
+
- "Create tests"
|
|
6
|
+
- "Write tests first"
|
|
7
|
+
- "Generate test specs"
|
|
8
|
+
- "Tests before implementation"
|
|
9
|
+
- "TDD test stubs"
|
|
10
|
+
- "Convert criteria to tests"
|
|
11
|
+
metadata:
|
|
12
|
+
author: "MrCipherSmith"
|
|
13
|
+
version: "1.0.0"
|
|
14
|
+
category: "testing"
|
|
15
|
+
agent_worthy: true
|
|
16
|
+
license: "MIT"
|
|
17
|
+
compatibility: "cursor,codex,zed,opencode"
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Tests Creator
|
|
21
|
+
|
|
22
|
+
## Purpose
|
|
23
|
+
|
|
24
|
+
Converts acceptance criteria (from `issue-analyzer` or manual input) into concrete, failing test stubs **before any implementation code is written**. Enforces the RED phase of TDD.
|
|
25
|
+
|
|
26
|
+
**Input:** Task object with `acceptance_criteria` + codebase path + test framework info
|
|
27
|
+
**Output:** Ready-to-run test files with failing test stubs + `test_case_specs` block for `task-implementer`
|
|
28
|
+
|
|
29
|
+
## When to Use
|
|
30
|
+
|
|
31
|
+
- Between `issue-analyzer` and `task-implementer` in the TDD pipeline
|
|
32
|
+
- Orchestrator needs test specs before dispatching implementation
|
|
33
|
+
- User wants to review test expectations before code is written
|
|
34
|
+
- Acceptance criteria need to be translated into executable specifications
|
|
35
|
+
|
|
36
|
+
## Architecture: 4 Phases
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Phase 1: DETECT → Identify test framework, conventions, fixture patterns
|
|
40
|
+
Phase 2: ANALYZE → Map acceptance criteria to test scenarios
|
|
41
|
+
Phase 3: GENERATE → Write failing test stubs with correct framework syntax
|
|
42
|
+
Phase 4: REPORT → Emit test_case_specs for task-implementer consumption
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Workflow
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Tests Creator Progress:
|
|
51
|
+
- [ ] Phase 1: Detect test framework and conventions
|
|
52
|
+
- [ ] Phase 2: Map acceptance criteria to test scenarios
|
|
53
|
+
- [ ] Phase 3: Generate failing test stubs
|
|
54
|
+
- [ ] Phase 4: Report test_case_specs
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
### Phase 1: DETECT
|
|
60
|
+
|
|
61
|
+
Identify the test framework and conventions used in the project.
|
|
62
|
+
|
|
63
|
+
**1.1 Detect framework:**
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Check package.json for test dependencies
|
|
67
|
+
cat <codebase_path>/package.json | grep -E '"(jest|vitest|mocha|jasmine|bun:test|pytest|go test)"'
|
|
68
|
+
|
|
69
|
+
# Check for config files
|
|
70
|
+
ls <codebase_path>/{vitest.config.*,jest.config.*,pytest.ini,setup.cfg}
|
|
71
|
+
|
|
72
|
+
# Check existing test files for imports
|
|
73
|
+
find <codebase_path>/src -name "*.test.*" -o -name "*.spec.*" | head -5
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**1.2 Read 2-3 existing test files** to understand:
|
|
77
|
+
- Import style (`import { describe, it, expect } from 'vitest'` vs global)
|
|
78
|
+
- Test file location (co-located `*.test.ts` vs `__tests__/` directory)
|
|
79
|
+
- Describe/it/test nesting patterns
|
|
80
|
+
- Common assertion patterns (`expect(x).toBe(y)` vs `assert.equal(x, y)`)
|
|
81
|
+
- Mock patterns (`vi.fn()` vs `jest.fn()` vs manual mocks)
|
|
82
|
+
- Fixture/factory patterns (how test data is created)
|
|
83
|
+
- Before/after hook usage
|
|
84
|
+
|
|
85
|
+
**1.3 Identify test file naming:**
|
|
86
|
+
- Pattern: `<component>.test.ts`, `<service>.spec.ts`, `test_<module>.py`, etc.
|
|
87
|
+
- Location: co-located with source or in `__tests__`/`tests/` directory
|
|
88
|
+
|
|
89
|
+
**Output of Phase 1:**
|
|
90
|
+
```
|
|
91
|
+
TEST_ENV:
|
|
92
|
+
framework: vitest | jest | bun:test | mocha | pytest | go_test
|
|
93
|
+
import_style: esm | cjs | global
|
|
94
|
+
file_pattern: "*.test.ts" | "*.spec.ts" | "test_*.py"
|
|
95
|
+
file_location: co-located | __tests__ | tests/
|
|
96
|
+
assertion_style: expect | assert | chai
|
|
97
|
+
mock_library: vi | jest | sinon | unittest.mock
|
|
98
|
+
fixture_pattern: <description of how test data is created>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
### Phase 2: ANALYZE
|
|
104
|
+
|
|
105
|
+
Map each acceptance criterion to one or more test scenarios.
|
|
106
|
+
|
|
107
|
+
**2.1 Parse acceptance criteria:**
|
|
108
|
+
|
|
109
|
+
For each criterion, determine:
|
|
110
|
+
- **Happy path**: when everything works correctly
|
|
111
|
+
- **Edge cases**: boundary values, empty inputs, maximum values
|
|
112
|
+
- **Error paths**: invalid input, missing data, permission denied, external failure
|
|
113
|
+
|
|
114
|
+
**2.2 Criterion-to-scenario mapping:**
|
|
115
|
+
|
|
116
|
+
| Criterion Type | Test Scenarios to Generate |
|
|
117
|
+
|---|---|
|
|
118
|
+
| "User can X" | happy path: user can X; error: user cannot X when [condition] |
|
|
119
|
+
| "System returns Y when Z" | given Z → returns Y; given not-Z → does not return Y |
|
|
120
|
+
| "Field is required" | valid data passes; missing field fails with error |
|
|
121
|
+
| "Value must be between A and B" | A passes; B passes; A-1 fails; B+1 fails |
|
|
122
|
+
| "X must not happen" | verify X does not happen under [conditions] |
|
|
123
|
+
| "Async operation completes" | resolves with expected value; rejects on failure |
|
|
124
|
+
|
|
125
|
+
**2.3 Group scenarios by test file:**
|
|
126
|
+
|
|
127
|
+
Group related scenarios into test files matching the target_files from the task:
|
|
128
|
+
- Service test → test the service class methods
|
|
129
|
+
- Component test → test component rendering and interactions
|
|
130
|
+
- Integration test → test the full flow
|
|
131
|
+
|
|
132
|
+
**Output of Phase 2:**
|
|
133
|
+
```
|
|
134
|
+
TEST_PLAN:
|
|
135
|
+
- test_file: <path>
|
|
136
|
+
target_module: <source file being tested>
|
|
137
|
+
scenarios:
|
|
138
|
+
- id: test-1
|
|
139
|
+
criterion: <which acceptance criterion>
|
|
140
|
+
description: <what to test>
|
|
141
|
+
type: happy_path | edge_case | error_path
|
|
142
|
+
setup: <what to arrange>
|
|
143
|
+
action: <what to call/render/trigger>
|
|
144
|
+
assertion: <what to expect>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
### Phase 3: GENERATE
|
|
150
|
+
|
|
151
|
+
Write the actual test files with failing stubs.
|
|
152
|
+
|
|
153
|
+
**3.1 Test file structure:**
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
// Template for TypeScript (vitest/jest)
|
|
157
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
158
|
+
// import the module under test — may not exist yet, that is expected
|
|
159
|
+
import { <ModuleUnderTest> } from '<relative path>';
|
|
160
|
+
|
|
161
|
+
describe('<ModuleUnderTest>', () => {
|
|
162
|
+
// Acceptance criterion: <criterion text>
|
|
163
|
+
describe('<group name>', () => {
|
|
164
|
+
it('<should do X when Y>', async () => {
|
|
165
|
+
// Arrange
|
|
166
|
+
const <fixture> = <test data>;
|
|
167
|
+
|
|
168
|
+
// Act
|
|
169
|
+
const result = await <action>;
|
|
170
|
+
|
|
171
|
+
// Assert
|
|
172
|
+
expect(result).<assertion>;
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('<should fail when Z>', async () => {
|
|
176
|
+
// Arrange
|
|
177
|
+
const <invalid fixture> = <invalid data>;
|
|
178
|
+
|
|
179
|
+
// Act & Assert
|
|
180
|
+
await expect(<action with invalid data>).rejects.toThrow(<error type>);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**3.2 Failing stubs (RED phase):**
|
|
187
|
+
|
|
188
|
+
The generated tests MUST:
|
|
189
|
+
- Import the module under test (file may not exist yet — that is fine)
|
|
190
|
+
- Have meaningful test descriptions
|
|
191
|
+
- Have placeholder assertions that will FAIL until implementation:
|
|
192
|
+
```typescript
|
|
193
|
+
// Use todo() for unimplemented tests
|
|
194
|
+
it.todo('<test description>');
|
|
195
|
+
|
|
196
|
+
// OR use a stub assertion that fails
|
|
197
|
+
it('<test description>', () => {
|
|
198
|
+
expect(true).toBe(false); // RED: remove this when implementing
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
- OR use proper assertions calling the future API (will fail with "module not found" or "function is not a function")
|
|
202
|
+
|
|
203
|
+
**3.3 Preferred approach — forward-declared tests:**
|
|
204
|
+
|
|
205
|
+
Write tests that call the actual future API with real assertions. They will fail because the module doesn't exist yet:
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
// This file will fail to compile/run until task-implementer creates:
|
|
209
|
+
// src/services/UserValidator.ts with a validate() method
|
|
210
|
+
import { UserValidator } from '../services/UserValidator';
|
|
211
|
+
|
|
212
|
+
describe('UserValidator', () => {
|
|
213
|
+
it('should accept valid email address', () => {
|
|
214
|
+
const validator = new UserValidator();
|
|
215
|
+
expect(validator.validate({ email: 'user@example.com' })).toEqual({ valid: true });
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it('should reject email without @ symbol', () => {
|
|
219
|
+
const validator = new UserValidator();
|
|
220
|
+
expect(validator.validate({ email: 'not-an-email' })).toEqual({
|
|
221
|
+
valid: false,
|
|
222
|
+
errors: [{ field: 'email', message: 'Invalid email format' }],
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**3.4 Commit the test files:**
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
git add <test files>
|
|
232
|
+
git commit -m "test(<scope>): add failing test stubs for <task description>
|
|
233
|
+
|
|
234
|
+
RED phase — tests will pass after implementation
|
|
235
|
+
refs #<issue_number>"
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
### Phase 4: REPORT
|
|
241
|
+
|
|
242
|
+
Emit the `test_case_specs` block for consumption by `task-implementer`.
|
|
243
|
+
|
|
244
|
+
**Output structure:**
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
TEST_CASE_SPECS:
|
|
248
|
+
framework: <vitest|jest|pytest|...>
|
|
249
|
+
test_files:
|
|
250
|
+
- path: <test file path>
|
|
251
|
+
target_module: <source file to implement>
|
|
252
|
+
test_count: <N>
|
|
253
|
+
tests:
|
|
254
|
+
- id: test-1
|
|
255
|
+
description: <it description>
|
|
256
|
+
criterion: <which acceptance criterion>
|
|
257
|
+
type: happy_path | edge_case | error_path
|
|
258
|
+
status: written # test file exists, test is RED
|
|
259
|
+
|
|
260
|
+
run_command: "<command to run just these tests>"
|
|
261
|
+
expected_result: "all failing (RED phase)"
|
|
262
|
+
notes: "<any test design decisions or assumptions>"
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**STATUS reporting:**
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
STATUS: DONE
|
|
269
|
+
tests_written: <N>
|
|
270
|
+
test_files: [<list of paths>]
|
|
271
|
+
all_criteria_covered: true | false (with explanation)
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Integration with Task Implementer
|
|
277
|
+
|
|
278
|
+
When `task-implementer` receives a task that includes `test_case_specs`:
|
|
279
|
+
|
|
280
|
+
1. Read the test files (already committed as RED)
|
|
281
|
+
2. Run the tests — confirm they FAIL
|
|
282
|
+
3. Implement code until all tests are GREEN
|
|
283
|
+
4. Commit the implementation
|
|
284
|
+
5. Re-run tests — confirm GREEN
|
|
285
|
+
6. Report SUCCESS
|
|
286
|
+
|
|
287
|
+
This ensures the TDD cycle is maintained end-to-end.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Automation Settings
|
|
292
|
+
|
|
293
|
+
| Setting | Default | Options | Description |
|
|
294
|
+
|---------|---------|---------|-------------|
|
|
295
|
+
| `commit_test_stubs` | `true` | true/false | Commit the test files after generation |
|
|
296
|
+
| `verify_red` | `true` | true/false | Run tests to confirm they fail before reporting |
|
|
297
|
+
| `stub_style` | `forward_declared` | `forward_declared` / `todo` | How to write failing stubs |
|
|
298
|
+
| `include_edge_cases` | `true` | true/false | Generate edge case tests in addition to happy path |
|
|
299
|
+
| `max_tests_per_criterion` | `3` | 1-5 | Max test cases per acceptance criterion |
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Error Handling
|
|
304
|
+
|
|
305
|
+
| Error | Action |
|
|
306
|
+
|-------|--------|
|
|
307
|
+
| No acceptance criteria provided | Derive from task description — log warning |
|
|
308
|
+
| Test framework not detected | Ask via output, default to vitest for TypeScript |
|
|
309
|
+
| Test file already exists | Read existing tests, add new stubs without overwriting |
|
|
310
|
+
| Module path unknown | Use placeholder path, note in test_case_specs |
|
|
311
|
+
| Verify-red fails (tests pass before implementation) | This means the test is wrong — fix the assertion or report as concern |
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Rules of Engagement
|
|
316
|
+
|
|
317
|
+
1. **DO NOT** write any implementation code. This skill only writes test files.
|
|
318
|
+
2. **DO NOT** write tests that pass without implementation — RED means failing.
|
|
319
|
+
3. **DO** write tests that describe WHAT the code should do, not HOW.
|
|
320
|
+
4. **DO** cover every acceptance criterion with at least one test.
|
|
321
|
+
5. **DO** follow the project's existing test conventions (discovered in Phase 1).
|
|
322
|
+
6. **DO** commit the test files before reporting.
|
|
323
|
+
7. Return `TEST_CASE_SPECS` as the final message to the orchestrator/caller.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Job Context Awareness
|
|
328
|
+
|
|
329
|
+
When dispatched by `job-orchestrator`:
|
|
330
|
+
|
|
331
|
+
```
|
|
332
|
+
JOB_NAME: <job-name>
|
|
333
|
+
CONTEXT_PATH: <JOBS_ROOT>/<job-name>/ai/context.md
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
If provided, read the context document to understand:
|
|
337
|
+
- Which test frameworks are in use
|
|
338
|
+
- Testing conventions and patterns from the codebase
|
|
339
|
+
- Mock/stub strategies documented in the project
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tests-creator
|
|
3
|
+
description: "Converts acceptance criteria into failing test stubs (RED phase of TDD) before any implementation. Autonomous sub-agent — runs between issue-analyzer and task-implementer. Use when: generating test specs from acceptance criteria, enforcing TDD in the implementation pipeline."
|
|
4
|
+
triggers:
|
|
5
|
+
- "Create tests"
|
|
6
|
+
- "Write tests first"
|
|
7
|
+
- "Generate test specs"
|
|
8
|
+
- "Tests before implementation"
|
|
9
|
+
- "TDD test stubs"
|
|
10
|
+
metadata:
|
|
11
|
+
author: "MrCipherSmith"
|
|
12
|
+
version: "1.0.0"
|
|
13
|
+
category: "testing"
|
|
14
|
+
license: "MIT"
|
|
15
|
+
compatibility: "cursor,codex,zed,opencode"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Tests Creator
|
|
19
|
+
|
|
20
|
+
Converts acceptance criteria into failing test stubs before implementation (RED phase of TDD).
|
|
21
|
+
|
|
22
|
+
**Position in pipeline:** issue-analyzer → tests-creator → task-implementer
|
|
23
|
+
|
|
24
|
+
## Phases
|
|
25
|
+
1. **DETECT** — test framework, conventions from existing tests
|
|
26
|
+
2. **ANALYZE** — map criteria to test scenarios (happy/edge/error)
|
|
27
|
+
3. **GENERATE** — write failing test stubs with real assertions
|
|
28
|
+
4. **REPORT** — emit TEST_CASE_SPECS
|
|
29
|
+
|
|
30
|
+
## Key Rules
|
|
31
|
+
- Only writes test files, never implementation
|
|
32
|
+
- Tests MUST fail before reporting done
|
|
33
|
+
- Every acceptance criterion → ≥1 test
|
|
34
|
+
|
|
35
|
+
## Output
|
|
36
|
+
```
|
|
37
|
+
TEST_CASE_SPECS:
|
|
38
|
+
framework: <framework>
|
|
39
|
+
test_files: [...]
|
|
40
|
+
run_command: "<test command>"
|
|
41
|
+
expected_result: "all failing (RED phase)"
|
|
42
|
+
|
|
43
|
+
STATUS: DONE
|
|
44
|
+
tests_written: <N>
|
|
45
|
+
all_criteria_covered: true
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Full workflow: `.metaproject/skills/gdskills/quality/tests-creator/SKILL.md`
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tests-creator
|
|
3
|
+
description: "Converts acceptance criteria into failing test stubs (RED phase of TDD) before any implementation. Autonomous sub-agent — runs between issue-analyzer and task-implementer. Use when: generating test specs from acceptance criteria, enforcing TDD in the implementation pipeline."
|
|
4
|
+
triggers:
|
|
5
|
+
- "Create tests"
|
|
6
|
+
- "Write tests first"
|
|
7
|
+
- "Generate test specs"
|
|
8
|
+
- "Tests before implementation"
|
|
9
|
+
metadata:
|
|
10
|
+
author: "MrCipherSmith"
|
|
11
|
+
version: "1.0.0"
|
|
12
|
+
category: "testing"
|
|
13
|
+
license: "MIT"
|
|
14
|
+
compatibility: "cursor,codex,zed,opencode"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Tests Creator
|
|
18
|
+
|
|
19
|
+
Converts acceptance criteria → failing test stubs (RED phase).
|
|
20
|
+
|
|
21
|
+
**Pipeline position:** issue-analyzer → **tests-creator** → task-implementer
|
|
22
|
+
|
|
23
|
+
## Steps
|
|
24
|
+
1. Detect test framework (`package.json`, existing tests)
|
|
25
|
+
2. Map each acceptance criterion to test scenarios
|
|
26
|
+
3. Write failing test stubs (forward-declared API calls)
|
|
27
|
+
4. Commit test files
|
|
28
|
+
5. Run tests — verify RED state
|
|
29
|
+
6. Report `TEST_CASE_SPECS`
|
|
30
|
+
|
|
31
|
+
## Output
|
|
32
|
+
```
|
|
33
|
+
TEST_CASE_SPECS:
|
|
34
|
+
framework: vitest
|
|
35
|
+
test_files: [{ path, target_module, test_count, tests: [...] }]
|
|
36
|
+
run_command: "bun test ..."
|
|
37
|
+
expected_result: "all failing (RED phase)"
|
|
38
|
+
|
|
39
|
+
STATUS: DONE
|
|
40
|
+
tests_written: N
|
|
41
|
+
all_criteria_covered: true
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Full spec: `.metaproject/skills/gdskills/quality/tests-creator/SKILL.md`
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "tests-creator-input-contract",
|
|
4
|
+
"title": "Tests Creator Input Contract",
|
|
5
|
+
"description": "Input parameters for the tests-creator skill. Receives a task object with acceptance criteria and generates failing test stubs.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["task", "workspace", "automation"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"task": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"description": "The task for which to generate tests.",
|
|
12
|
+
"required": ["task_id", "task_name", "acceptance_criteria", "target_files"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"task_id": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"pattern": "^task-\\d+$",
|
|
17
|
+
"description": "Unique task identifier",
|
|
18
|
+
"examples": ["task-1"]
|
|
19
|
+
},
|
|
20
|
+
"task_name": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "Descriptive name of the task"
|
|
23
|
+
},
|
|
24
|
+
"task_type": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"enum": ["ui_component", "store_logic", "service_api", "refactoring", "fix", "mixed"],
|
|
27
|
+
"description": "Type of implementation task — influences test strategy"
|
|
28
|
+
},
|
|
29
|
+
"acceptance_criteria": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": { "type": "string" },
|
|
32
|
+
"minItems": 1,
|
|
33
|
+
"description": "List of acceptance criteria to convert into test cases"
|
|
34
|
+
},
|
|
35
|
+
"target_files": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"items": { "type": "string" },
|
|
38
|
+
"minItems": 1,
|
|
39
|
+
"description": "Source files that will be implemented — tests should cover these"
|
|
40
|
+
},
|
|
41
|
+
"description": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"description": "Full task description for additional context"
|
|
44
|
+
},
|
|
45
|
+
"context": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Relevant code context: types, interfaces, function signatures expected"
|
|
48
|
+
},
|
|
49
|
+
"existing_tests": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": { "type": "string" },
|
|
52
|
+
"default": [],
|
|
53
|
+
"description": "Paths to existing test files (to read conventions from)"
|
|
54
|
+
},
|
|
55
|
+
"module_patterns": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"description": "Notes on how similar code is tested in the module"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"workspace": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"required": ["codebase_path", "branch"],
|
|
64
|
+
"properties": {
|
|
65
|
+
"codebase_path": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "Absolute path to the project root",
|
|
68
|
+
"examples": ["/Users/dev/myproject"]
|
|
69
|
+
},
|
|
70
|
+
"branch": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"description": "Feature branch where test files will be committed"
|
|
73
|
+
},
|
|
74
|
+
"issue_number": {
|
|
75
|
+
"type": "integer",
|
|
76
|
+
"minimum": 1,
|
|
77
|
+
"description": "GitHub issue number for commit references"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"automation": {
|
|
82
|
+
"type": "object",
|
|
83
|
+
"required": ["skip_confirmation"],
|
|
84
|
+
"properties": {
|
|
85
|
+
"skip_confirmation": {
|
|
86
|
+
"type": "boolean",
|
|
87
|
+
"const": true,
|
|
88
|
+
"description": "Must be true for autonomous mode"
|
|
89
|
+
},
|
|
90
|
+
"commit_test_stubs": {
|
|
91
|
+
"type": "boolean",
|
|
92
|
+
"default": true,
|
|
93
|
+
"description": "Commit generated test files immediately"
|
|
94
|
+
},
|
|
95
|
+
"verify_red": {
|
|
96
|
+
"type": "boolean",
|
|
97
|
+
"default": true,
|
|
98
|
+
"description": "Run tests to confirm they fail before reporting done"
|
|
99
|
+
},
|
|
100
|
+
"stub_style": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"enum": ["forward_declared", "todo"],
|
|
103
|
+
"default": "forward_declared",
|
|
104
|
+
"description": "How to write failing stubs: forward_declared uses real assertions on non-existent code; todo uses it.todo()"
|
|
105
|
+
},
|
|
106
|
+
"include_edge_cases": {
|
|
107
|
+
"type": "boolean",
|
|
108
|
+
"default": true,
|
|
109
|
+
"description": "Generate edge case tests in addition to happy path"
|
|
110
|
+
},
|
|
111
|
+
"max_tests_per_criterion": {
|
|
112
|
+
"type": "integer",
|
|
113
|
+
"minimum": 1,
|
|
114
|
+
"maximum": 5,
|
|
115
|
+
"default": 3,
|
|
116
|
+
"description": "Maximum test cases per acceptance criterion"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "tests-creator-output-contract",
|
|
4
|
+
"title": "Tests Creator Output Contract",
|
|
5
|
+
"description": "Output from tests-creator: test case specifications for task-implementer plus status report.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["test_case_specs", "status_report"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"test_case_specs": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"required": ["framework", "test_files", "run_command", "expected_result"],
|
|
12
|
+
"properties": {
|
|
13
|
+
"framework": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"enum": ["vitest", "jest", "bun:test", "mocha", "pytest", "go_test", "unknown"],
|
|
16
|
+
"description": "Detected test framework"
|
|
17
|
+
},
|
|
18
|
+
"test_files": {
|
|
19
|
+
"type": "array",
|
|
20
|
+
"items": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"required": ["path", "target_module", "test_count", "tests"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"path": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "Path to the generated test file"
|
|
27
|
+
},
|
|
28
|
+
"target_module": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"description": "Source file this test covers (may not exist yet)"
|
|
31
|
+
},
|
|
32
|
+
"test_count": {
|
|
33
|
+
"type": "integer",
|
|
34
|
+
"minimum": 1,
|
|
35
|
+
"description": "Number of test cases in this file"
|
|
36
|
+
},
|
|
37
|
+
"tests": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"items": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"required": ["id", "description", "criterion", "type", "status"],
|
|
42
|
+
"properties": {
|
|
43
|
+
"id": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"pattern": "^test-\\d+$",
|
|
46
|
+
"description": "Unique test identifier"
|
|
47
|
+
},
|
|
48
|
+
"description": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"description": "The it() description string"
|
|
51
|
+
},
|
|
52
|
+
"criterion": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"description": "Which acceptance criterion this test covers"
|
|
55
|
+
},
|
|
56
|
+
"type": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"enum": ["happy_path", "edge_case", "error_path"],
|
|
59
|
+
"description": "Test scenario type"
|
|
60
|
+
},
|
|
61
|
+
"status": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"enum": ["written", "todo"],
|
|
64
|
+
"description": "written = real assertion exists; todo = it.todo() stub"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"run_command": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"description": "Command to run just these test files",
|
|
75
|
+
"examples": ["bun test src/__tests__/UserValidator.test.ts", "npx vitest run src/"]
|
|
76
|
+
},
|
|
77
|
+
"expected_result": {
|
|
78
|
+
"type": "string",
|
|
79
|
+
"description": "Expected test runner output after generation (before implementation)",
|
|
80
|
+
"examples": ["all failing (RED phase)", "4 failed, 0 passed"]
|
|
81
|
+
},
|
|
82
|
+
"notes": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"description": "Test design decisions, assumptions, or concerns"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"status_report": {
|
|
89
|
+
"type": "object",
|
|
90
|
+
"required": ["status", "tests_written", "all_criteria_covered"],
|
|
91
|
+
"properties": {
|
|
92
|
+
"status": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"enum": ["DONE", "DONE_WITH_CONCERNS", "BLOCKED", "NEEDS_CONTEXT"],
|
|
95
|
+
"description": "Subagent status protocol value"
|
|
96
|
+
},
|
|
97
|
+
"tests_written": {
|
|
98
|
+
"type": "integer",
|
|
99
|
+
"minimum": 0,
|
|
100
|
+
"description": "Total number of test cases written"
|
|
101
|
+
},
|
|
102
|
+
"test_files_committed": {
|
|
103
|
+
"type": "array",
|
|
104
|
+
"items": { "type": "string" },
|
|
105
|
+
"description": "Paths of committed test files"
|
|
106
|
+
},
|
|
107
|
+
"all_criteria_covered": {
|
|
108
|
+
"type": "boolean",
|
|
109
|
+
"description": "Whether every acceptance criterion has at least one test"
|
|
110
|
+
},
|
|
111
|
+
"uncovered_criteria": {
|
|
112
|
+
"type": "array",
|
|
113
|
+
"items": { "type": "string" },
|
|
114
|
+
"description": "Acceptance criteria without test coverage (if any)"
|
|
115
|
+
},
|
|
116
|
+
"red_verified": {
|
|
117
|
+
"type": "boolean",
|
|
118
|
+
"description": "Whether tests were run and confirmed to be failing"
|
|
119
|
+
},
|
|
120
|
+
"concerns": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"description": "Any concerns or assumptions made during test generation"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|