{"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-eaf54a0047452ea8", "name": "Possibly dead Python function: capturing_send", "shortDescription": {"text": "Possibly dead Python function: capturing_send"}, "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-a7711c5904c23291", "name": "Stray `console.log` in TS/JS \u2014 worker/src/worker.js:361", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/worker.js:361"}, "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-a08bb3e937110af0", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-health-alert/index.ts:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-health-alert/index.ts:68"}, "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-7286dd7e7aef6900", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-articles/index.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-articles/index.ts:72"}, "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-48f1df8e683078cd", "name": "Stray `console.log` in TS/JS \u2014 admin-site/supabase.min.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 admin-site/supabase.min.js:7"}, "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-0e2460270d93a260", "name": "Dockerfile runs as root: mcp-server/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: mcp-server/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-103e69ca7b02fc1d", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be7070de0317cca5", "name": "Insecure pattern 'direct_innerhtml_assignment' in worker/admin/index.html:103", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in worker/admin/index.html:103"}, "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-e89ce8c70593bb87", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/update-transcript/index.ts:29", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-transcript/index.ts:29"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2d8aeb332151278", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/shorten-url/index.ts:167", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/shorten-url/index.ts:167"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-781b3542798726df", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/embed-articles/index.ts:85", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/embed-articles/index.ts:85"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f405f68364b51b61", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/db-stats/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/db-stats/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8bf4b4006f49e70d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/list-custom-links/index.ts:31", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/list-custom-links/index.ts:31"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-73f5759379511e86", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/analytics/index.ts:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/analytics/index.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6807841498bf2876", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-tracking-variants/index.ts:28", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-tracking-variants/index.ts:28"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-52d57da5df977947", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/sync-youtube/index.ts:298", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/sync-youtube/index.ts:298"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a3c2eedf3696d913", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/list-authors/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/list-authors/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1e500c8cb2644aca", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-content/index.ts:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-content/index.ts:10"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8962b34dfda2c18", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/validate-key/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/validate-key/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb54ad5bba31a638", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/aifs/index.ts:39", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/aifs/index.ts:39"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19881068f82475fb", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/bug-report/index.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/bug-report/index.ts:25"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fcb7f627d2ff931e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/pre-publish/index.ts:29", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/pre-publish/index.ts:29"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0f895fa9d7332502", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-links/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-links/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bfcfbf03a4927e16", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/batch-get-links/index.ts:252", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/batch-get-links/index.ts:252"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-703b9795331b49b4", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/chunk-videos/index.ts:153", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/chunk-videos/index.ts:153"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-670c827634fea368", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-rpc/index.ts:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-rpc/index.ts:19"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c60c72eab595736", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-contexts/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-contexts/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-39b68f192903ed63", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-link/index.ts:221", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-link/index.ts:221"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e029a1a331f629ac", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/sync-substack/index.ts:84", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/sync-substack/index.ts:84"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec3935d4a3f5f67e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/content-sync/index.ts:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/content-sync/index.ts:10"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c3857078d36dc0a4", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/search-articles/index.ts:117", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/search-articles/index.ts:117"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8f4ad58ac0db4218", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/article-stats/index.ts:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/article-stats/index.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-162325ab29f9c486", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/last-articles/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/last-articles/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dfcdaaff7423fd2c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-tags/index.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-tags/index.ts:25"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e941b47ffdb65f72", "name": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/sync.html:264", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/sync.html:264"}, "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-4dabe271ef3e2073", "name": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/file-bug.html:296", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/file-bug.html:296"}, "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-993d11b8a93b236e", "name": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/index.html:389", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/index.html:389"}, "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-ec7b2deaf3955334", "name": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/transcripts.html:161", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/transcripts.html:161"}, "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-d5c1680105bb4415", "name": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/video-search.html:256", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/video-search.html:256"}, "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-2b545716f705e485", "name": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/analytics.html:280", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/analytics.html:280"}, "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-036e2f135cca06c3", "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@v5 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-ff32e90cad736f31", "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@v5 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-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@v5 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-bda337c6d5cef434", "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@v5 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-fc180ed796895f59", "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@v5 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-fe4ea4bcc34c7ed1", "name": "Very large file: user-cli/als.py (3461 lines)", "shortDescription": {"text": "Very large file: user-cli/als.py (3461 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": "7 tests / 40 src (ratio 0.17)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "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 55 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-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 license. 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-cbb5857940ba0dc2", "name": "Agent instruction/config may expose a secret: AGENTS.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: AGENTS.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-64e233903e46ea7d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 worker/src/worker.js:368", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/src/worker.js:368"}, "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-4c943703f6b6afc1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/embed-articles/index.ts:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/embed-articles/index.ts:19"}, "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-91a54c2cb9ee0065", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-youtube/index.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-youtube/index.ts:54"}, "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-9099b292bb32bc66", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/chunk-videos/index.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/chunk-videos/index.ts:28"}, "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-27c7c5140d6e5658", "name": "Commented-code block (6 lines) in supabase/functions/admin-rpc/index.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/admin-rpc/index.ts: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}}, {"id": "scanner-03def125febb33db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-substack/index.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-substack/index.ts:24"}, "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-b4c7288bc23eba93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/content-sync/index.ts:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/content-sync/index.ts:155"}, "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-594d6b18428779fc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-articles/index.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-articles/index.ts:76"}, "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-3af6cb173dcec7e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 admin-site/supabase.min.js:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 admin-site/supabase.min.js:7"}, "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-250f57e8a1dbd3c5", "name": "4 env vars used in code but missing from .env.example", "shortDescription": {"text": "4 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AICOE_API_KEY`, `ALS_API_KEY`, `ALS_MCP_HOST`, `ALS_MCP_PORT`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "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:\ncli/links.py:generate_api_key, cli/links.py:generate_api_key\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/20303"}, "properties": {"repository": "stephenVertex/aicoe-link-shortener", "repoUrl": "https://github.com/stephenVertex/aicoe-link-shortener", "branch": "main"}, "results": [{"ruleId": "scanner-eaf54a0047452ea8", "level": "note", "message": {"text": "Possibly dead Python function: capturing_send"}, "properties": {"repobilityId": "72e7e4a780ef8675", "scanner": "scanner-primary", "fingerprint": "eaf54a0047452ea8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mcp/als_mcp/server.py:72"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7711c5904c23291", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/src/worker.js:361"}, "properties": {"repobilityId": "b9ca3b68a13c022a", "scanner": "scanner-primary", "fingerprint": "a7711c5904c23291", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a08bb3e937110af0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/sync-health-alert/index.ts:68"}, "properties": {"repobilityId": "5b73efbb3116640e", "scanner": "scanner-primary", "fingerprint": "a08bb3e937110af0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7286dd7e7aef6900", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/search-articles/index.ts:72"}, "properties": {"repobilityId": "f5f748596f1f384a", "scanner": "scanner-primary", "fingerprint": "7286dd7e7aef6900", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-48f1df8e683078cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 admin-site/supabase.min.js:7"}, "properties": {"repobilityId": "dbf4ebe8e6d0bd87", "scanner": "scanner-primary", "fingerprint": "48f1df8e683078cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e2460270d93a260", "level": "warning", "message": {"text": "Dockerfile runs as root: mcp-server/Dockerfile"}, "properties": {"repobilityId": "2fc32db9c026ebf2", "scanner": "scanner-primary", "fingerprint": "0e2460270d93a260", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-103e69ca7b02fc1d", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "b54f09aa8b360edf", "scanner": "scanner-primary", "fingerprint": "103e69ca7b02fc1d", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mcp-server/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-be7070de0317cca5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in worker/admin/index.html:103"}, "properties": {"repobilityId": "7def7ba4d0d35a1f", "scanner": "scanner-primary", "fingerprint": "be7070de0317cca5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker/admin/index.html"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-e89ce8c70593bb87", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/update-transcript/index.ts:29"}, "properties": {"repobilityId": "9e2c6a0475f1a012", "scanner": "scanner-primary", "fingerprint": "e89ce8c70593bb87", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/update-transcript/index.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-e2d8aeb332151278", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/shorten-url/index.ts:167"}, "properties": {"repobilityId": "57861175e42af85f", "scanner": "scanner-primary", "fingerprint": "e2d8aeb332151278", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/shorten-url/index.ts"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-781b3542798726df", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/embed-articles/index.ts:85"}, "properties": {"repobilityId": "c70956e2ffce38ae", "scanner": "scanner-primary", "fingerprint": "781b3542798726df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/embed-articles/index.ts"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-f405f68364b51b61", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/db-stats/index.ts:11"}, "properties": {"repobilityId": "be1d585b1c591b26", "scanner": "scanner-primary", "fingerprint": "f405f68364b51b61", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/db-stats/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-8bf4b4006f49e70d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/list-custom-links/index.ts:31"}, "properties": {"repobilityId": "5f2edd41c86a3ef9", "scanner": "scanner-primary", "fingerprint": "8bf4b4006f49e70d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/list-custom-links/index.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-73f5759379511e86", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/analytics/index.ts:12"}, "properties": {"repobilityId": "bed99c3d87e1ecb6", "scanner": "scanner-primary", "fingerprint": "73f5759379511e86", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/analytics/index.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-6807841498bf2876", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-tracking-variants/index.ts:28"}, "properties": {"repobilityId": "89cf540c6d1af96c", "scanner": "scanner-primary", "fingerprint": "6807841498bf2876", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-tracking-variants/index.ts"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-52d57da5df977947", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/sync-youtube/index.ts:298"}, "properties": {"repobilityId": "f55328877f8a3504", "scanner": "scanner-primary", "fingerprint": "52d57da5df977947", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/sync-youtube/index.ts"}, "region": {"startLine": 298}}}]}, {"ruleId": "scanner-a3c2eedf3696d913", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/list-authors/index.ts:11"}, "properties": {"repobilityId": "820f4cb3f596edcb", "scanner": "scanner-primary", "fingerprint": "a3c2eedf3696d913", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/list-authors/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-1e500c8cb2644aca", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-content/index.ts:10"}, "properties": {"repobilityId": "364b658dcc7f1456", "scanner": "scanner-primary", "fingerprint": "1e500c8cb2644aca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-content/index.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-f8962b34dfda2c18", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/validate-key/index.ts:11"}, "properties": {"repobilityId": "2afbcc67899ed7a9", "scanner": "scanner-primary", "fingerprint": "f8962b34dfda2c18", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/validate-key/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-bb54ad5bba31a638", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/aifs/index.ts:39"}, "properties": {"repobilityId": "954b5e7e29e7b556", "scanner": "scanner-primary", "fingerprint": "bb54ad5bba31a638", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/aifs/index.ts"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-19881068f82475fb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/bug-report/index.ts:25"}, "properties": {"repobilityId": "741518428a23251f", "scanner": "scanner-primary", "fingerprint": "19881068f82475fb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/bug-report/index.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-fcb7f627d2ff931e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/pre-publish/index.ts:29"}, "properties": {"repobilityId": "636544f5b8136cf5", "scanner": "scanner-primary", "fingerprint": "fcb7f627d2ff931e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/pre-publish/index.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-0f895fa9d7332502", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-links/index.ts:11"}, "properties": {"repobilityId": "69a86c1c7690af09", "scanner": "scanner-primary", "fingerprint": "0f895fa9d7332502", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-links/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-bfcfbf03a4927e16", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/batch-get-links/index.ts:252"}, "properties": {"repobilityId": "e4c40b4a52971c4d", "scanner": "scanner-primary", "fingerprint": "bfcfbf03a4927e16", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/batch-get-links/index.ts"}, "region": {"startLine": 252}}}]}, {"ruleId": "scanner-703b9795331b49b4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/chunk-videos/index.ts:153"}, "properties": {"repobilityId": "cc338fc63602d955", "scanner": "scanner-primary", "fingerprint": "703b9795331b49b4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/chunk-videos/index.ts"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-670c827634fea368", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-rpc/index.ts:19"}, "properties": {"repobilityId": "3e595e6c87a758cd", "scanner": "scanner-primary", "fingerprint": "670c827634fea368", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/admin-rpc/index.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-3c60c72eab595736", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-contexts/index.ts:11"}, "properties": {"repobilityId": "a54b33b64f8f6303", "scanner": "scanner-primary", "fingerprint": "3c60c72eab595736", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-contexts/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-39b68f192903ed63", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-link/index.ts:221"}, "properties": {"repobilityId": "d6bb272a7721e97a", "scanner": "scanner-primary", "fingerprint": "39b68f192903ed63", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-link/index.ts"}, "region": {"startLine": 221}}}]}, {"ruleId": "scanner-e029a1a331f629ac", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/sync-substack/index.ts:84"}, "properties": {"repobilityId": "444e6c18f0a26769", "scanner": "scanner-primary", "fingerprint": "e029a1a331f629ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/sync-substack/index.ts"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-ec3935d4a3f5f67e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/content-sync/index.ts:10"}, "properties": {"repobilityId": "f3b71d1e9106857e", "scanner": "scanner-primary", "fingerprint": "ec3935d4a3f5f67e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/content-sync/index.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-c3857078d36dc0a4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/search-articles/index.ts:117"}, "properties": {"repobilityId": "8077341db4a90b48", "scanner": "scanner-primary", "fingerprint": "c3857078d36dc0a4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/search-articles/index.ts"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-8f4ad58ac0db4218", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/article-stats/index.ts:12"}, "properties": {"repobilityId": "461b7303babea74d", "scanner": "scanner-primary", "fingerprint": "8f4ad58ac0db4218", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/article-stats/index.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-162325ab29f9c486", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/last-articles/index.ts:11"}, "properties": {"repobilityId": "b78c250f45380dea", "scanner": "scanner-primary", "fingerprint": "162325ab29f9c486", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/last-articles/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-dfcdaaff7423fd2c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/manage-tags/index.ts:25"}, "properties": {"repobilityId": "28fb7212efa0e514", "scanner": "scanner-primary", "fingerprint": "dfcdaaff7423fd2c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/manage-tags/index.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-e941b47ffdb65f72", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/sync.html:264"}, "properties": {"repobilityId": "cb54884f9655532d", "scanner": "scanner-primary", "fingerprint": "e941b47ffdb65f72", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "admin-site/sync.html"}, "region": {"startLine": 264}}}]}, {"ruleId": "scanner-4dabe271ef3e2073", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/file-bug.html:296"}, "properties": {"repobilityId": "e87ca23e008e7b40", "scanner": "scanner-primary", "fingerprint": "4dabe271ef3e2073", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "admin-site/file-bug.html"}, "region": {"startLine": 296}}}]}, {"ruleId": "scanner-993d11b8a93b236e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/index.html:389"}, "properties": {"repobilityId": "b4f148f0c7a1925c", "scanner": "scanner-primary", "fingerprint": "993d11b8a93b236e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "admin-site/index.html"}, "region": {"startLine": 389}}}]}, {"ruleId": "scanner-ec7b2deaf3955334", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/transcripts.html:161"}, "properties": {"repobilityId": "e1a1148bf4035753", "scanner": "scanner-primary", "fingerprint": "ec7b2deaf3955334", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "admin-site/transcripts.html"}, "region": {"startLine": 161}}}]}, {"ruleId": "scanner-d5c1680105bb4415", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/video-search.html:256"}, "properties": {"repobilityId": "dcb7e6a67690d39b", "scanner": "scanner-primary", "fingerprint": "d5c1680105bb4415", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "admin-site/video-search.html"}, "region": {"startLine": 256}}}]}, {"ruleId": "scanner-2b545716f705e485", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in admin-site/analytics.html:280"}, "properties": {"repobilityId": "e9e4e2bfc3a98afb", "scanner": "scanner-primary", "fingerprint": "2b545716f705e485", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "admin-site/analytics.html"}, "region": {"startLine": 280}}}]}, {"ruleId": "scanner-036e2f135cca06c3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8bb0ef8e408034e2", "scanner": "scanner-primary", "fingerprint": "036e2f135cca06c3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-edge-functions.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-036e2f135cca06c3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "72699c9cf5bde0fb", "scanner": "scanner-primary", "fingerprint": "036e2f135cca06c3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-edge-functions.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-036e2f135cca06c3", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8bb0ef8e408034e2", "scanner": "scanner-primary", "fingerprint": "036e2f135cca06c3", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-edge-functions.yml"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-036e2f135cca06c3", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "aee4968a15a06390", "scanner": "scanner-primary", "fingerprint": "036e2f135cca06c3", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-edge-functions.yml"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-ff32e90cad736f31", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f3f7f29753bad7e4", "scanner": "scanner-primary", "fingerprint": "ff32e90cad736f31", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-worker.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-ff32e90cad736f31", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae3f937d37f88e7f", "scanner": "scanner-primary", "fingerprint": "ff32e90cad736f31", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-worker.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a236e5722d902eaf", "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": 20}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2a1615baa644f72e", "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": 23}}}]}, {"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": 37}}}]}, {"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-bda337c6d5cef434", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e65d4f5c408c7495", "scanner": "scanner-primary", "fingerprint": "bda337c6d5cef434", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/perf.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-bda337c6d5cef434", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f0ad3e4a7b363102", "scanner": "scanner-primary", "fingerprint": "bda337c6d5cef434", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/perf.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-bda337c6d5cef434", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c85c43f0d97637a4", "scanner": "scanner-primary", "fingerprint": "bda337c6d5cef434", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/perf.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-fc180ed796895f59", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7a42e47cad9f426e", "scanner": "scanner-primary", "fingerprint": "fc180ed796895f59", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/smoke-test.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-fc180ed796895f59", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5188a2b8b8385812", "scanner": "scanner-primary", "fingerprint": "fc180ed796895f59", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/smoke-test.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-fe4ea4bcc34c7ed1", "level": "note", "message": {"text": "Very large file: user-cli/als.py (3461 lines)"}, "properties": {"repobilityId": "72d64f9dd8b254b8", "scanner": "scanner-primary", "fingerprint": "fe4ea4bcc34c7ed1", "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-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "53b9457e19ea4184", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "745a19b3d6939445", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "508146421979d192", "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": "574c742ca34c36be", "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": "9e44c0fea2d2c2b5", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cbb5857940ba0dc2", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: AGENTS.md"}, "properties": {"repobilityId": "e12c7213d5eadf3e", "scanner": "scanner-primary", "fingerprint": "cbb5857940ba0dc2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-64e233903e46ea7d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/src/worker.js:368"}, "properties": {"repobilityId": "8b99b6098919d889", "scanner": "scanner-primary", "fingerprint": "64e233903e46ea7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c943703f6b6afc1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/embed-articles/index.ts:19"}, "properties": {"repobilityId": "87b45dd3a199a5c5", "scanner": "scanner-primary", "fingerprint": "4c943703f6b6afc1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91a54c2cb9ee0065", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-youtube/index.ts:54"}, "properties": {"repobilityId": "de19b92000274277", "scanner": "scanner-primary", "fingerprint": "91a54c2cb9ee0065", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9099b292bb32bc66", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/chunk-videos/index.ts:28"}, "properties": {"repobilityId": "5fc4c436e83fc6b8", "scanner": "scanner-primary", "fingerprint": "9099b292bb32bc66", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-27c7c5140d6e5658", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/admin-rpc/index.ts:3"}, "properties": {"repobilityId": "888a3ba025725024", "scanner": "scanner-primary", "fingerprint": "27c7c5140d6e5658", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03def125febb33db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/sync-substack/index.ts:24"}, "properties": {"repobilityId": "25d51f5149a47792", "scanner": "scanner-primary", "fingerprint": "03def125febb33db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b4c7288bc23eba93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/content-sync/index.ts:155"}, "properties": {"repobilityId": "4db15b971c0de1f9", "scanner": "scanner-primary", "fingerprint": "b4c7288bc23eba93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-594d6b18428779fc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/search-articles/index.ts:76"}, "properties": {"repobilityId": "631fb4c96b316284", "scanner": "scanner-primary", "fingerprint": "594d6b18428779fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3af6cb173dcec7e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 admin-site/supabase.min.js:7"}, "properties": {"repobilityId": "1a4bf07af4d183bc", "scanner": "scanner-primary", "fingerprint": "3af6cb173dcec7e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-250f57e8a1dbd3c5", "level": "none", "message": {"text": "4 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "57584f22b735b5ee", "scanner": "scanner-primary", "fingerprint": "250f57e8a1dbd3c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3ad31d21b9f300c0", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}