{"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-5a7d73e50c27873d", "name": "Possibly dead Python function: require_file", "shortDescription": {"text": "Possibly dead Python function: require_file"}, "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-e29dfc66db033a54", "name": "Possibly dead Python function: auth_app", "shortDescription": {"text": "Possibly dead Python function: auth_app"}, "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-3842d9d19296b6d8", "name": "Possibly dead Python function: verify_token", "shortDescription": {"text": "Possibly dead Python function: verify_token"}, "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-027c8e69241cb035", "name": "Possibly dead Python function: objective", "shortDescription": {"text": "Possibly dead Python function: objective"}, "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-f0c4c716381fb18c", "name": "Possibly dead Python function: setup_qmd_collection", "shortDescription": {"text": "Possibly dead Python function: setup_qmd_collection"}, "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-9f8c69f882784439", "name": "Possibly dead Python function: normalize_all_notes", "shortDescription": {"text": "Possibly dead Python function: normalize_all_notes"}, "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-4fe78edac4e77fa3", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0c875fab812197d", "name": "Docker base image uses a mutable or implicit tag: pathlib", "shortDescription": {"text": "Docker base image uses a mutable or implicit tag: pathlib"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dba1d0c2b18c26b9", "name": "Docker base image uses a mutable or implicit tag: urllib.request", "shortDescription": {"text": "Docker base image uses a mutable or implicit tag: urllib.request"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "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-a61157038c86953a", "name": "Insecure pattern 'node_child_process' in extensions/memento-process-worker.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in extensions/memento-process-worker.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5640ab4a5ca1387", "name": "Very large file: tests/test_lifecycle.py (1976 lines)", "shortDescription": {"text": "Very large file: tests/test_lifecycle.py (1976 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-dd18a33db112b6a5", "name": "Very large file: memento/lifecycle.py (2589 lines)", "shortDescription": {"text": "Very large file: memento/lifecycle.py (2589 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-0adfc84adb86a20b", "name": "Very large file: memento/pi_bridge.py (1406 lines)", "shortDescription": {"text": "Very large file: memento/pi_bridge.py (1406 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-c35363c98bdbf587", "name": "Very large file: hooks/memento-inception.py (1539 lines)", "shortDescription": {"text": "Very large file: hooks/memento-inception.py (1539 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 323 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-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 15 placeholder/mock markers across 4 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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-877137aaebef60d3", "name": "Agent authority lacks a verifier contract: skills/memento-defrag/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/memento-defrag/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-d57a165b5d3d99f4", "name": "Agent authority lacks a verifier contract: skills/start-fresh/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/start-fresh/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-d171527164447f71", "name": "Agent authority lacks a verifier contract: skills/memento/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/memento/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-3aac56bc12ca4ddd", "name": "Agent authority lacks a verifier contract: skills/generic/start-fresh/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/generic/start-fresh/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-10da30ab40cf6b1f", "name": "Agent authority lacks a verifier contract: skills/generic/continue-work/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/generic/continue-work/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-547693c7a5db42cc", "name": "Agent authority lacks a verifier contract: skills/generic/inception/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/generic/inception/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-e8e2ae38cca4cb5b", "name": "Agent authority lacks a verifier contract: skills/orra-init/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/orra-init/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-45b59e1cfe7f5bcc", "name": "Agent authority lacks a verifier contract: skills/continue-work/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/continue-work/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-698625c377c64fff", "name": "Agent authority lacks a verifier contract: skills/inception/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/inception/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-186b79c4aa169c05", "name": "Legacy-named symbol `ses_old` in tests/test_adapters.py:483", "shortDescription": {"text": "Legacy-named symbol `ses_old` in tests/test_adapters.py:483"}, "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-50b680c8c4a60f4e", "name": "Legacy-named symbol `test_supersede_writes_v2` in tests/test_daily_snapshot.py:89", "shortDescription": {"text": "Legacy-named symbol `test_supersede_writes_v2` in tests/test_daily_snapshot.py:89"}, "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-0e71666b48d88ec1", "name": "Legacy-named symbol `parsed_v1` in tests/test_remote_sync.py:391", "shortDescription": {"text": "Legacy-named symbol `parsed_v1` in tests/test_remote_sync.py:391"}, "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-2a1103b966e9bb4a", "name": "Legacy-named symbol `test_envelope_loader_distinguishes_envelope_from_legacy` in tests/test_sync_retry.py:205", "shortDescription": {"text": "Legacy-named symbol `test_envelope_loader_distinguishes_envelope_from_legacy` in tests/test_sync_retry.py:205"}, "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-2cf2b6a9066571d5", "name": "Legacy-named symbol `nOld` in tests/test_note_evolution.py:98", "shortDescription": {"text": "Legacy-named symbol `nOld` in tests/test_note_evolution.py:98"}, "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-309cd4c9a4633b2c", "name": "Legacy-named symbol `test_repair_stale_headless_mcp_config_patches_known_bad_installed_copy` in tests/test_install_helpe", "shortDescription": {"text": "Legacy-named symbol `test_repair_stale_headless_mcp_config_patches_known_bad_installed_copy` in tests/test_install_helpers.py:143"}, "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-49a11b7f66f2b0c7", "name": "Legacy-named symbol `current_plus_legacy` in tests/test_lifecycle.py:216", "shortDescription": {"text": "Legacy-named symbol `current_plus_legacy` in tests/test_lifecycle.py:216"}, "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-19f51c8cdf7d335a", "name": "Commented-code block (5 lines) in tests/test_inception_scoring.py:46", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_inception_scoring.py:46"}, "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-2fec19b6541066c5", "name": "Legacy-named symbol `current_plus_legacy` in memento/lifecycle.py:1913", "shortDescription": {"text": "Legacy-named symbol `current_plus_legacy` in memento/lifecycle.py:1913"}, "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-9d6ef9e91596a3c2", "name": "Commented-code block (5 lines) in memento/lifecycle.py:1562", "shortDescription": {"text": "Commented-code block (5 lines) in memento/lifecycle.py:1562"}, "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-88872c035cd5bcd7", "name": "Commented-code block (9 lines) in memento/llm.py:181", "shortDescription": {"text": "Commented-code block (9 lines) in memento/llm.py:181"}, "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-108b49a14648e401", "name": "Network/subprocess call without timeout or try/except \u2014 benchmark/latency_projection.py:211", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmark/latency_projection.py:211"}, "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-464cab5408f524d5", "name": "Commented-code block (6 lines) in hooks/memento-triage.py:671", "shortDescription": {"text": "Commented-code block (6 lines) in hooks/memento-triage.py:671"}, "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-19a2b928f2f1341e", "name": "Network/subprocess call without timeout or try/except \u2014 hooks/memento-triage.py:275", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 hooks/memento-triage.py:275"}, "fullDescription": {"text": "`subprocess.Popen(...)` 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-ca3e08d1db2840ae", "name": "Commented-code block (5 lines) in hooks/memento-remote-sync.py:198", "shortDescription": {"text": "Commented-code block (5 lines) in hooks/memento-remote-sync.py:198"}, "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-b548ff92f2497dbc", "name": "Network/subprocess call without timeout or try/except \u2014 hooks/wait-and-commit.py:45", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 hooks/wait-and-commit.py:45"}, "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-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:\nmemento/search_backend.py:is_available, memento/search_backend.py:is_available, memento/search_backend.py:is_available\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmemento/search_backend.py:search, memento/search_backend.py:search, memento/search_backend.py:search, memento/embedded_search.py:search\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:\nmemento/mcp_server.py:memento_store, memento/remote_client.py:store\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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmemento/embedding.py:embed, memento/embedding.py:embed, memento/embedding.py:embed, memento/embedding.py:embed\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/18891"}, "properties": {"repository": "sandsower/memento-vault", "repoUrl": "https://github.com/sandsower/memento-vault", "branch": "main"}, "results": [{"ruleId": "scanner-5a7d73e50c27873d", "level": "note", "message": {"text": "Possibly dead Python function: require_file"}, "properties": {"repobilityId": "26609b3eae244482", "scanner": "scanner-primary", "fingerprint": "5a7d73e50c27873d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/release_smoke.py:53"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e29dfc66db033a54", "level": "note", "message": {"text": "Possibly dead Python function: auth_app"}, "properties": {"repobilityId": "17109def8d51c067", "scanner": "scanner-primary", "fingerprint": "e29dfc66db033a54", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memento/mcp_server.py:1052"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3842d9d19296b6d8", "level": "note", "message": {"text": "Possibly dead Python function: verify_token"}, "properties": {"repobilityId": "6a5c4adccfca0a15", "scanner": "scanner-primary", "fingerprint": "3842d9d19296b6d8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memento/auth.py:81"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-027c8e69241cb035", "level": "note", "message": {"text": "Possibly dead Python function: objective"}, "properties": {"repobilityId": "b2ca8f96950eb149", "scanner": "scanner-primary", "fingerprint": "027c8e69241cb035", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "benchmark/optuna_sweep.py:68"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f0c4c716381fb18c", "level": "note", "message": {"text": "Possibly dead Python function: setup_qmd_collection"}, "properties": {"repobilityId": "cd44794aaffd218c", "scanner": "scanner-primary", "fingerprint": "f0c4c716381fb18c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "benchmark/latency_projection.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9f8c69f882784439", "level": "note", "message": {"text": "Possibly dead Python function: normalize_all_notes"}, "properties": {"repobilityId": "f123d510709a2da1", "scanner": "scanner-primary", "fingerprint": "9f8c69f882784439", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "hooks/memento-triage.py:249"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4fe78edac4e77fa3", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12.11-slim"}, "properties": {"repobilityId": "d786b846dc6cf6a0", "scanner": "scanner-primary", "fingerprint": "4fe78edac4e77fa3", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d0c875fab812197d", "level": "warning", "message": {"text": "Docker base image uses a mutable or implicit tag: pathlib"}, "properties": {"repobilityId": "172d31d9b3c71285", "scanner": "scanner-primary", "fingerprint": "d0c875fab812197d", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-dba1d0c2b18c26b9", "level": "warning", "message": {"text": "Docker base image uses a mutable or implicit tag: urllib.request"}, "properties": {"repobilityId": "1eaa289d5a0cee6e", "scanner": "scanner-primary", "fingerprint": "dba1d0c2b18c26b9", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"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-a61157038c86953a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in extensions/memento-process-worker.mjs:2"}, "properties": {"repobilityId": "e8f23d9338b035ae", "scanner": "scanner-primary", "fingerprint": "a61157038c86953a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extensions/memento-process-worker.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-b5640ab4a5ca1387", "level": "note", "message": {"text": "Very large file: tests/test_lifecycle.py (1976 lines)"}, "properties": {"repobilityId": "995a06738e77b4c8", "scanner": "scanner-primary", "fingerprint": "b5640ab4a5ca1387", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dd18a33db112b6a5", "level": "note", "message": {"text": "Very large file: memento/lifecycle.py (2589 lines)"}, "properties": {"repobilityId": "83a9c102f4da29d4", "scanner": "scanner-primary", "fingerprint": "dd18a33db112b6a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0adfc84adb86a20b", "level": "note", "message": {"text": "Very large file: memento/pi_bridge.py (1406 lines)"}, "properties": {"repobilityId": "4071e4fb2a7f5aee", "scanner": "scanner-primary", "fingerprint": "0adfc84adb86a20b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c35363c98bdbf587", "level": "note", "message": {"text": "Very large file: hooks/memento-inception.py (1539 lines)"}, "properties": {"repobilityId": "951c24e679253c41", "scanner": "scanner-primary", "fingerprint": "c35363c98bdbf587", "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": "1902dc7ae8dcf3eb", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "f1ac89512300b002", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "627c5398073a6161", "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": "7d9c8f2a426dfff8", "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": "ae80d4e0e16582a6", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-877137aaebef60d3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/memento-defrag/SKILL.md"}, "properties": {"repobilityId": "6d93ba5ef53fefa3", "scanner": "scanner-primary", "fingerprint": "877137aaebef60d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/memento-defrag/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d57a165b5d3d99f4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/start-fresh/SKILL.md"}, "properties": {"repobilityId": "8d1e32ffa6b8c105", "scanner": "scanner-primary", "fingerprint": "d57a165b5d3d99f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/start-fresh/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d171527164447f71", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/memento/SKILL.md"}, "properties": {"repobilityId": "ddea4d55e0bf921d", "scanner": "scanner-primary", "fingerprint": "d171527164447f71", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/memento/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3aac56bc12ca4ddd", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/generic/start-fresh/SKILL.md"}, "properties": {"repobilityId": "2aece7bf9d9ed0b3", "scanner": "scanner-primary", "fingerprint": "3aac56bc12ca4ddd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/generic/start-fresh/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-10da30ab40cf6b1f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/generic/continue-work/SKILL.md"}, "properties": {"repobilityId": "e8074cc7d848639b", "scanner": "scanner-primary", "fingerprint": "10da30ab40cf6b1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/generic/continue-work/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-547693c7a5db42cc", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/generic/inception/SKILL.md"}, "properties": {"repobilityId": "f444c76e18fba21f", "scanner": "scanner-primary", "fingerprint": "547693c7a5db42cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/generic/inception/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e8e2ae38cca4cb5b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/orra-init/SKILL.md"}, "properties": {"repobilityId": "d433153db59bd0b1", "scanner": "scanner-primary", "fingerprint": "e8e2ae38cca4cb5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/orra-init/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-45b59e1cfe7f5bcc", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/continue-work/SKILL.md"}, "properties": {"repobilityId": "8ed54da145947f45", "scanner": "scanner-primary", "fingerprint": "45b59e1cfe7f5bcc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/continue-work/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-698625c377c64fff", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/inception/SKILL.md"}, "properties": {"repobilityId": "4f3eddc9ac8a3bb9", "scanner": "scanner-primary", "fingerprint": "698625c377c64fff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/inception/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-186b79c4aa169c05", "level": "note", "message": {"text": "Legacy-named symbol `ses_old` in tests/test_adapters.py:483"}, "properties": {"repobilityId": "81b650a22ab21702", "scanner": "scanner-primary", "fingerprint": "186b79c4aa169c05", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-50b680c8c4a60f4e", "level": "note", "message": {"text": "Legacy-named symbol `test_supersede_writes_v2` in tests/test_daily_snapshot.py:89"}, "properties": {"repobilityId": "19723d110490818b", "scanner": "scanner-primary", "fingerprint": "50b680c8c4a60f4e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0e71666b48d88ec1", "level": "note", "message": {"text": "Legacy-named symbol `parsed_v1` in tests/test_remote_sync.py:391"}, "properties": {"repobilityId": "a3dd551d88dae940", "scanner": "scanner-primary", "fingerprint": "0e71666b48d88ec1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2a1103b966e9bb4a", "level": "note", "message": {"text": "Legacy-named symbol `test_envelope_loader_distinguishes_envelope_from_legacy` in tests/test_sync_retry.py:205"}, "properties": {"repobilityId": "b129ae1c21326604", "scanner": "scanner-primary", "fingerprint": "2a1103b966e9bb4a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2cf2b6a9066571d5", "level": "note", "message": {"text": "Legacy-named symbol `nOld` in tests/test_note_evolution.py:98"}, "properties": {"repobilityId": "628c597e1f23d12b", "scanner": "scanner-primary", "fingerprint": "2cf2b6a9066571d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-309cd4c9a4633b2c", "level": "note", "message": {"text": "Legacy-named symbol `test_repair_stale_headless_mcp_config_patches_known_bad_installed_copy` in tests/test_install_helpers.py:143"}, "properties": {"repobilityId": "5eef916d44a3427c", "scanner": "scanner-primary", "fingerprint": "309cd4c9a4633b2c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-49a11b7f66f2b0c7", "level": "note", "message": {"text": "Legacy-named symbol `current_plus_legacy` in tests/test_lifecycle.py:216"}, "properties": {"repobilityId": "c841388b42472889", "scanner": "scanner-primary", "fingerprint": "49a11b7f66f2b0c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-19f51c8cdf7d335a", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_inception_scoring.py:46"}, "properties": {"repobilityId": "560de090576e2c4f", "scanner": "scanner-primary", "fingerprint": "19f51c8cdf7d335a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fec19b6541066c5", "level": "note", "message": {"text": "Legacy-named symbol `current_plus_legacy` in memento/lifecycle.py:1913"}, "properties": {"repobilityId": "1366e4e778d1d99d", "scanner": "scanner-primary", "fingerprint": "2fec19b6541066c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9d6ef9e91596a3c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in memento/lifecycle.py:1562"}, "properties": {"repobilityId": "642690ba73d432cc", "scanner": "scanner-primary", "fingerprint": "9d6ef9e91596a3c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88872c035cd5bcd7", "level": "none", "message": {"text": "Commented-code block (9 lines) in memento/llm.py:181"}, "properties": {"repobilityId": "c456f0e8c851de68", "scanner": "scanner-primary", "fingerprint": "88872c035cd5bcd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-108b49a14648e401", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 benchmark/latency_projection.py:211"}, "properties": {"repobilityId": "215a4f8fc59c5c9d", "scanner": "scanner-primary", "fingerprint": "108b49a14648e401", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-464cab5408f524d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in hooks/memento-triage.py:671"}, "properties": {"repobilityId": "80163b1c724ce991", "scanner": "scanner-primary", "fingerprint": "464cab5408f524d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19a2b928f2f1341e", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 hooks/memento-triage.py:275"}, "properties": {"repobilityId": "de8cab96a67c1728", "scanner": "scanner-primary", "fingerprint": "19a2b928f2f1341e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca3e08d1db2840ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in hooks/memento-remote-sync.py:198"}, "properties": {"repobilityId": "12904584e23b3f63", "scanner": "scanner-primary", "fingerprint": "ca3e08d1db2840ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b548ff92f2497dbc", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 hooks/wait-and-commit.py:45"}, "properties": {"repobilityId": "162eebcab7ae06c3", "scanner": "scanner-primary", "fingerprint": "b548ff92f2497dbc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "55f637e9fbb44947", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "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": "0f581949be211fec", "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": "234dfe80bc18ca1a", "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": "d3c2013dd1ffec1c", "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": "814cb6d2b7e90e84", "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": "6d88d1bc11861b6a", "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": "72f336a575505e98", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "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": "2d214019bc0c21cf", "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": "b91b4229d263b997", "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": "639a0a122706bce3", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "91e3a61946e1e3de", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "996444a2ea029f2e", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "51d13791b0d814b0", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "eabf483c1fff68db", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "86733a924a458a5c", "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": "d3c8dafa5dffcd34", "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": "e7d57c971a643bf9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}