{ "config": { "build": "npm run build", "test": "npm test", "lint": null, "typecheck": "tsc --noEmit", "format": null, "detected_from": "package.json", "runtime": "node", "include_tests": false, "passes": ["A", "B"] }, "engine": { "ast_grep": "0.44.0", "cpd": "5.0.11", "scc": "3.7.0", "biome": "2.5.0", "binary": "linux-x64" }, "summary": { "passA_structural": 2, "passB_consolidation": 0, "lint": 0, "kept_separate": 0 }, "findings": [ { "id": "f0001", "kind": "structural", "detector": "ts-prefer-includes", "title": "Use .includes() instead of indexOf()!==-1 in fixtures/ts/messy.ts", "members": [ { "file": "fixtures/ts/messy.ts", "line": 4 } ], "fix_kind": "deterministic", "difficulty": "mechanical", "confidence": 0.99, "severity": 5, "action": "Replace `tags.indexOf(tag) !== -1` with `tags.includes(tag)` (or run `ast-grep scan -c sgconfig.yml --rule ts-prefer-includes --update-all`).", "verify": "npm run build && npm test", "status": "pending" }, { "id": "f0002", "kind": "structural", "detector": "ts-deep-nesting", "title": "Deeply nested conditional in price() — guard clauses", "members": [ { "file": "fixtures/ts/messy.ts", "line": 29 } ], "signal": { "nesting": 3 }, "fix_kind": "edit", "difficulty": "semantic", "confidence": 0.7, "severity": 22, "action": "Flatten with early returns (references/PATTERNS.md -> guard-clauses); read the span and invert the outer conditions.", "verify": "npm run build && npm test", "status": "pending" } ], "kept_separate": [] }