octocode-cli 1.2.7 → 1.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/README.md +42 -35
- package/out/octocode-cli.js +36 -11719
- package/package.json +36 -36
- package/skills/README.md +42 -114
- package/skills/{octocode-code-engineer → octocode-engineer}/.claude/settings.local.json +2 -1
- package/skills/octocode-engineer/README.md +99 -0
- package/skills/octocode-engineer/SKILL.md +499 -0
- package/skills/octocode-engineer/build.mjs +29 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/eslint.config.mjs +3 -13
- package/skills/{octocode-code-engineer → octocode-engineer}/package.json +28 -27
- package/skills/octocode-engineer/references/ast-reference.md +166 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/references/cli-reference.md +80 -6
- package/skills/octocode-engineer/references/externals.md +86 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/references/output-files.md +46 -6
- package/skills/octocode-engineer/references/quality-indicators.md +202 -0
- package/skills/octocode-engineer/references/tool-workflows.md +298 -0
- package/skills/octocode-engineer/references/validation-playbooks.md +99 -0
- package/skills/octocode-engineer/scripts/ast/search.js +45 -0
- package/skills/octocode-engineer/scripts/ast/tree-search.js +27 -0
- package/skills/octocode-engineer/scripts/index.js +173 -0
- package/skills/octocode-engineer/scripts/run.js +179 -0
- package/skills/octocode-engineer/src/analysis/dependencies.ts +378 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/discovery.test.ts +57 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/discovery.ts +43 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/search.test.ts +113 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/search.ts +64 -1
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-sitter.test.ts +118 -2
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-sitter.ts +65 -3
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/ts-analyzer.test.ts +281 -1
- package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/ts-analyzer.ts +173 -3
- package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/security.test.ts +73 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/security.ts +62 -4
- package/skills/octocode-engineer/src/detector-gating.test.ts +59 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/code-quality.ts +342 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/index.ts +8 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/index.test.ts +565 -11
- package/skills/octocode-engineer/src/index.ts +468 -0
- package/skills/octocode-engineer/src/pipeline/affected.test.ts +147 -0
- package/skills/octocode-engineer/src/pipeline/affected.ts +68 -0
- package/skills/octocode-engineer/src/pipeline/baseline.test.ts +276 -0
- package/skills/octocode-engineer/src/pipeline/baseline.ts +76 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cli.test.ts +300 -53
- package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cli.ts +180 -36
- package/skills/octocode-engineer/src/pipeline/config-loader.test.ts +264 -0
- package/skills/octocode-engineer/src/pipeline/config-loader.ts +109 -0
- package/skills/octocode-engineer/src/pipeline/create-options.ts +55 -0
- package/skills/octocode-engineer/src/pipeline/health-score.test.ts +65 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/main.ts +130 -17
- package/skills/octocode-engineer/src/pipeline/progress.ts +51 -0
- package/skills/octocode-engineer/src/pipeline/reporters.test.ts +155 -0
- package/skills/octocode-engineer/src/pipeline/reporters.ts +64 -0
- package/skills/octocode-engineer/src/reporting/graph-features.test.ts +279 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/output-contract.test.ts +6 -0
- package/skills/octocode-engineer/src/reporting/summary-md.test.ts +1066 -0
- package/skills/octocode-engineer/src/reporting/summary-md.ts +1604 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/writer.ts +136 -13
- package/skills/octocode-engineer/src/run.ts +78 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/sanity.test.ts +1 -1
- package/skills/octocode-engineer/src/types/analysis.ts +25 -0
- package/skills/octocode-engineer/src/types/collectors.ts +134 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/types/constants.ts +75 -41
- package/skills/octocode-engineer/src/types/core.ts +203 -0
- package/skills/octocode-engineer/src/types/dependency.ts +215 -0
- package/skills/octocode-engineer/src/types/file-entry.ts +108 -0
- package/skills/octocode-engineer/src/types/findings.ts +105 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/src/types/index.ts +60 -30
- package/skills/octocode-engineer/src/types/tree-sitter.ts +38 -0
- package/skills/{octocode-code-engineer → octocode-engineer}/tsconfig.json +1 -0
- package/skills/octocode-research/.octocode/scan/.cache/analysis-cache.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/architecture.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/ast-trees.txt +5566 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/code-quality.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/dead-code.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/file-inventory.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/findings.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/graph.md +189 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/security.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/summary.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-32-27-073Z/summary.md +265 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/architecture.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/ast-trees.txt +5555 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/code-quality.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/dead-code.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/file-inventory.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/findings.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/graph.md +190 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/security.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/summary.json +1 -0
- package/skills/octocode-research/.octocode/scan/2026-03-22T10-40-10-469Z/summary.md +265 -0
- package/skills/octocode-research/CHANGELOG.md +60 -0
- package/skills/octocode-research/README.md +102 -388
- package/skills/octocode-research/SKILL.md +169 -498
- package/skills/octocode-research/package.json +19 -31
- package/skills/octocode-research/references/PARALLEL_AGENT_PROTOCOL.md +19 -0
- package/skills/octocode-research/references/SESSION_MANAGEMENT.md +38 -0
- package/skills/octocode-research/scripts/server-init.js +1 -1
- package/skills/octocode-research/scripts/server.d.ts +2 -1
- package/skills/octocode-research/scripts/server.js +329 -233
- package/skills/octocode-research/src/__tests__/integration/promptsRoutes.test.ts +180 -0
- package/skills/octocode-research/src/__tests__/integration/serverHttp.test.ts +221 -0
- package/skills/octocode-research/src/__tests__/integration/serverLifecycle.test.ts +194 -0
- package/skills/octocode-research/src/__tests__/integration/toolsRoutes.test.ts +501 -0
- package/skills/octocode-research/src/__tests__/unit/readiness.test.ts +61 -0
- package/skills/octocode-research/src/__tests__/unit/resilience.test.ts +192 -0
- package/skills/octocode-research/src/__tests__/unit/responseFactory.test.ts +172 -0
- package/skills/octocode-research/src/__tests__/unit/responseParser.test.ts +288 -0
- package/skills/octocode-research/src/__tests__/unit/schemas.test.ts +509 -0
- package/skills/octocode-research/src/index.ts +4 -124
- package/skills/octocode-research/src/middleware/queryParser.ts +0 -26
- package/skills/octocode-research/src/routes/lsp.ts +58 -59
- package/skills/octocode-research/src/routes/package.ts +35 -65
- package/skills/octocode-research/src/routes/prompts.ts +3 -3
- package/skills/octocode-research/src/routes/tools.ts +8 -20
- package/skills/octocode-research/src/server-init.ts +30 -237
- package/skills/octocode-research/src/server.ts +50 -23
- package/skills/octocode-research/src/types/errorGuards.ts +9 -80
- package/skills/octocode-research/src/types/guards.ts +0 -28
- package/skills/octocode-research/src/types/mcp.ts +11 -66
- package/skills/octocode-research/src/types/responses.ts +11 -129
- package/skills/octocode-research/src/utils/circuitBreaker.ts +0 -21
- package/skills/octocode-research/src/utils/logger.ts +1 -97
- package/skills/octocode-research/src/utils/resilience.ts +2 -12
- package/skills/octocode-research/src/utils/responseFactory.ts +0 -42
- package/skills/octocode-research/src/utils/responseParser.ts +3 -25
- package/skills/octocode-research/src/utils/retry.ts +0 -63
- package/skills/octocode-research/src/utils/routeFactory.ts +1 -1
- package/skills/octocode-research/src/validation/httpPreprocess.ts +0 -3
- package/skills/octocode-research/src/validation/index.ts +0 -1
- package/skills/octocode-research/src/validation/schemas.ts +0 -63
- package/skills/octocode-research/src/validation/toolCallSchema.ts +3 -3
- package/skills/octocode-research/tsdown.config.ts +4 -0
- package/skills/octocode-research/vitest.config.ts +3 -0
- package/skills/octocode-code-engineer/.plan/VALIDATED_PLAN.md +0 -223
- package/skills/octocode-code-engineer/README.md +0 -178
- package/skills/octocode-code-engineer/SKILL.md +0 -418
- package/skills/octocode-code-engineer/minify-scripts.mjs +0 -32
- package/skills/octocode-code-engineer/references/agent-ast-reading-rfc.md +0 -95
- package/skills/octocode-code-engineer/references/architecture-techniques.md +0 -121
- package/skills/octocode-code-engineer/references/ast-search.md +0 -210
- package/skills/octocode-code-engineer/references/ast-tree-search.md +0 -151
- package/skills/octocode-code-engineer/references/concepts.md +0 -107
- package/skills/octocode-code-engineer/references/finding-categories.md +0 -128
- package/skills/octocode-code-engineer/references/improvement-roadmap.md +0 -304
- package/skills/octocode-code-engineer/references/playbooks.md +0 -204
- package/skills/octocode-code-engineer/references/present-results.md +0 -136
- package/skills/octocode-code-engineer/references/tool-workflows.md +0 -566
- package/skills/octocode-code-engineer/references/validate-investigate.md +0 -225
- package/skills/octocode-code-engineer/scripts/analysis/dependencies.js +0 -1
- package/skills/octocode-code-engineer/scripts/analysis/dependency-summary.js +0 -1
- package/skills/octocode-code-engineer/scripts/analysis/discovery.js +0 -1
- package/skills/octocode-code-engineer/scripts/analysis/graph-analytics.js +0 -1
- package/skills/octocode-code-engineer/scripts/analysis/semantic.js +0 -1
- package/skills/octocode-code-engineer/scripts/ast/helpers.js +0 -1
- package/skills/octocode-code-engineer/scripts/ast/metrics.js +0 -1
- package/skills/octocode-code-engineer/scripts/ast/search.js +0 -2
- package/skills/octocode-code-engineer/scripts/ast/tree-search.js +0 -2
- package/skills/octocode-code-engineer/scripts/ast/tree-sitter.js +0 -1
- package/skills/octocode-code-engineer/scripts/ast/ts-analyzer.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/chains.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/effects.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/input-sources.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/performance.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/prototype-pollution.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/security.js +0 -1
- package/skills/octocode-code-engineer/scripts/collectors/test-profile.js +0 -1
- package/skills/octocode-code-engineer/scripts/common/is-direct-run.js +0 -1
- package/skills/octocode-code-engineer/scripts/common/utils.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/code-quality.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/cohesion.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/coupling.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/cycle.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/dead-code.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/import-style.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/index.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/security.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/semantic.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/shared.js +0 -1
- package/skills/octocode-code-engineer/scripts/detectors/test-quality.js +0 -1
- package/skills/octocode-code-engineer/scripts/index.js +0 -1
- package/skills/octocode-code-engineer/scripts/pipeline/cache.js +0 -1
- package/skills/octocode-code-engineer/scripts/pipeline/cli.js +0 -1
- package/skills/octocode-code-engineer/scripts/pipeline/main.js +0 -2
- package/skills/octocode-code-engineer/scripts/reporting/analysis.js +0 -1
- package/skills/octocode-code-engineer/scripts/reporting/summary-md.js +0 -1
- package/skills/octocode-code-engineer/scripts/reporting/writer.js +0 -1
- package/skills/octocode-code-engineer/scripts/types/constants.js +0 -1
- package/skills/octocode-code-engineer/scripts/types/index.js +0 -1
- package/skills/octocode-code-engineer/scripts/types/interfaces.js +0 -1
- package/skills/octocode-code-engineer/src/analysis/dependencies.ts +0 -406
- package/skills/octocode-code-engineer/src/index.ts +0 -403
- package/skills/octocode-code-engineer/src/reporting/summary-md.test.ts +0 -421
- package/skills/octocode-code-engineer/src/reporting/summary-md.ts +0 -714
- package/skills/octocode-code-engineer/src/types/interfaces.ts +0 -682
- package/skills/octocode-research/src/types/toolTypes.ts +0 -33
- package/skills/octocode-research/src/utils/logEmoji.ts +0 -103
- /package/skills/{octocode-code-engineer → octocode-engineer}/.octocode/rfc/RFC-code-engineer-weakness-fixes.md +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/architecture.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ast-helpers.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ast-search.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/base.css +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/block-navigation.js +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/cache.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/cli.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/clover.xml +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-effects.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-input-sources.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-performance.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-prototype-pollution.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-security.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/collect-test-profile.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/coverage-final.json +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/dependencies.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/dependency-summary.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/discovery.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/favicon.png +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/graph-analytics.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/index.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/index.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/metrics.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/pipeline.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/prettify.css +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/prettify.js +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/report-analysis.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/report-writer.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/security-detectors.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/semantic-detectors.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/semantic.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/sort-arrow-sprite.png +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/sorter.js +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/summary-md.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/test-quality-detectors.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/tree-sitter-analyzer.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/ts-analyzer.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/types.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/coverage/utils.ts.html +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependencies.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependency-summary.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/dependency-summary.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/graph-analytics.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/graph-analytics.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/semantic.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/analysis/semantic.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/helpers.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/helpers.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/metrics.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/metrics.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-search.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/ast/tree-search.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/chains.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/effects.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/effects.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/input-sources.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/input-sources.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/performance.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/performance.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/prototype-pollution.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/prototype-pollution.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/test-profile.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/collectors/test-profile.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/is-direct-run.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/is-direct-run.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/utils.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/common/utils.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/cohesion.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/coupling.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/cycle.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/dead-code.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/import-style.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/index.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/security.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/security.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/semantic.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/shared.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/test-quality.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/detectors/test-quality.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cache.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/cache.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline/main.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/pipeline.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/analysis.test.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/src/reporting/analysis.ts +0 -0
- /package/skills/{octocode-code-engineer → octocode-engineer}/vitest.config.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"schemaVersion":"1.1.0","generatedAt":"2026-03-22T10:32:30.560Z","optimizationFindings":[{"id":"AST-ISSUE-0001","severity":"critical","category":"dependency-critical-path","file":"src/server.ts","lineStart":3,"lineEnd":3,"title":"Critical dependency chain risk: 6 files (2 entry points)","reason":"Potentially high-change surface: src/server.ts -> src/routes/tools.ts -> src/utils/resilience.ts -> src/utils/circuitBreaker.ts -> src/index.ts -> src/utils/responseBuilder.ts (351 weight). Also reached from: src/routes/tools.ts.","files":["src/server.ts","src/routes/tools.ts","src/utils/resilience.ts","src/utils/circuitBreaker.ts","src/index.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Break chain at `src/server.ts` (fan-out: 11, fan-in: 0).","steps":["Extract interface from `src/server.ts` — it has 11 outbound dependencies.","Downstream modules depend on the interface, not the implementation.","This splits the chain into two independent segments."]},"impact":"Critical refactor opportunities; shorter chains reduce blast radius of change.","tags":["change-risk","dependency","blast-radius"],"ruleId":"graph.dependency-critical-path","analysisLens":"graph","confidence":"high","evidence":{"category":"dependency-critical-path","location":"src/server.ts:3-3"},"correlatedSignals":["hot-file","critical-path-context","top-level-effects","paired:untested-critical-code","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary","paired:uncleared-timer"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0002","severity":"critical","category":"dependency-critical-path","file":"src/__tests__/integration/routes.test.ts","lineStart":14,"lineEnd":14,"title":"Critical dependency chain risk: 6 files (2 entry points)","reason":"Potentially high-change surface: src/__tests__/integration/routes.test.ts -> src/routes/lsp.ts -> src/utils/resilience.ts -> src/utils/circuitBreaker.ts -> src/index.ts -> src/utils/responseBuilder.ts (268 weight). Also reached from: src/routes/lsp.ts.","files":["src/__tests__/integration/routes.test.ts","src/routes/lsp.ts","src/utils/resilience.ts","src/utils/circuitBreaker.ts","src/index.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Break chain at `src/routes/lsp.ts` (fan-out: 7, fan-in: 1).","steps":["Extract interface from `src/routes/lsp.ts` — it has 7 outbound dependencies.","Downstream modules depend on the interface, not the implementation.","This splits the chain into two independent segments."]},"impact":"Critical refactor opportunities; shorter chains reduce blast radius of change.","tags":["change-risk","dependency","blast-radius"],"ruleId":"graph.dependency-critical-path","analysisLens":"graph","confidence":"high","evidence":{"category":"dependency-critical-path","location":"src/__tests__/integration/routes.test.ts:14-14"},"correlatedSignals":["critical-path-context"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0003","severity":"critical","category":"dependency-critical-path","file":"src/routes/package.ts","lineStart":7,"lineEnd":7,"title":"Critical dependency chain risk: 5 files (2 entry points)","reason":"Potentially high-change surface: src/routes/package.ts -> src/utils/resilience.ts -> src/utils/circuitBreaker.ts -> src/index.ts -> src/utils/responseBuilder.ts (258 weight). Also reached from: src/utils/resilience.ts.","files":["src/routes/package.ts","src/utils/resilience.ts","src/utils/circuitBreaker.ts","src/index.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Break chain at `src/routes/package.ts` (fan-out: 8, fan-in: 1).","steps":["Extract interface from `src/routes/package.ts` — it has 8 outbound dependencies.","Downstream modules depend on the interface, not the implementation.","This splits the chain into two independent segments."]},"impact":"Critical refactor opportunities; shorter chains reduce blast radius of change.","tags":["change-risk","dependency","blast-radius"],"ruleId":"graph.dependency-critical-path","analysisLens":"graph","confidence":"high","evidence":{"category":"dependency-critical-path","location":"src/routes/package.ts:7-7"},"correlatedSignals":["hot-file","critical-path-context","paired:cognitive-complexity","paired:unreachable-module","paired:unvalidated-input-sink","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0004","severity":"critical","category":"dependency-critical-path","file":"src/routes/github.ts","lineStart":23,"lineEnd":23,"title":"Critical dependency chain risk: 5 files","reason":"Potentially high-change surface: src/routes/github.ts -> src/utils/resilience.ts -> src/utils/circuitBreaker.ts -> src/index.ts -> src/utils/responseBuilder.ts (255 weight).","files":["src/routes/github.ts","src/utils/resilience.ts","src/utils/circuitBreaker.ts","src/index.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Break chain at `src/routes/github.ts` (fan-out: 7, fan-in: 1).","steps":["Extract interface from `src/routes/github.ts` — it has 7 outbound dependencies.","Downstream modules depend on the interface, not the implementation.","This splits the chain into two independent segments."]},"impact":"Critical refactor opportunities; shorter chains reduce blast radius of change.","tags":["change-risk","dependency","blast-radius"],"ruleId":"graph.dependency-critical-path","analysisLens":"graph","confidence":"high","evidence":{"category":"dependency-critical-path","location":"src/routes/github.ts:23-23"},"correlatedSignals":["hot-file","critical-path-context","paired:unreachable-module","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0005","severity":"critical","category":"dependency-critical-path","file":"src/routes/local.ts","lineStart":21,"lineEnd":21,"title":"Critical dependency chain risk: 5 files","reason":"Potentially high-change surface: src/routes/local.ts -> src/utils/resilience.ts -> src/utils/circuitBreaker.ts -> src/index.ts -> src/utils/responseBuilder.ts (247 weight).","files":["src/routes/local.ts","src/utils/resilience.ts","src/utils/circuitBreaker.ts","src/index.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Break chain at `src/routes/local.ts` (fan-out: 7, fan-in: 1).","steps":["Extract interface from `src/routes/local.ts` — it has 7 outbound dependencies.","Downstream modules depend on the interface, not the implementation.","This splits the chain into two independent segments."]},"impact":"Critical refactor opportunities; shorter chains reduce blast radius of change.","tags":["change-risk","dependency","blast-radius"],"ruleId":"graph.dependency-critical-path","analysisLens":"graph","confidence":"high","evidence":{"category":"dependency-critical-path","location":"src/routes/local.ts:21-21"},"correlatedSignals":["hot-file","critical-path-context","paired:unreachable-module","paired:dependency-test-only","paired:similar-function-body","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0006","severity":"critical","category":"dependency-critical-path","file":"src/__tests__/integration/circuitBreaker.test.ts","lineStart":8,"lineEnd":14,"title":"Critical dependency chain risk: 4 files","reason":"Potentially high-change surface: src/__tests__/integration/circuitBreaker.test.ts -> src/utils/circuitBreaker.ts -> src/index.ts -> src/utils/responseBuilder.ts (181 weight).","files":["src/__tests__/integration/circuitBreaker.test.ts","src/utils/circuitBreaker.ts","src/index.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Break chain at `src/utils/circuitBreaker.ts` (fan-out: 3, fan-in: 4).","steps":["Extract interface from `src/utils/circuitBreaker.ts` — it has 3 outbound dependencies.","Downstream modules depend on the interface, not the implementation.","This splits the chain into two independent segments."]},"impact":"Critical refactor opportunities; shorter chains reduce blast radius of change.","tags":["change-risk","dependency","blast-radius"],"ruleId":"graph.dependency-critical-path","analysisLens":"graph","confidence":"high","evidence":{"category":"dependency-critical-path","location":"src/__tests__/integration/circuitBreaker.test.ts:8-14"},"correlatedSignals":["critical-path-context"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0007","severity":"critical","category":"dependency-critical-path","file":"src/__tests__/unit/circuitBreaker.test.ts","lineStart":8,"lineEnd":15,"title":"Critical dependency chain risk: 4 files","reason":"Potentially high-change surface: src/__tests__/unit/circuitBreaker.test.ts -> src/utils/circuitBreaker.ts -> src/index.ts -> src/utils/responseBuilder.ts (181 weight).","files":["src/__tests__/unit/circuitBreaker.test.ts","src/utils/circuitBreaker.ts","src/index.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Break chain at `src/utils/circuitBreaker.ts` (fan-out: 3, fan-in: 4).","steps":["Extract interface from `src/utils/circuitBreaker.ts` — it has 3 outbound dependencies.","Downstream modules depend on the interface, not the implementation.","This splits the chain into two independent segments."]},"impact":"Critical refactor opportunities; shorter chains reduce blast radius of change.","tags":["change-risk","dependency","blast-radius"],"ruleId":"graph.dependency-critical-path","analysisLens":"graph","confidence":"high","evidence":{"category":"dependency-critical-path","location":"src/__tests__/unit/circuitBreaker.test.ts:8-15"},"correlatedSignals":["critical-path-context"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0008","severity":"critical","category":"untested-critical-code","file":"src/validation/schemas.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/validation/schemas.ts","reason":"High-risk file has no test imports. fan-in=1, fan-out=1, complexity=37 (risk score: 81).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"high","evidence":{"category":"untested-critical-code","location":"src/validation/schemas.ts:1-1"},"correlatedSignals":["hot-file","paired:feature-envy","paired:god-module","paired:semantic-dead-export"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0009","severity":"high","category":"await-in-loop","file":"src/server-init.ts","lineStart":94,"lineEnd":94,"title":"await inside loop — sequential async execution","reason":"Each await runs serially. For N iterations this takes N * latency instead of max(latency). Use Promise.all() or Promise.allSettled() for parallel execution.","files":["src/server-init.ts"],"suggestedFix":{"strategy":"Collect promises and await them in parallel with Promise.all().","steps":["Collect all async operations into an array of promises.","Use await Promise.all(promises) or Promise.allSettled(promises).","If order matters or rate limiting is needed, use a batching utility."]},"impact":"Sequential awaits multiply latency by N iterations — parallelizing can reduce total time to max(single-latency).","tags":["performance","async","n-plus-one"],"lspHints":[{"tool":"lspGotoDefinition","symbolName":"await","lineHint":94,"file":"src/server-init.ts","expectedResult":"navigate to the awaited call to check if parallelization is safe"}],"ruleId":"ast.await-in-loop","analysisLens":"ast","confidence":"low","evidence":{"category":"await-in-loop","location":"src/server-init.ts:94-94"},"correlatedSignals":["top-level-effects","paired:unreachable-module","paired:untested-critical-code","paired:dead-file","paired:empty-catch","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"navigate to the awaited call to check if parallelization is safe","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0010","severity":"high","category":"await-in-loop","file":"src/server-init.ts","lineStart":104,"lineEnd":104,"title":"await inside loop — sequential async execution","reason":"Each await runs serially. For N iterations this takes N * latency instead of max(latency). Use Promise.all() or Promise.allSettled() for parallel execution.","files":["src/server-init.ts"],"suggestedFix":{"strategy":"Collect promises and await them in parallel with Promise.all().","steps":["Collect all async operations into an array of promises.","Use await Promise.all(promises) or Promise.allSettled(promises).","If order matters or rate limiting is needed, use a batching utility."]},"impact":"Sequential awaits multiply latency by N iterations — parallelizing can reduce total time to max(single-latency).","tags":["performance","async","n-plus-one"],"lspHints":[{"tool":"lspGotoDefinition","symbolName":"await","lineHint":104,"file":"src/server-init.ts","expectedResult":"navigate to the awaited call to check if parallelization is safe"}],"ruleId":"ast.await-in-loop","analysisLens":"ast","confidence":"low","evidence":{"category":"await-in-loop","location":"src/server-init.ts:104-104"},"correlatedSignals":["top-level-effects","paired:unreachable-module","paired:untested-critical-code","paired:dead-file","paired:empty-catch","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"navigate to the awaited call to check if parallelization is safe","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0011","severity":"high","category":"await-in-loop","file":"src/utils/retry.ts","lineStart":113,"lineEnd":113,"title":"await inside loop — sequential async execution","reason":"Each await runs serially. For N iterations this takes N * latency instead of max(latency). Use Promise.all() or Promise.allSettled() for parallel execution.","files":["src/utils/retry.ts"],"suggestedFix":{"strategy":"Collect promises and await them in parallel with Promise.all().","steps":["Collect all async operations into an array of promises.","Use await Promise.all(promises) or Promise.allSettled(promises).","If order matters or rate limiting is needed, use a batching utility."]},"impact":"Sequential awaits multiply latency by N iterations — parallelizing can reduce total time to max(single-latency).","tags":["performance","async","n-plus-one"],"lspHints":[{"tool":"lspGotoDefinition","symbolName":"await","lineHint":113,"file":"src/utils/retry.ts","expectedResult":"navigate to the awaited call to check if parallelization is safe"}],"ruleId":"ast.await-in-loop","analysisLens":"ast","confidence":"low","evidence":{"category":"await-in-loop","location":"src/utils/retry.ts:113-113"},"correlatedSignals":["hot-file","paired:dead-export","paired:feature-envy","paired:semantic-dead-export"],"recommendedValidation":{"summary":"navigate to the awaited call to check if parallelization is safe","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0012","severity":"high","category":"await-in-loop","file":"src/utils/retry.ts","lineStart":128,"lineEnd":128,"title":"await inside loop — sequential async execution","reason":"Each await runs serially. For N iterations this takes N * latency instead of max(latency). Use Promise.all() or Promise.allSettled() for parallel execution.","files":["src/utils/retry.ts"],"suggestedFix":{"strategy":"Collect promises and await them in parallel with Promise.all().","steps":["Collect all async operations into an array of promises.","Use await Promise.all(promises) or Promise.allSettled(promises).","If order matters or rate limiting is needed, use a batching utility."]},"impact":"Sequential awaits multiply latency by N iterations — parallelizing can reduce total time to max(single-latency).","tags":["performance","async","n-plus-one"],"lspHints":[{"tool":"lspGotoDefinition","symbolName":"await","lineHint":128,"file":"src/utils/retry.ts","expectedResult":"navigate to the awaited call to check if parallelization is safe"}],"ruleId":"ast.await-in-loop","analysisLens":"ast","confidence":"low","evidence":{"category":"await-in-loop","location":"src/utils/retry.ts:128-128"},"correlatedSignals":["hot-file","paired:dead-export","paired:feature-envy","paired:semantic-dead-export"],"recommendedValidation":{"summary":"navigate to the awaited call to check if parallelization is safe","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0013","severity":"high","category":"barrel-explosion","file":"src/index.ts","lineStart":1,"lineEnd":1,"title":"Barrel explosion: src/index.ts","reason":"Barrel re-exports 77 symbols (threshold: 30). Large barrels hurt bundling.","files":["src/index.ts"],"suggestedFix":{"strategy":"Split barrel or use direct imports to reduce bundler cost.","steps":["Group re-exports by domain into sub-barrels.","Let consumers import directly from source modules.","Remove unused re-exports (check dead-re-export findings)."]},"impact":"Reduces bundle size and speeds up IDE/tooling.","tags":["barrel","bundle-size","tree-shaking"],"ruleId":"ast.barrel-explosion","analysisLens":"ast","confidence":"low","evidence":{"category":"barrel-explosion","location":"src/index.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:untested-critical-code","paired:dead-re-export"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0014","severity":"high","category":"cognitive-complexity","file":"src/routes/lsp.ts","lineStart":97,"lineEnd":146,"title":"High cognitive complexity: extractLocations (36)","reason":"Function cognitive complexity is 36 (threshold: 15). Nested branches compound reading difficulty.","files":["src/routes/lsp.ts:97-146"],"suggestedFix":{"strategy":"Reduce nesting and simplify control flow.","steps":["Convert nested branches into early returns / guard clauses.","Extract deeply nested blocks into named helper functions.","Replace complex boolean chains with named predicates."]},"impact":"Lower cognitive complexity directly correlates with fewer bugs and faster code reviews.","tags":["complexity","readability","nesting"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"extractLocations","lineHint":97,"file":"src/routes/lsp.ts","expectedResult":"understand call graph before simplifying extractLocations"}],"ruleId":"ast.cognitive-complexity","analysisLens":"ast","confidence":"low","evidence":{"category":"cognitive-complexity","location":"src/routes/lsp.ts:97-146"},"correlatedSignals":["hot-file","critical-path-context","paired:unreachable-module","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"understand call graph before simplifying extractLocations","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0015","severity":"high","category":"cognitive-complexity","file":"src/routes/package.ts","lineStart":51,"lineEnd":110,"title":"High cognitive complexity: extractPackages (33)","reason":"Function cognitive complexity is 33 (threshold: 15). Nested branches compound reading difficulty.","files":["src/routes/package.ts:51-110"],"suggestedFix":{"strategy":"Reduce nesting and simplify control flow.","steps":["Convert nested branches into early returns / guard clauses.","Extract deeply nested blocks into named helper functions.","Replace complex boolean chains with named predicates."]},"impact":"Lower cognitive complexity directly correlates with fewer bugs and faster code reviews.","tags":["complexity","readability","nesting"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"extractPackages","lineHint":51,"file":"src/routes/package.ts","expectedResult":"understand call graph before simplifying extractPackages"}],"ruleId":"ast.cognitive-complexity","analysisLens":"ast","confidence":"low","evidence":{"category":"cognitive-complexity","location":"src/routes/package.ts:51-110"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:unreachable-module","paired:unvalidated-input-sink","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"understand call graph before simplifying extractPackages","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0016","severity":"high","category":"cognitive-complexity","file":"src/utils/responseParser.ts","lineStart":96,"lineEnd":173,"title":"High cognitive complexity: parseToolResponse (29)","reason":"Function cognitive complexity is 29 (threshold: 15). Nested branches compound reading difficulty.","files":["src/utils/responseParser.ts:96-173"],"suggestedFix":{"strategy":"Reduce nesting and simplify control flow.","steps":["Convert nested branches into early returns / guard clauses.","Extract deeply nested blocks into named helper functions.","Replace complex boolean chains with named predicates."]},"impact":"Lower cognitive complexity directly correlates with fewer bugs and faster code reviews.","tags":["complexity","readability","nesting"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"parseToolResponse","lineHint":96,"file":"src/utils/responseParser.ts","expectedResult":"understand call graph before simplifying parseToolResponse"}],"ruleId":"ast.cognitive-complexity","analysisLens":"ast","confidence":"low","evidence":{"category":"cognitive-complexity","location":"src/utils/responseParser.ts:96-173"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"understand call graph before simplifying parseToolResponse","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0017","severity":"high","category":"cognitive-complexity","file":"src/utils/responseParser.ts","lineStart":195,"lineEnd":272,"title":"High cognitive complexity: parseToolResponseBulk (30)","reason":"Function cognitive complexity is 30 (threshold: 15). Nested branches compound reading difficulty.","files":["src/utils/responseParser.ts:195-272"],"suggestedFix":{"strategy":"Reduce nesting and simplify control flow.","steps":["Convert nested branches into early returns / guard clauses.","Extract deeply nested blocks into named helper functions.","Replace complex boolean chains with named predicates."]},"impact":"Lower cognitive complexity directly correlates with fewer bugs and faster code reviews.","tags":["complexity","readability","nesting"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"parseToolResponseBulk","lineHint":195,"file":"src/utils/responseParser.ts","expectedResult":"understand call graph before simplifying parseToolResponseBulk"}],"ruleId":"ast.cognitive-complexity","analysisLens":"ast","confidence":"low","evidence":{"category":"cognitive-complexity","location":"src/utils/responseParser.ts:195-272"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"understand call graph before simplifying parseToolResponseBulk","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0018","severity":"high","category":"dead-export","file":"src/middleware/queryParser.ts","lineStart":94,"lineEnd":112,"title":"Unused export: sendToolResult","reason":"Exported symbol \"sendToolResult\" has no observed import or re-export usage in production or test files.","files":["src/middleware/queryParser.ts:94-112"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"sendToolResult","lineHint":94,"file":"src/middleware/queryParser.ts","expectedResult":"confirm \"sendToolResult\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/middleware/queryParser.ts:94-112"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:cognitive-complexity","paired:input-passthrough-risk","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"confirm \"sendToolResult\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0019","severity":"high","category":"dead-export","file":"src/types/errorGuards.ts","lineStart":44,"lineEnd":51,"title":"Unused export: isErrorWithStatus","reason":"Exported symbol \"isErrorWithStatus\" has no observed import or re-export usage in production or test files.","files":["src/types/errorGuards.ts:44-51"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isErrorWithStatus","lineHint":44,"file":"src/types/errorGuards.ts","expectedResult":"confirm \"isErrorWithStatus\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/errorGuards.ts:44-51"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"isErrorWithStatus\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0020","severity":"high","category":"dead-export","file":"src/types/errorGuards.ts","lineStart":56,"lineEnd":63,"title":"Unused export: isErrorWithCode","reason":"Exported symbol \"isErrorWithCode\" has no observed import or re-export usage in production or test files.","files":["src/types/errorGuards.ts:56-63"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isErrorWithCode","lineHint":56,"file":"src/types/errorGuards.ts","expectedResult":"confirm \"isErrorWithCode\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/errorGuards.ts:56-63"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"isErrorWithCode\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0021","severity":"high","category":"dead-export","file":"src/types/errorGuards.ts","lineStart":68,"lineEnd":75,"title":"Unused export: hasMessage","reason":"Exported symbol \"hasMessage\" has no observed import or re-export usage in production or test files.","files":["src/types/errorGuards.ts:68-75"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"hasMessage","lineHint":68,"file":"src/types/errorGuards.ts","expectedResult":"confirm \"hasMessage\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/errorGuards.ts:68-75"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"hasMessage\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0022","severity":"high","category":"dead-export","file":"src/types/errorGuards.ts","lineStart":80,"lineEnd":88,"title":"Unused export: hasHeaders","reason":"Exported symbol \"hasHeaders\" has no observed import or re-export usage in production or test files.","files":["src/types/errorGuards.ts:80-88"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"hasHeaders","lineHint":80,"file":"src/types/errorGuards.ts","expectedResult":"confirm \"hasHeaders\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/errorGuards.ts:80-88"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"hasHeaders\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0023","severity":"high","category":"dead-export","file":"src/types/errorGuards.ts","lineStart":104,"lineEnd":106,"title":"Unused export: getErrorCode","reason":"Exported symbol \"getErrorCode\" has no observed import or re-export usage in production or test files.","files":["src/types/errorGuards.ts:104-106"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getErrorCode","lineHint":104,"file":"src/types/errorGuards.ts","expectedResult":"confirm \"getErrorCode\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/errorGuards.ts:104-106"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"getErrorCode\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0024","severity":"high","category":"dead-export","file":"src/types/errorGuards.ts","lineStart":111,"lineEnd":113,"title":"Unused export: getErrorMessage","reason":"Exported symbol \"getErrorMessage\" has no observed import or re-export usage in production or test files.","files":["src/types/errorGuards.ts:111-113"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getErrorMessage","lineHint":111,"file":"src/types/errorGuards.ts","expectedResult":"confirm \"getErrorMessage\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/errorGuards.ts:111-113"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"getErrorMessage\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0025","severity":"high","category":"dead-export","file":"src/types/guards.ts","lineStart":11,"lineEnd":13,"title":"Unused export: isNonEmptyString","reason":"Exported symbol \"isNonEmptyString\" has no observed import or re-export usage in production or test files.","files":["src/types/guards.ts:11-13"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isNonEmptyString","lineHint":11,"file":"src/types/guards.ts","expectedResult":"confirm \"isNonEmptyString\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/guards.ts:11-13"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"confirm \"isNonEmptyString\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0026","severity":"high","category":"dead-export","file":"src/types/guards.ts","lineStart":18,"lineEnd":20,"title":"Unused export: isPositiveNumber","reason":"Exported symbol \"isPositiveNumber\" has no observed import or re-export usage in production or test files.","files":["src/types/guards.ts:18-20"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isPositiveNumber","lineHint":18,"file":"src/types/guards.ts","expectedResult":"confirm \"isPositiveNumber\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/guards.ts:18-20"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"confirm \"isPositiveNumber\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0027","severity":"high","category":"dead-export","file":"src/types/guards.ts","lineStart":25,"lineEnd":27,"title":"Unused export: isNonNegativeNumber","reason":"Exported symbol \"isNonNegativeNumber\" has no observed import or re-export usage in production or test files.","files":["src/types/guards.ts:25-27"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isNonNegativeNumber","lineHint":25,"file":"src/types/guards.ts","expectedResult":"confirm \"isNonNegativeNumber\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/guards.ts:25-27"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"confirm \"isNonNegativeNumber\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0028","severity":"high","category":"dead-export","file":"src/types/guards.ts","lineStart":32,"lineEnd":34,"title":"Unused export: isStringArray","reason":"Exported symbol \"isStringArray\" has no observed import or re-export usage in production or test files.","files":["src/types/guards.ts:32-34"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isStringArray","lineHint":32,"file":"src/types/guards.ts","expectedResult":"confirm \"isStringArray\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/guards.ts:32-34"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"confirm \"isStringArray\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0029","severity":"high","category":"dead-export","file":"src/types/responses.ts","lineStart":150,"lineEnd":157,"title":"Unused export: isSearchResult","reason":"Exported symbol \"isSearchResult\" has no observed import or re-export usage in production or test files.","files":["src/types/responses.ts:150-157"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isSearchResult","lineHint":150,"file":"src/types/responses.ts","expectedResult":"confirm \"isSearchResult\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/responses.ts:150-157"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"isSearchResult\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0030","severity":"high","category":"dead-export","file":"src/types/responses.ts","lineStart":162,"lineEnd":170,"title":"Unused export: isLspDefinition","reason":"Exported symbol \"isLspDefinition\" has no observed import or re-export usage in production or test files.","files":["src/types/responses.ts:162-170"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isLspDefinition","lineHint":162,"file":"src/types/responses.ts","expectedResult":"confirm \"isLspDefinition\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/responses.ts:162-170"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"isLspDefinition\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0031","severity":"high","category":"dead-export","file":"src/types/toolTypes.ts","lineStart":29,"lineEnd":33,"title":"Unused export: toQueryParams","reason":"Exported symbol \"toQueryParams\" has no observed import or re-export usage in production or test files.","files":["src/types/toolTypes.ts:29-33"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"toQueryParams","lineHint":29,"file":"src/types/toolTypes.ts","expectedResult":"confirm \"toQueryParams\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/toolTypes.ts:29-33"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"toQueryParams\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0032","severity":"high","category":"dead-export","file":"src/utils/circuitBreaker.ts","lineStart":467,"lineEnd":474,"title":"Unused export: clearCircuit","reason":"Exported symbol \"clearCircuit\" has no observed import or re-export usage in production or test files.","files":["src/utils/circuitBreaker.ts:467-474"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"clearCircuit","lineHint":467,"file":"src/utils/circuitBreaker.ts","expectedResult":"confirm \"clearCircuit\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/circuitBreaker.ts:467-474"},"correlatedSignals":["hot-file","critical-path-context","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"clearCircuit\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0033","severity":"high","category":"dead-export","file":"src/utils/circuitBreaker.ts","lineStart":490,"lineEnd":492,"title":"Unused export: getCircuitCount","reason":"Exported symbol \"getCircuitCount\" has no observed import or re-export usage in production or test files.","files":["src/utils/circuitBreaker.ts:490-492"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getCircuitCount","lineHint":490,"file":"src/utils/circuitBreaker.ts","expectedResult":"confirm \"getCircuitCount\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/circuitBreaker.ts:490-492"},"correlatedSignals":["hot-file","critical-path-context","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"getCircuitCount\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0034","severity":"high","category":"dead-export","file":"src/utils/logEmoji.ts","lineStart":20,"lineEnd":25,"title":"Unused export: shouldUseEmoji","reason":"Exported symbol \"shouldUseEmoji\" has no observed import or re-export usage in production or test files.","files":["src/utils/logEmoji.ts:20-25"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"shouldUseEmoji","lineHint":20,"file":"src/utils/logEmoji.ts","expectedResult":"confirm \"shouldUseEmoji\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logEmoji.ts:20-25"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"shouldUseEmoji\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0035","severity":"high","category":"dead-export","file":"src/utils/logEmoji.ts","lineStart":82,"lineEnd":85,"title":"Unused export: getLogEmoji","reason":"Exported symbol \"getLogEmoji\" has no observed import or re-export usage in production or test files.","files":["src/utils/logEmoji.ts:82-85"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getLogEmoji","lineHint":82,"file":"src/utils/logEmoji.ts","expectedResult":"confirm \"getLogEmoji\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logEmoji.ts:82-85"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"getLogEmoji\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0036","severity":"high","category":"dead-export","file":"src/utils/logEmoji.ts","lineStart":101,"lineEnd":103,"title":"Unused export: prefixLog","reason":"Exported symbol \"prefixLog\" has no observed import or re-export usage in production or test files.","files":["src/utils/logEmoji.ts:101-103"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"prefixLog","lineHint":101,"file":"src/utils/logEmoji.ts","expectedResult":"confirm \"prefixLog\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logEmoji.ts:101-103"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"prefixLog\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0037","severity":"high","category":"dead-export","file":"src/utils/logger.ts","lineStart":285,"lineEnd":302,"title":"Unused export: logToolSuccess","reason":"Exported symbol \"logToolSuccess\" has no observed import or re-export usage in production or test files.","files":["src/utils/logger.ts:285-302"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"logToolSuccess","lineHint":285,"file":"src/utils/logger.ts","expectedResult":"confirm \"logToolSuccess\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logger.ts:285-302"},"correlatedSignals":["hot-file","critical-path-context","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"confirm \"logToolSuccess\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0038","severity":"high","category":"dead-export","file":"src/utils/logger.ts","lineStart":307,"lineEnd":324,"title":"Unused export: logToolError","reason":"Exported symbol \"logToolError\" has no observed import or re-export usage in production or test files.","files":["src/utils/logger.ts:307-324"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"logToolError","lineHint":307,"file":"src/utils/logger.ts","expectedResult":"confirm \"logToolError\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logger.ts:307-324"},"correlatedSignals":["hot-file","critical-path-context","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"confirm \"logToolError\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0039","severity":"high","category":"dead-export","file":"src/utils/logger.ts","lineStart":340,"lineEnd":342,"title":"Unused export: getErrorLogPath","reason":"Exported symbol \"getErrorLogPath\" has no observed import or re-export usage in production or test files.","files":["src/utils/logger.ts:340-342"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getErrorLogPath","lineHint":340,"file":"src/utils/logger.ts","expectedResult":"confirm \"getErrorLogPath\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logger.ts:340-342"},"correlatedSignals":["hot-file","critical-path-context","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"confirm \"getErrorLogPath\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0040","severity":"high","category":"dead-export","file":"src/utils/logger.ts","lineStart":347,"lineEnd":349,"title":"Unused export: getToolsLogPath","reason":"Exported symbol \"getToolsLogPath\" has no observed import or re-export usage in production or test files.","files":["src/utils/logger.ts:347-349"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getToolsLogPath","lineHint":347,"file":"src/utils/logger.ts","expectedResult":"confirm \"getToolsLogPath\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logger.ts:347-349"},"correlatedSignals":["hot-file","critical-path-context","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"confirm \"getToolsLogPath\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0041","severity":"high","category":"dead-export","file":"src/utils/logger.ts","lineStart":367,"lineEnd":392,"title":"Unused export: createToolLogger","reason":"Exported symbol \"createToolLogger\" has no observed import or re-export usage in production or test files.","files":["src/utils/logger.ts:367-392"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"createToolLogger","lineHint":367,"file":"src/utils/logger.ts","expectedResult":"confirm \"createToolLogger\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logger.ts:367-392"},"correlatedSignals":["hot-file","critical-path-context","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"confirm \"createToolLogger\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0042","severity":"high","category":"dead-export","file":"src/utils/responseFactory.ts","lineStart":19,"lineEnd":21,"title":"Unused export: extractFileMatches","reason":"Exported symbol \"extractFileMatches\" has no observed import or re-export usage in production or test files.","files":["src/utils/responseFactory.ts:19-21"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractFileMatches","lineHint":19,"file":"src/utils/responseFactory.ts","expectedResult":"confirm \"extractFileMatches\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/responseFactory.ts:19-21"},"correlatedSignals":["hot-file","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"confirm \"extractFileMatches\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0043","severity":"high","category":"dead-export","file":"src/utils/responseFactory.ts","lineStart":26,"lineEnd":28,"title":"Unused export: extractPaginationInfo","reason":"Exported symbol \"extractPaginationInfo\" has no observed import or re-export usage in production or test files.","files":["src/utils/responseFactory.ts:26-28"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractPaginationInfo","lineHint":26,"file":"src/utils/responseFactory.ts","expectedResult":"confirm \"extractPaginationInfo\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/responseFactory.ts:26-28"},"correlatedSignals":["hot-file","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"confirm \"extractPaginationInfo\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0044","severity":"high","category":"dead-export","file":"src/utils/responseFactory.ts","lineStart":33,"lineEnd":35,"title":"Unused export: extractMatchCount","reason":"Exported symbol \"extractMatchCount\" has no observed import or re-export usage in production or test files.","files":["src/utils/responseFactory.ts:33-35"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractMatchCount","lineHint":33,"file":"src/utils/responseFactory.ts","expectedResult":"confirm \"extractMatchCount\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/responseFactory.ts:33-35"},"correlatedSignals":["hot-file","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"confirm \"extractMatchCount\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0045","severity":"high","category":"dead-export","file":"src/utils/responseParser.ts","lineStart":178,"lineEnd":186,"title":"Unused export: getDataField","reason":"Exported symbol \"getDataField\" has no observed import or re-export usage in production or test files.","files":["src/utils/responseParser.ts:178-186"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getDataField","lineHint":178,"file":"src/utils/responseParser.ts","expectedResult":"confirm \"getDataField\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/responseParser.ts:178-186"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"getDataField\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0046","severity":"high","category":"dead-export","file":"src/utils/retry.ts","lineStart":139,"lineEnd":145,"title":"Unused export: withCategoryRetry","reason":"Exported symbol \"withCategoryRetry\" has no observed import or re-export usage in production or test files.","files":["src/utils/retry.ts:139-145"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"withCategoryRetry","lineHint":139,"file":"src/utils/retry.ts","expectedResult":"confirm \"withCategoryRetry\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/retry.ts:139-145"},"correlatedSignals":["hot-file","paired:await-in-loop","paired:feature-envy","paired:semantic-dead-export"],"recommendedValidation":{"summary":"confirm \"withCategoryRetry\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0047","severity":"high","category":"dead-export","file":"src/utils/retry.ts","lineStart":232,"lineEnd":240,"title":"Unused export: isSymbolNotFound","reason":"Exported symbol \"isSymbolNotFound\" has no observed import or re-export usage in production or test files.","files":["src/utils/retry.ts:232-240"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isSymbolNotFound","lineHint":232,"file":"src/utils/retry.ts","expectedResult":"confirm \"isSymbolNotFound\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/retry.ts:232-240"},"correlatedSignals":["hot-file","paired:await-in-loop","paired:feature-envy","paired:semantic-dead-export"],"recommendedValidation":{"summary":"confirm \"isSymbolNotFound\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0048","severity":"high","category":"dead-export","file":"src/utils/retry.ts","lineStart":252,"lineEnd":266,"title":"Unused export: getRetryAfter","reason":"Exported symbol \"getRetryAfter\" has no observed import or re-export usage in production or test files.","files":["src/utils/retry.ts:252-266"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getRetryAfter","lineHint":252,"file":"src/utils/retry.ts","expectedResult":"confirm \"getRetryAfter\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/retry.ts:252-266"},"correlatedSignals":["hot-file","paired:await-in-loop","paired:feature-envy","paired:semantic-dead-export"],"recommendedValidation":{"summary":"confirm \"getRetryAfter\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0049","severity":"high","category":"dead-export","file":"src/utils/retry.ts","lineStart":271,"lineEnd":280,"title":"Unused export: isRecoverable","reason":"Exported symbol \"isRecoverable\" has no observed import or re-export usage in production or test files.","files":["src/utils/retry.ts:271-280"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isRecoverable","lineHint":271,"file":"src/utils/retry.ts","expectedResult":"confirm \"isRecoverable\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/retry.ts:271-280"},"correlatedSignals":["hot-file","paired:await-in-loop","paired:feature-envy","paired:semantic-dead-export"],"recommendedValidation":{"summary":"confirm \"isRecoverable\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0050","severity":"high","category":"dead-export","file":"src/validation/toolCallSchema.ts","lineStart":38,"lineEnd":43,"title":"Unused export: toolCallBodySchema","reason":"Exported symbol \"toolCallBodySchema\" has no observed import or re-export usage in production or test files.","files":["src/validation/toolCallSchema.ts:38-43"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"toolCallBodySchema","lineHint":38,"file":"src/validation/toolCallSchema.ts","expectedResult":"confirm \"toolCallBodySchema\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/validation/toolCallSchema.ts:38-43"},"correlatedSignals":["paired:input-passthrough-risk","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"toolCallBodySchema\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0051","severity":"high","category":"distance-from-main-sequence","file":"src/mcpCache.ts","lineStart":1,"lineEnd":1,"title":"Distance from Main Sequence: src/mcpCache.ts (D=1.00)","reason":"Zone of Pain (concrete + stable): hard to extend, painful to change. A=0.00, I=0.00, D=1.00 (threshold: 0.7).","files":["src/mcpCache.ts"],"suggestedFix":{"strategy":"Add abstractions (interfaces/types) or reduce inbound coupling.","steps":["Extract interfaces for key behaviors to increase abstractness.","Consider splitting into abstract contracts + concrete implementations.","Reduce inbound coupling by narrowing the public API surface."]},"impact":"Modules on the Main Sequence (D≈0) have optimal balance between stability and extensibility.","tags":["architecture","stability","abstractness","sdp"],"ruleId":"ast.distance-from-main-sequence","analysisLens":"ast","confidence":"low","evidence":{"category":"distance-from-main-sequence","location":"src/mcpCache.ts:1-1"},"correlatedSignals":["paired:low-cohesion","paired:missing-error-boundary","paired:promise-misuse","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0052","severity":"high","category":"distance-from-main-sequence","file":"src/types/guards.ts","lineStart":1,"lineEnd":1,"title":"Distance from Main Sequence: src/types/guards.ts (D=1.00)","reason":"Zone of Pain (concrete + stable): hard to extend, painful to change. A=0.00, I=0.00, D=1.00 (threshold: 0.7).","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Add abstractions (interfaces/types) or reduce inbound coupling.","steps":["Extract interfaces for key behaviors to increase abstractness.","Consider splitting into abstract contracts + concrete implementations.","Reduce inbound coupling by narrowing the public API surface."]},"impact":"Modules on the Main Sequence (D≈0) have optimal balance between stability and extensibility.","tags":["architecture","stability","abstractness","sdp"],"ruleId":"ast.distance-from-main-sequence","analysisLens":"ast","confidence":"low","evidence":{"category":"distance-from-main-sequence","location":"src/types/guards.ts:1-1"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0053","severity":"high","category":"distance-from-main-sequence","file":"src/utils/asyncTimeout.ts","lineStart":1,"lineEnd":1,"title":"Distance from Main Sequence: src/utils/asyncTimeout.ts (D=0.88)","reason":"Zone of Pain (concrete + stable): hard to extend, painful to change. A=0.00, I=0.13, D=0.88 (threshold: 0.7).","files":["src/utils/asyncTimeout.ts"],"suggestedFix":{"strategy":"Add abstractions (interfaces/types) or reduce inbound coupling.","steps":["Extract interfaces for key behaviors to increase abstractness.","Consider splitting into abstract contracts + concrete implementations.","Reduce inbound coupling by narrowing the public API surface."]},"impact":"Modules on the Main Sequence (D≈0) have optimal balance between stability and extensibility.","tags":["architecture","stability","abstractness","sdp"],"ruleId":"ast.distance-from-main-sequence","analysisLens":"ast","confidence":"low","evidence":{"category":"distance-from-main-sequence","location":"src/utils/asyncTimeout.ts:1-1"},"correlatedSignals":["hot-file","paired:listener-leak-risk","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0054","severity":"high","category":"distance-from-main-sequence","file":"src/utils/colors.ts","lineStart":1,"lineEnd":1,"title":"Distance from Main Sequence: src/utils/colors.ts (D=1.00)","reason":"Zone of Pain (concrete + stable): hard to extend, painful to change. A=0.00, I=0.00, D=1.00 (threshold: 0.7).","files":["src/utils/colors.ts"],"suggestedFix":{"strategy":"Add abstractions (interfaces/types) or reduce inbound coupling.","steps":["Extract interfaces for key behaviors to increase abstractness.","Consider splitting into abstract contracts + concrete implementations.","Reduce inbound coupling by narrowing the public API surface."]},"impact":"Modules on the Main Sequence (D≈0) have optimal balance between stability and extensibility.","tags":["architecture","stability","abstractness","sdp"],"ruleId":"ast.distance-from-main-sequence","analysisLens":"ast","confidence":"low","evidence":{"category":"distance-from-main-sequence","location":"src/utils/colors.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0055","severity":"high","category":"distance-from-main-sequence","file":"src/utils/errorQueue.ts","lineStart":1,"lineEnd":1,"title":"Distance from Main Sequence: src/utils/errorQueue.ts (D=1.00)","reason":"Zone of Pain (concrete + stable): hard to extend, painful to change. A=0.00, I=0.00, D=1.00 (threshold: 0.7).","files":["src/utils/errorQueue.ts"],"suggestedFix":{"strategy":"Add abstractions (interfaces/types) or reduce inbound coupling.","steps":["Extract interfaces for key behaviors to increase abstractness.","Consider splitting into abstract contracts + concrete implementations.","Reduce inbound coupling by narrowing the public API surface."]},"impact":"Modules on the Main Sequence (D≈0) have optimal balance between stability and extensibility.","tags":["architecture","stability","abstractness","sdp"],"ruleId":"ast.distance-from-main-sequence","analysisLens":"ast","confidence":"low","evidence":{"category":"distance-from-main-sequence","location":"src/utils/errorQueue.ts:1-1"},"correlatedSignals":["paired:over-abstraction"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0056","severity":"high","category":"distance-from-main-sequence","file":"src/utils/responseBuilder.ts","lineStart":1,"lineEnd":1,"title":"Distance from Main Sequence: src/utils/responseBuilder.ts (D=1.00)","reason":"Zone of Pain (concrete + stable): hard to extend, painful to change. A=0.00, I=0.00, D=1.00 (threshold: 0.7).","files":["src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Add abstractions (interfaces/types) or reduce inbound coupling.","steps":["Extract interfaces for key behaviors to increase abstractness.","Consider splitting into abstract contracts + concrete implementations.","Reduce inbound coupling by narrowing the public API surface."]},"impact":"Modules on the Main Sequence (D≈0) have optimal balance between stability and extensibility.","tags":["architecture","stability","abstractness","sdp"],"ruleId":"ast.distance-from-main-sequence","analysisLens":"ast","confidence":"low","evidence":{"category":"distance-from-main-sequence","location":"src/utils/responseBuilder.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:similar-function-body","paired:cognitive-complexity","paired:over-abstraction"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0057","severity":"high","category":"distance-from-main-sequence","file":"src/validation/httpPreprocess.ts","lineStart":1,"lineEnd":1,"title":"Distance from Main Sequence: src/validation/httpPreprocess.ts (D=1.00)","reason":"Zone of Pain (concrete + stable): hard to extend, painful to change. A=0.00, I=0.00, D=1.00 (threshold: 0.7).","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Add abstractions (interfaces/types) or reduce inbound coupling.","steps":["Extract interfaces for key behaviors to increase abstractness.","Consider splitting into abstract contracts + concrete implementations.","Reduce inbound coupling by narrowing the public API surface."]},"impact":"Modules on the Main Sequence (D≈0) have optimal balance between stability and extensibility.","tags":["architecture","stability","abstractness","sdp"],"ruleId":"ast.distance-from-main-sequence","analysisLens":"ast","confidence":"low","evidence":{"category":"distance-from-main-sequence","location":"src/validation/httpPreprocess.ts:1-1"},"correlatedSignals":["hot-file","paired:semantic-dead-export","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0058","severity":"high","category":"export-star-leak","file":"src/validation/index.ts","lineStart":1,"lineEnd":1,"title":"export * leaks entire module surface: ./schemas.js","reason":"`export * from './schemas.js'` re-exports every symbol from the source, defeating granular tree-shaking. Target exports 39 symbols.","files":["src/validation/index.ts:1-1"],"suggestedFix":{"strategy":"Replace export * with explicit named re-exports.","steps":["List the symbols actually consumed from `./schemas.js` by downstream modules.","Replace `export * from './schemas.js'` with `export { A, B, C } from './schemas.js'`.","This lets bundlers eliminate unused re-exports during tree-shaking."]},"impact":"Explicit re-exports enable precise tree-shaking and make the public API surface visible.","tags":["tree-shaking","bundle-size","export-star","api-surface"],"ruleId":"ast.export-star-leak","analysisLens":"ast","confidence":"low","evidence":{"category":"export-star-leak","location":"src/validation/index.ts:1-1"},"correlatedSignals":["paired:architecture-sdp-violation","paired:re-export-duplication"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0059","severity":"high","category":"feature-envy","file":"src/utils/retry.ts","lineStart":7,"lineEnd":13,"title":"Feature envy: src/utils/retry.ts → src/types/errorGuards.ts","reason":"Module imports 5/5 symbols (100%) from \"src/types/errorGuards.ts\". This suggests the logic may belong in or closer to the target module.","files":["src/utils/retry.ts","src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move dependent logic to the target module or extract a shared module.","steps":["Identify which functions/logic in this file use the imported symbols.","Move that logic to the target module if it belongs there.","If shared, extract a dedicated module that both can import from.","Reduce the import surface by passing data instead of importing behaviors."]},"impact":"Misplaced logic increases coupling and makes changes ripple across module boundaries.","tags":["coupling","responsibility","misplaced-logic"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"retry.ts","lineHint":7,"file":"src/utils/retry.ts","expectedResult":"trace which functions use imports from src/types/errorGuards.ts to decide what to move"},{"tool":"lspGotoDefinition","symbolName":"errorGuards.ts","lineHint":7,"file":"src/utils/retry.ts","expectedResult":"inspect target module to evaluate if logic belongs there"}],"ruleId":"hybrid.feature-envy","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"feature-envy","location":"src/utils/retry.ts:7-13"},"correlatedSignals":["hot-file","paired:await-in-loop","paired:dead-export","paired:semantic-dead-export"],"recommendedValidation":{"summary":"trace which functions use imports from src/types/errorGuards.ts to decide what to move","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0060","severity":"high","category":"feature-envy","file":"src/validation/schemas.ts","lineStart":38,"lineEnd":46,"title":"Feature envy: src/validation/schemas.ts → src/validation/httpPreprocess.ts","reason":"Module imports 7/7 symbols (100%) from \"src/validation/httpPreprocess.ts\". This suggests the logic may belong in or closer to the target module.","files":["src/validation/schemas.ts","src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Move dependent logic to the target module or extract a shared module.","steps":["Identify which functions/logic in this file use the imported symbols.","Move that logic to the target module if it belongs there.","If shared, extract a dedicated module that both can import from.","Reduce the import surface by passing data instead of importing behaviors."]},"impact":"Misplaced logic increases coupling and makes changes ripple across module boundaries.","tags":["coupling","responsibility","misplaced-logic"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"schemas.ts","lineHint":38,"file":"src/validation/schemas.ts","expectedResult":"trace which functions use imports from src/validation/httpPreprocess.ts to decide what to move"},{"tool":"lspGotoDefinition","symbolName":"httpPreprocess.ts","lineHint":38,"file":"src/validation/schemas.ts","expectedResult":"inspect target module to evaluate if logic belongs there"}],"ruleId":"hybrid.feature-envy","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"feature-envy","location":"src/validation/schemas.ts:38-46"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:god-module","paired:semantic-dead-export"],"recommendedValidation":{"summary":"trace which functions use imports from src/validation/httpPreprocess.ts to decide what to move","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0061","severity":"high","category":"god-module","file":"src/validation/schemas.ts","lineStart":1,"lineEnd":1,"title":"God module: src/validation/schemas.ts","reason":"Module is excessively large: 39 exports (threshold: 20).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Split module into focused sub-modules with single responsibilities.","steps":["Identify distinct functional groups within the module.","Extract each group into a dedicated module.","Create a barrel if backward compatibility is needed.","Update imports incrementally."]},"impact":"Smaller modules are easier to understand, test, and maintain.","tags":["complexity","responsibility","size"],"lspHints":[{"tool":"lspFindReferences","symbolName":"schemas.ts","lineHint":1,"file":"src/validation/schemas.ts","expectedResult":"identify consumer clusters to guide module splitting strategy"}],"ruleId":"ast.god-module","analysisLens":"ast","confidence":"low","evidence":{"category":"god-module","location":"src/validation/schemas.ts:1-1"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:semantic-dead-export"],"recommendedValidation":{"summary":"identify consumer clusters to guide module splitting strategy","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0062","severity":"high","category":"hardcoded-secret","file":"src/routes/tools.ts","lineStart":206,"lineEnd":206,"title":"Potential hardcoded secret","reason":"String literal matches a secret pattern (password, API key, token, high-entropy string). Secrets in source code risk credential leaks. Validate: use localSearchCode to find the variable, then lspFindReferences to check if it is used in auth or network calls.","files":["src/routes/tools.ts"],"suggestedFix":{"strategy":"Move secret to environment variable or secrets manager.","steps":["Replace the hardcoded value with process.env.YOUR_SECRET.","Add the variable to your .env file (excluded from git).","Verify the secret is not committed in git history."]},"impact":"Credential leak in source code exposes API access, database credentials, or authentication tokens to anyone with repo access.","tags":["security","secrets"],"lspHints":[{"tool":"lspFindReferences","symbolName":"secret","lineHint":206,"file":"src/routes/tools.ts","expectedResult":"find all usages of this secret value — if used only in tests or as a regex pattern, it is a false positive"}],"ruleId":"security.hardcoded-secret","confidence":"high","evidence":{"category":"hardcoded-secret","location":"src/routes/tools.ts:206-206","source":"","sink":"runtime usage","context":"literal","sanitizerStatus":"missing","propagationSteps":["src/routes/tools.ts:206"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:prototype-pollution-risk","paired:untested-critical-code","paired:unvalidated-input-sink","paired:listener-leak-risk","paired:over-abstraction","paired:type-assertion-escape"],"recommendedValidation":{"summary":"find all usages of this secret value — if used only in tests or as a regex pattern, it is a false positive","tools":["localSearchCode","lspFindReferences"]},"flowTrace":[{"file":"src/routes/tools.ts","lineStart":206,"lineEnd":206,"label":"propagation step"}]},{"id":"AST-ISSUE-0063","severity":"high","category":"prototype-pollution-risk","file":"src/routes/tools.ts","lineStart":352,"lineEnd":352,"title":"Prototype pollution risk: computed-property-write","reason":"Dynamic bracket assignment: schemas[toolName]","files":["src/routes/tools.ts"],"suggestedFix":{"strategy":"Guard against __proto__, constructor, and prototype keys before merging.","steps":["Validate keys: reject \"__proto__\", \"constructor\", \"prototype\" before assignment.","Use Object.create(null) as the target for merges when possible.","Replace custom deep-merge with a hardened library (e.g. lodash.merge with prototype guard).","For Object.assign, ensure the source is sanitized or use structuredClone()."]},"impact":"Prototype pollution can override built-in methods, bypass security checks, or achieve remote code execution.","tags":["security","prototype-pollution","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"bracket-assignment","lineHint":352,"file":"src/routes/tools.ts","expectedResult":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive"}],"ruleId":"security.prototype-pollution-risk","confidence":"medium","evidence":{"category":"prototype-pollution-risk","location":"src/routes/tools.ts:352-352","source":"computed-property-write","sink":"Dynamic bracket assignment: schemas[toolName]","guarded":false,"sanitizerStatus":"missing","propagationSteps":["src/routes/tools.ts:352"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:hardcoded-secret","paired:untested-critical-code","paired:unvalidated-input-sink","paired:listener-leak-risk","paired:over-abstraction","paired:type-assertion-escape"],"recommendedValidation":{"summary":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"src/routes/tools.ts","lineStart":352,"lineEnd":352,"label":"propagation step"}]},{"id":"AST-ISSUE-0064","severity":"high","category":"prototype-pollution-risk","file":"src/utils/circuitBreaker.ts","lineStart":288,"lineEnd":288,"title":"Prototype pollution risk: computed-property-write","reason":"Dynamic bracket assignment: states[name]","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Guard against __proto__, constructor, and prototype keys before merging.","steps":["Validate keys: reject \"__proto__\", \"constructor\", \"prototype\" before assignment.","Use Object.create(null) as the target for merges when possible.","Replace custom deep-merge with a hardened library (e.g. lodash.merge with prototype guard).","For Object.assign, ensure the source is sanitized or use structuredClone()."]},"impact":"Prototype pollution can override built-in methods, bypass security checks, or achieve remote code execution.","tags":["security","prototype-pollution","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"bracket-assignment","lineHint":288,"file":"src/utils/circuitBreaker.ts","expectedResult":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive"}],"ruleId":"security.prototype-pollution-risk","confidence":"medium","evidence":{"category":"prototype-pollution-risk","location":"src/utils/circuitBreaker.ts:288-288","source":"computed-property-write","sink":"Dynamic bracket assignment: states[name]","guarded":false,"sanitizerStatus":"missing","propagationSteps":["src/utils/circuitBreaker.ts:288"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer","paired:move-to-caller"],"recommendedValidation":{"summary":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"src/utils/circuitBreaker.ts","lineStart":288,"lineEnd":288,"label":"propagation step"}]},{"id":"AST-ISSUE-0065","severity":"high","category":"semantic-dead-export","file":"src/middleware/queryParser.ts","lineStart":94,"lineEnd":112,"title":"Semantically dead export: sendToolResult","reason":"Exported symbol \"sendToolResult\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/middleware/queryParser.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"sendToolResult","lineHint":94,"file":"src/middleware/queryParser.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/middleware/queryParser.ts:94-112"},"correlatedSignals":["paired:dead-export","paired:unreachable-module","paired:cognitive-complexity","paired:input-passthrough-risk","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0066","severity":"high","category":"semantic-dead-export","file":"src/types/guards.ts","lineStart":18,"lineEnd":20,"title":"Semantically dead export: isPositiveNumber","reason":"Exported symbol \"isPositiveNumber\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isPositiveNumber","lineHint":18,"file":"src/types/guards.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/guards.ts:18-20"},"correlatedSignals":["hot-file","paired:dead-export","paired:distance-from-main-sequence","paired:unreachable-module","paired:untested-critical-code","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0067","severity":"high","category":"semantic-dead-export","file":"src/types/guards.ts","lineStart":25,"lineEnd":27,"title":"Semantically dead export: isNonNegativeNumber","reason":"Exported symbol \"isNonNegativeNumber\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isNonNegativeNumber","lineHint":25,"file":"src/types/guards.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/guards.ts:25-27"},"correlatedSignals":["hot-file","paired:dead-export","paired:distance-from-main-sequence","paired:unreachable-module","paired:untested-critical-code","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0068","severity":"high","category":"semantic-dead-export","file":"src/types/guards.ts","lineStart":32,"lineEnd":34,"title":"Semantically dead export: isStringArray","reason":"Exported symbol \"isStringArray\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isStringArray","lineHint":32,"file":"src/types/guards.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/guards.ts:32-34"},"correlatedSignals":["hot-file","paired:dead-export","paired:distance-from-main-sequence","paired:unreachable-module","paired:untested-critical-code","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0069","severity":"high","category":"semantic-dead-export","file":"src/types/mcp.ts","lineStart":69,"lineEnd":72,"title":"Semantically dead export: ListToolsResponse","reason":"Exported symbol \"ListToolsResponse\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/mcp.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ListToolsResponse","lineHint":69,"file":"src/types/mcp.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/mcp.ts:69-72"},"correlatedSignals":["paired:dead-export","paired:over-abstraction","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0070","severity":"high","category":"semantic-dead-export","file":"src/types/mcp.ts","lineStart":77,"lineEnd":80,"title":"Semantically dead export: ListPromptsResponse","reason":"Exported symbol \"ListPromptsResponse\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/mcp.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ListPromptsResponse","lineHint":77,"file":"src/types/mcp.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/mcp.ts:77-80"},"correlatedSignals":["paired:dead-export","paired:over-abstraction","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0071","severity":"high","category":"semantic-dead-export","file":"src/types/responses.ts","lineStart":93,"lineEnd":95,"title":"Semantically dead export: LspReference","reason":"Exported symbol \"LspReference\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LspReference","lineHint":93,"file":"src/types/responses.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/responses.ts:93-95"},"correlatedSignals":["paired:dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0072","severity":"high","category":"semantic-dead-export","file":"src/types/responses.ts","lineStart":100,"lineEnd":106,"title":"Semantically dead export: LspCallHierarchyItem","reason":"Exported symbol \"LspCallHierarchyItem\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LspCallHierarchyItem","lineHint":100,"file":"src/types/responses.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/responses.ts:100-106"},"correlatedSignals":["paired:dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0073","severity":"high","category":"semantic-dead-export","file":"src/types/responses.ts","lineStart":115,"lineEnd":120,"title":"Semantically dead export: RepoStructure","reason":"Exported symbol \"RepoStructure\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"RepoStructure","lineHint":115,"file":"src/types/responses.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/responses.ts:115-120"},"correlatedSignals":["paired:dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0074","severity":"high","category":"semantic-dead-export","file":"src/types/responses.ts","lineStart":150,"lineEnd":157,"title":"Semantically dead export: isSearchResult","reason":"Exported symbol \"isSearchResult\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isSearchResult","lineHint":150,"file":"src/types/responses.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/responses.ts:150-157"},"correlatedSignals":["paired:dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0075","severity":"high","category":"semantic-dead-export","file":"src/types/responses.ts","lineStart":162,"lineEnd":170,"title":"Semantically dead export: isLspDefinition","reason":"Exported symbol \"isLspDefinition\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isLspDefinition","lineHint":162,"file":"src/types/responses.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/responses.ts:162-170"},"correlatedSignals":["paired:dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0076","severity":"high","category":"semantic-dead-export","file":"src/types/toolTypes.ts","lineStart":29,"lineEnd":33,"title":"Semantically dead export: toQueryParams","reason":"Exported symbol \"toQueryParams\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/types/toolTypes.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"toQueryParams","lineHint":29,"file":"src/types/toolTypes.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/types/toolTypes.ts:29-33"},"correlatedSignals":["paired:dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0077","severity":"high","category":"semantic-dead-export","file":"src/utils/circuitBreaker.ts","lineStart":248,"lineEnd":261,"title":"Semantically dead export: getCircuitState","reason":"Exported symbol \"getCircuitState\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getCircuitState","lineHint":248,"file":"src/utils/circuitBreaker.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/circuitBreaker.ts:248-261"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0078","severity":"high","category":"semantic-dead-export","file":"src/utils/circuitBreaker.ts","lineStart":266,"lineEnd":273,"title":"Semantically dead export: resetCircuit","reason":"Exported symbol \"resetCircuit\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"resetCircuit","lineHint":266,"file":"src/utils/circuitBreaker.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/circuitBreaker.ts:266-273"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0079","severity":"high","category":"semantic-dead-export","file":"src/utils/circuitBreaker.ts","lineStart":467,"lineEnd":474,"title":"Semantically dead export: clearCircuit","reason":"Exported symbol \"clearCircuit\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"clearCircuit","lineHint":467,"file":"src/utils/circuitBreaker.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/circuitBreaker.ts:467-474"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0080","severity":"high","category":"semantic-dead-export","file":"src/utils/circuitBreaker.ts","lineStart":490,"lineEnd":492,"title":"Semantically dead export: getCircuitCount","reason":"Exported symbol \"getCircuitCount\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getCircuitCount","lineHint":490,"file":"src/utils/circuitBreaker.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/circuitBreaker.ts:490-492"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0081","severity":"high","category":"semantic-dead-export","file":"src/utils/logEmoji.ts","lineStart":101,"lineEnd":103,"title":"Semantically dead export: prefixLog","reason":"Exported symbol \"prefixLog\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/logEmoji.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"prefixLog","lineHint":101,"file":"src/utils/logEmoji.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/logEmoji.ts:101-103"},"correlatedSignals":["paired:dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0082","severity":"high","category":"semantic-dead-export","file":"src/utils/logger.ts","lineStart":285,"lineEnd":302,"title":"Semantically dead export: logToolSuccess","reason":"Exported symbol \"logToolSuccess\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"logToolSuccess","lineHint":285,"file":"src/utils/logger.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/logger.ts:285-302"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0083","severity":"high","category":"semantic-dead-export","file":"src/utils/logger.ts","lineStart":307,"lineEnd":324,"title":"Semantically dead export: logToolError","reason":"Exported symbol \"logToolError\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"logToolError","lineHint":307,"file":"src/utils/logger.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/logger.ts:307-324"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0084","severity":"high","category":"semantic-dead-export","file":"src/utils/logger.ts","lineStart":340,"lineEnd":342,"title":"Semantically dead export: getErrorLogPath","reason":"Exported symbol \"getErrorLogPath\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getErrorLogPath","lineHint":340,"file":"src/utils/logger.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/logger.ts:340-342"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0085","severity":"high","category":"semantic-dead-export","file":"src/utils/logger.ts","lineStart":347,"lineEnd":349,"title":"Semantically dead export: getToolsLogPath","reason":"Exported symbol \"getToolsLogPath\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getToolsLogPath","lineHint":347,"file":"src/utils/logger.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/logger.ts:347-349"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0086","severity":"high","category":"semantic-dead-export","file":"src/utils/logger.ts","lineStart":367,"lineEnd":392,"title":"Semantically dead export: createToolLogger","reason":"Exported symbol \"createToolLogger\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"createToolLogger","lineHint":367,"file":"src/utils/logger.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/logger.ts:367-392"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0087","severity":"high","category":"semantic-dead-export","file":"src/utils/resilience.ts","lineStart":58,"lineEnd":63,"title":"Semantically dead export: ResilienceConfig","reason":"Exported symbol \"ResilienceConfig\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/resilience.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ResilienceConfig","lineHint":58,"file":"src/utils/resilience.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/resilience.ts:58-63"},"correlatedSignals":["hot-file","critical-path-context","paired:untested-critical-code","paired:dead-export"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0088","severity":"high","category":"semantic-dead-export","file":"src/utils/responseFactory.ts","lineStart":19,"lineEnd":21,"title":"Semantically dead export: extractFileMatches","reason":"Exported symbol \"extractFileMatches\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/responseFactory.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractFileMatches","lineHint":19,"file":"src/utils/responseFactory.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/responseFactory.ts:19-21"},"correlatedSignals":["hot-file","paired:dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0089","severity":"high","category":"semantic-dead-export","file":"src/utils/responseFactory.ts","lineStart":26,"lineEnd":28,"title":"Semantically dead export: extractPaginationInfo","reason":"Exported symbol \"extractPaginationInfo\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/responseFactory.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractPaginationInfo","lineHint":26,"file":"src/utils/responseFactory.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/responseFactory.ts:26-28"},"correlatedSignals":["hot-file","paired:dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0090","severity":"high","category":"semantic-dead-export","file":"src/utils/responseFactory.ts","lineStart":33,"lineEnd":35,"title":"Semantically dead export: extractMatchCount","reason":"Exported symbol \"extractMatchCount\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/responseFactory.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractMatchCount","lineHint":33,"file":"src/utils/responseFactory.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/responseFactory.ts:33-35"},"correlatedSignals":["hot-file","paired:dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0091","severity":"high","category":"semantic-dead-export","file":"src/utils/responseParser.ts","lineStart":178,"lineEnd":186,"title":"Semantically dead export: getDataField","reason":"Exported symbol \"getDataField\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getDataField","lineHint":178,"file":"src/utils/responseParser.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/responseParser.ts:178-186"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:dead-export","paired:untested-critical-code","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0092","severity":"high","category":"semantic-dead-export","file":"src/utils/retry.ts","lineStart":139,"lineEnd":145,"title":"Semantically dead export: withCategoryRetry","reason":"Exported symbol \"withCategoryRetry\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/retry.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"withCategoryRetry","lineHint":139,"file":"src/utils/retry.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/retry.ts:139-145"},"correlatedSignals":["hot-file","paired:await-in-loop","paired:dead-export","paired:feature-envy"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0093","severity":"high","category":"semantic-dead-export","file":"src/utils/retry.ts","lineStart":232,"lineEnd":240,"title":"Semantically dead export: isSymbolNotFound","reason":"Exported symbol \"isSymbolNotFound\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/retry.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isSymbolNotFound","lineHint":232,"file":"src/utils/retry.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/retry.ts:232-240"},"correlatedSignals":["hot-file","paired:await-in-loop","paired:dead-export","paired:feature-envy"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0094","severity":"high","category":"semantic-dead-export","file":"src/utils/retry.ts","lineStart":252,"lineEnd":266,"title":"Semantically dead export: getRetryAfter","reason":"Exported symbol \"getRetryAfter\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/retry.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getRetryAfter","lineHint":252,"file":"src/utils/retry.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/retry.ts:252-266"},"correlatedSignals":["hot-file","paired:await-in-loop","paired:dead-export","paired:feature-envy"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0095","severity":"high","category":"semantic-dead-export","file":"src/utils/retry.ts","lineStart":271,"lineEnd":280,"title":"Semantically dead export: isRecoverable","reason":"Exported symbol \"isRecoverable\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/utils/retry.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isRecoverable","lineHint":271,"file":"src/utils/retry.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/utils/retry.ts:271-280"},"correlatedSignals":["hot-file","paired:await-in-loop","paired:dead-export","paired:feature-envy"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0096","severity":"high","category":"semantic-dead-export","file":"src/validation/httpPreprocess.ts","lineStart":155,"lineEnd":155,"title":"Semantically dead export: researchDefaults","reason":"Exported symbol \"researchDefaults\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"researchDefaults","lineHint":155,"file":"src/validation/httpPreprocess.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/httpPreprocess.ts:155-155"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:move-to-caller"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0097","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":543,"lineEnd":543,"title":"Semantically dead export: LocalSearchQuery","reason":"Exported symbol \"LocalSearchQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LocalSearchQuery","lineHint":543,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:543-543"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0098","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":544,"lineEnd":544,"title":"Semantically dead export: LocalContentQuery","reason":"Exported symbol \"LocalContentQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LocalContentQuery","lineHint":544,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:544-544"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0099","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":545,"lineEnd":545,"title":"Semantically dead export: LocalFindQuery","reason":"Exported symbol \"LocalFindQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LocalFindQuery","lineHint":545,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:545-545"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0100","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":546,"lineEnd":546,"title":"Semantically dead export: LocalStructureQuery","reason":"Exported symbol \"LocalStructureQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LocalStructureQuery","lineHint":546,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:546-546"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0101","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":548,"lineEnd":548,"title":"Semantically dead export: LspDefinitionQuery","reason":"Exported symbol \"LspDefinitionQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LspDefinitionQuery","lineHint":548,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:548-548"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0102","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":549,"lineEnd":549,"title":"Semantically dead export: LspReferencesQuery","reason":"Exported symbol \"LspReferencesQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LspReferencesQuery","lineHint":549,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:549-549"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0103","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":550,"lineEnd":550,"title":"Semantically dead export: LspCallsQuery","reason":"Exported symbol \"LspCallsQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LspCallsQuery","lineHint":550,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:550-550"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0104","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":552,"lineEnd":552,"title":"Semantically dead export: GithubSearchQuery","reason":"Exported symbol \"GithubSearchQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"GithubSearchQuery","lineHint":552,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:552-552"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0105","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":553,"lineEnd":553,"title":"Semantically dead export: GithubContentQuery","reason":"Exported symbol \"GithubContentQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"GithubContentQuery","lineHint":553,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:553-553"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0106","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":554,"lineEnd":554,"title":"Semantically dead export: GithubReposQuery","reason":"Exported symbol \"GithubReposQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"GithubReposQuery","lineHint":554,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:554-554"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0107","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":555,"lineEnd":555,"title":"Semantically dead export: GithubStructureQuery","reason":"Exported symbol \"GithubStructureQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"GithubStructureQuery","lineHint":555,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:555-555"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0108","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":556,"lineEnd":556,"title":"Semantically dead export: GithubPRsQuery","reason":"Exported symbol \"GithubPRsQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"GithubPRsQuery","lineHint":556,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:556-556"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0109","severity":"high","category":"semantic-dead-export","file":"src/validation/schemas.ts","lineStart":558,"lineEnd":558,"title":"Semantically dead export: PackageSearchQuery","reason":"Exported symbol \"PackageSearchQuery\" has zero semantic references across the entire program (confirmed via TypeChecker, not just import matching).","files":["src/validation/schemas.ts"],"suggestedFix":{"strategy":"Remove the export or delete the symbol if unused internally.","steps":["Verify the symbol is not used via dynamic imports or runtime reflection.","Remove the export keyword, or delete the symbol entirely if also unused locally.","Re-run scan to confirm finding is resolved."]},"impact":"Dead exports bloat the public API surface and confuse contributors.","tags":["architecture","dead-code","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"PackageSearchQuery","lineHint":558,"file":"src/validation/schemas.ts","expectedResult":"zero references confirms dead export"}],"ruleId":"hybrid.semantic-dead-export","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"semantic-dead-export","location":"src/validation/schemas.ts:558-558"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:feature-envy","paired:god-module"],"recommendedValidation":{"summary":"zero references confirms dead export","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0110","severity":"high","category":"similar-function-body","file":"src/utils/responseBuilder.ts","lineStart":133,"lineEnd":170,"title":"Similar function: fileContent (97% similar to bulkResult in src/utils/responseBuilder.ts)","reason":"\"fileContent\" and \"bulkResult\" have 97% structural similarity. Near-duplicates diverge over time and should be consolidated.","files":["src/utils/responseBuilder.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Extract shared logic into a parameterized helper.","steps":["Compare src/utils/responseBuilder.ts:133 with src/utils/responseBuilder.ts:410.","Identify the varying parts and extract them as parameters.","Create a shared function and call it from both locations."]},"impact":"Near-clone functions diverge over time, causing inconsistent behavior and multiplied maintenance cost.","tags":["duplication","maintainability","near-clone"],"ruleId":"ast.similar-function-body","analysisLens":"ast","confidence":"low","evidence":{"category":"similar-function-body","location":"src/utils/responseBuilder.ts:133-170"},"correlatedSignals":["hot-file","critical-path-context","paired:distance-from-main-sequence","paired:cognitive-complexity","paired:over-abstraction"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0111","severity":"high","category":"sql-injection-risk","file":"src/utils/logger.ts","lineStart":57,"lineEnd":57,"title":"SQL query built with template literal interpolation","reason":"Template literals with SQL keywords and interpolated expressions risk SQL injection if user input flows into the query.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Use parameterized queries or a query builder.","steps":["Replace template literal with parameterized query (e.g. db.query(sql, [param])).","Use an ORM or query builder that handles escaping.","If raw SQL is necessary, validate and sanitize all interpolated values."]},"impact":"SQL injection can expose, modify, or destroy database contents and potentially escalate to full server compromise.","tags":["security","injection","sql"],"ruleId":"security.sql-injection-risk","confidence":"high","evidence":{"category":"sql-injection-risk","location":"src/utils/logger.ts:57-57","sink":"sql template literal","sanitizerStatus":"missing","propagationSteps":["src/utils/logger.ts:57-57"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"Validate both the structural location and the behavioral path before presenting the claim as fact.","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"src/utils/logger.ts","lineStart":57,"lineEnd":57,"label":"propagation step"}]},{"id":"AST-ISSUE-0112","severity":"high","category":"sql-injection-risk","file":"src/utils/logger.ts","lineStart":83,"lineEnd":83,"title":"SQL query built with template literal interpolation","reason":"Template literals with SQL keywords and interpolated expressions risk SQL injection if user input flows into the query.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Use parameterized queries or a query builder.","steps":["Replace template literal with parameterized query (e.g. db.query(sql, [param])).","Use an ORM or query builder that handles escaping.","If raw SQL is necessary, validate and sanitize all interpolated values."]},"impact":"SQL injection can expose, modify, or destroy database contents and potentially escalate to full server compromise.","tags":["security","injection","sql"],"ruleId":"security.sql-injection-risk","confidence":"high","evidence":{"category":"sql-injection-risk","location":"src/utils/logger.ts:83-83","sink":"sql template literal","sanitizerStatus":"missing","propagationSteps":["src/utils/logger.ts:83-83"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"Validate both the structural location and the behavioral path before presenting the claim as fact.","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"src/utils/logger.ts","lineStart":83,"lineEnd":83,"label":"propagation step"}]},{"id":"AST-ISSUE-0113","severity":"high","category":"unreachable-module","file":"src/middleware/queryParser.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/middleware/queryParser.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/middleware/queryParser.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/middleware/queryParser.ts:1-1"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:cognitive-complexity","paired:input-passthrough-risk","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0114","severity":"high","category":"unreachable-module","file":"src/routes/github.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/routes/github.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/routes/github.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/routes/github.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0115","severity":"high","category":"unreachable-module","file":"src/routes/local.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/routes/local.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/routes/local.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/routes/local.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:dependency-test-only","paired:similar-function-body","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0116","severity":"high","category":"unreachable-module","file":"src/routes/lsp.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/routes/lsp.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/routes/lsp.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/routes/lsp.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:cognitive-complexity","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0117","severity":"high","category":"unreachable-module","file":"src/routes/package.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/routes/package.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/routes/package.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/routes/package.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:cognitive-complexity","paired:unvalidated-input-sink","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0118","severity":"high","category":"unreachable-module","file":"src/server-init.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/server-init.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/server-init.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/server-init.ts:1-1"},"correlatedSignals":["top-level-effects","paired:await-in-loop","paired:untested-critical-code","paired:dead-file","paired:empty-catch","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0119","severity":"high","category":"unreachable-module","file":"src/types/guards.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/types/guards.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/types/guards.ts:1-1"},"correlatedSignals":["hot-file","paired:dead-export","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:untested-critical-code","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0120","severity":"high","category":"unreachable-module","file":"src/types/responses.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/types/responses.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/types/responses.ts:1-1"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0121","severity":"high","category":"unreachable-module","file":"src/types/toolTypes.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/types/toolTypes.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/types/toolTypes.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/types/toolTypes.ts:1-1"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:dead-file","paired:orphan-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0122","severity":"high","category":"unreachable-module","file":"src/utils/logEmoji.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/utils/logEmoji.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/utils/logEmoji.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/utils/logEmoji.ts:1-1"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:dead-file","paired:orphan-module","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0123","severity":"high","category":"unreachable-module","file":"src/utils/responseFactory.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/utils/responseFactory.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/utils/responseFactory.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/utils/responseFactory.ts:1-1"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0124","severity":"high","category":"unreachable-module","file":"src/utils/routeFactory.ts","lineStart":1,"lineEnd":1,"title":"Unreachable module: src/utils/routeFactory.ts","reason":"Module is not reachable from any entrypoint via the import graph.","files":["src/utils/routeFactory.ts"],"suggestedFix":{"strategy":"Verify reachability and remove if truly dead.","steps":["Check if this module is loaded dynamically or via framework conventions.","Verify it is not registered as a route, plugin, or middleware.","If confirmed unreachable, delete and re-run scan."]},"impact":"Identifies potentially large sections of dead code missed by direct-import checks.","tags":["dead-code","dependency","reachability"],"ruleId":"graph.unreachable-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"unreachable-module","location":"src/utils/routeFactory.ts:1-1"},"correlatedSignals":["paired:unvalidated-input-sink","paired:dead-export","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0125","severity":"high","category":"untested-critical-code","file":"src/routes/tools.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/routes/tools.ts","reason":"High-risk file has no test imports. fan-in=1, fan-out=8, complexity=79; on critical dependency path (risk score: 58).","files":["src/routes/tools.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/routes/tools.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:hardcoded-secret","paired:prototype-pollution-risk","paired:unvalidated-input-sink","paired:listener-leak-risk","paired:over-abstraction","paired:type-assertion-escape"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0126","severity":"high","category":"untested-critical-code","file":"src/types/guards.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/types/guards.ts","reason":"High-risk file has no test imports. fan-in=6, fan-out=0, complexity=40 (risk score: 55).","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/types/guards.ts:1-1"},"correlatedSignals":["hot-file","paired:dead-export","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:unreachable-module","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0127","severity":"high","category":"untested-critical-code","file":"src/server.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/server.ts","reason":"High-risk file has no test imports. fan-in=0, fan-out=11, complexity=71; on critical dependency path (risk score: 54).","files":["src/server.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/server.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","top-level-effects","paired:dependency-critical-path","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary","paired:uncleared-timer"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0128","severity":"high","category":"untested-critical-code","file":"src/types/errorGuards.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/types/errorGuards.ts","reason":"High-risk file has no test imports. fan-in=1, fan-out=0, complexity=47 (risk score: 48).","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/types/errorGuards.ts:1-1"},"correlatedSignals":["hot-file","paired:dead-export","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0129","severity":"high","category":"untested-critical-code","file":"src/utils/resilience.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/utils/resilience.ts","reason":"High-risk file has no test imports. fan-in=5, fan-out=3, complexity=21; on critical dependency path (risk score: 45).","files":["src/utils/resilience.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/utils/resilience.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:semantic-dead-export","paired:dead-export"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0130","severity":"high","category":"untested-critical-code","file":"src/utils/responseFactory.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/utils/responseFactory.ts","reason":"High-risk file has no test imports. fan-in=4, fan-out=2, complexity=38 (risk score: 44).","files":["src/utils/responseFactory.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/utils/responseFactory.ts:1-1"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0131","severity":"high","category":"untested-critical-code","file":"src/utils/responseParser.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/utils/responseParser.ts","reason":"High-risk file has no test imports. fan-in=3, fan-out=0, complexity=43 (risk score: 41).","files":["src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/utils/responseParser.ts:1-1"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:dead-export","paired:semantic-dead-export","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0132","severity":"high","category":"untested-critical-code","file":"src/utils/colors.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/utils/colors.ts","reason":"High-risk file has no test imports. fan-in=4, fan-out=0, complexity=16; on critical dependency path (risk score: 39).","files":["src/utils/colors.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/utils/colors.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:distance-from-main-sequence","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0133","severity":"high","category":"untested-critical-code","file":"src/index.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/index.ts","reason":"High-risk file has no test imports. fan-in=9, fan-out=1, complexity=1; on critical dependency path (risk score: 38).","files":["src/index.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/index.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:dead-re-export"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0134","severity":"high","category":"untested-critical-code","file":"src/server-init.ts","lineStart":1,"lineEnd":1,"title":"Untested critical code: src/server-init.ts","reason":"High-risk file has no test imports. high complexity score (48), 0 high-complexity functions (risk score: 48).","files":["src/server-init.ts"],"suggestedFix":{"strategy":"Add test coverage for this critical module.","steps":["Create a test file that imports and exercises the public API of this module.","Focus on the highest-complexity functions and exported behaviors first.","Add integration tests if this module sits on a critical dependency path.","Consider property-based tests for complex data transformations."]},"impact":"Untested critical code is the highest-risk area for regressions and undetected bugs.","tags":["testing","coverage","change-risk","critical"],"ruleId":"ast.untested-critical-code","analysisLens":"ast","confidence":"low","evidence":{"category":"untested-critical-code","location":"src/server-init.ts:1-1"},"correlatedSignals":["top-level-effects","paired:await-in-loop","paired:unreachable-module","paired:dead-file","paired:empty-catch","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0135","severity":"high","category":"unvalidated-input-sink","file":"src/middleware/errorHandler.ts","lineStart":15,"lineEnd":65,"title":"Unvalidated input reaches response sink in errorHandler(req)","reason":"Parameter 'req' (external input) flows into response without validation (no type guard, schema call, or conditional check).","files":["src/middleware/errorHandler.ts"],"suggestedFix":{"strategy":"Add input validation before the sink operation.","steps":["Add schema validation (e.g. zod, joi) for input parameters.","Use parameterized APIs instead of template interpolation for SQL/exec.","Trace data flow: lspCallHierarchy(outgoing) on errorHandler."]},"impact":"Unvalidated external input reaching a dangerous sink (eval, SQL, exec, innerHTML, file write) enables injection attacks.","tags":["security","input-validation","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"errorHandler","lineHint":15,"file":"src/middleware/errorHandler.ts","expectedResult":"trace outgoing calls to see where req data flows"},{"tool":"lspFindReferences","symbolName":"req","lineHint":15,"file":"src/middleware/errorHandler.ts","expectedResult":"check all usages of req parameter within function"}],"ruleId":"security.unvalidated-input-sink","confidence":"high","evidence":{"category":"unvalidated-input-sink","location":"src/middleware/errorHandler.ts:15-65","sourceParameters":["req"],"sink":"response","sanitizerStatus":"missing","propagationSteps":["sanitizeQueryParams:28","extractToolName:36"]},"analysisLens":"hybrid","correlatedSignals":["paired:move-to-caller"],"recommendedValidation":{"summary":"trace outgoing calls to see where req data flows","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"sanitizeQueryParams","lineStart":28,"lineEnd":28,"label":"propagation step"},{"file":"extractToolName","lineStart":36,"lineEnd":36,"label":"propagation step"}]},{"id":"AST-ISSUE-0136","severity":"high","category":"unvalidated-input-sink","file":"src/routes/package.ts","lineStart":17,"lineEnd":47,"title":"Unvalidated input reaches response sink in <anonymous>(req)","reason":"Parameter 'req' (external input) flows into response without validation (no type guard, schema call, or conditional check).","files":["src/routes/package.ts"],"suggestedFix":{"strategy":"Add input validation before the sink operation.","steps":["Add schema validation (e.g. zod, joi) for input parameters.","Use parameterized APIs instead of template interpolation for SQL/exec.","Trace data flow: lspCallHierarchy(outgoing) on <anonymous>."]},"impact":"Unvalidated external input reaching a dangerous sink (eval, SQL, exec, innerHTML, file write) enables injection attacks.","tags":["security","input-validation","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"<anonymous>","lineHint":17,"file":"src/routes/package.ts","expectedResult":"trace outgoing calls to see where req data flows"},{"tool":"lspFindReferences","symbolName":"req","lineHint":17,"file":"src/routes/package.ts","expectedResult":"check all usages of req parameter within function"}],"ruleId":"security.unvalidated-input-sink","confidence":"high","evidence":{"category":"unvalidated-input-sink","location":"src/routes/package.ts:17-47","sourceParameters":["req"],"sink":"response","sanitizerStatus":"missing","propagationSteps":["parseAndValidate:19"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:cognitive-complexity","paired:unreachable-module","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"trace outgoing calls to see where req data flows","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"parseAndValidate","lineStart":19,"lineEnd":19,"label":"propagation step"}]},{"id":"AST-ISSUE-0137","severity":"high","category":"unvalidated-input-sink","file":"src/routes/prompts.ts","lineStart":88,"lineEnd":138,"title":"Unvalidated input reaches response sink in <anonymous>(req)","reason":"Parameter 'req' (external input) flows into response without validation (no type guard, schema call, or conditional check).","files":["src/routes/prompts.ts"],"suggestedFix":{"strategy":"Add input validation before the sink operation.","steps":["Add schema validation (e.g. zod, joi) for input parameters.","Use parameterized APIs instead of template interpolation for SQL/exec.","Trace data flow: lspCallHierarchy(outgoing) on <anonymous>."]},"impact":"Unvalidated external input reaching a dangerous sink (eval, SQL, exec, innerHTML, file write) enables injection attacks.","tags":["security","input-validation","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"<anonymous>","lineHint":88,"file":"src/routes/prompts.ts","expectedResult":"trace outgoing calls to see where req data flows"},{"tool":"lspFindReferences","symbolName":"req","lineHint":88,"file":"src/routes/prompts.ts","expectedResult":"check all usages of req parameter within function"}],"ruleId":"security.unvalidated-input-sink","confidence":"high","evidence":{"category":"unvalidated-input-sink","location":"src/routes/prompts.ts:88-138","sourceParameters":["req"],"sink":"response","sanitizerStatus":"missing","propagationSteps":[]},"analysisLens":"hybrid","correlatedSignals":[],"recommendedValidation":{"summary":"trace outgoing calls to see where req data flows","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0138","severity":"high","category":"unvalidated-input-sink","file":"src/routes/tools.ts","lineStart":158,"lineEnd":211,"title":"Unvalidated input reaches response sink in <anonymous>(req)","reason":"Parameter 'req' (external input) flows into response without validation (no type guard, schema call, or conditional check).","files":["src/routes/tools.ts"],"suggestedFix":{"strategy":"Add input validation before the sink operation.","steps":["Add schema validation (e.g. zod, joi) for input parameters.","Use parameterized APIs instead of template interpolation for SQL/exec.","Trace data flow: lspCallHierarchy(outgoing) on <anonymous>."]},"impact":"Unvalidated external input reaching a dangerous sink (eval, SQL, exec, innerHTML, file write) enables injection attacks.","tags":["security","input-validation","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"<anonymous>","lineHint":158,"file":"src/routes/tools.ts","expectedResult":"trace outgoing calls to see where req data flows"},{"tool":"lspFindReferences","symbolName":"req","lineHint":158,"file":"src/routes/tools.ts","expectedResult":"check all usages of req parameter within function"}],"ruleId":"security.unvalidated-input-sink","confidence":"high","evidence":{"category":"unvalidated-input-sink","location":"src/routes/tools.ts:158-211","sourceParameters":["req"],"sink":"response","sanitizerStatus":"missing","propagationSteps":[]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:hardcoded-secret","paired:prototype-pollution-risk","paired:untested-critical-code","paired:listener-leak-risk","paired:over-abstraction","paired:type-assertion-escape"],"recommendedValidation":{"summary":"trace outgoing calls to see where req data flows","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0139","severity":"high","category":"unvalidated-input-sink","file":"src/routes/tools.ts","lineStart":228,"lineEnd":290,"title":"Unvalidated input reaches response sink in <anonymous>(req)","reason":"Parameter 'req' (external input) flows into response without validation (no type guard, schema call, or conditional check).","files":["src/routes/tools.ts"],"suggestedFix":{"strategy":"Add input validation before the sink operation.","steps":["Add schema validation (e.g. zod, joi) for input parameters.","Use parameterized APIs instead of template interpolation for SQL/exec.","Trace data flow: lspCallHierarchy(outgoing) on <anonymous>."]},"impact":"Unvalidated external input reaching a dangerous sink (eval, SQL, exec, innerHTML, file write) enables injection attacks.","tags":["security","input-validation","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"<anonymous>","lineHint":228,"file":"src/routes/tools.ts","expectedResult":"trace outgoing calls to see where req data flows"},{"tool":"lspFindReferences","symbolName":"req","lineHint":228,"file":"src/routes/tools.ts","expectedResult":"check all usages of req parameter within function"}],"ruleId":"security.unvalidated-input-sink","confidence":"high","evidence":{"category":"unvalidated-input-sink","location":"src/routes/tools.ts:228-290","sourceParameters":["req"],"sink":"response","sanitizerStatus":"missing","propagationSteps":[]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:hardcoded-secret","paired:prototype-pollution-risk","paired:untested-critical-code","paired:listener-leak-risk","paired:over-abstraction","paired:type-assertion-escape"],"recommendedValidation":{"summary":"trace outgoing calls to see where req data flows","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0140","severity":"high","category":"unvalidated-input-sink","file":"src/routes/tools.ts","lineStart":564,"lineEnd":677,"title":"Unvalidated input reaches response sink in <anonymous>(req)","reason":"Parameter 'req' (external input) flows into response without validation (no type guard, schema call, or conditional check).","files":["src/routes/tools.ts"],"suggestedFix":{"strategy":"Add input validation before the sink operation.","steps":["Add schema validation (e.g. zod, joi) for input parameters.","Use parameterized APIs instead of template interpolation for SQL/exec.","Trace data flow: lspCallHierarchy(outgoing) on <anonymous>."]},"impact":"Unvalidated external input reaching a dangerous sink (eval, SQL, exec, innerHTML, file write) enables injection attacks.","tags":["security","input-validation","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"<anonymous>","lineHint":564,"file":"src/routes/tools.ts","expectedResult":"trace outgoing calls to see where req data flows"},{"tool":"lspFindReferences","symbolName":"req","lineHint":564,"file":"src/routes/tools.ts","expectedResult":"check all usages of req parameter within function"}],"ruleId":"security.unvalidated-input-sink","confidence":"high","evidence":{"category":"unvalidated-input-sink","location":"src/routes/tools.ts:564-677","sourceParameters":["req"],"sink":"response","sanitizerStatus":"missing","propagationSteps":["validateToolCallBody:604"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:hardcoded-secret","paired:prototype-pollution-risk","paired:untested-critical-code","paired:listener-leak-risk","paired:over-abstraction","paired:type-assertion-escape"],"recommendedValidation":{"summary":"trace outgoing calls to see where req data flows","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"validateToolCallBody","lineStart":604,"lineEnd":604,"label":"propagation step"}]},{"id":"AST-ISSUE-0141","severity":"high","category":"unvalidated-input-sink","file":"src/utils/routeFactory.ts","lineStart":91,"lineEnd":116,"title":"Unvalidated input reaches response sink in <anonymous>(req)","reason":"Parameter 'req' (external input) flows into response without validation (no type guard, schema call, or conditional check).","files":["src/utils/routeFactory.ts"],"suggestedFix":{"strategy":"Add input validation before the sink operation.","steps":["Add schema validation (e.g. zod, joi) for input parameters.","Use parameterized APIs instead of template interpolation for SQL/exec.","Trace data flow: lspCallHierarchy(outgoing) on <anonymous>."]},"impact":"Unvalidated external input reaching a dangerous sink (eval, SQL, exec, innerHTML, file write) enables injection attacks.","tags":["security","input-validation","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"<anonymous>","lineHint":91,"file":"src/utils/routeFactory.ts","expectedResult":"trace outgoing calls to see where req data flows"},{"tool":"lspFindReferences","symbolName":"req","lineHint":91,"file":"src/utils/routeFactory.ts","expectedResult":"check all usages of req parameter within function"}],"ruleId":"security.unvalidated-input-sink","confidence":"high","evidence":{"category":"unvalidated-input-sink","location":"src/utils/routeFactory.ts:91-116","sourceParameters":["req"],"sink":"response","sanitizerStatus":"missing","propagationSteps":["parseAndValidate:94"]},"analysisLens":"hybrid","correlatedSignals":["paired:unreachable-module","paired:dead-export","paired:move-to-caller"],"recommendedValidation":{"summary":"trace outgoing calls to see where req data flows","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"parseAndValidate","lineStart":94,"lineEnd":94,"label":"propagation step"}]},{"id":"AST-ISSUE-0142","severity":"medium","category":"architecture-sdp-violation","file":"src/utils/responseFactory.ts","lineStart":8,"lineEnd":8,"title":"SDP violation: stable module depends on unstable module","reason":"\"src/utils/responseFactory.ts\" (I=0.33) depends on \"src/types/responses.ts\" (I=0.50). Delta=0.17.","files":["src/utils/responseFactory.ts","src/types/responses.ts"],"suggestedFix":{"strategy":"Invert dependency via interface/abstraction or move shared code to a stable utility.","steps":["Extract a stable interface that the stable module depends on.","Have the unstable module implement that interface.","Consider moving shared logic to a lower-instability utility module."]},"impact":"Prevents cascading instability and reduces change propagation risk.","tags":["stability","coupling","architecture","sdp"],"ruleId":"graph.architecture-sdp-violation","analysisLens":"graph","confidence":"medium","evidence":{"category":"architecture-sdp-violation","location":"src/utils/responseFactory.ts:8-8"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:feature-envy","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0143","severity":"medium","category":"architecture-sdp-violation","file":"src/validation/index.ts","lineStart":1,"lineEnd":1,"title":"SDP violation: stable module depends on unstable module","reason":"\"src/validation/index.ts\" (I=0.33) depends on \"src/validation/schemas.ts\" (I=0.50). Delta=0.17.","files":["src/validation/index.ts","src/validation/schemas.ts"],"suggestedFix":{"strategy":"Invert dependency via interface/abstraction or move shared code to a stable utility.","steps":["Extract a stable interface that the stable module depends on.","Have the unstable module implement that interface.","Consider moving shared logic to a lower-instability utility module."]},"impact":"Prevents cascading instability and reduces change propagation risk.","tags":["stability","coupling","architecture","sdp"],"ruleId":"graph.architecture-sdp-violation","analysisLens":"graph","confidence":"medium","evidence":{"category":"architecture-sdp-violation","location":"src/validation/index.ts:1-1"},"correlatedSignals":["paired:export-star-leak","paired:re-export-duplication"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0144","severity":"medium","category":"cognitive-complexity","file":"src/middleware/queryParser.ts","lineStart":31,"lineEnd":77,"title":"High cognitive complexity: parseAndValidate (16)","reason":"Function cognitive complexity is 16 (threshold: 15). Nested branches compound reading difficulty.","files":["src/middleware/queryParser.ts:31-77"],"suggestedFix":{"strategy":"Reduce nesting and simplify control flow.","steps":["Convert nested branches into early returns / guard clauses.","Extract deeply nested blocks into named helper functions.","Replace complex boolean chains with named predicates."]},"impact":"Lower cognitive complexity directly correlates with fewer bugs and faster code reviews.","tags":["complexity","readability","nesting"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"parseAndValidate","lineHint":31,"file":"src/middleware/queryParser.ts","expectedResult":"understand call graph before simplifying parseAndValidate"}],"ruleId":"ast.cognitive-complexity","analysisLens":"ast","confidence":"low","evidence":{"category":"cognitive-complexity","location":"src/middleware/queryParser.ts:31-77"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:input-passthrough-risk","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"understand call graph before simplifying parseAndValidate","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0145","severity":"medium","category":"cognitive-complexity","file":"src/routes/lsp.ts","lineStart":149,"lineEnd":177,"title":"High cognitive complexity: extractCallHierarchyLocations (16)","reason":"Function cognitive complexity is 16 (threshold: 15). Nested branches compound reading difficulty.","files":["src/routes/lsp.ts:149-177"],"suggestedFix":{"strategy":"Reduce nesting and simplify control flow.","steps":["Convert nested branches into early returns / guard clauses.","Extract deeply nested blocks into named helper functions.","Replace complex boolean chains with named predicates."]},"impact":"Lower cognitive complexity directly correlates with fewer bugs and faster code reviews.","tags":["complexity","readability","nesting"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"extractCallHierarchyLocations","lineHint":149,"file":"src/routes/lsp.ts","expectedResult":"understand call graph before simplifying extractCallHierarchyLocations"}],"ruleId":"ast.cognitive-complexity","analysisLens":"ast","confidence":"low","evidence":{"category":"cognitive-complexity","location":"src/routes/lsp.ts:149-177"},"correlatedSignals":["hot-file","critical-path-context","paired:unreachable-module","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"understand call graph before simplifying extractCallHierarchyLocations","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0146","severity":"medium","category":"cognitive-complexity","file":"src/utils/responseBuilder.ts","lineStart":75,"lineEnd":128,"title":"High cognitive complexity: searchResults (22)","reason":"Function cognitive complexity is 22 (threshold: 15). Nested branches compound reading difficulty.","files":["src/utils/responseBuilder.ts:75-128"],"suggestedFix":{"strategy":"Reduce nesting and simplify control flow.","steps":["Convert nested branches into early returns / guard clauses.","Extract deeply nested blocks into named helper functions.","Replace complex boolean chains with named predicates."]},"impact":"Lower cognitive complexity directly correlates with fewer bugs and faster code reviews.","tags":["complexity","readability","nesting"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"searchResults","lineHint":75,"file":"src/utils/responseBuilder.ts","expectedResult":"understand call graph before simplifying searchResults"}],"ruleId":"ast.cognitive-complexity","analysisLens":"ast","confidence":"low","evidence":{"category":"cognitive-complexity","location":"src/utils/responseBuilder.ts:75-128"},"correlatedSignals":["hot-file","critical-path-context","paired:distance-from-main-sequence","paired:similar-function-body","paired:over-abstraction"],"recommendedValidation":{"summary":"understand call graph before simplifying searchResults","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0147","severity":"medium","category":"dead-export","file":"src/types/errorGuards.ts","lineStart":17,"lineEnd":20,"title":"Unused export: ErrorWithStatus","reason":"Exported symbol \"ErrorWithStatus\" has no observed import or re-export usage in production or test files.","files":["src/types/errorGuards.ts:17-20"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ErrorWithStatus","lineHint":17,"file":"src/types/errorGuards.ts","expectedResult":"confirm \"ErrorWithStatus\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/errorGuards.ts:17-20"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"ErrorWithStatus\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0148","severity":"medium","category":"dead-export","file":"src/types/errorGuards.ts","lineStart":25,"lineEnd":28,"title":"Unused export: ErrorWithCode","reason":"Exported symbol \"ErrorWithCode\" has no observed import or re-export usage in production or test files.","files":["src/types/errorGuards.ts:25-28"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ErrorWithCode","lineHint":25,"file":"src/types/errorGuards.ts","expectedResult":"confirm \"ErrorWithCode\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/errorGuards.ts:25-28"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"ErrorWithCode\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0149","severity":"medium","category":"dead-export","file":"src/types/errorGuards.ts","lineStart":33,"lineEnd":35,"title":"Unused export: ErrorWithHeaders","reason":"Exported symbol \"ErrorWithHeaders\" has no observed import or re-export usage in production or test files.","files":["src/types/errorGuards.ts:33-35"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ErrorWithHeaders","lineHint":33,"file":"src/types/errorGuards.ts","expectedResult":"confirm \"ErrorWithHeaders\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/errorGuards.ts:33-35"},"correlatedSignals":["hot-file","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"ErrorWithHeaders\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0150","severity":"medium","category":"dead-export","file":"src/types/mcp.ts","lineStart":7,"lineEnd":13,"title":"Unused export: JsonSchema","reason":"Exported symbol \"JsonSchema\" has no observed import or re-export usage in production or test files.","files":["src/types/mcp.ts:7-13"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"JsonSchema","lineHint":7,"file":"src/types/mcp.ts","expectedResult":"confirm \"JsonSchema\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/mcp.ts:7-13"},"correlatedSignals":["paired:semantic-dead-export","paired:over-abstraction","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"confirm \"JsonSchema\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0151","severity":"medium","category":"dead-export","file":"src/types/mcp.ts","lineStart":15,"lineEnd":29,"title":"Unused export: JsonSchemaProperty","reason":"Exported symbol \"JsonSchemaProperty\" has no observed import or re-export usage in production or test files.","files":["src/types/mcp.ts:15-29"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"JsonSchemaProperty","lineHint":15,"file":"src/types/mcp.ts","expectedResult":"confirm \"JsonSchemaProperty\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/mcp.ts:15-29"},"correlatedSignals":["paired:semantic-dead-export","paired:over-abstraction","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"confirm \"JsonSchemaProperty\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0152","severity":"medium","category":"dead-export","file":"src/types/mcp.ts","lineStart":43,"lineEnd":47,"title":"Unused export: McpPromptArgument","reason":"Exported symbol \"McpPromptArgument\" has no observed import or re-export usage in production or test files.","files":["src/types/mcp.ts:43-47"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"McpPromptArgument","lineHint":43,"file":"src/types/mcp.ts","expectedResult":"confirm \"McpPromptArgument\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/mcp.ts:43-47"},"correlatedSignals":["paired:semantic-dead-export","paired:over-abstraction","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"confirm \"McpPromptArgument\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0153","severity":"medium","category":"dead-export","file":"src/types/mcp.ts","lineStart":52,"lineEnd":56,"title":"Unused export: McpPrompt","reason":"Exported symbol \"McpPrompt\" has no observed import or re-export usage in production or test files.","files":["src/types/mcp.ts:52-56"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"McpPrompt","lineHint":52,"file":"src/types/mcp.ts","expectedResult":"confirm \"McpPrompt\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/mcp.ts:52-56"},"correlatedSignals":["paired:semantic-dead-export","paired:over-abstraction","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"confirm \"McpPrompt\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0154","severity":"medium","category":"dead-export","file":"src/types/mcp.ts","lineStart":61,"lineEnd":64,"title":"Unused export: ListResponseMeta","reason":"Exported symbol \"ListResponseMeta\" has no observed import or re-export usage in production or test files.","files":["src/types/mcp.ts:61-64"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ListResponseMeta","lineHint":61,"file":"src/types/mcp.ts","expectedResult":"confirm \"ListResponseMeta\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/mcp.ts:61-64"},"correlatedSignals":["paired:semantic-dead-export","paired:over-abstraction","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"confirm \"ListResponseMeta\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0155","severity":"medium","category":"dead-export","file":"src/types/mcp.ts","lineStart":69,"lineEnd":72,"title":"Unused export: ListToolsResponse","reason":"Exported symbol \"ListToolsResponse\" has no observed import or re-export usage in production or test files.","files":["src/types/mcp.ts:69-72"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ListToolsResponse","lineHint":69,"file":"src/types/mcp.ts","expectedResult":"confirm \"ListToolsResponse\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/mcp.ts:69-72"},"correlatedSignals":["paired:semantic-dead-export","paired:over-abstraction","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"confirm \"ListToolsResponse\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0156","severity":"medium","category":"dead-export","file":"src/types/mcp.ts","lineStart":77,"lineEnd":80,"title":"Unused export: ListPromptsResponse","reason":"Exported symbol \"ListPromptsResponse\" has no observed import or re-export usage in production or test files.","files":["src/types/mcp.ts:77-80"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ListPromptsResponse","lineHint":77,"file":"src/types/mcp.ts","expectedResult":"confirm \"ListPromptsResponse\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/mcp.ts:77-80"},"correlatedSignals":["paired:semantic-dead-export","paired:over-abstraction","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"confirm \"ListPromptsResponse\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0157","severity":"medium","category":"dead-export","file":"src/types/responses.ts","lineStart":17,"lineEnd":23,"title":"Unused export: MatchLocation","reason":"Exported symbol \"MatchLocation\" has no observed import or re-export usage in production or test files.","files":["src/types/responses.ts:17-23"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"MatchLocation","lineHint":17,"file":"src/types/responses.ts","expectedResult":"confirm \"MatchLocation\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/responses.ts:17-23"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"MatchLocation\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0158","severity":"medium","category":"dead-export","file":"src/types/responses.ts","lineStart":93,"lineEnd":95,"title":"Unused export: LspReference","reason":"Exported symbol \"LspReference\" has no observed import or re-export usage in production or test files.","files":["src/types/responses.ts:93-95"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LspReference","lineHint":93,"file":"src/types/responses.ts","expectedResult":"confirm \"LspReference\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/responses.ts:93-95"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"LspReference\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0159","severity":"medium","category":"dead-export","file":"src/types/responses.ts","lineStart":100,"lineEnd":106,"title":"Unused export: LspCallHierarchyItem","reason":"Exported symbol \"LspCallHierarchyItem\" has no observed import or re-export usage in production or test files.","files":["src/types/responses.ts:100-106"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LspCallHierarchyItem","lineHint":100,"file":"src/types/responses.ts","expectedResult":"confirm \"LspCallHierarchyItem\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/responses.ts:100-106"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"LspCallHierarchyItem\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0160","severity":"medium","category":"dead-export","file":"src/types/responses.ts","lineStart":115,"lineEnd":120,"title":"Unused export: RepoStructure","reason":"Exported symbol \"RepoStructure\" has no observed import or re-export usage in production or test files.","files":["src/types/responses.ts:115-120"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"RepoStructure","lineHint":115,"file":"src/types/responses.ts","expectedResult":"confirm \"RepoStructure\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/responses.ts:115-120"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"RepoStructure\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0161","severity":"medium","category":"dead-export","file":"src/types/toolTypes.ts","lineStart":11,"lineEnd":16,"title":"Unused export: BaseQueryParams","reason":"Exported symbol \"BaseQueryParams\" has no observed import or re-export usage in production or test files.","files":["src/types/toolTypes.ts:11-16"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"BaseQueryParams","lineHint":11,"file":"src/types/toolTypes.ts","expectedResult":"confirm \"BaseQueryParams\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/toolTypes.ts:11-16"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"BaseQueryParams\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0162","severity":"medium","category":"dead-export","file":"src/types/toolTypes.ts","lineStart":21,"lineEnd":23,"title":"Unused export: QueryParamsResult","reason":"Exported symbol \"QueryParamsResult\" has no observed import or re-export usage in production or test files.","files":["src/types/toolTypes.ts:21-23"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"QueryParamsResult","lineHint":21,"file":"src/types/toolTypes.ts","expectedResult":"confirm \"QueryParamsResult\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/types/toolTypes.ts:21-23"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"QueryParamsResult\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0163","severity":"medium","category":"dead-export","file":"src/utils/logEmoji.ts","lineStart":34,"lineEnd":49,"title":"Unused export: LogEmojiKey","reason":"Exported symbol \"LogEmojiKey\" has no observed import or re-export usage in production or test files.","files":["src/utils/logEmoji.ts:34-49"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LogEmojiKey","lineHint":34,"file":"src/utils/logEmoji.ts","expectedResult":"confirm \"LogEmojiKey\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logEmoji.ts:34-49"},"correlatedSignals":["paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"LogEmojiKey\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0164","severity":"medium","category":"dead-export","file":"src/utils/logger.ts","lineStart":262,"lineEnd":272,"title":"Unused export: ToolLogEntry","reason":"Exported symbol \"ToolLogEntry\" has no observed import or re-export usage in production or test files.","files":["src/utils/logger.ts:262-272"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ToolLogEntry","lineHint":262,"file":"src/utils/logger.ts","expectedResult":"confirm \"ToolLogEntry\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/logger.ts:262-272"},"correlatedSignals":["hot-file","critical-path-context","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"confirm \"ToolLogEntry\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0165","severity":"medium","category":"dead-export","file":"src/utils/resilience.ts","lineStart":58,"lineEnd":63,"title":"Unused export: ResilienceConfig","reason":"Exported symbol \"ResilienceConfig\" has no observed import or re-export usage in production or test files.","files":["src/utils/resilience.ts:58-63"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ResilienceConfig","lineHint":58,"file":"src/utils/resilience.ts","expectedResult":"confirm \"ResilienceConfig\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/resilience.ts:58-63"},"correlatedSignals":["hot-file","critical-path-context","paired:semantic-dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"confirm \"ResilienceConfig\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0166","severity":"medium","category":"dead-export","file":"src/utils/responseParser.ts","lineStart":30,"lineEnd":34,"title":"Unused export: ResearchContext","reason":"Exported symbol \"ResearchContext\" has no observed import or re-export usage in production or test files.","files":["src/utils/responseParser.ts:30-34"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ResearchContext","lineHint":30,"file":"src/utils/responseParser.ts","expectedResult":"confirm \"ResearchContext\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/responseParser.ts:30-34"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"ResearchContext\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0167","severity":"medium","category":"dead-export","file":"src/utils/responseParser.ts","lineStart":39,"lineEnd":44,"title":"Unused export: BulkResultItem","reason":"Exported symbol \"BulkResultItem\" has no observed import or re-export usage in production or test files.","files":["src/utils/responseParser.ts:39-44"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"BulkResultItem","lineHint":39,"file":"src/utils/responseParser.ts","expectedResult":"confirm \"BulkResultItem\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/responseParser.ts:39-44"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"BulkResultItem\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0168","severity":"medium","category":"dead-export","file":"src/utils/responseParser.ts","lineStart":63,"lineEnd":83,"title":"Unused export: ParsedBulkResponse","reason":"Exported symbol \"ParsedBulkResponse\" has no observed import or re-export usage in production or test files.","files":["src/utils/responseParser.ts:63-83"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ParsedBulkResponse","lineHint":63,"file":"src/utils/responseParser.ts","expectedResult":"confirm \"ParsedBulkResponse\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/responseParser.ts:63-83"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"ParsedBulkResponse\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0169","severity":"medium","category":"dead-export","file":"src/utils/routeFactory.ts","lineStart":52,"lineEnd":67,"title":"Unused export: RouteConfig","reason":"Exported symbol \"RouteConfig\" has no observed import or re-export usage in production or test files.","files":["src/utils/routeFactory.ts:52-67"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"RouteConfig","lineHint":52,"file":"src/utils/routeFactory.ts","expectedResult":"confirm \"RouteConfig\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/utils/routeFactory.ts:52-67"},"correlatedSignals":["paired:unreachable-module","paired:unvalidated-input-sink","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"RouteConfig\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0170","severity":"medium","category":"dead-export","file":"src/validation/toolCallSchema.ts","lineStart":48,"lineEnd":48,"title":"Unused export: ToolCallBody","reason":"Exported symbol \"ToolCallBody\" has no observed import or re-export usage in production or test files.","files":["src/validation/toolCallSchema.ts:48-48"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ToolCallBody","lineHint":48,"file":"src/validation/toolCallSchema.ts","expectedResult":"confirm \"ToolCallBody\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/validation/toolCallSchema.ts:48-48"},"correlatedSignals":["paired:input-passthrough-risk","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"ToolCallBody\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0171","severity":"medium","category":"dead-export","file":"src/validation/toolCallSchema.ts","lineStart":57,"lineEnd":64,"title":"Unused export: ValidationResult","reason":"Exported symbol \"ValidationResult\" has no observed import or re-export usage in production or test files.","files":["src/validation/toolCallSchema.ts:57-64"],"suggestedFix":{"strategy":"Remove or internalize unused exports.","steps":["Confirm symbol is not part of intentional public API surface.","Remove export modifier or delete symbol if truly unused.","Re-run scan and tests to ensure no hidden runtime usage."]},"impact":"Shrinks public API surface and reduces accidental coupling.","tags":["dead-code","api-surface","cleanup"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ValidationResult","lineHint":57,"file":"src/validation/toolCallSchema.ts","expectedResult":"confirm \"ValidationResult\" has no import references before removing"}],"ruleId":"ast.dead-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-export","location":"src/validation/toolCallSchema.ts:57-64"},"correlatedSignals":["paired:input-passthrough-risk","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm \"ValidationResult\" has no import references before removing","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0172","severity":"medium","category":"dead-file","file":"src/server-init.ts","lineStart":1,"lineEnd":1,"title":"Potential dead file: src/server-init.ts","reason":"File has no inbound imports and no outbound dependencies. It may be stale or orphaned.","files":["src/server-init.ts"],"suggestedFix":{"strategy":"Validate ownership and remove if truly unused.","steps":["Confirm the file is not an explicit runtime entrypoint.","Search runtime config/router/bootstrap references for this file path.","Delete file if confirmed dead and re-run scan."]},"impact":"Reduces dead surface area and maintenance overhead.","tags":["dead-code","cleanup","hygiene"],"lspHints":[{"tool":"lspFindReferences","symbolName":"server-init.ts","lineHint":1,"file":"src/server-init.ts","expectedResult":"confirm zero references exist before deletion"}],"ruleId":"ast.dead-file","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-file","location":"src/server-init.ts:1-1"},"correlatedSignals":["top-level-effects","paired:await-in-loop","paired:unreachable-module","paired:untested-critical-code","paired:empty-catch","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"confirm zero references exist before deletion","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0173","severity":"medium","category":"dead-file","file":"src/types/toolTypes.ts","lineStart":1,"lineEnd":1,"title":"Potential dead file: src/types/toolTypes.ts","reason":"File has no inbound imports and no outbound dependencies. It may be stale or orphaned.","files":["src/types/toolTypes.ts"],"suggestedFix":{"strategy":"Validate ownership and remove if truly unused.","steps":["Confirm the file is not an explicit runtime entrypoint.","Search runtime config/router/bootstrap references for this file path.","Delete file if confirmed dead and re-run scan."]},"impact":"Reduces dead surface area and maintenance overhead.","tags":["dead-code","cleanup","hygiene"],"lspHints":[{"tool":"lspFindReferences","symbolName":"toolTypes.ts","lineHint":1,"file":"src/types/toolTypes.ts","expectedResult":"confirm zero references exist before deletion"}],"ruleId":"ast.dead-file","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-file","location":"src/types/toolTypes.ts:1-1"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:orphan-module","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm zero references exist before deletion","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0174","severity":"medium","category":"dead-file","file":"src/utils/logEmoji.ts","lineStart":1,"lineEnd":1,"title":"Potential dead file: src/utils/logEmoji.ts","reason":"File has no inbound imports and no outbound dependencies. It may be stale or orphaned.","files":["src/utils/logEmoji.ts"],"suggestedFix":{"strategy":"Validate ownership and remove if truly unused.","steps":["Confirm the file is not an explicit runtime entrypoint.","Search runtime config/router/bootstrap references for this file path.","Delete file if confirmed dead and re-run scan."]},"impact":"Reduces dead surface area and maintenance overhead.","tags":["dead-code","cleanup","hygiene"],"lspHints":[{"tool":"lspFindReferences","symbolName":"logEmoji.ts","lineHint":1,"file":"src/utils/logEmoji.ts","expectedResult":"confirm zero references exist before deletion"}],"ruleId":"ast.dead-file","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-file","location":"src/utils/logEmoji.ts:1-1"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:orphan-module","paired:move-to-caller"],"recommendedValidation":{"summary":"confirm zero references exist before deletion","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0175","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":39,"lineEnd":39,"title":"Unused re-export: FileContentQuery","reason":"Re-exported symbol \"FileContentQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:39-39"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:39-39"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0176","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":40,"lineEnd":40,"title":"Unused re-export: ContentResult","reason":"Re-exported symbol \"ContentResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:40-40"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:40-40"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0177","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":41,"lineEnd":41,"title":"Unused re-export: GitHubCodeSearchQuery","reason":"Re-exported symbol \"GitHubCodeSearchQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:41-41"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:41-41"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0178","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":42,"lineEnd":42,"title":"Unused re-export: SearchResult","reason":"Re-exported symbol \"SearchResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:42-42"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:42-42"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0179","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":43,"lineEnd":43,"title":"Unused re-export: GitHubPullRequestSearchQuery","reason":"Re-exported symbol \"GitHubPullRequestSearchQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:43-43"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:43-43"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0180","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":44,"lineEnd":44,"title":"Unused re-export: PullRequestSearchResult","reason":"Re-exported symbol \"PullRequestSearchResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:44-44"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:44-44"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0181","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":45,"lineEnd":45,"title":"Unused re-export: GitHubReposSearchQuery","reason":"Re-exported symbol \"GitHubReposSearchQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:45-45"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:45-45"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0182","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":46,"lineEnd":46,"title":"Unused re-export: RepoSearchResult","reason":"Re-exported symbol \"RepoSearchResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:46-46"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:46-46"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0183","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":47,"lineEnd":47,"title":"Unused re-export: GitHubViewRepoStructureQuery","reason":"Re-exported symbol \"GitHubViewRepoStructureQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:47-47"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:47-47"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0184","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":48,"lineEnd":48,"title":"Unused re-export: RepoStructureResult","reason":"Re-exported symbol \"RepoStructureResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:48-48"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:48-48"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0185","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":64,"lineEnd":64,"title":"Unused re-export: FetchContentQuery","reason":"Re-exported symbol \"FetchContentQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:64-64"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:64-64"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0186","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":65,"lineEnd":65,"title":"Unused re-export: FetchContentResult","reason":"Re-exported symbol \"FetchContentResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:65-65"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:65-65"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0187","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":66,"lineEnd":66,"title":"Unused re-export: FindFilesQuery","reason":"Re-exported symbol \"FindFilesQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:66-66"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:66-66"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0188","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":67,"lineEnd":67,"title":"Unused re-export: FindFilesResult","reason":"Re-exported symbol \"FindFilesResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:67-67"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:67-67"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0189","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":68,"lineEnd":68,"title":"Unused re-export: RipgrepSearchQuery","reason":"Re-exported symbol \"RipgrepSearchQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:68-68"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:68-68"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0190","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":69,"lineEnd":69,"title":"Unused re-export: SearchContentResult","reason":"Re-exported symbol \"SearchContentResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:69-69"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:69-69"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0191","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":70,"lineEnd":70,"title":"Unused re-export: ViewStructureQuery","reason":"Re-exported symbol \"ViewStructureQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:70-70"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:70-70"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0192","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":71,"lineEnd":71,"title":"Unused re-export: ViewStructureResult","reason":"Re-exported symbol \"ViewStructureResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:71-71"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:71-71"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0193","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":86,"lineEnd":86,"title":"Unused re-export: LSPGotoDefinitionQuery","reason":"Re-exported symbol \"LSPGotoDefinitionQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:86-86"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:86-86"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0194","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":87,"lineEnd":87,"title":"Unused re-export: GotoDefinitionResult","reason":"Re-exported symbol \"GotoDefinitionResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:87-87"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:87-87"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0195","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":88,"lineEnd":88,"title":"Unused re-export: LSPFindReferencesQuery","reason":"Re-exported symbol \"LSPFindReferencesQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:88-88"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:88-88"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0196","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":89,"lineEnd":89,"title":"Unused re-export: FindReferencesResult","reason":"Re-exported symbol \"FindReferencesResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:89-89"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:89-89"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0197","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":90,"lineEnd":90,"title":"Unused re-export: LSPCallHierarchyQuery","reason":"Re-exported symbol \"LSPCallHierarchyQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:90-90"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:90-90"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0198","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":91,"lineEnd":91,"title":"Unused re-export: CallHierarchyResult","reason":"Re-exported symbol \"CallHierarchyResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:91-91"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:91-91"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0199","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":102,"lineEnd":102,"title":"Unused re-export: PackageSearchQuery","reason":"Re-exported symbol \"PackageSearchQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:102-102"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:102-102"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0200","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":103,"lineEnd":103,"title":"Unused re-export: PackageSearchResult","reason":"Re-exported symbol \"PackageSearchResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:103-103"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:103-103"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0201","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":104,"lineEnd":104,"title":"Unused re-export: NpmPackageSearchQuery","reason":"Re-exported symbol \"NpmPackageSearchQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:104-104"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:104-104"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0202","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":105,"lineEnd":105,"title":"Unused re-export: PythonPackageSearchQuery","reason":"Re-exported symbol \"PythonPackageSearchQuery\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:105-105"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:105-105"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0203","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":113,"lineEnd":113,"title":"Unused re-export: createResult","reason":"Re-exported symbol \"createResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:113-113"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:113-113"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0204","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":113,"lineEnd":113,"title":"Unused re-export: createResponseFormat","reason":"Re-exported symbol \"createResponseFormat\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:113-113"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:113-113"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0205","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":117,"lineEnd":117,"title":"Unused re-export: createRoleBasedResult","reason":"Re-exported symbol \"createRoleBasedResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:117-117"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:117-117"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0206","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":118,"lineEnd":118,"title":"Unused re-export: ContentBuilder","reason":"Re-exported symbol \"ContentBuilder\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:118-118"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:118-118"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0207","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":119,"lineEnd":119,"title":"Unused re-export: QuickResult","reason":"Re-exported symbol \"QuickResult\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:119-119"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:119-119"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0208","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":120,"lineEnd":120,"title":"Unused re-export: StatusEmoji","reason":"Re-exported symbol \"StatusEmoji\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:120-120"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:120-120"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0209","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":121,"lineEnd":121,"title":"Unused re-export: StatusEmojis","reason":"Re-exported symbol \"StatusEmojis\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:121-121"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:121-121"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0210","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":125,"lineEnd":125,"title":"Unused re-export: ContentRole","reason":"Re-exported symbol \"ContentRole\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:125-125"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:125-125"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0211","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":126,"lineEnd":126,"title":"Unused re-export: RoleContentBlock","reason":"Re-exported symbol \"RoleContentBlock\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:126-126"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:126-126"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0212","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":127,"lineEnd":127,"title":"Unused re-export: RoleBasedResultOptions","reason":"Re-exported symbol \"RoleBasedResultOptions\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:127-127"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:127-127"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0213","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":128,"lineEnd":128,"title":"Unused re-export: RoleAnnotations","reason":"Re-exported symbol \"RoleAnnotations\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:128-128"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:128-128"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0214","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":132,"lineEnd":132,"title":"Unused re-export: ResearchResponse","reason":"Re-exported symbol \"ResearchResponse\" from ./utils/responseBuilder.js has no observed downstream imports from this module.","files":["src/index.ts:132-132"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:132-132"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0215","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":139,"lineEnd":139,"title":"Unused re-export: TOOL_NAMES","reason":"Re-exported symbol \"TOOL_NAMES\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:139-139"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:139-139"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0216","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":140,"lineEnd":140,"title":"Unused re-export: DESCRIPTIONS","reason":"Re-exported symbol \"DESCRIPTIONS\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:140-140"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:140-140"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0217","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":141,"lineEnd":141,"title":"Unused re-export: getToolHintsSync","reason":"Re-exported symbol \"getToolHintsSync\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:141-141"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:141-141"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0218","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":142,"lineEnd":142,"title":"Unused re-export: getGenericErrorHintsSync","reason":"Re-exported symbol \"getGenericErrorHintsSync\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:142-142"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:142-142"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0219","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":149,"lineEnd":149,"title":"Unused re-export: withBasicSecurityValidation","reason":"Re-exported symbol \"withBasicSecurityValidation\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:149-149"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:149-149"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0220","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":156,"lineEnd":156,"title":"Unused re-export: initialize","reason":"Re-exported symbol \"initialize\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:156-156"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:156-156"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0221","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":158,"lineEnd":158,"title":"Unused re-export: getGitHubToken","reason":"Re-exported symbol \"getGitHubToken\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:158-158"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:158-158"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0222","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":159,"lineEnd":159,"title":"Unused re-export: getToken","reason":"Re-exported symbol \"getToken\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:159-159"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:159-159"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0223","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":160,"lineEnd":160,"title":"Unused re-export: getTokenSource","reason":"Re-exported symbol \"getTokenSource\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:160-160"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:160-160"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0224","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":163,"lineEnd":163,"title":"Unused re-export: TokenSourceType","reason":"Re-exported symbol \"TokenSourceType\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:163-163"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:163-163"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0225","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":171,"lineEnd":171,"title":"Unused re-export: getSessionManager","reason":"Re-exported symbol \"getSessionManager\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:171-171"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:171-171"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0226","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":177,"lineEnd":177,"title":"Unused re-export: resetSessionManager","reason":"Re-exported symbol \"resetSessionManager\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:177-177"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:177-177"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0227","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":181,"lineEnd":181,"title":"Unused re-export: SessionData","reason":"Re-exported symbol \"SessionData\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:181-181"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:181-181"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0228","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":182,"lineEnd":182,"title":"Unused re-export: ToolCallData","reason":"Re-exported symbol \"ToolCallData\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:182-182"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:182-182"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0229","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":183,"lineEnd":183,"title":"Unused re-export: PromptCallData","reason":"Re-exported symbol \"PromptCallData\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:183-183"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:183-183"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0230","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":184,"lineEnd":184,"title":"Unused re-export: ErrorData","reason":"Re-exported symbol \"ErrorData\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:184-184"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:184-184"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0231","severity":"medium","category":"dead-re-export","file":"src/index.ts","lineStart":185,"lineEnd":185,"title":"Unused re-export: RateLimitData","reason":"Re-exported symbol \"RateLimitData\" from octocode-mcp/public has no observed downstream imports from this module.","files":["src/index.ts:185-185"],"suggestedFix":{"strategy":"Remove stale barrel re-exports.","steps":["Verify no dynamic import/runtime reflection depends on this export.","Remove the re-export clause.","Re-run scan to confirm barrel surface is still complete."]},"impact":"Keeps barrel modules focused and easier to reason about.","tags":["dead-code","barrel","cleanup"],"ruleId":"ast.dead-re-export","analysisLens":"ast","confidence":"low","evidence":{"category":"dead-re-export","location":"src/index.ts:185-185"},"correlatedSignals":["hot-file","critical-path-context","paired:barrel-explosion","paired:untested-critical-code"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0232","severity":"medium","category":"dependency-test-only","file":"src/routes/github.ts","lineStart":1,"lineEnd":1,"title":"Module imported only from tests: src/routes/github.ts","reason":"No production file imports this module, but tests do. Verify if this module belongs in test fixtures/helpers.","files":["src/routes/github.ts"],"suggestedFix":{"strategy":"Move test-only utilities to test scope or make production usage explicit.","steps":["Re-run import scanning after moving test-only modules to __tests__ or helper folders.","If this is shared production utility, add a non-test entrypoint/import.","Remove dead or stale production references and delete unused module if confirmed."]},"impact":"Reduces shipping of non-production-only modules and clarifies ownership boundaries.","tags":["testing","dead-code","dependency"],"ruleId":"graph.dependency-test-only","analysisLens":"graph","confidence":"medium","evidence":{"category":"dependency-test-only","location":"src/routes/github.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:unreachable-module","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0233","severity":"medium","category":"dependency-test-only","file":"src/routes/local.ts","lineStart":1,"lineEnd":1,"title":"Module imported only from tests: src/routes/local.ts","reason":"No production file imports this module, but tests do. Verify if this module belongs in test fixtures/helpers.","files":["src/routes/local.ts"],"suggestedFix":{"strategy":"Move test-only utilities to test scope or make production usage explicit.","steps":["Re-run import scanning after moving test-only modules to __tests__ or helper folders.","If this is shared production utility, add a non-test entrypoint/import.","Remove dead or stale production references and delete unused module if confirmed."]},"impact":"Reduces shipping of non-production-only modules and clarifies ownership boundaries.","tags":["testing","dead-code","dependency"],"ruleId":"graph.dependency-test-only","analysisLens":"graph","confidence":"medium","evidence":{"category":"dependency-test-only","location":"src/routes/local.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:unreachable-module","paired:similar-function-body","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0234","severity":"medium","category":"dependency-test-only","file":"src/routes/lsp.ts","lineStart":1,"lineEnd":1,"title":"Module imported only from tests: src/routes/lsp.ts","reason":"No production file imports this module, but tests do. Verify if this module belongs in test fixtures/helpers.","files":["src/routes/lsp.ts"],"suggestedFix":{"strategy":"Move test-only utilities to test scope or make production usage explicit.","steps":["Re-run import scanning after moving test-only modules to __tests__ or helper folders.","If this is shared production utility, add a non-test entrypoint/import.","Remove dead or stale production references and delete unused module if confirmed."]},"impact":"Reduces shipping of non-production-only modules and clarifies ownership boundaries.","tags":["testing","dead-code","dependency"],"ruleId":"graph.dependency-test-only","analysisLens":"graph","confidence":"medium","evidence":{"category":"dependency-test-only","location":"src/routes/lsp.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:cognitive-complexity","paired:unreachable-module","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0235","severity":"medium","category":"dependency-test-only","file":"src/routes/package.ts","lineStart":1,"lineEnd":1,"title":"Module imported only from tests: src/routes/package.ts","reason":"No production file imports this module, but tests do. Verify if this module belongs in test fixtures/helpers.","files":["src/routes/package.ts"],"suggestedFix":{"strategy":"Move test-only utilities to test scope or make production usage explicit.","steps":["Re-run import scanning after moving test-only modules to __tests__ or helper folders.","If this is shared production utility, add a non-test entrypoint/import.","Remove dead or stale production references and delete unused module if confirmed."]},"impact":"Reduces shipping of non-production-only modules and clarifies ownership boundaries.","tags":["testing","dead-code","dependency"],"ruleId":"graph.dependency-test-only","analysisLens":"graph","confidence":"medium","evidence":{"category":"dependency-test-only","location":"src/routes/package.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:cognitive-complexity","paired:unreachable-module","paired:unvalidated-input-sink","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0236","severity":"medium","category":"empty-catch","file":"src/server-init.ts","lineStart":172,"lineEnd":174,"title":"Empty catch block silently swallows errors","reason":"Catch block at line 172 has no statements — errors are silently ignored.","files":["src/server-init.ts:172-174"],"suggestedFix":{"strategy":"Log, re-throw, or handle the error explicitly.","steps":["Add error logging (console.error or a logger) at minimum.","Re-throw if the caller should handle the error.","Add a comment explaining why swallowing is intentional, if it truly is."]},"impact":"Prevents silent failures that are extremely hard to debug in production.","tags":["error-handling","reliability","silent-failure"],"ruleId":"ast.empty-catch","analysisLens":"ast","confidence":"low","evidence":{"category":"empty-catch","location":"src/server-init.ts:172-174"},"correlatedSignals":["top-level-effects","paired:await-in-loop","paired:unreachable-module","paired:untested-critical-code","paired:dead-file","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0237","severity":"medium","category":"empty-catch","file":"src/utils/logger.ts","lineStart":109,"lineEnd":111,"title":"Empty catch block silently swallows errors","reason":"Catch block at line 109 has no statements — errors are silently ignored.","files":["src/utils/logger.ts:109-111"],"suggestedFix":{"strategy":"Log, re-throw, or handle the error explicitly.","steps":["Add error logging (console.error or a logger) at minimum.","Re-throw if the caller should handle the error.","Add a comment explaining why swallowing is intentional, if it truly is."]},"impact":"Prevents silent failures that are extremely hard to debug in production.","tags":["error-handling","reliability","silent-failure"],"ruleId":"ast.empty-catch","analysisLens":"ast","confidence":"low","evidence":{"category":"empty-catch","location":"src/utils/logger.ts:109-111"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0238","severity":"medium","category":"empty-catch","file":"src/utils/logger.ts","lineStart":130,"lineEnd":132,"title":"Empty catch block silently swallows errors","reason":"Catch block at line 130 has no statements — errors are silently ignored.","files":["src/utils/logger.ts:130-132"],"suggestedFix":{"strategy":"Log, re-throw, or handle the error explicitly.","steps":["Add error logging (console.error or a logger) at minimum.","Re-throw if the caller should handle the error.","Add a comment explaining why swallowing is intentional, if it truly is."]},"impact":"Prevents silent failures that are extremely hard to debug in production.","tags":["error-handling","reliability","silent-failure"],"ruleId":"ast.empty-catch","analysisLens":"ast","confidence":"low","evidence":{"category":"empty-catch","location":"src/utils/logger.ts:130-132"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:excessive-parameters","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0239","severity":"medium","category":"excessive-parameters","file":"src/utils/logger.ts","lineStart":285,"lineEnd":302,"title":"Excessive parameters: logToolSuccess (6 params)","reason":"Function has 6 parameters (threshold: 5). High parameter counts make call sites hard to read and signal the function may be doing too much.","files":["src/utils/logger.ts:285-302"],"suggestedFix":{"strategy":"Introduce a parameter object or split the function.","steps":["Group related parameters into an options/config object.","Use destructuring at the function signature for clarity.","Consider splitting into smaller, focused functions if params serve different concerns."]},"impact":"Improves call-site readability and makes the API easier to evolve.","tags":["api-design","readability","refactor"],"ruleId":"ast.excessive-parameters","analysisLens":"ast","confidence":"low","evidence":{"category":"excessive-parameters","location":"src/utils/logger.ts:285-302"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0240","severity":"medium","category":"excessive-parameters","file":"src/utils/logger.ts","lineStart":307,"lineEnd":324,"title":"Excessive parameters: logToolError (6 params)","reason":"Function has 6 parameters (threshold: 5). High parameter counts make call sites hard to read and signal the function may be doing too much.","files":["src/utils/logger.ts:307-324"],"suggestedFix":{"strategy":"Introduce a parameter object or split the function.","steps":["Group related parameters into an options/config object.","Use destructuring at the function signature for clarity.","Consider splitting into smaller, focused functions if params serve different concerns."]},"impact":"Improves call-site readability and makes the API easier to evolve.","tags":["api-design","readability","refactor"],"ruleId":"ast.excessive-parameters","analysisLens":"ast","confidence":"low","evidence":{"category":"excessive-parameters","location":"src/utils/logger.ts:307-324"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:input-passthrough-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0241","severity":"medium","category":"export-star-leak","file":"src/validation/index.ts","lineStart":2,"lineEnd":2,"title":"export * leaks entire module surface: ./httpPreprocess.js","reason":"`export * from './httpPreprocess.js'` re-exports every symbol from the source, defeating granular tree-shaking. Target exports 10 symbols.","files":["src/validation/index.ts:2-2"],"suggestedFix":{"strategy":"Replace export * with explicit named re-exports.","steps":["List the symbols actually consumed from `./httpPreprocess.js` by downstream modules.","Replace `export * from './httpPreprocess.js'` with `export { A, B, C } from './httpPreprocess.js'`.","This lets bundlers eliminate unused re-exports during tree-shaking."]},"impact":"Explicit re-exports enable precise tree-shaking and make the public API surface visible.","tags":["tree-shaking","bundle-size","export-star","api-surface"],"ruleId":"ast.export-star-leak","analysisLens":"ast","confidence":"low","evidence":{"category":"export-star-leak","location":"src/validation/index.ts:2-2"},"correlatedSignals":["paired:architecture-sdp-violation","paired:re-export-duplication"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0242","severity":"medium","category":"feature-envy","file":"src/utils/responseFactory.ts","lineStart":10,"lineEnd":10,"title":"Feature envy: src/utils/responseFactory.ts → src/types/guards.ts","reason":"Module imports 5/8 symbols (63%) from \"src/types/guards.ts\". This suggests the logic may belong in or closer to the target module.","files":["src/utils/responseFactory.ts","src/types/guards.ts"],"suggestedFix":{"strategy":"Move dependent logic to the target module or extract a shared module.","steps":["Identify which functions/logic in this file use the imported symbols.","Move that logic to the target module if it belongs there.","If shared, extract a dedicated module that both can import from.","Reduce the import surface by passing data instead of importing behaviors."]},"impact":"Misplaced logic increases coupling and makes changes ripple across module boundaries.","tags":["coupling","responsibility","misplaced-logic"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"responseFactory.ts","lineHint":10,"file":"src/utils/responseFactory.ts","expectedResult":"trace which functions use imports from src/types/guards.ts to decide what to move"},{"tool":"lspGotoDefinition","symbolName":"guards.ts","lineHint":10,"file":"src/utils/responseFactory.ts","expectedResult":"inspect target module to evaluate if logic belongs there"}],"ruleId":"hybrid.feature-envy","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"feature-envy","location":"src/utils/responseFactory.ts:10-10"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:move-to-caller","paired:narrowable-type"],"recommendedValidation":{"summary":"trace which functions use imports from src/types/guards.ts to decide what to move","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0243","severity":"medium","category":"import-side-effect-risk","file":"src/server-init.ts","lineStart":182,"lineEnd":182,"title":"Import-time side effects (2): src/server-init.ts","reason":"Module executes work at import time: process.on() (line 182); process.on() (line 183). Risk score: 8 (ast=8, impact=+0, role=-0). Confidence: high.","files":["src/server-init.ts"],"suggestedFix":{"strategy":"Move import-time side effects behind explicit initialization or lazy loading.","steps":["Wrap startup logic in an exported init() function instead of running at module scope.","Replace synchronous I/O with async alternatives called at runtime.","Guard side-effect imports with dynamic import() behind feature checks.","If this is an intentional entrypoint, consider adding a suppression comment."]},"impact":"Importing this module triggers 2 side effect(s). With fan-in=0, unintended imports can degrade startup latency and cause surprising runtime behavior.","tags":["import-side-effect","startup","architecture","performance"],"lspHints":[{"tool":"lspFindReferences","symbolName":"server-init","lineHint":1,"file":"src/server-init.ts","expectedResult":"find all modules that import this file and may trigger side effects"}],"ruleId":"hybrid.import-side-effect-risk","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"import-side-effect-risk","location":"src/server-init.ts:182-182"},"correlatedSignals":["top-level-effects","paired:await-in-loop","paired:unreachable-module","paired:untested-critical-code","paired:dead-file","paired:empty-catch","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"find all modules that import this file and may trigger side effects","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0244","severity":"medium","category":"import-side-effect-risk","file":"src/server.ts","lineStart":269,"lineEnd":269,"title":"Import-time side effects (2): src/server.ts","reason":"Module executes work at import time: process.on() (line 269); process.on() (line 270). Risk score: 10 (ast=8, impact=+6, role=-4). Confidence: high. Architecture context: on critical path, entrypoint (discounted).","files":["src/server.ts"],"suggestedFix":{"strategy":"Move import-time side effects behind explicit initialization or lazy loading.","steps":["Wrap startup logic in an exported init() function instead of running at module scope.","Replace synchronous I/O with async alternatives called at runtime.","Guard side-effect imports with dynamic import() behind feature checks.","If this is an intentional entrypoint, consider adding a suppression comment."]},"impact":"Importing this module triggers 2 side effect(s). With fan-in=0, unintended imports can degrade startup latency and cause surprising runtime behavior.","tags":["import-side-effect","startup","architecture","performance"],"lspHints":[{"tool":"lspFindReferences","symbolName":"server","lineHint":1,"file":"src/server.ts","expectedResult":"find all modules that import this file and may trigger side effects"}],"ruleId":"hybrid.import-side-effect-risk","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"import-side-effect-risk","location":"src/server.ts:269-269"},"correlatedSignals":["hot-file","critical-path-context","top-level-effects","paired:dependency-critical-path","paired:untested-critical-code","paired:listener-leak-risk","paired:missing-error-boundary","paired:uncleared-timer"],"recommendedValidation":{"summary":"find all modules that import this file and may trigger side effects","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0245","severity":"medium","category":"input-passthrough-risk","file":"src/middleware/logger.ts","lineStart":19,"lineEnd":60,"title":"Input passthrough without validation in requestLogger(req)","reason":"Parameter 'req' (external input) is passed to getRequestId without validation. Downstream callees may not validate either.","files":["src/middleware/logger.ts"],"suggestedFix":{"strategy":"Validate input before passing to downstream functions.","steps":["Add schema validation (e.g. zod, joi) at the entry point.","Trace downstream: lspCallHierarchy(outgoing) on requestLogger to verify callees validate.","Search for validation middleware: localSearchCode for guard/validate/sanitize patterns."]},"impact":"Unchecked input passed downstream can reach sinks in callees — validation gaps compound across the call chain.","tags":["security","input-validation","passthrough"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"requestLogger","lineHint":19,"file":"src/middleware/logger.ts","expectedResult":"trace outgoing calls to verify downstream validation of req"},{"tool":"lspFindReferences","symbolName":"req","lineHint":19,"file":"src/middleware/logger.ts","expectedResult":"find all usages of req to check if validation occurs upstream"}],"ruleId":"security.input-passthrough-risk","confidence":"medium","evidence":{"category":"input-passthrough-risk","location":"src/middleware/logger.ts:19-60","sourceParameters":["req"],"sink":"getRequestId","sanitizerStatus":"missing","propagationSteps":["getRequestId:25"]},"analysisLens":"hybrid","correlatedSignals":["critical-path-context","paired:listener-leak-risk","paired:similar-function-body","paired:move-to-caller"],"recommendedValidation":{"summary":"trace outgoing calls to verify downstream validation of req","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"getRequestId","lineStart":25,"lineEnd":25,"label":"propagation step"}]},{"id":"AST-ISSUE-0246","severity":"medium","category":"input-passthrough-risk","file":"src/utils/logger.ts","lineStart":404,"lineEnd":413,"title":"Input passthrough without validation in sanitizeQueryParams(query)","reason":"Parameter 'query' (external input) is passed to Object.entries without validation. Downstream callees may not validate either.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Validate input before passing to downstream functions.","steps":["Add schema validation (e.g. zod, joi) at the entry point.","Trace downstream: lspCallHierarchy(outgoing) on sanitizeQueryParams to verify callees validate.","Search for validation middleware: localSearchCode for guard/validate/sanitize patterns."]},"impact":"Unchecked input passed downstream can reach sinks in callees — validation gaps compound across the call chain.","tags":["security","input-validation","passthrough"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"sanitizeQueryParams","lineHint":404,"file":"src/utils/logger.ts","expectedResult":"trace outgoing calls to verify downstream validation of query"},{"tool":"lspFindReferences","symbolName":"query","lineHint":404,"file":"src/utils/logger.ts","expectedResult":"find all usages of query to check if validation occurs upstream"}],"ruleId":"security.input-passthrough-risk","confidence":"medium","evidence":{"category":"input-passthrough-risk","location":"src/utils/logger.ts:404-413","sourceParameters":["query"],"sink":"Object.entries","sanitizerStatus":"missing","propagationSteps":["Object.entries:407"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:listener-leak-risk"],"recommendedValidation":{"summary":"trace outgoing calls to verify downstream validation of query","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"Object.entries","lineStart":407,"lineEnd":407,"label":"propagation step"}]},{"id":"AST-ISSUE-0247","severity":"medium","category":"input-passthrough-risk","file":"src/validation/toolCallSchema.ts","lineStart":85,"lineEnd":105,"title":"Input passthrough without validation in validateToolCallBody(body)","reason":"Parameter 'body' (external input) is passed to toolCallBodySchema.safeParse without validation. Downstream callees may not validate either.","files":["src/validation/toolCallSchema.ts"],"suggestedFix":{"strategy":"Validate input before passing to downstream functions.","steps":["Add schema validation (e.g. zod, joi) at the entry point.","Trace downstream: lspCallHierarchy(outgoing) on validateToolCallBody to verify callees validate.","Search for validation middleware: localSearchCode for guard/validate/sanitize patterns."]},"impact":"Unchecked input passed downstream can reach sinks in callees — validation gaps compound across the call chain.","tags":["security","input-validation","passthrough"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"validateToolCallBody","lineHint":85,"file":"src/validation/toolCallSchema.ts","expectedResult":"trace outgoing calls to verify downstream validation of body"},{"tool":"lspFindReferences","symbolName":"body","lineHint":85,"file":"src/validation/toolCallSchema.ts","expectedResult":"find all usages of body to check if validation occurs upstream"}],"ruleId":"security.input-passthrough-risk","confidence":"medium","evidence":{"category":"input-passthrough-risk","location":"src/validation/toolCallSchema.ts:85-105","sourceParameters":["body"],"sink":"toolCallBodySchema.safeParse","sanitizerStatus":"missing","propagationSteps":["toolCallBodySchema.safeParse:86"]},"analysisLens":"hybrid","correlatedSignals":["paired:dead-export","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"trace outgoing calls to verify downstream validation of body","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"toolCallBodySchema.safeParse","lineStart":86,"lineEnd":86,"label":"propagation step"}]},{"id":"AST-ISSUE-0248","severity":"medium","category":"listener-leak-risk","file":"src/middleware/logger.ts","lineStart":30,"lineEnd":57,"title":"1 event listener(s) added without any removal","reason":"addEventListener/on without corresponding removeEventListener/off risks memory leaks if the target outlives the subscriber.","files":["src/middleware/logger.ts"],"suggestedFix":{"strategy":"Add corresponding listener removal in cleanup.","steps":["Store the handler reference in a variable.","Call removeEventListener/off in cleanup (unmount, dispose, close).","Or use AbortController signal for automatic cleanup."]},"impact":"Listener references prevent garbage collection of the subscriber, causing memory growth proportional to event-target lifetime.","tags":["performance","memory-leak","events"],"ruleId":"ast.listener-leak-risk","analysisLens":"ast","confidence":"low","evidence":{"category":"listener-leak-risk","location":"src/middleware/logger.ts:30-57"},"correlatedSignals":["critical-path-context","paired:input-passthrough-risk","paired:similar-function-body","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0249","severity":"medium","category":"listener-leak-risk","file":"src/routes/tools.ts","lineStart":575,"lineEnd":581,"title":"1 event listener(s) added without any removal","reason":"addEventListener/on without corresponding removeEventListener/off risks memory leaks if the target outlives the subscriber.","files":["src/routes/tools.ts"],"suggestedFix":{"strategy":"Add corresponding listener removal in cleanup.","steps":["Store the handler reference in a variable.","Call removeEventListener/off in cleanup (unmount, dispose, close).","Or use AbortController signal for automatic cleanup."]},"impact":"Listener references prevent garbage collection of the subscriber, causing memory growth proportional to event-target lifetime.","tags":["performance","memory-leak","events"],"ruleId":"ast.listener-leak-risk","analysisLens":"ast","confidence":"low","evidence":{"category":"listener-leak-risk","location":"src/routes/tools.ts:575-581"},"correlatedSignals":["hot-file","critical-path-context","paired:hardcoded-secret","paired:prototype-pollution-risk","paired:untested-critical-code","paired:unvalidated-input-sink","paired:over-abstraction","paired:type-assertion-escape"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0250","severity":"medium","category":"listener-leak-risk","file":"src/server-init.ts","lineStart":73,"lineEnd":183,"title":"4 event listener(s) added without any removal","reason":"addEventListener/on without corresponding removeEventListener/off risks memory leaks if the target outlives the subscriber.","files":["src/server-init.ts"],"suggestedFix":{"strategy":"Add corresponding listener removal in cleanup.","steps":["Store the handler reference in a variable.","Call removeEventListener/off in cleanup (unmount, dispose, close).","Or use AbortController signal for automatic cleanup."]},"impact":"Listener references prevent garbage collection of the subscriber, causing memory growth proportional to event-target lifetime.","tags":["performance","memory-leak","events"],"ruleId":"ast.listener-leak-risk","analysisLens":"ast","confidence":"low","evidence":{"category":"listener-leak-risk","location":"src/server-init.ts:73-183"},"correlatedSignals":["top-level-effects","paired:await-in-loop","paired:unreachable-module","paired:untested-critical-code","paired:dead-file","paired:empty-catch","paired:import-side-effect-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0251","severity":"medium","category":"listener-leak-risk","file":"src/server.ts","lineStart":269,"lineEnd":270,"title":"2 event listener(s) added without any removal","reason":"addEventListener/on without corresponding removeEventListener/off risks memory leaks if the target outlives the subscriber.","files":["src/server.ts"],"suggestedFix":{"strategy":"Add corresponding listener removal in cleanup.","steps":["Store the handler reference in a variable.","Call removeEventListener/off in cleanup (unmount, dispose, close).","Or use AbortController signal for automatic cleanup."]},"impact":"Listener references prevent garbage collection of the subscriber, causing memory growth proportional to event-target lifetime.","tags":["performance","memory-leak","events"],"ruleId":"ast.listener-leak-risk","analysisLens":"ast","confidence":"low","evidence":{"category":"listener-leak-risk","location":"src/server.ts:269-270"},"correlatedSignals":["hot-file","critical-path-context","top-level-effects","paired:dependency-critical-path","paired:untested-critical-code","paired:import-side-effect-risk","paired:missing-error-boundary","paired:uncleared-timer"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0252","severity":"medium","category":"listener-leak-risk","file":"src/utils/asyncTimeout.ts","lineStart":59,"lineEnd":108,"title":"2 event listener(s) added without any removal","reason":"addEventListener/on without corresponding removeEventListener/off risks memory leaks if the target outlives the subscriber.","files":["src/utils/asyncTimeout.ts"],"suggestedFix":{"strategy":"Add corresponding listener removal in cleanup.","steps":["Store the handler reference in a variable.","Call removeEventListener/off in cleanup (unmount, dispose, close).","Or use AbortController signal for automatic cleanup."]},"impact":"Listener references prevent garbage collection of the subscriber, causing memory growth proportional to event-target lifetime.","tags":["performance","memory-leak","events"],"ruleId":"ast.listener-leak-risk","analysisLens":"ast","confidence":"low","evidence":{"category":"listener-leak-risk","location":"src/utils/asyncTimeout.ts:59-108"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0253","severity":"medium","category":"listener-leak-risk","file":"src/utils/logger.ts","lineStart":375,"lineEnd":388,"title":"1 event listener(s) added without any removal","reason":"addEventListener/on without corresponding removeEventListener/off risks memory leaks if the target outlives the subscriber.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Add corresponding listener removal in cleanup.","steps":["Store the handler reference in a variable.","Call removeEventListener/off in cleanup (unmount, dispose, close).","Or use AbortController signal for automatic cleanup."]},"impact":"Listener references prevent garbage collection of the subscriber, causing memory growth proportional to event-target lifetime.","tags":["performance","memory-leak","events"],"ruleId":"ast.listener-leak-risk","analysisLens":"ast","confidence":"low","evidence":{"category":"listener-leak-risk","location":"src/utils/logger.ts:375-388"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0254","severity":"medium","category":"low-cohesion","file":"src/mcpCache.ts","lineStart":1,"lineEnd":1,"title":"Low cohesion: src/mcpCache.ts (LCOM=2)","reason":"Module exports 3 consumed symbols that form 2 independent groups. Consumers never import symbols across groups — the module serves unrelated purposes.","files":["src/mcpCache.ts"],"suggestedFix":{"strategy":"Split into 2 focused modules, one per cohesion group.","steps":["Identify which exports belong to each independent group.","Create a new module for each group with a descriptive name.","Move exports and their dependencies to the appropriate module.","Update consumer imports to point to the new modules."]},"impact":"Higher cohesion = easier navigation, focused testing, and smaller change blast radius.","tags":["cohesion","responsibility","architecture"],"ruleId":"hybrid.low-cohesion","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"low-cohesion","location":"src/mcpCache.ts:1-1"},"correlatedSignals":["paired:distance-from-main-sequence","paired:missing-error-boundary","paired:promise-misuse","paired:move-to-caller"],"recommendedValidation":{"summary":"Validate both the structural location and the behavioral path before presenting the claim as fact.","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0255","severity":"medium","category":"low-cohesion","file":"src/utils/logger.ts","lineStart":1,"lineEnd":1,"title":"Low cohesion: src/utils/logger.ts (LCOM=2)","reason":"Module exports 6 consumed symbols that form 2 independent groups. Consumers never import symbols across groups — the module serves unrelated purposes.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Split into 2 focused modules, one per cohesion group.","steps":["Identify which exports belong to each independent group.","Create a new module for each group with a descriptive name.","Move exports and their dependencies to the appropriate module.","Update consumer imports to point to the new modules."]},"impact":"Higher cohesion = easier navigation, focused testing, and smaller change blast radius.","tags":["cohesion","responsibility","architecture"],"ruleId":"hybrid.low-cohesion","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"low-cohesion","location":"src/utils/logger.ts:1-1"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"Validate both the structural location and the behavioral path before presenting the claim as fact.","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0256","severity":"medium","category":"missing-error-boundary","file":"src/mcpCache.ts","lineStart":23,"lineEnd":28,"title":"Missing error boundary: <anonymous> (2 awaits, no try-catch)","reason":"Async function \"<anonymous>\" has 2 await(s) but no try-catch. Rejected promises propagate as unhandled rejections.","files":["src/mcpCache.ts"],"suggestedFix":{"strategy":"Wrap await calls in try-catch or add a .catch() handler.","steps":["Add a try-catch block around the await expressions.","Handle errors appropriately (log, return default, re-throw with context).","If the caller handles errors, document it with a comment."]},"impact":"Unhandled promise rejections crash Node.js processes and cause silent failures in browsers.","tags":["error-handling","async","reliability"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"<anonymous>","lineHint":23,"file":"src/mcpCache.ts","expectedResult":"check if callers wrap this in try-catch or .catch() — if so, the boundary may exist upstream"}],"ruleId":"ast.missing-error-boundary","analysisLens":"ast","confidence":"low","evidence":{"category":"missing-error-boundary","location":"src/mcpCache.ts:23-28"},"correlatedSignals":["paired:distance-from-main-sequence","paired:low-cohesion","paired:promise-misuse","paired:move-to-caller"],"recommendedValidation":{"summary":"check if callers wrap this in try-catch or .catch() — if so, the boundary may exist upstream","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0257","severity":"medium","category":"missing-error-boundary","file":"src/server-init.ts","lineStart":89,"lineEnd":109,"title":"Missing error boundary: waitForReady (2 awaits, no try-catch)","reason":"Async function \"waitForReady\" has 2 await(s) but no try-catch. Rejected promises propagate as unhandled rejections.","files":["src/server-init.ts"],"suggestedFix":{"strategy":"Wrap await calls in try-catch or add a .catch() handler.","steps":["Add a try-catch block around the await expressions.","Handle errors appropriately (log, return default, re-throw with context).","If the caller handles errors, document it with a comment."]},"impact":"Unhandled promise rejections crash Node.js processes and cause silent failures in browsers.","tags":["error-handling","async","reliability"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"waitForReady","lineHint":89,"file":"src/server-init.ts","expectedResult":"check if callers wrap this in try-catch or .catch() — if so, the boundary may exist upstream"}],"ruleId":"ast.missing-error-boundary","analysisLens":"ast","confidence":"low","evidence":{"category":"missing-error-boundary","location":"src/server-init.ts:89-109"},"correlatedSignals":["top-level-effects","paired:await-in-loop","paired:unreachable-module","paired:untested-critical-code","paired:dead-file","paired:empty-catch","paired:import-side-effect-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"check if callers wrap this in try-catch or .catch() — if so, the boundary may exist upstream","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0258","severity":"medium","category":"missing-error-boundary","file":"src/server.ts","lineStart":219,"lineEnd":266,"title":"Missing error boundary: startServer (2 awaits, no try-catch)","reason":"Async function \"startServer\" has 2 await(s) but no try-catch. Rejected promises propagate as unhandled rejections.","files":["src/server.ts"],"suggestedFix":{"strategy":"Wrap await calls in try-catch or add a .catch() handler.","steps":["Add a try-catch block around the await expressions.","Handle errors appropriately (log, return default, re-throw with context).","If the caller handles errors, document it with a comment."]},"impact":"Unhandled promise rejections crash Node.js processes and cause silent failures in browsers.","tags":["error-handling","async","reliability"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"startServer","lineHint":219,"file":"src/server.ts","expectedResult":"check if callers wrap this in try-catch or .catch() — if so, the boundary may exist upstream"}],"ruleId":"ast.missing-error-boundary","analysisLens":"ast","confidence":"low","evidence":{"category":"missing-error-boundary","location":"src/server.ts:219-266"},"correlatedSignals":["hot-file","critical-path-context","top-level-effects","paired:dependency-critical-path","paired:untested-critical-code","paired:import-side-effect-risk","paired:listener-leak-risk","paired:uncleared-timer"],"recommendedValidation":{"summary":"check if callers wrap this in try-catch or .catch() — if so, the boundary may exist upstream","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0259","severity":"medium","category":"orphan-module","file":"src/server-init.ts","lineStart":1,"lineEnd":1,"title":"Orphan module: src/server-init.ts","reason":"Module has no inbound or outbound dependencies — completely disconnected from the module graph.","files":["src/server-init.ts"],"suggestedFix":{"strategy":"Delete if truly unused, or wire into module graph.","steps":["Check if the file is a runtime entrypoint, route, or config.","If truly disconnected, delete and re-run scan.","If needed, add an explicit import from the appropriate parent module."]},"impact":"Removes dead surface area and clarifies module ownership.","tags":["dead-code","dependency","isolation"],"ruleId":"graph.orphan-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"orphan-module","location":"src/server-init.ts:1-1"},"correlatedSignals":["top-level-effects","paired:await-in-loop","paired:unreachable-module","paired:untested-critical-code","paired:dead-file","paired:empty-catch","paired:import-side-effect-risk","paired:listener-leak-risk"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0260","severity":"medium","category":"orphan-module","file":"src/types/toolTypes.ts","lineStart":1,"lineEnd":1,"title":"Orphan module: src/types/toolTypes.ts","reason":"Module has no inbound or outbound dependencies — completely disconnected from the module graph.","files":["src/types/toolTypes.ts"],"suggestedFix":{"strategy":"Delete if truly unused, or wire into module graph.","steps":["Check if the file is a runtime entrypoint, route, or config.","If truly disconnected, delete and re-run scan.","If needed, add an explicit import from the appropriate parent module."]},"impact":"Removes dead surface area and clarifies module ownership.","tags":["dead-code","dependency","isolation"],"ruleId":"graph.orphan-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"orphan-module","location":"src/types/toolTypes.ts:1-1"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0261","severity":"medium","category":"orphan-module","file":"src/utils/logEmoji.ts","lineStart":1,"lineEnd":1,"title":"Orphan module: src/utils/logEmoji.ts","reason":"Module has no inbound or outbound dependencies — completely disconnected from the module graph.","files":["src/utils/logEmoji.ts"],"suggestedFix":{"strategy":"Delete if truly unused, or wire into module graph.","steps":["Check if the file is a runtime entrypoint, route, or config.","If truly disconnected, delete and re-run scan.","If needed, add an explicit import from the appropriate parent module."]},"impact":"Removes dead surface area and clarifies module ownership.","tags":["dead-code","dependency","isolation"],"ruleId":"graph.orphan-module","analysisLens":"graph","confidence":"medium","evidence":{"category":"orphan-module","location":"src/utils/logEmoji.ts:1-1"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the dependency edge or hub behavior with localSearchCode and an LSP navigation step.","tools":["localSearchCode","lspGotoDefinition"]}},{"id":"AST-ISSUE-0262","severity":"medium","category":"over-abstraction","file":"src/routes/tools.ts","lineStart":465,"lineEnd":465,"title":"Over-abstraction: interface ToolEntry has exactly 1 implementor","reason":"Interface \"ToolEntry\" is implemented only by one class in \"src/routes/tools.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/routes/tools.ts","src/routes/tools.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ToolEntry","lineHint":465,"file":"src/routes/tools.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/routes/tools.ts:465-465"},"correlatedSignals":["hot-file","critical-path-context","paired:hardcoded-secret","paired:prototype-pollution-risk","paired:untested-critical-code","paired:unvalidated-input-sink","paired:listener-leak-risk","paired:type-assertion-escape"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0263","severity":"medium","category":"over-abstraction","file":"src/types/mcp.ts","lineStart":7,"lineEnd":7,"title":"Over-abstraction: interface JsonSchema has exactly 1 implementor","reason":"Interface \"JsonSchema\" is implemented only by one class in \"src/types/mcp.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/types/mcp.ts","src/types/mcp.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"JsonSchema","lineHint":7,"file":"src/types/mcp.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/types/mcp.ts:7-7"},"correlatedSignals":["paired:semantic-dead-export","paired:dead-export","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0264","severity":"medium","category":"over-abstraction","file":"src/types/mcp.ts","lineStart":15,"lineEnd":15,"title":"Over-abstraction: interface JsonSchemaProperty has exactly 1 implementor","reason":"Interface \"JsonSchemaProperty\" is implemented only by one class in \"src/types/mcp.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/types/mcp.ts","src/types/mcp.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"JsonSchemaProperty","lineHint":15,"file":"src/types/mcp.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/types/mcp.ts:15-15"},"correlatedSignals":["paired:semantic-dead-export","paired:dead-export","paired:move-to-caller","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0265","severity":"medium","category":"over-abstraction","file":"src/types/responses.ts","lineStart":28,"lineEnd":28,"title":"Over-abstraction: interface FileMatch has exactly 1 implementor","reason":"Interface \"FileMatch\" is implemented only by one class in \"src/types/responses.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/types/responses.ts","src/types/responses.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"FileMatch","lineHint":28,"file":"src/types/responses.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/types/responses.ts:28-28"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:move-to-caller"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0266","severity":"medium","category":"over-abstraction","file":"src/types/responses.ts","lineStart":85,"lineEnd":85,"title":"Over-abstraction: interface LspDefinition has exactly 1 implementor","reason":"Interface \"LspDefinition\" is implemented only by one class in \"src/types/responses.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/types/responses.ts","src/types/responses.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LspDefinition","lineHint":85,"file":"src/types/responses.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/types/responses.ts:85-85"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:move-to-caller"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0267","severity":"medium","category":"over-abstraction","file":"src/types/toolTypes.ts","lineStart":21,"lineEnd":21,"title":"Over-abstraction: interface QueryParamsResult has exactly 1 implementor","reason":"Interface \"QueryParamsResult\" is implemented only by one class in \"src/types/toolTypes.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/types/toolTypes.ts","src/types/toolTypes.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"QueryParamsResult","lineHint":21,"file":"src/types/toolTypes.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/types/toolTypes.ts:21-21"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:move-to-caller"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0268","severity":"medium","category":"over-abstraction","file":"src/utils/circuitBreaker.ts","lineStart":36,"lineEnd":36,"title":"Over-abstraction: interface CircuitBreakerConfig has exactly 1 implementor","reason":"Interface \"CircuitBreakerConfig\" is implemented only by one class in \"src/utils/circuitBreaker.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/utils/circuitBreaker.ts","src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"CircuitBreakerConfig","lineHint":36,"file":"src/utils/circuitBreaker.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/utils/circuitBreaker.ts:36-36"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:type-assertion-escape","paired:uncleared-timer","paired:move-to-caller"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0269","severity":"medium","category":"over-abstraction","file":"src/utils/errorQueue.ts","lineStart":8,"lineEnd":8,"title":"Over-abstraction: interface QueuedError has exactly 1 implementor","reason":"Interface \"QueuedError\" is implemented only by one class in \"src/utils/errorQueue.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/utils/errorQueue.ts","src/utils/errorQueue.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"QueuedError","lineHint":8,"file":"src/utils/errorQueue.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/utils/errorQueue.ts:8-8"},"correlatedSignals":["paired:distance-from-main-sequence"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0270","severity":"medium","category":"over-abstraction","file":"src/utils/responseBuilder.ts","lineStart":62,"lineEnd":62,"title":"Over-abstraction: interface ResearchContext has exactly 1 implementor","reason":"Interface \"ResearchContext\" is implemented only by one class in \"src/utils/responseParser.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/utils/responseBuilder.ts","src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ResearchContext","lineHint":62,"file":"src/utils/responseBuilder.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/utils/responseBuilder.ts:62-62"},"correlatedSignals":["hot-file","critical-path-context","paired:distance-from-main-sequence","paired:similar-function-body","paired:cognitive-complexity"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0271","severity":"medium","category":"over-abstraction","file":"src/utils/responseParser.ts","lineStart":39,"lineEnd":39,"title":"Over-abstraction: interface BulkResultItem has exactly 1 implementor","reason":"Interface \"BulkResultItem\" is implemented only by one class in \"src/utils/responseParser.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/utils/responseParser.ts","src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"BulkResultItem","lineHint":39,"file":"src/utils/responseParser.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/utils/responseParser.ts:39-39"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0272","severity":"medium","category":"over-abstraction","file":"src/utils/responseParser.ts","lineStart":49,"lineEnd":49,"title":"Over-abstraction: interface ParsedResponse has exactly 1 implementor","reason":"Interface \"ParsedResponse\" is implemented only by one class in \"src/utils/responseParser.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/utils/responseParser.ts","src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ParsedResponse","lineHint":49,"file":"src/utils/responseParser.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/utils/responseParser.ts:49-49"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0273","severity":"medium","category":"over-abstraction","file":"src/utils/responseParser.ts","lineStart":63,"lineEnd":63,"title":"Over-abstraction: interface ParsedBulkResponse has exactly 1 implementor","reason":"Interface \"ParsedBulkResponse\" is implemented only by one class in \"src/utils/responseParser.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/utils/responseParser.ts","src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ParsedBulkResponse","lineHint":63,"file":"src/utils/responseParser.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/utils/responseParser.ts:63-63"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0274","severity":"medium","category":"over-abstraction","file":"src/validation/toolCallSchema.ts","lineStart":57,"lineEnd":57,"title":"Over-abstraction: interface ValidationResult has exactly 1 implementor","reason":"Interface \"ValidationResult\" is implemented only by one class in \"src/validation/toolCallSchema.ts\". The abstraction layer adds complexity without enabling polymorphism.","files":["src/validation/toolCallSchema.ts","src/validation/toolCallSchema.ts"],"suggestedFix":{"strategy":"Inline the interface into the concrete class or keep it only if future implementors are planned.","steps":["Evaluate whether the interface is needed for testing (mocking) or future extensibility.","If not, merge the interface declaration into the concrete class.","Update consumers to depend on the concrete class directly."]},"impact":"Over-abstraction adds indirection without polymorphic benefit, increasing cognitive load.","tags":["architecture","abstraction","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ValidationResult","lineHint":57,"file":"src/validation/toolCallSchema.ts","expectedResult":"exactly 1 implementation confirms over-abstraction"}],"ruleId":"hybrid.over-abstraction","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"over-abstraction","location":"src/validation/toolCallSchema.ts:57-57"},"correlatedSignals":["paired:dead-export","paired:input-passthrough-risk","paired:move-to-caller"],"recommendedValidation":{"summary":"exactly 1 implementation confirms over-abstraction","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0275","severity":"medium","category":"promise-misuse","file":"src/mcpCache.ts","lineStart":18,"lineEnd":31,"title":"Unnecessary async: initializeMcpContent has no await","reason":"Function \"initializeMcpContent\" is declared `async` but never uses `await`. The `async` keyword adds unnecessary Promise wrapping.","files":["src/mcpCache.ts"],"suggestedFix":{"strategy":"Remove the async keyword or add the missing await.","steps":["If the function does not need to be async, remove the `async` keyword.","If an `await` was forgotten, add it to the appropriate call.","Verify callers handle the return value correctly after the change."]},"impact":"Unnecessary async wrapping adds microtask overhead and misleads readers.","tags":["async","performance","clarity"],"ruleId":"ast.promise-misuse","analysisLens":"ast","confidence":"low","evidence":{"category":"promise-misuse","location":"src/mcpCache.ts:18-31"},"correlatedSignals":["paired:distance-from-main-sequence","paired:low-cohesion","paired:missing-error-boundary","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0276","severity":"medium","category":"promise-misuse","file":"src/utils/logger.ts","lineStart":46,"lineEnd":65,"title":"Unnecessary async: ensureLogsDirAsync has no await","reason":"Function \"ensureLogsDirAsync\" is declared `async` but never uses `await`. The `async` keyword adds unnecessary Promise wrapping.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Remove the async keyword or add the missing await.","steps":["If the function does not need to be async, remove the `async` keyword.","If an `await` was forgotten, add it to the appropriate call.","Verify callers handle the return value correctly after the change."]},"impact":"Unnecessary async wrapping adds microtask overhead and misleads readers.","tags":["async","performance","clarity"],"ruleId":"ast.promise-misuse","analysisLens":"ast","confidence":"low","evidence":{"category":"promise-misuse","location":"src/utils/logger.ts:46-65"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0277","severity":"medium","category":"re-export-duplication","file":"src/validation/index.ts","lineStart":1,"lineEnd":1,"title":"Duplicate re-export paths: *","reason":"Symbol \"*\" is re-exported from multiple sources in the same barrel.","files":["src/validation/index.ts"],"suggestedFix":{"strategy":"Keep one canonical re-export source per symbol.","steps":["Select a canonical module for the symbol.","Remove duplicate re-export paths.","Document intended public export map for the barrel."]},"impact":"Reduces API ambiguity and import inconsistency.","tags":["duplication","barrel","api-surface"],"ruleId":"ast.re-export-duplication","analysisLens":"ast","confidence":"low","evidence":{"category":"re-export-duplication","location":"src/validation/index.ts:1-1"},"correlatedSignals":["paired:export-star-leak","paired:architecture-sdp-violation"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0278","severity":"medium","category":"similar-function-body","file":"src/middleware/logger.ts","lineStart":30,"lineEnd":57,"title":"Similar function: <anonymous> (85% similar to <anonymous> in src/validation/httpPreprocess.ts)","reason":"\"<anonymous>\" and \"<anonymous>\" have 85% structural similarity. Near-duplicates diverge over time and should be consolidated.","files":["src/middleware/logger.ts","src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Extract shared logic into a parameterized helper.","steps":["Compare src/middleware/logger.ts:30 with src/validation/httpPreprocess.ts:87.","Identify the varying parts and extract them as parameters.","Create a shared function and call it from both locations."]},"impact":"Near-clone functions diverge over time, causing inconsistent behavior and multiplied maintenance cost.","tags":["duplication","maintainability","near-clone"],"ruleId":"ast.similar-function-body","analysisLens":"ast","confidence":"low","evidence":{"category":"similar-function-body","location":"src/middleware/logger.ts:30-57"},"correlatedSignals":["critical-path-context","paired:input-passthrough-risk","paired:listener-leak-risk","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0279","severity":"medium","category":"similar-function-body","file":"src/routes/local.ts","lineStart":107,"lineEnd":127,"title":"Similar function: transform (89% similar to <anonymous> in src/routes/lsp.ts)","reason":"\"transform\" and \"<anonymous>\" have 89% structural similarity. Near-duplicates diverge over time and should be consolidated.","files":["src/routes/local.ts","src/routes/lsp.ts"],"suggestedFix":{"strategy":"Extract shared logic into a parameterized helper.","steps":["Compare src/routes/local.ts:107 with src/routes/lsp.ts:162.","Identify the varying parts and extract them as parameters.","Create a shared function and call it from both locations."]},"impact":"Near-clone functions diverge over time, causing inconsistent behavior and multiplied maintenance cost.","tags":["duplication","maintainability","near-clone"],"ruleId":"ast.similar-function-body","analysisLens":"ast","confidence":"low","evidence":{"category":"similar-function-body","location":"src/routes/local.ts:107-127"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:unreachable-module","paired:dependency-test-only","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0280","severity":"medium","category":"similar-function-body","file":"src/utils/responseBuilder.ts","lineStart":75,"lineEnd":128,"title":"Similar function: searchResults (85% similar to pullRequests in src/utils/responseBuilder.ts)","reason":"\"searchResults\" and \"pullRequests\" have 85% structural similarity. Near-duplicates diverge over time and should be consolidated.","files":["src/utils/responseBuilder.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Extract shared logic into a parameterized helper.","steps":["Compare src/utils/responseBuilder.ts:75 with src/utils/responseBuilder.ts:356.","Identify the varying parts and extract them as parameters.","Create a shared function and call it from both locations."]},"impact":"Near-clone functions diverge over time, causing inconsistent behavior and multiplied maintenance cost.","tags":["duplication","maintainability","near-clone"],"ruleId":"ast.similar-function-body","analysisLens":"ast","confidence":"low","evidence":{"category":"similar-function-body","location":"src/utils/responseBuilder.ts:75-128"},"correlatedSignals":["hot-file","critical-path-context","paired:distance-from-main-sequence","paired:cognitive-complexity","paired:over-abstraction"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0281","severity":"medium","category":"similar-function-body","file":"src/utils/responseBuilder.ts","lineStart":175,"lineEnd":236,"title":"Similar function: lspResult (87% similar to pullRequests in src/utils/responseBuilder.ts)","reason":"\"lspResult\" and \"pullRequests\" have 87% structural similarity. Near-duplicates diverge over time and should be consolidated.","files":["src/utils/responseBuilder.ts","src/utils/responseBuilder.ts"],"suggestedFix":{"strategy":"Extract shared logic into a parameterized helper.","steps":["Compare src/utils/responseBuilder.ts:175 with src/utils/responseBuilder.ts:356.","Identify the varying parts and extract them as parameters.","Create a shared function and call it from both locations."]},"impact":"Near-clone functions diverge over time, causing inconsistent behavior and multiplied maintenance cost.","tags":["duplication","maintainability","near-clone"],"ruleId":"ast.similar-function-body","analysisLens":"ast","confidence":"low","evidence":{"category":"similar-function-body","location":"src/utils/responseBuilder.ts:175-236"},"correlatedSignals":["hot-file","critical-path-context","paired:distance-from-main-sequence","paired:cognitive-complexity","paired:over-abstraction"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0282","severity":"medium","category":"sync-io","file":"src/utils/logger.ts","lineStart":74,"lineEnd":74,"title":"Synchronous I/O: existsSync","reason":"existsSync blocks the event loop. In server or UI code this degrades responsiveness for all concurrent operations.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Replace with async equivalent.","steps":["Replace existsSync with its async counterpart (e.g. fs.promises.readFile).","Sync I/O is acceptable in CLI scripts, build tools, or one-time init code."]},"impact":"Synchronous I/O blocks the event loop, stalling all concurrent requests until the operation completes.","tags":["performance","blocking","io"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"existsSync","lineHint":74,"file":"src/utils/logger.ts","expectedResult":"find callers to assess if this sync I/O is in a hot path"}],"ruleId":"ast.sync-io","analysisLens":"ast","confidence":"low","evidence":{"category":"sync-io","location":"src/utils/logger.ts:74-74"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"find callers to assess if this sync I/O is in a hot path","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0283","severity":"medium","category":"sync-io","file":"src/utils/logger.ts","lineStart":75,"lineEnd":75,"title":"Synchronous I/O: mkdirSync","reason":"mkdirSync blocks the event loop. In server or UI code this degrades responsiveness for all concurrent operations.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Replace with async equivalent.","steps":["Replace mkdirSync with its async counterpart (e.g. fs.promises.readFile).","Sync I/O is acceptable in CLI scripts, build tools, or one-time init code."]},"impact":"Synchronous I/O blocks the event loop, stalling all concurrent requests until the operation completes.","tags":["performance","blocking","io"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"mkdirSync","lineHint":75,"file":"src/utils/logger.ts","expectedResult":"find callers to assess if this sync I/O is in a hot path"}],"ruleId":"ast.sync-io","analysisLens":"ast","confidence":"low","evidence":{"category":"sync-io","location":"src/utils/logger.ts:75-75"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"find callers to assess if this sync I/O is in a hot path","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0284","severity":"medium","category":"sync-io","file":"src/utils/logger.ts","lineStart":77,"lineEnd":77,"title":"Synchronous I/O: existsSync","reason":"existsSync blocks the event loop. In server or UI code this degrades responsiveness for all concurrent operations.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Replace with async equivalent.","steps":["Replace existsSync with its async counterpart (e.g. fs.promises.readFile).","Sync I/O is acceptable in CLI scripts, build tools, or one-time init code."]},"impact":"Synchronous I/O blocks the event loop, stalling all concurrent requests until the operation completes.","tags":["performance","blocking","io"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"existsSync","lineHint":77,"file":"src/utils/logger.ts","expectedResult":"find callers to assess if this sync I/O is in a hot path"}],"ruleId":"ast.sync-io","analysisLens":"ast","confidence":"low","evidence":{"category":"sync-io","location":"src/utils/logger.ts:77-77"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"find callers to assess if this sync I/O is in a hot path","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0285","severity":"medium","category":"sync-io","file":"src/utils/logger.ts","lineStart":78,"lineEnd":78,"title":"Synchronous I/O: mkdirSync","reason":"mkdirSync blocks the event loop. In server or UI code this degrades responsiveness for all concurrent operations.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Replace with async equivalent.","steps":["Replace mkdirSync with its async counterpart (e.g. fs.promises.readFile).","Sync I/O is acceptable in CLI scripts, build tools, or one-time init code."]},"impact":"Synchronous I/O blocks the event loop, stalling all concurrent requests until the operation completes.","tags":["performance","blocking","io"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"mkdirSync","lineHint":78,"file":"src/utils/logger.ts","expectedResult":"find callers to assess if this sync I/O is in a hot path"}],"ruleId":"ast.sync-io","analysisLens":"ast","confidence":"low","evidence":{"category":"sync-io","location":"src/utils/logger.ts:78-78"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"find callers to assess if this sync I/O is in a hot path","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0286","severity":"medium","category":"type-assertion-escape","file":"src/routes/tools.ts","lineStart":111,"lineEnd":111,"title":"Type-safety escapes in src/routes/tools.ts (3)","reason":"Found 1 double-assertion, 2 non-null `!`. Each assertion bypasses TypeScript's type checker.","files":["src/routes/tools.ts"],"suggestedFix":{"strategy":"Replace type assertions with proper type guards or narrow types.","steps":["Replace `as any` with `unknown` and add runtime type checks.","Replace `as unknown as T` with proper generic constraints.","Replace `!` assertions with explicit null checks."]},"impact":"Type assertions silence the compiler — runtime errors go undetected.","tags":["type-safety","assertions","code-quality"],"ruleId":"ast.type-assertion-escape","analysisLens":"ast","confidence":"low","evidence":{"category":"type-assertion-escape","location":"src/routes/tools.ts:111-111"},"correlatedSignals":["hot-file","critical-path-context","paired:hardcoded-secret","paired:prototype-pollution-risk","paired:untested-critical-code","paired:unvalidated-input-sink","paired:listener-leak-risk","paired:over-abstraction"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0287","severity":"medium","category":"type-assertion-escape","file":"src/utils/circuitBreaker.ts","lineStart":98,"lineEnd":98,"title":"Type-safety escapes in src/utils/circuitBreaker.ts (1)","reason":"Found 1 non-null `!`. Each assertion bypasses TypeScript's type checker.","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Replace type assertions with proper type guards or narrow types.","steps":["Replace `as any` with `unknown` and add runtime type checks.","Replace `as unknown as T` with proper generic constraints.","Replace `!` assertions with explicit null checks."]},"impact":"Type assertions silence the compiler — runtime errors go undetected.","tags":["type-safety","assertions","code-quality"],"ruleId":"ast.type-assertion-escape","analysisLens":"ast","confidence":"low","evidence":{"category":"type-assertion-escape","location":"src/utils/circuitBreaker.ts:98-98"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:uncleared-timer","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0288","severity":"medium","category":"uncleared-timer","file":"src/server.ts","lineStart":66,"lineEnd":66,"title":"setInterval without clearInterval in scope","reason":"setInterval without cleanup runs indefinitely, causing memory leaks and unexpected behavior after component unmount or scope exit.","files":["src/server.ts"],"suggestedFix":{"strategy":"Store the timer ID and call clearInterval in cleanup.","steps":["Assign the return value: const id = setInterval(...).","Call clearInterval(id) in cleanup (useEffect return, componentWillUnmount, or scope exit)."]},"impact":"Uncleared intervals run indefinitely, leaking memory and CPU cycles after their scope is no longer relevant.","tags":["performance","memory-leak","timer"],"ruleId":"ast.uncleared-timer","analysisLens":"ast","confidence":"low","evidence":{"category":"uncleared-timer","location":"src/server.ts:66-66"},"correlatedSignals":["hot-file","critical-path-context","top-level-effects","paired:dependency-critical-path","paired:untested-critical-code","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0289","severity":"medium","category":"uncleared-timer","file":"src/utils/circuitBreaker.ts","lineStart":433,"lineEnd":435,"title":"setInterval without clearInterval in scope","reason":"setInterval without cleanup runs indefinitely, causing memory leaks and unexpected behavior after component unmount or scope exit.","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Store the timer ID and call clearInterval in cleanup.","steps":["Assign the return value: const id = setInterval(...).","Call clearInterval(id) in cleanup (useEffect return, componentWillUnmount, or scope exit)."]},"impact":"Uncleared intervals run indefinitely, leaking memory and CPU cycles after their scope is no longer relevant.","tags":["performance","memory-leak","timer"],"ruleId":"ast.uncleared-timer","analysisLens":"ast","confidence":"low","evidence":{"category":"uncleared-timer","location":"src/utils/circuitBreaker.ts:433-435"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:move-to-caller"],"recommendedValidation":{"summary":"Confirm the code location and inspect the matched structure before proposing a refactor.","tools":["localSearchCode"]}},{"id":"AST-ISSUE-0290","severity":"low","category":"input-passthrough-risk","file":"src/middleware/queryParser.ts","lineStart":13,"lineEnd":19,"title":"Input passthrough without validation in <anonymous>(message)","reason":"Parameter 'message' (external input) is passed to super without validation. Downstream callees may not validate either.","files":["src/middleware/queryParser.ts"],"suggestedFix":{"strategy":"Validate input before passing to downstream functions.","steps":["Add schema validation (e.g. zod, joi) at the entry point.","Trace downstream: lspCallHierarchy(outgoing) on <anonymous> to verify callees validate.","Search for validation middleware: localSearchCode for guard/validate/sanitize patterns."]},"impact":"Unchecked input passed downstream can reach sinks in callees — validation gaps compound across the call chain.","tags":["security","input-validation","passthrough"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"<anonymous>","lineHint":13,"file":"src/middleware/queryParser.ts","expectedResult":"trace outgoing calls to verify downstream validation of message"},{"tool":"lspFindReferences","symbolName":"message","lineHint":13,"file":"src/middleware/queryParser.ts","expectedResult":"find all usages of message to check if validation occurs upstream"}],"ruleId":"security.input-passthrough-risk","confidence":"low","evidence":{"category":"input-passthrough-risk","location":"src/middleware/queryParser.ts:13-19","sourceParameters":["message"],"sink":"super","sanitizerStatus":"missing","propagationSteps":["super:14"]},"analysisLens":"hybrid","correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:cognitive-complexity","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"trace outgoing calls to verify downstream validation of message","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"super","lineStart":14,"lineEnd":14,"label":"propagation step"}]},{"id":"AST-ISSUE-0291","severity":"low","category":"input-passthrough-risk","file":"src/utils/logger.ts","lineStart":231,"lineEnd":246,"title":"Input passthrough without validation in logError(message)","reason":"Parameter 'message' (external input) is passed to formatLogEntry without validation. Downstream callees may not validate either.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Validate input before passing to downstream functions.","steps":["Add schema validation (e.g. zod, joi) at the entry point.","Trace downstream: lspCallHierarchy(outgoing) on logError to verify callees validate.","Search for validation middleware: localSearchCode for guard/validate/sanitize patterns."]},"impact":"Unchecked input passed downstream can reach sinks in callees — validation gaps compound across the call chain.","tags":["security","input-validation","passthrough"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"logError","lineHint":231,"file":"src/utils/logger.ts","expectedResult":"trace outgoing calls to verify downstream validation of message"},{"tool":"lspFindReferences","symbolName":"message","lineHint":231,"file":"src/utils/logger.ts","expectedResult":"find all usages of message to check if validation occurs upstream"}],"ruleId":"security.input-passthrough-risk","confidence":"low","evidence":{"category":"input-passthrough-risk","location":"src/utils/logger.ts:231-246","sourceParameters":["message"],"sink":"formatLogEntry","sanitizerStatus":"missing","propagationSteps":["formatLogEntry:237"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:listener-leak-risk"],"recommendedValidation":{"summary":"trace outgoing calls to verify downstream validation of message","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"formatLogEntry","lineStart":237,"lineEnd":237,"label":"propagation step"}]},{"id":"AST-ISSUE-0292","severity":"low","category":"input-passthrough-risk","file":"src/utils/logger.ts","lineStart":251,"lineEnd":256,"title":"Input passthrough without validation in logWarn(message, data)","reason":"Parameters 'message', 'data' (external input) are passed to formatLogEntry without validation. Downstream callees may not validate either.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Validate input before passing to downstream functions.","steps":["Add schema validation (e.g. zod, joi) at the entry point.","Trace downstream: lspCallHierarchy(outgoing) on logWarn to verify callees validate.","Search for validation middleware: localSearchCode for guard/validate/sanitize patterns."]},"impact":"Unchecked input passed downstream can reach sinks in callees — validation gaps compound across the call chain.","tags":["security","input-validation","passthrough"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"logWarn","lineHint":251,"file":"src/utils/logger.ts","expectedResult":"trace outgoing calls to verify downstream validation of message, data"},{"tool":"lspFindReferences","symbolName":"message","lineHint":251,"file":"src/utils/logger.ts","expectedResult":"find all usages of message to check if validation occurs upstream"}],"ruleId":"security.input-passthrough-risk","confidence":"low","evidence":{"category":"input-passthrough-risk","location":"src/utils/logger.ts:251-256","sourceParameters":["message","data"],"sink":"formatLogEntry","sanitizerStatus":"missing","propagationSteps":["formatLogEntry:252","formatLogEntry:252"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:listener-leak-risk"],"recommendedValidation":{"summary":"trace outgoing calls to verify downstream validation of message, data","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"formatLogEntry","lineStart":252,"lineEnd":252,"label":"propagation step"},{"file":"formatLogEntry","lineStart":252,"lineEnd":252,"label":"propagation step"}]},{"id":"AST-ISSUE-0293","severity":"low","category":"move-to-caller","file":"src/mcpCache.ts","lineStart":18,"lineEnd":31,"title":"Single-consumer export: initializeMcpContent (used by 1 file)","reason":"Exported symbol \"initializeMcpContent\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/mcpCache.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"initializeMcpContent","lineHint":18,"file":"src/mcpCache.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/mcpCache.ts:18-31"},"correlatedSignals":["paired:distance-from-main-sequence","paired:low-cohesion","paired:missing-error-boundary","paired:promise-misuse"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0294","severity":"low","category":"move-to-caller","file":"src/middleware/errorHandler.ts","lineStart":7,"lineEnd":11,"title":"Single-consumer export: ApiError (used by 1 file)","reason":"Exported symbol \"ApiError\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/middleware/errorHandler.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ApiError","lineHint":7,"file":"src/middleware/errorHandler.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/middleware/errorHandler.ts:7-11"},"correlatedSignals":["paired:unvalidated-input-sink"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0295","severity":"low","category":"move-to-caller","file":"src/middleware/errorHandler.ts","lineStart":15,"lineEnd":65,"title":"Single-consumer export: errorHandler (used by 1 file)","reason":"Exported symbol \"errorHandler\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/middleware/errorHandler.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"errorHandler","lineHint":15,"file":"src/middleware/errorHandler.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/middleware/errorHandler.ts:15-65"},"correlatedSignals":["paired:unvalidated-input-sink"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0296","severity":"low","category":"move-to-caller","file":"src/middleware/logger.ts","lineStart":19,"lineEnd":60,"title":"Single-consumer export: requestLogger (used by 1 file)","reason":"Exported symbol \"requestLogger\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/middleware/logger.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"requestLogger","lineHint":19,"file":"src/middleware/logger.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/middleware/logger.ts:19-60"},"correlatedSignals":["critical-path-context","paired:input-passthrough-risk","paired:listener-leak-risk","paired:similar-function-body"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0297","severity":"low","category":"move-to-caller","file":"src/routes/github.ts","lineStart":33,"lineEnd":33,"title":"Single-consumer export: githubRoutes (used by 1 file)","reason":"Exported symbol \"githubRoutes\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/routes/github.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"githubRoutes","lineHint":33,"file":"src/routes/github.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/routes/github.ts:33-33"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:unreachable-module","paired:dependency-test-only"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0298","severity":"low","category":"move-to-caller","file":"src/routes/local.ts","lineStart":32,"lineEnd":32,"title":"Single-consumer export: localRoutes (used by 1 file)","reason":"Exported symbol \"localRoutes\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/routes/local.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"localRoutes","lineHint":32,"file":"src/routes/local.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/routes/local.ts:32-32"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:unreachable-module","paired:dependency-test-only","paired:similar-function-body"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0299","severity":"low","category":"move-to-caller","file":"src/routes/lsp.ts","lineStart":24,"lineEnd":24,"title":"Single-consumer export: lspRoutes (used by 1 file)","reason":"Exported symbol \"lspRoutes\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/routes/lsp.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"lspRoutes","lineHint":24,"file":"src/routes/lsp.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/routes/lsp.ts:24-24"},"correlatedSignals":["hot-file","critical-path-context","paired:cognitive-complexity","paired:unreachable-module","paired:dependency-test-only"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0300","severity":"low","category":"move-to-caller","file":"src/routes/package.ts","lineStart":12,"lineEnd":12,"title":"Single-consumer export: packageRoutes (used by 1 file)","reason":"Exported symbol \"packageRoutes\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/routes/package.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"packageRoutes","lineHint":12,"file":"src/routes/package.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/routes/package.ts:12-12"},"correlatedSignals":["hot-file","critical-path-context","paired:dependency-critical-path","paired:cognitive-complexity","paired:unreachable-module","paired:unvalidated-input-sink","paired:dependency-test-only"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0301","severity":"low","category":"move-to-caller","file":"src/server.ts","lineStart":85,"lineEnd":170,"title":"Single-consumer export: createServer (used by 1 file)","reason":"Exported symbol \"createServer\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/server.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"createServer","lineHint":85,"file":"src/server.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/server.ts:85-170"},"correlatedSignals":["hot-file","critical-path-context","top-level-effects","paired:dependency-critical-path","paired:untested-critical-code","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0302","severity":"low","category":"move-to-caller","file":"src/server.ts","lineStart":219,"lineEnd":266,"title":"Single-consumer export: startServer (used by 1 file)","reason":"Exported symbol \"startServer\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/server.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"startServer","lineHint":219,"file":"src/server.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/server.ts:219-266"},"correlatedSignals":["hot-file","critical-path-context","top-level-effects","paired:dependency-critical-path","paired:untested-critical-code","paired:import-side-effect-risk","paired:listener-leak-risk","paired:missing-error-boundary"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0303","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":17,"lineEnd":20,"title":"Single-consumer export: ErrorWithStatus (used by 1 file)","reason":"Exported symbol \"ErrorWithStatus\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ErrorWithStatus","lineHint":17,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:17-20"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0304","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":25,"lineEnd":28,"title":"Single-consumer export: ErrorWithCode (used by 1 file)","reason":"Exported symbol \"ErrorWithCode\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ErrorWithCode","lineHint":25,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:25-28"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0305","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":33,"lineEnd":35,"title":"Single-consumer export: ErrorWithHeaders (used by 1 file)","reason":"Exported symbol \"ErrorWithHeaders\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ErrorWithHeaders","lineHint":33,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:33-35"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0306","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":44,"lineEnd":51,"title":"Single-consumer export: isErrorWithStatus (used by 1 file)","reason":"Exported symbol \"isErrorWithStatus\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isErrorWithStatus","lineHint":44,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:44-51"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0307","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":56,"lineEnd":63,"title":"Single-consumer export: isErrorWithCode (used by 1 file)","reason":"Exported symbol \"isErrorWithCode\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isErrorWithCode","lineHint":56,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:56-63"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0308","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":68,"lineEnd":75,"title":"Single-consumer export: hasMessage (used by 1 file)","reason":"Exported symbol \"hasMessage\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"hasMessage","lineHint":68,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:68-75"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0309","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":80,"lineEnd":88,"title":"Single-consumer export: hasHeaders (used by 1 file)","reason":"Exported symbol \"hasHeaders\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"hasHeaders","lineHint":80,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:80-88"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0310","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":104,"lineEnd":106,"title":"Single-consumer export: getErrorCode (used by 1 file)","reason":"Exported symbol \"getErrorCode\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getErrorCode","lineHint":104,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:104-106"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0311","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":111,"lineEnd":113,"title":"Single-consumer export: getErrorMessage (used by 1 file)","reason":"Exported symbol \"getErrorMessage\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getErrorMessage","lineHint":111,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:111-113"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0312","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":118,"lineEnd":123,"title":"Single-consumer export: getErrorHeader (used by 1 file)","reason":"Exported symbol \"getErrorHeader\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getErrorHeader","lineHint":118,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:118-123"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0313","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":132,"lineEnd":135,"title":"Single-consumer export: hasStatusIn (used by 1 file)","reason":"Exported symbol \"hasStatusIn\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"hasStatusIn","lineHint":132,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:132-135"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0314","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":140,"lineEnd":143,"title":"Single-consumer export: hasCodeIn (used by 1 file)","reason":"Exported symbol \"hasCodeIn\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"hasCodeIn","lineHint":140,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:140-143"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0315","severity":"low","category":"move-to-caller","file":"src/types/errorGuards.ts","lineStart":148,"lineEnd":151,"title":"Single-consumer export: messageMatches (used by 1 file)","reason":"Exported symbol \"messageMatches\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/errorGuards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"messageMatches","lineHint":148,"file":"src/types/errorGuards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/errorGuards.ts:148-151"},"correlatedSignals":["hot-file","paired:dead-export","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0316","severity":"low","category":"move-to-caller","file":"src/types/guards.ts","lineStart":11,"lineEnd":13,"title":"Single-consumer export: isNonEmptyString (used by 1 file)","reason":"Exported symbol \"isNonEmptyString\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isNonEmptyString","lineHint":11,"file":"src/types/guards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/guards.ts:11-13"},"correlatedSignals":["hot-file","paired:dead-export","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:narrowable-type"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0317","severity":"low","category":"move-to-caller","file":"src/types/guards.ts","lineStart":39,"lineEnd":41,"title":"Single-consumer export: isArray (used by 1 file)","reason":"Exported symbol \"isArray\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"isArray","lineHint":39,"file":"src/types/guards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/guards.ts:39-41"},"correlatedSignals":["hot-file","paired:dead-export","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:narrowable-type"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0318","severity":"low","category":"move-to-caller","file":"src/types/guards.ts","lineStart":93,"lineEnd":98,"title":"Single-consumer export: hasArrayProperty (used by 1 file)","reason":"Exported symbol \"hasArrayProperty\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"hasArrayProperty","lineHint":93,"file":"src/types/guards.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/guards.ts:93-98"},"correlatedSignals":["hot-file","paired:dead-export","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:narrowable-type"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0319","severity":"low","category":"move-to-caller","file":"src/types/mcp.ts","lineStart":7,"lineEnd":13,"title":"Single-consumer export: JsonSchema (used by 1 file)","reason":"Exported symbol \"JsonSchema\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/mcp.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"JsonSchema","lineHint":7,"file":"src/types/mcp.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/mcp.ts:7-13"},"correlatedSignals":["paired:semantic-dead-export","paired:dead-export","paired:over-abstraction","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0320","severity":"low","category":"move-to-caller","file":"src/types/mcp.ts","lineStart":15,"lineEnd":29,"title":"Single-consumer export: JsonSchemaProperty (used by 1 file)","reason":"Exported symbol \"JsonSchemaProperty\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/mcp.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"JsonSchemaProperty","lineHint":15,"file":"src/types/mcp.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/mcp.ts:15-29"},"correlatedSignals":["paired:semantic-dead-export","paired:dead-export","paired:over-abstraction","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0321","severity":"low","category":"move-to-caller","file":"src/types/mcp.ts","lineStart":43,"lineEnd":47,"title":"Single-consumer export: McpPromptArgument (used by 1 file)","reason":"Exported symbol \"McpPromptArgument\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/mcp.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"McpPromptArgument","lineHint":43,"file":"src/types/mcp.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/mcp.ts:43-47"},"correlatedSignals":["paired:semantic-dead-export","paired:dead-export","paired:over-abstraction","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0322","severity":"low","category":"move-to-caller","file":"src/types/mcp.ts","lineStart":52,"lineEnd":56,"title":"Single-consumer export: McpPrompt (used by 1 file)","reason":"Exported symbol \"McpPrompt\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/mcp.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"McpPrompt","lineHint":52,"file":"src/types/mcp.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/mcp.ts:52-56"},"correlatedSignals":["paired:semantic-dead-export","paired:dead-export","paired:over-abstraction","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0323","severity":"low","category":"move-to-caller","file":"src/types/mcp.ts","lineStart":61,"lineEnd":64,"title":"Single-consumer export: ListResponseMeta (used by 1 file)","reason":"Exported symbol \"ListResponseMeta\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/mcp.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ListResponseMeta","lineHint":61,"file":"src/types/mcp.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/mcp.ts:61-64"},"correlatedSignals":["paired:semantic-dead-export","paired:dead-export","paired:over-abstraction","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0324","severity":"low","category":"move-to-caller","file":"src/types/mcp.ts","lineStart":86,"lineEnd":119,"title":"Single-consumer export: transformToJsonSchema (used by 1 file)","reason":"Exported symbol \"transformToJsonSchema\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/mcp.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"transformToJsonSchema","lineHint":86,"file":"src/types/mcp.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/mcp.ts:86-119"},"correlatedSignals":["paired:semantic-dead-export","paired:dead-export","paired:over-abstraction","paired:prototype-pollution-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0325","severity":"low","category":"move-to-caller","file":"src/types/responses.ts","lineStart":17,"lineEnd":23,"title":"Single-consumer export: MatchLocation (used by 1 file)","reason":"Exported symbol \"MatchLocation\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"MatchLocation","lineHint":17,"file":"src/types/responses.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/responses.ts:17-23"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0326","severity":"low","category":"move-to-caller","file":"src/types/responses.ts","lineStart":175,"lineEnd":178,"title":"Single-consumer export: extractFiles (used by 1 file)","reason":"Exported symbol \"extractFiles\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractFiles","lineHint":175,"file":"src/types/responses.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/responses.ts:175-178"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0327","severity":"low","category":"move-to-caller","file":"src/types/responses.ts","lineStart":183,"lineEnd":186,"title":"Single-consumer export: extractPagination (used by 1 file)","reason":"Exported symbol \"extractPagination\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractPagination","lineHint":183,"file":"src/types/responses.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/responses.ts:183-186"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0328","severity":"low","category":"move-to-caller","file":"src/types/responses.ts","lineStart":191,"lineEnd":199,"title":"Single-consumer export: extractTotalMatches (used by 1 file)","reason":"Exported symbol \"extractTotalMatches\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/responses.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractTotalMatches","lineHint":191,"file":"src/types/responses.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/responses.ts:191-199"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0329","severity":"low","category":"move-to-caller","file":"src/types/toolTypes.ts","lineStart":11,"lineEnd":16,"title":"Single-consumer export: BaseQueryParams (used by 1 file)","reason":"Exported symbol \"BaseQueryParams\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/toolTypes.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"BaseQueryParams","lineHint":11,"file":"src/types/toolTypes.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/toolTypes.ts:11-16"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0330","severity":"low","category":"move-to-caller","file":"src/types/toolTypes.ts","lineStart":21,"lineEnd":23,"title":"Single-consumer export: QueryParamsResult (used by 1 file)","reason":"Exported symbol \"QueryParamsResult\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/types/toolTypes.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"QueryParamsResult","lineHint":21,"file":"src/types/toolTypes.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/types/toolTypes.ts:21-23"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0331","severity":"low","category":"move-to-caller","file":"src/utils/asyncTimeout.ts","lineStart":94,"lineEnd":116,"title":"Single-consumer export: withTimeout (used by 1 file)","reason":"Exported symbol \"withTimeout\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/asyncTimeout.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"withTimeout","lineHint":94,"file":"src/utils/asyncTimeout.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/asyncTimeout.ts:94-116"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:listener-leak-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0332","severity":"low","category":"move-to-caller","file":"src/utils/circuitBreaker.ts","lineStart":128,"lineEnd":133,"title":"Single-consumer export: configureCircuit (used by 1 file)","reason":"Exported symbol \"configureCircuit\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"configureCircuit","lineHint":128,"file":"src/utils/circuitBreaker.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/circuitBreaker.ts:128-133"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0333","severity":"low","category":"move-to-caller","file":"src/utils/circuitBreaker.ts","lineStart":153,"lineEnd":243,"title":"Single-consumer export: withCircuitBreaker (used by 1 file)","reason":"Exported symbol \"withCircuitBreaker\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"withCircuitBreaker","lineHint":153,"file":"src/utils/circuitBreaker.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/circuitBreaker.ts:153-243"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0334","severity":"low","category":"move-to-caller","file":"src/utils/circuitBreaker.ts","lineStart":278,"lineEnd":296,"title":"Single-consumer export: getAllCircuitStates (used by 1 file)","reason":"Exported symbol \"getAllCircuitStates\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getAllCircuitStates","lineHint":278,"file":"src/utils/circuitBreaker.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/circuitBreaker.ts:278-296"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0335","severity":"low","category":"move-to-caller","file":"src/utils/circuitBreaker.ts","lineStart":301,"lineEnd":311,"title":"Single-consumer export: CircuitOpenError (used by 1 file)","reason":"Exported symbol \"CircuitOpenError\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"CircuitOpenError","lineHint":301,"file":"src/utils/circuitBreaker.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/circuitBreaker.ts:301-311"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0336","severity":"low","category":"move-to-caller","file":"src/utils/circuitBreaker.ts","lineStart":447,"lineEnd":452,"title":"Single-consumer export: stopCircuitCleanup (used by 1 file)","reason":"Exported symbol \"stopCircuitCleanup\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"stopCircuitCleanup","lineHint":447,"file":"src/utils/circuitBreaker.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/circuitBreaker.ts:447-452"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0337","severity":"low","category":"move-to-caller","file":"src/utils/circuitBreaker.ts","lineStart":480,"lineEnd":485,"title":"Single-consumer export: clearAllCircuits (used by 1 file)","reason":"Exported symbol \"clearAllCircuits\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/circuitBreaker.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"clearAllCircuits","lineHint":480,"file":"src/utils/circuitBreaker.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/circuitBreaker.ts:480-485"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:prototype-pollution-risk","paired:semantic-dead-export","paired:over-abstraction","paired:type-assertion-escape","paired:uncleared-timer"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0338","severity":"low","category":"move-to-caller","file":"src/utils/colors.ts","lineStart":35,"lineEnd":37,"title":"Single-consumer export: resultLog (used by 1 file)","reason":"Exported symbol \"resultLog\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/colors.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"resultLog","lineHint":35,"file":"src/utils/colors.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/colors.ts:35-37"},"correlatedSignals":["hot-file","critical-path-context","paired:distance-from-main-sequence","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0339","severity":"low","category":"move-to-caller","file":"src/utils/colors.ts","lineStart":51,"lineEnd":53,"title":"Single-consumer export: dimLog (used by 1 file)","reason":"Exported symbol \"dimLog\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/colors.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"dimLog","lineHint":51,"file":"src/utils/colors.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/colors.ts:51-53"},"correlatedSignals":["hot-file","critical-path-context","paired:distance-from-main-sequence","paired:untested-critical-code"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0340","severity":"low","category":"move-to-caller","file":"src/utils/logEmoji.ts","lineStart":20,"lineEnd":25,"title":"Single-consumer export: shouldUseEmoji (used by 1 file)","reason":"Exported symbol \"shouldUseEmoji\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/logEmoji.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"shouldUseEmoji","lineHint":20,"file":"src/utils/logEmoji.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/logEmoji.ts:20-25"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0341","severity":"low","category":"move-to-caller","file":"src/utils/logEmoji.ts","lineStart":34,"lineEnd":49,"title":"Single-consumer export: LogEmojiKey (used by 1 file)","reason":"Exported symbol \"LogEmojiKey\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/logEmoji.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"LogEmojiKey","lineHint":34,"file":"src/utils/logEmoji.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/logEmoji.ts:34-49"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0342","severity":"low","category":"move-to-caller","file":"src/utils/logEmoji.ts","lineStart":82,"lineEnd":85,"title":"Single-consumer export: getLogEmoji (used by 1 file)","reason":"Exported symbol \"getLogEmoji\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/logEmoji.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getLogEmoji","lineHint":82,"file":"src/utils/logEmoji.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/logEmoji.ts:82-85"},"correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:dead-file","paired:orphan-module"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0343","severity":"low","category":"move-to-caller","file":"src/utils/logger.ts","lineStart":231,"lineEnd":246,"title":"Single-consumer export: logError (used by 1 file)","reason":"Exported symbol \"logError\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"logError","lineHint":231,"file":"src/utils/logger.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/logger.ts:231-246"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0344","severity":"low","category":"move-to-caller","file":"src/utils/logger.ts","lineStart":251,"lineEnd":256,"title":"Single-consumer export: logWarn (used by 1 file)","reason":"Exported symbol \"logWarn\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"logWarn","lineHint":251,"file":"src/utils/logger.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/logger.ts:251-256"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0345","severity":"low","category":"move-to-caller","file":"src/utils/logger.ts","lineStart":262,"lineEnd":272,"title":"Single-consumer export: ToolLogEntry (used by 1 file)","reason":"Exported symbol \"ToolLogEntry\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ToolLogEntry","lineHint":262,"file":"src/utils/logger.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/logger.ts:262-272"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0346","severity":"low","category":"move-to-caller","file":"src/utils/logger.ts","lineStart":333,"lineEnd":335,"title":"Single-consumer export: getLogsPath (used by 1 file)","reason":"Exported symbol \"getLogsPath\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getLogsPath","lineHint":333,"file":"src/utils/logger.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/logger.ts:333-335"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0347","severity":"low","category":"move-to-caller","file":"src/utils/logger.ts","lineStart":355,"lineEnd":357,"title":"Single-consumer export: initializeLogger (used by 1 file)","reason":"Exported symbol \"initializeLogger\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"initializeLogger","lineHint":355,"file":"src/utils/logger.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/logger.ts:355-357"},"correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0348","severity":"low","category":"move-to-caller","file":"src/utils/responseFactory.ts","lineStart":70,"lineEnd":87,"title":"Single-consumer export: extractMatchLocations (used by 1 file)","reason":"Exported symbol \"extractMatchLocations\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/responseFactory.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"extractMatchLocations","lineHint":70,"file":"src/utils/responseFactory.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/responseFactory.ts:70-87"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:narrowable-type"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0349","severity":"low","category":"move-to-caller","file":"src/utils/responseParser.ts","lineStart":30,"lineEnd":34,"title":"Single-consumer export: ResearchContext (used by 1 file)","reason":"Exported symbol \"ResearchContext\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ResearchContext","lineHint":30,"file":"src/utils/responseParser.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/responseParser.ts:30-34"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0350","severity":"low","category":"move-to-caller","file":"src/utils/responseParser.ts","lineStart":39,"lineEnd":44,"title":"Single-consumer export: BulkResultItem (used by 1 file)","reason":"Exported symbol \"BulkResultItem\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"BulkResultItem","lineHint":39,"file":"src/utils/responseParser.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/responseParser.ts:39-44"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0351","severity":"low","category":"move-to-caller","file":"src/utils/responseParser.ts","lineStart":63,"lineEnd":83,"title":"Single-consumer export: ParsedBulkResponse (used by 1 file)","reason":"Exported symbol \"ParsedBulkResponse\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ParsedBulkResponse","lineHint":63,"file":"src/utils/responseParser.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/responseParser.ts:63-83"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0352","severity":"low","category":"move-to-caller","file":"src/utils/responseParser.ts","lineStart":195,"lineEnd":272,"title":"Single-consumer export: parseToolResponseBulk (used by 1 file)","reason":"Exported symbol \"parseToolResponseBulk\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/responseParser.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"parseToolResponseBulk","lineHint":195,"file":"src/utils/responseParser.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/responseParser.ts:195-272"},"correlatedSignals":["hot-file","paired:cognitive-complexity","paired:dead-export","paired:semantic-dead-export","paired:untested-critical-code","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0353","severity":"low","category":"move-to-caller","file":"src/utils/routeFactory.ts","lineStart":52,"lineEnd":67,"title":"Single-consumer export: RouteConfig (used by 1 file)","reason":"Exported symbol \"RouteConfig\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/utils/routeFactory.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"RouteConfig","lineHint":52,"file":"src/utils/routeFactory.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/utils/routeFactory.ts:52-67"},"correlatedSignals":["paired:unreachable-module","paired:unvalidated-input-sink","paired:dead-export"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0354","severity":"low","category":"move-to-caller","file":"src/validation/httpPreprocess.ts","lineStart":21,"lineEnd":25,"title":"Single-consumer export: toNumber (used by 1 file)","reason":"Exported symbol \"toNumber\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"toNumber","lineHint":21,"file":"src/validation/httpPreprocess.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/httpPreprocess.ts:21-25"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0355","severity":"low","category":"move-to-caller","file":"src/validation/httpPreprocess.ts","lineStart":30,"lineEnd":35,"title":"Single-consumer export: toBoolean (used by 1 file)","reason":"Exported symbol \"toBoolean\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"toBoolean","lineHint":30,"file":"src/validation/httpPreprocess.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/httpPreprocess.ts:30-35"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0356","severity":"low","category":"move-to-caller","file":"src/validation/httpPreprocess.ts","lineStart":54,"lineEnd":54,"title":"Single-consumer export: numericString (used by 1 file)","reason":"Exported symbol \"numericString\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"numericString","lineHint":54,"file":"src/validation/httpPreprocess.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/httpPreprocess.ts:54-54"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0357","severity":"low","category":"move-to-caller","file":"src/validation/httpPreprocess.ts","lineStart":57,"lineEnd":57,"title":"Single-consumer export: requiredNumber (used by 1 file)","reason":"Exported symbol \"requiredNumber\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"requiredNumber","lineHint":57,"file":"src/validation/httpPreprocess.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/httpPreprocess.ts:57-57"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0358","severity":"low","category":"move-to-caller","file":"src/validation/httpPreprocess.ts","lineStart":60,"lineEnd":60,"title":"Single-consumer export: booleanString (used by 1 file)","reason":"Exported symbol \"booleanString\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"booleanString","lineHint":60,"file":"src/validation/httpPreprocess.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/httpPreprocess.ts:60-60"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0359","severity":"low","category":"move-to-caller","file":"src/validation/httpPreprocess.ts","lineStart":63,"lineEnd":63,"title":"Single-consumer export: stringArray (used by 1 file)","reason":"Exported symbol \"stringArray\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"stringArray","lineHint":63,"file":"src/validation/httpPreprocess.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/httpPreprocess.ts:63-63"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0360","severity":"low","category":"move-to-caller","file":"src/validation/httpPreprocess.ts","lineStart":86,"lineEnd":111,"title":"Single-consumer export: safePath (used by 1 file)","reason":"Exported symbol \"safePath\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"safePath","lineHint":86,"file":"src/validation/httpPreprocess.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/httpPreprocess.ts:86-111"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0361","severity":"low","category":"move-to-caller","file":"src/validation/httpPreprocess.ts","lineStart":132,"lineEnd":152,"title":"Single-consumer export: withResearchDefaults (used by 1 file)","reason":"Exported symbol \"withResearchDefaults\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/httpPreprocess.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"withResearchDefaults","lineHint":132,"file":"src/validation/httpPreprocess.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/httpPreprocess.ts:132-152"},"correlatedSignals":["hot-file","paired:distance-from-main-sequence","paired:semantic-dead-export"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0362","severity":"low","category":"move-to-caller","file":"src/validation/toolCallSchema.ts","lineStart":19,"lineEnd":19,"title":"Single-consumer export: MAX_QUERIES (used by 1 file)","reason":"Exported symbol \"MAX_QUERIES\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/toolCallSchema.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"MAX_QUERIES","lineHint":19,"file":"src/validation/toolCallSchema.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/toolCallSchema.ts:19-19"},"correlatedSignals":["paired:dead-export","paired:input-passthrough-risk","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0363","severity":"low","category":"move-to-caller","file":"src/validation/toolCallSchema.ts","lineStart":38,"lineEnd":43,"title":"Single-consumer export: toolCallBodySchema (used by 1 file)","reason":"Exported symbol \"toolCallBodySchema\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/toolCallSchema.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"toolCallBodySchema","lineHint":38,"file":"src/validation/toolCallSchema.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/toolCallSchema.ts:38-43"},"correlatedSignals":["paired:dead-export","paired:input-passthrough-risk","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0364","severity":"low","category":"move-to-caller","file":"src/validation/toolCallSchema.ts","lineStart":48,"lineEnd":48,"title":"Single-consumer export: ToolCallBody (used by 1 file)","reason":"Exported symbol \"ToolCallBody\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/toolCallSchema.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ToolCallBody","lineHint":48,"file":"src/validation/toolCallSchema.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/toolCallSchema.ts:48-48"},"correlatedSignals":["paired:dead-export","paired:input-passthrough-risk","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0365","severity":"low","category":"move-to-caller","file":"src/validation/toolCallSchema.ts","lineStart":57,"lineEnd":64,"title":"Single-consumer export: ValidationResult (used by 1 file)","reason":"Exported symbol \"ValidationResult\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/toolCallSchema.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"ValidationResult","lineHint":57,"file":"src/validation/toolCallSchema.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/toolCallSchema.ts:57-64"},"correlatedSignals":["paired:dead-export","paired:input-passthrough-risk","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0366","severity":"low","category":"move-to-caller","file":"src/validation/toolCallSchema.ts","lineStart":85,"lineEnd":105,"title":"Single-consumer export: validateToolCallBody (used by 1 file)","reason":"Exported symbol \"validateToolCallBody\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/toolCallSchema.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"validateToolCallBody","lineHint":85,"file":"src/validation/toolCallSchema.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/toolCallSchema.ts:85-105"},"correlatedSignals":["paired:dead-export","paired:input-passthrough-risk","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0367","severity":"low","category":"move-to-caller","file":"src/validation/toolCallSchema.ts","lineStart":114,"lineEnd":132,"title":"Single-consumer export: getValidationHints (used by 1 file)","reason":"Exported symbol \"getValidationHints\" is consumed by exactly 1 file. Consider moving it to the consumer or inlining it to reduce module surface.","files":["src/validation/toolCallSchema.ts"],"suggestedFix":{"strategy":"Move the symbol to its only consumer or inline it.","steps":["Verify no dynamic or reflection-based usage exists.","Move the function/class/constant to the consumer file.","Remove the export and the import from the consumer.","If the symbol is large, keep it but remove the export keyword."]},"impact":"Single-consumer exports add unnecessary module surface and indirection.","tags":["dead-code","module-surface","refactoring","semantic"],"lspHints":[{"tool":"lspFindReferences","symbolName":"getValidationHints","lineHint":114,"file":"src/validation/toolCallSchema.ts","expectedResult":"exactly 1 referencing file confirms single-consumer"}],"ruleId":"hybrid.move-to-caller","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"move-to-caller","location":"src/validation/toolCallSchema.ts:114-132"},"correlatedSignals":["paired:dead-export","paired:input-passthrough-risk","paired:over-abstraction"],"recommendedValidation":{"summary":"exactly 1 referencing file confirms single-consumer","tools":["localSearchCode","lspFindReferences"]}},{"id":"AST-ISSUE-0368","severity":"low","category":"narrowable-type","file":"src/types/guards.ts","lineStart":83,"lineEnd":88,"title":"Narrowable param: hasBooleanProperty(obj: unknown) → Record<string, unknown>","reason":"Parameter \"obj\" in \"hasBooleanProperty\" is declared as `unknown` but all call sites pass `Record<string, unknown>`. The type can be safely narrowed.","files":["src/types/guards.ts"],"suggestedFix":{"strategy":"Narrow the parameter type to match actual usage.","steps":["Change the parameter type from `unknown` to `Record<string, unknown>`.","Verify no future callers need the broader type.","If the function is part of a public API, consider keeping the broad type with a narrower overload."]},"impact":"Overly broad parameter types weaken type checking — narrowing catches bugs at compile time.","tags":["code-quality","types","refactoring","semantic"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"hasBooleanProperty","lineHint":83,"file":"src/types/guards.ts","expectedResult":"all incoming calls pass Record<string, unknown>"}],"ruleId":"hybrid.narrowable-type","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"narrowable-type","location":"src/types/guards.ts:83-88"},"correlatedSignals":["hot-file","paired:dead-export","paired:distance-from-main-sequence","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:move-to-caller"],"recommendedValidation":{"summary":"all incoming calls pass Record<string, unknown>","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0369","severity":"low","category":"narrowable-type","file":"src/utils/responseFactory.ts","lineStart":40,"lineEnd":45,"title":"Narrowable param: safeString(obj: unknown) → Record<string, unknown>","reason":"Parameter \"obj\" in \"safeString\" is declared as `unknown` but all call sites pass `Record<string, unknown>`. The type can be safely narrowed.","files":["src/utils/responseFactory.ts"],"suggestedFix":{"strategy":"Narrow the parameter type to match actual usage.","steps":["Change the parameter type from `unknown` to `Record<string, unknown>`.","Verify no future callers need the broader type.","If the function is part of a public API, consider keeping the broad type with a narrower overload."]},"impact":"Overly broad parameter types weaken type checking — narrowing catches bugs at compile time.","tags":["code-quality","types","refactoring","semantic"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"safeString","lineHint":40,"file":"src/utils/responseFactory.ts","expectedResult":"all incoming calls pass Record<string, unknown>"}],"ruleId":"hybrid.narrowable-type","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"narrowable-type","location":"src/utils/responseFactory.ts:40-45"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller"],"recommendedValidation":{"summary":"all incoming calls pass Record<string, unknown>","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0370","severity":"low","category":"narrowable-type","file":"src/utils/responseFactory.ts","lineStart":50,"lineEnd":55,"title":"Narrowable param: safeNumber(obj: unknown) → Record<string, unknown>","reason":"Parameter \"obj\" in \"safeNumber\" is declared as `unknown` but all call sites pass `Record<string, unknown>`. The type can be safely narrowed.","files":["src/utils/responseFactory.ts"],"suggestedFix":{"strategy":"Narrow the parameter type to match actual usage.","steps":["Change the parameter type from `unknown` to `Record<string, unknown>`.","Verify no future callers need the broader type.","If the function is part of a public API, consider keeping the broad type with a narrower overload."]},"impact":"Overly broad parameter types weaken type checking — narrowing catches bugs at compile time.","tags":["code-quality","types","refactoring","semantic"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"safeNumber","lineHint":50,"file":"src/utils/responseFactory.ts","expectedResult":"all incoming calls pass Record<string, unknown>"}],"ruleId":"hybrid.narrowable-type","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"narrowable-type","location":"src/utils/responseFactory.ts:50-55"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller"],"recommendedValidation":{"summary":"all incoming calls pass Record<string, unknown>","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0371","severity":"low","category":"narrowable-type","file":"src/utils/responseFactory.ts","lineStart":60,"lineEnd":65,"title":"Narrowable param: safeArray(obj: unknown) → Record<string, unknown>","reason":"Parameter \"obj\" in \"safeArray\" is declared as `unknown` but all call sites pass `Record<string, unknown>`. The type can be safely narrowed.","files":["src/utils/responseFactory.ts"],"suggestedFix":{"strategy":"Narrow the parameter type to match actual usage.","steps":["Change the parameter type from `unknown` to `Record<string, unknown>`.","Verify no future callers need the broader type.","If the function is part of a public API, consider keeping the broad type with a narrower overload."]},"impact":"Overly broad parameter types weaken type checking — narrowing catches bugs at compile time.","tags":["code-quality","types","refactoring","semantic"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"safeArray","lineHint":60,"file":"src/utils/responseFactory.ts","expectedResult":"all incoming calls pass Record<string, unknown>"}],"ruleId":"hybrid.narrowable-type","analysisLens":"hybrid","confidence":"medium","evidence":{"category":"narrowable-type","location":"src/utils/responseFactory.ts:60-65"},"correlatedSignals":["hot-file","paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:untested-critical-code","paired:architecture-sdp-violation","paired:feature-envy","paired:move-to-caller"],"recommendedValidation":{"summary":"all incoming calls pass Record<string, unknown>","tools":["localSearchCode","lspCallHierarchy"]}},{"id":"AST-ISSUE-0372","severity":"low","category":"prototype-pollution-risk","file":"src/middleware/queryParser.ts","lineStart":64,"lineEnd":64,"title":"Prototype pollution risk: computed-property-write (guarded)","reason":"Dynamic bracket assignment: cleanedQuery[key] — guards detected (internal iteration or key check), likely false positive. Verify the key variable does not trace to external input.","files":["src/middleware/queryParser.ts"],"suggestedFix":{"strategy":"Guard against __proto__, constructor, and prototype keys before merging.","steps":["Validate keys: reject \"__proto__\", \"constructor\", \"prototype\" before assignment.","Use Object.create(null) as the target for merges when possible.","Replace custom deep-merge with a hardened library (e.g. lodash.merge with prototype guard).","For Object.assign, ensure the source is sanitized or use structuredClone()."]},"impact":"Prototype pollution can override built-in methods, bypass security checks, or achieve remote code execution.","tags":["security","prototype-pollution","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"bracket-assignment","lineHint":64,"file":"src/middleware/queryParser.ts","expectedResult":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive"}],"ruleId":"security.prototype-pollution-risk","confidence":"low","evidence":{"category":"prototype-pollution-risk","location":"src/middleware/queryParser.ts:64-64","source":"computed-property-write","sink":"Dynamic bracket assignment: cleanedQuery[key]","guarded":true,"sanitizerStatus":"present","propagationSteps":["src/middleware/queryParser.ts:64"]},"analysisLens":"hybrid","correlatedSignals":["paired:dead-export","paired:semantic-dead-export","paired:unreachable-module","paired:cognitive-complexity","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"src/middleware/queryParser.ts","lineStart":64,"lineEnd":64,"label":"propagation step"}]},{"id":"AST-ISSUE-0373","severity":"low","category":"prototype-pollution-risk","file":"src/routes/tools.ts","lineStart":437,"lineEnd":437,"title":"Prototype pollution risk: computed-property-write (guarded)","reason":"Dynamic bracket assignment: schemas[toolName] — guards detected (internal iteration or key check), likely false positive. Verify the key variable does not trace to external input.","files":["src/routes/tools.ts"],"suggestedFix":{"strategy":"Guard against __proto__, constructor, and prototype keys before merging.","steps":["Validate keys: reject \"__proto__\", \"constructor\", \"prototype\" before assignment.","Use Object.create(null) as the target for merges when possible.","Replace custom deep-merge with a hardened library (e.g. lodash.merge with prototype guard).","For Object.assign, ensure the source is sanitized or use structuredClone()."]},"impact":"Prototype pollution can override built-in methods, bypass security checks, or achieve remote code execution.","tags":["security","prototype-pollution","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"bracket-assignment","lineHint":437,"file":"src/routes/tools.ts","expectedResult":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive"}],"ruleId":"security.prototype-pollution-risk","confidence":"low","evidence":{"category":"prototype-pollution-risk","location":"src/routes/tools.ts:437-437","source":"computed-property-write","sink":"Dynamic bracket assignment: schemas[toolName]","guarded":true,"sanitizerStatus":"present","propagationSteps":["src/routes/tools.ts:437"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:hardcoded-secret","paired:untested-critical-code","paired:unvalidated-input-sink","paired:listener-leak-risk","paired:over-abstraction","paired:type-assertion-escape"],"recommendedValidation":{"summary":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"src/routes/tools.ts","lineStart":437,"lineEnd":437,"label":"propagation step"}]},{"id":"AST-ISSUE-0374","severity":"low","category":"prototype-pollution-risk","file":"src/types/mcp.ts","lineStart":94,"lineEnd":94,"title":"Prototype pollution risk: computed-property-write (guarded)","reason":"Dynamic bracket assignment: properties[key] — guards detected (internal iteration or key check), likely false positive. Verify the key variable does not trace to external input.","files":["src/types/mcp.ts"],"suggestedFix":{"strategy":"Guard against __proto__, constructor, and prototype keys before merging.","steps":["Validate keys: reject \"__proto__\", \"constructor\", \"prototype\" before assignment.","Use Object.create(null) as the target for merges when possible.","Replace custom deep-merge with a hardened library (e.g. lodash.merge with prototype guard).","For Object.assign, ensure the source is sanitized or use structuredClone()."]},"impact":"Prototype pollution can override built-in methods, bypass security checks, or achieve remote code execution.","tags":["security","prototype-pollution","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"bracket-assignment","lineHint":94,"file":"src/types/mcp.ts","expectedResult":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive"}],"ruleId":"security.prototype-pollution-risk","confidence":"low","evidence":{"category":"prototype-pollution-risk","location":"src/types/mcp.ts:94-94","source":"computed-property-write","sink":"Dynamic bracket assignment: properties[key]","guarded":true,"sanitizerStatus":"present","propagationSteps":["src/types/mcp.ts:94"]},"analysisLens":"hybrid","correlatedSignals":["paired:semantic-dead-export","paired:dead-export","paired:over-abstraction","paired:move-to-caller"],"recommendedValidation":{"summary":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"src/types/mcp.ts","lineStart":94,"lineEnd":94,"label":"propagation step"}]},{"id":"AST-ISSUE-0375","severity":"low","category":"prototype-pollution-risk","file":"src/utils/logger.ts","lineStart":409,"lineEnd":409,"title":"Prototype pollution risk: computed-property-write (guarded)","reason":"Dynamic bracket assignment: sanitized[key] — guards detected (internal iteration or key check), likely false positive. Verify the key variable does not trace to external input.","files":["src/utils/logger.ts"],"suggestedFix":{"strategy":"Guard against __proto__, constructor, and prototype keys before merging.","steps":["Validate keys: reject \"__proto__\", \"constructor\", \"prototype\" before assignment.","Use Object.create(null) as the target for merges when possible.","Replace custom deep-merge with a hardened library (e.g. lodash.merge with prototype guard).","For Object.assign, ensure the source is sanitized or use structuredClone()."]},"impact":"Prototype pollution can override built-in methods, bypass security checks, or achieve remote code execution.","tags":["security","prototype-pollution","injection"],"lspHints":[{"tool":"lspCallHierarchy","symbolName":"bracket-assignment","lineHint":409,"file":"src/utils/logger.ts","expectedResult":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive"}],"ruleId":"security.prototype-pollution-risk","confidence":"low","evidence":{"category":"prototype-pollution-risk","location":"src/utils/logger.ts:409-409","source":"computed-property-write","sink":"Dynamic bracket assignment: sanitized[key]","guarded":true,"sanitizerStatus":"present","propagationSteps":["src/utils/logger.ts:409"]},"analysisLens":"hybrid","correlatedSignals":["hot-file","critical-path-context","paired:dead-export","paired:semantic-dead-export","paired:sql-injection-risk","paired:empty-catch","paired:excessive-parameters","paired:input-passthrough-risk"],"recommendedValidation":{"summary":"trace callers to determine if user-controlled data reaches this site — if key comes from Object.keys() on internal object, dismiss as false positive","tools":["localSearchCode","lspCallHierarchy"]},"flowTrace":[{"file":"src/utils/logger.ts","lineStart":409,"lineEnd":409,"label":"propagation step"}]}],"totalFindings":375}
|