{"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: skoigi2/property-manager", "shortDescription": {"text": "Foundry mined unresolved feedback: skoigi2/property-manager"}, "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: supported_by_verification_signal\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#7\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#7\nRepo: skoigi2/property-manager\nIssue/PR number: 7\nGraph consistency label: supported_by_verification_signal\nNodes: 34\nEdges: 73\nNode types: {'pr_file': 11, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain':"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: skoigi2/property-manager", "shortDescription": {"text": "Foundry mined blueprint gap alignment: skoigi2/property-manager"}, "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: supported_by_verification_signal\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#7\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#7\nRepo: skoigi2/property-manager\nIssue/PR number: 7\nGraph consistency label: supported_by_verification_signal\nNodes: 34\nEdges: 73\nNode types: {'pr_file': 11, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_cha"}, "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: skoigi2/property-manager", "shortDescription": {"text": "Foundry mined test ci gap after feedback: skoigi2/property-manager"}, "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: supported_by_verification_signal\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#6\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: skoigi2/property-manager\nThread: skoigi2/property-manager#6\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#6\nRepo: skoigi2/property-manager\nIssue/PR number: 6\nGraph consistency label: supported_by_verification_signal\nNodes: 47\nEdges: 90\nNode types: {'pr_file': 24, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, "}, "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: skoigi2/property-manager", "shortDescription": {"text": "Foundry mined schema ui api mismatch: skoigi2/property-manager"}, "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: supported_by_verification_signal\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#7\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#7\nRepo: skoigi2/property-manager\nIssue/PR number: 7\nGraph consistency label: supported_by_verification_signal\nNodes: 34\nEdges: 73\nNode types: {'pr_file': 11, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'threa"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: skoigi2/property-manager", "shortDescription": {"text": "Foundry mined bad chains: skoigi2/property-manager"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#3\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: skoigi2/property-manager#3\nRepo: skoigi2/property-manager\nThread label: thread_has_human_issue_and_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 6\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1, 'agent_instruction_gap': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'docs_or_claims': 1, 'ui_or_frontend': 4, 'api_or_backend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7c76e80a14bc4e7a\",\n "}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_auth_guardrail_gap", "name": "Foundry mined security auth guardrail gaps: skoigi2/property-manager", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: skoigi2/property-manager"}, "fullDescription": {"text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#3\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#3\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#3\nRepo: skoigi2/property-manager\nIssue/PR number: 3\nGraph consistency label: weak_supervision_needs_review\nNodes: 23\nEdges: 53\nNode types: {'pr_file': 6, 'link_quality': 5, 'comment': 3, 'comment_chain': 3, 'commit': 2,"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_fake_real_gap", "name": "Foundry mined mock as real or placeholder: skoigi2/property-manager", "shortDescription": {"text": "Foundry mined mock as real or placeholder: skoigi2/property-manager"}, "fullDescription": {"text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_verification_signal\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#4\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#4\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#4\nRepo: skoigi2/property-manager\nIssue/PR number: 4\nGraph consistency label: supported_by_verification_signal\nNodes: 110\nEdges: 151\nNode types: {'pr_file': 94, 'commit': 4, 'link_quality': 4, '"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "critical", "confidence": 0.82, "cwe": "", "owasp": ""}}, {"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80d22c826ee45faa", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-property-access.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-property-access.ts:24"}, "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-f27a80c58d893544", "name": "Stray `console.log` in TS/JS \u2014 scripts/capture-screenshots.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/capture-screenshots.js:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae0f42ad321c5764", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-invoice-case-links.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-invoice-case-links.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af0ae11cdc93f7c4", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-case-stages.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-case-stages.ts:105"}, "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-e9b8ab8409112c28", "name": "Stray `console.log` in TS/JS \u2014 scripts/capture-missing.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/capture-missing.js:13"}, "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-a58d4df640949cbf", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-cases.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-cases.ts: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-6a0fb3b3e6af76fd", "name": "Stray `console.log` in TS/JS \u2014 scripts/codemod-write-gate.js:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/codemod-write-gate.js:110"}, "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-99821fe0bcfe1574", "name": "Stray `console.log` in TS/JS \u2014 scripts/wipe-property-expenses.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wipe-property-expenses.ts: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-2ab275797bcbb192", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-case-terminal-reasons.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-case-terminal-reasons.ts: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-39c07ee16bfcc201", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-bahrain.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-bahrain.ts:15"}, "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-2179a6afa3729192", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-mayfair.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-mayfair.ts:13"}, "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-4fc01e4070ac8e26", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts: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-e25abd5347fd4ce8", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed-demo.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-demo.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7910a6872bfc005f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TaxConfigPanel.tsx:362", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TaxConfigPanel.tsx:362"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f35f6d46608cbe58", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/MobileNav.tsx:198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/MobileNav.tsx:198"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f70887c37070c8f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/InviteBanner.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/InviteBanner.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32eaa44bfe37cef3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/GlobalSearch.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/GlobalSearch.tsx:191"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2354d6a3ff914f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:252", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:252"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b350ee69ba021e4e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Header.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Header.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98b9f0ac04a1ccb5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/blog/BlogPost.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/blog/BlogPost.tsx:42"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e07c4adce843b8b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/shared.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/shared.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-422c7f65d2d9a633", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/CaseListView.tsx:16", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/CaseListView.tsx:16"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae644f8d9a2568f8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/guests/GuestPanel.tsx:332", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guests/GuestPanel.tsx:332"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-455e8d7329eef7d7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/tenants/DocumentList.tsx:85", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tenants/DocumentList.tsx:85"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8330a60dde1c0180", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/tenants/CommunicationLogTab.tsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tenants/CommunicationLogTab.tsx:222"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0b9c8d50eee4cc3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/VendorSelect.tsx:187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/VendorSelect.tsx:187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9235c5cb1b1811fb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/SetupChecklist.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/SetupChecklist.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0d2e7defa14416a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/landing/ShiftSection.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/landing/ShiftSection.tsx:64"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de2bf8d74adb5d31", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/expenses/ExpenseDocumentList.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/expenses/ExpenseDocumentList.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7ae9592226d93fa8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/inbox/InboxActions.tsx:326", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inbox/InboxActions.tsx:326"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f84370e81eb836a", "name": "Icon-only button without accessible name \u2014 src/components/invoices/ProofVerifyDrawer.tsx:123", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/invoices/ProofVerifyDrawer.tsx:123"}, "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-3551cf698502f488", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(portal)/portal/[token]/page.tsx:422", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(portal)/portal/[token]/page.tsx:422"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4724512900ad988", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/notifications/route.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/notifications/route.ts:83"}, "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-a79e3b7915691187", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/users/page.tsx:412", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/users/page.tsx:412"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-00d35b8cea4ff9e7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/api/page.tsx:268", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/api/page.tsx:268"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-079f329a1c420ecb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/audit/page.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/audit/page.tsx:99"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3b4f0d0b61fd744", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/tenants/page.tsx:593", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/tenants/page.tsx:593"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1af92118d66b8615", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/income/page.tsx:1995", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/income/page.tsx:1995"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-919f776de5c9ce0b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/import/page.tsx:934", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/import/page.tsx:934"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa03b4b305aae84b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/vendors/page.tsx:386", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/vendors/page.tsx:386"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64029cba18c34b9f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/assets/page.tsx:273", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/assets/page.tsx:273"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2efcbc2674c08bde", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/insurance/page.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/insurance/page.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-395fd646adf3107d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/airbnb/page.tsx:625", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/airbnb/page.tsx:625"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2906b8e6118ba2cc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/emails/page.tsx:239", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/emails/page.tsx:239"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cbaa56e20f554712", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/organizations/page.tsx:1178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/organizations/page.tsx:1178"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-adff26b8b4d92432", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/forecast/page.tsx:156", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/forecast/page.tsx:156"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f382f59f73c78e0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/expenses/page.tsx:891", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/expenses/page.tsx:891"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a7f46338dd80bbc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/maintenance/page.tsx:274", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/maintenance/page.tsx:274"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f67181de5848c524", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/automations/page.tsx:306", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/automations/page.tsx:306"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56bf93fd0e460120", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/properties/page.tsx:906", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/properties/page.tsx:906"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1de724fedac5421", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/calendar/page.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/calendar/page.tsx:87"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e533e19aa5486c6d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(auth)/select-org/page.tsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(auth)/select-org/page.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0584a72ede940a8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(marketing)/page.tsx:83", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(marketing)/page.tsx:83"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f28be20e9fb9da23", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(marketing)/tools/airbnb-vs-long-term-rental-calculator/pa", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(marketing)/tools/airbnb-vs-long-term-rental-calculator/page.tsx:97"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80d8d0faa0712acc", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(marketing)/pricing/layout.tsx:97", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(marketing)/pricing/layout.tsx:97"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a11b1fb50d7a0ed1", "name": "Possible secret in scripts/capture-screenshots.js", "shortDescription": {"text": "Possible secret in scripts/capture-screenshots.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-c17df6b591457078", "name": "Possible secret in scripts/capture-missing.js", "shortDescription": {"text": "Possible secret in scripts/capture-missing.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-76b564a51fc2fef7", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(marketing)/page.tsx:83", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(marketing)/page.tsx:83"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8ab638f1002ac803", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(marketing)/tools/airbnb-vs-long-term-rental-calculator/page.tsx:97", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(marketing)/tools/airbnb-vs-long-term-rental-calculator/page.tsx:97"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-214ad29edf943fef", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/(marketing)/pricing/layout.tsx:97", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(marketing)/pricing/layout.tsx:97"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d39154f6393563fa", "name": "Very large file: src/app/api/demo/seed/route.ts (3453 lines)", "shortDescription": {"text": "Very large file: src/app/api/demo/seed/route.ts (3453 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-85516952eb518265", "name": "Very large file: src/app/(dashboard)/tenants/[id]/page.tsx (1061 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/tenants/[id]/page.tsx (1061 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-3639a82a6009e9bd", "name": "Very large file: src/app/(dashboard)/income/page.tsx (2181 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/income/page.tsx (2181 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-8c8a5f228ecabf7c", "name": "Very large file: src/app/(dashboard)/assets/page.tsx (1338 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/assets/page.tsx (1338 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-37e94c3e0a2bf706", "name": "Very large file: src/app/(dashboard)/airbnb/page.tsx (983 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/airbnb/page.tsx (983 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-06100149a66d4611", "name": "Very large file: src/app/(dashboard)/admin/organizations/page.tsx (1324 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/admin/organizations/page.tsx (1324 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-402a090ffce4a455", "name": "Very large file: src/app/(dashboard)/expenses/page.tsx (1599 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/expenses/page.tsx (1599 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-cdd687a8b219cff1", "name": "Very large file: src/app/(dashboard)/maintenance/page.tsx (1644 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/maintenance/page.tsx (1644 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-a731aea1cdf0f7fc", "name": "Very large file: src/app/(dashboard)/report/page.tsx (1159 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/report/page.tsx (1159 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-87f4db1f0bedf2ba", "name": "Very large file: src/app/(dashboard)/properties/page.tsx (1852 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/properties/page.tsx (1852 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-0a52e601e1d52f54", "name": "Very large file: src/app/(dashboard)/invoices/OwnerInvoicesTab.tsx (1139 lines)", "shortDescription": {"text": "Very large file: src/app/(dashboard)/invoices/OwnerInvoicesTab.tsx (1139 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": "8 test file(s) for 425 source file(s) (ratio 0.02). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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 118 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 261 placeholder/mock markers across 51 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-505bc666a82f9849", "name": "Agent instruction/config may expose a secret: .claude/settings.local.json", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/settings.local.json"}, "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-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a54d33ecafa8d08", "name": "Commented-code block (6 lines) in scripts/backfill-property-access.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/backfill-property-access.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5147b69f3b4b11ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/capture-screenshots.js:148", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/capture-screenshots.js:148"}, "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-bd69bb5a08adf48b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/capture-missing.js:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/capture-missing.js: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-fd89a081a2e336a0", "name": "Commented-code block (14 lines) in scripts/wipe-property-expenses.ts:5", "shortDescription": {"text": "Commented-code block (14 lines) in scripts/wipe-property-expenses.ts: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-e85d6c8379c2f7ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/workbox-bb54ffba.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/workbox-bb54ffba.js:1"}, "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-bba296665e2859b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/guests/GuestPanel.tsx:183", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/guests/GuestPanel.tsx:183"}, "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-d420e2f9fc2da226", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/EmailDraftModal.tsx:139", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/EmailDraftModal.tsx:139"}, "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-c960d6ce8ba680e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/PortalMessagesTab.tsx:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/PortalMessagesTab.tsx:93"}, "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-1772abd3dc7f8d0a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/CommunicationLogTab.tsx:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/CommunicationLogTab.tsx: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-77023e1970ac1440", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/RenewalPipeline.tsx:167", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/RenewalPipeline.tsx:167"}, "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-528ad9ea08d7c9e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/report/OwnerDashboard.tsx:283", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/report/OwnerDashboard.tsx:283"}, "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-7cd9260092a011cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/condition-reports/MoveInWalkthrough.tsx:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/condition-reports/MoveInWalkthrough.tsx:118"}, "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-119065b75390cfce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/inbox/InboxActions.tsx:422", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/inbox/InboxActions.tsx:422"}, "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-ed2b3362fb5e310b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/invoices/ProofVerifyDrawer.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/invoices/ProofVerifyDrawer.tsx:49"}, "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-2f9f762edb6d8426", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(portal)/portal/[token]/page.tsx:303", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(portal)/portal/[token]/page.tsx:303"}, "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-685cd1e521f3cf6d", "name": "Commented-code block (5 lines) in src/app/api/demo/seed/route.ts:3328", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/demo/seed/route.ts:3328"}, "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-116abc997c8dbcab", "name": "Commented-code block (5 lines) in src/app/api/users/route.ts:162", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/users/route.ts:162"}, "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-2c5b7a0f49de6c02", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing/cancel/route.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing/cancel/route.ts:27"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f4c3a5eb648fc82", "name": "Commented-code block (5 lines) in src/app/api/invoices/[id]/route.ts:76", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/invoices/[id]/route.ts: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-d2eceab31db700d3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/page.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/page.tsx: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-423364c6da06a6dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/users/page.tsx:162", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/users/page.tsx:162"}, "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-13c83a626f34fd19", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/api/page.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/api/page.tsx:66"}, "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-621e4733a7b1a9d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/audit/page.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/audit/page.tsx:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8061f79133bd49ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/cases/[id]/page.tsx:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/cases/[id]/page.tsx:118"}, "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-05072d886dd3489e", "name": "Commented-code block (5 lines) in src/app/(dashboard)/tenants/page.tsx:71", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/tenants/page.tsx:71"}, "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-787f64b21925d7ab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/tenants/[id]/page.tsx:954", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/tenants/[id]/page.tsx:954"}, "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-825ffe651f45a14f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/income/page.tsx:278", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/income/page.tsx:278"}, "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-19f36460bf919cc0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/import/page.tsx:534", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/import/page.tsx:534"}, "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-c71a623bad2f9c70", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/assets/page.tsx:245", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/assets/page.tsx:245"}, "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-3c477e2758400e5a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/insurance/page.tsx:191", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/insurance/page.tsx:191"}, "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-bd4eae3e8792c433", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/billing/page.tsx:304", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/billing/page.tsx:304"}, "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-58923d7c0a2c3ec7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/airbnb/page.tsx:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/airbnb/page.tsx:109"}, "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-d83a18a1401a0387", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/arrears/page.tsx:325", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/arrears/page.tsx:325"}, "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-39ee8a478081d0e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/expenses/page.tsx:578", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/expenses/page.tsx:578"}, "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-a112aac7072c0568", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/maintenance/page.tsx:251", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/maintenance/page.tsx:251"}, "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-d501619b6edc4095", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/automations/page.tsx:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/automations/page.tsx:141"}, "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-a0550f42bc8cf779", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/properties/page.tsx:741", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/properties/page.tsx:741"}, "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-0510181752c3cc0e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/properties/[id]/agreement/page.tsx:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/properties/[id]/agreement/page.tsx:114"}, "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-2d291561da962128", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/recurring-expenses/page.tsx:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/recurring-expenses/page.tsx:108"}, "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-393a77714281389a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/petty-cash/page.tsx:230", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/petty-cash/page.tsx:230"}, "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-ff09f8d623921b8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/invoices/page.tsx:364", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/invoices/page.tsx:364"}, "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-eb4a1e7e0e60ddc1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/invoices/OwnerInvoicesTab.tsx:826", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/invoices/OwnerInvoicesTab.tsx:826"}, "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-d2aa58b2196754e4", "name": "Commented-code block (6 lines) in src/lib/auth-utils.ts:91", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/auth-utils.ts:91"}, "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-4fc6d9c28357655f", "name": "Commented-code block (6 lines) in src/lib/paddle.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/paddle.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d244bed0e245323", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/property-context.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/property-context.tsx:60"}, "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-e3e29a8a77780ad2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/use-cached-fetch.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/use-cached-fetch.ts:35"}, "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-5297ac70b20fbf71", "name": "Commented-code block (6 lines) in src/lib/prisma-decimal-extension.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/prisma-decimal-extension.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-506832b1714fc2b0", "name": "Legacy-named symbol `daysOld` in src/lib/inbox.ts:463", "shortDescription": {"text": "Legacy-named symbol `daysOld` in src/lib/inbox.ts:463"}, "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-566b4d506b9919e6", "name": "Commented-code block (6 lines) in src/lib/automation-registry.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/automation-registry.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac7a04383fbf3fa5", "name": "Commented-code block (5 lines) in src/lib/rental-calculator.ts:168", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/rental-calculator.ts:168"}, "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-3bbaad35b177374c", "name": "Commented-code block (6 lines) in src/lib/prisma.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/prisma.ts: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-9cac7ce15e72817b", "name": "31 env vars used in code but missing from .env.example", "shortDescription": {"text": "31 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CRON_SECRET`, `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, `NEXT_PUBLIC_PADDLE_CLIENT_TOKEN`, `NEXT_PUBLIC_PADDLE_ENVIRONMENT`, `NEXT_PUBLIC_PADDLE_PRICE_GROWTH_ANNUAL`, `NEXT_PUBLIC_PADDLE_PRICE_GROWTH_MONTHLY`, `NEXT_PUBLIC_PADDLE_PRICE_PRO_ANNUAL` + 23 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}}]}}, "automationDetails": {"id": "repobility/19806"}, "properties": {"repository": "skoigi2/property-manager", "repoUrl": "https://github.com/skoigi2/property-manager", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: skoigi2/property-manager"}, "properties": {"repobilityId": 370183, "scanner": "foundry_dataset", "fingerprint": "0f154e164ae5c508fc98b7009bf58cebe69829b03ee60e57a817ff80ef3f6c28", "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": 1, "api_or_backend": 3, "schema_or_data": 3, "ui_or_frontend": 5, "deployment_env_gap": 1, "verification_or_tests": 2, "data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 73, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 11, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 11, "thread_has_comment_chain": 2, "comment_chain_links_commit": 5, "comment_chain_touches_file": 22, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 34, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 11, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#7", "issue_number": "7", "quality_tiers": {"unresolved": 1, "assumption_check": 2, "weak_supervision": 3}, "repo_full_name": "skoigi2/property-manager", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-fb8a5fdb55c88c64", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 15, "schema_or_data": 15, "ui_or_frontend": 25}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#7\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#7\nRepo: skoigi2/property-manager\nIssue/PR number: 7\nGraph consistency label: supported_by_verification_signal\nNodes: 34\nEdges: 73\nNode types: {'pr_file': 11, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 22, 'thread_touches_file': 11, 'issue_chain_touches_file': 11, 'chain_has_link_quality': 6, 'comment_chain_links_commit': 5, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'ui_or_frontend': 5, 'schema_or_data': 3, 'api_or_backend': 3, 'claimed_resolved_with_verification_signal': 3, 'bug_fix': 2, 'verification_or_tests': 2, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 2, 'unresolved': 1}\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/skoigi2/property-manager", "source_id": "graph-query-motif_query-a227a25b2f65ce39", "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": "skoigi2/property-manager", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: skoigi2/property-manager"}, "properties": {"repobilityId": 370182, "scanner": "foundry_dataset", "fingerprint": "bb7d714e6447f35f64273075cd7a0e4ca281cb9f99e63bb8957a11899fbb4468", "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, "api_or_backend": 1, "docs_or_claims": 1, "ui_or_frontend": 4, "deployment_env_gap": 1, "security_auth_secret": 1, "agent_instruction_gap": 1, "claimed_resolved_unverified": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"claimed_resolved_unverified": 2, "not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 53, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 6, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 6, "thread_has_comment_chain": 3, "comment_chain_links_commit": 2, "comment_chain_touches_file": 18, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 23, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 3, "pr_file": 6, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#3", "issue_number": "3", "quality_tiers": {"unresolved": 2, "weak_supervision": 3}, "repo_full_name": "skoigi2/property-manager", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-e8df346810e37f63", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 6, "docs_or_claims": 6, "ui_or_frontend": 24}}, "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: weak_supervision_needs_review\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#3\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: skoigi2/property-manager\nThread: skoigi2/property-manager#3\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#3\nRepo: skoigi2/property-manager\nIssue/PR number: 3\nGraph consistency label: weak_supervision_needs_review\nNodes: 23\nEdges: 53\nNode types: {'pr_file': 6, 'link_quality': 5, 'comment': 3, 'comment_chain': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 18, 'thread_touches_file': 6, 'issue_chain_touches_file': 6, 'chain_has_link_quality': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'comment_chain_links_commit': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 4, 'not_resolved_or_not_observed': 4, 'bug_fix': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'agent_instruction_gap': 1, 'docs_or_claims': 1, 'api_or_backend': 1, 'human_reported_issue_then_fix_attempt': 1, 'claimed_resolved_unverified': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_unverified': 2}\nQuality tiers: {'weak_supervision': 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/skoigi2/property-manager", "source_id": "graph-query-motif_query-a133384d28b6324e", "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": "skoigi2/property-manager", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: skoigi2/property-manager"}, "properties": {"repobilityId": 356100, "scanner": "foundry_dataset", "fingerprint": "825bc7baf82c81740fe204b02daa72448cc920da489671f5375bd7d6c879ad8c", "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": 1, "api_or_backend": 3, "schema_or_data": 3, "ui_or_frontend": 5, "deployment_env_gap": 1, "verification_or_tests": 2, "data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 73, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 11, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 11, "thread_has_comment_chain": 2, "comment_chain_links_commit": 5, "comment_chain_touches_file": 22, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 34, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 11, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#7", "issue_number": "7", "quality_tiers": {"unresolved": 1, "assumption_check": 2, "weak_supervision": 3}, "repo_full_name": "skoigi2/property-manager", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-e92b115fe1cc916d", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 15, "schema_or_data": 15, "ui_or_frontend": 25}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#7\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#7\nRepo: skoigi2/property-manager\nIssue/PR number: 7\nGraph consistency label: supported_by_verification_signal\nNodes: 34\nEdges: 73\nNode types: {'pr_file': 11, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 22, 'thread_touches_file': 11, 'issue_chain_touches_file': 11, 'chain_has_link_quality': 6, 'comment_chain_links_commit': 5, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'ui_or_frontend': 5, 'schema_or_data': 3, 'api_or_backend': 3, 'claimed_resolved_with_verification_signal': 3, 'bug_fix': 2, 'verification_or_tests': 2, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 2, 'unresolved': 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/skoigi2/property-manager", "source_id": "graph-query-motif_query-86cb264e50cd9515", "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": "skoigi2/property-manager", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: skoigi2/property-manager"}, "properties": {"repobilityId": 356099, "scanner": "foundry_dataset", "fingerprint": "afa526b4111414b923b7ac9950de604bf724d30c4857e555251133b2e5922c64", "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, "test_ci_gap": 1, "api_or_backend": 9, "docs_or_claims": 1, "schema_or_data": 3, "ui_or_frontend": 11, "deployment_env_gap": 1, "verification_or_tests": 4, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_disagreement": 2, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 90, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 24, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 6, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 47, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 24, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#6", "issue_number": "6", "quality_tiers": {"high_confidence": 3, "assumption_check": 2, "weak_supervision": 1}, "repo_full_name": "skoigi2/property-manager", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-ef22fac31f3ec59a", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 45, "docs_or_claims": 5, "schema_or_data": 15, "ui_or_frontend": 55}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#6\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#6\nRepo: skoigi2/property-manager\nIssue/PR number: 6\nGraph consistency label: supported_by_verification_signal\nNodes: 47\nEdges: 90\nNode types: {'pr_file': 24, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 24, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 6, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'ui_or_frontend': 11, 'api_or_backend': 9, 'verification_or_tests': 4, 'schema_or_data': 3, 'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'bug_fix': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 2, 'weak_supervision': 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/skoigi2/property-manager", "source_id": "graph-query-motif_query-6dcaead6b1510bc1", "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": "skoigi2/property-manager", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: skoigi2/property-manager"}, "properties": {"repobilityId": 356098, "scanner": "foundry_dataset", "fingerprint": "78e6f48985144d167da1e6e3e030fd34eada4748afaf45dcc27bba6a87c96e58", "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": {"data_schema": 1, "api_or_backend": 11, "docs_or_claims": 1, "schema_or_data": 2, "ui_or_frontend": 8, "deployment_env_gap": 1, "verification_or_tests": 4, "data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_disagreement": 2, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 88, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 22, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 6, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 45, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 22, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#5", "issue_number": "5", "quality_tiers": {"high_confidence": 3, "assumption_check": 2, "weak_supervision": 1}, "repo_full_name": "skoigi2/property-manager", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-17a00b4643d6c2e5", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 55, "docs_or_claims": 5, "schema_or_data": 10, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#5\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#5\nRepo: skoigi2/property-manager\nIssue/PR number: 5\nGraph consistency label: supported_by_verification_signal\nNodes: 45\nEdges: 88\nNode types: {'pr_file': 22, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 22, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 6, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'api_or_backend': 11, 'ui_or_frontend': 8, 'verification_or_tests': 4, 'claimed_resolved_with_verification_signal': 3, 'schema_or_data': 2, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 2, 'weak_supervision': 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/skoigi2/property-manager", "source_id": "graph-query-motif_query-996768115b42276e", "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": "skoigi2/property-manager", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: skoigi2/property-manager"}, "properties": {"repobilityId": 356097, "scanner": "foundry_dataset", "fingerprint": "361f4a8c51a1e57eef28228dab34484461287ff87fcb1f3f7f62caa352970b90", "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": 18, "docs_or_claims": 1, "schema_or_data": 4, "ui_or_frontend": 28, "source_or_other": 1, "deployment_env_gap": 1, "verification_or_tests": 4, "data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_disagreement": 2, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 118, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 52, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 6, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 75, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 52, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#2", "issue_number": "2", "quality_tiers": {"high_confidence": 3, "assumption_check": 2, "weak_supervision": 1}, "repo_full_name": "skoigi2/property-manager", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-015b7d92cf997926", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 90, "docs_or_claims": 5, "schema_or_data": 20, "ui_or_frontend": 140, "source_or_other": 5}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#2\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#2\nRepo: skoigi2/property-manager\nIssue/PR number: 2\nGraph consistency label: supported_by_verification_signal\nNodes: 75\nEdges: 118\nNode types: {'pr_file': 52, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 52, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 6, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'ui_or_frontend': 28, 'api_or_backend': 18, 'schema_or_data': 4, 'verification_or_tests': 4, 'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'source_or_other': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'bug_fix': 1, 'comment_has_related_commit_context': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 2, 'weak_supervision': 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/skoigi2/property-manager", "source_id": "graph-query-motif_query-eec7835107af9052", "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": "skoigi2/property-manager", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: skoigi2/property-manager"}, "properties": {"repobilityId": 356096, "scanner": "foundry_dataset", "fingerprint": "6567d60e6d530b218950f153b022b08121f17cc3d552dd01d0b19e14b420ec1c", "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, "api_or_backend": 1, "ui_or_frontend": 2, "source_or_other": 1, "api_integration_gap": 1, "verification_or_tests": 2, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 2, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"claimed_resolved_with_verification_signal": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 36, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 4, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 24, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 4, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#1", "issue_number": "1", "quality_tiers": {"assumption_check": 2, "weak_supervision": 3}, "repo_full_name": "skoigi2/property-manager", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-35b4ccb025a48f90", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 4, "ui_or_frontend": 8, "source_or_other": 4}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#1\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#1\nRepo: skoigi2/property-manager\nIssue/PR number: 1\nGraph consistency label: supported_by_verification_signal\nNodes: 24\nEdges: 36\nNode types: {'commit': 5, 'link_quality': 5, 'pr_file': 4, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'chain_has_link_quality': 5, 'thread_touches_file': 4, 'comment_chain_touches_file': 4, 'issue_chain_touches_file': 4, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'bug_fix': 3, 'claimed_resolved_with_verification_signal': 3, 'ui_or_frontend': 2, 'verification_or_tests': 2, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'source_or_other': 1, 'api_or_backend': 1, 'human_reported_issue_then_verified_fix_attempt': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6}\nQuality tiers: {'weak_supervision': 3, '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/skoigi2/property-manager", "source_id": "graph-query-motif_query-006b9e3818ffe1bc", "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": "skoigi2/property-manager", "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: skoigi2/property-manager"}, "properties": {"repobilityId": 341019, "scanner": "foundry_dataset", "fingerprint": "6670e17a40ee09d212a8a896243f51b511a845b838da776729baa5cda1a0d787", "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": 1, "test_ci_gap": 1, "api_or_backend": 9, "docs_or_claims": 1, "schema_or_data": 3, "ui_or_frontend": 11, "deployment_env_gap": 1, "verification_or_tests": 4, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_disagreement": 2, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 90, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 24, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 6, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 47, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 24, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#6", "issue_number": "6", "quality_tiers": {"high_confidence": 3, "assumption_check": 2, "weak_supervision": 1}, "repo_full_name": "skoigi2/property-manager", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-e80a9a02e52d11c4", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 45, "docs_or_claims": 5, "schema_or_data": 15, "ui_or_frontend": 55}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#6\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: skoigi2/property-manager\nThread: skoigi2/property-manager#6\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#6\nRepo: skoigi2/property-manager\nIssue/PR number: 6\nGraph consistency label: supported_by_verification_signal\nNodes: 47\nEdges: 90\nNode types: {'pr_file': 24, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 24, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 6, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'ui_or_frontend': 11, 'api_or_backend': 9, 'verification_or_tests': 4, 'schema_or_data': 3, 'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'bug_fix': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 2, 'weak_supervision': 1}\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/skoigi2/property-manager", "source_id": "graph-query-motif_query-0e5a9a18fd7be6ac", "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": "skoigi2/property-manager", "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: skoigi2/property-manager"}, "properties": {"repobilityId": 330963, "scanner": "foundry_dataset", "fingerprint": "8364070189ee1cdb37a1728bc95bfde770e568feeec93af5502014b98ef58031", "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": 1, "api_or_backend": 3, "schema_or_data": 3, "ui_or_frontend": 5, "deployment_env_gap": 1, "verification_or_tests": 2, "data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 73, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 11, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 11, "thread_has_comment_chain": 2, "comment_chain_links_commit": 5, "comment_chain_touches_file": 22, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 34, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 11, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#7", "issue_number": "7", "quality_tiers": {"unresolved": 1, "assumption_check": 2, "weak_supervision": 3}, "repo_full_name": "skoigi2/property-manager", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-cf366d916d3a60d1", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 15, "schema_or_data": 15, "ui_or_frontend": 25}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#7\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#7\nRepo: skoigi2/property-manager\nIssue/PR number: 7\nGraph consistency label: supported_by_verification_signal\nNodes: 34\nEdges: 73\nNode types: {'pr_file': 11, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 22, 'thread_touches_file': 11, 'issue_chain_touches_file': 11, 'chain_has_link_quality': 6, 'comment_chain_links_commit': 5, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'ui_or_frontend': 5, 'schema_or_data': 3, 'api_or_backend': 3, 'claimed_resolved_with_verification_signal': 3, 'bug_fix': 2, 'verification_or_tests': 2, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 2, 'unresolved': 1}\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/skoigi2/property-manager", "source_id": "graph-query-motif_query-d74ca6637d47126c", "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": "skoigi2/property-manager", "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: skoigi2/property-manager"}, "properties": {"repobilityId": 330962, "scanner": "foundry_dataset", "fingerprint": "b8914a9fa74fa5e01a3846e427f8b1448dacea0bb7afd4148d0c5d02205d383e", "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": 1, "test_ci_gap": 1, "api_or_backend": 9, "docs_or_claims": 1, "schema_or_data": 3, "ui_or_frontend": 11, "deployment_env_gap": 1, "verification_or_tests": 4, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_disagreement": 2, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 90, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 24, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 6, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 47, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 24, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#6", "issue_number": "6", "quality_tiers": {"high_confidence": 3, "assumption_check": 2, "weak_supervision": 1}, "repo_full_name": "skoigi2/property-manager", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-fef4cbedd59b77bb", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 45, "docs_or_claims": 5, "schema_or_data": 15, "ui_or_frontend": 55}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#6\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#6\nRepo: skoigi2/property-manager\nIssue/PR number: 6\nGraph consistency label: supported_by_verification_signal\nNodes: 47\nEdges: 90\nNode types: {'pr_file': 24, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 24, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 6, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'ui_or_frontend': 11, 'api_or_backend': 9, 'verification_or_tests': 4, 'schema_or_data': 3, 'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'bug_fix': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 2, 'weak_supervision': 1}\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/skoigi2/property-manager", "source_id": "graph-query-motif_query-2457335eeaccc7f6", "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": "skoigi2/property-manager", "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: skoigi2/property-manager"}, "properties": {"repobilityId": 330961, "scanner": "foundry_dataset", "fingerprint": "36c8d3628af68052d9946352448316f91481d795ec0596d7406b28f00d53565f", "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": {"data_schema": 1, "api_or_backend": 11, "docs_or_claims": 1, "schema_or_data": 2, "ui_or_frontend": 8, "deployment_env_gap": 1, "verification_or_tests": 4, "data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_disagreement": 2, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 88, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 22, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 6, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 45, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 22, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#5", "issue_number": "5", "quality_tiers": {"high_confidence": 3, "assumption_check": 2, "weak_supervision": 1}, "repo_full_name": "skoigi2/property-manager", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-3e8b3314f0835fd5", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 55, "docs_or_claims": 5, "schema_or_data": 10, "ui_or_frontend": 40}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#5\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#5\nRepo: skoigi2/property-manager\nIssue/PR number: 5\nGraph consistency label: supported_by_verification_signal\nNodes: 45\nEdges: 88\nNode types: {'pr_file': 22, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 22, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 6, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'api_or_backend': 11, 'ui_or_frontend': 8, 'verification_or_tests': 4, 'claimed_resolved_with_verification_signal': 3, 'schema_or_data': 2, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 2, 'weak_supervision': 1}\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/skoigi2/property-manager", "source_id": "graph-query-motif_query-3e89c3219fa6d9ed", "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": "skoigi2/property-manager", "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: skoigi2/property-manager"}, "properties": {"repobilityId": 330960, "scanner": "foundry_dataset", "fingerprint": "1633dfb99657aad3e75c0ab540e58fe92447ed9f058e26c847db7cc5e7267241", "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": 1, "api_or_backend": 22, "docs_or_claims": 5, "schema_or_data": 7, "ui_or_frontend": 53, "source_or_other": 6, "mock_placeholder": 1, "deployment_env_gap": 1, "dependency_or_build": 1, "verification_or_tests": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 151, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 94, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 5, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 110, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 2, "pr_file": 94, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#4", "issue_number": "4", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "skoigi2/property-manager", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-1027abf5db40f9f0", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 110, "docs_or_claims": 25, "schema_or_data": 35, "ui_or_frontend": 265, "source_or_other": 30, "dependency_or_build": 5}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#4\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#4\nRepo: skoigi2/property-manager\nIssue/PR number: 4\nGraph consistency label: supported_by_verification_signal\nNodes: 110\nEdges: 151\nNode types: {'pr_file': 94, 'commit': 4, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 94, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 5, 'chain_has_link_quality': 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}\nLabels: {'ui_or_frontend': 53, 'api_or_backend': 22, 'schema_or_data': 7, 'source_or_other': 6, 'docs_or_claims': 5, 'claimed_resolved_with_verification_signal': 3, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'dependency_or_build': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'data_schema': 1, 'comment_has_related_commit_context': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\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/skoigi2/property-manager", "source_id": "graph-query-motif_query-574b089d5d522482", "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": "skoigi2/property-manager", "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: skoigi2/property-manager"}, "properties": {"repobilityId": 330959, "scanner": "foundry_dataset", "fingerprint": "c43d5ad358e9ab2239f1280ec5fe355180a0c9b14213e26b1c916863c47b0e43", "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": 1, "api_or_backend": 18, "docs_or_claims": 1, "schema_or_data": 4, "ui_or_frontend": 28, "source_or_other": 1, "deployment_env_gap": 1, "verification_or_tests": 4, "data_schema_persistence": 1, "mostly follows blueprint": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_disagreement": 2, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 118, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 52, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 6, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 75, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 52, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#2", "issue_number": "2", "quality_tiers": {"high_confidence": 3, "assumption_check": 2, "weak_supervision": 1}, "repo_full_name": "skoigi2/property-manager", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-dbcfb4ee5f4e2701", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 90, "docs_or_claims": 5, "schema_or_data": 20, "ui_or_frontend": 140, "source_or_other": 5}}, "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: skoigi2/property-manager\nThread: skoigi2/property-manager#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: skoigi2/property-manager\nThread: skoigi2/property-manager#2\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#2\nRepo: skoigi2/property-manager\nIssue/PR number: 2\nGraph consistency label: supported_by_verification_signal\nNodes: 75\nEdges: 118\nNode types: {'pr_file': 52, 'link_quality': 6, 'commit': 5, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 52, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 6, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, '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: {'ui_or_frontend': 28, 'api_or_backend': 18, 'schema_or_data': 4, 'verification_or_tests': 4, 'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'mostly follows blueprint': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'source_or_other': 1, 'docs_or_claims': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'bug_fix': 1, 'comment_has_related_commit_context': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'assumption_check': 2, 'weak_supervision': 1}\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/skoigi2/property-manager", "source_id": "graph-query-motif_query-987d642c948c2ffc", "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": "skoigi2/property-manager", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: skoigi2/property-manager"}, "properties": {"repobilityId": 322891, "scanner": "foundry_dataset", "fingerprint": "73658b4604b1abe4fd622775053053687f8e58cc0fa574e5349c18e1714c5724", "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": "skoigi2/property-manager#3", "human_labels": ["agent_instruction_gap", "api_or_backend", "deployment_env_gap", "docs_or_claims", "security_auth_secret", "ui_or_frontend"], "issue_number": "3", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.642, "repo_full_name": "skoigi2/property-manager", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-0a36757f28cfaf2b", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 6, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "docs_or_claims": 1, "ui_or_frontend": 4}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#3\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: skoigi2/property-manager#3\nRepo: skoigi2/property-manager\nThread label: thread_has_human_issue_and_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 6\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1, 'agent_instruction_gap': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'docs_or_claims': 1, 'ui_or_frontend': 4, 'api_or_backend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7c76e80a14bc4e7a\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/skoigi2/property-manager/pull/3\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: skoigi2/property-manager\\nAuthor: skoigi2 (User)\\nURL: https://github.com/skoigi2/property-manager/pull/3\\nTitle: Setup Progress: per-property activation checklist + % score\\nBody:\\n## Summary\\n\\nA 0\u2013100% setup score derived from live DB state (units, tenants, portal tokens, recurring expenses, insurance, vendors, agreement, branding, first income/expense entry), surfaced as:\\n\\n- A **dashboard widget** with \u2705/\u26a0 rows + CTAs to the relevant pages\\n- A **compact progress badge** on each row of the Properties list\\n- AIRBNB properties exclude tenant/portal items from the denominator\\n- Hidden for OWNER role\\n- Dismissal at 100% persists in localStorage and auto-reappears if the score drops\\n\\n## Why now\\n\\nThe branch (`claude/quizzical-cartwright-ab503c`, commit `2421255`) has been sitting un-merged since 2026-05-14. It never made it onto main, which is why it's missing from the current deploy.\\n\\n## Files\\n- `src/lib/setup-progress.ts` \u2014 score derivation\\n- `src/app/api/setup-progress/route.ts` \u2014 endpoint\\n- `src/components/dashboard/SetupChecklist.tsx` \u2014 the widget\\n- `src/app/(dashboard)/dashboard/page.tsx` \u2014 mounts the wid\"\n  },\n  {\n    \"id\": \"github-feedback-comment-74f327cb0bad711e\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/skoigi2/property-manager/pull/3#issuecomment-4546046276\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: skoigi2/property-manager\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/skoigi2/property-manager/pull/3#issuecomment-4546046276\\nTitle: \\nBody:\\n[vc]: #7mA7nTNOzCFuMyqONmkPiwDcKoNlOWFCDOFFpHvfUA8=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/skoigi2/property-manager", "source_id": "comment-chain-pattern-bad_chains-534db80574432758", "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": "skoigi2/property-manager", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: skoigi2/property-manager"}, "properties": {"repobilityId": 334908, "scanner": "foundry_dataset", "fingerprint": "fc9e7cf9208dc2c5d5575cfec04d73e0b57182d2d51960bf6495707d580a43a9", "category": "auth", "severity": "critical", "confidence": 0.78, "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": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"bug_fix": 2, "api_or_backend": 1, "docs_or_claims": 1, "ui_or_frontend": 4, "deployment_env_gap": 1, "security_auth_secret": 1, "agent_instruction_gap": 1, "claimed_resolved_unverified": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 2, "not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 53, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 6, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 6, "thread_has_comment_chain": 3, "comment_chain_links_commit": 2, "comment_chain_touches_file": 18, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 23, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 3, "pr_file": 6, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#3", "issue_number": "3", "quality_tiers": {"unresolved": 2, "weak_supervision": 3}, "repo_full_name": "skoigi2/property-manager", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-076d01ab961a2a6b", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 6, "docs_or_claims": 6, "ui_or_frontend": 24}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#3\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#3\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#3\nRepo: skoigi2/property-manager\nIssue/PR number: 3\nGraph consistency label: weak_supervision_needs_review\nNodes: 23\nEdges: 53\nNode types: {'pr_file': 6, 'link_quality': 5, 'comment': 3, 'comment_chain': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 18, 'thread_touches_file': 6, 'issue_chain_touches_file': 6, 'chain_has_link_quality': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'comment_chain_links_commit': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 4, 'not_resolved_or_not_observed': 4, 'bug_fix': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'agent_instruction_gap': 1, 'docs_or_claims': 1, 'api_or_backend': 1, 'human_reported_issue_then_fix_attempt': 1, 'claimed_resolved_unverified': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'claimed_resolved_unverified': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/skoigi2/property-manager", "source_id": "graph-query-motif_query-2aa7c028082aae88", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "skoigi2/property-manager", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: skoigi2/property-manager"}, "properties": {"repobilityId": 327129, "scanner": "foundry_dataset", "fingerprint": "220eba4eb48964c1d39380d38784c0379be0946c80530883cd3da90c5249887f", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"bug_fix": 2, "data_schema": 1, "api_or_backend": 22, "docs_or_claims": 5, "schema_or_data": 7, "ui_or_frontend": 53, "source_or_other": 6, "mock_placeholder": 1, "deployment_env_gap": 1, "dependency_or_build": 1, "verification_or_tests": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 151, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 94, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 5, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 110, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 2, "pr_file": 94, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "skoigi2/property-manager#4", "issue_number": "4", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "skoigi2/property-manager", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-afd3d995e9bc38b8", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"api_or_backend": 110, "docs_or_claims": 25, "schema_or_data": 35, "ui_or_frontend": 265, "source_or_other": 30, "dependency_or_build": 5}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_verification_signal\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#4\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: skoigi2/property-manager\nThread: skoigi2/property-manager#4\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: skoigi2/property-manager#4\nRepo: skoigi2/property-manager\nIssue/PR number: 4\nGraph consistency label: supported_by_verification_signal\nNodes: 110\nEdges: 151\nNode types: {'pr_file': 94, 'commit': 4, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 94, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 5, 'chain_has_link_quality': 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}\nLabels: {'ui_or_frontend': 53, 'api_or_backend': 22, 'schema_or_data': 7, 'source_or_other': 6, 'docs_or_claims': 5, 'claimed_resolved_with_verification_signal': 3, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'dependency_or_build': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'data_schema': 1, 'comment_has_related_commit_context': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/skoigi2/property-manager", "source_id": "graph-query-motif_query-fa114cc95bb51e40", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "skoigi2/property-manager", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-80d22c826ee45faa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-property-access.ts:24"}, "properties": {"repobilityId": "4c0cd6ec801585c3", "scanner": "scanner-primary", "fingerprint": "80d22c826ee45faa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f27a80c58d893544", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/capture-screenshots.js:18"}, "properties": {"repobilityId": "e05cebf902f31bfd", "scanner": "scanner-primary", "fingerprint": "f27a80c58d893544", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae0f42ad321c5764", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-invoice-case-links.ts:12"}, "properties": {"repobilityId": "547c0004af0c3788", "scanner": "scanner-primary", "fingerprint": "ae0f42ad321c5764", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af0ae11cdc93f7c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-case-stages.ts:105"}, "properties": {"repobilityId": "0d8855b026f111f7", "scanner": "scanner-primary", "fingerprint": "af0ae11cdc93f7c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9b8ab8409112c28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/capture-missing.js:13"}, "properties": {"repobilityId": "3a02a6d07669facb", "scanner": "scanner-primary", "fingerprint": "e9b8ab8409112c28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a58d4df640949cbf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-cases.ts:31"}, "properties": {"repobilityId": "afc60341e04ed6cb", "scanner": "scanner-primary", "fingerprint": "a58d4df640949cbf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a0fb3b3e6af76fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/codemod-write-gate.js:110"}, "properties": {"repobilityId": "ea26b412a999f385", "scanner": "scanner-primary", "fingerprint": "6a0fb3b3e6af76fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99821fe0bcfe1574", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/wipe-property-expenses.ts:49"}, "properties": {"repobilityId": "88de7be04905e656", "scanner": "scanner-primary", "fingerprint": "99821fe0bcfe1574", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ab275797bcbb192", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-case-terminal-reasons.ts:43"}, "properties": {"repobilityId": "8de59f641bd8dbe3", "scanner": "scanner-primary", "fingerprint": "2ab275797bcbb192", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39c07ee16bfcc201", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-bahrain.ts:15"}, "properties": {"repobilityId": "43a868371236ca57", "scanner": "scanner-primary", "fingerprint": "39c07ee16bfcc201", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2179a6afa3729192", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-mayfair.ts:13"}, "properties": {"repobilityId": "80c173d5fe8b6aa5", "scanner": "scanner-primary", "fingerprint": "2179a6afa3729192", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4fc01e4070ac8e26", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:7"}, "properties": {"repobilityId": "f77d7e0fb34b08e2", "scanner": "scanner-primary", "fingerprint": "4fc01e4070ac8e26", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e25abd5347fd4ce8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed-demo.ts:22"}, "properties": {"repobilityId": "04408501143ae10b", "scanner": "scanner-primary", "fingerprint": "e25abd5347fd4ce8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7910a6872bfc005f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/TaxConfigPanel.tsx:362"}, "properties": {"repobilityId": "651f15bf5602716b", "scanner": "scanner-primary", "fingerprint": "7910a6872bfc005f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f35f6d46608cbe58", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/MobileNav.tsx:198"}, "properties": {"repobilityId": "ca42c2d61c479917", "scanner": "scanner-primary", "fingerprint": "f35f6d46608cbe58", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f70887c37070c8f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/InviteBanner.tsx:72"}, "properties": {"repobilityId": "fc8b544947bc0924", "scanner": "scanner-primary", "fingerprint": "0f70887c37070c8f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32eaa44bfe37cef3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/GlobalSearch.tsx:191"}, "properties": {"repobilityId": "48405c6b5e7e950e", "scanner": "scanner-primary", "fingerprint": "32eaa44bfe37cef3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2354d6a3ff914f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:252"}, "properties": {"repobilityId": "be1152cdf47927a8", "scanner": "scanner-primary", "fingerprint": "f2354d6a3ff914f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b350ee69ba021e4e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Header.tsx:79"}, "properties": {"repobilityId": "c848c722ce61f0cc", "scanner": "scanner-primary", "fingerprint": "b350ee69ba021e4e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-98b9f0ac04a1ccb5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/blog/BlogPost.tsx:42"}, "properties": {"repobilityId": "aca58271119d0952", "scanner": "scanner-primary", "fingerprint": "98b9f0ac04a1ccb5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e07c4adce843b8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/shared.tsx:102"}, "properties": {"repobilityId": "6ae0046c41961c4d", "scanner": "scanner-primary", "fingerprint": "4e07c4adce843b8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-422c7f65d2d9a633", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/cases/CaseListView.tsx:16"}, "properties": {"repobilityId": "5c5de4521c25177c", "scanner": "scanner-primary", "fingerprint": "422c7f65d2d9a633", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ae644f8d9a2568f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guests/GuestPanel.tsx:332"}, "properties": {"repobilityId": "e6b39e210fed173b", "scanner": "scanner-primary", "fingerprint": "ae644f8d9a2568f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-455e8d7329eef7d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tenants/DocumentList.tsx:85"}, "properties": {"repobilityId": "e3cc4a29dcf5af5a", "scanner": "scanner-primary", "fingerprint": "455e8d7329eef7d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8330a60dde1c0180", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tenants/CommunicationLogTab.tsx:222"}, "properties": {"repobilityId": "4478f6e9806ca81a", "scanner": "scanner-primary", "fingerprint": "8330a60dde1c0180", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f0b9c8d50eee4cc3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/VendorSelect.tsx:187"}, "properties": {"repobilityId": "70e5f0c291259aba", "scanner": "scanner-primary", "fingerprint": "f0b9c8d50eee4cc3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9235c5cb1b1811fb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/SetupChecklist.tsx:82"}, "properties": {"repobilityId": "3d9cd7515966b0bc", "scanner": "scanner-primary", "fingerprint": "9235c5cb1b1811fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a0d2e7defa14416a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/landing/ShiftSection.tsx:64"}, "properties": {"repobilityId": "7c5e0ef21737a8f6", "scanner": "scanner-primary", "fingerprint": "a0d2e7defa14416a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de2bf8d74adb5d31", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/expenses/ExpenseDocumentList.tsx:84"}, "properties": {"repobilityId": "4c1ffd1a014e1faf", "scanner": "scanner-primary", "fingerprint": "de2bf8d74adb5d31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7ae9592226d93fa8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inbox/InboxActions.tsx:326"}, "properties": {"repobilityId": "a081b273808bf77e", "scanner": "scanner-primary", "fingerprint": "7ae9592226d93fa8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f84370e81eb836a", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/invoices/ProofVerifyDrawer.tsx:123"}, "properties": {"repobilityId": "847e6e749d7c33bb", "scanner": "scanner-primary", "fingerprint": "1f84370e81eb836a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-3551cf698502f488", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(portal)/portal/[token]/page.tsx:422"}, "properties": {"repobilityId": "a2fe02c52044775e", "scanner": "scanner-primary", "fingerprint": "3551cf698502f488", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b4724512900ad988", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/notifications/route.ts:83"}, "properties": {"repobilityId": "89e621827ff6c234", "scanner": "scanner-primary", "fingerprint": "b4724512900ad988", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a79e3b7915691187", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/users/page.tsx:412"}, "properties": {"repobilityId": "25f6222de61c8d58", "scanner": "scanner-primary", "fingerprint": "a79e3b7915691187", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-00d35b8cea4ff9e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/api/page.tsx:268"}, "properties": {"repobilityId": "c8d56930951ccf93", "scanner": "scanner-primary", "fingerprint": "00d35b8cea4ff9e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-079f329a1c420ecb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/settings/audit/page.tsx:99"}, "properties": {"repobilityId": "4658dd5e63de8943", "scanner": "scanner-primary", "fingerprint": "079f329a1c420ecb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d3b4f0d0b61fd744", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/tenants/page.tsx:593"}, "properties": {"repobilityId": "9298bb8040812c49", "scanner": "scanner-primary", "fingerprint": "d3b4f0d0b61fd744", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1af92118d66b8615", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/income/page.tsx:1995"}, "properties": {"repobilityId": "efef683bb0feaef7", "scanner": "scanner-primary", "fingerprint": "1af92118d66b8615", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-919f776de5c9ce0b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/import/page.tsx:934"}, "properties": {"repobilityId": "946ef3a938c02740", "scanner": "scanner-primary", "fingerprint": "919f776de5c9ce0b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa03b4b305aae84b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/vendors/page.tsx:386"}, "properties": {"repobilityId": "92348d4b13ab78dc", "scanner": "scanner-primary", "fingerprint": "fa03b4b305aae84b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-64029cba18c34b9f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/assets/page.tsx:273"}, "properties": {"repobilityId": "439055d24dd45fe4", "scanner": "scanner-primary", "fingerprint": "64029cba18c34b9f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2efcbc2674c08bde", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/insurance/page.tsx:219"}, "properties": {"repobilityId": "ff9275088bcd91b4", "scanner": "scanner-primary", "fingerprint": "2efcbc2674c08bde", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-395fd646adf3107d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/airbnb/page.tsx:625"}, "properties": {"repobilityId": "41c5d995bac9e7f2", "scanner": "scanner-primary", "fingerprint": "395fd646adf3107d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2906b8e6118ba2cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/emails/page.tsx:239"}, "properties": {"repobilityId": "471b05606fea3622", "scanner": "scanner-primary", "fingerprint": "2906b8e6118ba2cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cbaa56e20f554712", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/organizations/page.tsx:1178"}, "properties": {"repobilityId": "967b841f09161d66", "scanner": "scanner-primary", "fingerprint": "cbaa56e20f554712", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-adff26b8b4d92432", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/forecast/page.tsx:156"}, "properties": {"repobilityId": "65c95c3baae40e32", "scanner": "scanner-primary", "fingerprint": "adff26b8b4d92432", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f382f59f73c78e0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/expenses/page.tsx:891"}, "properties": {"repobilityId": "ba4cdf4bd7856470", "scanner": "scanner-primary", "fingerprint": "4f382f59f73c78e0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a7f46338dd80bbc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/maintenance/page.tsx:274"}, "properties": {"repobilityId": "1b1c5d258d946cae", "scanner": "scanner-primary", "fingerprint": "4a7f46338dd80bbc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f67181de5848c524", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/automations/page.tsx:306"}, "properties": {"repobilityId": "7e0f46c1d5c7376b", "scanner": "scanner-primary", "fingerprint": "f67181de5848c524", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56bf93fd0e460120", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/properties/page.tsx:906"}, "properties": {"repobilityId": "7aa9ef3e55ed2bc1", "scanner": "scanner-primary", "fingerprint": "56bf93fd0e460120", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c1de724fedac5421", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/calendar/page.tsx:87"}, "properties": {"repobilityId": "161458ef748f66ad", "scanner": "scanner-primary", "fingerprint": "c1de724fedac5421", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e533e19aa5486c6d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(auth)/select-org/page.tsx:97"}, "properties": {"repobilityId": "c1fb6b94e496d028", "scanner": "scanner-primary", "fingerprint": "e533e19aa5486c6d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0584a72ede940a8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(marketing)/page.tsx:83"}, "properties": {"repobilityId": "3b9b79c882298b6e", "scanner": "scanner-primary", "fingerprint": "e0584a72ede940a8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f28be20e9fb9da23", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(marketing)/tools/airbnb-vs-long-term-rental-calculator/page.tsx:97"}, "properties": {"repobilityId": "e7206f89be629e0d", "scanner": "scanner-primary", "fingerprint": "f28be20e9fb9da23", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-80d8d0faa0712acc", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/(marketing)/pricing/layout.tsx:97"}, "properties": {"repobilityId": "8dfc11a21809ea05", "scanner": "scanner-primary", "fingerprint": "80d8d0faa0712acc", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a11b1fb50d7a0ed1", "level": "error", "message": {"text": "Possible secret in scripts/capture-screenshots.js"}, "properties": {"repobilityId": "18c1a4a831638a75", "scanner": "scanner-primary", "fingerprint": "a11b1fb50d7a0ed1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/capture-screenshots.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-c17df6b591457078", "level": "error", "message": {"text": "Possible secret in scripts/capture-missing.js"}, "properties": {"repobilityId": "8a62459fca60135d", "scanner": "scanner-primary", "fingerprint": "c17df6b591457078", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/capture-missing.js"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-76b564a51fc2fef7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(marketing)/page.tsx:83"}, "properties": {"repobilityId": "02614b81e7b9928d", "scanner": "scanner-primary", "fingerprint": "76b564a51fc2fef7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(marketing)/page.tsx"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-8ab638f1002ac803", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(marketing)/tools/airbnb-vs-long-term-rental-calculator/page.tsx:97"}, "properties": {"repobilityId": "244c536adf176d45", "scanner": "scanner-primary", "fingerprint": "8ab638f1002ac803", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(marketing)/tools/airbnb-vs-long-term-rental-calculator/page.tsx"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-214ad29edf943fef", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/(marketing)/pricing/layout.tsx:97"}, "properties": {"repobilityId": "698aad988b78f9c8", "scanner": "scanner-primary", "fingerprint": "214ad29edf943fef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(marketing)/pricing/layout.tsx"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-d39154f6393563fa", "level": "note", "message": {"text": "Very large file: src/app/api/demo/seed/route.ts (3453 lines)"}, "properties": {"repobilityId": "945294117cd8904a", "scanner": "scanner-primary", "fingerprint": "d39154f6393563fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-85516952eb518265", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/tenants/[id]/page.tsx (1061 lines)"}, "properties": {"repobilityId": "a411ad8f8ec52794", "scanner": "scanner-primary", "fingerprint": "85516952eb518265", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3639a82a6009e9bd", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/income/page.tsx (2181 lines)"}, "properties": {"repobilityId": "746b798cb1bc5f2d", "scanner": "scanner-primary", "fingerprint": "3639a82a6009e9bd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8c8a5f228ecabf7c", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/assets/page.tsx (1338 lines)"}, "properties": {"repobilityId": "568a33b55d0a5369", "scanner": "scanner-primary", "fingerprint": "8c8a5f228ecabf7c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-37e94c3e0a2bf706", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/airbnb/page.tsx (983 lines)"}, "properties": {"repobilityId": "d5a052a2a0677d7b", "scanner": "scanner-primary", "fingerprint": "37e94c3e0a2bf706", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-06100149a66d4611", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/admin/organizations/page.tsx (1324 lines)"}, "properties": {"repobilityId": "46646dac87698415", "scanner": "scanner-primary", "fingerprint": "06100149a66d4611", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-402a090ffce4a455", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/expenses/page.tsx (1599 lines)"}, "properties": {"repobilityId": "02d9380934f451b7", "scanner": "scanner-primary", "fingerprint": "402a090ffce4a455", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cdd687a8b219cff1", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/maintenance/page.tsx (1644 lines)"}, "properties": {"repobilityId": "dd5d7e7b3085337f", "scanner": "scanner-primary", "fingerprint": "cdd687a8b219cff1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a731aea1cdf0f7fc", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/report/page.tsx (1159 lines)"}, "properties": {"repobilityId": "64d576aa507d947e", "scanner": "scanner-primary", "fingerprint": "a731aea1cdf0f7fc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-87f4db1f0bedf2ba", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/properties/page.tsx (1852 lines)"}, "properties": {"repobilityId": "7c54092c2c1f6c21", "scanner": "scanner-primary", "fingerprint": "87f4db1f0bedf2ba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0a52e601e1d52f54", "level": "note", "message": {"text": "Very large file: src/app/(dashboard)/invoices/OwnerInvoicesTab.tsx (1139 lines)"}, "properties": {"repobilityId": "f2fdf9bfe27aa41f", "scanner": "scanner-primary", "fingerprint": "0a52e601e1d52f54", "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": "0f081d7cb7459c4b", "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": "91a4365c5e90d417", "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": "16c63d459644a2a0", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "6db0a44f7e05771a", "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": "4eb0bbbc31033271", "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": "81df877934bbd134", "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": "c4d70eaebea4d73d", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-505bc666a82f9849", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/settings.local.json"}, "properties": {"repobilityId": "777970b0fce0a93b", "scanner": "scanner-primary", "fingerprint": "505bc666a82f9849", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a54d33ecafa8d08", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/backfill-property-access.ts:4"}, "properties": {"repobilityId": "ff856d7473df0b31", "scanner": "scanner-primary", "fingerprint": "4a54d33ecafa8d08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5147b69f3b4b11ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/capture-screenshots.js:148"}, "properties": {"repobilityId": "7d35e3a4f2192812", "scanner": "scanner-primary", "fingerprint": "5147b69f3b4b11ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd69bb5a08adf48b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/capture-missing.js:48"}, "properties": {"repobilityId": "929ef403ed5b9522", "scanner": "scanner-primary", "fingerprint": "bd69bb5a08adf48b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd89a081a2e336a0", "level": "none", "message": {"text": "Commented-code block (14 lines) in scripts/wipe-property-expenses.ts:5"}, "properties": {"repobilityId": "351c07fc50eecf94", "scanner": "scanner-primary", "fingerprint": "fd89a081a2e336a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e85d6c8379c2f7ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/workbox-bb54ffba.js:1"}, "properties": {"repobilityId": "6e6979785210998b", "scanner": "scanner-primary", "fingerprint": "e85d6c8379c2f7ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bba296665e2859b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/guests/GuestPanel.tsx:183"}, "properties": {"repobilityId": "2a3117aeaebe5943", "scanner": "scanner-primary", "fingerprint": "bba296665e2859b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d420e2f9fc2da226", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/EmailDraftModal.tsx:139"}, "properties": {"repobilityId": "24d95ea8b3324a69", "scanner": "scanner-primary", "fingerprint": "d420e2f9fc2da226", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c960d6ce8ba680e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/PortalMessagesTab.tsx:93"}, "properties": {"repobilityId": "ed068cd99103dfe0", "scanner": "scanner-primary", "fingerprint": "c960d6ce8ba680e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1772abd3dc7f8d0a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/CommunicationLogTab.tsx:87"}, "properties": {"repobilityId": "223a36de72dba793", "scanner": "scanner-primary", "fingerprint": "1772abd3dc7f8d0a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77023e1970ac1440", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tenants/RenewalPipeline.tsx:167"}, "properties": {"repobilityId": "2c103708da5eb202", "scanner": "scanner-primary", "fingerprint": "77023e1970ac1440", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-528ad9ea08d7c9e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/report/OwnerDashboard.tsx:283"}, "properties": {"repobilityId": "01d103645707723b", "scanner": "scanner-primary", "fingerprint": "528ad9ea08d7c9e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7cd9260092a011cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/condition-reports/MoveInWalkthrough.tsx:118"}, "properties": {"repobilityId": "46626deb6da3889d", "scanner": "scanner-primary", "fingerprint": "7cd9260092a011cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-119065b75390cfce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/inbox/InboxActions.tsx:422"}, "properties": {"repobilityId": "7e4897f5f06ba82e", "scanner": "scanner-primary", "fingerprint": "119065b75390cfce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed2b3362fb5e310b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/invoices/ProofVerifyDrawer.tsx:49"}, "properties": {"repobilityId": "cbdf7641cd674efc", "scanner": "scanner-primary", "fingerprint": "ed2b3362fb5e310b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f9f762edb6d8426", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(portal)/portal/[token]/page.tsx:303"}, "properties": {"repobilityId": "d75e57c426c86783", "scanner": "scanner-primary", "fingerprint": "2f9f762edb6d8426", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-685cd1e521f3cf6d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/demo/seed/route.ts:3328"}, "properties": {"repobilityId": "e81155a6a94cd679", "scanner": "scanner-primary", "fingerprint": "685cd1e521f3cf6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-116abc997c8dbcab", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/users/route.ts:162"}, "properties": {"repobilityId": "e3f5d1708a0a90ad", "scanner": "scanner-primary", "fingerprint": "116abc997c8dbcab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c5b7a0f49de6c02", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing/cancel/route.ts:27"}, "properties": {"repobilityId": "0437fdceae4228b8", "scanner": "scanner-primary", "fingerprint": "2c5b7a0f49de6c02", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f4c3a5eb648fc82", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/invoices/[id]/route.ts:76"}, "properties": {"repobilityId": "19b63019daf9359e", "scanner": "scanner-primary", "fingerprint": "9f4c3a5eb648fc82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2eceab31db700d3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/page.tsx:42"}, "properties": {"repobilityId": "231bec40686092d6", "scanner": "scanner-primary", "fingerprint": "d2eceab31db700d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-423364c6da06a6dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/users/page.tsx:162"}, "properties": {"repobilityId": "f9975be2643cb986", "scanner": "scanner-primary", "fingerprint": "423364c6da06a6dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-13c83a626f34fd19", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/api/page.tsx:66"}, "properties": {"repobilityId": "e26659444edd9a85", "scanner": "scanner-primary", "fingerprint": "13c83a626f34fd19", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-621e4733a7b1a9d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/audit/page.tsx:54"}, "properties": {"repobilityId": "304841af45d237b6", "scanner": "scanner-primary", "fingerprint": "621e4733a7b1a9d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8061f79133bd49ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/cases/[id]/page.tsx:118"}, "properties": {"repobilityId": "6277842e0f55e83d", "scanner": "scanner-primary", "fingerprint": "8061f79133bd49ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-05072d886dd3489e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(dashboard)/tenants/page.tsx:71"}, "properties": {"repobilityId": "cfa88d5748ab09a2", "scanner": "scanner-primary", "fingerprint": "05072d886dd3489e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-787f64b21925d7ab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/tenants/[id]/page.tsx:954"}, "properties": {"repobilityId": "c468ebdf05689c55", "scanner": "scanner-primary", "fingerprint": "787f64b21925d7ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-825ffe651f45a14f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/income/page.tsx:278"}, "properties": {"repobilityId": "e256cb4327d8100e", "scanner": "scanner-primary", "fingerprint": "825ffe651f45a14f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19f36460bf919cc0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/import/page.tsx:534"}, "properties": {"repobilityId": "21baadc6a37f30aa", "scanner": "scanner-primary", "fingerprint": "19f36460bf919cc0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c71a623bad2f9c70", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/assets/page.tsx:245"}, "properties": {"repobilityId": "a2abaf1e4fa1eb8c", "scanner": "scanner-primary", "fingerprint": "c71a623bad2f9c70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c477e2758400e5a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/insurance/page.tsx:191"}, "properties": {"repobilityId": "2e1b5c93eab60b37", "scanner": "scanner-primary", "fingerprint": "3c477e2758400e5a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd4eae3e8792c433", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/billing/page.tsx:304"}, "properties": {"repobilityId": "44922cd4304615b9", "scanner": "scanner-primary", "fingerprint": "bd4eae3e8792c433", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58923d7c0a2c3ec7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/airbnb/page.tsx:109"}, "properties": {"repobilityId": "450160dfb24849d8", "scanner": "scanner-primary", "fingerprint": "58923d7c0a2c3ec7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d83a18a1401a0387", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/arrears/page.tsx:325"}, "properties": {"repobilityId": "3c9f25111078af25", "scanner": "scanner-primary", "fingerprint": "d83a18a1401a0387", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-39ee8a478081d0e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/expenses/page.tsx:578"}, "properties": {"repobilityId": "6f2d82c33917173a", "scanner": "scanner-primary", "fingerprint": "39ee8a478081d0e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a112aac7072c0568", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/maintenance/page.tsx:251"}, "properties": {"repobilityId": "0026be08106d9393", "scanner": "scanner-primary", "fingerprint": "a112aac7072c0568", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d501619b6edc4095", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/automations/page.tsx:141"}, "properties": {"repobilityId": "8c56b661ba93d5e3", "scanner": "scanner-primary", "fingerprint": "d501619b6edc4095", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a0550f42bc8cf779", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/properties/page.tsx:741"}, "properties": {"repobilityId": "99a8f7bb26e7d9ad", "scanner": "scanner-primary", "fingerprint": "a0550f42bc8cf779", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0510181752c3cc0e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/properties/[id]/agreement/page.tsx:114"}, "properties": {"repobilityId": "d534e1ceec0ea7f9", "scanner": "scanner-primary", "fingerprint": "0510181752c3cc0e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d291561da962128", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/recurring-expenses/page.tsx:108"}, "properties": {"repobilityId": "736a574268e8a82b", "scanner": "scanner-primary", "fingerprint": "2d291561da962128", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-393a77714281389a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/petty-cash/page.tsx:230"}, "properties": {"repobilityId": "e20210281cc741a5", "scanner": "scanner-primary", "fingerprint": "393a77714281389a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff09f8d623921b8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/invoices/page.tsx:364"}, "properties": {"repobilityId": "da7549c8e2183fb1", "scanner": "scanner-primary", "fingerprint": "ff09f8d623921b8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eb4a1e7e0e60ddc1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/invoices/OwnerInvoicesTab.tsx:826"}, "properties": {"repobilityId": "c0e30171c46e7af4", "scanner": "scanner-primary", "fingerprint": "eb4a1e7e0e60ddc1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d2aa58b2196754e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/auth-utils.ts:91"}, "properties": {"repobilityId": "8ca468a982007ba4", "scanner": "scanner-primary", "fingerprint": "d2aa58b2196754e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fc6d9c28357655f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/paddle.ts:3"}, "properties": {"repobilityId": "3905014e2850e69e", "scanner": "scanner-primary", "fingerprint": "4fc6d9c28357655f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d244bed0e245323", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/property-context.tsx:60"}, "properties": {"repobilityId": "18ee9a6a2eb9ba80", "scanner": "scanner-primary", "fingerprint": "5d244bed0e245323", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e3e29a8a77780ad2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/use-cached-fetch.ts:35"}, "properties": {"repobilityId": "55d2c18e9c92eaed", "scanner": "scanner-primary", "fingerprint": "e3e29a8a77780ad2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5297ac70b20fbf71", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/prisma-decimal-extension.ts:1"}, "properties": {"repobilityId": "a94ea610bfe38c37", "scanner": "scanner-primary", "fingerprint": "5297ac70b20fbf71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-506832b1714fc2b0", "level": "note", "message": {"text": "Legacy-named symbol `daysOld` in src/lib/inbox.ts:463"}, "properties": {"repobilityId": "c86b55c769d7b4db", "scanner": "scanner-primary", "fingerprint": "506832b1714fc2b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-566b4d506b9919e6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/automation-registry.ts:4"}, "properties": {"repobilityId": "3f5b09c678defc0c", "scanner": "scanner-primary", "fingerprint": "566b4d506b9919e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac7a04383fbf3fa5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/rental-calculator.ts:168"}, "properties": {"repobilityId": "0ca068ff6e9cfd03", "scanner": "scanner-primary", "fingerprint": "ac7a04383fbf3fa5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bbaad35b177374c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/prisma.ts:5"}, "properties": {"repobilityId": "49efd38137268ace", "scanner": "scanner-primary", "fingerprint": "3bbaad35b177374c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cac7ce15e72817b", "level": "note", "message": {"text": "31 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "1a52e2d4d46a6e40", "scanner": "scanner-primary", "fingerprint": "9cac7ce15e72817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}