{"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-a1befa8a3684585e", "name": "Possibly dead Python function: disconnect", "shortDescription": {"text": "Possibly dead Python function: disconnect"}, "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-a63f0ba1b5f05f3f", "name": "Possibly dead Python function: is_connected", "shortDescription": {"text": "Possibly dead Python function: is_connected"}, "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-78d80a4e62f8e486", "name": "Possibly dead Python function: add_callback", "shortDescription": {"text": "Possibly dead Python function: add_callback"}, "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-7eb1e032510e02a9", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-3e6015f87ca28fc3", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-e5f3c5f7f74f189c", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-39a2e8aad247094d", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-085c8a6facfdc9a2", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-91346e1af850a3d9", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-136ffab80b70e289", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-776bd5a91e4926da", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-97ca17618749618c", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-4b40b7a5b62e6811", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-a29aff6265fbd7cb", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-852a9366f87fdad3", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-caac8b9bb2c99d95", "name": "Possibly dead Python function: event_callback", "shortDescription": {"text": "Possibly dead Python function: event_callback"}, "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-d7cf579348d12e82", "name": "Stray `console.log` in TS/JS \u2014 plugins/elgato-aethersdr/com.aethersdr.radio.sdPlugin/plugin.js:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/elgato-aethersdr/com.aethersdr.radio.sdPlugin/plugin.js:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46eebf835ee43bf6", "name": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/plugin/app.js:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/plugin/app.js:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe843436d136a2d1", "name": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/timers.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/timers.js:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec792356fae8e841", "name": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/ulanziApi.j", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/ulanziApi.js:182"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7508d0f663c05955", "name": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/utils.js:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/utils.js:433"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b83ace86288e0fd3", "name": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/test.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/test.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f42ea0dfd39b5d66", "name": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/randomPor", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/randomPort.js:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-272363a144f359e5", "name": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/ulanziApi", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/ulanziApi.js:155"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00569f0738dc50ff", "name": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/utils.js:", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/utils.js:207"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3cf18e974826702e", "name": "Privileged port 6 in use", "shortDescription": {"text": "Privileged port 6 in use"}, "fullDescription": {"text": "Port 6 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95d30d9dca5c52aa", "name": "Dockerfile runs as root: .github/docker/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: .github/docker/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-37ccb1b41d633328", "name": "Docker base image is tag-pinned but not digest-pinned: ubuntu:24.04", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: ubuntu:24.04"}, "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-7da10b18e9f97453", "name": "Insecure pattern 'direct_innerhtml_assignment' in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/ulanziApi.js:202"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ca4b57564dbde000", "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-01913bfc90537048", "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-d336bd7d9b1ff051", "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-78422a68f31957b7", "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-f7abfef73b6a65b9", "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-6d3280fa42f87293", "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-bc3a58dc61091a04", "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-1d018698d83069a0", "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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "1 test file(s) for 65 source file(s) (ratio 0.02). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e2a81708cd0c357", "name": "Node manifest has dependencies but no lockfile: plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-no", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 85 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-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: tests, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing tests, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-2679282aa1c484b5", "name": "Agent authority lacks a verifier contract: AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: AGENTS.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-b1d2ebb3fe2036f3", "name": "Agent authority lacks a verifier contract: GEMINI.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: GEMINI.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-8fcefa7b9b709492", "name": "Commented-code block (6 lines) in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/plugin/app.js:85", "shortDescription": {"text": "Commented-code block (6 lines) in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/plugin/app.js:85"}, "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-5cfbd04dc331960e", "name": "Commented-code block (7 lines) in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/ulanziAp", "shortDescription": {"text": "Commented-code block (7 lines) in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/ulanziApi.js:236"}, "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-418f827191bfda44", "name": "Commented-code block (5 lines) in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/ulanzi", "shortDescription": {"text": "Commented-code block (5 lines) in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/ulanziApi.js:16"}, "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-b4050774d9cc8682", "name": "Commented-code block (5 lines) in tools/audit_colours.py:65", "shortDescription": {"text": "Commented-code block (5 lines) in tools/audit_colours.py:65"}, "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-cc2bcde319ca7640", "name": "Commented-code block (5 lines) in tools/migrate_colours.py:183", "shortDescription": {"text": "Commented-code block (5 lines) in tools/migrate_colours.py:183"}, "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-2eb65064cc880fcc", "name": "Commented-code block (5 lines) in tools/check_a11y.py:77", "shortDescription": {"text": "Commented-code block (5 lines) in tools/check_a11y.py:77"}, "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-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:\nplugins/streamcontroller-aethersdr/actions/PTT/PTT.py:get_config_rows, plugins/streamcontroller-aethersdr/actions/TX/MOXToggle/MOXToggle.py:get_config_rows\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/23928"}, "properties": {"repository": "aethersdr/AetherSDR", "repoUrl": "https://github.com/aethersdr/AetherSDR", "branch": "main"}, "results": [{"ruleId": "scanner-a1befa8a3684585e", "level": "note", "message": {"text": "Possibly dead Python function: disconnect"}, "properties": {"repobilityId": "87a37be95663a882", "scanner": "scanner-primary", "fingerprint": "a1befa8a3684585e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/tci_client.py:52"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a63f0ba1b5f05f3f", "level": "note", "message": {"text": "Possibly dead Python function: is_connected"}, "properties": {"repobilityId": "9df7d4143f9f74d5", "scanner": "scanner-primary", "fingerprint": "a63f0ba1b5f05f3f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/tci_client.py:65"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-78d80a4e62f8e486", "level": "note", "message": {"text": "Possibly dead Python function: add_callback"}, "properties": {"repobilityId": "08e00c6d65f57c44", "scanner": "scanner-primary", "fingerprint": "78d80a4e62f8e486", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/tci_client.py:68"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7eb1e032510e02a9", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "7eb1e032510e02a9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/Mode/ModeDIGL/ModeDIGL.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3e6015f87ca28fc3", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "3e6015f87ca28fc3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/Mode/ModeAM/ModeAM.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e5f3c5f7f74f189c", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "e5f3c5f7f74f189c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/Mode/ModeUSB/ModeUSB.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-39a2e8aad247094d", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "39a2e8aad247094d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/Mode/ModeFM/ModeFM.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-085c8a6facfdc9a2", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "085c8a6facfdc9a2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/Mode/ModeFT8/ModeFT8.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-91346e1af850a3d9", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "91346e1af850a3d9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/Mode/ModeCW/ModeCW.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-136ffab80b70e289", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "136ffab80b70e289", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/Mode/ModeLSB/ModeLSB.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-776bd5a91e4926da", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "776bd5a91e4926da", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/Mode/ModeDIGU/ModeDIGU.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-97ca17618749618c", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "97ca17618749618c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/PTT/PTT.py:35"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4b40b7a5b62e6811", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "4b40b7a5b62e6811", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/DSP/NBToggle/NBToggle.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a29aff6265fbd7cb", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "a29aff6265fbd7cb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/DSP/SQLToggle/SQLToggle.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-852a9366f87fdad3", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "852a9366f87fdad3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/DSP/ANFToggle/ANFToggle.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-caac8b9bb2c99d95", "level": "note", "message": {"text": "Possibly dead Python function: event_callback"}, "properties": {"repobilityId": "d0caba2e1a1a2371", "scanner": "scanner-primary", "fingerprint": "caac8b9bb2c99d95", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/streamcontroller-aethersdr/actions/DSP/APFToggle/APFToggle.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d7cf579348d12e82", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/elgato-aethersdr/com.aethersdr.radio.sdPlugin/plugin.js:38"}, "properties": {"repobilityId": "7883b2011d4c89de", "scanner": "scanner-primary", "fingerprint": "d7cf579348d12e82", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46eebf835ee43bf6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/plugin/app.js:79"}, "properties": {"repobilityId": "e0776328582ba772", "scanner": "scanner-primary", "fingerprint": "46eebf835ee43bf6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe843436d136a2d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/timers.js:60"}, "properties": {"repobilityId": "fc393adc63d54497", "scanner": "scanner-primary", "fingerprint": "fe843436d136a2d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec792356fae8e841", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/ulanziApi.js:182"}, "properties": {"repobilityId": "e8ec1d2197c56e79", "scanner": "scanner-primary", "fingerprint": "ec792356fae8e841", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7508d0f663c05955", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/utils.js:433"}, "properties": {"repobilityId": "45a4725a1627b52e", "scanner": "scanner-primary", "fingerprint": "7508d0f663c05955", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b83ace86288e0fd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/test.js:12"}, "properties": {"repobilityId": "287ebfa77f9c986f", "scanner": "scanner-primary", "fingerprint": "b83ace86288e0fd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f42ea0dfd39b5d66", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/randomPort.js:47"}, "properties": {"repobilityId": "030af6e28c3d08b3", "scanner": "scanner-primary", "fingerprint": "f42ea0dfd39b5d66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-272363a144f359e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/ulanziApi.js:155"}, "properties": {"repobilityId": "4a3d494feac83df5", "scanner": "scanner-primary", "fingerprint": "272363a144f359e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00569f0738dc50ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/utils.js:207"}, "properties": {"repobilityId": "71520d58024ad659", "scanner": "scanner-primary", "fingerprint": "00569f0738dc50ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3cf18e974826702e", "level": "warning", "message": {"text": "Privileged port 6 in use"}, "properties": {"repobilityId": "888a3c205ea7334c", "scanner": "scanner-primary", "fingerprint": "3cf18e974826702e", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-rnnoise.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-95d30d9dca5c52aa", "level": "warning", "message": {"text": "Dockerfile runs as root: .github/docker/Dockerfile"}, "properties": {"repobilityId": "daf967f7355f19b7", "scanner": "scanner-primary", "fingerprint": "95d30d9dca5c52aa", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-37ccb1b41d633328", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: ubuntu:24.04"}, "properties": {"repobilityId": "03c0fcaa350d0949", "scanner": "scanner-primary", "fingerprint": "37ccb1b41d633328", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/docker/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7da10b18e9f97453", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/ulanziApi.js:202"}, "properties": {"repobilityId": "4171b51de71b6d64", "scanner": "scanner-primary", "fingerprint": "7da10b18e9f97453", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/ulanziApi.js"}, "region": {"startLine": 202}}}]}, {"ruleId": "scanner-ca4b57564dbde000", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "db80d438303e7647", "scanner": "scanner-primary", "fingerprint": "ca4b57564dbde000", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-ci-image.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-01913bfc90537048", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "3468db2a6294b1ef", "scanner": "scanner-primary", "fingerprint": "01913bfc90537048", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/appimage.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d336bd7d9b1ff051", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "877c803cc3174fbc", "scanner": "scanner-primary", "fingerprint": "d336bd7d9b1ff051", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-rnnoise.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-78422a68f31957b7", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "d9a5cf0265772746", "scanner": "scanner-primary", "fingerprint": "78422a68f31957b7", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/windows-installer.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f7abfef73b6a65b9", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "6d35b5e161f15ad2", "scanner": "scanner-primary", "fingerprint": "f7abfef73b6a65b9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sign-release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6d3280fa42f87293", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "2c900404b16836fc", "scanner": "scanner-primary", "fingerprint": "6d3280fa42f87293", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/streamdeck-plugins.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bc3a58dc61091a04", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "1f07af07c7771448", "scanner": "scanner-primary", "fingerprint": "bc3a58dc61091a04", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build-macos-qt.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1d018698d83069a0", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8f16f2b07018f45e", "scanner": "scanner-primary", "fingerprint": "1d018698d83069a0", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/macos-dmg.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-3e2a81708cd0c357", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/package.json"}, "properties": {"repobilityId": "187afe088f553625", "scanner": "scanner-primary", "fingerprint": "3e2a81708cd0c357", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "e2abc2628744813f", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "3939f7d31ac1a052", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "2e9e3eaa8ee5f731", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "ecdbde80ebfb78fe", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "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-2679282aa1c484b5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "properties": {"repobilityId": "27d579812e6be614", "scanner": "scanner-primary", "fingerprint": "2679282aa1c484b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b1d2ebb3fe2036f3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: GEMINI.md"}, "properties": {"repobilityId": "aed665d000b9a23e", "scanner": "scanner-primary", "fingerprint": "b1d2ebb3fe2036f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "gemini_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "GEMINI.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8fcefa7b9b709492", "level": "none", "message": {"text": "Commented-code block (6 lines) in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/plugin/app.js:85"}, "properties": {"repobilityId": "3f06780fd6a615c3", "scanner": "scanner-primary", "fingerprint": "8fcefa7b9b709492", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cfbd04dc331960e", "level": "none", "message": {"text": "Commented-code block (7 lines) in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-html/js/ulanziApi.js:236"}, "properties": {"repobilityId": "4eb63962b4867696", "scanner": "scanner-primary", "fingerprint": "5cfbd04dc331960e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-418f827191bfda44", "level": "none", "message": {"text": "Commented-code block (5 lines) in plugins/ulanzi-aethersdr/com.g0jkn.aethersdr.ulanziPlugin/libs/common-node/libs/ulanziApi.js:16"}, "properties": {"repobilityId": "63b9ae3151974945", "scanner": "scanner-primary", "fingerprint": "418f827191bfda44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4050774d9cc8682", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/audit_colours.py:65"}, "properties": {"repobilityId": "91ac980d6450da00", "scanner": "scanner-primary", "fingerprint": "b4050774d9cc8682", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc2bcde319ca7640", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/migrate_colours.py:183"}, "properties": {"repobilityId": "9ca87d87e5715667", "scanner": "scanner-primary", "fingerprint": "cc2bcde319ca7640", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2eb65064cc880fcc", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/check_a11y.py:77"}, "properties": {"repobilityId": "9835e28fe516ee9d", "scanner": "scanner-primary", "fingerprint": "2eb65064cc880fcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "63ba2105a6e53779", "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": "0bd686718d463e7b", "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": "a5cb0a498c2f7cd6", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}