{"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-9bcfe7890165d3ab", "name": "`truncate` class without `title=` for hover reveal \u2014 crates/smooth-web/web/src/pages/pearls.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 crates/smooth-web/web/src/pages/pearls.tsx:194"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-303a6e7d2675d726", "name": "`truncate` class without `title=` for hover reveal \u2014 crates/smooth-web/web/src/pages/dashboard.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 crates/smooth-web/web/src/pages/dashboard.tsx:91"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca47cbdbfc499cd5", "name": "`truncate` class without `title=` for hover reveal \u2014 crates/smooth-web/web/src/pages/chat.tsx:560", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 crates/smooth-web/web/src/pages/chat.tsx:560"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b05e436e1eb737cc", "name": "Insecure pattern 'exec_used' in CLAUDE.md:115", "shortDescription": {"text": "Insecure pattern 'exec_used' in CLAUDE.md:115"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b02201dd3ee2135", "name": "Insecure pattern 'node_child_process' in scripts/ci-publish.mjs:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ci-publish.mjs:15"}, "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-16d18604780b34b4", "name": "Insecure pattern 'node_child_process' in scripts/ci-version.mjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ci-version.mjs:12"}, "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-e1211dcc185b0c7b", "name": "Possible secret in crates/smooth-narc/src/detectors.rs", "shortDescription": {"text": "Possible secret in crates/smooth-narc/src/detectors.rs"}, "fullDescription": {"text": "Detected pattern matching github_token. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-3f847f2de1a699a8", "name": "Insecure pattern 'eval_used' in crates/smooth-code/src/permissions.rs:51", "shortDescription": {"text": "Insecure pattern 'eval_used' in crates/smooth-code/src/permissions.rs:51"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-72ca5e45949ef6d5", "name": "Insecure pattern 'exec_used' in crates/smooth-code/src/permissions.rs:52", "shortDescription": {"text": "Insecure pattern 'exec_used' in crates/smooth-code/src/permissions.rs:52"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e74f294b720edd78", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "taiki-e/install-action@nextest can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46c644c6227e4d4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1838a141491ce38c", "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-6a3244358b3c355b", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-699348849d904422", "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-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-045e82a2b1f776a6", "name": "Very large file: crates/smooth-cli/src/config.rs (1478 lines)", "shortDescription": {"text": "Very large file: crates/smooth-cli/src/config.rs (1478 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-94fb05cd63fc08fe", "name": "Very large file: crates/smooth-cli/src/main.rs (7037 lines)", "shortDescription": {"text": "Very large file: crates/smooth-cli/src/main.rs (7037 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-c7b2460022c94213", "name": "Very large file: crates/smooth-cast/src/coding_workflow.rs (1958 lines)", "shortDescription": {"text": "Very large file: crates/smooth-cast/src/coding_workflow.rs (1958 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-cb517677325ab07a", "name": "Very large file: crates/smooth-operative/src/main.rs (2922 lines)", "shortDescription": {"text": "Very large file: crates/smooth-operative/src/main.rs (2922 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-213c5c6e7213a614", "name": "Very large file: crates/smooth-bench/src/lib.rs (1721 lines)", "shortDescription": {"text": "Very large file: crates/smooth-bench/src/lib.rs (1721 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-ac52edf8c1a4c335", "name": "Very large file: crates/smooth-bench/src/tmux_driver.rs (1350 lines)", "shortDescription": {"text": "Very large file: crates/smooth-bench/src/tmux_driver.rs (1350 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-d5eab6c6c784cec3", "name": "Very large file: crates/smooth-bench/src/human_driver.rs (1376 lines)", "shortDescription": {"text": "Very large file: crates/smooth-bench/src/human_driver.rs (1376 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-953a7b3200844f03", "name": "Very large file: crates/smooth-bench/src/agent_driver.rs (1685 lines)", "shortDescription": {"text": "Very large file: crates/smooth-bench/src/agent_driver.rs (1685 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-3fce98e9f8db7560", "name": "Very large file: crates/smooth-code/src/model_picker.rs (1387 lines)", "shortDescription": {"text": "Very large file: crates/smooth-code/src/model_picker.rs (1387 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-f69fea3cac96325f", "name": "Very large file: crates/smooth-code/src/app.rs (1503 lines)", "shortDescription": {"text": "Very large file: crates/smooth-code/src/app.rs (1503 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-ea8b367c56a69d80", "name": "Very large file: crates/smooth-bigsmooth/src/server.rs (6140 lines)", "shortDescription": {"text": "Very large file: crates/smooth-bigsmooth/src/server.rs (6140 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "35 tests / 256 src (ratio 0.14)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-866b69eb204ad939", "name": "Node manifest has dependencies but no lockfile: crates/smooth-cli/src/config_templates/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: crates/smooth-cli/src/config_templates/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-4222a9d9d56b2935", "name": "Node manifest has dependencies but no lockfile: crates/smooth-bigsmooth/tests/fixtures/frontend_app_spec/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: crates/smooth-bigsmooth/tests/fixtures/frontend_app_spec/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 14 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 130 placeholder/mock markers across 38 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-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 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-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-6aae1ab688b87d4a", "name": "Agent authority lacks a verifier contract: crates/smooth-operative/prompts/providers/gemini.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: crates/smooth-operative/prompts/providers/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-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "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-013d08c610cc38a4", "name": "Commented-code block (5 lines) in scripts/ci-publish.mjs:23", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/ci-publish.mjs:23"}, "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-e13b3d0a9a5a68bb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 crates/smooth-web/web/src/api.ts:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 crates/smooth-web/web/src/api.ts:8"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e6ba18df51f39e4", "name": "Commented-code block (16 lines) in crates/smooth-bigsmooth/tests/fixtures/frontend_app_spec/tests/app.test.tsx:3", "shortDescription": {"text": "Commented-code block (16 lines) in crates/smooth-bigsmooth/tests/fixtures/frontend_app_spec/tests/app.test.tsx:3"}, "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}}]}}, "automationDetails": {"id": "repobility/19916"}, "properties": {"repository": "SmooAI/smooth", "repoUrl": "https://github.com/SmooAI/smooth", "branch": "main"}, "results": [{"ruleId": "scanner-9bcfe7890165d3ab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 crates/smooth-web/web/src/pages/pearls.tsx:194"}, "properties": {"repobilityId": "855ec4b7e509e0d0", "scanner": "scanner-primary", "fingerprint": "9bcfe7890165d3ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-303a6e7d2675d726", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 crates/smooth-web/web/src/pages/dashboard.tsx:91"}, "properties": {"repobilityId": "5dd6e9a622a26a97", "scanner": "scanner-primary", "fingerprint": "303a6e7d2675d726", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ca47cbdbfc499cd5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 crates/smooth-web/web/src/pages/chat.tsx:560"}, "properties": {"repobilityId": "fdbd133190a3eb03", "scanner": "scanner-primary", "fingerprint": "ca47cbdbfc499cd5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b05e436e1eb737cc", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in CLAUDE.md:115"}, "properties": {"repobilityId": "49bc547a0845553b", "scanner": "scanner-primary", "fingerprint": "b05e436e1eb737cc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-6b02201dd3ee2135", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ci-publish.mjs:15"}, "properties": {"repobilityId": "a38ff81a9b2557c1", "scanner": "scanner-primary", "fingerprint": "6b02201dd3ee2135", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ci-publish.mjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-16d18604780b34b4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ci-version.mjs:12"}, "properties": {"repobilityId": "95b0e3ede39d8e1a", "scanner": "scanner-primary", "fingerprint": "16d18604780b34b4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ci-version.mjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-e1211dcc185b0c7b", "level": "error", "message": {"text": "Possible secret in crates/smooth-narc/src/detectors.rs"}, "properties": {"repobilityId": "13cc173b6e7766d3", "scanner": "scanner-primary", "fingerprint": "e1211dcc185b0c7b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crates/smooth-narc/src/detectors.rs"}, "region": {"startLine": 509}}}]}, {"ruleId": "scanner-e1211dcc185b0c7b", "level": "error", "message": {"text": "Possible secret in crates/smooth-narc/src/detectors.rs"}, "properties": {"repobilityId": "72bf64e0bf3c5099", "scanner": "scanner-primary", "fingerprint": "e1211dcc185b0c7b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crates/smooth-narc/src/detectors.rs"}, "region": {"startLine": 522}}}]}, {"ruleId": "scanner-3f847f2de1a699a8", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in crates/smooth-code/src/permissions.rs:51"}, "properties": {"repobilityId": "1f52f38600b40309", "scanner": "scanner-primary", "fingerprint": "3f847f2de1a699a8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crates/smooth-code/src/permissions.rs"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-72ca5e45949ef6d5", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in crates/smooth-code/src/permissions.rs:52"}, "properties": {"repobilityId": "9b37a8da1d4727cb", "scanner": "scanner-primary", "fingerprint": "72ca5e45949ef6d5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crates/smooth-code/src/permissions.rs"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a04d28237dbe094b", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-e74f294b720edd78", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5ec61d25f7b6fc57", "scanner": "scanner-primary", "fingerprint": "e74f294b720edd78", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pr-checks.yml"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2644034c718fb80d", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a76b700066ca8f5", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "eeb76410cc935c30", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e54fac6c290138e", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a0f3bb36d11e757e", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "795422ca0cf75519", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 89}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e54fac6c290138e", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a76b700066ca8f5", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 197}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "eeb76410cc935c30", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5ab0c5bd71e63ad8", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 220}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b0f359fc82dc1097", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 236}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0dc584a111ffc00", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 267}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a3244358b3c355b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "aa3501a9ad244a78", "scanner": "scanner-primary", "fingerprint": "6a3244358b3c355b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/the-line.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-6a3244358b3c355b", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7f25f0eee976f0d1", "scanner": "scanner-primary", "fingerprint": "6a3244358b3c355b", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/the-line.yml"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-6a3244358b3c355b", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2f9318ddf6d5298b", "scanner": "scanner-primary", "fingerprint": "6a3244358b3c355b", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/the-line.yml"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-6a3244358b3c355b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "84bbc78fa0d62f41", "scanner": "scanner-primary", "fingerprint": "6a3244358b3c355b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/the-line.yml"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-699348849d904422", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "7aff32454de03a27", "scanner": "scanner-primary", "fingerprint": "699348849d904422", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/the-line.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-045e82a2b1f776a6", "level": "note", "message": {"text": "Very large file: crates/smooth-cli/src/config.rs (1478 lines)"}, "properties": {"repobilityId": "04436f98ef9633ac", "scanner": "scanner-primary", "fingerprint": "045e82a2b1f776a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-94fb05cd63fc08fe", "level": "note", "message": {"text": "Very large file: crates/smooth-cli/src/main.rs (7037 lines)"}, "properties": {"repobilityId": "55f0e87b5919fc1d", "scanner": "scanner-primary", "fingerprint": "94fb05cd63fc08fe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c7b2460022c94213", "level": "note", "message": {"text": "Very large file: crates/smooth-cast/src/coding_workflow.rs (1958 lines)"}, "properties": {"repobilityId": "78e031ccd6f5b323", "scanner": "scanner-primary", "fingerprint": "c7b2460022c94213", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cb517677325ab07a", "level": "note", "message": {"text": "Very large file: crates/smooth-operative/src/main.rs (2922 lines)"}, "properties": {"repobilityId": "bab914bf5a58f246", "scanner": "scanner-primary", "fingerprint": "cb517677325ab07a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-213c5c6e7213a614", "level": "note", "message": {"text": "Very large file: crates/smooth-bench/src/lib.rs (1721 lines)"}, "properties": {"repobilityId": "95d3b7ef518248de", "scanner": "scanner-primary", "fingerprint": "213c5c6e7213a614", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ac52edf8c1a4c335", "level": "note", "message": {"text": "Very large file: crates/smooth-bench/src/tmux_driver.rs (1350 lines)"}, "properties": {"repobilityId": "2c4cd511130ae2fc", "scanner": "scanner-primary", "fingerprint": "ac52edf8c1a4c335", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d5eab6c6c784cec3", "level": "note", "message": {"text": "Very large file: crates/smooth-bench/src/human_driver.rs (1376 lines)"}, "properties": {"repobilityId": "aa57c8f926d2db42", "scanner": "scanner-primary", "fingerprint": "d5eab6c6c784cec3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-953a7b3200844f03", "level": "note", "message": {"text": "Very large file: crates/smooth-bench/src/agent_driver.rs (1685 lines)"}, "properties": {"repobilityId": "cf058f9248f3fb09", "scanner": "scanner-primary", "fingerprint": "953a7b3200844f03", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3fce98e9f8db7560", "level": "note", "message": {"text": "Very large file: crates/smooth-code/src/model_picker.rs (1387 lines)"}, "properties": {"repobilityId": "84ac549b5548eff5", "scanner": "scanner-primary", "fingerprint": "3fce98e9f8db7560", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f69fea3cac96325f", "level": "note", "message": {"text": "Very large file: crates/smooth-code/src/app.rs (1503 lines)"}, "properties": {"repobilityId": "36f7d48d47d5d698", "scanner": "scanner-primary", "fingerprint": "f69fea3cac96325f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea8b367c56a69d80", "level": "note", "message": {"text": "Very large file: crates/smooth-bigsmooth/src/server.rs (6140 lines)"}, "properties": {"repobilityId": "de3af59d8329cbc7", "scanner": "scanner-primary", "fingerprint": "ea8b367c56a69d80", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-866b69eb204ad939", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: crates/smooth-cli/src/config_templates/package.json"}, "properties": {"repobilityId": "58abfc1c762e69a4", "scanner": "scanner-primary", "fingerprint": "866b69eb204ad939", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crates/smooth-cli/src/config_templates/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4222a9d9d56b2935", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: crates/smooth-bigsmooth/tests/fixtures/frontend_app_spec/package.json"}, "properties": {"repobilityId": "40cc30d658807472", "scanner": "scanner-primary", "fingerprint": "4222a9d9d56b2935", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crates/smooth-bigsmooth/tests/fixtures/frontend_app_spec/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "789861384b6a6fe9", "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": "10464b287f7e512c", "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": "fa19311a31976dfb", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "6c79e5e7c92559de", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "b55e0c1b8e4f3b88", "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": "b2fd809f929d665f", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-6aae1ab688b87d4a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: crates/smooth-operative/prompts/providers/gemini.md"}, "properties": {"repobilityId": "6cbc9a7ae6f2dfac", "scanner": "scanner-primary", "fingerprint": "6aae1ab688b87d4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "gemini_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crates/smooth-operative/prompts/providers/gemini.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-013d08c610cc38a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/ci-publish.mjs:23"}, "properties": {"repobilityId": "90774f55e7875d86", "scanner": "scanner-primary", "fingerprint": "013d08c610cc38a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e13b3d0a9a5a68bb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 crates/smooth-web/web/src/api.ts:8"}, "properties": {"repobilityId": "472e20ab28cab2cb", "scanner": "scanner-primary", "fingerprint": "e13b3d0a9a5a68bb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4e6ba18df51f39e4", "level": "none", "message": {"text": "Commented-code block (16 lines) in crates/smooth-bigsmooth/tests/fixtures/frontend_app_spec/tests/app.test.tsx:3"}, "properties": {"repobilityId": "1f05c59c1ff80486", "scanner": "scanner-primary", "fingerprint": "4e6ba18df51f39e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}