@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,477 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-clean-code
|
|
3
|
+
description: |
|
|
4
|
+
Use when: reviewing code against Clean Code principles (Uncle Bob) and SOLID at the
|
|
5
|
+
function/class level — meaningful names, small functions, single level of abstraction,
|
|
6
|
+
argument count, error handling, DRY, comment quality, and SOLID (SRP, OCP, LSP, ISP, DIP)
|
|
7
|
+
as applied to individual classes and functions.
|
|
8
|
+
Triggered by: "review clean code", "check clean code", "Uncle Bob review", "SOLID review",
|
|
9
|
+
"review --clean-code", or dispatched by review-orchestrator.
|
|
10
|
+
NOT for: architectural layer violations (review-architecture), naming convention formatting
|
|
11
|
+
(review-style), logic correctness bugs (review-logic), or security (review-security-code).
|
|
12
|
+
version: "1.0.0"
|
|
13
|
+
triggers:
|
|
14
|
+
- "review clean code"
|
|
15
|
+
- "check clean code"
|
|
16
|
+
- "Uncle Bob review"
|
|
17
|
+
- "SOLID review"
|
|
18
|
+
- "review --clean-code"
|
|
19
|
+
- dispatched by review-orchestrator
|
|
20
|
+
metadata:
|
|
21
|
+
author: "MrCipherSmith"
|
|
22
|
+
version: "1.0.0"
|
|
23
|
+
category: "review"
|
|
24
|
+
license: "MIT"
|
|
25
|
+
compatibility: "cursor,codex,zed,opencode,claude"
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Review: Clean Code + SOLID
|
|
29
|
+
|
|
30
|
+
Specialized reviewer for **Clean Code principles** (Robert C. Martin) and **SOLID** at the
|
|
31
|
+
function and class level. Focuses on code in the current branch diff only.
|
|
32
|
+
|
|
33
|
+
The goal is not stylistic nitpicking — every finding here points to a concrete
|
|
34
|
+
maintainability, readability, or extensibility problem that will cause friction
|
|
35
|
+
as the codebase grows.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Workflow
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
Clean Code Review Progress:
|
|
43
|
+
- [ ] Step 1: Read Job Context (if provided)
|
|
44
|
+
- [ ] Step 2: Determine git scope (merge-base)
|
|
45
|
+
- [ ] Step 3: Collect diff and changed file list
|
|
46
|
+
- [ ] Step 4: Meaningful Names check
|
|
47
|
+
- [ ] Step 5: Functions check (size, abstraction, arguments)
|
|
48
|
+
- [ ] Step 6: Comments check
|
|
49
|
+
- [ ] Step 7: Error Handling check
|
|
50
|
+
- [ ] Step 8: DRY check
|
|
51
|
+
- [ ] Step 9: SOLID check (SRP, OCP, LSP, ISP, DIP)
|
|
52
|
+
- [ ] Step 10: Emit findings in unified format
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Input Contract
|
|
58
|
+
|
|
59
|
+
| Field | Type | Required | Description |
|
|
60
|
+
|-------|------|----------|-------------|
|
|
61
|
+
| `branch` | string | no | Branch to review. Defaults to current branch. |
|
|
62
|
+
| `commit_range` | string | no | Explicit hash or range. Overrides merge-base detection. |
|
|
63
|
+
| `context_doc` | string | no | Path to job context document. Read before reviewing. |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Scope Detection
|
|
68
|
+
|
|
69
|
+
See shared script: `skills/shared/git-merge-base.md`
|
|
70
|
+
|
|
71
|
+
Run the script to determine `BASE_SHA`, then collect the diff:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
git diff --name-status "${BASE_SHA}"
|
|
75
|
+
git diff "${BASE_SHA}"
|
|
76
|
+
git ls-files --others --exclude-standard
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Review scope: **only code introduced or modified in this branch since merge-base**.
|
|
80
|
+
Pre-existing problems in unchanged lines are out of scope unless a change directly
|
|
81
|
+
worsens them.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Iron Laws
|
|
86
|
+
|
|
87
|
+
1. **Findings without a specific `file:line` from the diff are not valid findings.** Never cite general observations about the codebase.
|
|
88
|
+
2. **Max severity for a naming issue is `major`.** Pure naming never rises to `blocker` — reserved for issues that break correctness.
|
|
89
|
+
3. **DRY violations require at least 3 repetitions before becoming `major`.** Two occurrences can be accidental; three is a pattern.
|
|
90
|
+
4. **SOLID opinions without a named principle and a concrete violation description are `info` only.** State the principle (e.g., SRP), the two responsibilities, and the impact.
|
|
91
|
+
5. **Do not flag language idioms or framework conventions as Clean Code violations.** If it is the standard way to do something in TypeScript / NestJS / React, it is not a violation.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Review Checklist
|
|
96
|
+
|
|
97
|
+
### Part A: Meaningful Names
|
|
98
|
+
|
|
99
|
+
The central test: **a name should tell you why it exists, what it does, and how it is used** — without needing a comment to explain it.
|
|
100
|
+
|
|
101
|
+
#### A1. Intention-Revealing Names
|
|
102
|
+
|
|
103
|
+
- [ ] Variable / parameter names that require a comment to understand their purpose
|
|
104
|
+
- [ ] Single-letter names outside loop counters (`i`, `j`, `k`) and conventional math variables
|
|
105
|
+
- [ ] Generic names that carry no information: `data`, `info`, `value`, `temp`, `result`, `obj`, `item`, `thing`, `stuff`, `helper`, `util`, `manager`, `processor`
|
|
106
|
+
- [ ] Boolean names that could be read as either true or false: prefer `isLoaded`, `hasError`, `canSubmit` over `loaded`, `error`, `submit`
|
|
107
|
+
- [ ] Function names that start with a vague verb: `do`, `handle`, `process`, `manage` — prefer verbs that describe the action: `parseConfig`, `validateToken`, `fetchUserById`
|
|
108
|
+
|
|
109
|
+
Flags:
|
|
110
|
+
- Single-letter variable outside loop — **minor**
|
|
111
|
+
- Generic meaningless name (`data`, `result`, `temp`) in new code — **minor**
|
|
112
|
+
- Boolean named without `is/has/can/should` prefix making polarity ambiguous — **minor**
|
|
113
|
+
- Function named `handleX` where X is also vague — **minor**
|
|
114
|
+
|
|
115
|
+
#### A2. Searchability and Length
|
|
116
|
+
|
|
117
|
+
- [ ] Names that are too short to be grepped: single letters or two-letter abbreviations for non-obvious concepts
|
|
118
|
+
- [ ] Names that are too long (>40 characters) adding noise without precision: prefer concise + precise over exhaustive
|
|
119
|
+
- [ ] Abbreviations that are not project-wide standards (`usr` for `user`, `cnt` for `count`, `cfg` for `config`)
|
|
120
|
+
|
|
121
|
+
Flags:
|
|
122
|
+
- Non-standard abbreviation that a new team member would need to decode — **minor**
|
|
123
|
+
|
|
124
|
+
#### A3. Consistent Vocabulary
|
|
125
|
+
|
|
126
|
+
- [ ] Same concept named differently in the same diff: `user` / `account` / `member` used interchangeably for the same domain entity
|
|
127
|
+
- [ ] Verb inconsistency for similar actions: `fetch` vs `get` vs `load` vs `retrieve` for the same type of operation in the same module
|
|
128
|
+
- [ ] Antonym inconsistency: if one side is `add`, the other should be `remove` — not `delete` / `destroy` / `clear`
|
|
129
|
+
|
|
130
|
+
Flags:
|
|
131
|
+
- Two names for the same concept in the same diff — **minor**
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
### Part B: Functions
|
|
136
|
+
|
|
137
|
+
#### B1. Function Size and Single Responsibility
|
|
138
|
+
|
|
139
|
+
Clean Code guideline: functions should do **one thing** at one level of abstraction.
|
|
140
|
+
|
|
141
|
+
- [ ] Function body exceeds ~20 lines: a strong smell that it does more than one thing
|
|
142
|
+
- [ ] Function mixes levels of abstraction: high-level orchestration next to low-level data manipulation in the same block
|
|
143
|
+
- [ ] Function that both queries data AND transforms it AND persists it (three responsibilities)
|
|
144
|
+
- [ ] Functions with a `And` or `Or` in the name, describing two operations
|
|
145
|
+
|
|
146
|
+
Flags:
|
|
147
|
+
- Function body >40 lines — **major** (clear overload; flag specific function by name)
|
|
148
|
+
- Function body 20–40 lines with visible mixed abstraction — **minor**
|
|
149
|
+
- `doXAndY()` naming explicitly stating two operations — **minor**
|
|
150
|
+
|
|
151
|
+
#### B2. Function Arguments
|
|
152
|
+
|
|
153
|
+
- [ ] Monadic (1 arg): ideal for transformations (`parseDate(str)`) and predicates (`isEmpty(list)`)
|
|
154
|
+
- [ ] Dyadic (2 args): acceptable when arguments form a natural ordered pair (`createPoint(x, y)`)
|
|
155
|
+
- [ ] Triadic (3 args): consider if a config/options object would read more clearly
|
|
156
|
+
- [ ] Polyadic (≥4 args): almost always a sign of a missing abstraction (config object, parameter object, or SRP violation)
|
|
157
|
+
- [ ] Boolean flag arguments: `renderWidget(true, false, true)` — split into separate functions or use named option objects
|
|
158
|
+
- [ ] Output arguments: a function that mutates its argument instead of returning a value (`populate(result)`)
|
|
159
|
+
|
|
160
|
+
Flags:
|
|
161
|
+
- Function with ≥4 parameters not using an options/config object — **major**
|
|
162
|
+
- Boolean flag parameter (`enabled: boolean`) passed to control function flow — **major** (split into two functions)
|
|
163
|
+
- Output argument (mutating parameter instead of returning) — **minor**
|
|
164
|
+
- Three parameters where a plain named object would be clearer — **minor**
|
|
165
|
+
|
|
166
|
+
#### B3. Abstraction Level Consistency
|
|
167
|
+
|
|
168
|
+
Each function should stay at one level of the abstraction ladder. A function that opens a file, reads its bytes, decodes UTF-8, splits lines, and validates each record mixes at least 3 levels.
|
|
169
|
+
|
|
170
|
+
- [ ] Inline low-level operations (string splitting, index arithmetic) inside a high-level orchestration function
|
|
171
|
+
- [ ] High-level domain concepts (`createUserAccount`) containing raw SQL or HTTP fetch calls instead of delegating to a repository/service
|
|
172
|
+
|
|
173
|
+
Flags:
|
|
174
|
+
- High-level function with low-level implementation detail mixed in — **minor**
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### Part C: Comments
|
|
179
|
+
|
|
180
|
+
#### C1. Comments That Lie or Are Redundant
|
|
181
|
+
|
|
182
|
+
- [ ] Comment that repeats what the code already says: `i++ // increment i`
|
|
183
|
+
- [ ] Comment that is stale / no longer matches the current code
|
|
184
|
+
- [ ] Commented-out code left in the diff
|
|
185
|
+
|
|
186
|
+
Flags:
|
|
187
|
+
- Redundant comment restating the code — **minor**
|
|
188
|
+
- Stale comment contradicting the code — **major** (actively misleads readers)
|
|
189
|
+
- Commented-out code block — **minor** (use git history, not comments, to preserve old code)
|
|
190
|
+
|
|
191
|
+
#### C2. Comments That Compensate for Bad Names
|
|
192
|
+
|
|
193
|
+
A comment whose entire purpose is to explain a poorly-named identifier is a sign to improve the name, not add a comment.
|
|
194
|
+
|
|
195
|
+
- [ ] `// This is the pipeline execution queue` explaining a variable named `queue2`
|
|
196
|
+
- [ ] JSDoc `@param data The data to process` adding zero information
|
|
197
|
+
|
|
198
|
+
Flags:
|
|
199
|
+
- Comment exists only to explain a name that could be made self-documenting — **minor**
|
|
200
|
+
|
|
201
|
+
#### C3. Comments That Are Justified
|
|
202
|
+
|
|
203
|
+
These are the correct uses of comments — do NOT flag:
|
|
204
|
+
- Legal comments (license headers)
|
|
205
|
+
- Explanation of intent for a non-obvious algorithm or business rule
|
|
206
|
+
- Clarification of a subtle domain constraint (`// ISO week starts on Monday per business requirement`)
|
|
207
|
+
- Warning about consequences (`// Do not cache — response contains time-sensitive token`)
|
|
208
|
+
- TODO/FIXME with an issue reference (`// TODO(#1234): remove after migration`)
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
### Part D: Error Handling
|
|
213
|
+
|
|
214
|
+
#### D1. Error Types and Propagation
|
|
215
|
+
|
|
216
|
+
- [ ] Returning `null` or `undefined` to signal failure instead of throwing or using a Result type — causes null propagation and eventual NPE
|
|
217
|
+
- [ ] Swallowing exceptions: `catch (err) {}` with no logging or re-throw
|
|
218
|
+
- [ ] Logging AND re-throwing the same error — double-logs across callers
|
|
219
|
+
- [ ] Using error strings instead of typed errors: `throw new Error("NOT_FOUND")` — callers cannot pattern-match
|
|
220
|
+
- [ ] `catch (err: any)` — loses type safety; use `catch (err: unknown)`
|
|
221
|
+
|
|
222
|
+
Flags:
|
|
223
|
+
- `catch` block with empty body or only a comment — **major** (silent failure)
|
|
224
|
+
- Returning `null` / `undefined` from a function to signal "not found" in a critical path — **major**
|
|
225
|
+
- Log + rethrow in the same catch block — **minor**
|
|
226
|
+
- Untyped error in catch — **minor**
|
|
227
|
+
|
|
228
|
+
#### D2. Error Context
|
|
229
|
+
|
|
230
|
+
- [ ] Re-throwing an error without wrapping context: `throw err` loses the call site information; prefer `throw new AppError("context", { cause: err })`
|
|
231
|
+
- [ ] Generic `new Error("something went wrong")` — message must identify what went wrong and ideally what inputs caused it
|
|
232
|
+
|
|
233
|
+
Flags:
|
|
234
|
+
- Bare `throw err` re-throw losing context in a library/service boundary — **minor**
|
|
235
|
+
- Generic error message with no context — **minor**
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
### Part E: DRY (Don't Repeat Yourself)
|
|
240
|
+
|
|
241
|
+
#### E1. Code Duplication
|
|
242
|
+
|
|
243
|
+
- [ ] Identical or near-identical code blocks in ≥3 places in the diff
|
|
244
|
+
- [ ] Copy-pasted logic that differs only in one or two variable names
|
|
245
|
+
- [ ] Multiple functions doing the same transformation with slightly different wrapping
|
|
246
|
+
|
|
247
|
+
Flags:
|
|
248
|
+
- 3+ identical or near-identical blocks in the diff that could be extracted — **major**
|
|
249
|
+
- 2 occurrences — **minor** (note, do not raise unless the pattern is clearly intentional duplication)
|
|
250
|
+
|
|
251
|
+
#### E2. Magic Numbers and Strings
|
|
252
|
+
|
|
253
|
+
- [ ] Hardcoded numeric literal used in business logic with no named constant (`if (status === 3)`)
|
|
254
|
+
- [ ] Repeated string literal used as a key, type discriminant, or route path without a shared constant
|
|
255
|
+
|
|
256
|
+
Flags:
|
|
257
|
+
- Magic number in business logic (not an obvious neutral like `0`, `1`, `100`) — **minor**
|
|
258
|
+
- Repeated string constant defined inline in multiple places — **minor**
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
### Part F: SOLID (at function/class level)
|
|
263
|
+
|
|
264
|
+
This overlaps with `review-architecture` at the system level, but here the focus is on
|
|
265
|
+
**individual classes and functions**, not module structure or layer assignments.
|
|
266
|
+
|
|
267
|
+
#### F1. Single Responsibility Principle (SRP)
|
|
268
|
+
|
|
269
|
+
A class should have **one reason to change**: one owner (one part of the system that drives its evolution).
|
|
270
|
+
|
|
271
|
+
- [ ] Class responsible for both data access AND business logic
|
|
272
|
+
- [ ] Class responsible for both input validation AND output formatting
|
|
273
|
+
- [ ] A constructor that does real work: making network calls, reading files, computing state — constructors should only assign
|
|
274
|
+
|
|
275
|
+
Flags:
|
|
276
|
+
- Class with two clearly distinct responsibilities that have different change drivers — **major**
|
|
277
|
+
- Constructor performing I/O or async operations — **major**
|
|
278
|
+
- Service method doing validation + transformation + persistence inline — **minor**
|
|
279
|
+
|
|
280
|
+
#### F2. Open/Closed Principle (OCP)
|
|
281
|
+
|
|
282
|
+
Classes should be open for extension, closed for modification. Violations appear as chains that must grow every time a new case is added.
|
|
283
|
+
|
|
284
|
+
- [ ] `if/else if` or `switch` over a type discriminant that already has 3+ branches — consider a strategy/visitor pattern
|
|
285
|
+
- [ ] Adding a case to an existing long `switch` in a file not in the diff context — flag if the diff shows a new `case` in a multi-case switch
|
|
286
|
+
|
|
287
|
+
Flags:
|
|
288
|
+
- New `case` added to a switch with ≥4 existing cases where a strategy pattern would be more appropriate — **minor**
|
|
289
|
+
- `instanceof` chain (`if (x instanceof A) ... else if (x instanceof B)`) — **minor**
|
|
290
|
+
|
|
291
|
+
#### F3. Liskov Substitution Principle (LSP)
|
|
292
|
+
|
|
293
|
+
Subtypes must be substitutable for their base types without changing the program's behavior.
|
|
294
|
+
|
|
295
|
+
- [ ] Subclass `override` method that throws `NotImplementedException` or `UnsupportedOperationException`
|
|
296
|
+
- [ ] Subclass method that requires checking `instanceof this` to determine behavior
|
|
297
|
+
- [ ] Override that strengthens preconditions (rejects more inputs than the parent)
|
|
298
|
+
- [ ] Override that weakens postconditions (returns less than the parent guarantees)
|
|
299
|
+
|
|
300
|
+
Flags:
|
|
301
|
+
- Override throwing "not supported" — **major**
|
|
302
|
+
- Override requiring `instanceof` self-check — **major**
|
|
303
|
+
|
|
304
|
+
#### F4. Interface Segregation Principle (ISP)
|
|
305
|
+
|
|
306
|
+
Clients should not be forced to depend on methods they do not use.
|
|
307
|
+
|
|
308
|
+
- [ ] Interface with ≥7 methods where implementing classes use only a subset — split into smaller interfaces
|
|
309
|
+
- [ ] Abstract class method that all concrete subclasses implement as a no-op
|
|
310
|
+
|
|
311
|
+
Flags:
|
|
312
|
+
- Interface with methods that have stub/no-op implementations in subclasses — **minor**
|
|
313
|
+
|
|
314
|
+
#### F5. Dependency Inversion Principle (DIP) — at class level
|
|
315
|
+
|
|
316
|
+
High-level modules should not depend on low-level modules. Both should depend on abstractions.
|
|
317
|
+
|
|
318
|
+
- [ ] Class instantiating its own dependencies with `new` instead of receiving them via constructor injection
|
|
319
|
+
- [ ] Class importing a concrete implementation class from another module instead of an interface/abstract class
|
|
320
|
+
|
|
321
|
+
Flags:
|
|
322
|
+
- `new ConcreteService()` inside a class method that should receive it via DI — **major**
|
|
323
|
+
- Import of concrete implementation where an interface or abstract type exists — **minor**
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Scope Boundaries
|
|
328
|
+
|
|
329
|
+
| Concern | This skill | Use instead |
|
|
330
|
+
|---------|-----------|-------------|
|
|
331
|
+
| Meaningful names, function size, DRY, comments, error handling | YES | — |
|
|
332
|
+
| SOLID at function/class level | YES | — |
|
|
333
|
+
| Layer violations, module coupling, dependency direction | NO | `review-architecture` |
|
|
334
|
+
| Style: naming convention formatting (casing, prefix) | NO | `review-style` |
|
|
335
|
+
| Logic bugs, off-by-one errors, null-safety | NO | `review-logic` |
|
|
336
|
+
| Security vulnerabilities | NO | `review-security-code` |
|
|
337
|
+
| Performance anti-patterns | NO | `review-performance` |
|
|
338
|
+
| React/MobX-specific frontend patterns | NO | `review-frontend` |
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## Orchestrated Review Contract
|
|
343
|
+
|
|
344
|
+
When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## Finding Format
|
|
349
|
+
|
|
350
|
+
### Class scope — required for `blocker` and `major`
|
|
351
|
+
|
|
352
|
+
Every `blocker` and `major` finding must carry `class_scope`: **every** site that
|
|
353
|
+
holds the shape you found, and **how you enumerated them** — the grep or query
|
|
354
|
+
you ran, or the guard that derives the set.
|
|
355
|
+
|
|
356
|
+
A finding anchored to one `file:line` is a claim about one site. The recorded
|
|
357
|
+
history of this repository is that a fix then repairs that site and leaves its
|
|
358
|
+
siblings: one writer of five, one operator instruction of four, six readers of
|
|
359
|
+
eight. Each was found by the *next* review round, which is why reviews here have
|
|
360
|
+
run to seven and four rounds instead of one.
|
|
361
|
+
|
|
362
|
+
```yaml
|
|
363
|
+
class_scope:
|
|
364
|
+
sites: ["src/lib/shell-config.ts:60", "src/session/store.ts:133"]
|
|
365
|
+
enumeration_method: "grep for the config-path resolvers; 7 writers, 2 unguarded"
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
"I checked the others" is not an enumeration method. A single-entry `sites` list
|
|
369
|
+
is a claim that the class has exactly one member — make it deliberately, because
|
|
370
|
+
`review-finding.schema.json` accepts it and the next round tests it.
|
|
371
|
+
|
|
372
|
+
`minor` and `info` may omit it: enumerating the class for every low-severity
|
|
373
|
+
observation is theatre, not rigour.
|
|
374
|
+
|
|
375
|
+
```markdown
|
|
376
|
+
### [F-NNN] Title
|
|
377
|
+
|
|
378
|
+
- **Severity**: blocker | major | minor | info
|
|
379
|
+
- **File**: path/to/file.ts:line
|
|
380
|
+
- **Principle**: Clean Code — Meaningful Names A1 | SOLID — SRP F1 | etc.
|
|
381
|
+
- **Problem**: what is wrong and why it matters
|
|
382
|
+
- **Fix**: concrete actionable suggestion
|
|
383
|
+
- **Patch** (optional):
|
|
384
|
+
```diff
|
|
385
|
+
- old line
|
|
386
|
+
+ new line
|
|
387
|
+
```
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
Severity guide for this reviewer:
|
|
391
|
+
|
|
392
|
+
| Severity | When to use |
|
|
393
|
+
|----------|------------|
|
|
394
|
+
| `blocker` | Swallowed exception (silent failure); constructor performing I/O that prevents testing; LSP violation breaking substitutability at runtime |
|
|
395
|
+
| `major` | Function >40 lines; ≥4 parameters without options object; boolean flag arg; class with two distinct responsibilities; `new ConcreteService()` bypassing DI |
|
|
396
|
+
| `minor` | Poor naming; redundant comment; magic number; 20–40 line function; minor OCP/ISP smell; log+rethrow |
|
|
397
|
+
| `info` | Stylistic opinion; potential future issue with no current concrete violation |
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
## Output Contract
|
|
402
|
+
|
|
403
|
+
```
|
|
404
|
+
STATUS: DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
```markdown
|
|
408
|
+
## Clean Code Review
|
|
409
|
+
|
|
410
|
+
### Review Scope
|
|
411
|
+
- Branch: `<BRANCH>`
|
|
412
|
+
- Parent ref: `<PARENT>`
|
|
413
|
+
- Merge-base: `<BASE_SHA>`
|
|
414
|
+
- Scope mode: `<default-with-uncommitted | explicit-hash-range>`
|
|
415
|
+
- Changed files reviewed: <N>
|
|
416
|
+
|
|
417
|
+
### Summary
|
|
418
|
+
<2-3 sentences: overall code health relative to Clean Code principles, key concerns.>
|
|
419
|
+
|
|
420
|
+
### Stats
|
|
421
|
+
- blocker: N | major: N | minor: N | info: N
|
|
422
|
+
|
|
423
|
+
### Findings
|
|
424
|
+
|
|
425
|
+
#### Naming
|
|
426
|
+
<[F-NNN] findings or "No naming issues found.">
|
|
427
|
+
|
|
428
|
+
#### Functions
|
|
429
|
+
<[F-NNN] findings or "No function design issues found.">
|
|
430
|
+
|
|
431
|
+
#### Comments
|
|
432
|
+
<[F-NNN] findings or "No comment issues found.">
|
|
433
|
+
|
|
434
|
+
#### Error Handling
|
|
435
|
+
<[F-NNN] findings or "No error handling issues found.">
|
|
436
|
+
|
|
437
|
+
#### DRY
|
|
438
|
+
<[F-NNN] findings or "No DRY violations found.">
|
|
439
|
+
|
|
440
|
+
#### SOLID
|
|
441
|
+
<[F-NNN] findings or "No SOLID violations found.">
|
|
442
|
+
|
|
443
|
+
### Clean Areas
|
|
444
|
+
[List parts of the checklist with no findings, confirming they were reviewed]
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## Job Context Awareness
|
|
450
|
+
|
|
451
|
+
When dispatched by `review-orchestrator` or `job-orchestrator`, the prompt MAY include:
|
|
452
|
+
|
|
453
|
+
```
|
|
454
|
+
JOB_NAME: <job-name>
|
|
455
|
+
CONTEXT_PATH: <JOBS_ROOT>/<job-name>/ai/context.md
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
If provided and the file exists, read the context document before reviewing. Use it to:
|
|
459
|
+
- Understand team-agreed naming conventions that may differ from defaults
|
|
460
|
+
- Identify intentional design decisions that appear to violate Clean Code but are documented exceptions
|
|
461
|
+
- Understand error handling strategy (Result types vs. exceptions vs. null)
|
|
462
|
+
|
|
463
|
+
If absent, proceed normally — context is optional and non-blocking.
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## Red Flags
|
|
468
|
+
|
|
469
|
+
| Rationalization | Why it is wrong |
|
|
470
|
+
|----------------|-----------------|
|
|
471
|
+
| "This function is long but it's clear" | Clarity and length are separate concerns; long functions are harder to test and change regardless of clarity |
|
|
472
|
+
| "The team knows what `data` means here" | Names must survive team turnover; if a newcomer can't understand it, it fails |
|
|
473
|
+
| "DRY isn't violated — the two blocks just happen to look the same" | If they change together and must stay in sync, they are a DRY violation |
|
|
474
|
+
| "Boolean arg is fine, it's obvious from context" | Boolean args always create `call(true, false, true)` call sites that require reading the signature to decode |
|
|
475
|
+
| "The catch block logs the error, that's enough" | Logging and silently swallowing are the same if nothing else handles it — check what happens after the catch |
|
|
476
|
+
| "I can flag SOLID issues at info because they're just design opinions" | Named SOLID violations with concrete impact (testability, extensibility) are at least minor |
|
|
477
|
+
| "This is how the framework works, so it's not a violation" | Framework idioms are explicitly exempt — Iron Law 5 |
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-core-boundaries
|
|
3
|
+
description: |
|
|
4
|
+
Use when reviewing shared core/infrastructure module changes for dependency
|
|
5
|
+
direction, feature-boundary leakage, abstraction stability, composition,
|
|
6
|
+
and blast-radius risks. Dispatched by review-orchestrator for
|
|
7
|
+
--core-boundaries, --project-conventions, --all, or src/core/** changes.
|
|
8
|
+
metadata:
|
|
9
|
+
author: "MrCipherSmith"
|
|
10
|
+
version: "1.0.0"
|
|
11
|
+
category: "review"
|
|
12
|
+
license: "MIT"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Review — Core Boundaries
|
|
16
|
+
|
|
17
|
+
Reviewer for shared infrastructure modules. A core module should provide stable foundations
|
|
18
|
+
used by feature modules; it should not accumulate feature-specific behaviour.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Scope
|
|
23
|
+
|
|
24
|
+
Applicable to folders such as `src/core/**`, `core/**`, `shared/**`, `foundation/**`,
|
|
25
|
+
or whatever the repository documents as its shared infrastructure layer.
|
|
26
|
+
|
|
27
|
+
If a more specific module reviewer also applies, run both.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Checklist
|
|
32
|
+
|
|
33
|
+
- Shared/core modules contain reusable utilities, base components, base stores, primitives, and
|
|
34
|
+
infrastructure.
|
|
35
|
+
- Feature-specific code does not move into core just to avoid imports.
|
|
36
|
+
- Core does not import feature/domain modules.
|
|
37
|
+
- Dependencies stay minimal and point inward: feature modules depend on core, not the reverse.
|
|
38
|
+
- Prefer composition through interfaces, base classes, adapters, or callbacks over hard-coded
|
|
39
|
+
feature knowledge.
|
|
40
|
+
- Public core APIs remain stable and domain-neutral.
|
|
41
|
+
- New exports are added only when there is a real shared consumer need.
|
|
42
|
+
- Changes are conservative because core has broad blast radius.
|
|
43
|
+
- Generic helpers remain generic; names, types, and state do not leak a single feature's language.
|
|
44
|
+
- Resource-owning utilities document and test cleanup semantics.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Orchestrated Review Contract
|
|
49
|
+
|
|
50
|
+
When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Finding Format
|
|
55
|
+
|
|
56
|
+
### Class scope — required for `blocker` and `major`
|
|
57
|
+
|
|
58
|
+
Every `blocker` and `major` finding must carry `class_scope`: **every** site that
|
|
59
|
+
holds the shape you found, and **how you enumerated them** — the grep or query
|
|
60
|
+
you ran, or the guard that derives the set.
|
|
61
|
+
|
|
62
|
+
A finding anchored to one `file:line` is a claim about one site. The recorded
|
|
63
|
+
history of this repository is that a fix then repairs that site and leaves its
|
|
64
|
+
siblings: one writer of five, one operator instruction of four, six readers of
|
|
65
|
+
eight. Each was found by the *next* review round, which is why reviews here have
|
|
66
|
+
run to seven and four rounds instead of one.
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
class_scope:
|
|
70
|
+
sites: ["src/lib/shell-config.ts:60", "src/session/store.ts:133"]
|
|
71
|
+
enumeration_method: "grep for the config-path resolvers; 7 writers, 2 unguarded"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
"I checked the others" is not an enumeration method. A single-entry `sites` list
|
|
75
|
+
is a claim that the class has exactly one member — make it deliberately, because
|
|
76
|
+
`review-finding.schema.json` accepts it and the next round tests it.
|
|
77
|
+
|
|
78
|
+
`minor` and `info` may omit it: enumerating the class for every low-severity
|
|
79
|
+
observation is theatre, not rigour.
|
|
80
|
+
|
|
81
|
+
```markdown
|
|
82
|
+
### [F-NNN] Title
|
|
83
|
+
|
|
84
|
+
- **Severity**: blocker | major | minor | info
|
|
85
|
+
- **File**: path/to/core/file.ts:line
|
|
86
|
+
- **Problem**: core boundary or stability rule violated
|
|
87
|
+
- **Why it matters**: blast radius across modules
|
|
88
|
+
- **Fix**: move to domain module, invert dependency, or extract a truly shared abstraction
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Severity guidance: importing feature code into core or adding feature-specific public API is
|
|
92
|
+
usually `major`; broad shared API breakage can be `blocker`.
|
|
93
|
+
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-flow-graph
|
|
3
|
+
description: |
|
|
4
|
+
Use when reviewing generic ReactFlow or graph-surface abstraction changes:
|
|
5
|
+
public graph surface, store subclassing, layout lifecycle, internal helper
|
|
6
|
+
boundaries, selection lifecycle, and large-graph performance. Dispatched by
|
|
7
|
+
review-orchestrator for --flow-graph, --project-conventions, --all, or
|
|
8
|
+
src/core/flow/** / graph abstraction changes.
|
|
9
|
+
metadata:
|
|
10
|
+
author: "MrCipherSmith"
|
|
11
|
+
version: "1.0.0"
|
|
12
|
+
category: "review"
|
|
13
|
+
license: "MIT"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Review — Flow Graph Abstractions
|
|
17
|
+
|
|
18
|
+
Reviewer for reusable ReactFlow/graph integration layers. Use it when a repository has a shared
|
|
19
|
+
graph surface consumed by domain modules.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Scope
|
|
24
|
+
|
|
25
|
+
Applicable to shared graph/flow abstraction folders such as `src/core/flow/**`,
|
|
26
|
+
`src/graph/**`, `src/shared/flow/**`, and consumers adding a new graph surface through the
|
|
27
|
+
shared public API.
|
|
28
|
+
|
|
29
|
+
If the repository has local graph docs, read them first and treat this checklist as a neutral
|
|
30
|
+
baseline.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Checklist
|
|
35
|
+
|
|
36
|
+
### Public Surface
|
|
37
|
+
|
|
38
|
+
- Domain modules consume the documented public graph surface instead of mounting internal shell
|
|
39
|
+
or bridge modules directly.
|
|
40
|
+
- New exports are added only when more than one domain consumer needs them.
|
|
41
|
+
- Public graph components own common setup such as loader/splitter/viewport wiring/toolbars.
|
|
42
|
+
|
|
43
|
+
### Store and Lifecycle
|
|
44
|
+
|
|
45
|
+
- Static viewers and expandable/progressive graphs use the appropriate base store or abstraction.
|
|
46
|
+
- Subclasses initialize base state before local observability/reactivity.
|
|
47
|
+
- Domain side effects preserve base selection/click/reset behaviour.
|
|
48
|
+
- Expand/collapse graphs define fetch and direction/availability contracts explicitly.
|
|
49
|
+
- Independent graph data fetches run in parallel and merge through a deduplication helper.
|
|
50
|
+
|
|
51
|
+
### Internal Boundary
|
|
52
|
+
|
|
53
|
+
- Layout helpers, shell components, bridge hooks, SVG/canvas geometry helpers, export helpers,
|
|
54
|
+
and popup/container utilities stay internal unless there is a real shared public need.
|
|
55
|
+
- New pure node/edge helpers live close to the graph abstraction.
|
|
56
|
+
- New visual primitives live in the graph abstraction layer only when domain-neutral.
|
|
57
|
+
- Domain-specific data shapes and selection details stay in domain modules.
|
|
58
|
+
|
|
59
|
+
### Shared Graph Defaults and Performance
|
|
60
|
+
|
|
61
|
+
- Shared graph defaults are configured in one surface, not repeated per consumer.
|
|
62
|
+
- Large nodes/edges arrays avoid deep observation/proxying when shallow/reference observation is
|
|
63
|
+
enough.
|
|
64
|
+
- Selection/detail slots use reference semantics when values are swapped as units.
|
|
65
|
+
- Lookup maps/indexes are computed once from source arrays for O(1) access.
|
|
66
|
+
- Hand graph libraries fresh array references without deep cloning on every render.
|
|
67
|
+
- User-initiated graph changes batch writes.
|
|
68
|
+
- Animated edge/node effects do not restart unnecessarily on parent rerenders.
|
|
69
|
+
- Level-of-detail logic uses discrete thresholds or policy helpers rather than per-frame UI
|
|
70
|
+
rerenders.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Orchestrated Review Contract
|
|
75
|
+
|
|
76
|
+
When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Finding Format
|
|
81
|
+
|
|
82
|
+
### Class scope — required for `blocker` and `major`
|
|
83
|
+
|
|
84
|
+
Every `blocker` and `major` finding must carry `class_scope`: **every** site that
|
|
85
|
+
holds the shape you found, and **how you enumerated them** — the grep or query
|
|
86
|
+
you ran, or the guard that derives the set.
|
|
87
|
+
|
|
88
|
+
A finding anchored to one `file:line` is a claim about one site. The recorded
|
|
89
|
+
history of this repository is that a fix then repairs that site and leaves its
|
|
90
|
+
siblings: one writer of five, one operator instruction of four, six readers of
|
|
91
|
+
eight. Each was found by the *next* review round, which is why reviews here have
|
|
92
|
+
run to seven and four rounds instead of one.
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
class_scope:
|
|
96
|
+
sites: ["src/lib/shell-config.ts:60", "src/session/store.ts:133"]
|
|
97
|
+
enumeration_method: "grep for the config-path resolvers; 7 writers, 2 unguarded"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
"I checked the others" is not an enumeration method. A single-entry `sites` list
|
|
101
|
+
is a claim that the class has exactly one member — make it deliberately, because
|
|
102
|
+
`review-finding.schema.json` accepts it and the next round tests it.
|
|
103
|
+
|
|
104
|
+
`minor` and `info` may omit it: enumerating the class for every low-severity
|
|
105
|
+
observation is theatre, not rigour.
|
|
106
|
+
|
|
107
|
+
```markdown
|
|
108
|
+
### [F-NNN] Title
|
|
109
|
+
|
|
110
|
+
- **Severity**: blocker | major | minor | info
|
|
111
|
+
- **File**: path/to/graph/file.ts:line
|
|
112
|
+
- **Problem**: which graph abstraction contract is violated
|
|
113
|
+
- **Why it matters**: public surface stability, graph correctness, or performance impact
|
|
114
|
+
- **Fix**: concrete change aligned with the shared graph surface
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Severity guidance: breaking the public surface or bypassing base selection/layout lifecycle is
|
|
118
|
+
usually `major`; performance regressions on large graphs can be `major` or `blocker`.
|
|
119
|
+
|