{"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-8d69c4bc14800bf6", "name": "Possibly dead Python function: replace_img", "shortDescription": {"text": "Possibly dead Python function: replace_img"}, "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-ffc7e3f4cd55723e", "name": "Possibly dead Python function: replace_md_img", "shortDescription": {"text": "Possibly dead Python function: replace_md_img"}, "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-0cbee8577c8432dd", "name": "Possibly dead Python function: replace_link", "shortDescription": {"text": "Possibly dead Python function: replace_link"}, "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-25d1ef456773edcc", "name": "Possibly dead Python function: collect_def", "shortDescription": {"text": "Possibly dead Python function: collect_def"}, "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-5be20659a2bf88e0", "name": "Possibly dead Python function: replace_ref", "shortDescription": {"text": "Possibly dead Python function: replace_ref"}, "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-eb302a90c86d0591", "name": "Possibly dead Python function: convert_table", "shortDescription": {"text": "Possibly dead Python function: convert_table"}, "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-4ebe6527125021d0", "name": "Possibly dead Python function: replace_byline", "shortDescription": {"text": "Possibly dead Python function: replace_byline"}, "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-24f94dd3e35f9e43", "name": "Possibly dead Python function: make_pull_quote", "shortDescription": {"text": "Possibly dead Python function: make_pull_quote"}, "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-c39b5af35f37872f", "name": "Possibly dead Python function: style_blockquote", "shortDescription": {"text": "Possibly dead Python function: style_blockquote"}, "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-ee5a84374a8bad00", "name": "Possibly dead Python function: style_pre", "shortDescription": {"text": "Possibly dead Python function: style_pre"}, "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-c6a0e5dce36af251", "name": "Possibly dead Python function: fix_heading_strong", "shortDescription": {"text": "Possibly dead Python function: fix_heading_strong"}, "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-d71d502ab7881709", "name": "Possibly dead Python function: add_zebra_stripes", "shortDescription": {"text": "Possibly dead Python function: add_zebra_stripes"}, "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-54b6b7d8ae3e0c5f", "name": "Possibly dead Python function: adapt_table_for_mobile", "shortDescription": {"text": "Possibly dead Python function: adapt_table_for_mobile"}, "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-39ed4a60d95b9ece", "name": "Possibly dead Python function: replace_ul", "shortDescription": {"text": "Possibly dead Python function: replace_ul"}, "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-8766b27d4cfeab44", "name": "Possibly dead Python function: replace_ol", "shortDescription": {"text": "Possibly dead Python function: replace_ol"}, "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-d788d189788812a0", "name": "Possibly dead Python function: replace_callout", "shortDescription": {"text": "Possibly dead Python function: replace_callout"}, "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-38eff55689fd29c5", "name": "Possibly dead Python function: truncate_html_preview", "shortDescription": {"text": "Possibly dead Python function: truncate_html_preview"}, "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-17d9e32b655f01cb", "name": "Possibly dead Python function: replace_src", "shortDescription": {"text": "Possibly dead Python function: replace_src"}, "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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4dff0750c010aabf", "name": "Very large file: scripts/format.py (3089 lines)", "shortDescription": {"text": "Very large file: scripts/format.py (3089 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 6 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 109 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6cc2a4c100149f8", "name": "Agent authority lacks a verifier contract: cover/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: cover/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-6e86e1eaa38f7db0", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/comment_reply.py:116", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/comment_reply.py:116"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e5191adc7a941c9", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/publish.py:328", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/publish.py:328"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/22997"}, "properties": {"repository": "xiaohuailabs/xiaohu-wechat-format", "repoUrl": "https://github.com/xiaohuailabs/xiaohu-wechat-format", "branch": "main"}, "results": [{"ruleId": "scanner-8d69c4bc14800bf6", "level": "note", "message": {"text": "Possibly dead Python function: replace_img"}, "properties": {"repobilityId": "d998f19480abb1d5", "scanner": "scanner-primary", "fingerprint": "8d69c4bc14800bf6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:349"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ffc7e3f4cd55723e", "level": "note", "message": {"text": "Possibly dead Python function: replace_md_img"}, "properties": {"repobilityId": "13ce84d8c1b27b47", "scanner": "scanner-primary", "fingerprint": "ffc7e3f4cd55723e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:373"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0cbee8577c8432dd", "level": "note", "message": {"text": "Possibly dead Python function: replace_link"}, "properties": {"repobilityId": "93543400bda676ca", "scanner": "scanner-primary", "fingerprint": "0cbee8577c8432dd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:404"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-25d1ef456773edcc", "level": "note", "message": {"text": "Possibly dead Python function: collect_def"}, "properties": {"repobilityId": "e437274e9e59c443", "scanner": "scanner-primary", "fingerprint": "25d1ef456773edcc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:599"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5be20659a2bf88e0", "level": "note", "message": {"text": "Possibly dead Python function: replace_ref"}, "properties": {"repobilityId": "e03f1cb71b060876", "scanner": "scanner-primary", "fingerprint": "5be20659a2bf88e0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:614"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb302a90c86d0591", "level": "note", "message": {"text": "Possibly dead Python function: convert_table"}, "properties": {"repobilityId": "1a6311e437c68fd6", "scanner": "scanner-primary", "fingerprint": "eb302a90c86d0591", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:1697"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4ebe6527125021d0", "level": "note", "message": {"text": "Possibly dead Python function: replace_byline"}, "properties": {"repobilityId": "0a6599484ff6613c", "scanner": "scanner-primary", "fingerprint": "4ebe6527125021d0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:1853"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-24f94dd3e35f9e43", "level": "note", "message": {"text": "Possibly dead Python function: make_pull_quote"}, "properties": {"repobilityId": "346b1bde4fd65269", "scanner": "scanner-primary", "fingerprint": "24f94dd3e35f9e43", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2047"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c39b5af35f37872f", "level": "note", "message": {"text": "Possibly dead Python function: style_blockquote"}, "properties": {"repobilityId": "424db98f54e97644", "scanner": "scanner-primary", "fingerprint": "c39b5af35f37872f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2252"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ee5a84374a8bad00", "level": "note", "message": {"text": "Possibly dead Python function: style_pre"}, "properties": {"repobilityId": "c59ee45e4d95632b", "scanner": "scanner-primary", "fingerprint": "ee5a84374a8bad00", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2271"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c6a0e5dce36af251", "level": "note", "message": {"text": "Possibly dead Python function: fix_heading_strong"}, "properties": {"repobilityId": "d3329ff32573582c", "scanner": "scanner-primary", "fingerprint": "c6a0e5dce36af251", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2384"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d71d502ab7881709", "level": "note", "message": {"text": "Possibly dead Python function: add_zebra_stripes"}, "properties": {"repobilityId": "c586ca7000b72e9b", "scanner": "scanner-primary", "fingerprint": "d71d502ab7881709", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2413"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-54b6b7d8ae3e0c5f", "level": "note", "message": {"text": "Possibly dead Python function: adapt_table_for_mobile"}, "properties": {"repobilityId": "1c08ee40b9219626", "scanner": "scanner-primary", "fingerprint": "54b6b7d8ae3e0c5f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2428"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-39ed4a60d95b9ece", "level": "note", "message": {"text": "Possibly dead Python function: replace_ul"}, "properties": {"repobilityId": "c7a5ecbd9eb17b04", "scanner": "scanner-primary", "fingerprint": "39ed4a60d95b9ece", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2578"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8766b27d4cfeab44", "level": "note", "message": {"text": "Possibly dead Python function: replace_ol"}, "properties": {"repobilityId": "b67597a0bd969275", "scanner": "scanner-primary", "fingerprint": "8766b27d4cfeab44", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2586"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d788d189788812a0", "level": "note", "message": {"text": "Possibly dead Python function: replace_callout"}, "properties": {"repobilityId": "4008a2b15476dd5e", "scanner": "scanner-primary", "fingerprint": "d788d189788812a0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2605"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-38eff55689fd29c5", "level": "note", "message": {"text": "Possibly dead Python function: truncate_html_preview"}, "properties": {"repobilityId": "48f883ad78a30e35", "scanner": "scanner-primary", "fingerprint": "38eff55689fd29c5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/format.py:2705"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-17d9e32b655f01cb", "level": "note", "message": {"text": "Possibly dead Python function: replace_src"}, "properties": {"repobilityId": "6fbf4387590e32cb", "scanner": "scanner-primary", "fingerprint": "17d9e32b655f01cb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/publish.py:169"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "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-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-4dff0750c010aabf", "level": "note", "message": {"text": "Very large file: scripts/format.py (3089 lines)"}, "properties": {"repobilityId": "e3cd2b9c131d1f55", "scanner": "scanner-primary", "fingerprint": "4dff0750c010aabf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "8de33c39bb34c60a", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "e393daf3da3b2c46", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "34c318b16b9ed926", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "d4f22cc2665a2105", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "2b30234cc1a7c001", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "2f4769aca493876e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-b6cc2a4c100149f8", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: cover/SKILL.md"}, "properties": {"repobilityId": "10caec5accecb215", "scanner": "scanner-primary", "fingerprint": "b6cc2a4c100149f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cover/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6e86e1eaa38f7db0", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/comment_reply.py:116"}, "properties": {"repobilityId": "fcac097de2e874f6", "scanner": "scanner-primary", "fingerprint": "6e86e1eaa38f7db0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e5191adc7a941c9", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/publish.py:328"}, "properties": {"repobilityId": "deffb8b248fd8f35", "scanner": "scanner-primary", "fingerprint": "9e5191adc7a941c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}