{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-f18f164b39d25bba", "name": "Possibly dead Python function: outcome_of", "shortDescription": {"text": "Possibly dead Python function: outcome_of"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb7320d52d30d012", "name": "Possibly dead Python function: record", "shortDescription": {"text": "Possibly dead Python function: record"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f07c3ce3db4d18e1", "name": "Possibly dead Python function: probe_chunk", "shortDescription": {"text": "Possibly dead Python function: probe_chunk"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2534152ef4c2743e", "name": "Possibly dead Python function: record", "shortDescription": {"text": "Possibly dead Python function: record"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4be5f2225dddd95", "name": "Possibly dead Python function: graph_command", "shortDescription": {"text": "Possibly dead Python function: graph_command"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4463e2733abafefe", "name": "Possibly dead Python function: report", "shortDescription": {"text": "Possibly dead Python function: report"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb8ff08ebb980bdb", "name": "Possibly dead Python function: compare_node_ids", "shortDescription": {"text": "Possibly dead Python function: compare_node_ids"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b17e857977a456d6", "name": "Very large file: tests/unit/test_cli.py (2735 lines)", "shortDescription": {"text": "Very large file: tests/unit/test_cli.py (2735 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d2df9e825795229", "name": "Agent authority lacks a verifier contract: src/untaped_ansible/skills/untaped-ansible/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: src/untaped_ansible/skills/untaped-ansible/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-996c5218857f22d6", "name": "Legacy-named symbol `model_copy` in tests/unit/test_sqlite_index.py:362", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/unit/test_sqlite_index.py:362"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2aeb12b6e1fd69b", "name": "Legacy-named symbol `model_copy` in src/untaped_ansible/application/graph.py:348", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/untaped_ansible/application/graph.py:348"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-22f3d5f2e59b8163", "name": "Legacy-named symbol `model_copy` in src/untaped_ansible/infrastructure/multi_source_index.py:152", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/untaped_ansible/infrastructure/multi_source_index.py:152"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-791c0dd3dc033b96", "name": "Legacy-named symbol `model_copy` in src/untaped_ansible/cli/graph_commands.py:718", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/untaped_ansible/cli/graph_commands.py:718"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/untaped_ansible/application/refresh_git_index.py:ensure_bare, src/untaped_ansible/infrastructure/git_cache.py:ensure_bare\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9dad557909b86499", "name": "Near-duplicate function bodies in 10 places", "shortDescription": {"text": "Near-duplicate function bodies in 10 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/untaped_ansible/application/ports.py:dependencies, src/untaped_ansible/application/ports.py:dependents, src/untaped_ansible/infrastructure/sqlite_index.py:dependencies, src/untaped_ansible/infrastructure/sqlite_index.py:dependents\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76a2f6818267a9a8", "name": "Near-duplicate function bodies in 8 places", "shortDescription": {"text": "Near-duplicate function bodies in 8 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/untaped_ansible/infrastructure/sqlite_index.py:dependencies_batch, src/untaped_ansible/infrastructure/sqlite_index.py:dependents_batch, src/untaped_ansible/infrastructure/multi_source_index.py:dependencies_batch, src/untaped_ansible/infrastructure/multi_source_index.py:dependents_batch\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/untaped_ansible/infrastructure/sqlite_index.py:cached_ref_metadata_batch, src/untaped_ansible/infrastructure/multi_source_index.py:cached_ref_metadata_batch, src/untaped_ansible/infrastructure/overlay_index.py:cached_ref_metadata_batch, src/untaped_ansible/infrastructure/github_index.py:cached_ref_metadata_batch\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24067"}, "properties": {"repository": "alexisbeaulieu97/untaped-ansible", "repoUrl": "https://github.com/alexisbeaulieu97/untaped-ansible", "branch": "main"}, "results": [{"ruleId": "scanner-f18f164b39d25bba", "level": "note", "message": {"text": "Possibly dead Python function: outcome_of"}, "properties": {"repobilityId": "9952f5e351b3f0be", "scanner": "scanner-primary", "fingerprint": "f18f164b39d25bba", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/untaped_ansible/application/refresh_git_index.py:243"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fb7320d52d30d012", "level": "note", "message": {"text": "Possibly dead Python function: record"}, "properties": {"repobilityId": "954506f60a17269d", "scanner": "scanner-primary", "fingerprint": "fb7320d52d30d012", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/untaped_ansible/application/refresh_git_index.py:464"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f07c3ce3db4d18e1", "level": "note", "message": {"text": "Possibly dead Python function: probe_chunk"}, "properties": {"repobilityId": "9d84a9b9b59d872a", "scanner": "scanner-primary", "fingerprint": "f07c3ce3db4d18e1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/untaped_ansible/infrastructure/github_ref_probe.py:93"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2534152ef4c2743e", "level": "note", "message": {"text": "Possibly dead Python function: record"}, "properties": {"repobilityId": "954506f60a17269d", "scanner": "scanner-primary", "fingerprint": "2534152ef4c2743e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/untaped_ansible/infrastructure/github_ref_probe.py:96"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d4be5f2225dddd95", "level": "note", "message": {"text": "Possibly dead Python function: graph_command"}, "properties": {"repobilityId": "b625f13d50cf5150", "scanner": "scanner-primary", "fingerprint": "d4be5f2225dddd95", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/untaped_ansible/cli/graph_commands.py:70"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4463e2733abafefe", "level": "note", "message": {"text": "Possibly dead Python function: report"}, "properties": {"repobilityId": "84d87478929310b7", "scanner": "scanner-primary", "fingerprint": "4463e2733abafefe", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/untaped_ansible/cli/_refresh.py:113"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb8ff08ebb980bdb", "level": "note", "message": {"text": "Possibly dead Python function: compare_node_ids"}, "properties": {"repobilityId": "b1cc7beeea9be16a", "scanner": "scanner-primary", "fingerprint": "cb8ff08ebb980bdb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/untaped_ansible/domain/renderers.py:153"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-b17e857977a456d6", "level": "note", "message": {"text": "Very large file: tests/unit/test_cli.py (2735 lines)"}, "properties": {"repobilityId": "bb43f878d799f059", "scanner": "scanner-primary", "fingerprint": "b17e857977a456d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "9341bd0e929fbf3f", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "a1142b223560de1d", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-8d2df9e825795229", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: src/untaped_ansible/skills/untaped-ansible/SKILL.md"}, "properties": {"repobilityId": "e23f802a28e42752", "scanner": "scanner-primary", "fingerprint": "8d2df9e825795229", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/untaped_ansible/skills/untaped-ansible/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-996c5218857f22d6", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/unit/test_sqlite_index.py:362"}, "properties": {"repobilityId": "f0fb321beb2aa4ea", "scanner": "scanner-primary", "fingerprint": "996c5218857f22d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e2aeb12b6e1fd69b", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/untaped_ansible/application/graph.py:348"}, "properties": {"repobilityId": "0b3fc10500126db6", "scanner": "scanner-primary", "fingerprint": "e2aeb12b6e1fd69b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-22f3d5f2e59b8163", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/untaped_ansible/infrastructure/multi_source_index.py:152"}, "properties": {"repobilityId": "48b4d5244269e4ec", "scanner": "scanner-primary", "fingerprint": "22f3d5f2e59b8163", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-791c0dd3dc033b96", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/untaped_ansible/cli/graph_commands.py:718"}, "properties": {"repobilityId": "8367eb9e63dfacf6", "scanner": "scanner-primary", "fingerprint": "791c0dd3dc033b96", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "fd1f61546585deac", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "cd3f4e0aa9a36988", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "47d1ada851bffdc1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2af9d40b2a5ed45e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "fb2cc92ba4b70df8", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9dad557909b86499", "level": "note", "message": {"text": "Near-duplicate function bodies in 10 places"}, "properties": {"repobilityId": "244ffb578ffa0575", "scanner": "scanner-primary", "fingerprint": "9dad557909b86499", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "d7aaeca58d11240c", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "fc17ef9459de2e7a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-76a2f6818267a9a8", "level": "note", "message": {"text": "Near-duplicate function bodies in 8 places"}, "properties": {"repobilityId": "665145d3d4715c21", "scanner": "scanner-primary", "fingerprint": "76a2f6818267a9a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "03168ca4e39ba6ee", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e1046b86fc479f31", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a9249ce3d64042a0", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}