{"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-da56681cc612231a", "name": "Possibly dead Python function: reject", "shortDescription": {"text": "Possibly dead Python function: reject"}, "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-cbe5e8273a404fd5", "name": "Possibly dead Python function: seed_factory", "shortDescription": {"text": "Possibly dead Python function: seed_factory"}, "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-3c839dfc6675b0e4", "name": "Possibly dead Python function: resume_factory", "shortDescription": {"text": "Possibly dead Python function: resume_factory"}, "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-32c9b080e7efc78a", "name": "Possibly dead Python function: ship", "shortDescription": {"text": "Possibly dead Python function: ship"}, "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-8498375c41821121", "name": "Possibly dead Python function: decorator", "shortDescription": {"text": "Possibly dead Python function: decorator"}, "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-00abe23879b1a45d", "name": "Possibly dead Python function: inferring", "shortDescription": {"text": "Possibly dead Python function: inferring"}, "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-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-0763d85002569570", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/deploy-pages@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14ce8614dd03f409", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ffa33751be3d771", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b3f6db818aa7307f", "name": "Very large file: tests/test_command_handle.py (1320 lines)", "shortDescription": {"text": "Very large file: tests/test_command_handle.py (1320 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-06bd6ac6ecad607d", "name": "Very large file: tests/test_event_graph.py (5080 lines)", "shortDescription": {"text": "Very large file: tests/test_event_graph.py (5080 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-af8622b81431cd8a", "name": "Very large file: tests/test_agui.py (4681 lines)", "shortDescription": {"text": "Very large file: tests/test_agui.py (4681 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-fbb53e055e874852", "name": "Very large file: tests/test_serde.py (3024 lines)", "shortDescription": {"text": "Very large file: tests/test_serde.py (3024 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-5f8a7f54fce8a990", "name": "Very large file: tests/test_namespace.py (1447 lines)", "shortDescription": {"text": "Very large file: tests/test_namespace.py (1447 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-d18ca04b076c3482", "name": "Very large file: src/langgraph_events/_graph.py (1812 lines)", "shortDescription": {"text": "Very large file: src/langgraph_events/_graph.py (1812 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 106 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-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.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-61689b487edb2986", "name": "Legacy-named symbol `shared_old` in tests/test_command_handle.py:653", "shortDescription": {"text": "Legacy-named symbol `shared_old` in tests/test_command_handle.py:653"}, "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-6d63458f9e0116e9", "name": "Commented-code block (7 lines) in tests/test_command_handle.py:478", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_command_handle.py:478"}, "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-719ac5653ac7d866", "name": "Commented-code block (5 lines) in tests/test_migrations_detect.py:99", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_migrations_detect.py:99"}, "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-c3145cca7b2bf1b6", "name": "Legacy-named symbol `it_preserves_reducer_state_from_checkpoint_in_v2` in tests/test_event_graph.py:2796", "shortDescription": {"text": "Legacy-named symbol `it_preserves_reducer_state_from_checkpoint_in_v2` in tests/test_event_graph.py:2796"}, "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-0af0dd3a90040644", "name": "Commented-code block (5 lines) in tests/test_event_graph.py:3039", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_event_graph.py:3039"}, "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-f7a12c410c29f826", "name": "Commented-code block (5 lines) in tests/test_reducer_required.py:118", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_reducer_required.py:118"}, "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-c2b768a47460dd60", "name": "Commented-code block (6 lines) in tests/test_reducer_migration_scenarios.py:268", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_reducer_migration_scenarios.py:268"}, "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-c075f131e87e8e16", "name": "Legacy-named symbol `_astream_v2` in tests/test_agui.py:4209", "shortDescription": {"text": "Legacy-named symbol `_astream_v2` in tests/test_agui.py:4209"}, "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-9cf0ab224cb1b156", "name": "Commented-code block (7 lines) in tests/test_agui.py:3491", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_agui.py:3491"}, "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-992e61fd6e7f3e78", "name": "Commented-code block (5 lines) in tests/test_raises.py:144", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_raises.py:144"}, "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-350132ae51db5fb5", "name": "Legacy-named symbol `PersonaOld` in tests/test_serde.py:317", "shortDescription": {"text": "Legacy-named symbol `PersonaOld` in tests/test_serde.py:317"}, "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-622b6ee5876eb039", "name": "Commented-code block (5 lines) in tests/test_serde.py:83", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_serde.py:83"}, "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-47f179e4d801e30e", "name": "Commented-code block (5 lines) in tests/test_namespace.py:227", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_namespace.py:227"}, "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-d260caa340a73168", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/release.py:22", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/release.py:22"}, "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}}, {"id": "scanner-ac87bd9d90ea744b", "name": "Commented-code block (8 lines) in scripts/generate_mermaid.py:44", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/generate_mermaid.py:44"}, "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-e69c13e4d036b98d", "name": "Commented-code block (8 lines) in src/langgraph_events/_event.py:407", "shortDescription": {"text": "Commented-code block (8 lines) in src/langgraph_events/_event.py:407"}, "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-2976f811248d10b0", "name": "Legacy-named symbol `_astream_v2` in src/langgraph_events/_graph.py:1426", "shortDescription": {"text": "Legacy-named symbol `_astream_v2` in src/langgraph_events/_graph.py:1426"}, "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-f7294639ce157838", "name": "Commented-code block (7 lines) in src/langgraph_events/_graph.py:742", "shortDescription": {"text": "Commented-code block (7 lines) in src/langgraph_events/_graph.py:742"}, "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-9e1d6a9f2484dcf0", "name": "Commented-code block (5 lines) in src/langgraph_events/_handler.py:222", "shortDescription": {"text": "Commented-code block (5 lines) in src/langgraph_events/_handler.py:222"}, "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-aa5f42e5de46e357", "name": "Commented-code block (5 lines) in src/langgraph_events/serde/_jsonplus.py:43", "shortDescription": {"text": "Commented-code block (5 lines) in src/langgraph_events/serde/_jsonplus.py:43"}, "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-b1e070acc5bd21a2", "name": "Commented-code block (5 lines) in src/langgraph_events/serde/__init__.py:41", "shortDescription": {"text": "Commented-code block (5 lines) in src/langgraph_events/serde/__init__.py:41"}, "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-f9d85e9a528155de", "name": "Commented-code block (5 lines) in src/langgraph_events/serde/migrations/_core.py:346", "shortDescription": {"text": "Commented-code block (5 lines) in src/langgraph_events/serde/migrations/_core.py:346"}, "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-557b8391bf160e8f", "name": "Commented-code block (5 lines) in src/langgraph_events/serde/migrations/testing.py:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/langgraph_events/serde/migrations/testing.py:25"}, "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-7b8542f55e257b4a", "name": "Commented-code block (5 lines) in src/langgraph_events/_namespace/_command_privacy.py:52", "shortDescription": {"text": "Commented-code block (5 lines) in src/langgraph_events/_namespace/_command_privacy.py:52"}, "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-93ae587e96afad89", "name": "Commented-code block (5 lines) in src/langgraph_events/_namespace/_model.py:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/langgraph_events/_namespace/_model.py:40"}, "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-5e085629a8de78d1", "name": "Commented-code block (6 lines) in src/langgraph_events/_namespace/_mermaid.py:219", "shortDescription": {"text": "Commented-code block (6 lines) in src/langgraph_events/_namespace/_mermaid.py:219"}, "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-f2b52ceed6699860", "name": "Legacy-named symbol `_astream_v2` in src/langgraph_events/agui/_adapter.py:428", "shortDescription": {"text": "Legacy-named symbol `_astream_v2` in src/langgraph_events/agui/_adapter.py:428"}, "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-609d19954133f1f2", "name": "Commented-code block (6 lines) in src/langgraph_events/agui/_adapter.py:126", "shortDescription": {"text": "Commented-code block (6 lines) in src/langgraph_events/agui/_adapter.py:126"}, "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-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:\nexamples/supervisor.py:context_part, examples/supervisor.py:context_part, examples/supervisor.py:context_part, examples/supervisor.py:context_part\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:\nexamples/supervisor.py:handle, examples/supervisor.py:handle\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-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/langgraph_events/_reducer.py:state_annotation, src/langgraph_events/_reducer.py:state_annotation, src/langgraph_events/_reducer.py:state_annotation\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/24788"}, "properties": {"repository": "cadance-io/langgraph-events", "repoUrl": "https://github.com/cadance-io/langgraph-events", "branch": "main"}, "results": [{"ruleId": "scanner-da56681cc612231a", "level": "note", "message": {"text": "Possibly dead Python function: reject"}, "properties": {"repobilityId": "1f189ee2dfccbf76", "scanner": "scanner-primary", "fingerprint": "da56681cc612231a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/expense_approval.py:148"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cbe5e8273a404fd5", "level": "note", "message": {"text": "Possibly dead Python function: seed_factory"}, "properties": {"repobilityId": "b5bbb701f5a6b6f7", "scanner": "scanner-primary", "fingerprint": "cbe5e8273a404fd5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/conversation.py:235"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3c839dfc6675b0e4", "level": "note", "message": {"text": "Possibly dead Python function: resume_factory"}, "properties": {"repobilityId": "84aa4c19b9e43469", "scanner": "scanner-primary", "fingerprint": "3c839dfc6675b0e4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/conversation.py:255"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-32c9b080e7efc78a", "level": "note", "message": {"text": "Possibly dead Python function: ship"}, "properties": {"repobilityId": "27934d9e1ce5bb9c", "scanner": "scanner-primary", "fingerprint": "32c9b080e7efc78a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/order.py:148"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8498375c41821121", "level": "note", "message": {"text": "Possibly dead Python function: decorator"}, "properties": {"repobilityId": "ffbcbc9bc189af1c", "scanner": "scanner-primary", "fingerprint": "8498375c41821121", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/langgraph_events/_handler.py:262"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-00abe23879b1a45d", "level": "note", "message": {"text": "Possibly dead Python function: inferring"}, "properties": {"repobilityId": "b74f1da46891a336", "scanner": "scanner-primary", "fingerprint": "00abe23879b1a45d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/langgraph_events/_handler.py:351"}, "region": {"startLine": 1}}}]}, {"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-0763d85002569570", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4289fb2fbaf82766", "scanner": "scanner-primary", "fingerprint": "0763d85002569570", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-14ce8614dd03f409", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "81c5c697653f94e8", "scanner": "scanner-primary", "fingerprint": "14ce8614dd03f409", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ffa33751be3d771", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "491a3ad29cbaf189", "scanner": "scanner-primary", "fingerprint": "7ffa33751be3d771", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b3f6db818aa7307f", "level": "note", "message": {"text": "Very large file: tests/test_command_handle.py (1320 lines)"}, "properties": {"repobilityId": "d1a22fb2a3626235", "scanner": "scanner-primary", "fingerprint": "b3f6db818aa7307f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-06bd6ac6ecad607d", "level": "note", "message": {"text": "Very large file: tests/test_event_graph.py (5080 lines)"}, "properties": {"repobilityId": "47e82c4772365c06", "scanner": "scanner-primary", "fingerprint": "06bd6ac6ecad607d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-af8622b81431cd8a", "level": "note", "message": {"text": "Very large file: tests/test_agui.py (4681 lines)"}, "properties": {"repobilityId": "7a12c007d514c9cd", "scanner": "scanner-primary", "fingerprint": "af8622b81431cd8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fbb53e055e874852", "level": "note", "message": {"text": "Very large file: tests/test_serde.py (3024 lines)"}, "properties": {"repobilityId": "8d400d4b3409dd18", "scanner": "scanner-primary", "fingerprint": "fbb53e055e874852", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5f8a7f54fce8a990", "level": "note", "message": {"text": "Very large file: tests/test_namespace.py (1447 lines)"}, "properties": {"repobilityId": "575afbc070632bea", "scanner": "scanner-primary", "fingerprint": "5f8a7f54fce8a990", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d18ca04b076c3482", "level": "note", "message": {"text": "Very large file: src/langgraph_events/_graph.py (1812 lines)"}, "properties": {"repobilityId": "d33a2119611fffbe", "scanner": "scanner-primary", "fingerprint": "d18ca04b076c3482", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "fc69d34bf8687854", "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": "a328a10f2181731d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-61689b487edb2986", "level": "note", "message": {"text": "Legacy-named symbol `shared_old` in tests/test_command_handle.py:653"}, "properties": {"repobilityId": "01ccb73766b43acc", "scanner": "scanner-primary", "fingerprint": "61689b487edb2986", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6d63458f9e0116e9", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_command_handle.py:478"}, "properties": {"repobilityId": "272332c77370550d", "scanner": "scanner-primary", "fingerprint": "6d63458f9e0116e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-719ac5653ac7d866", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_migrations_detect.py:99"}, "properties": {"repobilityId": "cdd394a08ff7edc1", "scanner": "scanner-primary", "fingerprint": "719ac5653ac7d866", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3145cca7b2bf1b6", "level": "note", "message": {"text": "Legacy-named symbol `it_preserves_reducer_state_from_checkpoint_in_v2` in tests/test_event_graph.py:2796"}, "properties": {"repobilityId": "79ca754effcab0b9", "scanner": "scanner-primary", "fingerprint": "c3145cca7b2bf1b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0af0dd3a90040644", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_event_graph.py:3039"}, "properties": {"repobilityId": "92f3771d52250f49", "scanner": "scanner-primary", "fingerprint": "0af0dd3a90040644", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7a12c410c29f826", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_reducer_required.py:118"}, "properties": {"repobilityId": "bb7d03e69d214e6b", "scanner": "scanner-primary", "fingerprint": "f7a12c410c29f826", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2b768a47460dd60", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_reducer_migration_scenarios.py:268"}, "properties": {"repobilityId": "5d6a1f8b825a4a0e", "scanner": "scanner-primary", "fingerprint": "c2b768a47460dd60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c075f131e87e8e16", "level": "note", "message": {"text": "Legacy-named symbol `_astream_v2` in tests/test_agui.py:4209"}, "properties": {"repobilityId": "69e0aa39baa0b800", "scanner": "scanner-primary", "fingerprint": "c075f131e87e8e16", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9cf0ab224cb1b156", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_agui.py:3491"}, "properties": {"repobilityId": "805f508895cf6b66", "scanner": "scanner-primary", "fingerprint": "9cf0ab224cb1b156", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-992e61fd6e7f3e78", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_raises.py:144"}, "properties": {"repobilityId": "5a298971cc7b35d1", "scanner": "scanner-primary", "fingerprint": "992e61fd6e7f3e78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-350132ae51db5fb5", "level": "note", "message": {"text": "Legacy-named symbol `PersonaOld` in tests/test_serde.py:317"}, "properties": {"repobilityId": "b9091bbc3f821d6c", "scanner": "scanner-primary", "fingerprint": "350132ae51db5fb5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-622b6ee5876eb039", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_serde.py:83"}, "properties": {"repobilityId": "82b1d1ab965282d9", "scanner": "scanner-primary", "fingerprint": "622b6ee5876eb039", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47f179e4d801e30e", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_namespace.py:227"}, "properties": {"repobilityId": "01c1f3a1dd72fc7a", "scanner": "scanner-primary", "fingerprint": "47f179e4d801e30e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d260caa340a73168", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/release.py:22"}, "properties": {"repobilityId": "779d55c0fed571e9", "scanner": "scanner-primary", "fingerprint": "d260caa340a73168", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ac87bd9d90ea744b", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/generate_mermaid.py:44"}, "properties": {"repobilityId": "af74ac3695e9255f", "scanner": "scanner-primary", "fingerprint": "ac87bd9d90ea744b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e69c13e4d036b98d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/langgraph_events/_event.py:407"}, "properties": {"repobilityId": "24de989f237d4ea3", "scanner": "scanner-primary", "fingerprint": "e69c13e4d036b98d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2976f811248d10b0", "level": "note", "message": {"text": "Legacy-named symbol `_astream_v2` in src/langgraph_events/_graph.py:1426"}, "properties": {"repobilityId": "f0ffb389729bef37", "scanner": "scanner-primary", "fingerprint": "2976f811248d10b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f7294639ce157838", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/langgraph_events/_graph.py:742"}, "properties": {"repobilityId": "13fca52f1ccbc83a", "scanner": "scanner-primary", "fingerprint": "f7294639ce157838", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e1d6a9f2484dcf0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/langgraph_events/_handler.py:222"}, "properties": {"repobilityId": "9b2ff4117e28e8bc", "scanner": "scanner-primary", "fingerprint": "9e1d6a9f2484dcf0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa5f42e5de46e357", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/langgraph_events/serde/_jsonplus.py:43"}, "properties": {"repobilityId": "149ece2e6d411ccc", "scanner": "scanner-primary", "fingerprint": "aa5f42e5de46e357", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1e070acc5bd21a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/langgraph_events/serde/__init__.py:41"}, "properties": {"repobilityId": "f2e2211efed7d02e", "scanner": "scanner-primary", "fingerprint": "b1e070acc5bd21a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9d85e9a528155de", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/langgraph_events/serde/migrations/_core.py:346"}, "properties": {"repobilityId": "acf21a631b3164e2", "scanner": "scanner-primary", "fingerprint": "f9d85e9a528155de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-557b8391bf160e8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/langgraph_events/serde/migrations/testing.py:25"}, "properties": {"repobilityId": "a6fddb5f30846a50", "scanner": "scanner-primary", "fingerprint": "557b8391bf160e8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b8542f55e257b4a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/langgraph_events/_namespace/_command_privacy.py:52"}, "properties": {"repobilityId": "740df4550b79b494", "scanner": "scanner-primary", "fingerprint": "7b8542f55e257b4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93ae587e96afad89", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/langgraph_events/_namespace/_model.py:40"}, "properties": {"repobilityId": "808b5f4a9eb7c07d", "scanner": "scanner-primary", "fingerprint": "93ae587e96afad89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e085629a8de78d1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/langgraph_events/_namespace/_mermaid.py:219"}, "properties": {"repobilityId": "c3f27976635372f2", "scanner": "scanner-primary", "fingerprint": "5e085629a8de78d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2b52ceed6699860", "level": "note", "message": {"text": "Legacy-named symbol `_astream_v2` in src/langgraph_events/agui/_adapter.py:428"}, "properties": {"repobilityId": "d479fa10d58881eb", "scanner": "scanner-primary", "fingerprint": "f2b52ceed6699860", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-609d19954133f1f2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/langgraph_events/agui/_adapter.py:126"}, "properties": {"repobilityId": "0e7436aef21a725a", "scanner": "scanner-primary", "fingerprint": "609d19954133f1f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "0cc001af87679698", "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": "e9eb448b42fdf366", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "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": "ea6b41a6711e8177", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "dbdc00a4ec577282", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "ac31bd0c559c260e", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "07373c74b6213ae8", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "2ef7045b16e7cdbe", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "3094cb8207e2e3ba", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "da486b8675f19ec1", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "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": "9c08dfd84da5bf32", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "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": "1e6273a7fa9562c1", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}