{"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-c523a6dfba670b62", "name": "Possibly dead Python function: repl", "shortDescription": {"text": "Possibly dead Python function: repl"}, "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-37d3109a490357d5", "name": "Stray `console.log` in TS/JS \u2014 scripts/pull-property-truth.js:225", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pull-property-truth.js:225"}, "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-666baacf6c7a30c1", "name": "Stray `console.log` in TS/JS \u2014 scripts/regenerate-property-surfaces.js:250", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regenerate-property-surfaces.js:250"}, "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-94561f9672c03090", "name": "Stray `console.log` in TS/JS \u2014 scripts/archive/sync-props.js:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/archive/sync-props.js:22"}, "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-55c95e40db98862a", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/graveyard-prune.js:432", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/graveyard-prune.js:432"}, "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-7af09c8ff412dced", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/owner-proof-freshness.js:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/owner-proof-freshness.js:69"}, "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-4807dd96cf0b7ed3", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/install-hooks.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/install-hooks.js:14"}, "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-5071f8024f26522b", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/verify-release.js:258", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/verify-release.js:258"}, "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-10420ec0944196eb", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/sync-next-batch-from-analytics-receipt.js:192", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/sync-next-batch-from-analytics-receipt.js:192"}, "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-644a5054056c5f53", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/repo-hygiene.js:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/repo-hygiene.js:112"}, "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-6fb7621f46f9f352", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/generate-release-scorecard.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/generate-release-scorecard.js:37"}, "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-d51326b69bb58b60", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-redirect-targets.js:184", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-redirect-targets.js:184"}, "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-882defd989caa575", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-internal-links.js:303", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-internal-links.js:303"}, "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-c995fcf0822ba165", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/pre-push.js:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/pre-push.js:80"}, "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-d749ee7e9520cc4d", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/capture-visual-proof.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/capture-visual-proof.js:36"}, "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-5e406932a787abf4", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-jsonld.js:217", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-jsonld.js:217"}, "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-7d23fd4544b452e7", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/serve-static.js:206", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/serve-static.js:206"}, "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-aaf934bd8320d179", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/create-release-scorecard.js:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/create-release-scorecard.js:22"}, "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-f16cdd71bc5cd199", "name": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-properties-availability-output.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-properties-availability-output.js:57"}, "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-03b4514feba54d60", "name": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-live-entity-schema-coverage.js:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-live-entity-schema-coverage.js:162"}, "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-07dcaf2aae197eaf", "name": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-direct-booking-event-smoke.js:375", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-direct-booking-event-smoke.js:375"}, "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-9f69d15dde591cc3", "name": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-build-output.js:561", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-build-output.js:561"}, "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-61a43b6081977b2f", "name": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-live-smoke.js:202", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-live-smoke.js:202"}, "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-9e6efa052b49c9d7", "name": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-owner-funnel-routes.js:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-owner-funnel-routes.js:81"}, "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-e50f96fd30f83040", "name": "Stray `console.log` in TS/JS \u2014 scripts/cache/sync-hostaway-build-cache.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cache/sync-hostaway-build-cache.js: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-517f912700021f71", "name": "Stray `console.log` in TS/JS \u2014 scripts/evals/lint-evals.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/evals/lint-evals.js:49"}, "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-fac30b9d4b0a8bc1", "name": "Stray `console.log` in TS/JS \u2014 scripts/evals/extract-copy.test.js:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/evals/extract-copy.test.js:41"}, "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-27a3b9b13d71bfd3", "name": "Stray `console.log` in TS/JS \u2014 scripts/evals/lib/run-lane.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/evals/lib/run-lane.js:50"}, "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-b54bb428de37bb58", "name": "Stray `console.log` in TS/JS \u2014 scripts/guides/normalize-guides.js:348", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/guides/normalize-guides.js:348"}, "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-0a04ee085938d81f", "name": "Stray `console.log` in TS/JS \u2014 scripts/guides/upgrade-priority-guides.js:267", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/guides/upgrade-priority-guides.js:267"}, "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-5dc3515126e43ec6", "name": "Stray `console.log` in TS/JS \u2014 scripts/seo/import-dataforseo-findings.js:381", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seo/import-dataforseo-findings.js:381"}, "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-ee5cca7056612246", "name": "Stray `console.log` in TS/JS \u2014 scripts/seo/generate-pseo-triage.js:279", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seo/generate-pseo-triage.js:279"}, "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-fdff97fc9ecfcfeb", "name": "Stray `console.log` in TS/JS \u2014 dashboard/js/dashboard.js:466", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 dashboard/js/dashboard.js:466"}, "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-dd1f2c0ef7a498f5", "name": "TODO/FIXME marker in shipping code \u2014 dashboard/js/config.js:15", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 dashboard/js/config.js:15"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74fb31e89a04dc5f", "name": "Stray `console.log` in TS/JS \u2014 DEPLOY THIS FOLDER TO NETLIFY/scripts/seo-guides-tests.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 DEPLOY THIS FOLDER TO NETLIFY/scripts/seo-guides-tests.js:36"}, "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-d7c0a683baf076cc", "name": "Stray `console.log` in TS/JS \u2014 DEPLOY THIS FOLDER TO NETLIFY/scripts/property-card-tests.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 DEPLOY THIS FOLDER TO NETLIFY/scripts/property-card-tests.js:18"}, "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-6b0814940da673a2", "name": "Stray `console.log` in TS/JS \u2014 DEPLOY THIS FOLDER TO NETLIFY/scripts/cache-headers-tests.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 DEPLOY THIS FOLDER TO NETLIFY/scripts/cache-headers-tests.js:16"}, "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-5b4fae5719e0f5c1", "name": "Privileged port 10 in use", "shortDescription": {"text": "Privileged port 10 in use"}, "fullDescription": {"text": "Port 10 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4de12763b3f2cc0b", "name": "Privileged port 17 in use", "shortDescription": {"text": "Privileged port 17 in use"}, "fullDescription": {"text": "Port 17 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49c2fe85393ed453", "name": "Insecure pattern 'direct_innerhtml_assignment' in index.html:5291", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:5291"}, "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-05e15925ee68cb20", "name": "Insecure pattern 'node_child_process' in eleventy.config.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in eleventy.config.js:3"}, "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-1adfb547b726de6d", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/graveyard-prune.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/graveyard-prune.js:1"}, "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-b34145e4b094c60a", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/content-voice.test.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/content-voice.test.js:5"}, "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-1a902bdf851cc8f7", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/install-hooks.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/install-hooks.js:1"}, "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-6dcbadbca0d05e73", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/verify-release.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/verify-release.js:3"}, "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-b66c5b0a40cb17a1", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/repo-hygiene.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/repo-hygiene.js:1"}, "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-edcf135210d8323c", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/worktree-lock.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/worktree-lock.js:3"}, "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-b6514f85526a18e0", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/validate-internal-links.test.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/validate-internal-links.test.js:6"}, "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-929e3271dec66f4f", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/validate-jsonld.test.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/validate-jsonld.test.js:6"}, "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-515139d8f6d69b91", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/claude-content-gate.js:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/claude-content-gate.js:14"}, "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-9b13eb1f3c5ff8cc", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/build-site.js:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/build-site.js:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d8ead3ace5fa626", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/pre-commit.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/pre-commit.js:1"}, "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-7c1a7fc84c6d5545", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/pre-push.js:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/pre-push.js:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-350e6d1c4b21997c", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/validate-redirect-targets.test.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/validate-redirect-targets.test.js:6"}, "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-f2900142541c6235", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/capture-visual-proof.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/capture-visual-proof.js:5"}, "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-543077684204a1ed", "name": "Insecure pattern 'node_child_process' in scripts/enforcement/create-release-scorecard.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/create-release-scorecard.js:5"}, "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-ec55ce0cddf59698", "name": "Insecure pattern 'direct_innerhtml_assignment' in scripts/recovery/assert-build-output.js:234", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in scripts/recovery/assert-build-output.js:234"}, "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-79f1bc1978b68904", "name": "Insecure pattern 'node_child_process' in scripts/evals/targets.test.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/evals/targets.test.js:5"}, "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-757cc0392e552fc8", "name": "Insecure pattern 'node_child_process' in scripts/evals/cli.test.js:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/evals/cli.test.js:4"}, "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-432d40cbdd2ac934", "name": "Insecure pattern 'exec_used' in scripts/evals/lib/targets.js:123", "shortDescription": {"text": "Insecure pattern 'exec_used' in scripts/evals/lib/targets.js:123"}, "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-854bb62ce503eeb9", "name": "Insecure pattern 'node_child_process' in scripts/evals/lib/targets.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/evals/lib/targets.js:3"}, "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-75e3e1ff0c281b07", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/js/dashboard.js:287", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/js/dashboard.js:287"}, "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-643ab4017cd10c36", "name": "Insecure pattern 'direct_innerhtml_assignment' in DEPLOY THIS FOLDER TO NETLIFY/index.html:325", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in DEPLOY THIS FOLDER TO NETLIFY/index.html:325"}, "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-f66db183ba534bf8", "name": "Insecure pattern 'cors_wildcard' in DEPLOY THIS FOLDER TO NETLIFY/netlify/functions/get-properties.js:61", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in DEPLOY THIS FOLDER TO NETLIFY/netlify/functions/get-properties.js:61"}, "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-9772d28c4dfa0222", "name": "Insecure pattern 'direct_innerhtml_assignment' in DEPLOY THIS FOLDER TO NETLIFY/properties/index.html:2969", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in DEPLOY THIS FOLDER TO NETLIFY/properties/index.html:2969"}, "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-518fdfce2aa703d4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/assets/js/hero-v2.js:344", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/assets/js/hero-v2.js:344"}, "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-56b15272088b5897", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v7 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-ec8f7dc0a1587130", "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@v6 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-e57b733242ed1531", "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@v6 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-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 130 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "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 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-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-6ba5b2c0d3249ec3", "name": "Agent authority lacks a verifier contract: .claude/agents/voice-editor.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/voice-editor.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-794e157a4059ecde", "name": "Agent authority lacks a verifier contract: .claude/agents/seo-architect.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/seo-architect.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-e923d7c6ce6fc3d9", "name": "Agent authority lacks a verifier contract: plugins/seascape-seo-os/skills/internal-link-targeting/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/seascape-seo-os/skills/internal-link-targeting/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d5e695c4bf8c566", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enforcement/serve-static.test.js:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enforcement/serve-static.test.js:27"}, "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-73f40c75af7d046d", "name": "Legacy-named symbol `guest_email_capture_metrics_v1` in scripts/enforcement/guest-email-capture-receipts.test.js:231", "shortDescription": {"text": "Legacy-named symbol `guest_email_capture_metrics_v1` in scripts/enforcement/guest-email-capture-receipts.test.js:231"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9227056958316ee3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enforcement/lib.test.js:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enforcement/lib.test.js:123"}, "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-f8f7f8ab31743367", "name": "Legacy-named symbol `owner_lead_metrics_v1` in scripts/enforcement/owner-lead-receipts.test.js:129", "shortDescription": {"text": "Legacy-named symbol `owner_lead_metrics_v1` in scripts/enforcement/owner-lead-receipts.test.js:129"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d72794db46bb7030", "name": "Commented-code block (5 lines) in scripts/enforcement/claude-content-gate.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/enforcement/claude-content-gate.js:4"}, "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-8ab75051c7b79547", "name": "Commented-code block (8 lines) in scripts/enforcement/sitemap-indexability-contract.test.js:11", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/enforcement/sitemap-indexability-contract.test.js:11"}, "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-1fc62f4a7593d8a7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/evals/lib/anthropic-client.js:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/evals/lib/anthropic-client.js:31"}, "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-835dbeaf5c8a60d5", "name": "Legacy-named symbol `absoluteLegacy` in scripts/guides/normalize-guides.js:203", "shortDescription": {"text": "Legacy-named symbol `absoluteLegacy` in scripts/guides/normalize-guides.js:203"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-21b532e8c997a1d1", "name": "Legacy-named symbol `guest_email_capture_metrics_v1` in netlify/functions/_guest-email-capture-metrics.js:5", "shortDescription": {"text": "Legacy-named symbol `guest_email_capture_metrics_v1` in netlify/functions/_guest-email-capture-metrics.js:5"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9cebe657add6fd76", "name": "Commented-code block (5 lines) in netlify/functions/_owner-lead-notify.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in netlify/functions/_owner-lead-notify.js:1"}, "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-d77477ac79f16715", "name": "Legacy-named symbol `owner_lead_metrics_v1` in netlify/functions/_owner-lead-contacts.js:5", "shortDescription": {"text": "Legacy-named symbol `owner_lead_metrics_v1` in netlify/functions/_owner-lead-contacts.js:5"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-370541e7ebabeaba", "name": "Commented-code block (5 lines) in netlify/functions/_owner-lead-contacts.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in netlify/functions/_owner-lead-contacts.js:4"}, "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-1683892095f23323", "name": "Legacy-named symbol `owner_lead_metrics_v1` in netlify/functions/_owner-lead-metrics.js:3", "shortDescription": {"text": "Legacy-named symbol `owner_lead_metrics_v1` in netlify/functions/_owner-lead-metrics.js:3"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0ba42683db9123f", "name": "Commented-code block (6 lines) in DEPLOY THIS FOLDER TO NETLIFY/update_nav.py:38", "shortDescription": {"text": "Commented-code block (6 lines) in DEPLOY THIS FOLDER TO NETLIFY/update_nav.py:38"}, "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-20efd8c34dfdfe7b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/assets/js/hero-v2.js:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/assets/js/hero-v2.js:101"}, "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-77f8e43395c057d3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/assets/js/conversion-tracking.js:592", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/assets/js/conversion-tracking.js:592"}, "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-1b69a254ae5c85cf", "name": "Legacy-named symbol `properties_cache_v1` in src/_data/properties.js:9", "shortDescription": {"text": "Legacy-named symbol `properties_cache_v1` in src/_data/properties.js:9"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d6ffa20a9f1093b", "name": "24 env vars used in code but missing from .env.example", "shortDescription": {"text": "24 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_API_KEY`, `CI`, `GITHUB_ACTIONS`, `GUEST_EMAIL_CAPTURE_BLOBS_SITE_ID`, `GUEST_EMAIL_CAPTURE_BLOBS_TOKEN`, `GUEST_EMAIL_CAPTURE_METRICS_TOKEN`, `MAILCHIMP_AUDIENCE_IDS`, `NETLIFY_AUTH_TOKEN` + 16 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70c01c76ef5fecb8", "name": "Dangling fetch: GET /.netlify/functions/get-properties (scripts/enforcement/lib.test.js:123)", "shortDescription": {"text": "Dangling fetch: GET /.netlify/functions/get-properties (scripts/enforcement/lib.test.js:123)"}, "fullDescription": {"text": "`scripts/enforcement/lib.test.js:123` calls `GET /.netlify/functions/get-properties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/.netlify/functions/get-properties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25ceb18a55577eea", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (scripts/evals/lib/anthropic-client.js:31)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (scripts/evals/lib/anthropic-client.js:31)"}, "fullDescription": {"text": "`scripts/evals/lib/anthropic-client.js:31` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f1d0a4927d51ffa", "name": "Unused endpoint: GET /*.html", "shortDescription": {"text": "Unused endpoint: GET /*.html"}, "fullDescription": {"text": "`scripts/enforcement/release-cache-policy.js` declares `GET /*.html` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21889"}, "properties": {"repository": "uncfreak1255-code/seascape-vacations-site", "repoUrl": "https://github.com/uncfreak1255-code/seascape-vacations-site", "branch": "main"}, "results": [{"ruleId": "scanner-c523a6dfba670b62", "level": "note", "message": {"text": "Possibly dead Python function: repl"}, "properties": {"repobilityId": "6f5d3779bbb8be8b", "scanner": "scanner-primary", "fingerprint": "c523a6dfba670b62", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "DEPLOY THIS FOLDER TO NETLIFY/scripts/fix_vacationrental_schema.py:157"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-37d3109a490357d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/pull-property-truth.js:225"}, "properties": {"repobilityId": "c65d06ccd723e40c", "scanner": "scanner-primary", "fingerprint": "37d3109a490357d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-666baacf6c7a30c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/regenerate-property-surfaces.js:250"}, "properties": {"repobilityId": "7c171241281a7e2e", "scanner": "scanner-primary", "fingerprint": "666baacf6c7a30c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-94561f9672c03090", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/archive/sync-props.js:22"}, "properties": {"repobilityId": "0686c1fd72dcb34b", "scanner": "scanner-primary", "fingerprint": "94561f9672c03090", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55c95e40db98862a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/graveyard-prune.js:432"}, "properties": {"repobilityId": "9d0381d6426001f5", "scanner": "scanner-primary", "fingerprint": "55c95e40db98862a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7af09c8ff412dced", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/owner-proof-freshness.js:69"}, "properties": {"repobilityId": "5bc310e3d5f974e8", "scanner": "scanner-primary", "fingerprint": "7af09c8ff412dced", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4807dd96cf0b7ed3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/install-hooks.js:14"}, "properties": {"repobilityId": "c6c711beb2736cd1", "scanner": "scanner-primary", "fingerprint": "4807dd96cf0b7ed3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5071f8024f26522b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/verify-release.js:258"}, "properties": {"repobilityId": "118fba1a986ba2af", "scanner": "scanner-primary", "fingerprint": "5071f8024f26522b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10420ec0944196eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/sync-next-batch-from-analytics-receipt.js:192"}, "properties": {"repobilityId": "f32b42cb4739ef64", "scanner": "scanner-primary", "fingerprint": "10420ec0944196eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-644a5054056c5f53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/repo-hygiene.js:112"}, "properties": {"repobilityId": "6c415b13a5ae01ca", "scanner": "scanner-primary", "fingerprint": "644a5054056c5f53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6fb7621f46f9f352", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/generate-release-scorecard.js:37"}, "properties": {"repobilityId": "06ee7109b2cb1105", "scanner": "scanner-primary", "fingerprint": "6fb7621f46f9f352", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d51326b69bb58b60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-redirect-targets.js:184"}, "properties": {"repobilityId": "bb082a050069f01f", "scanner": "scanner-primary", "fingerprint": "d51326b69bb58b60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-882defd989caa575", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-internal-links.js:303"}, "properties": {"repobilityId": "ae44c7133822d0b9", "scanner": "scanner-primary", "fingerprint": "882defd989caa575", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c995fcf0822ba165", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/pre-push.js:80"}, "properties": {"repobilityId": "e4c669a97f7ffecb", "scanner": "scanner-primary", "fingerprint": "c995fcf0822ba165", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d749ee7e9520cc4d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/capture-visual-proof.js:36"}, "properties": {"repobilityId": "2fe72e1908261b3b", "scanner": "scanner-primary", "fingerprint": "d749ee7e9520cc4d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5e406932a787abf4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-jsonld.js:217"}, "properties": {"repobilityId": "55b39c33c8eead9d", "scanner": "scanner-primary", "fingerprint": "5e406932a787abf4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d23fd4544b452e7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/serve-static.js:206"}, "properties": {"repobilityId": "fc55bcf8b0175f84", "scanner": "scanner-primary", "fingerprint": "7d23fd4544b452e7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aaf934bd8320d179", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/create-release-scorecard.js:22"}, "properties": {"repobilityId": "98c63820ec5cb92f", "scanner": "scanner-primary", "fingerprint": "aaf934bd8320d179", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f16cdd71bc5cd199", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enforcement/validate-properties-availability-output.js:57"}, "properties": {"repobilityId": "0b5bc831b3a6f968", "scanner": "scanner-primary", "fingerprint": "f16cdd71bc5cd199", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-03b4514feba54d60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-live-entity-schema-coverage.js:162"}, "properties": {"repobilityId": "4286c43d5f037fda", "scanner": "scanner-primary", "fingerprint": "03b4514feba54d60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07dcaf2aae197eaf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-direct-booking-event-smoke.js:375"}, "properties": {"repobilityId": "3e5fc2e926cfd2e9", "scanner": "scanner-primary", "fingerprint": "07dcaf2aae197eaf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f69d15dde591cc3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-build-output.js:561"}, "properties": {"repobilityId": "a24ba73c6d30f7d0", "scanner": "scanner-primary", "fingerprint": "9f69d15dde591cc3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61a43b6081977b2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-live-smoke.js:202"}, "properties": {"repobilityId": "d98b068d48889939", "scanner": "scanner-primary", "fingerprint": "61a43b6081977b2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9e6efa052b49c9d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recovery/assert-owner-funnel-routes.js:81"}, "properties": {"repobilityId": "a1a73e61100e0dbb", "scanner": "scanner-primary", "fingerprint": "9e6efa052b49c9d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e50f96fd30f83040", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cache/sync-hostaway-build-cache.js:68"}, "properties": {"repobilityId": "568697a3ba3ca119", "scanner": "scanner-primary", "fingerprint": "e50f96fd30f83040", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-517f912700021f71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/evals/lint-evals.js:49"}, "properties": {"repobilityId": "5858e30a9d30022c", "scanner": "scanner-primary", "fingerprint": "517f912700021f71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fac30b9d4b0a8bc1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/evals/extract-copy.test.js:41"}, "properties": {"repobilityId": "e1d313533ce20a93", "scanner": "scanner-primary", "fingerprint": "fac30b9d4b0a8bc1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27a3b9b13d71bfd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/evals/lib/run-lane.js:50"}, "properties": {"repobilityId": "c8a983ed94b33cc0", "scanner": "scanner-primary", "fingerprint": "27a3b9b13d71bfd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b54bb428de37bb58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/guides/normalize-guides.js:348"}, "properties": {"repobilityId": "2fc9b52dfb7c1f25", "scanner": "scanner-primary", "fingerprint": "b54bb428de37bb58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a04ee085938d81f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/guides/upgrade-priority-guides.js:267"}, "properties": {"repobilityId": "2701f97e20280b05", "scanner": "scanner-primary", "fingerprint": "0a04ee085938d81f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5dc3515126e43ec6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seo/import-dataforseo-findings.js:381"}, "properties": {"repobilityId": "ee4e6b3679d9c422", "scanner": "scanner-primary", "fingerprint": "5dc3515126e43ec6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee5cca7056612246", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seo/generate-pseo-triage.js:279"}, "properties": {"repobilityId": "ce8a54df64ccf79d", "scanner": "scanner-primary", "fingerprint": "ee5cca7056612246", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fdff97fc9ecfcfeb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 dashboard/js/dashboard.js:466"}, "properties": {"repobilityId": "6026156869c13db8", "scanner": "scanner-primary", "fingerprint": "fdff97fc9ecfcfeb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd1f2c0ef7a498f5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 dashboard/js/config.js:15"}, "properties": {"repobilityId": "324d85c2576f4a42", "scanner": "scanner-primary", "fingerprint": "dd1f2c0ef7a498f5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-74fb31e89a04dc5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 DEPLOY THIS FOLDER TO NETLIFY/scripts/seo-guides-tests.js:36"}, "properties": {"repobilityId": "74c572a68134a11c", "scanner": "scanner-primary", "fingerprint": "74fb31e89a04dc5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d7c0a683baf076cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 DEPLOY THIS FOLDER TO NETLIFY/scripts/property-card-tests.js:18"}, "properties": {"repobilityId": "b19e078fd26f51b9", "scanner": "scanner-primary", "fingerprint": "d7c0a683baf076cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b0814940da673a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 DEPLOY THIS FOLDER TO NETLIFY/scripts/cache-headers-tests.js:16"}, "properties": {"repobilityId": "c844935963a6128c", "scanner": "scanner-primary", "fingerprint": "6b0814940da673a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5b4fae5719e0f5c1", "level": "warning", "message": {"text": "Privileged port 10 in use"}, "properties": {"repobilityId": "735372d6b5594915", "scanner": "scanner-primary", "fingerprint": "5b4fae5719e0f5c1", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/live-smoke.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4de12763b3f2cc0b", "level": "warning", "message": {"text": "Privileged port 17 in use"}, "properties": {"repobilityId": "0bf38fb8f89ec589", "scanner": "scanner-primary", "fingerprint": "4de12763b3f2cc0b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/live-smoke.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-49c2fe85393ed453", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:5291"}, "properties": {"repobilityId": "f91708437a3a5445", "scanner": "scanner-primary", "fingerprint": "49c2fe85393ed453", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index.html"}, "region": {"startLine": 5291}}}]}, {"ruleId": "scanner-05e15925ee68cb20", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in eleventy.config.js:3"}, "properties": {"repobilityId": "7640d9686b9d233d", "scanner": "scanner-primary", "fingerprint": "05e15925ee68cb20", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "eleventy.config.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-1adfb547b726de6d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/graveyard-prune.js:1"}, "properties": {"repobilityId": "619389ffe809ccb5", "scanner": "scanner-primary", "fingerprint": "1adfb547b726de6d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/graveyard-prune.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b34145e4b094c60a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/content-voice.test.js:5"}, "properties": {"repobilityId": "9aa58ee23bedab48", "scanner": "scanner-primary", "fingerprint": "b34145e4b094c60a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/content-voice.test.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-1a902bdf851cc8f7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/install-hooks.js:1"}, "properties": {"repobilityId": "26aeef2522fafa2b", "scanner": "scanner-primary", "fingerprint": "1a902bdf851cc8f7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/install-hooks.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6dcbadbca0d05e73", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/verify-release.js:3"}, "properties": {"repobilityId": "0df3ae21542577a2", "scanner": "scanner-primary", "fingerprint": "6dcbadbca0d05e73", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/verify-release.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-b66c5b0a40cb17a1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/repo-hygiene.js:1"}, "properties": {"repobilityId": "02862326ccec9f05", "scanner": "scanner-primary", "fingerprint": "b66c5b0a40cb17a1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/repo-hygiene.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-edcf135210d8323c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/worktree-lock.js:3"}, "properties": {"repobilityId": "d9a67b42b15866a8", "scanner": "scanner-primary", "fingerprint": "edcf135210d8323c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/worktree-lock.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-b6514f85526a18e0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/validate-internal-links.test.js:6"}, "properties": {"repobilityId": "ecae4974e7b86148", "scanner": "scanner-primary", "fingerprint": "b6514f85526a18e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/validate-internal-links.test.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-929e3271dec66f4f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/validate-jsonld.test.js:6"}, "properties": {"repobilityId": "618731a05d9121b0", "scanner": "scanner-primary", "fingerprint": "929e3271dec66f4f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/validate-jsonld.test.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-515139d8f6d69b91", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/claude-content-gate.js:14"}, "properties": {"repobilityId": "c62619f992dfd6cf", "scanner": "scanner-primary", "fingerprint": "515139d8f6d69b91", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/claude-content-gate.js"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-9b13eb1f3c5ff8cc", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/build-site.js:2"}, "properties": {"repobilityId": "60cdb320a105c34b", "scanner": "scanner-primary", "fingerprint": "9b13eb1f3c5ff8cc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/build-site.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-4d8ead3ace5fa626", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/pre-commit.js:1"}, "properties": {"repobilityId": "599d7d4fceced5b3", "scanner": "scanner-primary", "fingerprint": "4d8ead3ace5fa626", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/pre-commit.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c1a7fc84c6d5545", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/pre-push.js:2"}, "properties": {"repobilityId": "fa110205c9a89e7e", "scanner": "scanner-primary", "fingerprint": "7c1a7fc84c6d5545", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/pre-push.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-350e6d1c4b21997c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/validate-redirect-targets.test.js:6"}, "properties": {"repobilityId": "9b8bc851ecc34e75", "scanner": "scanner-primary", "fingerprint": "350e6d1c4b21997c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/validate-redirect-targets.test.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-f2900142541c6235", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/capture-visual-proof.js:5"}, "properties": {"repobilityId": "4a0d3b2c12a7c5cc", "scanner": "scanner-primary", "fingerprint": "f2900142541c6235", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/capture-visual-proof.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-543077684204a1ed", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/enforcement/create-release-scorecard.js:5"}, "properties": {"repobilityId": "f35ee5cc812ba6fa", "scanner": "scanner-primary", "fingerprint": "543077684204a1ed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/enforcement/create-release-scorecard.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-ec55ce0cddf59698", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in scripts/recovery/assert-build-output.js:234"}, "properties": {"repobilityId": "3c964c115bffc4cc", "scanner": "scanner-primary", "fingerprint": "ec55ce0cddf59698", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/recovery/assert-build-output.js"}, "region": {"startLine": 234}}}]}, {"ruleId": "scanner-79f1bc1978b68904", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/evals/targets.test.js:5"}, "properties": {"repobilityId": "7ec8bb08b1bba388", "scanner": "scanner-primary", "fingerprint": "79f1bc1978b68904", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/evals/targets.test.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-757cc0392e552fc8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/evals/cli.test.js:4"}, "properties": {"repobilityId": "0c6a2850a38dc434", "scanner": "scanner-primary", "fingerprint": "757cc0392e552fc8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/evals/cli.test.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-432d40cbdd2ac934", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in scripts/evals/lib/targets.js:123"}, "properties": {"repobilityId": "b705b05bf6cd1425", "scanner": "scanner-primary", "fingerprint": "432d40cbdd2ac934", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/evals/lib/targets.js"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-854bb62ce503eeb9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/evals/lib/targets.js:3"}, "properties": {"repobilityId": "db6fa222aacb7ac6", "scanner": "scanner-primary", "fingerprint": "854bb62ce503eeb9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/evals/lib/targets.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-75e3e1ff0c281b07", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard/js/dashboard.js:287"}, "properties": {"repobilityId": "46616a1124168ad4", "scanner": "scanner-primary", "fingerprint": "75e3e1ff0c281b07", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard/js/dashboard.js"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-643ab4017cd10c36", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in DEPLOY THIS FOLDER TO NETLIFY/index.html:325"}, "properties": {"repobilityId": "4cc7d87614905ab0", "scanner": "scanner-primary", "fingerprint": "643ab4017cd10c36", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "DEPLOY THIS FOLDER TO NETLIFY/index.html"}, "region": {"startLine": 325}}}]}, {"ruleId": "scanner-f66db183ba534bf8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in DEPLOY THIS FOLDER TO NETLIFY/netlify/functions/get-properties.js:61"}, "properties": {"repobilityId": "4493062822cde8b9", "scanner": "scanner-primary", "fingerprint": "f66db183ba534bf8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "DEPLOY THIS FOLDER TO NETLIFY/netlify/functions/get-properties.js"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-9772d28c4dfa0222", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in DEPLOY THIS FOLDER TO NETLIFY/properties/index.html:2969"}, "properties": {"repobilityId": "e8d60e1bef02df2b", "scanner": "scanner-primary", "fingerprint": "9772d28c4dfa0222", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "DEPLOY THIS FOLDER TO NETLIFY/properties/index.html"}, "region": {"startLine": 2969}}}]}, {"ruleId": "scanner-518fdfce2aa703d4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/assets/js/hero-v2.js:344"}, "properties": {"repobilityId": "54492aec389b5025", "scanner": "scanner-primary", "fingerprint": "518fdfce2aa703d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/assets/js/hero-v2.js"}, "region": {"startLine": 344}}}]}, {"ruleId": "scanner-56b15272088b5897", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6b1930a25b8905db", "scanner": "scanner-primary", "fingerprint": "56b15272088b5897", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright-visual.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-56b15272088b5897", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6b1930a25b8905db", "scanner": "scanner-primary", "fingerprint": "56b15272088b5897", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/playwright-visual.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-ec8f7dc0a1587130", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9c080329e3bda89c", "scanner": "scanner-primary", "fingerprint": "ec8f7dc0a1587130", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/live-smoke.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-ec8f7dc0a1587130", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "18c5e21bb43e24c9", "scanner": "scanner-primary", "fingerprint": "ec8f7dc0a1587130", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/live-smoke.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-e57b733242ed1531", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2f34aae7f5066782", "scanner": "scanner-primary", "fingerprint": "e57b733242ed1531", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-safety.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-e57b733242ed1531", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3c8fcb1d8f7ed0d6", "scanner": "scanner-primary", "fingerprint": "e57b733242ed1531", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-safety.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "ebabb83210dfe1b5", "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": "e45064cf8aa95658", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "28f6068e8921ef09", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "df75ece477b94a0c", "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": "a210732825834777", "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": "ccb1081f0d9e55b3", "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": "9a2ddd9b855c2716", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"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-6ba5b2c0d3249ec3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/voice-editor.md"}, "properties": {"repobilityId": "8497db4149321a1c", "scanner": "scanner-primary", "fingerprint": "6ba5b2c0d3249ec3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/voice-editor.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-794e157a4059ecde", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/seo-architect.md"}, "properties": {"repobilityId": "bb4cdd73a4595478", "scanner": "scanner-primary", "fingerprint": "794e157a4059ecde", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/seo-architect.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e923d7c6ce6fc3d9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/seascape-seo-os/skills/internal-link-targeting/SKILL.md"}, "properties": {"repobilityId": "5dd3f4986988f757", "scanner": "scanner-primary", "fingerprint": "e923d7c6ce6fc3d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/seascape-seo-os/skills/internal-link-targeting/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-2d5e695c4bf8c566", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enforcement/serve-static.test.js:27"}, "properties": {"repobilityId": "896797205fbbe7e0", "scanner": "scanner-primary", "fingerprint": "2d5e695c4bf8c566", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-73f40c75af7d046d", "level": "note", "message": {"text": "Legacy-named symbol `guest_email_capture_metrics_v1` in scripts/enforcement/guest-email-capture-receipts.test.js:231"}, "properties": {"repobilityId": "31bd41ae5c75b86f", "scanner": "scanner-primary", "fingerprint": "73f40c75af7d046d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9227056958316ee3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enforcement/lib.test.js:123"}, "properties": {"repobilityId": "3362b4e88d89a942", "scanner": "scanner-primary", "fingerprint": "9227056958316ee3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8f7f8ab31743367", "level": "note", "message": {"text": "Legacy-named symbol `owner_lead_metrics_v1` in scripts/enforcement/owner-lead-receipts.test.js:129"}, "properties": {"repobilityId": "50169031de4e51f3", "scanner": "scanner-primary", "fingerprint": "f8f7f8ab31743367", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d72794db46bb7030", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/enforcement/claude-content-gate.js:4"}, "properties": {"repobilityId": "0ee11f03387b97d6", "scanner": "scanner-primary", "fingerprint": "d72794db46bb7030", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ab75051c7b79547", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/enforcement/sitemap-indexability-contract.test.js:11"}, "properties": {"repobilityId": "cc82c84171deecf2", "scanner": "scanner-primary", "fingerprint": "8ab75051c7b79547", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fc62f4a7593d8a7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/evals/lib/anthropic-client.js:31"}, "properties": {"repobilityId": "f7b9fe73110ef8de", "scanner": "scanner-primary", "fingerprint": "1fc62f4a7593d8a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-835dbeaf5c8a60d5", "level": "note", "message": {"text": "Legacy-named symbol `absoluteLegacy` in scripts/guides/normalize-guides.js:203"}, "properties": {"repobilityId": "5c640ccec290e64b", "scanner": "scanner-primary", "fingerprint": "835dbeaf5c8a60d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-21b532e8c997a1d1", "level": "note", "message": {"text": "Legacy-named symbol `guest_email_capture_metrics_v1` in netlify/functions/_guest-email-capture-metrics.js:5"}, "properties": {"repobilityId": "a76f0c01619f9570", "scanner": "scanner-primary", "fingerprint": "21b532e8c997a1d1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9cebe657add6fd76", "level": "none", "message": {"text": "Commented-code block (5 lines) in netlify/functions/_owner-lead-notify.js:1"}, "properties": {"repobilityId": "137eb5bdb49c9553", "scanner": "scanner-primary", "fingerprint": "9cebe657add6fd76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d77477ac79f16715", "level": "note", "message": {"text": "Legacy-named symbol `owner_lead_metrics_v1` in netlify/functions/_owner-lead-contacts.js:5"}, "properties": {"repobilityId": "47a89f0833e66556", "scanner": "scanner-primary", "fingerprint": "d77477ac79f16715", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-370541e7ebabeaba", "level": "none", "message": {"text": "Commented-code block (5 lines) in netlify/functions/_owner-lead-contacts.js:4"}, "properties": {"repobilityId": "4cc24d405fb23823", "scanner": "scanner-primary", "fingerprint": "370541e7ebabeaba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1683892095f23323", "level": "note", "message": {"text": "Legacy-named symbol `owner_lead_metrics_v1` in netlify/functions/_owner-lead-metrics.js:3"}, "properties": {"repobilityId": "9072f4e681cfa48a", "scanner": "scanner-primary", "fingerprint": "1683892095f23323", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c0ba42683db9123f", "level": "none", "message": {"text": "Commented-code block (6 lines) in DEPLOY THIS FOLDER TO NETLIFY/update_nav.py:38"}, "properties": {"repobilityId": "84c1bc252b272573", "scanner": "scanner-primary", "fingerprint": "c0ba42683db9123f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20efd8c34dfdfe7b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/assets/js/hero-v2.js:101"}, "properties": {"repobilityId": "8c33c803c5a0ec98", "scanner": "scanner-primary", "fingerprint": "20efd8c34dfdfe7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77f8e43395c057d3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/assets/js/conversion-tracking.js:592"}, "properties": {"repobilityId": "b6d923f86de21314", "scanner": "scanner-primary", "fingerprint": "77f8e43395c057d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1b69a254ae5c85cf", "level": "note", "message": {"text": "Legacy-named symbol `properties_cache_v1` in src/_data/properties.js:9"}, "properties": {"repobilityId": "19d8712148ed4d6e", "scanner": "scanner-primary", "fingerprint": "1b69a254ae5c85cf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2d6ffa20a9f1093b", "level": "note", "message": {"text": "24 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "880bbf29bf1f87e1", "scanner": "scanner-primary", "fingerprint": "2d6ffa20a9f1093b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-70c01c76ef5fecb8", "level": "error", "message": {"text": "Dangling fetch: GET /.netlify/functions/get-properties (scripts/enforcement/lib.test.js:123)"}, "properties": {"repobilityId": "c5030febf0e80b80", "scanner": "scanner-primary", "fingerprint": "70c01c76ef5fecb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25ceb18a55577eea", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (scripts/evals/lib/anthropic-client.js:31)"}, "properties": {"repobilityId": "ab68c77049a90447", "scanner": "scanner-primary", "fingerprint": "25ceb18a55577eea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f1d0a4927d51ffa", "level": "note", "message": {"text": "Unused endpoint: GET /*.html"}, "properties": {"repobilityId": "5ab57457e5b83c5a", "scanner": "scanner-primary", "fingerprint": "0f1d0a4927d51ffa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}