{"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": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: thomascassidyzm/ssi-dashboard-v7", "shortDescription": {"text": "Foundry mined unresolved feedback: thomascassidyzm/ssi-dashboard-v7"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 9\nGraph consistency label: assumption_check\nNodes: 54\nEdges: 113\nNode types: {'pr_file': 32, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignme"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7", "shortDescription": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "fullDescription": {"text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 9\nGraph consistency label: assumption_check\nNodes: 54\nEdges: 113\nNode types: {'pr_file': 32, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'ali"}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: thomascassidyzm/ssi-dashboard-v7", "shortDescription": {"text": "Foundry mined test ci gap after feedback: thomascassidyzm/ssi-dashboard-v7"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 9\nGraph consistency label: assumption_check\nNodes: 54\nEdges: 113\nNode types: {'pr_file': 32, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1,"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7", "shortDescription": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "fullDescription": {"text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 9\nGraph consistency label: assumption_check\nNodes: 54\nEdges: 113\nNode types: {'pr_file': 32, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, "}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_docs_only_fix", "name": "Foundry mined docs only runtime fix: thomascassidyzm/ssi-dashboard-v7", "shortDescription": {"text": "Foundry mined docs only runtime fix: thomascassidyzm/ssi-dashboard-v7"}, "fullDescription": {"text": "Graph query export: Docs-only response to runtime or integration issue\nQuery id: docs_only_runtime_fix\nQuery type: motif_query\nIntent: Assumption-check examples where docs or claims are not enough proof.\nMotif: docs_only_runtime_fix\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nEvidence:\nGraph motif: Runtime/integration complaint answered mostly with docs or claims\nMotif id: docs_only_runtime_fix\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#8\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 8\nGraph consistency label: supported_by_verification_signal\nNodes: 28\nEdges: 43\nNode types: {'link_quality': 8, 'commit': 5, 'com"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.8, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: thomascassidyzm/ssi-dashboard-v7", "shortDescription": {"text": "Foundry mined bad chains: thomascassidyzm/ssi-dashboard-v7"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 32\nLabels: {'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'schema_or_data': 2, 'docs_or_claims': 3, 'test_or_ci': 11, 'source_or_other': 15, 'api_or_backend': 1}\nE"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "scanner-87e27ab3f21b4b1d", "name": "Stray `console.log` in TS/JS \u2014 vite.config.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 vite.config.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-c2668e8149d23af4", "name": "Stray `console.log` in TS/JS \u2014 apml/compiler/src/index.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apml/compiler/src/index.ts:23"}, "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-6938cf0701c7c475", "name": "TODO/FIXME marker in shipping code \u2014 apml/compiler/src/generator/vue-generator.ts:237", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apml/compiler/src/generator/vue-generator.ts:237"}, "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-4b8433e8dab1f921", "name": "Stray `console.log` in TS/JS \u2014 apml/compiler/src/generator/vue-generator.ts:875", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apml/compiler/src/generator/vue-generator.ts:875"}, "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-c188e152ead34084", "name": "TODO/FIXME marker in shipping code \u2014 apml/compiler/src/parser/parser.ts:128", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apml/compiler/src/parser/parser.ts:128"}, "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-33737cb4378ef56f", "name": "Stray `console.log` in TS/JS \u2014 api/auth/invite.js:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/invite.js:108"}, "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-16819a19627155e4", "name": "Stray `console.log` in TS/JS \u2014 api/auth/login.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/login.js:31"}, "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-8edbf60e98937b7a", "name": "Stray `console.log` in TS/JS \u2014 api/auth/users.js:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/users.js:111"}, "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-e095693a84c24963", "name": "TODO/FIXME marker in shipping code \u2014 api/auth/request-link.js:26", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 api/auth/request-link.js:26"}, "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-e086f0140f718a4c", "name": "Stray `console.log` in TS/JS \u2014 api/auth/request-link.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/request-link.js:29"}, "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-bfa6941918507f92", "name": "Stray `console.log` in TS/JS \u2014 api/auth/generate-code.js:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/generate-code.js:43"}, "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-0c4a15a460c8fc87", "name": "Stray `console.log` in TS/JS \u2014 api/voices/preview.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/voices/preview.js:55"}, "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-7b749e36386bcd52", "name": "Stray `console.log` in TS/JS \u2014 api/voices/list.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/voices/list.js:40"}, "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-2df69c88e3dec60d", "name": "Stray `console.log` in TS/JS \u2014 api/lib/s3-course.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/lib/s3-course.js:55"}, "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-c0ec3395a928476c", "name": "Stray `console.log` in TS/JS \u2014 api/production/[courseCode]/script-view.js:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/production/[courseCode]/script-view.js:136"}, "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-8ff6a277c2a9d625", "name": "Stray `console.log` in TS/JS \u2014 api/production/[courseCode]/manifest.js:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/production/[courseCode]/manifest.js:98"}, "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-6cf0799839e07604", "name": "Stray `console.log` in TS/JS \u2014 api/courses/generate.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/generate.js:53"}, "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-2afe9373b0100a32", "name": "Stray `console.log` in TS/JS \u2014 api/courses/index.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/index.js:29"}, "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-96679a21a0df1d9c", "name": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/outputs.js:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/outputs.js:102"}, "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-2a18eacd0167f853", "name": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/script.js:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/script.js:168"}, "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-5242b1b5ebb08f06", "name": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/sync.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/sync.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-5dbc76b49475020a", "name": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/baskets/[seedId].js:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/baskets/[seedId].js:62"}, "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-dd96ba052bd9e7ab", "name": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/introductions/[legoId].js:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/introductions/[legoId].js:52"}, "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-1e482c190f4eab07", "name": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/translations/[uuid].js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/translations/[uuid].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-952f2c954a233da2", "name": "Stray `console.log` in TS/JS \u2014 tools/generators/generate-course-manifest.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/generators/generate-course-manifest.js:23"}, "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-afad09f7c674361e", "name": "Stray `console.log` in TS/JS \u2014 src/main.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/main.js:40"}, "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-31465a34a03b002a", "name": "Stray `console.log` in TS/JS \u2014 src/stores/production.js:318", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/stores/production.js:318"}, "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-4a3fd41293e22295", "name": "Stray `console.log` in TS/JS \u2014 src/config/github.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/config/github.js:33"}, "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-0b0e6be1d05e01ed", "name": "Stray `console.log` in TS/JS \u2014 src/composables/useAutocueState.js:183", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/composables/useAutocueState.js:183"}, "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-b726144d4b794641", "name": "Stray `console.log` in TS/JS \u2014 src/composables/useExportWorkflow.ts:261", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/composables/useExportWorkflow.ts:261"}, "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-301b94c55efdbf6a", "name": "Stray `console.log` in TS/JS \u2014 src/composables/useTextGenSocket.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/composables/useTextGenSocket.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-39d725fa22d9a8bb", "name": "Stray `console.log` in TS/JS \u2014 src/components/CourseScriptViewer.vue:260", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/CourseScriptViewer.vue:260"}, "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-215accce1edde9d2", "name": "Stray `console.log` in TS/JS \u2014 src/components/ProgressMonitor.vue:163", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ProgressMonitor.vue:163"}, "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-b7a419b63ef0d508", "name": "Icon-only button without accessible name \u2014 src/components/LegoBasketViewer.vue:459", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/LegoBasketViewer.vue:459"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5c37cbc848371ab9", "name": "Icon-only button without accessible name \u2014 src/components/RemoteControl.vue:20", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/RemoteControl.vue:20"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1df6f855bf0a5738", "name": "Stray `console.log` in TS/JS \u2014 src/components/IntroductionsViewer.vue:212", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/IntroductionsViewer.vue:212"}, "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-3266384ce139fc63", "name": "Icon-only button without accessible name \u2014 src/components/LegoVisualizer.vue:287", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/LegoVisualizer.vue:287"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2475a6ee271cc399", "name": "Stray `console.log` in TS/JS \u2014 src/components/EnvironmentSwitcher.vue:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/EnvironmentSwitcher.vue: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-a9d1e1791f7c3499", "name": "Stray `console.log` in TS/JS \u2014 src/components/quality/LearnedRulesView.vue:206", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality/LearnedRulesView.vue: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-60c20489b0dae787", "name": "Stray `console.log` in TS/JS \u2014 src/components/quality/PromptEvolutionView.vue:667", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality/PromptEvolutionView.vue:667"}, "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-89dd3115fdfbb8eb", "name": "Stray `console.log` in TS/JS \u2014 src/components/quality/CourseHealthReport.vue:677", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality/CourseHealthReport.vue:677"}, "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-2f70bd8c91752701", "name": "TODO/FIXME marker in shipping code \u2014 src/components/quality/SeedQualityReview.vue:521", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/quality/SeedQualityReview.vue:521"}, "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-9adb614e1be0749f", "name": "Stray `console.log` in TS/JS \u2014 src/components/production/audio/AudioPipeline.vue:131", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/production/audio/AudioPipeline.vue:131"}, "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-5578ca664e96147d", "name": "Stray `console.log` in TS/JS \u2014 src/components/generation/LanguageBriefEditor.vue:466", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/generation/LanguageBriefEditor.vue: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-3619a9f9aad316bb", "name": "Stray `console.log` in TS/JS \u2014 src/services/__test_cache__.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/__test_cache__.js:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-581d616d8a0462b0", "name": "Stray `console.log` in TS/JS \u2014 src/services/courseCache.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/courseCache.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-acd6de2241d24819", "name": "Stray `console.log` in TS/JS \u2014 src/services/supabase.js:996", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/supabase.js:996"}, "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-adf3b46cf6e2b37d", "name": "Stray `console.log` in TS/JS \u2014 src/services/seedService.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/seedService.js:31"}, "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-98f1f89932acc1ff", "name": "Stray `console.log` in TS/JS \u2014 src/services/api.js:166", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/api.js:166"}, "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-b03990c5ba314cae", "name": "Stray `console.log` in TS/JS \u2014 src/views/CourseValidator.vue:680", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/CourseValidator.vue:680"}, "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-418810f855e89451", "name": "Stray `console.log` in TS/JS \u2014 src/views/Pedagogy.vue:672", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/Pedagogy.vue:672"}, "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-15ba8130ca4e3dc2", "name": "Icon-only button without accessible name \u2014 src/views/CourseEditor.vue:786", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/views/CourseEditor.vue:786"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27635e8a03d802ac", "name": "Stray `console.log` in TS/JS \u2014 src/views/CourseEditor.vue:1293", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/CourseEditor.vue:1293"}, "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-a8c3ca9c46791a94", "name": "Stray `console.log` in TS/JS \u2014 src/views/CanonicalSeeds.vue:243", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/CanonicalSeeds.vue:243"}, "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-6c4f8da7dc9e1f6e", "name": "Stray `console.log` in TS/JS \u2014 src/views/DocsIndex.vue:280", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/DocsIndex.vue:280"}, "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-bbe984cad7e9b842", "name": "Stray `console.log` in TS/JS \u2014 src/views/CourseManager.vue:1869", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/CourseManager.vue:1869"}, "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-be4e45f6208dbbf5", "name": "Stray `console.log` in TS/JS \u2014 src/views/_archive/AudioPipelineView.vue:577", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/_archive/AudioPipelineView.vue:577"}, "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-38bde880fc5e25a9", "name": "TODO/FIXME marker in shipping code \u2014 src/views/_archive/AudioGeneration.vue:880", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/_archive/AudioGeneration.vue:880"}, "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-ac4b19f71d5ad800", "name": "Stray `console.log` in TS/JS \u2014 src/views/_archive/AudioGeneration.vue:545", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/_archive/AudioGeneration.vue:545"}, "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-89838a2ed2769803", "name": "TODO/FIXME marker in shipping code \u2014 src/views/_archive/RecordingStudio.vue:619", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/_archive/RecordingStudio.vue:619"}, "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-b25f716d00c5ec6e", "name": "Stray `console.log` in TS/JS \u2014 src/views/production/QAReview.vue:254", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/QAReview.vue:254"}, "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-672c3ae291d2b557", "name": "Stray `console.log` in TS/JS \u2014 src/views/production/MissionControl.vue:331", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/MissionControl.vue:331"}, "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-7828fd0e95f97a29", "name": "TODO/FIXME marker in shipping code \u2014 src/views/production/ScriptViewer.vue:2054", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/production/ScriptViewer.vue:2054"}, "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-a506513fd2a4ac0d", "name": "Stray `console.log` in TS/JS \u2014 src/views/production/ScriptViewer.vue:1208", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/ScriptViewer.vue:1208"}, "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-49b285d31562604c", "name": "Stray `console.log` in TS/JS \u2014 src/views/production/TextGeneration.vue:1243", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/TextGeneration.vue:1243"}, "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-9a5ae81b08d5d401", "name": "Icon-only button without accessible name \u2014 src/views/production/components/FilterBar.vue:95", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/views/production/components/FilterBar.vue:95"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-651c474475926c91", "name": "Stray `console.log` in TS/JS \u2014 src/views/production/components/MissingAudio.vue:610", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/components/MissingAudio.vue:610"}, "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-292fd0a0d115b4b1", "name": "TODO/FIXME marker in shipping code \u2014 src/views/production/components/CyclePlayer.vue:231", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/production/components/CyclePlayer.vue:231"}, "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-a0c441cb9d585447", "name": "Insecure pattern 'node_child_process' in vite.config.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in vite.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-2398885f8db368b5", "name": "Insecure pattern 'node_child_process' in start-automation.cjs:19", "shortDescription": {"text": "Insecure pattern 'node_child_process' in start-automation.cjs:19"}, "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-8cc04b5f066935e4", "name": "Insecure pattern 'cors_wildcard' in api/upload-seed.js:66", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/upload-seed.js:66"}, "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-e1a2a64244564688", "name": "Insecure pattern 'cors_wildcard' in api/import-course.js:465", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/import-course.js:465"}, "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-aea615272f772428", "name": "Insecure pattern 'cors_wildcard' in api/pod-content.js:57", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/pod-content.js:57"}, "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-6b835ac7a1e61293", "name": "Insecure pattern 'cors_wildcard' in api/algorithm-config.js:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/algorithm-config.js:18"}, "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-658b90567ab205c9", "name": "Insecure pattern 'cors_wildcard' in api/seeds/upload.js:120", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/seeds/upload.js:120"}, "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-6a753c0441c06c9c", "name": "Insecure pattern 'cors_wildcard' in api/auth/invite.js:27", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auth/invite.js:27"}, "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-2b68f62fdc163e43", "name": "Insecure pattern 'cors_wildcard' in api/auth/me.js:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auth/me.js:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd65033cc7f52fa5", "name": "Insecure pattern 'cors_wildcard' in api/auth/login.js:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auth/login.js:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b3098a2a161fb99e", "name": "Insecure pattern 'cors_wildcard' in api/auth/users.js:23", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auth/users.js:23"}, "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-5ec3074d2c993bca", "name": "Insecure pattern 'cors_wildcard' in api/auth/verify.js:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auth/verify.js:9"}, "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-da4dcd17ce121180", "name": "Insecure pattern 'cors_wildcard' in api/auth/request-link.js:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auth/request-link.js:10"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17c8d775f5883684", "name": "Insecure pattern 'cors_wildcard' in api/auth/generate-code.js:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auth/generate-code.js:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-87c8f7df8fef47cf", "name": "Insecure pattern 'cors_wildcard' in api/baskets/upload.js:35", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/baskets/upload.js:35"}, "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-08a387007554fcc0", "name": "Insecure pattern 'cors_wildcard' in api/voices/preview.js:26", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/voices/preview.js:26"}, "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-dbebeb3f05977a02", "name": "Insecure pattern 'cors_wildcard' in api/voices/list.js:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/voices/list.js:19"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e9bed54f88ff6def", "name": "Insecure pattern 'cors_wildcard' in api/intelligence/[phase].js:41", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/intelligence/[phase].js:41"}, "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-8953fe7fc916741b", "name": "Insecure pattern 'cors_wildcard' in api/production/health.js:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/health.js:10"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27976ff2d31851e9", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/script-view.js:57", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/script-view.js:57"}, "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-7d9832e03d4c11a9", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/manifest.js:79", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/manifest.js:79"}, "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-812f9f88aa57eb6d", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/audio-metadata.js:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/audio-metadata.js:9"}, "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-da69d268ba8e9243", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/audio-pipeline/plan.js:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/audio-pipeline/plan.js:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8783cbabc435f90", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/flags/index.js:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/flags/index.js:9"}, "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-1609162c75d4e742", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/flags/update.js:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/flags/update.js:9"}, "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-62ef479aa8898c27", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/audio/[uuid]/url.js:23", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/audio/[uuid]/url.js:23"}, "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-3e5c3318f6a64dd3", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/stats.js:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/stats.js:9"}, "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-f509e563d74161c7", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/aggregated.js:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/aggregated.js:9"}, "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-171c9204ffb1ff58", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/index.js:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/index.js:10"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e910b76ff46b8d04", "name": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/resolve.js:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/resolve.js:9"}, "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-91403b23e9efd48e", "name": "Insecure pattern 'cors_wildcard' in api/legos/upload.js:76", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/legos/upload.js:76"}, "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-6c6acb2f7567f4bf", "name": "Insecure pattern 'weak_hash' in api/courses/generate.js:15", "shortDescription": {"text": "Insecure pattern 'weak_hash' in api/courses/generate.js:15"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-117198fd38439d87", "name": "Insecure pattern 'cors_wildcard' in api/courses/generate.js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/generate.js:13"}, "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-e353acf43ccd8880", "name": "Insecure pattern 'cors_wildcard' in api/courses/index.js:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/index.js:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9574531f11e62fb5", "name": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/outputs.js:15", "shortDescription": {"text": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/outputs.js:15"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0f415ec51e56a42", "name": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/outputs.js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/outputs.js:13"}, "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-40da28f63d87d7b3", "name": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/script.js:15", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/script.js:15"}, "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-a4a5db700340514a", "name": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/sync.js:35", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/sync.js:35"}, "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-80e590684bfc80bc", "name": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/progress.js:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/progress.js:25"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7abb3f2ed34053a1", "name": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/index.js:24", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/index.js:24"}, "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-8a071f9b5f6204c3", "name": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/baskets/[seedId].js:15", "shortDescription": {"text": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/baskets/[seedId].js:15"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6c95ff5812c43771", "name": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/baskets/[seedId].js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/baskets/[seedId].js:13"}, "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-c2d66810a62d9689", "name": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/files/[filename].js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/files/[filename].js:13"}, "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-f82ec7def8885da4", "name": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/introductions/[legoId].js:15", "shortDescription": {"text": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/introductions/[legoId].js:15"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b6756fdd293f7a64", "name": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/introductions/[legoId].js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/introductions/[legoId].js:13"}, "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-3b9444c6781e474c", "name": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/translations/[uuid].js:15", "shortDescription": {"text": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/translations/[uuid].js:15"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-159e44f018167416", "name": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/translations/[uuid].js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/translations/[uuid].js:13"}, "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-67d5bdd071f31737", "name": "Insecure pattern 'node_child_process' in services/publish-manifest-service.cjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/publish-manifest-service.cjs:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d53963d7f718f88b", "name": "Insecure pattern 'node_child_process' in services/preflight-check-service.cjs:486", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/preflight-check-service.cjs:486"}, "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-01569195270ba4dc", "name": "Insecure pattern 'node_child_process' in services/display-tiler.cjs:28", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/display-tiler.cjs:28"}, "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-91bb51f982c27ac8", "name": "Insecure pattern 'node_child_process' in services/pod-bulk-migrate.cjs:59", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/pod-bulk-migrate.cjs:59"}, "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-aa33462cceb23a4e", "name": "Insecure pattern 'node_child_process' in services/production-api.cjs:9059", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/production-api.cjs:9059"}, "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-385745e294ae5121", "name": "Insecure pattern 'node_child_process' in services/audio-processor.cjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/audio-processor.cjs:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-caf222e6ad1e25b4", "name": "Insecure pattern 'node_child_process' in services/gender-prep-detector.cjs:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/gender-prep-detector.cjs:15"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c58a0c0c0b9eb606", "name": "Insecure pattern 'node_child_process' in services/insight-discovery.cjs:21", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/insight-discovery.cjs:21"}, "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-3bfad3aae897f775", "name": "Insecure pattern 'node_child_process' in services/gender-prep-coordinator.cjs:18", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/gender-prep-coordinator.cjs:18"}, "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-0c47dc9dfcb6cd4c", "name": "Insecure pattern 'cors_wildcard' in services/network-builder-api.cjs:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/network-builder-api.cjs:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc89c87db4b975c3", "name": "Insecure pattern 'node_child_process' in services/release-notes.cjs:30", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/release-notes.cjs:30"}, "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-8ddadb91e31c763d", "name": "Insecure pattern 'node_child_process' in services/orchestration/orchestrator.cjs:24", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/orchestration/orchestrator.cjs:24"}, "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-f70f68dc83f9d5d2", "name": "Insecure pattern 'node_child_process' in services/voice-engine/align.cjs:28", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/voice-engine/align.cjs:28"}, "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-4536f96eefdfec6c", "name": "Insecure pattern 'node_child_process' in services/voice-engine/splicer.cjs:24", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/voice-engine/splicer.cjs:24"}, "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-33ae69d2bb22ef81", "name": "Insecure pattern 'node_child_process' in services/voice-engine/__tests__/synthesis-job.test.mjs:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/voice-engine/__tests__/synthesis-job.test.mjs:8"}, "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-f87581aebe40e0da", "name": "Insecure pattern 'node_child_process' in services/voice-engine/__tests__/ffmpeg-roundtrip.test.mjs:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/voice-engine/__tests__/ffmpeg-roundtrip.test.mjs:15"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9b73263cf556ad8", "name": "Insecure pattern 'cors_wildcard' in services/api/progress-tracker.cjs:35", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/api/progress-tracker.cjs:35"}, "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-933c3ef5c0457512", "name": "Insecure pattern 'cors_wildcard' in services/api/ngrok-proxy.cjs:45", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/api/ngrok-proxy.cjs:45"}, "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-a58cd4fbd9188770", "name": "Insecure pattern 'node_child_process' in services/shared/spawn-agent-terminal.cjs:15", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/shared/spawn-agent-terminal.cjs:15"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b298eeb661ed7e14", "name": "Insecure pattern 'node_child_process' in services/shared/spawn-agent.cjs:20", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/shared/spawn-agent.cjs:20"}, "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-1ed1fb583828a3d8", "name": "Insecure pattern 'node_child_process' in services/shared/spawn-agent-cli.cjs:23", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/shared/spawn-agent-cli.cjs:23"}, "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-89b8b985b906f30d", "name": "Insecure pattern 'node_child_process' in services/shared/claude-cli.cjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/shared/claude-cli.cjs:13"}, "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-642afde80b8cefa9", "name": "Insecure pattern 'cors_wildcard' in services/phases/phase8-audio-from-baskets.cjs:34", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase8-audio-from-baskets.cjs:34"}, "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-54c253ae6e0fd04e", "name": "Insecure pattern 'cors_wildcard' in services/phases/phase8-audio-v13.cjs:48", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase8-audio-v13.cjs:48"}, "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-c12ea9748a7e4840", "name": "Insecure pattern 'node_child_process' in services/phases/generate-legacy-manifest.cjs:42", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/phases/generate-legacy-manifest.cjs:42"}, "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-7cc7c83db83da18e", "name": "Insecure pattern 'node_child_process' in services/phases/phase3-basket-generation/server.cjs:26", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/phases/phase3-basket-generation/server.cjs:26"}, "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-59fd3c50c42116cf", "name": "Insecure pattern 'cors_wildcard' in services/phases/phase3-basket-generation/server.cjs:57", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase3-basket-generation/server.cjs:57"}, "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-b10cdb624ac091b6", "name": "Insecure pattern 'node_child_process' in services/phases/phase1-translation/server.cjs:30", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/phases/phase1-translation/server.cjs:30"}, "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-0183a4493ccfa3b0", "name": "Insecure pattern 'cors_wildcard' in services/phases/phase1-translation/server.cjs:94", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase1-translation/server.cjs:94"}, "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-edce61e923ba74b1", "name": "Insecure pattern 'node_child_process' in services/phases/manifest-compilation/server.cjs:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/phases/manifest-compilation/server.cjs:17"}, "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-cdc3fd0160744e7a", "name": "Insecure pattern 'cors_wildcard' in services/phases/manifest-compilation/server.cjs:36", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/phases/manifest-compilation/server.cjs:36"}, "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-b6b0a95cca8859ff", "name": "Insecure pattern 'cors_wildcard' in services/phases/phase0-language-brief/server.cjs:58", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase0-language-brief/server.cjs:58"}, "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-e8bbacd6d98371fb", "name": "Insecure pattern 'cors_wildcard' in services/phases/phase2-conflict-resolution/server.cjs:43", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase2-conflict-resolution/server.cjs:43"}, "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-2475268e29d5e48c", "name": "Insecure pattern 'cors_wildcard' in services/pipeline/pipeline-server.cjs:211", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in services/pipeline/pipeline-server.cjs:211"}, "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-6db64909e45dd46d", "name": "Insecure pattern 'node_child_process' in services/course-builder/lib/build-manager.cjs:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/course-builder/lib/build-manager.cjs: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-32c0dff4d8200af6", "name": "Insecure pattern 'node_child_process' in services/course-builder/lib/agent-spawner.cjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/course-builder/lib/agent-spawner.cjs:7"}, "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-dc87c56afca72124", "name": "Insecure pattern 'node_child_process' in services/course-builder/routes/qa.cjs:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/course-builder/routes/qa.cjs:11"}, "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-036037b38cb4e171", "name": "Insecure pattern 'node_child_process' in services/course-builder/routes/v2.cjs:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in services/course-builder/routes/v2.cjs:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a3d859e15ba1f898", "name": "Insecure pattern 'node_child_process' in tools/build-shared-known-store.cjs:59", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/build-shared-known-store.cjs:59"}, "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-57642e4429c2c567", "name": "Insecure pattern 'node_child_process' in tools/orchestrators/spawn_basket_windows.cjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/orchestrators/spawn_basket_windows.cjs: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-e3ebf43fd1a2ef04", "name": "Insecure pattern 'node_child_process' in tools/orchestrators/orchestrator-workflow.cjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/orchestrators/orchestrator-workflow.cjs:13"}, "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-29dff247b88f8387", "name": "Insecure pattern 'node_child_process' in tools/orchestrators/spawn-swarm-5x5x3.cjs:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/orchestrators/spawn-swarm-5x5x3.cjs:16"}, "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-367676b8f3b37096", "name": "Insecure pattern 'node_child_process' in tools/sync/publish-to-course-configs.cjs:34", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/sync/publish-to-course-configs.cjs:34"}, "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-0718fecc013b0b31", "name": "Insecure pattern 'node_child_process' in tools/mergers/merge_all_basket_branches.cjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/mergers/merge_all_basket_branches.cjs: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-69a77bb86ed1ab5e", "name": "Insecure pattern 'node_child_process' in tools/mergers/watch_and_merge_branches.cjs:33", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/mergers/watch_and_merge_branches.cjs:33"}, "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-07eaec77359c4f4c", "name": "Insecure pattern 'node_child_process' in tools/mergers/merge_all_segments.cjs:70", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/mergers/merge_all_segments.cjs:70"}, "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-1ef08a2c56aafad8", "name": "Insecure pattern 'node_child_process' in tools/recording-optimizer/segment-audio.cjs:20", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/recording-optimizer/segment-audio.cjs:20"}, "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-94b1dbf8f1e68d71", "name": "Insecure pattern 'node_child_process' in tools/recording-optimizer/splice-legos.cjs:19", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/recording-optimizer/splice-legos.cjs:19"}, "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-8b0c5494dc466480", "name": "Insecure pattern 'node_child_process' in tools/recording-optimizer/align-audio.cjs:31", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/recording-optimizer/align-audio.cjs:31"}, "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-53518e652e058895", "name": "Insecure pattern 'node_child_process' in tools/validators/manifest-structure-validator.cjs:848", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/validators/manifest-structure-validator.cjs:848"}, "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-18cf5dae47b9b00a", "name": "Insecure pattern 'weak_hash' in tools/generators/README.md:47", "shortDescription": {"text": "Insecure pattern 'weak_hash' in tools/generators/README.md:47"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01b4fd4041688070", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/layer1-explorer.html:495", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/layer1-explorer.html:495"}, "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-806a938e749a3035", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/listening-playground.html:890", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/listening-playground.html:890"}, "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-8280001cd9b038cd", "name": "Insecure pattern 'direct_innerhtml_assignment' in new_vision/autocue-recording-system.html:1199", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in new_vision/autocue-recording-system.html:1199"}, "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-531f23e8a2479c0b", "name": "Insecure pattern 'direct_innerhtml_assignment' in new_vision/autocue-teleprompter-prototype.html:1438", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in new_vision/autocue-teleprompter-prototype.html:1438"}, "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-2ac523aee0988b95", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4.2.2 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-600299574bb6a28a", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-867482d7158dd532", "name": "Very large file: services/supabase-client.cjs (1958 lines)", "shortDescription": {"text": "Very large file: services/supabase-client.cjs (1958 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d42c17ee9cebaba", "name": "Very large file: services/production-api.cjs (11219 lines)", "shortDescription": {"text": "Very large file: services/production-api.cjs (11219 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3b7e90856710dde", "name": "Very large file: services/orchestration/orchestrator.cjs (11138 lines)", "shortDescription": {"text": "Very large file: services/orchestration/orchestrator.cjs (11138 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d436e97cf43f3c84", "name": "Very large file: services/phases/phase8-audio-v13.cjs (5395 lines)", "shortDescription": {"text": "Very large file: services/phases/phase8-audio-v13.cjs (5395 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-574eb0074582cefe", "name": "Very large file: services/phases/generate-legacy-manifest.cjs (1818 lines)", "shortDescription": {"text": "Very large file: services/phases/generate-legacy-manifest.cjs (1818 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-388ee536c522c4a5", "name": "Very large file: services/phases/phase3-basket-generation/server.cjs (2022 lines)", "shortDescription": {"text": "Very large file: services/phases/phase3-basket-generation/server.cjs (2022 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f6b973dad34fce6", "name": "Very large file: services/phases/phase1-translation/server.cjs (2848 lines)", "shortDescription": {"text": "Very large file: services/phases/phase1-translation/server.cjs (2848 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc2cac7c3d236633", "name": "Very large file: services/course-builder/routes/qa.cjs (1793 lines)", "shortDescription": {"text": "Very large file: services/course-builder/routes/qa.cjs (1793 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24287e8e83bd62e2", "name": "Very large file: services/course-builder/routes/build.cjs (1245 lines)", "shortDescription": {"text": "Very large file: services/course-builder/routes/build.cjs (1245 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-798339d3ffbbd984", "name": "Very large file: services/course-builder/routes/seed-complete.cjs (2084 lines)", "shortDescription": {"text": "Very large file: services/course-builder/routes/seed-complete.cjs (2084 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-338bd2791a8cd7e2", "name": "Very large file: services/course-builder/routes/v2.cjs (1797 lines)", "shortDescription": {"text": "Very large file: services/course-builder/routes/v2.cjs (1797 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-033ab27b435060fa", "name": "Very large file: src/services/api.js (1839 lines)", "shortDescription": {"text": "Very large file: src/services/api.js (1839 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "24 test file(s) for 324 source file(s) (ratio 0.07). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 3004 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 62 placeholder/mock markers across 24 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-17d866d91a7c451e", "name": "Agent instruction/config may expose a secret: CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-641ad4787b315f00", "name": "Agent authority lacks a verifier contract: .claude/commands/phrase-fixer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/phrase-fixer.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-82af23378c2f56e4", "name": "Commented-code block (6 lines) in start-automation.cjs:61", "shortDescription": {"text": "Commented-code block (6 lines) in start-automation.cjs:61"}, "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-ccd3437c40874731", "name": "Commented-code block (6 lines) in apml/compiler/src/parser/parser.ts:348", "shortDescription": {"text": "Commented-code block (6 lines) in apml/compiler/src/parser/parser.ts:348"}, "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-2dd3727a4c611f66", "name": "Commented-code block (6 lines) in apml/core/audio-registry-v12.zod.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in apml/core/audio-registry-v12.zod.ts: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-90f2b252a732dc3c", "name": "Commented-code block (6 lines) in apml/core/audio-registry-v12.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in apml/core/audio-registry-v12.ts: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-31ee14bcd2e94850", "name": "Commented-code block (5 lines) in api/pod-content.js:113", "shortDescription": {"text": "Commented-code block (5 lines) in api/pod-content.js:113"}, "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-cb68bac772bfed47", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/voices/preview.js:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/voices/preview.js:87"}, "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-2053a4273be70b56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/voices/list.js:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/voices/list.js:42"}, "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-0f618b5b7e4dd259", "name": "Commented-code block (6 lines) in docs/pair-contracts/zho_for_eng.contract.cjs:18", "shortDescription": {"text": "Commented-code block (6 lines) in docs/pair-contracts/zho_for_eng.contract.cjs:18"}, "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-554f20d98c4b9bab", "name": "Commented-code block (6 lines) in docs/pair-contracts/_TEMPLATE.contract.cjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/pair-contracts/_TEMPLATE.contract.cjs: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-c7db13d2e566ca77", "name": "Commented-code block (8 lines) in docs/pair-contracts/fra_for_eng.contract.cjs:1", "shortDescription": {"text": "Commented-code block (8 lines) in docs/pair-contracts/fra_for_eng.contract.cjs: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-a194d1f9e6979422", "name": "Commented-code block (5 lines) in database/import-course-structure.cjs:76", "shortDescription": {"text": "Commented-code block (5 lines) in database/import-course-structure.cjs:76"}, "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-5a193572d3e62472", "name": "Legacy-named symbol `spa_for_eng_v2` in database/enrich-baskets.cjs:12", "shortDescription": {"text": "Legacy-named symbol `spa_for_eng_v2` in database/enrich-baskets.cjs:12"}, "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-7f8e02baecca47d2", "name": "Legacy-named symbol `spa_for_eng_v2` in database/import-course-v2.cjs:5", "shortDescription": {"text": "Legacy-named symbol `spa_for_eng_v2` in database/import-course-v2.cjs: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-49a4b5913f44fde4", "name": "Legacy-named symbol `spa_for_eng_v2` in database/import-course-to-db.cjs:12", "shortDescription": {"text": "Legacy-named symbol `spa_for_eng_v2` in database/import-course-to-db.cjs:12"}, "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-9920b72abc83021b", "name": "Legacy-named symbol `spa_for_eng_v2` in database/import-course-registry.cjs:15", "shortDescription": {"text": "Legacy-named symbol `spa_for_eng_v2` in database/import-course-registry.cjs:15"}, "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-fb39fe7d07aee125", "name": "Legacy-named symbol `standardToLegacy` in database/lib/import-legacy-course-core.cjs:57", "shortDescription": {"text": "Legacy-named symbol `standardToLegacy` in database/lib/import-legacy-course-core.cjs:57"}, "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-32f9af76629a0834", "name": "Commented-code block (6 lines) in services/s3-production-service.cjs:154", "shortDescription": {"text": "Commented-code block (6 lines) in services/s3-production-service.cjs:154"}, "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-0e7d4076cda743de", "name": "Commented-code block (15 lines) in services/run-pod-explainer-batch.cjs:41", "shortDescription": {"text": "Commented-code block (15 lines) in services/run-pod-explainer-batch.cjs:41"}, "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-b9578984f3edcbc3", "name": "Legacy-named symbol `standardToLegacy` in services/mar-service.cjs:117", "shortDescription": {"text": "Legacy-named symbol `standardToLegacy` in services/mar-service.cjs:117"}, "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-97cae24c20d24224", "name": "Legacy-named symbol `codeToLegacy` in services/language-code-service.cjs:27", "shortDescription": {"text": "Legacy-named symbol `codeToLegacy` in services/language-code-service.cjs:27"}, "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-73b1cf9e8c45f5cb", "name": "Legacy-named symbol `eleven_multilingual_v2` in services/tts-service.cjs:72", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in services/tts-service.cjs:72"}, "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-f778d9a00d2b5700", "name": "Commented-code block (6 lines) in services/tts-service.cjs:19", "shortDescription": {"text": "Commented-code block (6 lines) in services/tts-service.cjs:19"}, "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-5f2c57e8674672d3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/tts-service.cjs:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/tts-service.cjs:62"}, "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-3c27d19fe2938b7e", "name": "Commented-code block (9 lines) in services/display-tiler.cjs:10", "shortDescription": {"text": "Commented-code block (9 lines) in services/display-tiler.cjs:10"}, "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-a6decaacb78d7393", "name": "Legacy-named symbol `spa_for_eng_v2` in services/manifest-generator.cjs:202", "shortDescription": {"text": "Legacy-named symbol `spa_for_eng_v2` in services/manifest-generator.cjs:202"}, "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-c29ee1f77d4ee855", "name": "Commented-code block (5 lines) in services/manifest-generator.cjs:356", "shortDescription": {"text": "Commented-code block (5 lines) in services/manifest-generator.cjs:356"}, "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-fdeaf9660019fcd7", "name": "Legacy-named symbol `eleven_multilingual_v2` in services/audio-generation-planner.cjs:77", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in services/audio-generation-planner.cjs:77"}, "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-a1382f9514dad93f", "name": "Commented-code block (5 lines) in services/phrase-decomposition-writer.cjs:9", "shortDescription": {"text": "Commented-code block (5 lines) in services/phrase-decomposition-writer.cjs:9"}, "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-81bef4459da4b511", "name": "Legacy-named symbol `spa_for_eng_v2` in services/data-finders.cjs:356", "shortDescription": {"text": "Legacy-named symbol `spa_for_eng_v2` in services/data-finders.cjs:356"}, "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-4d09ae0c815967e5", "name": "Commented-code block (7 lines) in services/pod-bulk-migrate.cjs:110", "shortDescription": {"text": "Commented-code block (7 lines) in services/pod-bulk-migrate.cjs:110"}, "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-4aa5894d5ed6de22", "name": "Legacy-named symbol `useLegacy` in services/production-api.cjs:1245", "shortDescription": {"text": "Legacy-named symbol `useLegacy` in services/production-api.cjs:1245"}, "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-dfd410bcf396025f", "name": "Commented-code block (5 lines) in services/production-api.cjs:33", "shortDescription": {"text": "Commented-code block (5 lines) in services/production-api.cjs:33"}, "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-4fcfa262be581871", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/production-api.cjs:1161", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/production-api.cjs:1161"}, "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-96fd797209a5ad14", "name": "Legacy-named symbol `spa_for_eng_v2` in services/course-data-service.cjs:214", "shortDescription": {"text": "Legacy-named symbol `spa_for_eng_v2` in services/course-data-service.cjs:214"}, "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-09567b6a23561643", "name": "Commented-code block (6 lines) in services/course-data-service.cjs:633", "shortDescription": {"text": "Commented-code block (6 lines) in services/course-data-service.cjs:633"}, "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-9bdb7ae921f42807", "name": "Legacy-named symbol `standardToLegacy` in services/uuid-service.cjs:24", "shortDescription": {"text": "Legacy-named symbol `standardToLegacy` in services/uuid-service.cjs:24"}, "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-9ef8fe88c356f50b", "name": "Commented-code block (6 lines) in services/course-builder-api.cjs:75", "shortDescription": {"text": "Commented-code block (6 lines) in services/course-builder-api.cjs:75"}, "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-a515eec480e1850e", "name": "Commented-code block (5 lines) in services/gender-prep-detector.cjs:29", "shortDescription": {"text": "Commented-code block (5 lines) in services/gender-prep-detector.cjs:29"}, "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-fd41395848fb79cf", "name": "Commented-code block (8 lines) in services/learning-script-generator.cjs:635", "shortDescription": {"text": "Commented-code block (8 lines) in services/learning-script-generator.cjs:635"}, "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-033b1e3e35c224b5", "name": "Commented-code block (5 lines) in services/phrase-decomposer.cjs:7", "shortDescription": {"text": "Commented-code block (5 lines) in services/phrase-decomposer.cjs:7"}, "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-1486c526a4bb2513", "name": "Commented-code block (6 lines) in services/pod-explainer-composite.cjs:58", "shortDescription": {"text": "Commented-code block (6 lines) in services/pod-explainer-composite.cjs:58"}, "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-ea6f3d087173d03a", "name": "Legacy-named symbol `eleven_multilingual_v2` in services/elevenlabs-service.cjs:22", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in services/elevenlabs-service.cjs:22"}, "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-bbba9f91bb54bdcc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/elevenlabs-service.cjs:216", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/elevenlabs-service.cjs:216"}, "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-3ec513a72579d02c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/insight-discovery.cjs:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/insight-discovery.cjs:47"}, "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-118c9f7406c319d7", "name": "Commented-code block (5 lines) in services/pod-dialogue-generator.cjs:437", "shortDescription": {"text": "Commented-code block (5 lines) in services/pod-dialogue-generator.cjs:437"}, "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-e0b5fecc566e35b1", "name": "Commented-code block (7 lines) in services/gender-prep-coordinator.cjs:428", "shortDescription": {"text": "Commented-code block (7 lines) in services/gender-prep-coordinator.cjs:428"}, "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-2467129d63aa4ef2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/google-tts-service.cjs:345", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/google-tts-service.cjs:345"}, "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-2289be6f5ad24b57", "name": "Commented-code block (6 lines) in services/release-notes.cjs:193", "shortDescription": {"text": "Commented-code block (6 lines) in services/release-notes.cjs:193"}, "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-ade7d437eb90c62a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/release-notes.cjs:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/release-notes.cjs:152"}, "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-b275c49c04501c75", "name": "Commented-code block (5 lines) in services/pod-explainer-generator.cjs:381", "shortDescription": {"text": "Commented-code block (5 lines) in services/pod-explainer-generator.cjs:381"}, "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-822c7d169343105c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/briefs/component-backfill.cjs:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/briefs/component-backfill.cjs:42"}, "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-7210f2d74eb5c6f6", "name": "Legacy-named symbol `deleted_baskets_backup` in services/orchestration/orchestrator.cjs:8035", "shortDescription": {"text": "Legacy-named symbol `deleted_baskets_backup` in services/orchestration/orchestrator.cjs:8035"}, "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-07a9cddadb753ba1", "name": "Commented-code block (5 lines) in services/orchestration/orchestrator.cjs:1274", "shortDescription": {"text": "Commented-code block (5 lines) in services/orchestration/orchestrator.cjs:1274"}, "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-8ef85bdfb662e1f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/orchestration/orchestrator.cjs:7826", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/orchestration/orchestrator.cjs:7826"}, "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-977d92c7542a5531", "name": "Commented-code block (5 lines) in services/voice-engine/provenance-adapter.cjs:72", "shortDescription": {"text": "Commented-code block (5 lines) in services/voice-engine/provenance-adapter.cjs:72"}, "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-b516b2ebf7b19d17", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/voice-engine/db.cjs:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/voice-engine/db.cjs:48"}, "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-64ce1493af1f8c90", "name": "Commented-code block (8 lines) in services/voice-engine/pods-router.cjs:263", "shortDescription": {"text": "Commented-code block (8 lines) in services/voice-engine/pods-router.cjs:263"}, "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-8622712e50c20429", "name": "Commented-code block (8 lines) in services/voice-engine/team-router.cjs:64", "shortDescription": {"text": "Commented-code block (8 lines) in services/voice-engine/team-router.cjs:64"}, "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-0ad6324af365725f", "name": "Commented-code block (8 lines) in services/voice-engine/splicer.cjs:80", "shortDescription": {"text": "Commented-code block (8 lines) in services/voice-engine/splicer.cjs:80"}, "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-87aadc349e65a246", "name": "Commented-code block (7 lines) in services/voice-engine/pods-cast.cjs:240", "shortDescription": {"text": "Commented-code block (7 lines) in services/voice-engine/pods-cast.cjs:240"}, "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-a8465351bf256bbe", "name": "Commented-code block (10 lines) in services/voice-engine/__tests__/pods-origin-guard.test.mjs:5", "shortDescription": {"text": "Commented-code block (10 lines) in services/voice-engine/__tests__/pods-origin-guard.test.mjs:5"}, "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-15a3f67f85a30900", "name": "Commented-code block (6 lines) in services/api/ngrok-proxy.cjs:258", "shortDescription": {"text": "Commented-code block (6 lines) in services/api/ngrok-proxy.cjs:258"}, "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-3aff41aadc654859", "name": "Commented-code block (6 lines) in services/shared/text-classification.cjs:25", "shortDescription": {"text": "Commented-code block (6 lines) in services/shared/text-classification.cjs:25"}, "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-e6498afb721bbbee", "name": "Commented-code block (5 lines) in services/shared/spawn-agent-unified.cjs:30", "shortDescription": {"text": "Commented-code block (5 lines) in services/shared/spawn-agent-unified.cjs:30"}, "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-823a2895378ee48c", "name": "Commented-code block (6 lines) in services/shared/claude-cli.cjs:37", "shortDescription": {"text": "Commented-code block (6 lines) in services/shared/claude-cli.cjs:37"}, "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-6ff4b4dba7971068", "name": "Commented-code block (10 lines) in services/shared/popty-identity.cjs:6", "shortDescription": {"text": "Commented-code block (10 lines) in services/shared/popty-identity.cjs:6"}, "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-b5404a50ad363761", "name": "Commented-code block (6 lines) in services/phases/phase8-audio-v13.cjs:63", "shortDescription": {"text": "Commented-code block (6 lines) in services/phases/phase8-audio-v13.cjs:63"}, "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-ec84e4664f630532", "name": "Legacy-named symbol `knownLegacy` in services/phases/generate-legacy-manifest.cjs:1549", "shortDescription": {"text": "Legacy-named symbol `knownLegacy` in services/phases/generate-legacy-manifest.cjs:1549"}, "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-80b9bb7ad6b366c7", "name": "Commented-code block (5 lines) in services/phases/generate-legacy-manifest.cjs:24", "shortDescription": {"text": "Commented-code block (5 lines) in services/phases/generate-legacy-manifest.cjs:24"}, "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-463e1a77bcdeed71", "name": "Commented-code block (5 lines) in services/phases/phase2-conflict-resolution/server.cjs:460", "shortDescription": {"text": "Commented-code block (5 lines) in services/phases/phase2-conflict-resolution/server.cjs:460"}, "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-3b2bef5abc2b01cc", "name": "Legacy-named symbol `zho_for_eng_v2` in services/course-builder/lib/validation.cjs:892", "shortDescription": {"text": "Legacy-named symbol `zho_for_eng_v2` in services/course-builder/lib/validation.cjs:892"}, "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-1b8d193dc4de7bc3", "name": "Commented-code block (11 lines) in services/course-builder/lib/validation.cjs:619", "shortDescription": {"text": "Commented-code block (11 lines) in services/course-builder/lib/validation.cjs:619"}, "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-580d8e7a3123c66a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/course-builder/lib/validation.cjs:648", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/course-builder/lib/validation.cjs:648"}, "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-6cce4f573fc31381", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/course-builder/lib/pipeline.cjs:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/course-builder/lib/pipeline.cjs:152"}, "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-dd256b98d797f53a", "name": "Commented-code block (6 lines) in services/course-builder/routes/build.cjs:647", "shortDescription": {"text": "Commented-code block (6 lines) in services/course-builder/routes/build.cjs:647"}, "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-5ec516ca0de6da8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/course-builder/routes/build.cjs:445", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/course-builder/routes/build.cjs:445"}, "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-eb55db4375e1d9d0", "name": "Commented-code block (7 lines) in services/course-builder/routes/drafts.cjs:55", "shortDescription": {"text": "Commented-code block (7 lines) in services/course-builder/routes/drafts.cjs:55"}, "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-69f24c850e898617", "name": "Commented-code block (5 lines) in services/course-builder/routes/translation.cjs:237", "shortDescription": {"text": "Commented-code block (5 lines) in services/course-builder/routes/translation.cjs:237"}, "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-941979578d4e55ba", "name": "Commented-code block (7 lines) in services/course-builder/routes/seed-complete.cjs:1280", "shortDescription": {"text": "Commented-code block (7 lines) in services/course-builder/routes/seed-complete.cjs:1280"}, "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-62386faf80f806d8", "name": "Commented-code block (5 lines) in services/course-builder/routes/golden.cjs:115", "shortDescription": {"text": "Commented-code block (5 lines) in services/course-builder/routes/golden.cjs:115"}, "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-f39bc690de26c61e", "name": "Legacy-named symbol `dashboard_v2` in services/course-builder/routes/v2.cjs:1165", "shortDescription": {"text": "Legacy-named symbol `dashboard_v2` in services/course-builder/routes/v2.cjs:1165"}, "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-f10198a23a72af5e", "name": "Commented-code block (5 lines) in services/course-builder/routes/v2.cjs:32", "shortDescription": {"text": "Commented-code block (5 lines) in services/course-builder/routes/v2.cjs:32"}, "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-7cd80e67e2f4debe", "name": "Commented-code block (6 lines) in tools/pod-voice-colour-n.cjs:47", "shortDescription": {"text": "Commented-code block (6 lines) in tools/pod-voice-colour-n.cjs:47"}, "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-86f5f92331ddf739", "name": "Commented-code block (7 lines) in tools/pod-voice-colour.cjs:34", "shortDescription": {"text": "Commented-code block (7 lines) in tools/pod-voice-colour.cjs:34"}, "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-30d51ad33a3fcafe", "name": "Commented-code block (7 lines) in tools/pod-sync.cjs:32", "shortDescription": {"text": "Commented-code block (7 lines) in tools/pod-sync.cjs:32"}, "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-e74c272dcba4ca9d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tools/seed-canonical-pods.cjs:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tools/seed-canonical-pods.cjs:94"}, "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-cf5db4cddea6f47f", "name": "Commented-code block (7 lines) in tools/pod-voice-coverage.cjs:66", "shortDescription": {"text": "Commented-code block (7 lines) in tools/pod-voice-coverage.cjs:66"}, "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-6eebf27e2b51c5b3", "name": "Commented-code block (6 lines) in tools/persist-stage0-pod0.cjs:60", "shortDescription": {"text": "Commented-code block (6 lines) in tools/persist-stage0-pod0.cjs:60"}, "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-17d2eee7adf5b7f2", "name": "Legacy-named symbol `spa_legacy` in tools/sync/publish-to-course-configs.cjs:26", "shortDescription": {"text": "Legacy-named symbol `spa_legacy` in tools/sync/publish-to-course-configs.cjs:26"}, "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-ce659da2e83c277d", "name": "Legacy-named symbol `targetLegacy` in tools/phase-prep/phase5_prep_scaffolds_v10.cjs:49", "shortDescription": {"text": "Legacy-named symbol `targetLegacy` in tools/phase-prep/phase5_prep_scaffolds_v10.cjs:49"}, "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-b027a035a8f7f473", "name": "Commented-code block (5 lines) in tools/validators/manifest-structure-validator.cjs:529", "shortDescription": {"text": "Commented-code block (5 lines) in tools/validators/manifest-structure-validator.cjs:529"}, "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-7a8c08c61a2f45f5", "name": "Legacy-named symbol `eleven_multilingual_v2` in tools/generators/phase8-generate-audio.cjs:100", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in tools/generators/phase8-generate-audio.cjs:100"}, "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-19663b8359da43cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tools/generators/phase8-generate-audio.cjs:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tools/generators/phase8-generate-audio.cjs:92"}, "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-9c84eaa9da28b1e4", "name": "Legacy-named symbol `course_manifest_v2` in tools/generators/transform-to-v2-manifest.cjs:16", "shortDescription": {"text": "Legacy-named symbol `course_manifest_v2` in tools/generators/transform-to-v2-manifest.cjs:16"}, "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-4b0270a5b9aeaf02", "name": "Commented-code block (5 lines) in tools/generators/transform-to-v2-manifest.cjs:193", "shortDescription": {"text": "Commented-code block (5 lines) in tools/generators/transform-to-v2-manifest.cjs:193"}, "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-02d9201034cf19e5", "name": "Commented-code block (5 lines) in src/router/index.js:308", "shortDescription": {"text": "Commented-code block (5 lines) in src/router/index.js:308"}, "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-f59352f877419f1a", "name": "Commented-code block (5 lines) in src/stores/production.js:184", "shortDescription": {"text": "Commented-code block (5 lines) in src/stores/production.js:184"}, "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-22bb76d8afebf2ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/stores/production.js:345", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/stores/production.js:345"}, "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-7213becdc25552cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useAutocueState.js:475", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useAutocueState.js:475"}, "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-8e163816b6f1f469", "name": "Commented-code block (5 lines) in src/composables/useAuth.js:81", "shortDescription": {"text": "Commented-code block (5 lines) in src/composables/useAuth.js:81"}, "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-9a8f28d3232683e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useAuth.js:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useAuth.js:103"}, "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-867b9fd4a57617e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useExportWorkflow.ts:666", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useExportWorkflow.ts:666"}, "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-37dc2d88a112f2b4", "name": "Commented-code block (8 lines) in src/composables/useTapRecorder.js:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/composables/useTapRecorder.js:5"}, "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-0f7d22c71d8eb1bd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useAudioUpload.ts:180", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useAudioUpload.ts:180"}, "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-bfa28e4f61ab199b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useCourses.js:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useCourses.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-195ba451af7fd7dc", "name": "Commented-code block (5 lines) in src/utils/podRecordingPlan.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/podRecordingPlan.js:5"}, "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-f4d9d975b2c3396a", "name": "Commented-code block (5 lines) in src/services/supabase.js:220", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/supabase.js:220"}, "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-12bb664b29fee968", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/vfs.js:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/vfs.js:20"}, "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-7548428502cf8f4d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/authFetch.js:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/authFetch.js:2"}, "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-ae4a20828aec857e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/api.js:1163", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/api.js:1163"}, "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-45a5db513d691560", "name": "85 env vars used in code but missing from .env.example", "shortDescription": {"text": "85 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_SECRET`, `AGENT_SPAWN_DELAY`, `ANTHROPIC_API_KEY`, `AUDIO_CONCURRENCY`, `AUDIO_PARALLEL`, `AUDIO_URL`, `AUDIT_ARCHIVE_CRON`, `AUDIT_ARCHIVE_HOT_DAYS` + 77 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-ebae9455be9cbd9b", "name": "Dangling fetch: POST https://${AZURE_SPEECH_REGION}.tts.speech.microsoft.com/cognitiveservices/v1 (api/voices/preview.js", "shortDescription": {"text": "Dangling fetch: POST https://${AZURE_SPEECH_REGION}.tts.speech.microsoft.com/cognitiveservices/v1 (api/voices/preview.js:87)"}, "fullDescription": {"text": "`api/voices/preview.js:87` calls `POST https://${AZURE_SPEECH_REGION}.tts.speech.microsoft.com/cognitiveservices/v1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>.tts.speech.microsoft.com/cognitiveservices/v1`\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-ee5de7ba2e96b284", "name": "Dangling fetch: GET https://${AZURE_SPEECH_REGION}.tts.speech.microsoft.com/cognitiveservices/voices/list (api/voices/li", "shortDescription": {"text": "Dangling fetch: GET https://${AZURE_SPEECH_REGION}.tts.speech.microsoft.com/cognitiveservices/voices/list (api/voices/list.js:42)"}, "fullDescription": {"text": "`api/voices/list.js:42` calls `GET https://${AZURE_SPEECH_REGION}.tts.speech.microsoft.com/cognitiveservices/voices/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>.tts.speech.microsoft.com/cognitiveservices/voices/list`\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-159d1c8de12e4f6d", "name": "Dangling fetch: POST https://api.x.ai/v1/tts (services/tts-service.cjs:226)", "shortDescription": {"text": "Dangling fetch: POST https://api.x.ai/v1/tts (services/tts-service.cjs:226)"}, "fullDescription": {"text": "`services/tts-service.cjs:226` calls `POST https://api.x.ai/v1/tts` 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.x.ai/v1/tts`\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-3dfd3a5f920d9aa9", "name": "Dangling fetch: GET https://${azureRegion}.tts.speech.microsoft.com/cognitiveservices/voices/list (services/voice-discov", "shortDescription": {"text": "Dangling fetch: GET https://${azureRegion}.tts.speech.microsoft.com/cognitiveservices/voices/list (services/voice-discovery-service.cjs:128)"}, "fullDescription": {"text": "`services/voice-discovery-service.cjs:128` calls `GET https://${azureRegion}.tts.speech.microsoft.com/cognitiveservices/voices/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>.tts.speech.microsoft.com/cognitiveservices/voices/list`\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-2eb1aafb7d574d4a", "name": "Dangling fetch: GET https://uptime.betterstack.com/api/v2/monitors (services/production-api.cjs:10556)", "shortDescription": {"text": "Dangling fetch: GET https://uptime.betterstack.com/api/v2/monitors (services/production-api.cjs:10556)"}, "fullDescription": {"text": "`services/production-api.cjs:10556` calls `GET https://uptime.betterstack.com/api/v2/monitors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/uptime.betterstack.com/api/v2/monitors`\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-3fa1fc4e052201d2", "name": "Dangling fetch: GET https://uptime.betterstack.com/api/v2/incidents?from=${encodeURIComponent(since)} (services/producti", "shortDescription": {"text": "Dangling fetch: GET https://uptime.betterstack.com/api/v2/incidents?from=${encodeURIComponent(since)} (services/production-api.cjs:10557)"}, "fullDescription": {"text": "`services/production-api.cjs:10557` calls `GET https://uptime.betterstack.com/api/v2/incidents?from=${encodeURIComponent(since)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/uptime.betterstack.com/api/v2/incidents`\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-5360088525f83976", "name": "Dangling fetch: GET http://localhost:3471/api/course/${courseCode}/components/gaps?limit=5&include_partial=true (service", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3471/api/course/${courseCode}/components/gaps?limit=5&include_partial=true (services/briefs/component-backfill.cjs:42)"}, "fullDescription": {"text": "`services/briefs/component-backfill.cjs:42` calls `GET http://localhost:3471/api/course/${courseCode}/components/gaps?limit=5&include_partial=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3471/api/course/<p>/components/gaps`\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-dd2b9d5362120f85", "name": "Dangling fetch: POST http://localhost:${PORT}/phase-complete (services/orchestration/orchestrator.cjs:2684)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:${PORT}/phase-complete (services/orchestration/orchestrator.cjs:2684)"}, "fullDescription": {"text": "`services/orchestration/orchestrator.cjs:2684` calls `POST http://localhost:${PORT}/phase-complete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:/<p>/phase-complete`\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-bb7188ab57a6b4eb", "name": "Dangling fetch: GET https://iso639-3.sil.org/sites/iso639-3/files/downloads/iso-639-3.tab (services/orchestration/orches", "shortDescription": {"text": "Dangling fetch: GET https://iso639-3.sil.org/sites/iso639-3/files/downloads/iso-639-3.tab (services/orchestration/orchestrator.cjs:5242)"}, "fullDescription": {"text": "`services/orchestration/orchestrator.cjs:5242` calls `GET https://iso639-3.sil.org/sites/iso639-3/files/downloads/iso-639-3.tab` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/iso639-3.sil.org/sites/iso639-3/files/downloads/iso-639-3.tab`\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-03fc5f3abe7124f8", "name": "Dangling fetch: GET http://localhost:4040/api/tunnels (services/orchestration/orchestrator.cjs:10895)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:4040/api/tunnels (services/orchestration/orchestrator.cjs:10895)"}, "fullDescription": {"text": "`services/orchestration/orchestrator.cjs:10895` calls `GET http://localhost:4040/api/tunnels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:4040/api/tunnels`\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-6b7aa9f41ac209f2", "name": "Dangling fetch: GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1 (services/phases/phase8-audio", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1 (services/phases/phase8-audio-v13.cjs:3124)"}, "fullDescription": {"text": "`services/phases/phase8-audio-v13.cjs:3124` calls `GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3470/api/production/<p>/audio-stats`\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-e4da69e228478b7c", "name": "Dangling fetch: GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1 (services/phases/phase8-audio", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1 (services/phases/phase8-audio-v13.cjs:3654)"}, "fullDescription": {"text": "`services/phases/phase8-audio-v13.cjs:3654` calls `GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3470/api/production/<p>/audio-stats`\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-3f2ca5bba62031da", "name": "Dangling fetch: GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1 (services/phases/phase8-audio", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1 (services/phases/phase8-audio-v13.cjs:3935)"}, "fullDescription": {"text": "`services/phases/phase8-audio-v13.cjs:3935` calls `GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3470/api/production/<p>/audio-stats`\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-2a049c35564ec225", "name": "Dangling fetch: POST http://localhost:3470/api/production/internal/emit (services/course-builder/context.cjs:42)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3470/api/production/internal/emit (services/course-builder/context.cjs:42)"}, "fullDescription": {"text": "`services/course-builder/context.cjs:42` calls `POST http://localhost:3470/api/production/internal/emit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3470/api/production/internal/emit`\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-fcc737217e784908", "name": "Dangling fetch: GET http://localhost:${ctx.config.PORT || 3471}/api/course/${courseCode}/translate?limit=1 (services/cou", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${ctx.config.PORT || 3471}/api/course/${courseCode}/translate?limit=1 (services/course-builder/routes/build.cjs:445)"}, "fullDescription": {"text": "`services/course-builder/routes/build.cjs:445` calls `GET http://localhost:${ctx.config.PORT || 3471}/api/course/${courseCode}/translate?limit=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/api/course/<p>/translate`\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-636db393219c2057", "name": "Dangling fetch: POST http://localhost:${port}/api/build/golden/${courseCode}?target=10&phase=calibration (services/cours", "shortDescription": {"text": "Dangling fetch: POST http://localhost:${port}/api/build/golden/${courseCode}?target=10&phase=calibration (services/course-builder/routes/translation.cjs:585)"}, "fullDescription": {"text": "`services/course-builder/routes/translation.cjs:585` calls `POST http://localhost:${port}/api/build/golden/${courseCode}?target=10&phase=calibration` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/api/build/golden/<p>`\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-f089f2364d4a9240", "name": "Dangling fetch: POST http://localhost:${port}/api/build/golden/${courseCode}?target=50&phase=golden (services/course-bui", "shortDescription": {"text": "Dangling fetch: POST http://localhost:${port}/api/build/golden/${courseCode}?target=50&phase=golden (services/course-builder/routes/golden.cjs:359)"}, "fullDescription": {"text": "`services/course-builder/routes/golden.cjs:359` calls `POST http://localhost:${port}/api/build/golden/${courseCode}?target=50&phase=golden` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/api/build/golden/<p>`\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-af11ad5d662baf73", "name": "Dangling fetch: POST http://localhost:${port}/api/seed/complete?course=${courseCode}&skip_validation=true (services/cour", "shortDescription": {"text": "Dangling fetch: POST http://localhost:${port}/api/seed/complete?course=${courseCode}&skip_validation=true (services/course-builder/routes/golden.cjs:534)"}, "fullDescription": {"text": "`services/course-builder/routes/golden.cjs:534` calls `POST http://localhost:${port}/api/seed/complete?course=${courseCode}&skip_validation=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:/<p>/api/seed/complete`\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-48f3c5287e084747", "name": "Dangling fetch: GET /api/course/legos (src/services/seedService.js:38)", "shortDescription": {"text": "Dangling fetch: GET /api/course/legos (src/services/seedService.js:38)"}, "fullDescription": {"text": "`src/services/seedService.js:38` calls `GET /api/course/legos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/course/legos`\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-25b9a1c6d20dfee2", "name": "Unused endpoint: USE /api/production/:courseCode/voice-engine", "shortDescription": {"text": "Unused endpoint: USE /api/production/:courseCode/voice-engine"}, "fullDescription": {"text": "`services/production-api.cjs` declares `USE /api/production/:courseCode/voice-engine` 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}}, {"id": "scanner-987b259093ed0904", "name": "Unused endpoint: USE /api/production/:courseCode/team", "shortDescription": {"text": "Unused endpoint: USE /api/production/:courseCode/team"}, "fullDescription": {"text": "`services/production-api.cjs` declares `USE /api/production/:courseCode/team` 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}}, {"id": "scanner-44cbfa72320dfc88", "name": "Unused endpoint: GET /api/production/:courseCode/pods/coverage", "shortDescription": {"text": "Unused endpoint: GET /api/production/:courseCode/pods/coverage"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/production/:courseCode/pods/coverage` 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}}, {"id": "scanner-84f771191278bd08", "name": "Unused endpoint: USE /api/production/:courseCode/pods", "shortDescription": {"text": "Unused endpoint: USE /api/production/:courseCode/pods"}, "fullDescription": {"text": "`services/production-api.cjs` declares `USE /api/production/:courseCode/pods` 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}}, {"id": "scanner-fd55aa0818a7c897", "name": "Unused endpoint: POST /api/auth/login", "shortDescription": {"text": "Unused endpoint: POST /api/auth/login"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/auth/login` 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}}, {"id": "scanner-ef246efd482a2902", "name": "Unused endpoint: POST /api/auth/generate-code", "shortDescription": {"text": "Unused endpoint: POST /api/auth/generate-code"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/auth/generate-code` 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}}, {"id": "scanner-90b4cc64d237a246", "name": "Unused endpoint: POST /api/auth/invite-dashboard", "shortDescription": {"text": "Unused endpoint: POST /api/auth/invite-dashboard"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/auth/invite-dashboard` 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}}, {"id": "scanner-cdf17788cd5c7e55", "name": "Unused endpoint: POST /api/auth/invite", "shortDescription": {"text": "Unused endpoint: POST /api/auth/invite"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/auth/invite` 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}}, {"id": "scanner-73ae1f0610551460", "name": "Unused endpoint: PUT /api/auth/invite", "shortDescription": {"text": "Unused endpoint: PUT /api/auth/invite"}, "fullDescription": {"text": "`services/production-api.cjs` declares `PUT /api/auth/invite` 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}}, {"id": "scanner-244b71272cc50aba", "name": "Unused endpoint: GET /api/auth/users", "shortDescription": {"text": "Unused endpoint: GET /api/auth/users"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/auth/users` 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}}, {"id": "scanner-81bf1f1827f396c0", "name": "Unused endpoint: DELETE /api/auth/users", "shortDescription": {"text": "Unused endpoint: DELETE /api/auth/users"}, "fullDescription": {"text": "`services/production-api.cjs` declares `DELETE /api/auth/users` 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}}, {"id": "scanner-d5a39262ac205120", "name": "Unused endpoint: POST /api/auth/logout", "shortDescription": {"text": "Unused endpoint: POST /api/auth/logout"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/auth/logout` 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}}, {"id": "scanner-a89ba1d33243a3c8", "name": "Unused endpoint: POST /api/auth/invite-codes/generate", "shortDescription": {"text": "Unused endpoint: POST /api/auth/invite-codes/generate"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/auth/invite-codes/generate` 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}}, {"id": "scanner-90c28a6f1b621466", "name": "Unused endpoint: GET /api/auth/invite-codes", "shortDescription": {"text": "Unused endpoint: GET /api/auth/invite-codes"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/auth/invite-codes` 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}}, {"id": "scanner-946375315718a8a2", "name": "Unused endpoint: POST /api/auth/invite-codes/redeem", "shortDescription": {"text": "Unused endpoint: POST /api/auth/invite-codes/redeem"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/auth/invite-codes/redeem` 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}}, {"id": "scanner-89ec203c96b8abbb", "name": "Unused endpoint: GET /api/production/health", "shortDescription": {"text": "Unused endpoint: GET /api/production/health"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/production/health` 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}}, {"id": "scanner-38090198533deac7", "name": "Unused endpoint: GET /api/production/schema/validate", "shortDescription": {"text": "Unused endpoint: GET /api/production/schema/validate"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/production/schema/validate` 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}}, {"id": "scanner-e6b1ba0df1e9977d", "name": "Unused endpoint: GET /api/courses", "shortDescription": {"text": "Unused endpoint: GET /api/courses"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/courses` 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}}, {"id": "scanner-291ebdae32e7c5d8", "name": "Unused endpoint: GET /api/courses/:courseCode/stats", "shortDescription": {"text": "Unused endpoint: GET /api/courses/:courseCode/stats"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/courses/:courseCode/stats` 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}}, {"id": "scanner-0c4f75b3cf30b946", "name": "Unused endpoint: PATCH /api/courses/:courseCode/platform-status", "shortDescription": {"text": "Unused endpoint: PATCH /api/courses/:courseCode/platform-status"}, "fullDescription": {"text": "`services/production-api.cjs` declares `PATCH /api/courses/:courseCode/platform-status` 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}}, {"id": "scanner-26c3a9d099b799dc", "name": "Unused endpoint: GET /api/stats/:courseCode", "shortDescription": {"text": "Unused endpoint: GET /api/stats/:courseCode"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/stats/:courseCode` 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}}, {"id": "scanner-5c5c81481d330cc5", "name": "Unused endpoint: ALL /api/build/*", "shortDescription": {"text": "Unused endpoint: ALL /api/build/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/build/*` 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}}, {"id": "scanner-4a672240da91a927", "name": "Unused endpoint: ALL /api/v2/*", "shortDescription": {"text": "Unused endpoint: ALL /api/v2/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/v2/*` 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}}, {"id": "scanner-d4c5d0aec8d6a5ce", "name": "Unused endpoint: ALL /api/golden/*", "shortDescription": {"text": "Unused endpoint: ALL /api/golden/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/golden/*` 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}}, {"id": "scanner-2ad9bd7184ee6c9f", "name": "Unused endpoint: ALL /api/phrases/*", "shortDescription": {"text": "Unused endpoint: ALL /api/phrases/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/phrases/*` 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}}, {"id": "scanner-6b3c9d39affc1663", "name": "Unused endpoint: ALL /api/legos/*", "shortDescription": {"text": "Unused endpoint: ALL /api/legos/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/legos/*` 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}}, {"id": "scanner-db446c01ef7e2e0b", "name": "Unused endpoint: ALL /api/agents", "shortDescription": {"text": "Unused endpoint: ALL /api/agents"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/agents` 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}}, {"id": "scanner-0db6bf90b78b6d77", "name": "Unused endpoint: ALL /api/agents/*", "shortDescription": {"text": "Unused endpoint: ALL /api/agents/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/agents/*` 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}}, {"id": "scanner-095d75e80dbd477d", "name": "Unused endpoint: ALL /api/orchestrator/*", "shortDescription": {"text": "Unused endpoint: ALL /api/orchestrator/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/orchestrator/*` 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}}, {"id": "scanner-4a16805ab6f57d52", "name": "Unused endpoint: ALL /api/qa/*", "shortDescription": {"text": "Unused endpoint: ALL /api/qa/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/qa/*` 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}}, {"id": "scanner-8796c1afc5deb3d4", "name": "Unused endpoint: ALL /api/course/*", "shortDescription": {"text": "Unused endpoint: ALL /api/course/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/course/*` 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}}, {"id": "scanner-fa92adefbb8cbb33", "name": "Unused endpoint: ALL /api/seeds/*", "shortDescription": {"text": "Unused endpoint: ALL /api/seeds/*"}, "fullDescription": {"text": "`services/production-api.cjs` declares `ALL /api/seeds/*` 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}}, {"id": "scanner-dc84a5593d918d00", "name": "Unused endpoint: GET /api/languages", "shortDescription": {"text": "Unused endpoint: GET /api/languages"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/languages` 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}}, {"id": "scanner-80f797e6de25f4ef", "name": "Unused endpoint: POST /api/courses/create", "shortDescription": {"text": "Unused endpoint: POST /api/courses/create"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/courses/create` 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}}, {"id": "scanner-56f70e9bfb0e08a7", "name": "Unused endpoint: GET /api/courses/:courseCode/voice-config", "shortDescription": {"text": "Unused endpoint: GET /api/courses/:courseCode/voice-config"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/courses/:courseCode/voice-config` 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}}, {"id": "scanner-761e8cb3d556f67e", "name": "Unused endpoint: PUT /api/courses/:courseCode/voice-config", "shortDescription": {"text": "Unused endpoint: PUT /api/courses/:courseCode/voice-config"}, "fullDescription": {"text": "`services/production-api.cjs` declares `PUT /api/courses/:courseCode/voice-config` 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}}, {"id": "scanner-87ef42c47d486abc", "name": "Unused endpoint: PATCH /api/courses/:courseCode/voice-config/:role", "shortDescription": {"text": "Unused endpoint: PATCH /api/courses/:courseCode/voice-config/:role"}, "fullDescription": {"text": "`services/production-api.cjs` declares `PATCH /api/courses/:courseCode/voice-config/:role` 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}}, {"id": "scanner-2d550a66bcc46ce8", "name": "Unused endpoint: GET /api/voices/discover/:language", "shortDescription": {"text": "Unused endpoint: GET /api/voices/discover/:language"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/voices/discover/:language` 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}}, {"id": "scanner-bfc1af513eee607e", "name": "Unused endpoint: GET /api/courses/:courseCode/seed-phrases-preview", "shortDescription": {"text": "Unused endpoint: GET /api/courses/:courseCode/seed-phrases-preview"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/courses/:courseCode/seed-phrases-preview` 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}}, {"id": "scanner-b31cb745aa712a4a", "name": "Unused endpoint: POST /api/voices/preview", "shortDescription": {"text": "Unused endpoint: POST /api/voices/preview"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/voices/preview` 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}}, {"id": "scanner-ae999694935cbd0d", "name": "Unused endpoint: GET /api/mission-control/jobs", "shortDescription": {"text": "Unused endpoint: GET /api/mission-control/jobs"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/mission-control/jobs` 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}}, {"id": "scanner-2d6304a96c902c8d", "name": "Unused endpoint: POST /api/mission-control/jobs/:jobId/stop", "shortDescription": {"text": "Unused endpoint: POST /api/mission-control/jobs/:jobId/stop"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/mission-control/jobs/:jobId/stop` 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}}, {"id": "scanner-f883759d3de2bdc5", "name": "Unused endpoint: POST /api/mission-control/jobs/:jobId/resume", "shortDescription": {"text": "Unused endpoint: POST /api/mission-control/jobs/:jobId/resume"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/mission-control/jobs/:jobId/resume` 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}}, {"id": "scanner-595e5eac329b3348", "name": "Unused endpoint: POST /api/mission-control/jobs/:jobId/clear", "shortDescription": {"text": "Unused endpoint: POST /api/mission-control/jobs/:jobId/clear"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/mission-control/jobs/:jobId/clear` 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}}, {"id": "scanner-1625f7521c9ab6bb", "name": "Unused endpoint: GET /api/services", "shortDescription": {"text": "Unused endpoint: GET /api/services"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/services` 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}}, {"id": "scanner-ac8abe0914558723", "name": "Unused endpoint: POST /api/services/:name/restart", "shortDescription": {"text": "Unused endpoint: POST /api/services/:name/restart"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/services/:name/restart` 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}}, {"id": "scanner-794cca9f3df9fcd0", "name": "Unused endpoint: GET /api/services/:name/logs", "shortDescription": {"text": "Unused endpoint: GET /api/services/:name/logs"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/services/:name/logs` 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}}, {"id": "scanner-7a87e60b297cd2de", "name": "Unused endpoint: POST /api/deploy", "shortDescription": {"text": "Unused endpoint: POST /api/deploy"}, "fullDescription": {"text": "`services/production-api.cjs` declares `POST /api/deploy` 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}}, {"id": "scanner-6152f204d49e4bc2", "name": "Unused endpoint: GET /api/production/course-stats", "shortDescription": {"text": "Unused endpoint: GET /api/production/course-stats"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/production/course-stats` 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}}, {"id": "scanner-c58b4f045519f045", "name": "Unused endpoint: GET /api/production/:courseCode/stats", "shortDescription": {"text": "Unused endpoint: GET /api/production/:courseCode/stats"}, "fullDescription": {"text": "`services/production-api.cjs` declares `GET /api/production/:courseCode/stats` 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/21222"}, "properties": {"repository": "thomascassidyzm/ssi-dashboard-v7", "repoUrl": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 430223, "scanner": "foundry_dataset", "fingerprint": "14594862a2e6cf1395f2ca1ed8de88ab0879f91c5283d7cbf32d699b1a6ac108", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"test_or_ci": 11, "test_ci_gap": 1, "api_or_backend": 1, "docs_or_claims": 3, "schema_or_data": 2, "source_or_other": 15, "api_integration_gap": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 113, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 32, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 54, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 32, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#9", "issue_number": "9", "quality_tiers": {"unresolved": 5, "assumption_check": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-b3afff5aa0d164bf", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 66, "api_or_backend": 6, "docs_or_claims": 18, "schema_or_data": 12, "source_or_other": 90}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 9\nGraph consistency label: assumption_check\nNodes: 54\nEdges: 113\nNode types: {'pr_file': 32, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 32, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 15, 'test_or_ci': 11, 'not_resolved_or_not_observed': 5, 'docs_or_claims': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_disagreement': 3, 'schema_or_data': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-be507b43e6edb59a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 430222, "scanner": "foundry_dataset", "fingerprint": "e75d75637806d8351bfebbadc5d678cb21f153a980f3a4af22e17bd5b84a25c0", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"bug_fix": 3, "docs_or_claims": 1, "api_integration_gap": 2, "verification_or_tests": 2, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 43, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 28, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 1, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#8", "issue_number": "8", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-cb72fdd120a15aa2", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"docs_or_claims": 6}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#8\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 8\nGraph consistency label: supported_by_verification_signal\nNodes: 28\nEdges: 43\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'comment_chain_touches_file': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'api_integration_gap': 2, 'verification_or_tests': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-822944b57ebba007", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 430221, "scanner": "foundry_dataset", "fingerprint": "e81c40c3d229d1daf4a3f41b3cf147dbf779d1eadb619a8396c628588a29bf63", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"bug_fix": 2, "data_schema": 2, "ui_or_frontend": 2, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 2, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 48, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 2, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 29, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 2, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#7", "issue_number": "7", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-0b47c876b4f60bf3", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"ui_or_frontend": 12}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#7\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#7\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#7\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 7\nGraph consistency label: supported_by_verification_signal\nNodes: 29\nEdges: 48\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'chain_has_link_quality': 8, 'comment_chain_touches_file': 6, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'blueprint_human_gap_disagreement': 3, 'data_schema_persistence': 2, 'ui_or_frontend': 2, 'data_schema': 2, 'bug_fix': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-0f89045d994d0610", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 430220, "scanner": "foundry_dataset", "fingerprint": "0e54fcf4bb0e7429a8a0fd0b011f0a5be06920e215e5cbe7fc8ba70fbb923fd5", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"bug_fix": 3, "data_schema": 1, "source_or_other": 1, "ci_success_signal": 1, "api_integration_gap": 1, "dependency_or_build": 2, "verification_or_tests": 1, "data_schema_persistence": 2, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {"ci_success_signal": 2}, "synthetic": false, "edge_count": 54, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 3, "comment_chain_has_ci": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 9, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 31, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 3, "alignment": 3, "ci_summary": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#6", "issue_number": "6", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-34584046398444ca", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"source_or_other": 6, "dependency_or_build": 12}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#6\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#6\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#6\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 6\nGraph consistency label: supported_by_verification_signal\nNodes: 31\nEdges: 54\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'pr_file': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'ci_summary': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 9, 'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_touches_file': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'issue_chain_touches_file': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'comment_chain_has_ci': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'data_schema_persistence': 2, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'source_or_other': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1, 'ci_success_signal': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {'ci_success_signal': 2}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-f95c8a2eb482800b", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 430219, "scanner": "foundry_dataset", "fingerprint": "881a7c32a97585463c069225c5668c9d1ca337d5b1e93896573dcada2e975a99", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"bug_fix": 3, "test_ci_gap": 1, "api_or_backend": 1, "ui_or_frontend": 1, "source_or_other": 5, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 72, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 7, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 7, "thread_has_comment_chain": 3, "comment_chain_links_commit": 4, "comment_chain_touches_file": 21, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 33, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 3, "pr_file": 7, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#5", "issue_number": "5", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-36c6a9d4a951e791", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 6, "ui_or_frontend": 6, "source_or_other": 30}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#5\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#5\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#5\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 5\nGraph consistency label: supported_by_verification_signal\nNodes: 33\nEdges: 72\nNode types: {'link_quality': 8, 'pr_file': 7, 'commit': 4, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 21, 'chain_has_link_quality': 8, 'thread_touches_file': 7, 'issue_chain_touches_file': 7, 'comment_chain_links_commit': 4, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 5, 'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'ui_or_frontend': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-1220d7c9a4d46827", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 430218, "scanner": "foundry_dataset", "fingerprint": "05aff37899d575842f8a9bb803e90208d0de6f15e116840ebad85c7e830b7845", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"bug_fix": 4, "api_or_backend": 1, "ui_or_frontend": 1, "source_or_other": 1, "ci_success_signal": 1, "api_integration_gap": 2, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {"ci_success_signal": 2}, "synthetic": false, "edge_count": 54, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 3, "comment_chain_has_ci": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 9, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 31, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 3, "alignment": 3, "ci_summary": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#4", "issue_number": "4", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-6a8b4c74b0e6a46d", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 6, "ui_or_frontend": 6, "source_or_other": 6}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#4\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#4\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#4\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 4\nGraph consistency label: supported_by_verification_signal\nNodes: 31\nEdges: 54\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'pr_file': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'ci_summary': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 9, 'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_touches_file': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'issue_chain_touches_file': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'comment_chain_has_ci': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'bug_fix': 4, 'not_resolved_or_not_observed': 4, 'blueprint_human_gap_disagreement': 3, 'api_integration_gap': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'source_or_other': 1, 'api_or_backend': 1, 'ui_or_frontend': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'ci_success_signal': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {'ci_success_signal': 2}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-6b2352e90e06f20c", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 430217, "scanner": "foundry_dataset", "fingerprint": "ed0482d24d20f0d8131080e53e762ec59fc3a0595c2b8e795b5b128926bb88dc", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"test_or_ci": 11, "api_or_backend": 2, "docs_or_claims": 11, "schema_or_data": 3, "ui_or_frontend": 17, "source_or_other": 39, "api_integration_gap": 1, "data_schema_persistence": 2, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 164, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 83, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 105, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 83, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#10", "issue_number": "10", "quality_tiers": {"unresolved": 5, "assumption_check": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-ce03625525f62cb1", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 66, "api_or_backend": 12, "docs_or_claims": 66, "schema_or_data": 18, "ui_or_frontend": 102, "source_or_other": 234}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#10\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#10\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#10\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 10\nGraph consistency label: assumption_check\nNodes: 105\nEdges: 164\nNode types: {'pr_file': 83, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 83, 'comment_chain_touches_file': 36, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 39, 'ui_or_frontend': 17, 'docs_or_claims': 11, 'test_or_ci': 11, 'not_resolved_or_not_observed': 5, 'schema_or_data': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_disagreement': 3, 'data_schema_persistence': 2, 'api_or_backend': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-69bfc31d357f5a60", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404280, "scanner": "foundry_dataset", "fingerprint": "9e0f918c74cd21a5a6ee29601686647136aeccce8c46005374cb19eac8eebc27", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"test_or_ci": 11, "test_ci_gap": 1, "api_or_backend": 1, "docs_or_claims": 3, "schema_or_data": 2, "source_or_other": 15, "api_integration_gap": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 113, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 32, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 54, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 32, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#9", "issue_number": "9", "quality_tiers": {"unresolved": 5, "assumption_check": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-a8e23005d1403969", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 66, "api_or_backend": 6, "docs_or_claims": 18, "schema_or_data": 12, "source_or_other": 90}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 9\nGraph consistency label: assumption_check\nNodes: 54\nEdges: 113\nNode types: {'pr_file': 32, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 32, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 15, 'test_or_ci': 11, 'not_resolved_or_not_observed': 5, 'docs_or_claims': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_disagreement': 3, 'schema_or_data': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 3}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-bd32312599d35d38", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404279, "scanner": "foundry_dataset", "fingerprint": "7859f859bbc513283b35db43d1c20dd04a16119c644c3952cd2729a3b7060a0b", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 3, "docs_or_claims": 1, "api_integration_gap": 2, "verification_or_tests": 2, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 43, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 28, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 1, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#8", "issue_number": "8", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-57183e89f846482e", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"docs_or_claims": 6}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#8\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 8\nGraph consistency label: supported_by_verification_signal\nNodes: 28\nEdges: 43\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'comment_chain_touches_file': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'api_integration_gap': 2, 'verification_or_tests': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-6ff4b3683b20992a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404278, "scanner": "foundry_dataset", "fingerprint": "ef2fa6f888cb1ae96bd461d4676bdd8b25c2d977be4d09b6474327c3bef83bf1", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 2, "data_schema": 2, "ui_or_frontend": 2, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 2, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 48, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 2, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 29, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 2, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#7", "issue_number": "7", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-0a8c1186b7bcb9de", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"ui_or_frontend": 12}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#7\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#7\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#7\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 7\nGraph consistency label: supported_by_verification_signal\nNodes: 29\nEdges: 48\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'chain_has_link_quality': 8, 'comment_chain_touches_file': 6, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'blueprint_human_gap_disagreement': 3, 'data_schema_persistence': 2, 'ui_or_frontend': 2, 'data_schema': 2, 'bug_fix': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-a16f63c49aac74ef", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404277, "scanner": "foundry_dataset", "fingerprint": "666e7dad0d3068e6d00ee02f4ac4316ad4843db583ea67f01d67126dc776f3f0", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 3, "data_schema": 1, "source_or_other": 1, "ci_success_signal": 1, "api_integration_gap": 1, "dependency_or_build": 2, "verification_or_tests": 1, "data_schema_persistence": 2, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {"ci_success_signal": 2}, "synthetic": false, "edge_count": 54, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 3, "comment_chain_has_ci": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 9, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 31, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 3, "alignment": 3, "ci_summary": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#6", "issue_number": "6", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-af1912ad214868dd", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"source_or_other": 6, "dependency_or_build": 12}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#6\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#6\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#6\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 6\nGraph consistency label: supported_by_verification_signal\nNodes: 31\nEdges: 54\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'pr_file': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'ci_summary': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 9, 'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_touches_file': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'issue_chain_touches_file': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'comment_chain_has_ci': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'data_schema_persistence': 2, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'source_or_other': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1, 'ci_success_signal': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {'ci_success_signal': 2}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-e0bc1b5ba109673b", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404276, "scanner": "foundry_dataset", "fingerprint": "30153386871011f7a350e5dab1ca2c533249a7248ca3f9dbb38134f2da946e19", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 3, "test_ci_gap": 1, "api_or_backend": 1, "ui_or_frontend": 1, "source_or_other": 5, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 72, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 7, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 7, "thread_has_comment_chain": 3, "comment_chain_links_commit": 4, "comment_chain_touches_file": 21, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 33, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 3, "pr_file": 7, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#5", "issue_number": "5", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-840623e9d9df4846", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 6, "ui_or_frontend": 6, "source_or_other": 30}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#5\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#5\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#5\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 5\nGraph consistency label: supported_by_verification_signal\nNodes: 33\nEdges: 72\nNode types: {'link_quality': 8, 'pr_file': 7, 'commit': 4, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 21, 'chain_has_link_quality': 8, 'thread_touches_file': 7, 'issue_chain_touches_file': 7, 'comment_chain_links_commit': 4, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 5, 'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'ui_or_frontend': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-dbcc0f926ff49833", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404275, "scanner": "foundry_dataset", "fingerprint": "bed7f7e5136e19d8f4d3168718a50df5da952e47880e9b04e3fc3be7b791b83c", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 4, "api_or_backend": 1, "ui_or_frontend": 1, "source_or_other": 1, "ci_success_signal": 1, "api_integration_gap": 2, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {"ci_success_signal": 2}, "synthetic": false, "edge_count": 54, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 3, "comment_chain_has_ci": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 9, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 31, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 3, "alignment": 3, "ci_summary": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#4", "issue_number": "4", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-f7bc5ca1328fb2aa", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 6, "ui_or_frontend": 6, "source_or_other": 6}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#4\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#4\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#4\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 4\nGraph consistency label: supported_by_verification_signal\nNodes: 31\nEdges: 54\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'pr_file': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'ci_summary': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 9, 'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_touches_file': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'issue_chain_touches_file': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'comment_chain_has_ci': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'bug_fix': 4, 'not_resolved_or_not_observed': 4, 'blueprint_human_gap_disagreement': 3, 'api_integration_gap': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'source_or_other': 1, 'api_or_backend': 1, 'ui_or_frontend': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'ci_success_signal': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {'ci_success_signal': 2}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-8e2caba088f96a47", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404274, "scanner": "foundry_dataset", "fingerprint": "9ba831c2e988422dc92e45b9f098b9a8c891f721dee74ae0849265607a49618f", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"keys": ["source_or_other", "ui_or_frontend", "docs_or_claims", "test_or_ci", "verification_or_tests", "claimed_resolved_with_verification_signal", "schema_or_data", "api_or_backend", "human_reported_issue_then_verified_fix_attempt", "bug_fix", "comment_has_related_commit_context", "ambiguous_needs_more_evidence", "thread_has_human_issue_and_fix_context", "blueprint_human_gap_disagreement", "issue_or_pull_request_thread", "runtime_failure", "api_integration_gap", "data_schema_persistence", "deployment_env_gap", "docs_or_chore", "mostly follows blueprint"], "count": 21, "_omitted": "large_dict"}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"ambiguous_needs_more_evidence": 4, "claimed_resolved_with_verification_signal": 8}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 188, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 4, "thread_touches_file": 80, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 8, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_links_commit": 14, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 110, "node_types": {"repo": 1, "commit": 7, "thread": 1, "comment": 4, "pr_file": 80, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 4, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#3", "issue_number": "3", "quality_tiers": {"assumption_check": 2, "weak_supervision": 6}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-db8854fda680a4fe", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"test_or_ci": 77, "api_or_backend": 14, "docs_or_claims": 77, "schema_or_data": 21, "ui_or_frontend": 98, "source_or_other": 273}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#3\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#3\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#3\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 3\nGraph consistency label: supported_by_verification_signal\nNodes: 110\nEdges: 188\nNode types: {'pr_file': 80, 'link_quality': 8, 'commit': 7, 'comment': 4, 'comment_chain': 4, 'alignment': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 80, 'comment_chain_touches_file': 48, 'comment_chain_links_commit': 14, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment': 4, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 39, 'ui_or_frontend': 14, 'docs_or_claims': 11, 'test_or_ci': 11, 'verification_or_tests': 4, 'claimed_resolved_with_verification_signal': 4, 'schema_or_data': 3, 'api_or_backend': 2, 'human_reported_issue_then_verified_fix_attempt': 2, 'bug_fix': 2, 'comment_has_related_commit_context': 2, 'ambiguous_needs_more_evidence': 2, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'issue_or_pull_request_thread': 1, 'runtime_failure': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 8, 'ambiguous_needs_more_evidence': 4}\nQuality tiers: {'weak_supervision': 6, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-54b0cec81ba3147b", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404273, "scanner": "foundry_dataset", "fingerprint": "8920d6e3a49a02ac09ee49f1e3661de23fa5b0352cbbb8ee7376f252a430592f", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 5, "test_ci_gap": 2, "api_or_backend": 2, "docs_or_claims": 1, "ui_or_frontend": 6, "source_or_other": 8, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 4, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 6, "human_reported_issue_then_verified_fix_attempt": 4}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"claimed_resolved_with_verification_signal": 12}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 133, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 3, "thread_touches_file": 17, "thread_has_pr_review": 1, "alignment_uses_comment": 4, "alignment_uses_finding": 4, "chain_has_link_quality": 10, "comment_aligns_finding": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_links_commit": 14, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 50, "node_types": {"repo": 1, "commit": 6, "thread": 1, "comment": 3, "pr_file": 17, "alignment": 4, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 10, "comment_chain": 4, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#2", "issue_number": "2", "quality_tiers": {"high_confidence": 4, "assumption_check": 4, "weak_supervision": 2}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-a4c01c36e8f49166", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 14, "docs_or_claims": 7, "ui_or_frontend": 42, "source_or_other": 56}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#2\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#2\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#2\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 2\nGraph consistency label: supported_by_verification_signal\nNodes: 50\nEdges: 133\nNode types: {'pr_file': 17, 'link_quality': 10, 'commit': 6, 'comment_chain': 4, 'alignment': 4, 'comment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 48, 'thread_touches_file': 17, 'comment_chain_links_commit': 14, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 10, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'alignment_uses_comment': 4, 'alignment_uses_finding': 4, 'comment_aligns_finding': 4, 'thread_has_comment': 3, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'source_or_other': 8, 'ui_or_frontend': 6, 'claimed_resolved_with_verification_signal': 6, 'bug_fix': 5, 'human_reported_issue_then_verified_fix_attempt': 4, 'blueprint_human_gap_disagreement': 4, 'test_ci_gap': 2, 'api_or_backend': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'docs_or_claims': 1, 'verification_or_tests': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 12}\nQuality tiers: {'high_confidence': 4, 'assumption_check': 4, 'weak_supervision': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-b1f459de94aa4bc6", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404272, "scanner": "foundry_dataset", "fingerprint": "3498b6a679bbd3013166b90bb508e9aab72a91aa56382a4ee3cec0e4d9e5d4c7", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"test_or_ci": 11, "api_or_backend": 2, "docs_or_claims": 11, "schema_or_data": 3, "ui_or_frontend": 17, "source_or_other": 39, "api_integration_gap": 1, "data_schema_persistence": 2, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 164, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 83, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 105, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 83, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#10", "issue_number": "10", "quality_tiers": {"unresolved": 5, "assumption_check": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-f54a8c19aeb04f98", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 66, "api_or_backend": 12, "docs_or_claims": 66, "schema_or_data": 18, "ui_or_frontend": 102, "source_or_other": 234}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#10\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#10\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#10\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 10\nGraph consistency label: assumption_check\nNodes: 105\nEdges: 164\nNode types: {'pr_file': 83, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 83, 'comment_chain_touches_file': 36, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 39, 'ui_or_frontend': 17, 'docs_or_claims': 11, 'test_or_ci': 11, 'not_resolved_or_not_observed': 5, 'schema_or_data': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_disagreement': 3, 'data_schema_persistence': 2, 'api_or_backend': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 3}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-a33f041a33577dc3", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 404271, "scanner": "foundry_dataset", "fingerprint": "b697a855dd5b1acea3ec9425b0c8c5a4a8a6bf671d5bde1e23c8f601b09c9257", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 1, "api_or_backend": 1, "ui_or_frontend": 8, "deployment_env_gap": 1, "api_integration_gap": 1, "verification_or_tests": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 4, "human_reported_issue_then_verified_fix_attempt": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"claimed_resolved_with_verification_signal": 8}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 60, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 9, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 5, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 9, "thread_has_comment_chain": 2, "comment_chain_links_commit": 4, "comment_chain_touches_file": 18, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 26, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "pr_file": 9, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#1", "issue_number": "1", "quality_tiers": {"assumption_check": 1, "weak_supervision": 4}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-e36d68e07fbb8857", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 5, "ui_or_frontend": 40}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#1\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#1\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 1\nGraph consistency label: supported_by_verification_signal\nNodes: 26\nEdges: 60\nNode types: {'pr_file': 9, 'link_quality': 5, 'comment': 2, 'comment_chain': 2, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 18, 'thread_touches_file': 9, 'issue_chain_touches_file': 9, 'chain_has_link_quality': 5, 'comment_chain_links_commit': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'ui_or_frontend': 8, 'claimed_resolved_with_verification_signal': 4, 'human_reported_issue_then_verified_fix_attempt': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'deployment_env_gap': 1, 'api_or_backend': 1, 'bug_fix': 1, 'verification_or_tests': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 8}\nQuality tiers: {'weak_supervision': 4, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-9dd1a2c5ba49a82b", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 420350, "scanner": "foundry_dataset", "fingerprint": "2e788f2997a02197690e7b76fd8663403836a9a44fc22fda501f1ae69657f75b", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_or_ci": 11, "test_ci_gap": 1, "api_or_backend": 1, "docs_or_claims": 3, "schema_or_data": 2, "source_or_other": 15, "api_integration_gap": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 113, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 32, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 54, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 32, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#9", "issue_number": "9", "quality_tiers": {"unresolved": 5, "assumption_check": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-0fcd640de10604a7", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 66, "api_or_backend": 6, "docs_or_claims": 18, "schema_or_data": 12, "source_or_other": 90}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 9\nGraph consistency label: assumption_check\nNodes: 54\nEdges: 113\nNode types: {'pr_file': 32, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 32, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 15, 'test_or_ci': 11, 'not_resolved_or_not_observed': 5, 'docs_or_claims': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_disagreement': 3, 'schema_or_data': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 3}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-26d4674b047f2fee", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 420349, "scanner": "foundry_dataset", "fingerprint": "3c8dc42cb59514bd4f42dd399e2ad5780e45594a6135d1d59340f478db345043", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"bug_fix": 3, "test_ci_gap": 1, "api_or_backend": 1, "ui_or_frontend": 1, "source_or_other": 5, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 72, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 7, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 7, "thread_has_comment_chain": 3, "comment_chain_links_commit": 4, "comment_chain_touches_file": 21, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 33, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 3, "pr_file": 7, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#5", "issue_number": "5", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-f401793eacd67532", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 6, "ui_or_frontend": 6, "source_or_other": 30}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#5\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#5\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#5\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 5\nGraph consistency label: supported_by_verification_signal\nNodes: 33\nEdges: 72\nNode types: {'link_quality': 8, 'pr_file': 7, 'commit': 4, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 21, 'chain_has_link_quality': 8, 'thread_touches_file': 7, 'issue_chain_touches_file': 7, 'comment_chain_links_commit': 4, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 5, 'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'ui_or_frontend': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-f5aa62a842b24427", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 420348, "scanner": "foundry_dataset", "fingerprint": "a0607a5e57f4ba62b3352bd2cb7a7c83a9b7e09bc6b729effdac9d28aec2e237", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"bug_fix": 5, "test_ci_gap": 2, "api_or_backend": 2, "docs_or_claims": 1, "ui_or_frontend": 6, "source_or_other": 8, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 4, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 6, "human_reported_issue_then_verified_fix_attempt": 4}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"claimed_resolved_with_verification_signal": 12}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 133, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 3, "thread_touches_file": 17, "thread_has_pr_review": 1, "alignment_uses_comment": 4, "alignment_uses_finding": 4, "chain_has_link_quality": 10, "comment_aligns_finding": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_links_commit": 14, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 50, "node_types": {"repo": 1, "commit": 6, "thread": 1, "comment": 3, "pr_file": 17, "alignment": 4, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 10, "comment_chain": 4, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#2", "issue_number": "2", "quality_tiers": {"high_confidence": 4, "assumption_check": 4, "weak_supervision": 2}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-b9a69d3771f462c4", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 14, "docs_or_claims": 7, "ui_or_frontend": 42, "source_or_other": 56}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#2\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#2\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#2\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 2\nGraph consistency label: supported_by_verification_signal\nNodes: 50\nEdges: 133\nNode types: {'pr_file': 17, 'link_quality': 10, 'commit': 6, 'comment_chain': 4, 'alignment': 4, 'comment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 48, 'thread_touches_file': 17, 'comment_chain_links_commit': 14, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 10, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'alignment_uses_comment': 4, 'alignment_uses_finding': 4, 'comment_aligns_finding': 4, 'thread_has_comment': 3, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'source_or_other': 8, 'ui_or_frontend': 6, 'claimed_resolved_with_verification_signal': 6, 'bug_fix': 5, 'human_reported_issue_then_verified_fix_attempt': 4, 'blueprint_human_gap_disagreement': 4, 'test_ci_gap': 2, 'api_or_backend': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'docs_or_claims': 1, 'verification_or_tests': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 12}\nQuality tiers: {'high_confidence': 4, 'assumption_check': 4, 'weak_supervision': 2}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-331dddb83b9b8bca", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 411256, "scanner": "foundry_dataset", "fingerprint": "1c8838b21d93c79b0059f1cec076a5ea645a59e6f73d4bfbea72aba9df1c5c11", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"test_or_ci": 11, "test_ci_gap": 1, "api_or_backend": 1, "docs_or_claims": 3, "schema_or_data": 2, "source_or_other": 15, "api_integration_gap": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 113, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 32, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 54, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 32, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#9", "issue_number": "9", "quality_tiers": {"unresolved": 5, "assumption_check": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-a3792b9ab0eea064", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 66, "api_or_backend": 6, "docs_or_claims": 18, "schema_or_data": 12, "source_or_other": 90}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 9\nGraph consistency label: assumption_check\nNodes: 54\nEdges: 113\nNode types: {'pr_file': 32, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 32, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 15, 'test_or_ci': 11, 'not_resolved_or_not_observed': 5, 'docs_or_claims': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_disagreement': 3, 'schema_or_data': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-40d85060da7fc30d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 411255, "scanner": "foundry_dataset", "fingerprint": "00d2881e29924b0ac1fe22ded41c7c447352edecd91be1159b4227926db88d25", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"bug_fix": 3, "docs_or_claims": 1, "api_integration_gap": 2, "verification_or_tests": 2, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 43, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 28, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 1, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#8", "issue_number": "8", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-82f1497d5bc9e417", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"docs_or_claims": 6}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#8\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 8\nGraph consistency label: supported_by_verification_signal\nNodes: 28\nEdges: 43\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'comment_chain_touches_file': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'api_integration_gap': 2, 'verification_or_tests': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-c5c94b0885203337", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 411254, "scanner": "foundry_dataset", "fingerprint": "165ccf458d05202e62b843acba5f891bf98b87cd5b888b80ad6b36ddf4e2f30b", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"bug_fix": 2, "data_schema": 2, "ui_or_frontend": 2, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 2, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 48, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 2, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 29, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 2, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#7", "issue_number": "7", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-642e62a28741660b", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"ui_or_frontend": 12}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#7\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#7\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#7\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 7\nGraph consistency label: supported_by_verification_signal\nNodes: 29\nEdges: 48\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'chain_has_link_quality': 8, 'comment_chain_touches_file': 6, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'blueprint_human_gap_disagreement': 3, 'data_schema_persistence': 2, 'ui_or_frontend': 2, 'data_schema': 2, 'bug_fix': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-92107df93e60eca7", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 411253, "scanner": "foundry_dataset", "fingerprint": "2f41565da1e1054d11724e016c6742b3e46358217a8a2e1c9aa2dc1b77f2ef7e", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"bug_fix": 3, "data_schema": 1, "source_or_other": 1, "ci_success_signal": 1, "api_integration_gap": 1, "dependency_or_build": 2, "verification_or_tests": 1, "data_schema_persistence": 2, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {"ci_success_signal": 2}, "synthetic": false, "edge_count": 54, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 3, "comment_chain_has_ci": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 9, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 31, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 3, "alignment": 3, "ci_summary": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#6", "issue_number": "6", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-ac6996fbb14d8b93", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"source_or_other": 6, "dependency_or_build": 12}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#6\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#6\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#6\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 6\nGraph consistency label: supported_by_verification_signal\nNodes: 31\nEdges: 54\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'pr_file': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'ci_summary': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 9, 'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_touches_file': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'issue_chain_touches_file': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'comment_chain_has_ci': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'data_schema_persistence': 2, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'source_or_other': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1, 'ci_success_signal': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {'ci_success_signal': 2}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-91d0c782cdfc501d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 411252, "scanner": "foundry_dataset", "fingerprint": "e57bd7922ab92db1b64e232d974a8f5536b56a060e6dcfea4929b4337adc8a6c", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"bug_fix": 3, "test_ci_gap": 1, "api_or_backend": 1, "ui_or_frontend": 1, "source_or_other": 5, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 72, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 7, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 7, "thread_has_comment_chain": 3, "comment_chain_links_commit": 4, "comment_chain_touches_file": 21, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 33, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 3, "pr_file": 7, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#5", "issue_number": "5", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-42e7baf2a697ac7c", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 6, "ui_or_frontend": 6, "source_or_other": 30}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#5\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#5\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#5\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 5\nGraph consistency label: supported_by_verification_signal\nNodes: 33\nEdges: 72\nNode types: {'link_quality': 8, 'pr_file': 7, 'commit': 4, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 21, 'chain_has_link_quality': 8, 'thread_touches_file': 7, 'issue_chain_touches_file': 7, 'comment_chain_links_commit': 4, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 5, 'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'ui_or_frontend': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-a0d6f41f57546657", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 411251, "scanner": "foundry_dataset", "fingerprint": "e53a1d05e601ec843adc6c7fa003faa7f3e45b5504f57b11550035c6a8d07f7d", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"bug_fix": 4, "api_or_backend": 1, "ui_or_frontend": 1, "source_or_other": 1, "ci_success_signal": 1, "api_integration_gap": 2, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {"ci_success_signal": 2}, "synthetic": false, "edge_count": 54, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 3, "comment_chain_has_ci": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 9, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 31, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 3, "alignment": 3, "ci_summary": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#4", "issue_number": "4", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-9a0e9f1af1ff0c0e", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 6, "ui_or_frontend": 6, "source_or_other": 6}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#4\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#4\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#4\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 4\nGraph consistency label: supported_by_verification_signal\nNodes: 31\nEdges: 54\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'pr_file': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'ci_summary': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 9, 'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_touches_file': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'issue_chain_touches_file': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'comment_chain_has_ci': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'bug_fix': 4, 'not_resolved_or_not_observed': 4, 'blueprint_human_gap_disagreement': 3, 'api_integration_gap': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'source_or_other': 1, 'api_or_backend': 1, 'ui_or_frontend': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'ci_success_signal': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {'ci_success_signal': 2}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-5fc1d8deee7b4b63", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 411250, "scanner": "foundry_dataset", "fingerprint": "e428f8143fc96d7950b481e5cf9c40a1f3cef5c4e0aa902645895a9fed0186ea", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"keys": ["source_or_other", "ui_or_frontend", "docs_or_claims", "test_or_ci", "verification_or_tests", "claimed_resolved_with_verification_signal", "schema_or_data", "api_or_backend", "human_reported_issue_then_verified_fix_attempt", "bug_fix", "comment_has_related_commit_context", "ambiguous_needs_more_evidence", "thread_has_human_issue_and_fix_context", "blueprint_human_gap_disagreement", "issue_or_pull_request_thread", "runtime_failure", "api_integration_gap", "data_schema_persistence", "deployment_env_gap", "docs_or_chore", "mostly follows blueprint"], "count": 21, "_omitted": "large_dict"}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 4, "claimed_resolved_with_verification_signal": 8}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 188, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 4, "thread_touches_file": 80, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 8, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_links_commit": 14, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 110, "node_types": {"repo": 1, "commit": 7, "thread": 1, "comment": 4, "pr_file": 80, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 4, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#3", "issue_number": "3", "quality_tiers": {"assumption_check": 2, "weak_supervision": 6}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-4b50d1be15bf05d9", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"test_or_ci": 77, "api_or_backend": 14, "docs_or_claims": 77, "schema_or_data": 21, "ui_or_frontend": 98, "source_or_other": 273}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#3\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#3\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#3\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 3\nGraph consistency label: supported_by_verification_signal\nNodes: 110\nEdges: 188\nNode types: {'pr_file': 80, 'link_quality': 8, 'commit': 7, 'comment': 4, 'comment_chain': 4, 'alignment': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 80, 'comment_chain_touches_file': 48, 'comment_chain_links_commit': 14, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment': 4, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 39, 'ui_or_frontend': 14, 'docs_or_claims': 11, 'test_or_ci': 11, 'verification_or_tests': 4, 'claimed_resolved_with_verification_signal': 4, 'schema_or_data': 3, 'api_or_backend': 2, 'human_reported_issue_then_verified_fix_attempt': 2, 'bug_fix': 2, 'comment_has_related_commit_context': 2, 'ambiguous_needs_more_evidence': 2, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'issue_or_pull_request_thread': 1, 'runtime_failure': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 8, 'ambiguous_needs_more_evidence': 4}\nQuality tiers: {'weak_supervision': 6, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-01627bed94d38afa", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 411249, "scanner": "foundry_dataset", "fingerprint": "9ca6fdf42beae7d8ec2f6d0d8c2daa62722a3ac2802e7d9ac091255b0527dccb", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"bug_fix": 5, "test_ci_gap": 2, "api_or_backend": 2, "docs_or_claims": 1, "ui_or_frontend": 6, "source_or_other": 8, "api_integration_gap": 1, "verification_or_tests": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 4, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 6, "human_reported_issue_then_verified_fix_attempt": 4}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_with_verification_signal": 12}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 133, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 3, "thread_touches_file": 17, "thread_has_pr_review": 1, "alignment_uses_comment": 4, "alignment_uses_finding": 4, "chain_has_link_quality": 10, "comment_aligns_finding": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_links_commit": 14, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 50, "node_types": {"repo": 1, "commit": 6, "thread": 1, "comment": 3, "pr_file": 17, "alignment": 4, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 10, "comment_chain": 4, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#2", "issue_number": "2", "quality_tiers": {"high_confidence": 4, "assumption_check": 4, "weak_supervision": 2}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-421959edda054a6c", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 14, "docs_or_claims": 7, "ui_or_frontend": 42, "source_or_other": 56}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#2\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#2\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#2\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 2\nGraph consistency label: supported_by_verification_signal\nNodes: 50\nEdges: 133\nNode types: {'pr_file': 17, 'link_quality': 10, 'commit': 6, 'comment_chain': 4, 'alignment': 4, 'comment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 48, 'thread_touches_file': 17, 'comment_chain_links_commit': 14, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 10, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'alignment_uses_comment': 4, 'alignment_uses_finding': 4, 'comment_aligns_finding': 4, 'thread_has_comment': 3, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'source_or_other': 8, 'ui_or_frontend': 6, 'claimed_resolved_with_verification_signal': 6, 'bug_fix': 5, 'human_reported_issue_then_verified_fix_attempt': 4, 'blueprint_human_gap_disagreement': 4, 'test_ci_gap': 2, 'api_or_backend': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1, 'docs_or_claims': 1, 'verification_or_tests': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 12}\nQuality tiers: {'high_confidence': 4, 'assumption_check': 4, 'weak_supervision': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-338178796b135b16", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 411248, "scanner": "foundry_dataset", "fingerprint": "cb6a27d4aa372d0993418af262fba0fb634a3e421cbd3afd77f23a2d9842ed02", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"test_or_ci": 11, "api_or_backend": 2, "docs_or_claims": 11, "schema_or_data": 3, "ui_or_frontend": 17, "source_or_other": 39, "api_integration_gap": 1, "data_schema_persistence": 2, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 164, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 83, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 105, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 83, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#10", "issue_number": "10", "quality_tiers": {"unresolved": 5, "assumption_check": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-8d61136a028195e6", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 66, "api_or_backend": 12, "docs_or_claims": 66, "schema_or_data": 18, "ui_or_frontend": 102, "source_or_other": 234}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#10\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#10\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#10\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 10\nGraph consistency label: assumption_check\nNodes: 105\nEdges: 164\nNode types: {'pr_file': 83, 'link_quality': 8, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 83, 'comment_chain_touches_file': 36, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 39, 'ui_or_frontend': 17, 'docs_or_claims': 11, 'test_or_ci': 11, 'not_resolved_or_not_observed': 5, 'schema_or_data': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_disagreement': 3, 'data_schema_persistence': 2, 'api_or_backend': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-a8b46913a4f06852", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_docs_only_fix", "level": "error", "message": {"text": "Foundry mined docs only runtime fix: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 406320, "scanner": "foundry_dataset", "fingerprint": "67e314aceb15bd9b5a9d8278e13a0d3cec5a7af771f6e806139532cbcab55c8b", "category": "practices", "severity": "high", "confidence": 0.8, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Docs-only response to runtime or integration issue", "intent": "Assumption-check examples where docs or claims are not enough proof.", "labels": {"bug_fix": 3, "docs_or_claims": 1, "api_integration_gap": 2, "verification_or_tests": 2, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 3, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 1, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "docs_only_runtime_fix", "outcomes": {"not_resolved_or_not_observed": 8, "claimed_resolved_with_verification_signal": 2}, "polarity": "bad", "query_id": "docs_only_runtime_fix", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 43, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 3, "comment_chain_links_commit": 5, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 28, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 3, "pr_file": 1, "alignment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "thomascassidyzm/ssi-dashboard-v7#8", "issue_number": "8", "quality_tiers": {"unresolved": 2, "assumption_check": 3, "weak_supervision": 3}, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-d59d1fd654332e89", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"docs_or_claims": 6}}, "text": "Graph query export: Docs-only response to runtime or integration issue\nQuery id: docs_only_runtime_fix\nQuery type: motif_query\nIntent: Assumption-check examples where docs or claims are not enough proof.\nMotif: docs_only_runtime_fix\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nEvidence:\nGraph motif: Runtime/integration complaint answered mostly with docs or claims\nMotif id: docs_only_runtime_fix\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: thomascassidyzm/ssi-dashboard-v7#8\nRepo: thomascassidyzm/ssi-dashboard-v7\nIssue/PR number: 8\nGraph consistency label: supported_by_verification_signal\nNodes: 28\nEdges: 43\nNode types: {'link_quality': 8, 'commit': 5, 'comment': 3, 'comment_chain': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'chain_has_link_quality': 8, 'comment_chain_links_commit': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'comment_chain_touches_file': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'bug_fix': 3, 'blueprint_human_gap_disagreement': 3, 'api_integration_gap': 2, 'verification_or_tests': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'claimed_resolved_with_verification_signal': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_with_verification_signal': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Train models to reject docs-only fixes for runtime, integration, data, or security failures.\n- Add paired examples where the correct fix changes executable paths and adds verification.\nAssumption checks:\n- Do changed files include executable code or only documentation/claims?\n- Does the complaint require runtime behavior that docs cannot prove?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "graph-query-motif_query-fc33e2f8b108ab5e", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/docs_only_runtime_fix/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "graph_queries/docs_only_runtime_fix", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 391420, "scanner": "foundry_dataset", "fingerprint": "fdc055f1e5ca770e5c21e95e88416423648bbc52bc0ea5734e68a6738b63ece7", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "thomascassidyzm/ssi-dashboard-v7#9", "human_labels": ["api_integration_gap", "api_or_backend", "data_schema_persistence", "docs_or_claims", "schema_or_data", "source_or_other", "test_ci_gap", "test_or_ci"], "issue_number": "9", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-e6396a35a3c6d03a", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 5, "architecture": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 32, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 11, "api_or_backend": 1, "docs_or_claims": 3, "schema_or_data": 2, "source_or_other": 15}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#9\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: thomascassidyzm/ssi-dashboard-v7#9\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 32\nLabels: {'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'schema_or_data': 2, 'docs_or_claims': 3, 'test_or_ci': 11, 'source_or_other': 15, 'api_or_backend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-db9cd63a4b4e76b7\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/9\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: kai-saraceno (User)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/9\\nTitle: Safe content-editing library + Edit Guardian (incident prevention)\\nBody:\\n## Why\\n\\nPrevention work from the **2026-06-17 cross-course LEGO corruption incident** (`docs/incidents/2026-06-17-cross-course-lego-corruption.md`): an ad-hoc `UPDATE course_legos WHERE lego_id = 'S0524L01'` wrote to **79 courses** because `lego_id` is not globally unique. This PR makes that class of write impossible and adds a background guardian that reviews human dashboard edits.\\n\\n## What's here\\n\\n**`services/course-editor/` \u2014 the only sanctioned writer to course-content tables**\\n- **Scoping guard**: every write requires `course_code` + a within-course unique key. The exact incident write is refused at two layers (`assertScope` + a post-SELECT distinct-course check). Field/value allowlists block forbidden columns and garbage values.\\n- **Primitives** (`editor.cjs`): `update`/`remove`/`insert`/`bulkUpdateByPk`/`relinkAudio` with **dry-run**, a **blast-radius circuit-breaker**, and journaling.\\n- **Operations**\"\n  },\n  {\n    \"id\": \"github-feedback-comment-802c6bc7fdb955fa\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/9#issuecomment-4734731393\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/9#issuecomment-4734731393\\nTitle: \\nBody:\\n[vc\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "comment-chain-pattern-bad_chains-33099e2ef4627bef", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 391419, "scanner": "foundry_dataset", "fingerprint": "87e399b8a570c89d1590e41450507dade9ef67668fd77ec1f2c21e129b598a97", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "thomascassidyzm/ssi-dashboard-v7#8", "human_labels": ["api_integration_gap", "data_schema_persistence", "docs_or_claims"], "issue_number": "8", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.662, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-7988b82e5a5907fe", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 5, "architecture": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 1}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#8\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: thomascassidyzm/ssi-dashboard-v7#8\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread label: thread_has_human_issue_and_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'api_integration_gap': 2, 'data_schema_persistence': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'docs_or_claims': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-eade55e0ab0d68b7\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/8\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: thomascassidyzm (User)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/8\\nTitle: docs(ralph-methodology): align with the course-builder code\\nBody:\\nVerify-first update of the **agent-facing** methodology doc against the course-builder (the spec on Tom's Desktop). Markdown \u2014 review the **diff**, not a preview.\\n\\n**2 of the spec's flags were over-flagged** (already correct) and left alone: the doc already teaches explicit `build[]`/`use[]` roles and already points to the eight-principle translation doc.\\n\\n**Genuine fixes:** early-seeds ramp corrected to the enforced 0/0\u21921/1\u21923/5 (the old numbers were wrong); round structure (PRACTICE\u22647, Fibonacci spaced-rep N-1=3/cap12 USE-only, CONSOLIDATE 2); type author-declared + 8-syllable cap as the real size guard; new 'How the API Processes Your Submission' (atomic=validate-then-insert, deterministic IDs, intake normalization/canonical-mismatch); whole-chunk vocab rule + late-course balance check; creator/checker 403 guard; skip_validation = seeds 1-3 only; complexity tiers = warning-only.\\n\\n**One decision for you:\"\n  },\n  {\n    \"id\": \"github-feedback-comment-f2bddf6f87e74753\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/8#issuecomment-4607225173\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/8#issuecomment-4607225173\\nTitle: \\nBody:\\n[vc]: #A9+HjuhA3oyzfn17099eUvyKxBXr9PdkALxUs93MNaQ=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicH\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "comment-chain-pattern-bad_chains-2cf4440272ee9098", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 391418, "scanner": "foundry_dataset", "fingerprint": "d0c51c50533a7f3e0ada8035ef2405b946369086e1e5c0269b6ce1dce6315dc5", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "thomascassidyzm/ssi-dashboard-v7#7", "human_labels": ["api_integration_gap", "data_schema_persistence", "ui_or_frontend"], "issue_number": "7", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.645, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-7fb8d26bd797d09c", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 5, "architecture": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 2}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#7\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: thomascassidyzm/ssi-dashboard-v7#7\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread label: thread_has_human_issue_and_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'data_schema_persistence': 2, 'api_integration_gap': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'ui_or_frontend': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ac8b33d265ef5fc6\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/7\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: thomascassidyzm (User)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/7\\nTitle: docs: re-author Glossary + Pedagogy from the course-builder (v11\u2192v14)\\nBody:\\nRe-authors the two published methodology pages to match what the **course-builder actually does** \u2014 reverse-engineered from a deep interrogation of `services/course-builder/` (seed-complete, validation, phrase-structure), cited in the spec on Tom's Desktop.\\n\\n## Review these two rendered pages on the Vercel preview\\n- **/docs/terminology** \u2014 full v11\u2192v14 re-author\\n- **/docs/pedagogy** \u2014 phrase-model rewrite\\n\\n## What changed\\n**Glossary:** seed \u2192 LEGOs \u2192 component/build/use (was SEED_PAIRS/LEGO_PAIRS/LEGO_BASKETS) \u00b7 Supabase tables (was JSON/audio_samples) \u00b7 Course Builder 3471 / Production API 3470 / Phase 8/9 named passes (no Phase 1/2/3) \u00b7 A=single word, M=multi-word+components \u00b7 8-syllable cap \u00b7 deterministic IDs (C/B/U) \u00b7 ZUT + upchunk/synonym/overlap \u00b7 tiling \u00b7 vocab constraint \u00b7 Fibonacci spaced rep (USE-only). Kept BASE/COMPOSITE/LUT/FEEDER as 'recognise, then drop'.\\n\\n**Pedagogy:** BUILD\"\n  },\n  {\n    \"id\": \"github-feedback-comment-0c5b47b0911d56ec\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/7#issuecomment-4607087000\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/7#issuecomment-4607087000\\nTitle: \\nBody:\\n[vc]: #QC0AWFfSzwi4WR5y5bW0bbs8EHtWRD/vfXPzHkn8sUY=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHV\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "comment-chain-pattern-bad_chains-b29ce1b7ef77b603", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 391417, "scanner": "foundry_dataset", "fingerprint": "60a1aa8600ac852e1a1f437cf2f64514abf09e411798433d56cf3465de5cf450", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "thomascassidyzm/ssi-dashboard-v7#6", "human_labels": ["api_integration_gap", "data_schema_persistence", "dependency_or_build", "source_or_other"], "issue_number": "6", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.67, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-0b04aa9f7380b9e0", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 5, "architecture": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"source_or_other": 1, "dependency_or_build": 2}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 1, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#6\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: thomascassidyzm/ssi-dashboard-v7#6\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread label: thread_has_human_issue_and_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 5\nLinked CI commit count: 1\nLinked CI labels: {'ci_success_signal': 1}\nChanged file count: 3\nLabels: {'data_schema_persistence': 2, 'api_integration_gap': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'dependency_or_build': 2, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-702bda2354ce7c32\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/6\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: thomascassidyzm (User)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/6\\nTitle: fix(archive-audit-log): handle million-row incident days (id-cursor + temp-file multipart)\\nBody:\\n## Why\\nThe audit-log archiver was built for steady-state nightly volumes and **breaks on any large/bulk day** \u2014 which is exactly the awol-bulk-delete incident it exists to let us roll back. Found while reclaiming the 10 GB `content_audit_log` backlog.\\n\\nThree bugs, all triggered by a high-volume day:\\n1. **Under-read:** the time-window fetch bisected and capped at 1000 rows per <30s slice, so same-instant bursts were silently dropped (read **205k of a ~962k day**).\\n2. **OOM risk:** it loaded a whole day into memory (a 3.67M-row incident day would blow up).\\n3. **Upload EPIPE:** a single `PutObject` of the large object broke on a flaky uplink.\\n\\n## What\\n- **id-cursor pagination** \u2014 reads every row, verified against live data (exact per-table counts on a 33,835-row day).\\n- **stream to a gzip temp file on disk during the fetch, upload the finished file after** \u2014 no whole-day-in\"\n  },\n  {\n    \"id\": \"github-feedback-comment-40239041c2f37641\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/6#issuecomment-4604955507\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/6#issuecomment-4604955507\\nTitle: \\nBody:\\n[vc]: #JT8mab6JotY+EuyNh6zdU0kThvxHcnd6rtJeiy\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "comment-chain-pattern-bad_chains-1f389ea6c6d666d8", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 391416, "scanner": "foundry_dataset", "fingerprint": "b9d5fee35399ee777625f77aecda392668aa1b74b4b1afc4bc7d40703f278420", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "thomascassidyzm/ssi-dashboard-v7#5", "human_labels": ["api_integration_gap", "api_or_backend", "data_schema_persistence", "source_or_other", "test_ci_gap", "ui_or_frontend"], "issue_number": "5", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.65, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-b02c97c9adb8587f", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 5, "architecture": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 7, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "ui_or_frontend": 1, "source_or_other": 5}, "linked_commit_count": 4, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#5\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: thomascassidyzm/ssi-dashboard-v7#5\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread label: thread_has_human_issue_and_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 4\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 7\nLabels: {'test_ci_gap': 1, 'api_integration_gap': 1, 'data_schema_persistence': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'source_or_other': 5, 'api_or_backend': 1, 'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-589ff64f32df4ed6\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/5\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: kai-saraceno (User)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/5\\nTitle: MP3 iOS encoding fix: ffmpeg\u2192lame on all encode paths + verify-s3 format check\\nBody:\\nIsolated from the larger `feature/mp3-lame-encoding-fix` branch (PR #3) \u2014 this PR contains **only** the MP3/iOS encoding fix, so it can ship to main without the build-team / dashboard / export-workflow changes.\\n\\n## Commits (cherry-picked clean from PR #3)\\n- **8a43904d** \u2014 new `ffmpegFilterToLameMp3` helper; swap every encode site in `audio-processor.cjs` + `generate-legacy-manifest.cjs` from ffmpeg's MP3 muxer to a real `lame` pipe. Fixes the ID3v2 / `Lavf` headers that break iOS/AVPlayer.\\n- **99ae22a8** \u2014 add MP3 format check (`checkMp3Format`: ID3v2 / LAME encoder) to verify-s3 Step 2, so bad encodes are caught before publish.\\n- **32baf4dc** \u2014 route `spliceAudio` (the component splicer, `/splice-components`) through the lame pipe too \u2014 the one encode path 8a43904d had deferred \u2014 via sample-accurate `atrim`, no loudnorm.\\n\\n## Why isolate\\nThe buggy splicer plus any service running pre-fix code keep\"\n  },\n  {\n    \"id\": \"github-feedback-comment-637138cced405160\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/5#issuecomment-4576561716\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/5#issuecomment-4576561716\\nTitle: \\nBody:\\n[vc]: #vEYboe4iQgMZ5OrkskQqJEtHxUNSFJ5yxnp/EZFk\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "comment-chain-pattern-bad_chains-df0aef180f57990e", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 391415, "scanner": "foundry_dataset", "fingerprint": "565371a4aa38113f368e18f2cf59777c8194df1a50b9ccbdc683f021c227b781", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "thomascassidyzm/ssi-dashboard-v7#4", "human_labels": ["api_integration_gap", "api_or_backend", "data_schema_persistence", "source_or_other", "ui_or_frontend"], "issue_number": "4", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.67, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-c2fc18670c0eba3a", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 5, "architecture": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "ui_or_frontend": 1, "source_or_other": 1}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 1, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#4\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: thomascassidyzm/ssi-dashboard-v7#4\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread label: thread_has_human_issue_and_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 5\nLinked CI commit count: 1\nLinked CI labels: {'ci_success_signal': 1}\nChanged file count: 3\nLabels: {'api_integration_gap': 2, 'data_schema_persistence': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'source_or_other': 1, 'api_or_backend': 1, 'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-e1ce426b77d41ac6\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/4\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: kai-saraceno (User)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/4\\nTitle: build-team: respect MVP/Full selection through to orchestrator brief\\nBody:\\n## Summary\\n- When the Full toggle (668 seeds) was selected on the dashboard and Build clicked, the orchestrator was still being told to target 300 seeds. The body field got dropped between the frontend and the brief URL, and the brief generator defaulted to 300 anyway.\\n- Three-layer bug:\\n  1. `TextGeneration.vue` `startBuildTeam` sent no body\\n  2. `/api/build/team-start` ignored `req.body.targetSeeds` and hardcoded `total_seeds: 300` in `build_jobs`\\n  3. The `build-team-orchestrator` brief defaulted to 300 when no `?target=` was on the URL\\n- Result: the orchestrator brief said \\\"Target: 300 seeds total\\\" no matter what the user picked.\\n\\n## Changes\\n- `src/views/production/TextGeneration.vue` \u2014 `startBuildTeam` now sends `{ targetSeeds: seedCount.value }`.\\n- `services/course-builder/routes/build.cjs` `/build/team-start` \u2014 reads `body.targetSeeds`, persists it to `courses.seed_count` when changed (so sta\"\n  },\n  {\n    \"id\": \"github-feedback-comment-0894e4153ae91901\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/4#issuecomment-4523310621\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/4#issuecomment-4523310621\\nTitle: \\nBody:\\n[vc]: #Rxy5LkzKa0WG+N6+AhpYFBRs\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "comment-chain-pattern-bad_chains-030ecda0f78505d3", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: thomascassidyzm/ssi-dashboard-v7"}, "properties": {"repobilityId": 391414, "scanner": "foundry_dataset", "fingerprint": "2e8060e34e98a68764d4bf10744aa9f21b7ca8611c0585c50ecb19977476faec", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "thomascassidyzm/ssi-dashboard-v7#10", "human_labels": ["api_integration_gap", "api_or_backend", "data_schema_persistence", "docs_or_claims", "schema_or_data", "source_or_other", "test_or_ci", "ui_or_frontend"], "issue_number": "10", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-225fa6994e0234d3", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 5, "architecture": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 83, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 11, "api_or_backend": 2, "docs_or_claims": 11, "schema_or_data": 3, "ui_or_frontend": 17, "source_or_other": 39}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread: thomascassidyzm/ssi-dashboard-v7#10\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: thomascassidyzm/ssi-dashboard-v7#10\nRepo: thomascassidyzm/ssi-dashboard-v7\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 83\nLabels: {'data_schema_persistence': 2, 'api_integration_gap': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'docs_or_claims': 11, 'schema_or_data': 3, 'source_or_other': 39, 'api_or_backend': 2, 'test_or_ci': 11, 'ui_or_frontend': 17}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7c9a43892aa34a43\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/10\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: kai-saraceno (User)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/10\\nTitle: kai-stage \u2192 main (working-branch integration; replaces #3)\\nBody:\\nIntegration PR from **kai-stage** \u2014 Kai's working branch \u2014 to `main`. This replaces the previous PR #3 (auto-closed when the branch was renamed `feature/mp3-lame-encoding-fix` \u2192 `kai-stage`).\\n\\nThis is Kai's \\\"just work and fix as I go\\\" staging branch: he keeps committing here, and batches of good/tested work land on `main` through this PR.\\n\\n## Themes in this batch\\n- **Audio / phase8**: background audio job queue (`audio-job-queue.cjs`, `wait-for-phase8-job.cjs`), qmark-aware audio linking, phase8 + TTS updates, AudioPipeline UI.\\n- **Translation / briefs**: reference-example driven translation improvements.\\n- **Language config / codes**: language-code-service, course-builder language config, `language_codes.csv`.\\n- **Manifest / export + dashboard UI**: manifest-diff, Step3 publish, course view tweaks.\\n- **scan-course** skill checks + deploy/recording working docs.\\n- **Edit Guardian + course-editor library*\"\n  },\n  {\n    \"id\": \"github-feedback-comment-6ecb3ccb8bdf4e41\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/10#issuecomment-4734975553\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: thomascassidyzm/ssi-dashboard-v7\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/thomascassidyzm/ssi-dashboard-v7/pull/10#issuecomment-473497\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/thomascassidyzm/ssi-dashboard-v7", "source_id": "comment-chain-pattern-bad_chains-44cc7c1511199293", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "thomascassidyzm/ssi-dashboard-v7", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "scanner-87e27ab3f21b4b1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 vite.config.js:37"}, "properties": {"repobilityId": "71d9ca087513828f", "scanner": "scanner-primary", "fingerprint": "87e27ab3f21b4b1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2668e8149d23af4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apml/compiler/src/index.ts:23"}, "properties": {"repobilityId": "5b718488008a0f55", "scanner": "scanner-primary", "fingerprint": "c2668e8149d23af4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6938cf0701c7c475", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apml/compiler/src/generator/vue-generator.ts:237"}, "properties": {"repobilityId": "529a8a2f5d724947", "scanner": "scanner-primary", "fingerprint": "6938cf0701c7c475", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4b8433e8dab1f921", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apml/compiler/src/generator/vue-generator.ts:875"}, "properties": {"repobilityId": "586dceb775439565", "scanner": "scanner-primary", "fingerprint": "4b8433e8dab1f921", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c188e152ead34084", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apml/compiler/src/parser/parser.ts:128"}, "properties": {"repobilityId": "6e84abf95ef9cdf6", "scanner": "scanner-primary", "fingerprint": "c188e152ead34084", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-33737cb4378ef56f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/invite.js:108"}, "properties": {"repobilityId": "6808f73e7ada92b7", "scanner": "scanner-primary", "fingerprint": "33737cb4378ef56f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-16819a19627155e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/login.js:31"}, "properties": {"repobilityId": "b7ce1cad96bcdb6e", "scanner": "scanner-primary", "fingerprint": "16819a19627155e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8edbf60e98937b7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/users.js:111"}, "properties": {"repobilityId": "33efef5d2f7ad94f", "scanner": "scanner-primary", "fingerprint": "8edbf60e98937b7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e095693a84c24963", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 api/auth/request-link.js:26"}, "properties": {"repobilityId": "c643261745017219", "scanner": "scanner-primary", "fingerprint": "e095693a84c24963", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e086f0140f718a4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/request-link.js:29"}, "properties": {"repobilityId": "52494442ebd1c48b", "scanner": "scanner-primary", "fingerprint": "e086f0140f718a4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bfa6941918507f92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/auth/generate-code.js:43"}, "properties": {"repobilityId": "dc69a574a8af785e", "scanner": "scanner-primary", "fingerprint": "bfa6941918507f92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c4a15a460c8fc87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/voices/preview.js:55"}, "properties": {"repobilityId": "9cc3bce8e76e52e9", "scanner": "scanner-primary", "fingerprint": "0c4a15a460c8fc87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b749e36386bcd52", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/voices/list.js:40"}, "properties": {"repobilityId": "f7b341a43f5efc8f", "scanner": "scanner-primary", "fingerprint": "7b749e36386bcd52", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2df69c88e3dec60d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/lib/s3-course.js:55"}, "properties": {"repobilityId": "a934fdea691b5214", "scanner": "scanner-primary", "fingerprint": "2df69c88e3dec60d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0ec3395a928476c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/production/[courseCode]/script-view.js:136"}, "properties": {"repobilityId": "a06a4571cac91031", "scanner": "scanner-primary", "fingerprint": "c0ec3395a928476c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ff6a277c2a9d625", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/production/[courseCode]/manifest.js:98"}, "properties": {"repobilityId": "643c231a3543db2f", "scanner": "scanner-primary", "fingerprint": "8ff6a277c2a9d625", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6cf0799839e07604", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/generate.js:53"}, "properties": {"repobilityId": "ed23b5609687c1fc", "scanner": "scanner-primary", "fingerprint": "6cf0799839e07604", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2afe9373b0100a32", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/index.js:29"}, "properties": {"repobilityId": "5ce9fa4ba8a4fb46", "scanner": "scanner-primary", "fingerprint": "2afe9373b0100a32", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-96679a21a0df1d9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/outputs.js:102"}, "properties": {"repobilityId": "470958778cfcbda0", "scanner": "scanner-primary", "fingerprint": "96679a21a0df1d9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a18eacd0167f853", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/script.js:168"}, "properties": {"repobilityId": "3222b9a5521ebd2b", "scanner": "scanner-primary", "fingerprint": "2a18eacd0167f853", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5242b1b5ebb08f06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/sync.js:49"}, "properties": {"repobilityId": "065eaee19b870652", "scanner": "scanner-primary", "fingerprint": "5242b1b5ebb08f06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5dbc76b49475020a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/baskets/[seedId].js:62"}, "properties": {"repobilityId": "8531dafff1b59391", "scanner": "scanner-primary", "fingerprint": "5dbc76b49475020a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd96ba052bd9e7ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/introductions/[legoId].js:52"}, "properties": {"repobilityId": "3e79f0f211409407", "scanner": "scanner-primary", "fingerprint": "dd96ba052bd9e7ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1e482c190f4eab07", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/courses/[courseCode]/translations/[uuid].js:50"}, "properties": {"repobilityId": "0ad73307a8fa6cca", "scanner": "scanner-primary", "fingerprint": "1e482c190f4eab07", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-952f2c954a233da2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/generators/generate-course-manifest.js:23"}, "properties": {"repobilityId": "fc81e5d488417f2e", "scanner": "scanner-primary", "fingerprint": "952f2c954a233da2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-afad09f7c674361e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/main.js:40"}, "properties": {"repobilityId": "3f5ba5b9c27d4c3c", "scanner": "scanner-primary", "fingerprint": "afad09f7c674361e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31465a34a03b002a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/stores/production.js:318"}, "properties": {"repobilityId": "72f23c737904d3f0", "scanner": "scanner-primary", "fingerprint": "31465a34a03b002a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a3fd41293e22295", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/config/github.js:33"}, "properties": {"repobilityId": "303896b9b2d8ccde", "scanner": "scanner-primary", "fingerprint": "4a3fd41293e22295", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0b0e6be1d05e01ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/composables/useAutocueState.js:183"}, "properties": {"repobilityId": "3e8dab9f4400eda8", "scanner": "scanner-primary", "fingerprint": "0b0e6be1d05e01ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b726144d4b794641", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/composables/useExportWorkflow.ts:261"}, "properties": {"repobilityId": "f0b4c63ce1d0fee7", "scanner": "scanner-primary", "fingerprint": "b726144d4b794641", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-301b94c55efdbf6a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/composables/useTextGenSocket.js:37"}, "properties": {"repobilityId": "5e41a4cc26650853", "scanner": "scanner-primary", "fingerprint": "301b94c55efdbf6a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39d725fa22d9a8bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/CourseScriptViewer.vue:260"}, "properties": {"repobilityId": "5624e6ccba488c75", "scanner": "scanner-primary", "fingerprint": "39d725fa22d9a8bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-215accce1edde9d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ProgressMonitor.vue:163"}, "properties": {"repobilityId": "1c42141d40f93073", "scanner": "scanner-primary", "fingerprint": "215accce1edde9d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7a419b63ef0d508", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/LegoBasketViewer.vue:459"}, "properties": {"repobilityId": "b2a5206f20e0e2f4", "scanner": "scanner-primary", "fingerprint": "b7a419b63ef0d508", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-5c37cbc848371ab9", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/RemoteControl.vue:20"}, "properties": {"repobilityId": "8d76e6a57e317c81", "scanner": "scanner-primary", "fingerprint": "5c37cbc848371ab9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-1df6f855bf0a5738", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/IntroductionsViewer.vue:212"}, "properties": {"repobilityId": "f58b433d704d0b4f", "scanner": "scanner-primary", "fingerprint": "1df6f855bf0a5738", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3266384ce139fc63", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/LegoVisualizer.vue:287"}, "properties": {"repobilityId": "d622a35d34c0b0f2", "scanner": "scanner-primary", "fingerprint": "3266384ce139fc63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-2475a6ee271cc399", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/EnvironmentSwitcher.vue:80"}, "properties": {"repobilityId": "c5638b4287a9dc44", "scanner": "scanner-primary", "fingerprint": "2475a6ee271cc399", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9d1e1791f7c3499", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality/LearnedRulesView.vue:206"}, "properties": {"repobilityId": "ab7e581ab49e156b", "scanner": "scanner-primary", "fingerprint": "a9d1e1791f7c3499", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60c20489b0dae787", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality/PromptEvolutionView.vue:667"}, "properties": {"repobilityId": "9a99d533dbd0b7de", "scanner": "scanner-primary", "fingerprint": "60c20489b0dae787", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89dd3115fdfbb8eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/quality/CourseHealthReport.vue:677"}, "properties": {"repobilityId": "5aba1ebbbc9e2892", "scanner": "scanner-primary", "fingerprint": "89dd3115fdfbb8eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2f70bd8c91752701", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/quality/SeedQualityReview.vue:521"}, "properties": {"repobilityId": "76a3016fd67531df", "scanner": "scanner-primary", "fingerprint": "2f70bd8c91752701", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9adb614e1be0749f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/production/audio/AudioPipeline.vue:131"}, "properties": {"repobilityId": "0de09921e006c1ff", "scanner": "scanner-primary", "fingerprint": "9adb614e1be0749f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5578ca664e96147d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/generation/LanguageBriefEditor.vue:466"}, "properties": {"repobilityId": "bcafeadf33a0c018", "scanner": "scanner-primary", "fingerprint": "5578ca664e96147d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3619a9f9aad316bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/__test_cache__.js:7"}, "properties": {"repobilityId": "30b3c5b03c27f2c7", "scanner": "scanner-primary", "fingerprint": "3619a9f9aad316bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-581d616d8a0462b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/courseCache.js:50"}, "properties": {"repobilityId": "57c4da87e467602c", "scanner": "scanner-primary", "fingerprint": "581d616d8a0462b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-acd6de2241d24819", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/supabase.js:996"}, "properties": {"repobilityId": "58d8177994aa6fb2", "scanner": "scanner-primary", "fingerprint": "acd6de2241d24819", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-adf3b46cf6e2b37d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/seedService.js:31"}, "properties": {"repobilityId": "3554ec9bb3897954", "scanner": "scanner-primary", "fingerprint": "adf3b46cf6e2b37d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-98f1f89932acc1ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/api.js:166"}, "properties": {"repobilityId": "5fe82291600890c8", "scanner": "scanner-primary", "fingerprint": "98f1f89932acc1ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b03990c5ba314cae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/CourseValidator.vue:680"}, "properties": {"repobilityId": "8fdab45992bbdbe1", "scanner": "scanner-primary", "fingerprint": "b03990c5ba314cae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-418810f855e89451", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/Pedagogy.vue:672"}, "properties": {"repobilityId": "b4f75174a2af1952", "scanner": "scanner-primary", "fingerprint": "418810f855e89451", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-15ba8130ca4e3dc2", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/views/CourseEditor.vue:786"}, "properties": {"repobilityId": "831ab8f1b234f132", "scanner": "scanner-primary", "fingerprint": "15ba8130ca4e3dc2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-27635e8a03d802ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/CourseEditor.vue:1293"}, "properties": {"repobilityId": "f09e0194b47ed502", "scanner": "scanner-primary", "fingerprint": "27635e8a03d802ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8c3ca9c46791a94", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/CanonicalSeeds.vue:243"}, "properties": {"repobilityId": "aebe7f02c2b8dc8f", "scanner": "scanner-primary", "fingerprint": "a8c3ca9c46791a94", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c4f8da7dc9e1f6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/DocsIndex.vue:280"}, "properties": {"repobilityId": "e44dd00edd5b788c", "scanner": "scanner-primary", "fingerprint": "6c4f8da7dc9e1f6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bbe984cad7e9b842", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/CourseManager.vue:1869"}, "properties": {"repobilityId": "d06db8bc7027de3e", "scanner": "scanner-primary", "fingerprint": "bbe984cad7e9b842", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be4e45f6208dbbf5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/_archive/AudioPipelineView.vue:577"}, "properties": {"repobilityId": "333be4e26342a099", "scanner": "scanner-primary", "fingerprint": "be4e45f6208dbbf5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38bde880fc5e25a9", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/_archive/AudioGeneration.vue:880"}, "properties": {"repobilityId": "32ba313061ac1063", "scanner": "scanner-primary", "fingerprint": "38bde880fc5e25a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ac4b19f71d5ad800", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/_archive/AudioGeneration.vue:545"}, "properties": {"repobilityId": "ebecf2029171a9c2", "scanner": "scanner-primary", "fingerprint": "ac4b19f71d5ad800", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89838a2ed2769803", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/_archive/RecordingStudio.vue:619"}, "properties": {"repobilityId": "06fb542e6ef25cbc", "scanner": "scanner-primary", "fingerprint": "89838a2ed2769803", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b25f716d00c5ec6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/QAReview.vue:254"}, "properties": {"repobilityId": "21799d34400c97ac", "scanner": "scanner-primary", "fingerprint": "b25f716d00c5ec6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-672c3ae291d2b557", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/MissionControl.vue:331"}, "properties": {"repobilityId": "b2524c25c6a1fcbd", "scanner": "scanner-primary", "fingerprint": "672c3ae291d2b557", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7828fd0e95f97a29", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/production/ScriptViewer.vue:2054"}, "properties": {"repobilityId": "d91873637b33502d", "scanner": "scanner-primary", "fingerprint": "7828fd0e95f97a29", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a506513fd2a4ac0d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/ScriptViewer.vue:1208"}, "properties": {"repobilityId": "85df7530237c90b6", "scanner": "scanner-primary", "fingerprint": "a506513fd2a4ac0d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49b285d31562604c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/TextGeneration.vue:1243"}, "properties": {"repobilityId": "cb360195266c28cc", "scanner": "scanner-primary", "fingerprint": "49b285d31562604c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a5ae81b08d5d401", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/views/production/components/FilterBar.vue:95"}, "properties": {"repobilityId": "af4f56105925f28d", "scanner": "scanner-primary", "fingerprint": "9a5ae81b08d5d401", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-651c474475926c91", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/views/production/components/MissingAudio.vue:610"}, "properties": {"repobilityId": "50e02fe44ac5eb41", "scanner": "scanner-primary", "fingerprint": "651c474475926c91", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-292fd0a0d115b4b1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/production/components/CyclePlayer.vue:231"}, "properties": {"repobilityId": "d8a3a75361d1e11c", "scanner": "scanner-primary", "fingerprint": "292fd0a0d115b4b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a0c441cb9d585447", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in vite.config.js:3"}, "properties": {"repobilityId": "fb99635354426984", "scanner": "scanner-primary", "fingerprint": "a0c441cb9d585447", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vite.config.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-2398885f8db368b5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in start-automation.cjs:19"}, "properties": {"repobilityId": "5e62e02f7cda2853", "scanner": "scanner-primary", "fingerprint": "2398885f8db368b5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "start-automation.cjs"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-8cc04b5f066935e4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/upload-seed.js:66"}, "properties": {"repobilityId": "0bccc46e4c1581ce", "scanner": "scanner-primary", "fingerprint": "8cc04b5f066935e4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/upload-seed.js"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-e1a2a64244564688", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/import-course.js:465"}, "properties": {"repobilityId": "c0e64f69bc888d21", "scanner": "scanner-primary", "fingerprint": "e1a2a64244564688", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/import-course.js"}, "region": {"startLine": 465}}}]}, {"ruleId": "scanner-aea615272f772428", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/pod-content.js:57"}, "properties": {"repobilityId": "7b83013afa1e1a01", "scanner": "scanner-primary", "fingerprint": "aea615272f772428", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/pod-content.js"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-6b835ac7a1e61293", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/algorithm-config.js:18"}, "properties": {"repobilityId": "8349890c067ca728", "scanner": "scanner-primary", "fingerprint": "6b835ac7a1e61293", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/algorithm-config.js"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-658b90567ab205c9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/seeds/upload.js:120"}, "properties": {"repobilityId": "a15b96831bf35f11", "scanner": "scanner-primary", "fingerprint": "658b90567ab205c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/seeds/upload.js"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-6a753c0441c06c9c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auth/invite.js:27"}, "properties": {"repobilityId": "6287bbe09f871842", "scanner": "scanner-primary", "fingerprint": "6a753c0441c06c9c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth/invite.js"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-2b68f62fdc163e43", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auth/me.js:12"}, "properties": {"repobilityId": "d6dc1b9f82c91208", "scanner": "scanner-primary", "fingerprint": "2b68f62fdc163e43", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth/me.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-fd65033cc7f52fa5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auth/login.js:11"}, "properties": {"repobilityId": "d260a00566553185", "scanner": "scanner-primary", "fingerprint": "fd65033cc7f52fa5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth/login.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-b3098a2a161fb99e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auth/users.js:23"}, "properties": {"repobilityId": "4673f354ec9279e6", "scanner": "scanner-primary", "fingerprint": "b3098a2a161fb99e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth/users.js"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-5ec3074d2c993bca", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auth/verify.js:9"}, "properties": {"repobilityId": "ece218f091ed9133", "scanner": "scanner-primary", "fingerprint": "5ec3074d2c993bca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth/verify.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-da4dcd17ce121180", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auth/request-link.js:10"}, "properties": {"repobilityId": "eb900d3a30301094", "scanner": "scanner-primary", "fingerprint": "da4dcd17ce121180", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth/request-link.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-17c8d775f5883684", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auth/generate-code.js:12"}, "properties": {"repobilityId": "3351928115c0c38d", "scanner": "scanner-primary", "fingerprint": "17c8d775f5883684", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth/generate-code.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-87c8f7df8fef47cf", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/baskets/upload.js:35"}, "properties": {"repobilityId": "bf467430d4aa53e2", "scanner": "scanner-primary", "fingerprint": "87c8f7df8fef47cf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/baskets/upload.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-08a387007554fcc0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/voices/preview.js:26"}, "properties": {"repobilityId": "d36bd6f17394d037", "scanner": "scanner-primary", "fingerprint": "08a387007554fcc0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/voices/preview.js"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-dbebeb3f05977a02", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/voices/list.js:19"}, "properties": {"repobilityId": "b91cf6f558c723df", "scanner": "scanner-primary", "fingerprint": "dbebeb3f05977a02", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/voices/list.js"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-e9bed54f88ff6def", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/intelligence/[phase].js:41"}, "properties": {"repobilityId": "b7c5791c24e81694", "scanner": "scanner-primary", "fingerprint": "e9bed54f88ff6def", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/intelligence/[phase].js"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-8953fe7fc916741b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/health.js:10"}, "properties": {"repobilityId": "c2e6120bcbee346c", "scanner": "scanner-primary", "fingerprint": "8953fe7fc916741b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/health.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-27976ff2d31851e9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/script-view.js:57"}, "properties": {"repobilityId": "bf9c2148206edb09", "scanner": "scanner-primary", "fingerprint": "27976ff2d31851e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/script-view.js"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-7d9832e03d4c11a9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/manifest.js:79"}, "properties": {"repobilityId": "df44381132f7ec74", "scanner": "scanner-primary", "fingerprint": "7d9832e03d4c11a9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/manifest.js"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-812f9f88aa57eb6d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/audio-metadata.js:9"}, "properties": {"repobilityId": "33ebfedc9b27e092", "scanner": "scanner-primary", "fingerprint": "812f9f88aa57eb6d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/audio-metadata.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-da69d268ba8e9243", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/audio-pipeline/plan.js:11"}, "properties": {"repobilityId": "127244e65e2838ef", "scanner": "scanner-primary", "fingerprint": "da69d268ba8e9243", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/audio-pipeline/plan.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-f8783cbabc435f90", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/flags/index.js:9"}, "properties": {"repobilityId": "654f97c9af06fad0", "scanner": "scanner-primary", "fingerprint": "f8783cbabc435f90", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/flags/index.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-1609162c75d4e742", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/flags/update.js:9"}, "properties": {"repobilityId": "69e196c9ff83b596", "scanner": "scanner-primary", "fingerprint": "1609162c75d4e742", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/flags/update.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-62ef479aa8898c27", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/audio/[uuid]/url.js:23"}, "properties": {"repobilityId": "149d9d1ef4a22d80", "scanner": "scanner-primary", "fingerprint": "62ef479aa8898c27", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/audio/[uuid]/url.js"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-3e5c3318f6a64dd3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/stats.js:9"}, "properties": {"repobilityId": "22608d105c7d3639", "scanner": "scanner-primary", "fingerprint": "3e5c3318f6a64dd3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/feedback/stats.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-f509e563d74161c7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/aggregated.js:9"}, "properties": {"repobilityId": "90e166ce3a8ad6d0", "scanner": "scanner-primary", "fingerprint": "f509e563d74161c7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/feedback/aggregated.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-171c9204ffb1ff58", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/index.js:10"}, "properties": {"repobilityId": "428860297921b275", "scanner": "scanner-primary", "fingerprint": "171c9204ffb1ff58", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/feedback/index.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-e910b76ff46b8d04", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production/[courseCode]/feedback/resolve.js:9"}, "properties": {"repobilityId": "b226324b57338609", "scanner": "scanner-primary", "fingerprint": "e910b76ff46b8d04", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production/[courseCode]/feedback/resolve.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-91403b23e9efd48e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/legos/upload.js:76"}, "properties": {"repobilityId": "9d98dfba3c355f35", "scanner": "scanner-primary", "fingerprint": "91403b23e9efd48e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/legos/upload.js"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-6c6acb2f7567f4bf", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in api/courses/generate.js:15"}, "properties": {"repobilityId": "329d61616640c7f1", "scanner": "scanner-primary", "fingerprint": "6c6acb2f7567f4bf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/generate.js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-117198fd38439d87", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/generate.js:13"}, "properties": {"repobilityId": "7ef62561cec7e12f", "scanner": "scanner-primary", "fingerprint": "117198fd38439d87", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/generate.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-e353acf43ccd8880", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/index.js:12"}, "properties": {"repobilityId": "d83a345d7b597c1f", "scanner": "scanner-primary", "fingerprint": "e353acf43ccd8880", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/index.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-9574531f11e62fb5", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/outputs.js:15"}, "properties": {"repobilityId": "eb3eb1e915d3aebe", "scanner": "scanner-primary", "fingerprint": "9574531f11e62fb5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/outputs.js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-a0f415ec51e56a42", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/outputs.js:13"}, "properties": {"repobilityId": "39fd83f50da7d472", "scanner": "scanner-primary", "fingerprint": "a0f415ec51e56a42", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/outputs.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-40da28f63d87d7b3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/script.js:15"}, "properties": {"repobilityId": "1378d3750b16f216", "scanner": "scanner-primary", "fingerprint": "40da28f63d87d7b3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/script.js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-a4a5db700340514a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/sync.js:35"}, "properties": {"repobilityId": "c3829cff2bd85c44", "scanner": "scanner-primary", "fingerprint": "a4a5db700340514a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/sync.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-80e590684bfc80bc", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/progress.js:25"}, "properties": {"repobilityId": "051a709801528ffa", "scanner": "scanner-primary", "fingerprint": "80e590684bfc80bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/progress.js"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-7abb3f2ed34053a1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/index.js:24"}, "properties": {"repobilityId": "227a252559a5a67d", "scanner": "scanner-primary", "fingerprint": "7abb3f2ed34053a1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/index.js"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-8a071f9b5f6204c3", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/baskets/[seedId].js:15"}, "properties": {"repobilityId": "a457602e1f885564", "scanner": "scanner-primary", "fingerprint": "8a071f9b5f6204c3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/baskets/[seedId].js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-6c95ff5812c43771", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/baskets/[seedId].js:13"}, "properties": {"repobilityId": "437622891328a5dd", "scanner": "scanner-primary", "fingerprint": "6c95ff5812c43771", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/baskets/[seedId].js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-c2d66810a62d9689", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/files/[filename].js:13"}, "properties": {"repobilityId": "6d9d5dcee8a99ed6", "scanner": "scanner-primary", "fingerprint": "c2d66810a62d9689", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/files/[filename].js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-f82ec7def8885da4", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/introductions/[legoId].js:15"}, "properties": {"repobilityId": "afc8d51cb43c77c4", "scanner": "scanner-primary", "fingerprint": "f82ec7def8885da4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/introductions/[legoId].js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-b6756fdd293f7a64", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/introductions/[legoId].js:13"}, "properties": {"repobilityId": "ba7f4c272d8aa7a6", "scanner": "scanner-primary", "fingerprint": "b6756fdd293f7a64", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/introductions/[legoId].js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-3b9444c6781e474c", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in api/courses/[courseCode]/translations/[uuid].js:15"}, "properties": {"repobilityId": "25701303e00792f1", "scanner": "scanner-primary", "fingerprint": "3b9444c6781e474c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/translations/[uuid].js"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-159e44f018167416", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/courses/[courseCode]/translations/[uuid].js:13"}, "properties": {"repobilityId": "a0e5cfb49f94b540", "scanner": "scanner-primary", "fingerprint": "159e44f018167416", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/courses/[courseCode]/translations/[uuid].js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-67d5bdd071f31737", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/publish-manifest-service.cjs:12"}, "properties": {"repobilityId": "25c3cbc272c82350", "scanner": "scanner-primary", "fingerprint": "67d5bdd071f31737", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/publish-manifest-service.cjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-d53963d7f718f88b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/preflight-check-service.cjs:486"}, "properties": {"repobilityId": "35c268ff25ad3304", "scanner": "scanner-primary", "fingerprint": "d53963d7f718f88b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/preflight-check-service.cjs"}, "region": {"startLine": 486}}}]}, {"ruleId": "scanner-01569195270ba4dc", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/display-tiler.cjs:28"}, "properties": {"repobilityId": "d3b66ce16dba3420", "scanner": "scanner-primary", "fingerprint": "01569195270ba4dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/display-tiler.cjs"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-91bb51f982c27ac8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/pod-bulk-migrate.cjs:59"}, "properties": {"repobilityId": "979ec19324ba93eb", "scanner": "scanner-primary", "fingerprint": "91bb51f982c27ac8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/pod-bulk-migrate.cjs"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-aa33462cceb23a4e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/production-api.cjs:9059"}, "properties": {"repobilityId": "64125998a4ca3afd", "scanner": "scanner-primary", "fingerprint": "aa33462cceb23a4e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/production-api.cjs"}, "region": {"startLine": 9059}}}]}, {"ruleId": "scanner-385745e294ae5121", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/audio-processor.cjs:12"}, "properties": {"repobilityId": "af6b59ac5316ffb3", "scanner": "scanner-primary", "fingerprint": "385745e294ae5121", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/audio-processor.cjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-caf222e6ad1e25b4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/gender-prep-detector.cjs:15"}, "properties": {"repobilityId": "092df4b4e75ead7a", "scanner": "scanner-primary", "fingerprint": "caf222e6ad1e25b4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/gender-prep-detector.cjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-c58a0c0c0b9eb606", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/insight-discovery.cjs:21"}, "properties": {"repobilityId": "a57a55916d7a830e", "scanner": "scanner-primary", "fingerprint": "c58a0c0c0b9eb606", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/insight-discovery.cjs"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-3bfad3aae897f775", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/gender-prep-coordinator.cjs:18"}, "properties": {"repobilityId": "48abc406be81f948", "scanner": "scanner-primary", "fingerprint": "3bfad3aae897f775", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/gender-prep-coordinator.cjs"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-0c47dc9dfcb6cd4c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/network-builder-api.cjs:12"}, "properties": {"repobilityId": "072e63ca8b62225a", "scanner": "scanner-primary", "fingerprint": "0c47dc9dfcb6cd4c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/network-builder-api.cjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-cc89c87db4b975c3", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/release-notes.cjs:30"}, "properties": {"repobilityId": "ffe5d9e526db3d40", "scanner": "scanner-primary", "fingerprint": "cc89c87db4b975c3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/release-notes.cjs"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-8ddadb91e31c763d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/orchestration/orchestrator.cjs:24"}, "properties": {"repobilityId": "878e2de7f6391a62", "scanner": "scanner-primary", "fingerprint": "8ddadb91e31c763d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/orchestration/orchestrator.cjs"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-f70f68dc83f9d5d2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/voice-engine/align.cjs:28"}, "properties": {"repobilityId": "03a0ecc6a150209e", "scanner": "scanner-primary", "fingerprint": "f70f68dc83f9d5d2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/voice-engine/align.cjs"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-4536f96eefdfec6c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/voice-engine/splicer.cjs:24"}, "properties": {"repobilityId": "8d54687d70291d68", "scanner": "scanner-primary", "fingerprint": "4536f96eefdfec6c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/voice-engine/splicer.cjs"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-33ae69d2bb22ef81", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/voice-engine/__tests__/synthesis-job.test.mjs:8"}, "properties": {"repobilityId": "99df28120a2bd876", "scanner": "scanner-primary", "fingerprint": "33ae69d2bb22ef81", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/voice-engine/__tests__/synthesis-job.test.mjs"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-f87581aebe40e0da", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/voice-engine/__tests__/ffmpeg-roundtrip.test.mjs:15"}, "properties": {"repobilityId": "fae5a1058c1af7af", "scanner": "scanner-primary", "fingerprint": "f87581aebe40e0da", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/voice-engine/__tests__/ffmpeg-roundtrip.test.mjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-d9b73263cf556ad8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/api/progress-tracker.cjs:35"}, "properties": {"repobilityId": "83bc44744a084e4e", "scanner": "scanner-primary", "fingerprint": "d9b73263cf556ad8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api/progress-tracker.cjs"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-933c3ef5c0457512", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/api/ngrok-proxy.cjs:45"}, "properties": {"repobilityId": "51a73de5c094aaee", "scanner": "scanner-primary", "fingerprint": "933c3ef5c0457512", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/api/ngrok-proxy.cjs"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-a58cd4fbd9188770", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/shared/spawn-agent-terminal.cjs:15"}, "properties": {"repobilityId": "5a96b109d9986122", "scanner": "scanner-primary", "fingerprint": "a58cd4fbd9188770", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/shared/spawn-agent-terminal.cjs"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-b298eeb661ed7e14", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/shared/spawn-agent.cjs:20"}, "properties": {"repobilityId": "9819011dc057217b", "scanner": "scanner-primary", "fingerprint": "b298eeb661ed7e14", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/shared/spawn-agent.cjs"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-1ed1fb583828a3d8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/shared/spawn-agent-cli.cjs:23"}, "properties": {"repobilityId": "05f98f798c52dc25", "scanner": "scanner-primary", "fingerprint": "1ed1fb583828a3d8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/shared/spawn-agent-cli.cjs"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-89b8b985b906f30d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/shared/claude-cli.cjs:13"}, "properties": {"repobilityId": "318c2f9180f278e6", "scanner": "scanner-primary", "fingerprint": "89b8b985b906f30d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/shared/claude-cli.cjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-642afde80b8cefa9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase8-audio-from-baskets.cjs:34"}, "properties": {"repobilityId": "c0d385031941e6e6", "scanner": "scanner-primary", "fingerprint": "642afde80b8cefa9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/phase8-audio-from-baskets.cjs"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-54c253ae6e0fd04e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase8-audio-v13.cjs:48"}, "properties": {"repobilityId": "b17b2895afd1d09d", "scanner": "scanner-primary", "fingerprint": "54c253ae6e0fd04e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/phase8-audio-v13.cjs"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-c12ea9748a7e4840", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/phases/generate-legacy-manifest.cjs:42"}, "properties": {"repobilityId": "cdae67ab8fd0a6e2", "scanner": "scanner-primary", "fingerprint": "c12ea9748a7e4840", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/generate-legacy-manifest.cjs"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-7cc7c83db83da18e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/phases/phase3-basket-generation/server.cjs:26"}, "properties": {"repobilityId": "ad8fdd641b0b327e", "scanner": "scanner-primary", "fingerprint": "7cc7c83db83da18e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/phase3-basket-generation/server.cjs"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-59fd3c50c42116cf", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase3-basket-generation/server.cjs:57"}, "properties": {"repobilityId": "b0e0792e7768bb0b", "scanner": "scanner-primary", "fingerprint": "59fd3c50c42116cf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/phase3-basket-generation/server.cjs"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-b10cdb624ac091b6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/phases/phase1-translation/server.cjs:30"}, "properties": {"repobilityId": "365226b6068b6ffb", "scanner": "scanner-primary", "fingerprint": "b10cdb624ac091b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/phase1-translation/server.cjs"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-0183a4493ccfa3b0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase1-translation/server.cjs:94"}, "properties": {"repobilityId": "9c0c30d6d037bbde", "scanner": "scanner-primary", "fingerprint": "0183a4493ccfa3b0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/phase1-translation/server.cjs"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-edce61e923ba74b1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/phases/manifest-compilation/server.cjs:17"}, "properties": {"repobilityId": "95b7140b8a89b9d3", "scanner": "scanner-primary", "fingerprint": "edce61e923ba74b1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/manifest-compilation/server.cjs"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-cdc3fd0160744e7a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/phases/manifest-compilation/server.cjs:36"}, "properties": {"repobilityId": "93fb7da6c28ffb4e", "scanner": "scanner-primary", "fingerprint": "cdc3fd0160744e7a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/manifest-compilation/server.cjs"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-b6b0a95cca8859ff", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase0-language-brief/server.cjs:58"}, "properties": {"repobilityId": "a5c9a066737fd309", "scanner": "scanner-primary", "fingerprint": "b6b0a95cca8859ff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/phase0-language-brief/server.cjs"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-e8bbacd6d98371fb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/phases/phase2-conflict-resolution/server.cjs:43"}, "properties": {"repobilityId": "f1995f38a32f66e1", "scanner": "scanner-primary", "fingerprint": "e8bbacd6d98371fb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/phases/phase2-conflict-resolution/server.cjs"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-2475268e29d5e48c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in services/pipeline/pipeline-server.cjs:211"}, "properties": {"repobilityId": "6a3e07f3ef1c480b", "scanner": "scanner-primary", "fingerprint": "2475268e29d5e48c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/pipeline/pipeline-server.cjs"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-6db64909e45dd46d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/course-builder/lib/build-manager.cjs:14"}, "properties": {"repobilityId": "0c721f7b1431194c", "scanner": "scanner-primary", "fingerprint": "6db64909e45dd46d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/course-builder/lib/build-manager.cjs"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-32c0dff4d8200af6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/course-builder/lib/agent-spawner.cjs:7"}, "properties": {"repobilityId": "8254a4c2d8b575c1", "scanner": "scanner-primary", "fingerprint": "32c0dff4d8200af6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/course-builder/lib/agent-spawner.cjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-dc87c56afca72124", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/course-builder/routes/qa.cjs:11"}, "properties": {"repobilityId": "b34f0fc9ac9026b3", "scanner": "scanner-primary", "fingerprint": "dc87c56afca72124", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/course-builder/routes/qa.cjs"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-036037b38cb4e171", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in services/course-builder/routes/v2.cjs:12"}, "properties": {"repobilityId": "4407acb50aca2d71", "scanner": "scanner-primary", "fingerprint": "036037b38cb4e171", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/course-builder/routes/v2.cjs"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-a3d859e15ba1f898", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/build-shared-known-store.cjs:59"}, "properties": {"repobilityId": "408a9ec56c2ec118", "scanner": "scanner-primary", "fingerprint": "a3d859e15ba1f898", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/build-shared-known-store.cjs"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-57642e4429c2c567", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/orchestrators/spawn_basket_windows.cjs:3"}, "properties": {"repobilityId": "3b5eb10ef6207473", "scanner": "scanner-primary", "fingerprint": "57642e4429c2c567", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/orchestrators/spawn_basket_windows.cjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-e3ebf43fd1a2ef04", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/orchestrators/orchestrator-workflow.cjs:13"}, "properties": {"repobilityId": "119cbe2f0b497c17", "scanner": "scanner-primary", "fingerprint": "e3ebf43fd1a2ef04", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/orchestrators/orchestrator-workflow.cjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-29dff247b88f8387", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/orchestrators/spawn-swarm-5x5x3.cjs:16"}, "properties": {"repobilityId": "62cce152cb1baabc", "scanner": "scanner-primary", "fingerprint": "29dff247b88f8387", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/orchestrators/spawn-swarm-5x5x3.cjs"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-367676b8f3b37096", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/sync/publish-to-course-configs.cjs:34"}, "properties": {"repobilityId": "33622d79ee85cd41", "scanner": "scanner-primary", "fingerprint": "367676b8f3b37096", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/sync/publish-to-course-configs.cjs"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-0718fecc013b0b31", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/mergers/merge_all_basket_branches.cjs:3"}, "properties": {"repobilityId": "f89eadd5fbc2ff0a", "scanner": "scanner-primary", "fingerprint": "0718fecc013b0b31", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/mergers/merge_all_basket_branches.cjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-69a77bb86ed1ab5e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/mergers/watch_and_merge_branches.cjs:33"}, "properties": {"repobilityId": "bc83a8039cf85c12", "scanner": "scanner-primary", "fingerprint": "69a77bb86ed1ab5e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/mergers/watch_and_merge_branches.cjs"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-07eaec77359c4f4c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/mergers/merge_all_segments.cjs:70"}, "properties": {"repobilityId": "9863fce6fa618fee", "scanner": "scanner-primary", "fingerprint": "07eaec77359c4f4c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/mergers/merge_all_segments.cjs"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-1ef08a2c56aafad8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/recording-optimizer/segment-audio.cjs:20"}, "properties": {"repobilityId": "7fae7cc6ff8da112", "scanner": "scanner-primary", "fingerprint": "1ef08a2c56aafad8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/recording-optimizer/segment-audio.cjs"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-94b1dbf8f1e68d71", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/recording-optimizer/splice-legos.cjs:19"}, "properties": {"repobilityId": "72a41b4baa07153d", "scanner": "scanner-primary", "fingerprint": "94b1dbf8f1e68d71", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/recording-optimizer/splice-legos.cjs"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-8b0c5494dc466480", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/recording-optimizer/align-audio.cjs:31"}, "properties": {"repobilityId": "73efa43f2a68b49d", "scanner": "scanner-primary", "fingerprint": "8b0c5494dc466480", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/recording-optimizer/align-audio.cjs"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-53518e652e058895", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/validators/manifest-structure-validator.cjs:848"}, "properties": {"repobilityId": "59b92e292f2685ed", "scanner": "scanner-primary", "fingerprint": "53518e652e058895", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/validators/manifest-structure-validator.cjs"}, "region": {"startLine": 848}}}]}, {"ruleId": "scanner-18cf5dae47b9b00a", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in tools/generators/README.md:47"}, "properties": {"repobilityId": "3b3e542daf8e4ec1", "scanner": "scanner-primary", "fingerprint": "18cf5dae47b9b00a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/generators/README.md"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-01b4fd4041688070", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/layer1-explorer.html:495"}, "properties": {"repobilityId": "061620c7cd7f11f2", "scanner": "scanner-primary", "fingerprint": "01b4fd4041688070", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/layer1-explorer.html"}, "region": {"startLine": 495}}}]}, {"ruleId": "scanner-806a938e749a3035", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/listening-playground.html:890"}, "properties": {"repobilityId": "a696ab395ddbceb1", "scanner": "scanner-primary", "fingerprint": "806a938e749a3035", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/listening-playground.html"}, "region": {"startLine": 890}}}]}, {"ruleId": "scanner-8280001cd9b038cd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in new_vision/autocue-recording-system.html:1199"}, "properties": {"repobilityId": "f1abd715bc2edc87", "scanner": "scanner-primary", "fingerprint": "8280001cd9b038cd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "new_vision/autocue-recording-system.html"}, "region": {"startLine": 1199}}}]}, {"ruleId": "scanner-531f23e8a2479c0b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in new_vision/autocue-teleprompter-prototype.html:1438"}, "properties": {"repobilityId": "7df7bcf7dde7e3a7", "scanner": "scanner-primary", "fingerprint": "531f23e8a2479c0b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "new_vision/autocue-teleprompter-prototype.html"}, "region": {"startLine": 1438}}}]}, {"ruleId": "scanner-2ac523aee0988b95", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "102e6524f736acdf", "scanner": "scanner-primary", "fingerprint": "2ac523aee0988b95", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-merge-claude.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-600299574bb6a28a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "22fd349057b24dea", "scanner": "scanner-primary", "fingerprint": "600299574bb6a28a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-merge-claude.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-867482d7158dd532", "level": "note", "message": {"text": "Very large file: services/supabase-client.cjs (1958 lines)"}, "properties": {"repobilityId": "222df7477b384961", "scanner": "scanner-primary", "fingerprint": "867482d7158dd532", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d42c17ee9cebaba", "level": "note", "message": {"text": "Very large file: services/production-api.cjs (11219 lines)"}, "properties": {"repobilityId": "2a1f59ada5210813", "scanner": "scanner-primary", "fingerprint": "5d42c17ee9cebaba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f3b7e90856710dde", "level": "note", "message": {"text": "Very large file: services/orchestration/orchestrator.cjs (11138 lines)"}, "properties": {"repobilityId": "e0539472d35b473b", "scanner": "scanner-primary", "fingerprint": "f3b7e90856710dde", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d436e97cf43f3c84", "level": "note", "message": {"text": "Very large file: services/phases/phase8-audio-v13.cjs (5395 lines)"}, "properties": {"repobilityId": "497efc475f4dd9ee", "scanner": "scanner-primary", "fingerprint": "d436e97cf43f3c84", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-574eb0074582cefe", "level": "note", "message": {"text": "Very large file: services/phases/generate-legacy-manifest.cjs (1818 lines)"}, "properties": {"repobilityId": "e2025eb25e4765ff", "scanner": "scanner-primary", "fingerprint": "574eb0074582cefe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-388ee536c522c4a5", "level": "note", "message": {"text": "Very large file: services/phases/phase3-basket-generation/server.cjs (2022 lines)"}, "properties": {"repobilityId": "5e5bf1e429655e03", "scanner": "scanner-primary", "fingerprint": "388ee536c522c4a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9f6b973dad34fce6", "level": "note", "message": {"text": "Very large file: services/phases/phase1-translation/server.cjs (2848 lines)"}, "properties": {"repobilityId": "7863fdbf67aa4d81", "scanner": "scanner-primary", "fingerprint": "9f6b973dad34fce6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fc2cac7c3d236633", "level": "note", "message": {"text": "Very large file: services/course-builder/routes/qa.cjs (1793 lines)"}, "properties": {"repobilityId": "b248ed5ae96cf49d", "scanner": "scanner-primary", "fingerprint": "fc2cac7c3d236633", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-24287e8e83bd62e2", "level": "note", "message": {"text": "Very large file: services/course-builder/routes/build.cjs (1245 lines)"}, "properties": {"repobilityId": "2217aa0d5aab9de1", "scanner": "scanner-primary", "fingerprint": "24287e8e83bd62e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-798339d3ffbbd984", "level": "note", "message": {"text": "Very large file: services/course-builder/routes/seed-complete.cjs (2084 lines)"}, "properties": {"repobilityId": "f1e5b11c429c515d", "scanner": "scanner-primary", "fingerprint": "798339d3ffbbd984", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-338bd2791a8cd7e2", "level": "note", "message": {"text": "Very large file: services/course-builder/routes/v2.cjs (1797 lines)"}, "properties": {"repobilityId": "ddfb8b70c124c6d0", "scanner": "scanner-primary", "fingerprint": "338bd2791a8cd7e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-033ab27b435060fa", "level": "note", "message": {"text": "Very large file: src/services/api.js (1839 lines)"}, "properties": {"repobilityId": "6671f519e968fae6", "scanner": "scanner-primary", "fingerprint": "033ab27b435060fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "d856a42a246ada21", "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": "829254309204d148", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "e6e65793e8407277", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "c8ea34b0335fb14e", "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": "d37de001332426d6", "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": "f944900b22836338", "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": "a24a609f56d21e88", "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": "280a10b0b079968b", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-17d866d91a7c451e", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "properties": {"repobilityId": "ccce5984e58a48f0", "scanner": "scanner-primary", "fingerprint": "17d866d91a7c451e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 450}}}]}, {"ruleId": "scanner-641ad4787b315f00", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/phrase-fixer.md"}, "properties": {"repobilityId": "eff1e8ac9c2d48bc", "scanner": "scanner-primary", "fingerprint": "641ad4787b315f00", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/phrase-fixer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-82af23378c2f56e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in start-automation.cjs:61"}, "properties": {"repobilityId": "bbdf51300cd34f1e", "scanner": "scanner-primary", "fingerprint": "82af23378c2f56e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccd3437c40874731", "level": "none", "message": {"text": "Commented-code block (6 lines) in apml/compiler/src/parser/parser.ts:348"}, "properties": {"repobilityId": "fae556a10d65ed58", "scanner": "scanner-primary", "fingerprint": "ccd3437c40874731", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dd3727a4c611f66", "level": "none", "message": {"text": "Commented-code block (6 lines) in apml/core/audio-registry-v12.zod.ts:1"}, "properties": {"repobilityId": "4d85b2489b2b3a68", "scanner": "scanner-primary", "fingerprint": "2dd3727a4c611f66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90f2b252a732dc3c", "level": "none", "message": {"text": "Commented-code block (6 lines) in apml/core/audio-registry-v12.ts:1"}, "properties": {"repobilityId": "13a43d7643dbe40f", "scanner": "scanner-primary", "fingerprint": "90f2b252a732dc3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31ee14bcd2e94850", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/pod-content.js:113"}, "properties": {"repobilityId": "804037dea49aa31f", "scanner": "scanner-primary", "fingerprint": "31ee14bcd2e94850", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb68bac772bfed47", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/voices/preview.js:87"}, "properties": {"repobilityId": "f8e0b8e4bf0c420d", "scanner": "scanner-primary", "fingerprint": "cb68bac772bfed47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2053a4273be70b56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/voices/list.js:42"}, "properties": {"repobilityId": "c25013fed961e530", "scanner": "scanner-primary", "fingerprint": "2053a4273be70b56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f618b5b7e4dd259", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/pair-contracts/zho_for_eng.contract.cjs:18"}, "properties": {"repobilityId": "2e95be8b7f1e97c8", "scanner": "scanner-primary", "fingerprint": "0f618b5b7e4dd259", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-554f20d98c4b9bab", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/pair-contracts/_TEMPLATE.contract.cjs:1"}, "properties": {"repobilityId": "d3a280818a4bb38f", "scanner": "scanner-primary", "fingerprint": "554f20d98c4b9bab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7db13d2e566ca77", "level": "none", "message": {"text": "Commented-code block (8 lines) in docs/pair-contracts/fra_for_eng.contract.cjs:1"}, "properties": {"repobilityId": "7b730f8918a8eed6", "scanner": "scanner-primary", "fingerprint": "c7db13d2e566ca77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a194d1f9e6979422", "level": "none", "message": {"text": "Commented-code block (5 lines) in database/import-course-structure.cjs:76"}, "properties": {"repobilityId": "32f7b9a87ce14afa", "scanner": "scanner-primary", "fingerprint": "a194d1f9e6979422", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a193572d3e62472", "level": "note", "message": {"text": "Legacy-named symbol `spa_for_eng_v2` in database/enrich-baskets.cjs:12"}, "properties": {"repobilityId": "5b03c21abb1cf369", "scanner": "scanner-primary", "fingerprint": "5a193572d3e62472", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7f8e02baecca47d2", "level": "note", "message": {"text": "Legacy-named symbol `spa_for_eng_v2` in database/import-course-v2.cjs:5"}, "properties": {"repobilityId": "44daec4fda0ca5f3", "scanner": "scanner-primary", "fingerprint": "7f8e02baecca47d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-49a4b5913f44fde4", "level": "note", "message": {"text": "Legacy-named symbol `spa_for_eng_v2` in database/import-course-to-db.cjs:12"}, "properties": {"repobilityId": "7a8c5206b9651680", "scanner": "scanner-primary", "fingerprint": "49a4b5913f44fde4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9920b72abc83021b", "level": "note", "message": {"text": "Legacy-named symbol `spa_for_eng_v2` in database/import-course-registry.cjs:15"}, "properties": {"repobilityId": "6e91d5b1c89f4f89", "scanner": "scanner-primary", "fingerprint": "9920b72abc83021b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fb39fe7d07aee125", "level": "note", "message": {"text": "Legacy-named symbol `standardToLegacy` in database/lib/import-legacy-course-core.cjs:57"}, "properties": {"repobilityId": "2a30c1511c3685f2", "scanner": "scanner-primary", "fingerprint": "fb39fe7d07aee125", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-32f9af76629a0834", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/s3-production-service.cjs:154"}, "properties": {"repobilityId": "cca6c59c6db667c8", "scanner": "scanner-primary", "fingerprint": "32f9af76629a0834", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e7d4076cda743de", "level": "none", "message": {"text": "Commented-code block (15 lines) in services/run-pod-explainer-batch.cjs:41"}, "properties": {"repobilityId": "b918a41f27813ef5", "scanner": "scanner-primary", "fingerprint": "0e7d4076cda743de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9578984f3edcbc3", "level": "note", "message": {"text": "Legacy-named symbol `standardToLegacy` in services/mar-service.cjs:117"}, "properties": {"repobilityId": "c95bd37fbdbfbb58", "scanner": "scanner-primary", "fingerprint": "b9578984f3edcbc3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-97cae24c20d24224", "level": "note", "message": {"text": "Legacy-named symbol `codeToLegacy` in services/language-code-service.cjs:27"}, "properties": {"repobilityId": "63a621c52166b7b5", "scanner": "scanner-primary", "fingerprint": "97cae24c20d24224", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-73b1cf9e8c45f5cb", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in services/tts-service.cjs:72"}, "properties": {"repobilityId": "b02e8c0fba348151", "scanner": "scanner-primary", "fingerprint": "73b1cf9e8c45f5cb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f778d9a00d2b5700", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/tts-service.cjs:19"}, "properties": {"repobilityId": "35fe746738239e5c", "scanner": "scanner-primary", "fingerprint": "f778d9a00d2b5700", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f2c57e8674672d3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/tts-service.cjs:62"}, "properties": {"repobilityId": "5990ec6289d4bd5d", "scanner": "scanner-primary", "fingerprint": "5f2c57e8674672d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c27d19fe2938b7e", "level": "none", "message": {"text": "Commented-code block (9 lines) in services/display-tiler.cjs:10"}, "properties": {"repobilityId": "d940e2188d0f3718", "scanner": "scanner-primary", "fingerprint": "3c27d19fe2938b7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6decaacb78d7393", "level": "note", "message": {"text": "Legacy-named symbol `spa_for_eng_v2` in services/manifest-generator.cjs:202"}, "properties": {"repobilityId": "1a341d23a6b7d7ef", "scanner": "scanner-primary", "fingerprint": "a6decaacb78d7393", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c29ee1f77d4ee855", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/manifest-generator.cjs:356"}, "properties": {"repobilityId": "32112b1b5ed00734", "scanner": "scanner-primary", "fingerprint": "c29ee1f77d4ee855", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fdeaf9660019fcd7", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in services/audio-generation-planner.cjs:77"}, "properties": {"repobilityId": "2a9f6ad5802a72c8", "scanner": "scanner-primary", "fingerprint": "fdeaf9660019fcd7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a1382f9514dad93f", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/phrase-decomposition-writer.cjs:9"}, "properties": {"repobilityId": "6980e99dfd844462", "scanner": "scanner-primary", "fingerprint": "a1382f9514dad93f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81bef4459da4b511", "level": "note", "message": {"text": "Legacy-named symbol `spa_for_eng_v2` in services/data-finders.cjs:356"}, "properties": {"repobilityId": "0f40e690ce4d5efb", "scanner": "scanner-primary", "fingerprint": "81bef4459da4b511", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4d09ae0c815967e5", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/pod-bulk-migrate.cjs:110"}, "properties": {"repobilityId": "150413bf845e75cb", "scanner": "scanner-primary", "fingerprint": "4d09ae0c815967e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4aa5894d5ed6de22", "level": "note", "message": {"text": "Legacy-named symbol `useLegacy` in services/production-api.cjs:1245"}, "properties": {"repobilityId": "934010f2532d311a", "scanner": "scanner-primary", "fingerprint": "4aa5894d5ed6de22", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dfd410bcf396025f", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/production-api.cjs:33"}, "properties": {"repobilityId": "bbfc79c6e0d1f569", "scanner": "scanner-primary", "fingerprint": "dfd410bcf396025f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fcfa262be581871", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/production-api.cjs:1161"}, "properties": {"repobilityId": "04a3044e4dcf1598", "scanner": "scanner-primary", "fingerprint": "4fcfa262be581871", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-96fd797209a5ad14", "level": "note", "message": {"text": "Legacy-named symbol `spa_for_eng_v2` in services/course-data-service.cjs:214"}, "properties": {"repobilityId": "99eb9a1903474040", "scanner": "scanner-primary", "fingerprint": "96fd797209a5ad14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-09567b6a23561643", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/course-data-service.cjs:633"}, "properties": {"repobilityId": "aed3dcf17023f35e", "scanner": "scanner-primary", "fingerprint": "09567b6a23561643", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bdb7ae921f42807", "level": "note", "message": {"text": "Legacy-named symbol `standardToLegacy` in services/uuid-service.cjs:24"}, "properties": {"repobilityId": "f3d59f2999eca70d", "scanner": "scanner-primary", "fingerprint": "9bdb7ae921f42807", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9ef8fe88c356f50b", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/course-builder-api.cjs:75"}, "properties": {"repobilityId": "3b9dacde11179390", "scanner": "scanner-primary", "fingerprint": "9ef8fe88c356f50b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a515eec480e1850e", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/gender-prep-detector.cjs:29"}, "properties": {"repobilityId": "a7e2f07a1e4c3a51", "scanner": "scanner-primary", "fingerprint": "a515eec480e1850e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd41395848fb79cf", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/learning-script-generator.cjs:635"}, "properties": {"repobilityId": "96108735ab263bf4", "scanner": "scanner-primary", "fingerprint": "fd41395848fb79cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-033b1e3e35c224b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/phrase-decomposer.cjs:7"}, "properties": {"repobilityId": "72a90325c318a43d", "scanner": "scanner-primary", "fingerprint": "033b1e3e35c224b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1486c526a4bb2513", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/pod-explainer-composite.cjs:58"}, "properties": {"repobilityId": "59c13e2df74931eb", "scanner": "scanner-primary", "fingerprint": "1486c526a4bb2513", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea6f3d087173d03a", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in services/elevenlabs-service.cjs:22"}, "properties": {"repobilityId": "69370be2f9a35cc5", "scanner": "scanner-primary", "fingerprint": "ea6f3d087173d03a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bbba9f91bb54bdcc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/elevenlabs-service.cjs:216"}, "properties": {"repobilityId": "195870b405d945d8", "scanner": "scanner-primary", "fingerprint": "bbba9f91bb54bdcc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3ec513a72579d02c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/insight-discovery.cjs:47"}, "properties": {"repobilityId": "a403e28e73a1c2e8", "scanner": "scanner-primary", "fingerprint": "3ec513a72579d02c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-118c9f7406c319d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/pod-dialogue-generator.cjs:437"}, "properties": {"repobilityId": "4ed500b916c1f318", "scanner": "scanner-primary", "fingerprint": "118c9f7406c319d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0b5fecc566e35b1", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/gender-prep-coordinator.cjs:428"}, "properties": {"repobilityId": "9bb8fabfb82197f8", "scanner": "scanner-primary", "fingerprint": "e0b5fecc566e35b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2467129d63aa4ef2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/google-tts-service.cjs:345"}, "properties": {"repobilityId": "2c6766f916cddc0c", "scanner": "scanner-primary", "fingerprint": "2467129d63aa4ef2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2289be6f5ad24b57", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/release-notes.cjs:193"}, "properties": {"repobilityId": "6f762d89b8996fbe", "scanner": "scanner-primary", "fingerprint": "2289be6f5ad24b57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ade7d437eb90c62a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/release-notes.cjs:152"}, "properties": {"repobilityId": "6cfc8d5da366d5e6", "scanner": "scanner-primary", "fingerprint": "ade7d437eb90c62a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b275c49c04501c75", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/pod-explainer-generator.cjs:381"}, "properties": {"repobilityId": "a998770082bac6b7", "scanner": "scanner-primary", "fingerprint": "b275c49c04501c75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-822c7d169343105c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/briefs/component-backfill.cjs:42"}, "properties": {"repobilityId": "3b1193984f933742", "scanner": "scanner-primary", "fingerprint": "822c7d169343105c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7210f2d74eb5c6f6", "level": "note", "message": {"text": "Legacy-named symbol `deleted_baskets_backup` in services/orchestration/orchestrator.cjs:8035"}, "properties": {"repobilityId": "f93c451a8282d58e", "scanner": "scanner-primary", "fingerprint": "7210f2d74eb5c6f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-07a9cddadb753ba1", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/orchestration/orchestrator.cjs:1274"}, "properties": {"repobilityId": "eb83807d1e91364d", "scanner": "scanner-primary", "fingerprint": "07a9cddadb753ba1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ef85bdfb662e1f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/orchestration/orchestrator.cjs:7826"}, "properties": {"repobilityId": "47676164810c04a5", "scanner": "scanner-primary", "fingerprint": "8ef85bdfb662e1f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-977d92c7542a5531", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/voice-engine/provenance-adapter.cjs:72"}, "properties": {"repobilityId": "ca2ab8d5d5465c5a", "scanner": "scanner-primary", "fingerprint": "977d92c7542a5531", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b516b2ebf7b19d17", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/voice-engine/db.cjs:48"}, "properties": {"repobilityId": "00b086716e775e18", "scanner": "scanner-primary", "fingerprint": "b516b2ebf7b19d17", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64ce1493af1f8c90", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/voice-engine/pods-router.cjs:263"}, "properties": {"repobilityId": "73079dd8d41e8653", "scanner": "scanner-primary", "fingerprint": "64ce1493af1f8c90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8622712e50c20429", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/voice-engine/team-router.cjs:64"}, "properties": {"repobilityId": "197bbaac057a5113", "scanner": "scanner-primary", "fingerprint": "8622712e50c20429", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ad6324af365725f", "level": "none", "message": {"text": "Commented-code block (8 lines) in services/voice-engine/splicer.cjs:80"}, "properties": {"repobilityId": "845acfe378e10a70", "scanner": "scanner-primary", "fingerprint": "0ad6324af365725f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87aadc349e65a246", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/voice-engine/pods-cast.cjs:240"}, "properties": {"repobilityId": "90b41f634a6d4959", "scanner": "scanner-primary", "fingerprint": "87aadc349e65a246", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8465351bf256bbe", "level": "none", "message": {"text": "Commented-code block (10 lines) in services/voice-engine/__tests__/pods-origin-guard.test.mjs:5"}, "properties": {"repobilityId": "84b45e8113396a4c", "scanner": "scanner-primary", "fingerprint": "a8465351bf256bbe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15a3f67f85a30900", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/api/ngrok-proxy.cjs:258"}, "properties": {"repobilityId": "8be1ac0a81489584", "scanner": "scanner-primary", "fingerprint": "15a3f67f85a30900", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3aff41aadc654859", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/shared/text-classification.cjs:25"}, "properties": {"repobilityId": "85fb22565a719cee", "scanner": "scanner-primary", "fingerprint": "3aff41aadc654859", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6498afb721bbbee", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/shared/spawn-agent-unified.cjs:30"}, "properties": {"repobilityId": "8a25a96b311235fc", "scanner": "scanner-primary", "fingerprint": "e6498afb721bbbee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-823a2895378ee48c", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/shared/claude-cli.cjs:37"}, "properties": {"repobilityId": "e6a90b1be825721e", "scanner": "scanner-primary", "fingerprint": "823a2895378ee48c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ff4b4dba7971068", "level": "none", "message": {"text": "Commented-code block (10 lines) in services/shared/popty-identity.cjs:6"}, "properties": {"repobilityId": "96c1fc039dedbf5d", "scanner": "scanner-primary", "fingerprint": "6ff4b4dba7971068", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5404a50ad363761", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/phases/phase8-audio-v13.cjs:63"}, "properties": {"repobilityId": "3637c5a23ea15ad4", "scanner": "scanner-primary", "fingerprint": "b5404a50ad363761", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec84e4664f630532", "level": "note", "message": {"text": "Legacy-named symbol `knownLegacy` in services/phases/generate-legacy-manifest.cjs:1549"}, "properties": {"repobilityId": "af7daa26a22fd5ec", "scanner": "scanner-primary", "fingerprint": "ec84e4664f630532", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-80b9bb7ad6b366c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/phases/generate-legacy-manifest.cjs:24"}, "properties": {"repobilityId": "261e2c5b86b62e3d", "scanner": "scanner-primary", "fingerprint": "80b9bb7ad6b366c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-463e1a77bcdeed71", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/phases/phase2-conflict-resolution/server.cjs:460"}, "properties": {"repobilityId": "b66100ca75ad7cc6", "scanner": "scanner-primary", "fingerprint": "463e1a77bcdeed71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b2bef5abc2b01cc", "level": "note", "message": {"text": "Legacy-named symbol `zho_for_eng_v2` in services/course-builder/lib/validation.cjs:892"}, "properties": {"repobilityId": "f5b60c4722a2653b", "scanner": "scanner-primary", "fingerprint": "3b2bef5abc2b01cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1b8d193dc4de7bc3", "level": "none", "message": {"text": "Commented-code block (11 lines) in services/course-builder/lib/validation.cjs:619"}, "properties": {"repobilityId": "6e96040b72b6acfe", "scanner": "scanner-primary", "fingerprint": "1b8d193dc4de7bc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-580d8e7a3123c66a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/course-builder/lib/validation.cjs:648"}, "properties": {"repobilityId": "b713d3a951b30245", "scanner": "scanner-primary", "fingerprint": "580d8e7a3123c66a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6cce4f573fc31381", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/course-builder/lib/pipeline.cjs:152"}, "properties": {"repobilityId": "7435c11265d2de8a", "scanner": "scanner-primary", "fingerprint": "6cce4f573fc31381", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd256b98d797f53a", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/course-builder/routes/build.cjs:647"}, "properties": {"repobilityId": "2e166ecd460b63f3", "scanner": "scanner-primary", "fingerprint": "dd256b98d797f53a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ec516ca0de6da8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/course-builder/routes/build.cjs:445"}, "properties": {"repobilityId": "dcdc7cb9026daf18", "scanner": "scanner-primary", "fingerprint": "5ec516ca0de6da8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eb55db4375e1d9d0", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/course-builder/routes/drafts.cjs:55"}, "properties": {"repobilityId": "ffaeb96c34d40e11", "scanner": "scanner-primary", "fingerprint": "eb55db4375e1d9d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69f24c850e898617", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/course-builder/routes/translation.cjs:237"}, "properties": {"repobilityId": "7e6854ae85eb0825", "scanner": "scanner-primary", "fingerprint": "69f24c850e898617", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-941979578d4e55ba", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/course-builder/routes/seed-complete.cjs:1280"}, "properties": {"repobilityId": "5f3f6c9515476ed5", "scanner": "scanner-primary", "fingerprint": "941979578d4e55ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62386faf80f806d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/course-builder/routes/golden.cjs:115"}, "properties": {"repobilityId": "68af41a4690eeff4", "scanner": "scanner-primary", "fingerprint": "62386faf80f806d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f39bc690de26c61e", "level": "note", "message": {"text": "Legacy-named symbol `dashboard_v2` in services/course-builder/routes/v2.cjs:1165"}, "properties": {"repobilityId": "917b67e10fb62d0c", "scanner": "scanner-primary", "fingerprint": "f39bc690de26c61e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f10198a23a72af5e", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/course-builder/routes/v2.cjs:32"}, "properties": {"repobilityId": "75b0fc71c5790a8d", "scanner": "scanner-primary", "fingerprint": "f10198a23a72af5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cd80e67e2f4debe", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/pod-voice-colour-n.cjs:47"}, "properties": {"repobilityId": "c61ba64424da246a", "scanner": "scanner-primary", "fingerprint": "7cd80e67e2f4debe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86f5f92331ddf739", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/pod-voice-colour.cjs:34"}, "properties": {"repobilityId": "61fa9bf46fa41be3", "scanner": "scanner-primary", "fingerprint": "86f5f92331ddf739", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30d51ad33a3fcafe", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/pod-sync.cjs:32"}, "properties": {"repobilityId": "d41d8476bf48b0b8", "scanner": "scanner-primary", "fingerprint": "30d51ad33a3fcafe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e74c272dcba4ca9d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tools/seed-canonical-pods.cjs:94"}, "properties": {"repobilityId": "d105161f30b6f81a", "scanner": "scanner-primary", "fingerprint": "e74c272dcba4ca9d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cf5db4cddea6f47f", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/pod-voice-coverage.cjs:66"}, "properties": {"repobilityId": "a29f2ea6fdfacccf", "scanner": "scanner-primary", "fingerprint": "cf5db4cddea6f47f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6eebf27e2b51c5b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/persist-stage0-pod0.cjs:60"}, "properties": {"repobilityId": "e9dfee55ede3b8e8", "scanner": "scanner-primary", "fingerprint": "6eebf27e2b51c5b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17d2eee7adf5b7f2", "level": "note", "message": {"text": "Legacy-named symbol `spa_legacy` in tools/sync/publish-to-course-configs.cjs:26"}, "properties": {"repobilityId": "ed5faa54df2cba5f", "scanner": "scanner-primary", "fingerprint": "17d2eee7adf5b7f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ce659da2e83c277d", "level": "note", "message": {"text": "Legacy-named symbol `targetLegacy` in tools/phase-prep/phase5_prep_scaffolds_v10.cjs:49"}, "properties": {"repobilityId": "da3b6881ad3efb1e", "scanner": "scanner-primary", "fingerprint": "ce659da2e83c277d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b027a035a8f7f473", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/validators/manifest-structure-validator.cjs:529"}, "properties": {"repobilityId": "5a874aa07748627f", "scanner": "scanner-primary", "fingerprint": "b027a035a8f7f473", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a8c08c61a2f45f5", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in tools/generators/phase8-generate-audio.cjs:100"}, "properties": {"repobilityId": "350a9c25f6f369ad", "scanner": "scanner-primary", "fingerprint": "7a8c08c61a2f45f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-19663b8359da43cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tools/generators/phase8-generate-audio.cjs:92"}, "properties": {"repobilityId": "68fcb887e2fea232", "scanner": "scanner-primary", "fingerprint": "19663b8359da43cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c84eaa9da28b1e4", "level": "note", "message": {"text": "Legacy-named symbol `course_manifest_v2` in tools/generators/transform-to-v2-manifest.cjs:16"}, "properties": {"repobilityId": "fe714f5c579c5475", "scanner": "scanner-primary", "fingerprint": "9c84eaa9da28b1e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4b0270a5b9aeaf02", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/generators/transform-to-v2-manifest.cjs:193"}, "properties": {"repobilityId": "b2ec6a6c515c4b87", "scanner": "scanner-primary", "fingerprint": "4b0270a5b9aeaf02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02d9201034cf19e5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/router/index.js:308"}, "properties": {"repobilityId": "340498281828c6d3", "scanner": "scanner-primary", "fingerprint": "02d9201034cf19e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f59352f877419f1a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/stores/production.js:184"}, "properties": {"repobilityId": "69a65e1f331bf44d", "scanner": "scanner-primary", "fingerprint": "f59352f877419f1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22bb76d8afebf2ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/stores/production.js:345"}, "properties": {"repobilityId": "f5066d83297c2233", "scanner": "scanner-primary", "fingerprint": "22bb76d8afebf2ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7213becdc25552cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useAutocueState.js:475"}, "properties": {"repobilityId": "1b17c85f65be4aa1", "scanner": "scanner-primary", "fingerprint": "7213becdc25552cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8e163816b6f1f469", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/composables/useAuth.js:81"}, "properties": {"repobilityId": "703f22bda9d8bdb8", "scanner": "scanner-primary", "fingerprint": "8e163816b6f1f469", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a8f28d3232683e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useAuth.js:103"}, "properties": {"repobilityId": "e9365589490126f1", "scanner": "scanner-primary", "fingerprint": "9a8f28d3232683e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-867b9fd4a57617e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useExportWorkflow.ts:666"}, "properties": {"repobilityId": "830adaad85219383", "scanner": "scanner-primary", "fingerprint": "867b9fd4a57617e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-37dc2d88a112f2b4", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/composables/useTapRecorder.js:5"}, "properties": {"repobilityId": "94e34bd6e60b9e1a", "scanner": "scanner-primary", "fingerprint": "37dc2d88a112f2b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f7d22c71d8eb1bd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useAudioUpload.ts:180"}, "properties": {"repobilityId": "ad866699dc66c861", "scanner": "scanner-primary", "fingerprint": "0f7d22c71d8eb1bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfa28e4f61ab199b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/composables/useCourses.js:123"}, "properties": {"repobilityId": "1cd470e922afa01a", "scanner": "scanner-primary", "fingerprint": "bfa28e4f61ab199b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-195ba451af7fd7dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/podRecordingPlan.js:5"}, "properties": {"repobilityId": "de6375fbccec1805", "scanner": "scanner-primary", "fingerprint": "195ba451af7fd7dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4d9d975b2c3396a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/supabase.js:220"}, "properties": {"repobilityId": "33787a16b683c371", "scanner": "scanner-primary", "fingerprint": "f4d9d975b2c3396a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12bb664b29fee968", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/vfs.js:20"}, "properties": {"repobilityId": "9ae4ea70436515df", "scanner": "scanner-primary", "fingerprint": "12bb664b29fee968", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7548428502cf8f4d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/authFetch.js:2"}, "properties": {"repobilityId": "b9f4ee1c6db50498", "scanner": "scanner-primary", "fingerprint": "7548428502cf8f4d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae4a20828aec857e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/api.js:1163"}, "properties": {"repobilityId": "4101da6293fc80a6", "scanner": "scanner-primary", "fingerprint": "ae4a20828aec857e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-45a5db513d691560", "level": "note", "message": {"text": "85 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "1a174a1457848da7", "scanner": "scanner-primary", "fingerprint": "45a5db513d691560", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-ebae9455be9cbd9b", "level": "error", "message": {"text": "Dangling fetch: POST https://${AZURE_SPEECH_REGION}.tts.speech.microsoft.com/cognitiveservices/v1 (api/voices/preview.js:87)"}, "properties": {"repobilityId": "6d2d6ce215da38d9", "scanner": "scanner-primary", "fingerprint": "ebae9455be9cbd9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee5de7ba2e96b284", "level": "error", "message": {"text": "Dangling fetch: GET https://${AZURE_SPEECH_REGION}.tts.speech.microsoft.com/cognitiveservices/voices/list (api/voices/list.js:42)"}, "properties": {"repobilityId": "1cd3b46bde61bb1a", "scanner": "scanner-primary", "fingerprint": "ee5de7ba2e96b284", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-159d1c8de12e4f6d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.x.ai/v1/tts (services/tts-service.cjs:226)"}, "properties": {"repobilityId": "9c1258f3befc6a48", "scanner": "scanner-primary", "fingerprint": "159d1c8de12e4f6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3dfd3a5f920d9aa9", "level": "error", "message": {"text": "Dangling fetch: GET https://${azureRegion}.tts.speech.microsoft.com/cognitiveservices/voices/list (services/voice-discovery-service.cjs:128)"}, "properties": {"repobilityId": "472503cd5741e6b9", "scanner": "scanner-primary", "fingerprint": "3dfd3a5f920d9aa9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2eb1aafb7d574d4a", "level": "error", "message": {"text": "Dangling fetch: GET https://uptime.betterstack.com/api/v2/monitors (services/production-api.cjs:10556)"}, "properties": {"repobilityId": "504f9a17d45ee63d", "scanner": "scanner-primary", "fingerprint": "2eb1aafb7d574d4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3fa1fc4e052201d2", "level": "error", "message": {"text": "Dangling fetch: GET https://uptime.betterstack.com/api/v2/incidents?from=${encodeURIComponent(since)} (services/production-api.cjs:10557)"}, "properties": {"repobilityId": "13650f95627189af", "scanner": "scanner-primary", "fingerprint": "3fa1fc4e052201d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5360088525f83976", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3471/api/course/${courseCode}/components/gaps?limit=5&include_partial=true (services/briefs/component-backfill.cjs:42)"}, "properties": {"repobilityId": "f564576a08170981", "scanner": "scanner-primary", "fingerprint": "5360088525f83976", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd2b9d5362120f85", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:${PORT}/phase-complete (services/orchestration/orchestrator.cjs:2684)"}, "properties": {"repobilityId": "2969fd24090d01e5", "scanner": "scanner-primary", "fingerprint": "dd2b9d5362120f85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-bb7188ab57a6b4eb", "level": "error", "message": {"text": "Dangling fetch: GET https://iso639-3.sil.org/sites/iso639-3/files/downloads/iso-639-3.tab (services/orchestration/orchestrator.cjs:5242)"}, "properties": {"repobilityId": "f3fbae4a8b2afb65", "scanner": "scanner-primary", "fingerprint": "bb7188ab57a6b4eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-03fc5f3abe7124f8", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:4040/api/tunnels (services/orchestration/orchestrator.cjs:10895)"}, "properties": {"repobilityId": "77d1a0cd2bdb9aaa", "scanner": "scanner-primary", "fingerprint": "03fc5f3abe7124f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6b7aa9f41ac209f2", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1 (services/phases/phase8-audio-v13.cjs:3124)"}, "properties": {"repobilityId": "67617fb6725ffc90", "scanner": "scanner-primary", "fingerprint": "6b7aa9f41ac209f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4da69e228478b7c", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1 (services/phases/phase8-audio-v13.cjs:3654)"}, "properties": {"repobilityId": "f5eb8b66a54a8d19", "scanner": "scanner-primary", "fingerprint": "e4da69e228478b7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f2ca5bba62031da", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3470/api/production/${courseCode}/audio-stats?fresh=1 (services/phases/phase8-audio-v13.cjs:3935)"}, "properties": {"repobilityId": "e64fa99172e04d54", "scanner": "scanner-primary", "fingerprint": "3f2ca5bba62031da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a049c35564ec225", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3470/api/production/internal/emit (services/course-builder/context.cjs:42)"}, "properties": {"repobilityId": "fa33a5f917d020ba", "scanner": "scanner-primary", "fingerprint": "2a049c35564ec225", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcc737217e784908", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${ctx.config.PORT || 3471}/api/course/${courseCode}/translate?limit=1 (services/course-builder/routes/build.cjs:445)"}, "properties": {"repobilityId": "c9a12ea11a053dca", "scanner": "scanner-primary", "fingerprint": "fcc737217e784908", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-636db393219c2057", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:${port}/api/build/golden/${courseCode}?target=10&phase=calibration (services/course-builder/routes/translation.cjs:585)"}, "properties": {"repobilityId": "5c688552052c568f", "scanner": "scanner-primary", "fingerprint": "636db393219c2057", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f089f2364d4a9240", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:${port}/api/build/golden/${courseCode}?target=50&phase=golden (services/course-builder/routes/golden.cjs:359)"}, "properties": {"repobilityId": "640f17a78dfffdc6", "scanner": "scanner-primary", "fingerprint": "f089f2364d4a9240", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af11ad5d662baf73", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:${port}/api/seed/complete?course=${courseCode}&skip_validation=true (services/course-builder/routes/golden.cjs:534)"}, "properties": {"repobilityId": "8992d9231e378fbf", "scanner": "scanner-primary", "fingerprint": "af11ad5d662baf73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48f3c5287e084747", "level": "error", "message": {"text": "Dangling fetch: GET /api/course/legos (src/services/seedService.js:38)"}, "properties": {"repobilityId": "48fcfaf170bde609", "scanner": "scanner-primary", "fingerprint": "48f3c5287e084747", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-25b9a1c6d20dfee2", "level": "note", "message": {"text": "Unused endpoint: USE /api/production/:courseCode/voice-engine"}, "properties": {"repobilityId": "e7fadfe3c2536273", "scanner": "scanner-primary", "fingerprint": "25b9a1c6d20dfee2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-987b259093ed0904", "level": "note", "message": {"text": "Unused endpoint: USE /api/production/:courseCode/team"}, "properties": {"repobilityId": "5006ba867689a22f", "scanner": "scanner-primary", "fingerprint": "987b259093ed0904", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-44cbfa72320dfc88", "level": "note", "message": {"text": "Unused endpoint: GET /api/production/:courseCode/pods/coverage"}, "properties": {"repobilityId": "1c1b6fd710daaf47", "scanner": "scanner-primary", "fingerprint": "44cbfa72320dfc88", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-84f771191278bd08", "level": "note", "message": {"text": "Unused endpoint: USE /api/production/:courseCode/pods"}, "properties": {"repobilityId": "71b3a1b50f136b42", "scanner": "scanner-primary", "fingerprint": "84f771191278bd08", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd55aa0818a7c897", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/login"}, "properties": {"repobilityId": "3ec3263db1546af9", "scanner": "scanner-primary", "fingerprint": "fd55aa0818a7c897", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ef246efd482a2902", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/generate-code"}, "properties": {"repobilityId": "343f711e211348e8", "scanner": "scanner-primary", "fingerprint": "ef246efd482a2902", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90b4cc64d237a246", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/invite-dashboard"}, "properties": {"repobilityId": "92e4da0078657b23", "scanner": "scanner-primary", "fingerprint": "90b4cc64d237a246", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdf17788cd5c7e55", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/invite"}, "properties": {"repobilityId": "483bbc4a5095c42c", "scanner": "scanner-primary", "fingerprint": "cdf17788cd5c7e55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-73ae1f0610551460", "level": "note", "message": {"text": "Unused endpoint: PUT /api/auth/invite"}, "properties": {"repobilityId": "5795552186c7b281", "scanner": "scanner-primary", "fingerprint": "73ae1f0610551460", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-244b71272cc50aba", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/users"}, "properties": {"repobilityId": "b60c2388e9bbe303", "scanner": "scanner-primary", "fingerprint": "244b71272cc50aba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81bf1f1827f396c0", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/auth/users"}, "properties": {"repobilityId": "debfbbe03e9952d2", "scanner": "scanner-primary", "fingerprint": "81bf1f1827f396c0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5a39262ac205120", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/logout"}, "properties": {"repobilityId": "a876a4e095cb9211", "scanner": "scanner-primary", "fingerprint": "d5a39262ac205120", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a89ba1d33243a3c8", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/invite-codes/generate"}, "properties": {"repobilityId": "66aeb435b18ba4b1", "scanner": "scanner-primary", "fingerprint": "a89ba1d33243a3c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90c28a6f1b621466", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/invite-codes"}, "properties": {"repobilityId": "c5916295ef5b9fbb", "scanner": "scanner-primary", "fingerprint": "90c28a6f1b621466", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-946375315718a8a2", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/invite-codes/redeem"}, "properties": {"repobilityId": "b2d705cdfad4cee4", "scanner": "scanner-primary", "fingerprint": "946375315718a8a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-89ec203c96b8abbb", "level": "note", "message": {"text": "Unused endpoint: GET /api/production/health"}, "properties": {"repobilityId": "082522f720d2f83f", "scanner": "scanner-primary", "fingerprint": "89ec203c96b8abbb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38090198533deac7", "level": "note", "message": {"text": "Unused endpoint: GET /api/production/schema/validate"}, "properties": {"repobilityId": "a8f957e4ce4f43bd", "scanner": "scanner-primary", "fingerprint": "38090198533deac7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6b1ba0df1e9977d", "level": "note", "message": {"text": "Unused endpoint: GET /api/courses"}, "properties": {"repobilityId": "377817c42285cdf4", "scanner": "scanner-primary", "fingerprint": "e6b1ba0df1e9977d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-291ebdae32e7c5d8", "level": "note", "message": {"text": "Unused endpoint: GET /api/courses/:courseCode/stats"}, "properties": {"repobilityId": "7f9401d5218059e4", "scanner": "scanner-primary", "fingerprint": "291ebdae32e7c5d8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c4f75b3cf30b946", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/courses/:courseCode/platform-status"}, "properties": {"repobilityId": "a6f8fc70fe47fd76", "scanner": "scanner-primary", "fingerprint": "0c4f75b3cf30b946", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26c3a9d099b799dc", "level": "note", "message": {"text": "Unused endpoint: GET /api/stats/:courseCode"}, "properties": {"repobilityId": "3cd1256db95946b8", "scanner": "scanner-primary", "fingerprint": "26c3a9d099b799dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c5c81481d330cc5", "level": "note", "message": {"text": "Unused endpoint: ALL /api/build/*"}, "properties": {"repobilityId": "75e1bcd7ae24661e", "scanner": "scanner-primary", "fingerprint": "5c5c81481d330cc5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a672240da91a927", "level": "note", "message": {"text": "Unused endpoint: ALL /api/v2/*"}, "properties": {"repobilityId": "946c52f0fe1cf27b", "scanner": "scanner-primary", "fingerprint": "4a672240da91a927", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d4c5d0aec8d6a5ce", "level": "note", "message": {"text": "Unused endpoint: ALL /api/golden/*"}, "properties": {"repobilityId": "71210bcb9db09140", "scanner": "scanner-primary", "fingerprint": "d4c5d0aec8d6a5ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ad9bd7184ee6c9f", "level": "note", "message": {"text": "Unused endpoint: ALL /api/phrases/*"}, "properties": {"repobilityId": "fbfc4dc186f53c16", "scanner": "scanner-primary", "fingerprint": "2ad9bd7184ee6c9f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6b3c9d39affc1663", "level": "note", "message": {"text": "Unused endpoint: ALL /api/legos/*"}, "properties": {"repobilityId": "c0f9758c5c91b513", "scanner": "scanner-primary", "fingerprint": "6b3c9d39affc1663", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db446c01ef7e2e0b", "level": "note", "message": {"text": "Unused endpoint: ALL /api/agents"}, "properties": {"repobilityId": "c6b02cf951d50ee8", "scanner": "scanner-primary", "fingerprint": "db446c01ef7e2e0b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0db6bf90b78b6d77", "level": "note", "message": {"text": "Unused endpoint: ALL /api/agents/*"}, "properties": {"repobilityId": "f6702b5dd71022b9", "scanner": "scanner-primary", "fingerprint": "0db6bf90b78b6d77", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-095d75e80dbd477d", "level": "note", "message": {"text": "Unused endpoint: ALL /api/orchestrator/*"}, "properties": {"repobilityId": "109a7fccabccae10", "scanner": "scanner-primary", "fingerprint": "095d75e80dbd477d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a16805ab6f57d52", "level": "note", "message": {"text": "Unused endpoint: ALL /api/qa/*"}, "properties": {"repobilityId": "421a3a16364619c1", "scanner": "scanner-primary", "fingerprint": "4a16805ab6f57d52", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8796c1afc5deb3d4", "level": "note", "message": {"text": "Unused endpoint: ALL /api/course/*"}, "properties": {"repobilityId": "9f762378d2fffc19", "scanner": "scanner-primary", "fingerprint": "8796c1afc5deb3d4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa92adefbb8cbb33", "level": "note", "message": {"text": "Unused endpoint: ALL /api/seeds/*"}, "properties": {"repobilityId": "a009759a4ee09b43", "scanner": "scanner-primary", "fingerprint": "fa92adefbb8cbb33", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dc84a5593d918d00", "level": "note", "message": {"text": "Unused endpoint: GET /api/languages"}, "properties": {"repobilityId": "d244ae0d639026ae", "scanner": "scanner-primary", "fingerprint": "dc84a5593d918d00", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-80f797e6de25f4ef", "level": "note", "message": {"text": "Unused endpoint: POST /api/courses/create"}, "properties": {"repobilityId": "9a9191c441eaef60", "scanner": "scanner-primary", "fingerprint": "80f797e6de25f4ef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56f70e9bfb0e08a7", "level": "note", "message": {"text": "Unused endpoint: GET /api/courses/:courseCode/voice-config"}, "properties": {"repobilityId": "1152aaff7be0458d", "scanner": "scanner-primary", "fingerprint": "56f70e9bfb0e08a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-761e8cb3d556f67e", "level": "note", "message": {"text": "Unused endpoint: PUT /api/courses/:courseCode/voice-config"}, "properties": {"repobilityId": "7ceb451ed1ed451a", "scanner": "scanner-primary", "fingerprint": "761e8cb3d556f67e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87ef42c47d486abc", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/courses/:courseCode/voice-config/:role"}, "properties": {"repobilityId": "30deb5d9ee20f8d1", "scanner": "scanner-primary", "fingerprint": "87ef42c47d486abc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d550a66bcc46ce8", "level": "note", "message": {"text": "Unused endpoint: GET /api/voices/discover/:language"}, "properties": {"repobilityId": "52ed3d39e7af580e", "scanner": "scanner-primary", "fingerprint": "2d550a66bcc46ce8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bfc1af513eee607e", "level": "note", "message": {"text": "Unused endpoint: GET /api/courses/:courseCode/seed-phrases-preview"}, "properties": {"repobilityId": "ddbc56f8994706ec", "scanner": "scanner-primary", "fingerprint": "bfc1af513eee607e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b31cb745aa712a4a", "level": "note", "message": {"text": "Unused endpoint: POST /api/voices/preview"}, "properties": {"repobilityId": "fc9c65db6bb21a1a", "scanner": "scanner-primary", "fingerprint": "b31cb745aa712a4a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ae999694935cbd0d", "level": "note", "message": {"text": "Unused endpoint: GET /api/mission-control/jobs"}, "properties": {"repobilityId": "3b66720bde7a2679", "scanner": "scanner-primary", "fingerprint": "ae999694935cbd0d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d6304a96c902c8d", "level": "note", "message": {"text": "Unused endpoint: POST /api/mission-control/jobs/:jobId/stop"}, "properties": {"repobilityId": "cdbb9eb9c81524a3", "scanner": "scanner-primary", "fingerprint": "2d6304a96c902c8d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f883759d3de2bdc5", "level": "note", "message": {"text": "Unused endpoint: POST /api/mission-control/jobs/:jobId/resume"}, "properties": {"repobilityId": "882fe5d8317f8780", "scanner": "scanner-primary", "fingerprint": "f883759d3de2bdc5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-595e5eac329b3348", "level": "note", "message": {"text": "Unused endpoint: POST /api/mission-control/jobs/:jobId/clear"}, "properties": {"repobilityId": "dae8984f263a0a64", "scanner": "scanner-primary", "fingerprint": "595e5eac329b3348", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1625f7521c9ab6bb", "level": "note", "message": {"text": "Unused endpoint: GET /api/services"}, "properties": {"repobilityId": "1af7b9fb766fe9f1", "scanner": "scanner-primary", "fingerprint": "1625f7521c9ab6bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac8abe0914558723", "level": "note", "message": {"text": "Unused endpoint: POST /api/services/:name/restart"}, "properties": {"repobilityId": "e367a69c78b824d4", "scanner": "scanner-primary", "fingerprint": "ac8abe0914558723", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-794cca9f3df9fcd0", "level": "note", "message": {"text": "Unused endpoint: GET /api/services/:name/logs"}, "properties": {"repobilityId": "fed92e8e5e35e741", "scanner": "scanner-primary", "fingerprint": "794cca9f3df9fcd0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a87e60b297cd2de", "level": "note", "message": {"text": "Unused endpoint: POST /api/deploy"}, "properties": {"repobilityId": "490195a69b6a86f8", "scanner": "scanner-primary", "fingerprint": "7a87e60b297cd2de", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6152f204d49e4bc2", "level": "note", "message": {"text": "Unused endpoint: GET /api/production/course-stats"}, "properties": {"repobilityId": "a78bc28a126c6324", "scanner": "scanner-primary", "fingerprint": "6152f204d49e4bc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c58b4f045519f045", "level": "note", "message": {"text": "Unused endpoint: GET /api/production/:courseCode/stats"}, "properties": {"repobilityId": "e72e70ee8ee2c942", "scanner": "scanner-primary", "fingerprint": "c58b4f045519f045", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}