{"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-3873c75b3863a99a", "name": "Possibly dead Python function: deco", "shortDescription": {"text": "Possibly dead Python function: deco"}, "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-b0bdd4acc1b6d693", "name": "Possibly dead Python function: deco", "shortDescription": {"text": "Possibly dead Python function: deco"}, "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-ffe2186f90c73b97", "name": "Possibly dead Python function: watch", "shortDescription": {"text": "Possibly dead Python function: watch"}, "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-c86deb7a056dd1ff", "name": "Possibly dead Python function: api_runs", "shortDescription": {"text": "Possibly dead Python function: api_runs"}, "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-1092f8740f245f2e", "name": "Possibly dead Python function: api_play", "shortDescription": {"text": "Possibly dead Python function: api_play"}, "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-6ea47454ab4f67a6", "name": "Possibly dead Python function: api_play_stop", "shortDescription": {"text": "Possibly dead Python function: api_play_stop"}, "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-8d50fda3f459a288", "name": "Possibly dead Python function: api_export", "shortDescription": {"text": "Possibly dead Python function: api_export"}, "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-66b84997aa483f04", "name": "Possibly dead Python function: download_export", "shortDescription": {"text": "Possibly dead Python function: download_export"}, "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-662f1b077f3308e2", "name": "Possibly dead Python function: story_image", "shortDescription": {"text": "Possibly dead Python function: story_image"}, "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-2ff545dc5a12e0ed", "name": "Possibly dead Python function: tree_flatten", "shortDescription": {"text": "Possibly dead Python function: tree_flatten"}, "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-53b19d4e1d377443", "name": "Possibly dead Python function: big_w", "shortDescription": {"text": "Possibly dead Python function: big_w"}, "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-911bedad94996e45", "name": "Possibly dead Python function: big_x", "shortDescription": {"text": "Possibly dead Python function: big_x"}, "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-4f45a51d9f39bf75", "name": "Possibly dead Python function: big_y", "shortDescription": {"text": "Possibly dead Python function: big_y"}, "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-f730a40466056043", "name": "Possibly dead Python function: big_z", "shortDescription": {"text": "Possibly dead Python function: big_z"}, "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-ca6aa770cdafeca3", "name": "Possibly dead Python function: healthz", "shortDescription": {"text": "Possibly dead Python function: healthz"}, "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-e2d5c60b63724611", "name": "Very large file: tests/test_board.py (2344 lines)", "shortDescription": {"text": "Very large file: tests/test_board.py (2344 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-a3f8e2315ce8494c", "name": "Very large file: fluent_dojo/board.py (2873 lines)", "shortDescription": {"text": "Very large file: fluent_dojo/board.py (2873 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-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-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-cde0241e5c8c67b3", "name": "Legacy-named symbol `_load_task_copy` in tests/test_story.py:213", "shortDescription": {"text": "Legacy-named symbol `_load_task_copy` in tests/test_story.py:213"}, "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-6481f25ff2294ef6", "name": "Commented-code block (7 lines) in fluent_dojo/train.py:629", "shortDescription": {"text": "Commented-code block (7 lines) in fluent_dojo/train.py:629"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffb6fb8f28582204", "name": "Commented-code block (5 lines) in fluent_dojo/board.py:102", "shortDescription": {"text": "Commented-code block (5 lines) in fluent_dojo/board.py:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f286a427196800e", "name": "Commented-code block (5 lines) in fluent_dojo/capture.py:30", "shortDescription": {"text": "Commented-code block (5 lines) in fluent_dojo/capture.py:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-beb66e574440d67d", "name": "Commented-code block (5 lines) in fluent_dojo/env.py:130", "shortDescription": {"text": "Commented-code block (5 lines) in fluent_dojo/env.py:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74e30c9667cb68a4", "name": "Stub function `close` (body is just `pass`/`return`) \u2014 fluent_dojo/env.py:403", "shortDescription": {"text": "Stub function `close` (body is just `pass`/`return`) \u2014 fluent_dojo/env.py:403"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2aae328e0eb8c53e", "name": "Legacy-named symbol `_load_task_copy` in fluent_dojo/play.py:23", "shortDescription": {"text": "Legacy-named symbol `_load_task_copy` in fluent_dojo/play.py:23"}, "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-e710ad82200f250f", "name": "Legacy-named symbol `model_copy` in fluent_dojo/schema.py:377", "shortDescription": {"text": "Legacy-named symbol `model_copy` in fluent_dojo/schema.py:377"}, "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-cd1e500f78327632", "name": "Commented-code block (7 lines) in fluent_dojo/schema.py:153", "shortDescription": {"text": "Commented-code block (7 lines) in fluent_dojo/schema.py:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f75ab89ceec113b", "name": "Commented-code block (5 lines) in fluent_dojo/bc.py:90", "shortDescription": {"text": "Commented-code block (5 lines) in fluent_dojo/bc.py:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32f5dc77b7e4eac4", "name": "Legacy-named symbol `_load_task_copy` in fluent_dojo/snapshot.py:31", "shortDescription": {"text": "Legacy-named symbol `_load_task_copy` in fluent_dojo/snapshot.py:31"}, "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-23eb42c2b03addbb", "name": "Commented-code block (5 lines) in fluent_dojo/expert.py:69", "shortDescription": {"text": "Commented-code block (5 lines) in fluent_dojo/expert.py:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6609aeb804098299", "name": "Legacy-named symbol `_load_task_copy` in fluent_dojo/evaluate.py:75", "shortDescription": {"text": "Legacy-named symbol `_load_task_copy` in fluent_dojo/evaluate.py:75"}, "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-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:\nfluent_dojo/rewards.py:compute, fluent_dojo/rewards.py:compute, fluent_dojo/rewards.py:compute, fluent_dojo/rewards.py:compute\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-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:\nfluent_dojo/export.py:forward, fluent_dojo/export.py:forward\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/20760"}, "properties": {"repository": "takatronix/fluent_dojo", "repoUrl": "https://github.com/takatronix/fluent_dojo", "branch": "main"}, "results": [{"ruleId": "scanner-3873c75b3863a99a", "level": "note", "message": {"text": "Possibly dead Python function: deco"}, "properties": {"repobilityId": "11da05572c448654", "scanner": "scanner-primary", "fingerprint": "3873c75b3863a99a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/observations.py:28"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b0bdd4acc1b6d693", "level": "note", "message": {"text": "Possibly dead Python function: deco"}, "properties": {"repobilityId": "11da05572c448654", "scanner": "scanner-primary", "fingerprint": "b0bdd4acc1b6d693", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/rewards.py:68"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ffe2186f90c73b97", "level": "note", "message": {"text": "Possibly dead Python function: watch"}, "properties": {"repobilityId": "fa90d6dde4312b5f", "scanner": "scanner-primary", "fingerprint": "ffe2186f90c73b97", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/watch.py:104"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c86deb7a056dd1ff", "level": "note", "message": {"text": "Possibly dead Python function: api_runs"}, "properties": {"repobilityId": "29d09ce3dc91e90d", "scanner": "scanner-primary", "fingerprint": "c86deb7a056dd1ff", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/board.py:1359"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1092f8740f245f2e", "level": "note", "message": {"text": "Possibly dead Python function: api_play"}, "properties": {"repobilityId": "ef1d08915905fe86", "scanner": "scanner-primary", "fingerprint": "1092f8740f245f2e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/board.py:1374"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6ea47454ab4f67a6", "level": "note", "message": {"text": "Possibly dead Python function: api_play_stop"}, "properties": {"repobilityId": "e82eeeff536389f8", "scanner": "scanner-primary", "fingerprint": "6ea47454ab4f67a6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/board.py:1423"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d50fda3f459a288", "level": "note", "message": {"text": "Possibly dead Python function: api_export"}, "properties": {"repobilityId": "a685c8e257b9de2c", "scanner": "scanner-primary", "fingerprint": "8d50fda3f459a288", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/board.py:1427"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-66b84997aa483f04", "level": "note", "message": {"text": "Possibly dead Python function: download_export"}, "properties": {"repobilityId": "f6ac5c88d13c9eb2", "scanner": "scanner-primary", "fingerprint": "66b84997aa483f04", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/board.py:1482"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-662f1b077f3308e2", "level": "note", "message": {"text": "Possibly dead Python function: story_image"}, "properties": {"repobilityId": "b691e7603224d772", "scanner": "scanner-primary", "fingerprint": "662f1b077f3308e2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/board.py:1516"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2ff545dc5a12e0ed", "level": "note", "message": {"text": "Possibly dead Python function: tree_flatten"}, "properties": {"repobilityId": "3c0c9f9df1b7b028", "scanner": "scanner-primary", "fingerprint": "2ff545dc5a12e0ed", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/mjx_env.py:593"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-53b19d4e1d377443", "level": "note", "message": {"text": "Possibly dead Python function: big_w"}, "properties": {"repobilityId": "b5bf35fd91a6bfca", "scanner": "scanner-primary", "fingerprint": "53b19d4e1d377443", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/mjx_env.py:652"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-911bedad94996e45", "level": "note", "message": {"text": "Possibly dead Python function: big_x"}, "properties": {"repobilityId": "ee7b0e97c8f71bdf", "scanner": "scanner-primary", "fingerprint": "911bedad94996e45", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/mjx_env.py:660"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f45a51d9f39bf75", "level": "note", "message": {"text": "Possibly dead Python function: big_y"}, "properties": {"repobilityId": "3307b18b27df2092", "scanner": "scanner-primary", "fingerprint": "4f45a51d9f39bf75", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/mjx_env.py:668"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f730a40466056043", "level": "note", "message": {"text": "Possibly dead Python function: big_z"}, "properties": {"repobilityId": "dbdc19cf4bfca1ed", "scanner": "scanner-primary", "fingerprint": "f730a40466056043", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/mjx_env.py:676"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca6aa770cdafeca3", "level": "note", "message": {"text": "Possibly dead Python function: healthz"}, "properties": {"repobilityId": "b55412abe1fa1e6b", "scanner": "scanner-primary", "fingerprint": "ca6aa770cdafeca3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "fluent_dojo/serve.py:437"}, "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-e2d5c60b63724611", "level": "note", "message": {"text": "Very large file: tests/test_board.py (2344 lines)"}, "properties": {"repobilityId": "98aaf48244241342", "scanner": "scanner-primary", "fingerprint": "e2d5c60b63724611", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a3f8e2315ce8494c", "level": "note", "message": {"text": "Very large file: fluent_dojo/board.py (2873 lines)"}, "properties": {"repobilityId": "329a339dae57521e", "scanner": "scanner-primary", "fingerprint": "a3f8e2315ce8494c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "5f6c9a938eb71948", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "9e47f8eb8810a046", "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": "233b399275ca663d", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cde0241e5c8c67b3", "level": "note", "message": {"text": "Legacy-named symbol `_load_task_copy` in tests/test_story.py:213"}, "properties": {"repobilityId": "970981d54aac5991", "scanner": "scanner-primary", "fingerprint": "cde0241e5c8c67b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6481f25ff2294ef6", "level": "none", "message": {"text": "Commented-code block (7 lines) in fluent_dojo/train.py:629"}, "properties": {"repobilityId": "b223442cc4eb0b88", "scanner": "scanner-primary", "fingerprint": "6481f25ff2294ef6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffb6fb8f28582204", "level": "none", "message": {"text": "Commented-code block (5 lines) in fluent_dojo/board.py:102"}, "properties": {"repobilityId": "cce4ed8da97200b2", "scanner": "scanner-primary", "fingerprint": "ffb6fb8f28582204", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f286a427196800e", "level": "none", "message": {"text": "Commented-code block (5 lines) in fluent_dojo/capture.py:30"}, "properties": {"repobilityId": "a45867d14ea73608", "scanner": "scanner-primary", "fingerprint": "8f286a427196800e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-beb66e574440d67d", "level": "none", "message": {"text": "Commented-code block (5 lines) in fluent_dojo/env.py:130"}, "properties": {"repobilityId": "8a8f1ad6688fa525", "scanner": "scanner-primary", "fingerprint": "beb66e574440d67d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74e30c9667cb68a4", "level": "note", "message": {"text": "Stub function `close` (body is just `pass`/`return`) \u2014 fluent_dojo/env.py:403"}, "properties": {"repobilityId": "b896ce3c4f139ccf", "scanner": "scanner-primary", "fingerprint": "74e30c9667cb68a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-2aae328e0eb8c53e", "level": "note", "message": {"text": "Legacy-named symbol `_load_task_copy` in fluent_dojo/play.py:23"}, "properties": {"repobilityId": "8ee40e96e7b88e2d", "scanner": "scanner-primary", "fingerprint": "2aae328e0eb8c53e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e710ad82200f250f", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in fluent_dojo/schema.py:377"}, "properties": {"repobilityId": "e5e8a34dc70be78a", "scanner": "scanner-primary", "fingerprint": "e710ad82200f250f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cd1e500f78327632", "level": "none", "message": {"text": "Commented-code block (7 lines) in fluent_dojo/schema.py:153"}, "properties": {"repobilityId": "a471b40156057b6b", "scanner": "scanner-primary", "fingerprint": "cd1e500f78327632", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f75ab89ceec113b", "level": "none", "message": {"text": "Commented-code block (5 lines) in fluent_dojo/bc.py:90"}, "properties": {"repobilityId": "bd652fd7bea81bf2", "scanner": "scanner-primary", "fingerprint": "5f75ab89ceec113b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32f5dc77b7e4eac4", "level": "note", "message": {"text": "Legacy-named symbol `_load_task_copy` in fluent_dojo/snapshot.py:31"}, "properties": {"repobilityId": "ee81d16dfaae56f3", "scanner": "scanner-primary", "fingerprint": "32f5dc77b7e4eac4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-23eb42c2b03addbb", "level": "none", "message": {"text": "Commented-code block (5 lines) in fluent_dojo/expert.py:69"}, "properties": {"repobilityId": "5bd45908736a8544", "scanner": "scanner-primary", "fingerprint": "23eb42c2b03addbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6609aeb804098299", "level": "note", "message": {"text": "Legacy-named symbol `_load_task_copy` in fluent_dojo/evaluate.py:75"}, "properties": {"repobilityId": "a3d5b481edbb6ca0", "scanner": "scanner-primary", "fingerprint": "6609aeb804098299", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-76a2f6818267a9a8", "level": "note", "message": {"text": "Near-duplicate function bodies in 8 places"}, "properties": {"repobilityId": "fb5406daf6722c1e", "scanner": "scanner-primary", "fingerprint": "76a2f6818267a9a8", "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": "e8a757bac8738cf2", "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": "1366284d884b2828", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}