{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-d6c5d1f4821c41d9", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:74", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:74"}, "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-03fbd48a1a36ce51", "name": "`truncate` class without `title=` for hover reveal \u2014 app/emtia-endeks/page.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/emtia-endeks/page.tsx:174"}, "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-de8aaafe38ecb2de", "name": "`truncate` class without `title=` for hover reveal \u2014 app/hisse/[sembol]/HisseDetailClient.tsx:176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/hisse/[sembol]/HisseDetailClient.tsx:176"}, "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-11ef3185fbab2b52", "name": "`truncate` class without `title=` for hover reveal \u2014 app/hisse/[sembol]/components/signal-row.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/hisse/[sembol]/components/signal-row.tsx:77"}, "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-5dd20144570a4bf3", "name": "`truncate` class without `title=` for hover reveal \u2014 app/gecmis-firsatlar/page.tsx:230", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/gecmis-firsatlar/page.tsx:230"}, "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-6bc66436d232e22f", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/scan-cache/route.ts:385", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/scan-cache/route.ts:385"}, "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-2958137b5336c220", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/ai-portfolio/route.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/ai-portfolio/route.ts:77"}, "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-3183fc6df8596f3a", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/apex-portfolio/route.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/apex-portfolio/route.ts:79"}, "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-b72e35e91b23f4e9", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/long-term/route.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/long-term/route.ts:101"}, "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-2646595d146f94b3", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/weekly-picks/route.ts:331", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/weekly-picks/route.ts:331"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ddd25d02cdb85f80", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/sector-medians/route.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/sector-medians/route.ts:45"}, "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-e589a89e1be0402f", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/scan/route.ts:157", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/scan/route.ts:157"}, "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-b336037383eb4831", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/future-scores-bist/route.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/future-scores-bist/route.ts:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1aaece3a5d7e85e9", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/apex-us/route.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/apex-us/route.ts:108"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-198c983da3a07968", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/scan-us/route.ts:249", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/scan-us/route.ts:249"}, "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-3a5a1c5285aa5b49", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/aegis-us/route.ts:330", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/aegis-us/route.ts:330"}, "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-286e7e3839e6c9fe", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/future-scores/route.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/future-scores/route.ts:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f75038c83b256ddd", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/firsatlar-fundamentals/route.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/firsatlar-fundamentals/route.ts:90"}, "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-943c7f5aa2cd7095", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/growth-momentum-bist/route.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/growth-momentum-bist/route.ts:67"}, "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-99eb733aacc00e44", "name": "`truncate` class without `title=` for hover reveal \u2014 app/profil/page.tsx:928", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/profil/page.tsx:928"}, "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-aca40e80cffe5996", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/simulasyon/page.tsx:144", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/simulasyon/page.tsx:144"}, "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-cbd4b5b9d259a3be", "name": "`truncate` class without `title=` for hover reveal \u2014 app/tarama/page.tsx:838", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/tarama/page.tsx:838"}, "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-bec3bcd77345f18d", "name": "`truncate` class without `title=` for hover reveal \u2014 app/makro/page.tsx:477", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/makro/page.tsx:477"}, "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-5f528680c8d78fc9", "name": "`truncate` class without `title=` for hover reveal \u2014 app/ters-portfolyo/page.tsx:432", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/ters-portfolyo/page.tsx:432"}, "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-012afa7fef13b564", "name": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/page.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/page.tsx:165"}, "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-32882b47fcd65b93", "name": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/nasil-kullanilir/page.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/nasil-kullanilir/page.tsx:164"}, "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-dcd5d8528b3149bb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/sinyaller/[id]/page.tsx:203", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/sinyaller/[id]/page.tsx:203"}, "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-0f286d62a19eece7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/formasyonlar/[id]/page.tsx:260", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/formasyonlar/[id]/page.tsx:260"}, "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-48d2be62b43463ea", "name": "`truncate` class without `title=` for hover reveal \u2014 app/sohbet/page.tsx:450", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/sohbet/page.tsx:450"}, "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-592a21f07610138f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/topluluk/page.tsx:104", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/topluluk/page.tsx:104"}, "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-c06b771e46fe43a5", "name": "`truncate` class without `title=` for hover reveal \u2014 app/portfolyo/page.tsx:157", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/portfolyo/page.tsx:157"}, "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-216a0b7a09f4fe8b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/karsilastir/KarsilastirClient.tsx:837", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/karsilastir/KarsilastirClient.tsx:837"}, "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-d52b65d9fe766da8", "name": "`truncate` class without `title=` for hover reveal \u2014 app/sektorler/SektorlerClient.tsx:619", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/sektorler/SektorlerClient.tsx:619"}, "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-fc34b3d71858233b", "name": "`truncate` class without `title=` for hover reveal \u2014 components/HisseSkorKarti.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/HisseSkorKarti.tsx:140"}, "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-a2f0bb929b484be1", "name": "`truncate` class without `title=` for hover reveal \u2014 components/DashboardClient.tsx:483", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/DashboardClient.tsx:483"}, "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-c64e4045c3b523f1", "name": "`truncate` class without `title=` for hover reveal \u2014 components/SinyalGecmisi.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/SinyalGecmisi.tsx:112"}, "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-bb0537b40f8ded6b", "name": "`truncate` class without `title=` for hover reveal \u2014 components/BrokerLinkButton.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/BrokerLinkButton.tsx:101"}, "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-b9ac98147237b273", "name": "`truncate` class without `title=` for hover reveal \u2014 components/FirsatKarti.tsx:630", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/FirsatKarti.tsx:630"}, "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-6a80900f9d6442c4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/NavbarClient.tsx:250", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/NavbarClient.tsx:250"}, "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-4e7d69db60686b7c", "name": "Stray `console.log` in TS/JS \u2014 lib/bist-guard.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/bist-guard.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-6fad6a1a1e27d945", "name": "Stray `console.log` in TS/JS \u2014 lib/us-market-guard.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/us-market-guard.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e135131ceb18297", "name": "Stray `console.log` in TS/JS \u2014 lib/evaluate-engine.ts:255", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/evaluate-engine.ts:255"}, "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-e96ff0a90c7d21d7", "name": "Insecure pattern 'cors_wildcard' in python-ml/main.py:46", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in python-ml/main.py:46"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dd9b3d7c32155394", "name": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:74", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:74"}, "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-e58ad2e192eea516", "name": "Insecure pattern 'dangerous_innerhtml' in app/simulasyon/page.tsx:144", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/simulasyon/page.tsx:144"}, "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-2d2a7c2317f80426", "name": "Insecure pattern 'node_child_process' in .claude/hooks/gsd-check-update.js:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in .claude/hooks/gsd-check-update.js:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed30f4082a4e6757", "name": "Very large file: app/hisse/[sembol]/HisseDetailClient.tsx (1756 lines)", "shortDescription": {"text": "Very large file: app/hisse/[sembol]/HisseDetailClient.tsx (1756 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-8d846170f988cd0b", "name": "Very large file: app/backtesting/page.tsx (1373 lines)", "shortDescription": {"text": "Very large file: app/backtesting/page.tsx (1373 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-08670d1088a01c58", "name": "Very large file: app/makro/page.tsx (1757 lines)", "shortDescription": {"text": "Very large file: app/makro/page.tsx (1757 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-bae1fcfb3bcb6987", "name": "Very large file: app/portfolyo/page.tsx (1521 lines)", "shortDescription": {"text": "Very large file: app/portfolyo/page.tsx (1521 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-e0716dd5b1e6d180", "name": "Very large file: app/karsilastir/KarsilastirClient.tsx (1405 lines)", "shortDescription": {"text": "Very large file: app/karsilastir/KarsilastirClient.tsx (1405 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-b29ab97a5b3a8c7e", "name": "Very large file: app/sektorler/SektorlerClient.tsx (1661 lines)", "shortDescription": {"text": "Very large file: app/sektorler/SektorlerClient.tsx (1661 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-a58d4d5d9b9cad3b", "name": "Very large file: components/LandingPage.tsx (1036 lines)", "shortDescription": {"text": "Very large file: components/LandingPage.tsx (1036 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-de25d598465a2dae", "name": "Very large file: lib/signals.ts (1942 lines)", "shortDescription": {"text": "Very large file: lib/signals.ts (1942 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": "12 test file(s) for 351 source file(s) (ratio 0.03). 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 55 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 99 placeholder/mock markers across 30 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. 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-2722702157f0f8a7", "name": "Agent authority lacks a verifier contract: .claude/gsd-file-manifest.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/gsd-file-manifest.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-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-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-ecb0d2c55ed6875d", "name": "Agent authority lacks a verifier contract: .claude/settings.local.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.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-a897f9640570497b", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-planner.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-planner.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-efecebab2bc7fee1", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-ui-checker.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-ui-checker.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c6b0d501e013a2b", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-project-researcher.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-project-researcher.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9bf8fdb335919a36", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-ui-auditor.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-ui-auditor.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ff671b66e931f23", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-nyquist-auditor.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-nyquist-auditor.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd0d926e69f56057", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-verifier.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-verifier.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-171c7e61359921e2", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-roadmapper.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-roadmapper.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8258d2109ddaf05b", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-phase-researcher.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-phase-researcher.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-71db13b265929262", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-plan-checker.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-plan-checker.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce3cbbf053488d74", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-executor.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-executor.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-688aa81b5a8e6a40", "name": "Agent authority lacks a verifier contract: .claude/agents/gsd-ui-researcher.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-ui-researcher.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb217e5ec84deecd", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/add-todo.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/add-todo.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-573fbba17168da2b", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/progress.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/progress.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d53a9399c1743995", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/do.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/do.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0f29c3ba77e0ef34", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/help.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/help.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-70bdcc12079b4a59", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/add-tests.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/add-tests.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8ad2090000f31390", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/pause-work.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/pause-work.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90d4e29caecd3f9f", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/set-profile.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/set-profile.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bda20c47ee9748a4", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/discuss-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/discuss-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-165c3127aa52b8e6", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/health.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/health.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d492dcbfa1a9c5c", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/reapply-patches.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/reapply-patches.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4c65b8c7c342b53e", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/remove-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/remove-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b2154c4fd48ee764", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/add-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/add-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a9e0d58d7daeb659", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/settings.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/settings.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6a3ff8bcca97b166", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/profile-user.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/profile-user.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-925c6bf1ba78b524", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/check-todos.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/check-todos.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-31d62f6a7ead23de", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/debug.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/debug.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f14294c894084d84", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/next.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/next.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7dd7af5d6e6b568", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/new-milestone.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/new-milestone.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff195dcf306d416a", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/list-phase-assumptions.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/list-phase-assumptions.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8549997a13e43f36", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/autonomous.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/autonomous.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0004567600b489d9", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/plan-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/plan-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-245b85665988390a", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/plan-milestone-gaps.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/plan-milestone-gaps.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f67588ffd7007ad1", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/update.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/update.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-746f34135b5c7480", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/cleanup.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/cleanup.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6c02de24e4d7a9ba", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/new-project.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/new-project.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-adee8005f954ba01", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/stats.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/stats.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9da71014ad1431df", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/ui-review.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/ui-review.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7626612b68d8ade1", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/session-report.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/session-report.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c15f002265f87896", "name": "Agent authority lacks a verifier contract: .claude/commands/gsd/research-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/research-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a9a666c8b5e2963d", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/milestone-archive.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/milestone-archive.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c460598f508f51ca", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/VALIDATION.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/VALIDATION.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92f8d012173ae0f2", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/state.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/state.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-665596707e65a898", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/phase-prompt.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/phase-prompt.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2a8910d54e4c885", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/copilot-instructions.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/copilot-instructions.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b03ee0354e205d1", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/dev-preferences.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/dev-preferences.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-896a0568829cadd9", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/claude-md.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/claude-md.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a1e18490e7a7b3bb", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/research.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/research.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-42edafe48e3bf20c", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/research-project/STACK.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/research-project/STACK.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8301f5b45cf87820", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/stack.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/stack.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-35043920d856b91c", "name": "Agent instruction contains unpinned remote install: .claude/get-shit-done/templates/codebase/stack.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/get-shit-done/templates/codebase/stack.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1216a6c6e25a8a7b", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/concerns.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/concerns.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a7ab6f4c4a57b25", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/testing.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/testing.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-920ae36b2b11fdc0", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/architecture.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/architecture.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b15cb6d897ccccf8", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/add-todo.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/add-todo.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47cf1675d1a44ad3", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/diagnose-issues.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/diagnose-issues.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3cd93ec5a51a8b2d", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/add-tests.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/add-tests.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0f133dfc70b08d00", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/pause-work.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/pause-work.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf02774b276f4ad6", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/health.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/health.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff1fd4e293bfd611", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/verify-work.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/verify-work.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ce99967d20744eb", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/insert-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/insert-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-978a49899a067bfa", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/execute-plan.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/execute-plan.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91ab092218fa61b4", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/add-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/add-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b22d0e879a7bffe7", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/settings.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/settings.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0985cfb3642a73a", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/validate-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/validate-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7c57d8f6dac0ce98", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/check-todos.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/check-todos.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b38e3c7b17d0eea0", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/ship.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/ship.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-87c15cb5dbcdc1e8", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/resume-project.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/resume-project.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-362cc90b28a7d48c", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/ui-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/ui-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f573c4dcc8f682cc", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/autonomous.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/autonomous.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0f5885b149ba86eb", "name": "Agent instruction/config may expose a secret: .claude/get-shit-done/workflows/plan-phase.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/get-shit-done/workflows/plan-phase.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b74778d433cb776", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/plan-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/plan-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41db87ed704dd194", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/execute-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/execute-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e40ead765fcc3fb9", "name": "Agent instruction contains unpinned remote install: .claude/get-shit-done/workflows/update.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/get-shit-done/workflows/update.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c29eafa422b6edfe", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/cleanup.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/cleanup.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-61ed08f466344220", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/new-project.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/new-project.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91fbb35bfb488f7a", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/stats.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/stats.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-844c3d2374636fc2", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/research-phase.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/research-phase.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ce36038651b8e68", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/tdd.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/tdd.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72f2912e92722897", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/continuation-format.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/continuation-format.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9025bd8fed9a19e", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/decimal-phase-calculation.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/decimal-phase-calculation.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-56945162ec777f74", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/model-profile-resolution.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/model-profile-resolution.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-68c06571bc6e109f", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/git-planning-commit.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/git-planning-commit.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff52d9241b568d0a", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/checkpoints.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/checkpoints.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141dc2e7e36f26e1", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/planning-config.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/planning-config.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-852ec1190d69fa1f", "name": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/phase-argument-parsing.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/phase-argument-parsing.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8f945a585e6445d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/hisse/[sembol]/HisseDetailClient.tsx:308", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/hisse/[sembol]/HisseDetailClient.tsx:308"}, "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-92e841f82ff17584", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/gecmis-firsatlar/page.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/gecmis-firsatlar/page.tsx:71"}, "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-ffa869a6a96352e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/price-alerts/route.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/price-alerts/route.ts:72"}, "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-331ff99fa7db8042", "name": "Commented-code block (5 lines) in app/api/cron/scan-cache/route.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/cron/scan-cache/route.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5accce13263ab162", "name": "Commented-code block (5 lines) in app/api/uzun-vade-firsatlar/route.ts:99", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/uzun-vade-firsatlar/route.ts:99"}, "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-0bf5891c22feca10", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/ai-portfoyler/page.tsx:239", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/ai-portfoyler/page.tsx:239"}, "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-c0c2f0a1b44ef9fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/profil/page.tsx:142", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/profil/page.tsx:142"}, "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-bd852f874bdfc565", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/firsatlar/page.tsx:360", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/firsatlar/page.tsx:360"}, "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-667ff4d063690a76", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/simulasyon/page.tsx:206", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/simulasyon/page.tsx:206"}, "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-357f220e9194436c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/temalar/page.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/temalar/page.tsx:40"}, "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-e968578b7eb120dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/tarama/page.tsx:305", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/tarama/page.tsx:305"}, "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-2357b3e4618c86f8", "name": "Commented-code block (5 lines) in app/makro/page.tsx:167", "shortDescription": {"text": "Commented-code block (5 lines) in app/makro/page.tsx:167"}, "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-164e1775f926f988", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/makro/page.tsx:1075", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/makro/page.tsx:1075"}, "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-a3fba24d9101f558", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/watchlist/page.tsx:576", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/watchlist/page.tsx:576"}, "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-9ada190a5bf57b7e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/ters-portfolyo/page.tsx:167", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/ters-portfolyo/page.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-a28107fe786cba68", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/sinyal-takip/page.tsx:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/sinyal-takip/page.tsx:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7981145c0fd0f7ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/topluluk/page.tsx:359", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/topluluk/page.tsx:359"}, "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-5040b4c8b481592b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/tema/[id]/page.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/tema/[id]/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-fd4b9af6ff84bc2f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/sektorler/SektorlerClient.tsx:1198", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/sektorler/SektorlerClient.tsx:1198"}, "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-a540a15635eba2bb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-investment-score.mjs:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-investment-score.mjs:15"}, "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-79c84c73c5f86f1b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/PushNotificationButton.tsx:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/PushNotificationButton.tsx:96"}, "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-64e34dd1381e4c56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/LandingPage.tsx:395", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/LandingPage.tsx:395"}, "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-fc285d69970a0c79", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/FirsatKarti.tsx:421", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/FirsatKarti.tsx:421"}, "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-45ceb76faea597a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/api-client.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/api-client.ts:23"}, "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-110c48f867b1c795", "name": "Commented-code block (5 lines) in lib/signals.ts:922", "shortDescription": {"text": "Commented-code block (5 lines) in lib/signals.ts:922"}, "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-45bacbb0834bef07", "name": "Commented-code block (5 lines) in lib/news-impact.ts:375", "shortDescription": {"text": "Commented-code block (5 lines) in lib/news-impact.ts:375"}, "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-e7059f1cbcad9bed", "name": "Commented-code block (7 lines) in lib/fundamental-health.ts:78", "shortDescription": {"text": "Commented-code block (7 lines) in lib/fundamental-health.ts:78"}, "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-a5a1d7b350ec64d1", "name": "Commented-code block (5 lines) in .claude/hooks/gsd-context-monitor.js:2", "shortDescription": {"text": "Commented-code block (5 lines) in .claude/hooks/gsd-context-monitor.js:2"}, "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-6529599616cf58ce", "name": "FastAPI POST `predict` without auth dependency \u2014 python-ml/main.py:277", "shortDescription": {"text": "FastAPI POST `predict` without auth dependency \u2014 python-ml/main.py:277"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f1f9adcce4ed264", "name": "FastAPI POST `retrain` without auth dependency \u2014 python-ml/main.py:313", "shortDescription": {"text": "FastAPI POST `retrain` without auth dependency \u2014 python-ml/main.py:313"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81acd8eca94791ee", "name": "Dangling fetch: GET /api/apex-portfolio (app/apex-portfoyu/page.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/apex-portfolio (app/apex-portfoyu/page.tsx:64)"}, "fullDescription": {"text": "`app/apex-portfoyu/page.tsx:64` calls `GET /api/apex-portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apex-portfolio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c16581811b8175e8", "name": "Dangling fetch: GET /api/emtia-analiz (app/emtia-endeks/page.tsx:354)", "shortDescription": {"text": "Dangling fetch: GET /api/emtia-analiz (app/emtia-endeks/page.tsx:354)"}, "fullDescription": {"text": "`app/emtia-endeks/page.tsx:354` calls `GET /api/emtia-analiz` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/emtia-analiz`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bcc7404d5e31945c", "name": "Dangling fetch: GET /api/profile (app/fiyatlandirma/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/profile (app/fiyatlandirma/page.tsx:78)"}, "fullDescription": {"text": "`app/fiyatlandirma/page.tsx:78` calls `GET /api/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17271722ab98c6e8", "name": "Dangling fetch: POST /api/stripe/checkout (app/fiyatlandirma/page.tsx:104)", "shortDescription": {"text": "Dangling fetch: POST /api/stripe/checkout (app/fiyatlandirma/page.tsx:104)"}, "fullDescription": {"text": "`app/fiyatlandirma/page.tsx:104` calls `POST /api/stripe/checkout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stripe/checkout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44306e42e175b015", "name": "Dangling fetch: GET /api/ohlcv?symbol=${s}&days=30 (app/hisse/[sembol]/HisseDetailClient.tsx:308)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${s}&days=30 (app/hisse/[sembol]/HisseDetailClient.tsx:308)"}, "fullDescription": {"text": "`app/hisse/[sembol]/HisseDetailClient.tsx:308` calls `GET /api/ohlcv?symbol=${s}&days=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5fe8381c6bb1ee43", "name": "Dangling fetch: GET /api/signal-stats (app/hisse/[sembol]/HisseDetailClient.tsx:356)", "shortDescription": {"text": "Dangling fetch: GET /api/signal-stats (app/hisse/[sembol]/HisseDetailClient.tsx:356)"}, "fullDescription": {"text": "`app/hisse/[sembol]/HisseDetailClient.tsx:356` calls `GET /api/signal-stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signal-stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea3c9404e47218ca", "name": "Dangling fetch: GET /api/investment-score?sembol=${encodeURIComponent(sembol)} (app/hisse/[sembol]/HisseDetailClient.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/investment-score?sembol=${encodeURIComponent(sembol)} (app/hisse/[sembol]/HisseDetailClient.tsx:382)"}, "fullDescription": {"text": "`app/hisse/[sembol]/HisseDetailClient.tsx:382` calls `GET /api/investment-score?sembol=${encodeURIComponent(sembol)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/investment-score`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b69bbf389e9120f5", "name": "Dangling fetch: GET /api/haber?sembol=${sembol} (app/hisse/[sembol]/HisseDetailClient.tsx:462)", "shortDescription": {"text": "Dangling fetch: GET /api/haber?sembol=${sembol} (app/hisse/[sembol]/HisseDetailClient.tsx:462)"}, "fullDescription": {"text": "`app/hisse/[sembol]/HisseDetailClient.tsx:462` calls `GET /api/haber?sembol=${sembol}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/haber`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-150f47bac8e4fe4b", "name": "Dangling fetch: GET /api/kap?sembol=${encodeURIComponent(sembol)} (app/hisse/[sembol]/HisseDetailClient.tsx:481)", "shortDescription": {"text": "Dangling fetch: GET /api/kap?sembol=${encodeURIComponent(sembol)} (app/hisse/[sembol]/HisseDetailClient.tsx:481)"}, "fullDescription": {"text": "`app/hisse/[sembol]/HisseDetailClient.tsx:481` calls `GET /api/kap?sembol=${encodeURIComponent(sembol)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/kap`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25c285103280c65c", "name": "Dangling fetch: POST /api/explain (app/hisse/[sembol]/HisseDetailClient.tsx:523)", "shortDescription": {"text": "Dangling fetch: POST /api/explain (app/hisse/[sembol]/HisseDetailClient.tsx:523)"}, "fullDescription": {"text": "`app/hisse/[sembol]/HisseDetailClient.tsx:523` calls `POST /api/explain` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/explain`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f2b89271faa68d7", "name": "Dangling fetch: POST /api/kap/summarize (app/hisse/[sembol]/HisseDetailClient.tsx:1619)", "shortDescription": {"text": "Dangling fetch: POST /api/kap/summarize (app/hisse/[sembol]/HisseDetailClient.tsx:1619)"}, "fullDescription": {"text": "`app/hisse/[sembol]/HisseDetailClient.tsx:1619` calls `POST /api/kap/summarize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/kap/summarize`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e696e2b91394ddb", "name": "Dangling fetch: GET /api/gecmis-firsatlar?${params} (app/gecmis-firsatlar/page.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/gecmis-firsatlar?${params} (app/gecmis-firsatlar/page.tsx:64)"}, "fullDescription": {"text": "`app/gecmis-firsatlar/page.tsx:64` calls `GET /api/gecmis-firsatlar?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/gecmis-firsatlar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1fa93e153866925f", "name": "Dangling fetch: GET /api/apex-us-portfolio (app/apex-us-portfoyu/page.tsx:65)", "shortDescription": {"text": "Dangling fetch: GET /api/apex-us-portfolio (app/apex-us-portfoyu/page.tsx:65)"}, "fullDescription": {"text": "`app/apex-us-portfoyu/page.tsx:65` calls `GET /api/apex-us-portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apex-us-portfolio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d298f67cfbc6fdbc", "name": "Dangling fetch: GET https://query1.finance.yahoo.com/v10/finance/quoteSummary/${symbol}?modules=news (app/api/tema-haber", "shortDescription": {"text": "Dangling fetch: GET https://query1.finance.yahoo.com/v10/finance/quoteSummary/${symbol}?modules=news (app/api/tema-haberleri/route.ts:64)"}, "fullDescription": {"text": "`app/api/tema-haberleri/route.ts:64` calls `GET https://query1.finance.yahoo.com/v10/finance/quoteSummary/${symbol}?modules=news` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/query1.finance.yahoo.com/v10/finance/quotesummary/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7140be1b608e48e0", "name": "Dangling fetch: POST https://api.resend.com/emails (app/api/cron/price-alerts/route.ts:72)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (app/api/cron/price-alerts/route.ts:72)"}, "fullDescription": {"text": "`app/api/cron/price-alerts/route.ts:72` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d3fa8fc7c053205", "name": "Dangling fetch: GET /api/weekly-picks (app/haftalik-secimler/page.tsx:163)", "shortDescription": {"text": "Dangling fetch: GET /api/weekly-picks (app/haftalik-secimler/page.tsx:163)"}, "fullDescription": {"text": "`app/haftalik-secimler/page.tsx:163` calls `GET /api/weekly-picks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/weekly-picks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aea3fe9544681372", "name": "Dangling fetch: GET /api/weekly-picks (app/ai-portfoyler/page.tsx:239)", "shortDescription": {"text": "Dangling fetch: GET /api/weekly-picks (app/ai-portfoyler/page.tsx:239)"}, "fullDescription": {"text": "`app/ai-portfoyler/page.tsx:239` calls `GET /api/weekly-picks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/weekly-picks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba918ee13ea91752", "name": "Dangling fetch: GET /api/ai-portfolio (app/ai-portfoyler/page.tsx:240)", "shortDescription": {"text": "Dangling fetch: GET /api/ai-portfolio (app/ai-portfoyler/page.tsx:240)"}, "fullDescription": {"text": "`app/ai-portfoyler/page.tsx:240` calls `GET /api/ai-portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai-portfolio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26926fafacdc6230", "name": "Dangling fetch: GET /api/apex-portfolio (app/ai-portfoyler/page.tsx:241)", "shortDescription": {"text": "Dangling fetch: GET /api/apex-portfolio (app/ai-portfoyler/page.tsx:241)"}, "fullDescription": {"text": "`app/ai-portfoyler/page.tsx:241` calls `GET /api/apex-portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apex-portfolio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73b7aa4c482dc7a0", "name": "Dangling fetch: GET /api/apex-us-portfolio (app/ai-portfoyler/page.tsx:242)", "shortDescription": {"text": "Dangling fetch: GET /api/apex-us-portfolio (app/ai-portfoyler/page.tsx:242)"}, "fullDescription": {"text": "`app/ai-portfoyler/page.tsx:242` calls `GET /api/apex-us-portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apex-us-portfolio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d98a723e5988b1c", "name": "Dangling fetch: GET /api/aegis-us-portfolio (app/ai-portfoyler/page.tsx:243)", "shortDescription": {"text": "Dangling fetch: GET /api/aegis-us-portfolio (app/ai-portfoyler/page.tsx:243)"}, "fullDescription": {"text": "`app/ai-portfoyler/page.tsx:243` calls `GET /api/aegis-us-portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/aegis-us-portfolio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83902ff091d15d2d", "name": "Dangling fetch: POST /api/profile/avatar (app/profil/page.tsx:142)", "shortDescription": {"text": "Dangling fetch: POST /api/profile/avatar (app/profil/page.tsx:142)"}, "fullDescription": {"text": "`app/profil/page.tsx:142` calls `POST /api/profile/avatar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile/avatar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e377caf42c614ac", "name": "Dangling fetch: PATCH /api/profile (app/profil/page.tsx:148)", "shortDescription": {"text": "Dangling fetch: PATCH /api/profile (app/profil/page.tsx:148)"}, "fullDescription": {"text": "`app/profil/page.tsx:148` calls `PATCH /api/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d71789a9a93ee11", "name": "Dangling fetch: GET /api/profile (app/profil/page.tsx:325)", "shortDescription": {"text": "Dangling fetch: GET /api/profile (app/profil/page.tsx:325)"}, "fullDescription": {"text": "`app/profil/page.tsx:325` calls `GET /api/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25a5278c708e7c9a", "name": "Dangling fetch: GET /api/user/alert-preferences (app/profil/page.tsx:344)", "shortDescription": {"text": "Dangling fetch: GET /api/user/alert-preferences (app/profil/page.tsx:344)"}, "fullDescription": {"text": "`app/profil/page.tsx:344` calls `GET /api/user/alert-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/alert-preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b092b1cbfe66aa1", "name": "Dangling fetch: POST /api/user/alert-preferences (app/profil/page.tsx:363)", "shortDescription": {"text": "Dangling fetch: POST /api/user/alert-preferences (app/profil/page.tsx:363)"}, "fullDescription": {"text": "`app/profil/page.tsx:363` calls `POST /api/user/alert-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/alert-preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6276dac52127138a", "name": "Dangling fetch: PATCH /api/profile (app/profil/page.tsx:374)", "shortDescription": {"text": "Dangling fetch: PATCH /api/profile (app/profil/page.tsx:374)"}, "fullDescription": {"text": "`app/profil/page.tsx:374` calls `PATCH /api/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e00f3cc7acbf8ff", "name": "Dangling fetch: GET /api/price-alerts (app/profil/page.tsx:383)", "shortDescription": {"text": "Dangling fetch: GET /api/price-alerts (app/profil/page.tsx:383)"}, "fullDescription": {"text": "`app/profil/page.tsx:383` calls `GET /api/price-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/price-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c558abacd528e7b1", "name": "Dangling fetch: DELETE /api/price-alerts?id=${id} (app/profil/page.tsx:393)", "shortDescription": {"text": "Dangling fetch: DELETE /api/price-alerts?id=${id} (app/profil/page.tsx:393)"}, "fullDescription": {"text": "`app/profil/page.tsx:393` calls `DELETE /api/price-alerts?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/price-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31d8845454c52376", "name": "Dangling fetch: POST /api/stripe/portal (app/profil/page.tsx:408)", "shortDescription": {"text": "Dangling fetch: POST /api/stripe/portal (app/profil/page.tsx:408)"}, "fullDescription": {"text": "`app/profil/page.tsx:408` calls `POST /api/stripe/portal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stripe/portal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-218fb3055b35e200", "name": "Dangling fetch: PATCH /api/profile (app/profil/page.tsx:425)", "shortDescription": {"text": "Dangling fetch: PATCH /api/profile (app/profil/page.tsx:425)"}, "fullDescription": {"text": "`app/profil/page.tsx:425` calls `PATCH /api/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-00218f46a19b33c9", "name": "Dangling fetch: GET /api/backtesting?${params.toString()} (app/backtesting/page.tsx:1207)", "shortDescription": {"text": "Dangling fetch: GET /api/backtesting?${params.toString()} (app/backtesting/page.tsx:1207)"}, "fullDescription": {"text": "`app/backtesting/page.tsx:1207` calls `GET /api/backtesting?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/backtesting`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7e7de3cb7009ed76", "name": "Dangling fetch: GET /api/watchlist (app/firsatlar/page.tsx:297)", "shortDescription": {"text": "Dangling fetch: GET /api/watchlist (app/firsatlar/page.tsx:297)"}, "fullDescription": {"text": "`app/firsatlar/page.tsx:297` calls `GET /api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fdcbd1d13269539d", "name": "Dangling fetch: GET /api/signal-stats-summary (app/firsatlar/page.tsx:308)", "shortDescription": {"text": "Dangling fetch: GET /api/signal-stats-summary (app/firsatlar/page.tsx:308)"}, "fullDescription": {"text": "`app/firsatlar/page.tsx:308` calls `GET /api/signal-stats-summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signal-stats-summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2ba9fb3bf68315e", "name": "Dangling fetch: GET /api/gunun-secimi (app/firsatlar/page.tsx:318)", "shortDescription": {"text": "Dangling fetch: GET /api/gunun-secimi (app/firsatlar/page.tsx:318)"}, "fullDescription": {"text": "`app/firsatlar/page.tsx:318` calls `GET /api/gunun-secimi` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/gunun-secimi`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0fa915d8aa126d6a", "name": "Dangling fetch: GET /api/haftanin-secimi (app/firsatlar/page.tsx:328)", "shortDescription": {"text": "Dangling fetch: GET /api/haftanin-secimi (app/firsatlar/page.tsx:328)"}, "fullDescription": {"text": "`app/firsatlar/page.tsx:328` calls `GET /api/haftanin-secimi` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/haftanin-secimi`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3249ddc42e164afc", "name": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/firsatlar/page.tsx:356)", "shortDescription": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/firsatlar/page.tsx:356)"}, "fullDescription": {"text": "`app/firsatlar/page.tsx:356` calls `DELETE /api/watchlist?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb1a93cf8dfe2646", "name": "Dangling fetch: POST /api/watchlist (app/firsatlar/page.tsx:360)", "shortDescription": {"text": "Dangling fetch: POST /api/watchlist (app/firsatlar/page.tsx:360)"}, "fullDescription": {"text": "`app/firsatlar/page.tsx:360` calls `POST /api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2cc67b5b1490710", "name": "Dangling fetch: GET /api/uzun-vade-firsatlar (app/uzun-vade-firsatlar/page.tsx:354)", "shortDescription": {"text": "Dangling fetch: GET /api/uzun-vade-firsatlar (app/uzun-vade-firsatlar/page.tsx:354)"}, "fullDescription": {"text": "`app/uzun-vade-firsatlar/page.tsx:354` calls `GET /api/uzun-vade-firsatlar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/uzun-vade-firsatlar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ae5fe3668a339f1", "name": "Dangling fetch: GET /api/haftanin-secimi (app/uzun-vade-firsatlar/page.tsx:363)", "shortDescription": {"text": "Dangling fetch: GET /api/haftanin-secimi (app/uzun-vade-firsatlar/page.tsx:363)"}, "fullDescription": {"text": "`app/uzun-vade-firsatlar/page.tsx:363` calls `GET /api/haftanin-secimi` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/haftanin-secimi`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e21a1898e495465", "name": "Dangling fetch: GET /api/price-alerts (app/fiyat-alertler/page.tsx:27)", "shortDescription": {"text": "Dangling fetch: GET /api/price-alerts (app/fiyat-alertler/page.tsx:27)"}, "fullDescription": {"text": "`app/fiyat-alertler/page.tsx:27` calls `GET /api/price-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/price-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40235d4fa84b30e0", "name": "Dangling fetch: DELETE /api/price-alerts?id=${id} (app/fiyat-alertler/page.tsx:40)", "shortDescription": {"text": "Dangling fetch: DELETE /api/price-alerts?id=${id} (app/fiyat-alertler/page.tsx:40)"}, "fullDescription": {"text": "`app/fiyat-alertler/page.tsx:40` calls `DELETE /api/price-alerts?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/price-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aebff7d0b7e56cd4", "name": "Dangling fetch: GET /api/macro (app/simulasyon/page.tsx:206)", "shortDescription": {"text": "Dangling fetch: GET /api/macro (app/simulasyon/page.tsx:206)"}, "fullDescription": {"text": "`app/simulasyon/page.tsx:206` calls `GET /api/macro` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/macro`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-459b02511f202e93", "name": "Dangling fetch: POST /api/simulasyon (app/simulasyon/page.tsx:244)", "shortDescription": {"text": "Dangling fetch: POST /api/simulasyon (app/simulasyon/page.tsx:244)"}, "fullDescription": {"text": "`app/simulasyon/page.tsx:244` calls `POST /api/simulasyon` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/simulasyon`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-321e96205f353db2", "name": "Dangling fetch: GET /api/tema-performans?tema=${theme.id} (app/temalar/page.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET /api/tema-performans?tema=${theme.id} (app/temalar/page.tsx:33)"}, "fullDescription": {"text": "`app/temalar/page.tsx:33` calls `GET /api/tema-performans?tema=${theme.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tema-performans`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-572b9278c2a8a368", "name": "Dangling fetch: GET /api/tema-haberleri?tema=${theme.id} (app/temalar/page.tsx:40)", "shortDescription": {"text": "Dangling fetch: GET /api/tema-haberleri?tema=${theme.id} (app/temalar/page.tsx:40)"}, "fullDescription": {"text": "`app/temalar/page.tsx:40` calls `GET /api/tema-haberleri?tema=${theme.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tema-haberleri`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-99f8614080c6adc9", "name": "Dangling fetch: GET /api/ai-portfolio (app/yapay-zeka-portfoyu/page.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/ai-portfolio (app/yapay-zeka-portfoyu/page.tsx:64)"}, "fullDescription": {"text": "`app/yapay-zeka-portfoyu/page.tsx:64` calls `GET /api/ai-portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai-portfolio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a80b6f7dc7c24f29", "name": "Dangling fetch: GET /api/watchlist (app/tarama/page.tsx:286)", "shortDescription": {"text": "Dangling fetch: GET /api/watchlist (app/tarama/page.tsx:286)"}, "fullDescription": {"text": "`app/tarama/page.tsx:286` calls `GET /api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a6dbf9b82c4f927", "name": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/tarama/page.tsx:302)", "shortDescription": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/tarama/page.tsx:302)"}, "fullDescription": {"text": "`app/tarama/page.tsx:302` calls `DELETE /api/watchlist?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e2a37bdb2e6a1f5", "name": "Dangling fetch: POST /api/watchlist (app/tarama/page.tsx:305)", "shortDescription": {"text": "Dangling fetch: POST /api/watchlist (app/tarama/page.tsx:305)"}, "fullDescription": {"text": "`app/tarama/page.tsx:305` calls `POST /api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b540efafc4d6dee2", "name": "Dangling fetch: GET /api/screener?${params} (app/tarama/page.tsx:342)", "shortDescription": {"text": "Dangling fetch: GET /api/screener?${params} (app/tarama/page.tsx:342)"}, "fullDescription": {"text": "`app/tarama/page.tsx:342` calls `GET /api/screener?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/screener`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc0a78bc293e6019", "name": "Dangling fetch: GET /api/macro (app/makro/page.tsx:1072)", "shortDescription": {"text": "Dangling fetch: GET /api/macro (app/makro/page.tsx:1072)"}, "fullDescription": {"text": "`app/makro/page.tsx:1072` calls `GET /api/macro` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/macro`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38f54ac07795e926", "name": "Dangling fetch: GET /api/risk (app/makro/page.tsx:1073)", "shortDescription": {"text": "Dangling fetch: GET /api/risk (app/makro/page.tsx:1073)"}, "fullDescription": {"text": "`app/makro/page.tsx:1073` calls `GET /api/risk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/risk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5043c0ce0e2b6d6c", "name": "Dangling fetch: GET /api/sectors (app/makro/page.tsx:1074)", "shortDescription": {"text": "Dangling fetch: GET /api/sectors (app/makro/page.tsx:1074)"}, "fullDescription": {"text": "`app/makro/page.tsx:1074` calls `GET /api/sectors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sectors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcd5e0422d7c2313", "name": "Dangling fetch: GET /api/alerts (app/makro/page.tsx:1075)", "shortDescription": {"text": "Dangling fetch: GET /api/alerts (app/makro/page.tsx:1075)"}, "fullDescription": {"text": "`app/makro/page.tsx:1075` calls `GET /api/alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45b6997bbf369a4c", "name": "Dangling fetch: GET /api/macro?history=true&days=${period} (app/makro/page.tsx:1076)", "shortDescription": {"text": "Dangling fetch: GET /api/macro?history=true&days=${period} (app/makro/page.tsx:1076)"}, "fullDescription": {"text": "`app/makro/page.tsx:1076` calls `GET /api/macro?history=true&days=${period}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/macro`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a96f528aea15e4c3", "name": "Dangling fetch: GET /api/ohlcv?symbol=${encodeURIComponent(sym)}&days=30 (app/makro/page.tsx:1106)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${encodeURIComponent(sym)}&days=30 (app/makro/page.tsx:1106)"}, "fullDescription": {"text": "`app/makro/page.tsx:1106` calls `GET /api/ohlcv?symbol=${encodeURIComponent(sym)}&days=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-791523e0ca205d53", "name": "Dangling fetch: GET /api/macro?history=true&days=${p} (app/makro/page.tsx:1126)", "shortDescription": {"text": "Dangling fetch: GET /api/macro?history=true&days=${p} (app/makro/page.tsx:1126)"}, "fullDescription": {"text": "`app/makro/page.tsx:1126` calls `GET /api/macro?history=true&days=${p}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/macro`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c58a4e318a6f70b", "name": "Dangling fetch: GET /api/watchlist (app/watchlist/page.tsx:465)", "shortDescription": {"text": "Dangling fetch: GET /api/watchlist (app/watchlist/page.tsx:465)"}, "fullDescription": {"text": "`app/watchlist/page.tsx:465` calls `GET /api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6684ceeb75085b0d", "name": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=20 (app/watchlist/page.tsx:477)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=20 (app/watchlist/page.tsx:477)"}, "fullDescription": {"text": "`app/watchlist/page.tsx:477` calls `GET /api/ohlcv?symbol=${sembol}&days=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc92f0ef8016d882", "name": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/watchlist/page.tsx:552)", "shortDescription": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/watchlist/page.tsx:552)"}, "fullDescription": {"text": "`app/watchlist/page.tsx:552` calls `DELETE /api/watchlist?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-496014571ccb373b", "name": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/watchlist/page.tsx:564)", "shortDescription": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/watchlist/page.tsx:564)"}, "fullDescription": {"text": "`app/watchlist/page.tsx:564` calls `DELETE /api/watchlist?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e03fa98b76466c9d", "name": "Dangling fetch: POST /api/watchlist (app/watchlist/page.tsx:576)", "shortDescription": {"text": "Dangling fetch: POST /api/watchlist (app/watchlist/page.tsx:576)"}, "fullDescription": {"text": "`app/watchlist/page.tsx:576` calls `POST /api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-da9198bcfa1a4d8f", "name": "Dangling fetch: GET /api/sectors (app/ters-portfolyo/page.tsx:105)", "shortDescription": {"text": "Dangling fetch: GET /api/sectors (app/ters-portfolyo/page.tsx:105)"}, "fullDescription": {"text": "`app/ters-portfolyo/page.tsx:105` calls `GET /api/sectors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sectors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-594c7ec125c099ce", "name": "Dangling fetch: GET /api/watchlist (app/ters-portfolyo/page.tsx:138)", "shortDescription": {"text": "Dangling fetch: GET /api/watchlist (app/ters-portfolyo/page.tsx:138)"}, "fullDescription": {"text": "`app/ters-portfolyo/page.tsx:138` calls `GET /api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c9068f8a46586e9", "name": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/ters-portfolyo/page.tsx:163)", "shortDescription": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/ters-portfolyo/page.tsx:163)"}, "fullDescription": {"text": "`app/ters-portfolyo/page.tsx:163` calls `DELETE /api/watchlist?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea4733c683b735c8", "name": "Dangling fetch: POST /api/watchlist (app/ters-portfolyo/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: POST /api/watchlist (app/ters-portfolyo/page.tsx:167)"}, "fullDescription": {"text": "`app/ters-portfolyo/page.tsx:167` calls `POST /api/watchlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/watchlist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8eb922ee4f6709f", "name": "Dangling fetch: POST /api/ters-portfolyo (app/ters-portfolyo/page.tsx:285)", "shortDescription": {"text": "Dangling fetch: POST /api/ters-portfolyo (app/ters-portfolyo/page.tsx:285)"}, "fullDescription": {"text": "`app/ters-portfolyo/page.tsx:285` calls `POST /api/ters-portfolyo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ters-portfolyo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1892fc42078215a", "name": "Dangling fetch: POST /api/ekonomi-takvimi (app/haberler/TabTakvim.tsx:190)", "shortDescription": {"text": "Dangling fetch: POST /api/ekonomi-takvimi (app/haberler/TabTakvim.tsx:190)"}, "fullDescription": {"text": "`app/haberler/TabTakvim.tsx:190` calls `POST /api/ekonomi-takvimi` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ekonomi-takvimi`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9d0e651bd9b42f2", "name": "Dangling fetch: GET /api/kap (app/haberler/TabKap.tsx:41)", "shortDescription": {"text": "Dangling fetch: GET /api/kap (app/haberler/TabKap.tsx:41)"}, "fullDescription": {"text": "`app/haberler/TabKap.tsx:41` calls `GET /api/kap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/kap`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b02dd50648951c5f", "name": "Dangling fetch: GET /api/signal-tracker (app/sinyal-takip/page.tsx:34)", "shortDescription": {"text": "Dangling fetch: GET /api/signal-tracker (app/sinyal-takip/page.tsx:34)"}, "fullDescription": {"text": "`app/sinyal-takip/page.tsx:34` calls `GET /api/signal-tracker` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signal-tracker`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-584d12eda0b75dc0", "name": "Dangling fetch: DELETE /api/signal-tracker?${params} (app/sinyal-takip/page.tsx:47)", "shortDescription": {"text": "Dangling fetch: DELETE /api/signal-tracker?${params} (app/sinyal-takip/page.tsx:47)"}, "fullDescription": {"text": "`app/sinyal-takip/page.tsx:47` calls `DELETE /api/signal-tracker?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signal-tracker`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-951b05cd0352eda0", "name": "Dangling fetch: GET /api/chat/sessions (app/sohbet/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: GET /api/chat/sessions (app/sohbet/page.tsx:167)"}, "fullDescription": {"text": "`app/sohbet/page.tsx:167` calls `GET /api/chat/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cef2bcb733752e4e", "name": "Dangling fetch: POST /api/chat/sessions (app/sohbet/page.tsx:177)", "shortDescription": {"text": "Dangling fetch: POST /api/chat/sessions (app/sohbet/page.tsx:177)"}, "fullDescription": {"text": "`app/sohbet/page.tsx:177` calls `POST /api/chat/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-236e1db898c6b652", "name": "Dangling fetch: GET /api/chat/sessions?id=${id} (app/sohbet/page.tsx:194)", "shortDescription": {"text": "Dangling fetch: GET /api/chat/sessions?id=${id} (app/sohbet/page.tsx:194)"}, "fullDescription": {"text": "`app/sohbet/page.tsx:194` calls `GET /api/chat/sessions?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5223be1e3513b46d", "name": "Dangling fetch: DELETE /api/chat/sessions?id=${id} (app/sohbet/page.tsx:211)", "shortDescription": {"text": "Dangling fetch: DELETE /api/chat/sessions?id=${id} (app/sohbet/page.tsx:211)"}, "fullDescription": {"text": "`app/sohbet/page.tsx:211` calls `DELETE /api/chat/sessions?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d4c126a0ceb6af3", "name": "Dangling fetch: POST /api/chat (app/sohbet/page.tsx:262)", "shortDescription": {"text": "Dangling fetch: POST /api/chat (app/sohbet/page.tsx:262)"}, "fullDescription": {"text": "`app/sohbet/page.tsx:262` calls `POST /api/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-807de918d43596ca", "name": "Dangling fetch: GET /api/aegis-us-portfolio (app/aegis-us-portfoyu/page.tsx:62)", "shortDescription": {"text": "Dangling fetch: GET /api/aegis-us-portfolio (app/aegis-us-portfoyu/page.tsx:62)"}, "fullDescription": {"text": "`app/aegis-us-portfoyu/page.tsx:62` calls `GET /api/aegis-us-portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/aegis-us-portfolio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c50242da517520c", "name": "Dangling fetch: GET /api/community/posts?${params} (app/topluluk/page.tsx:359)", "shortDescription": {"text": "Dangling fetch: GET /api/community/posts?${params} (app/topluluk/page.tsx:359)"}, "fullDescription": {"text": "`app/topluluk/page.tsx:359` calls `GET /api/community/posts?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/community/posts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39a1a9cc0d63a560", "name": "Dangling fetch: GET /api/community/posts/${id} (app/topluluk/[id]/page.tsx:248)", "shortDescription": {"text": "Dangling fetch: GET /api/community/posts/${id} (app/topluluk/[id]/page.tsx:248)"}, "fullDescription": {"text": "`app/topluluk/[id]/page.tsx:248` calls `GET /api/community/posts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/community/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8fb98573d3523b50", "name": "Dangling fetch: GET /api/community/posts/${id}/like (app/topluluk/[id]/page.tsx:292)", "shortDescription": {"text": "Dangling fetch: GET /api/community/posts/${id}/like (app/topluluk/[id]/page.tsx:292)"}, "fullDescription": {"text": "`app/topluluk/[id]/page.tsx:292` calls `GET /api/community/posts/${id}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/community/posts/<p>/like`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c3fcc695aa25b15", "name": "Dangling fetch: POST /api/community/posts/${id}/comments (app/topluluk/[id]/page.tsx:319)", "shortDescription": {"text": "Dangling fetch: POST /api/community/posts/${id}/comments (app/topluluk/[id]/page.tsx:319)"}, "fullDescription": {"text": "`app/topluluk/[id]/page.tsx:319` calls `POST /api/community/posts/${id}/comments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/community/posts/<p>/comments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb1a03de503a63ab", "name": "Dangling fetch: DELETE /api/community/posts/${id}/comments/${commentId} (app/topluluk/[id]/page.tsx:343)", "shortDescription": {"text": "Dangling fetch: DELETE /api/community/posts/${id}/comments/${commentId} (app/topluluk/[id]/page.tsx:343)"}, "fullDescription": {"text": "`app/topluluk/[id]/page.tsx:343` calls `DELETE /api/community/posts/${id}/comments/${commentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/community/posts/<p>/comments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b56c9b1b222f74b", "name": "Dangling fetch: POST /api/community/posts/${id}/report (app/topluluk/[id]/page.tsx:355)", "shortDescription": {"text": "Dangling fetch: POST /api/community/posts/${id}/report (app/topluluk/[id]/page.tsx:355)"}, "fullDescription": {"text": "`app/topluluk/[id]/page.tsx:355` calls `POST /api/community/posts/${id}/report` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/community/posts/<p>/report`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0a596d4364d5dda", "name": "Dangling fetch: DELETE /api/community/posts/${id} (app/topluluk/[id]/page.tsx:380)", "shortDescription": {"text": "Dangling fetch: DELETE /api/community/posts/${id} (app/topluluk/[id]/page.tsx:380)"}, "fullDescription": {"text": "`app/topluluk/[id]/page.tsx:380` calls `DELETE /api/community/posts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/community/posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f191b40415831fe0", "name": "Dangling fetch: POST /api/community/posts (app/topluluk/yeni/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: POST /api/community/posts (app/topluluk/yeni/page.tsx:154)"}, "fullDescription": {"text": "`app/topluluk/yeni/page.tsx:154` calls `POST /api/community/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/community/posts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5a1a12dfb77bd4c", "name": "Dangling fetch: GET /api/tema-performans?tema=${themeId} (app/tema/[id]/page.tsx:66)", "shortDescription": {"text": "Dangling fetch: GET /api/tema-performans?tema=${themeId} (app/tema/[id]/page.tsx:66)"}, "fullDescription": {"text": "`app/tema/[id]/page.tsx:66` calls `GET /api/tema-performans?tema=${themeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tema-performans`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-025453c418f76ff8", "name": "Dangling fetch: GET /api/tema-haberleri?tema=${themeId} (app/tema/[id]/page.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/tema-haberleri?tema=${themeId} (app/tema/[id]/page.tsx:73)"}, "fullDescription": {"text": "`app/tema/[id]/page.tsx:73` calls `GET /api/tema-haberleri?tema=${themeId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tema-haberleri`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a2366a9a8e64df7", "name": "Dangling fetch: GET /api/ohlcv?symbol=XU100.IS&days=90 (app/portfolyo/page.tsx:887)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?symbol=XU100.IS&days=90 (app/portfolyo/page.tsx:887)"}, "fullDescription": {"text": "`app/portfolyo/page.tsx:887` calls `GET /api/ohlcv?symbol=XU100.IS&days=90` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0e037589a166b6a", "name": "Dangling fetch: GET /api/portfolyo (app/portfolyo/page.tsx:906)", "shortDescription": {"text": "Dangling fetch: GET /api/portfolyo (app/portfolyo/page.tsx:906)"}, "fullDescription": {"text": "`app/portfolyo/page.tsx:906` calls `GET /api/portfolyo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portfolyo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1893f2f9a5e280f5", "name": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=90 (app/portfolyo/page.tsx:918)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=90 (app/portfolyo/page.tsx:918)"}, "fullDescription": {"text": "`app/portfolyo/page.tsx:918` calls `GET /api/ohlcv?symbol=${sembol}&days=90` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c0037bb5f4655112", "name": "Dangling fetch: GET /api/user/alert-preferences (app/portfolyo/page.tsx:966)", "shortDescription": {"text": "Dangling fetch: GET /api/user/alert-preferences (app/portfolyo/page.tsx:966)"}, "fullDescription": {"text": "`app/portfolyo/page.tsx:966` calls `GET /api/user/alert-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/alert-preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01f873ce4ddd69fd", "name": "Dangling fetch: POST /api/user/alert-preferences (app/portfolyo/page.tsx:979)", "shortDescription": {"text": "Dangling fetch: POST /api/user/alert-preferences (app/portfolyo/page.tsx:979)"}, "fullDescription": {"text": "`app/portfolyo/page.tsx:979` calls `POST /api/user/alert-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/alert-preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7e63bf917eb34493", "name": "Dangling fetch: POST /api/portfolyo (app/portfolyo/page.tsx:992)", "shortDescription": {"text": "Dangling fetch: POST /api/portfolyo (app/portfolyo/page.tsx:992)"}, "fullDescription": {"text": "`app/portfolyo/page.tsx:992` calls `POST /api/portfolyo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portfolyo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48dd43a3d82b6478", "name": "Dangling fetch: PATCH /api/portfolyo (app/portfolyo/page.tsx:1016)", "shortDescription": {"text": "Dangling fetch: PATCH /api/portfolyo (app/portfolyo/page.tsx:1016)"}, "fullDescription": {"text": "`app/portfolyo/page.tsx:1016` calls `PATCH /api/portfolyo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portfolyo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b0b20f158b43f86", "name": "Dangling fetch: DELETE /api/portfolyo?id=${id} (app/portfolyo/page.tsx:1038)", "shortDescription": {"text": "Dangling fetch: DELETE /api/portfolyo?id=${id} (app/portfolyo/page.tsx:1038)"}, "fullDescription": {"text": "`app/portfolyo/page.tsx:1038` calls `DELETE /api/portfolyo?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portfolyo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24d9b9f4de881dcc", "name": "Dangling fetch: POST /api/sectors/ai-summary (app/sektorler/SektorlerClient.tsx:1022)", "shortDescription": {"text": "Dangling fetch: POST /api/sectors/ai-summary (app/sektorler/SektorlerClient.tsx:1022)"}, "fullDescription": {"text": "`app/sektorler/SektorlerClient.tsx:1022` calls `POST /api/sectors/ai-summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sectors/ai-summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01a88fd87c341745", "name": "Dangling fetch: GET /api/sectors (app/sektorler/SektorlerClient.tsx:1198)", "shortDescription": {"text": "Dangling fetch: GET /api/sectors (app/sektorler/SektorlerClient.tsx:1198)"}, "fullDescription": {"text": "`app/sektorler/SektorlerClient.tsx:1198` calls `GET /api/sectors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sectors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0caf030d3531ab36", "name": "Dangling fetch: GET /api/commodity (app/sektorler/SektorlerClient.tsx:1226)", "shortDescription": {"text": "Dangling fetch: GET /api/commodity (app/sektorler/SektorlerClient.tsx:1226)"}, "fullDescription": {"text": "`app/sektorler/SektorlerClient.tsx:1226` calls `GET /api/commodity` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/commodity`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20006277e0e6568f", "name": "Dangling fetch: GET /api/movers (app/sektorler/SektorlerClient.tsx:1253)", "shortDescription": {"text": "Dangling fetch: GET /api/movers (app/sektorler/SektorlerClient.tsx:1253)"}, "fullDescription": {"text": "`app/sektorler/SektorlerClient.tsx:1253` calls `GET /api/movers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/movers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bff9ef5a889c9ba", "name": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=${OHLCV_DAYS} (app/sektorler/SektorlerClient.tsx:1282)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=${OHLCV_DAYS} (app/sektorler/SektorlerClient.tsx:1282)"}, "fullDescription": {"text": "`app/sektorler/SektorlerClient.tsx:1282` calls `GET /api/ohlcv?symbol=${sembol}&days=${OHLCV_DAYS}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ac2de58508c4454", "name": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=120 (app/sektorler/[id]/SectorDetailClient.tsx:93)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=120 (app/sektorler/[id]/SectorDetailClient.tsx:93)"}, "fullDescription": {"text": "`app/sektorler/[id]/SectorDetailClient.tsx:93` calls `GET /api/ohlcv?symbol=${sembol}&days=120` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e04019d6925f3614", "name": "Dangling fetch: POST /api/price-alerts (components/PriceAlertButton.tsx:34)", "shortDescription": {"text": "Dangling fetch: POST /api/price-alerts (components/PriceAlertButton.tsx:34)"}, "fullDescription": {"text": "`components/PriceAlertButton.tsx:34` calls `POST /api/price-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/price-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8eddd295f859b84b", "name": "Dangling fetch: GET /api/push/subscribe (components/PushNotificationButton.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/push/subscribe (components/PushNotificationButton.tsx:73)"}, "fullDescription": {"text": "`components/PushNotificationButton.tsx:73` calls `GET /api/push/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/push/subscribe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-808082c8b0fc2b06", "name": "Dangling fetch: POST /api/push/subscribe (components/PushNotificationButton.tsx:96)", "shortDescription": {"text": "Dangling fetch: POST /api/push/subscribe (components/PushNotificationButton.tsx:96)"}, "fullDescription": {"text": "`components/PushNotificationButton.tsx:96` calls `POST /api/push/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/push/subscribe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7e91e099b22eae1e", "name": "Dangling fetch: DELETE /api/push/subscribe (components/PushNotificationButton.tsx:121)", "shortDescription": {"text": "Dangling fetch: DELETE /api/push/subscribe (components/PushNotificationButton.tsx:121)"}, "fullDescription": {"text": "`components/PushNotificationButton.tsx:121` calls `DELETE /api/push/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/push/subscribe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-affcca433ac45aef", "name": "Dangling fetch: GET /api/news-impact?symbol=${encodeURIComponent(sembol)} (components/HaberEtkisi.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/news-impact?symbol=${encodeURIComponent(sembol)} (components/HaberEtkisi.tsx:53)"}, "fullDescription": {"text": "`components/HaberEtkisi.tsx:53` calls `GET /api/news-impact?symbol=${encodeURIComponent(sembol)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/news-impact`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0b7f3f4953a76b8", "name": "Dangling fetch: GET /api/commodity (components/LandingPage.tsx:395)", "shortDescription": {"text": "Dangling fetch: GET /api/commodity (components/LandingPage.tsx:395)"}, "fullDescription": {"text": "`components/LandingPage.tsx:395` calls `GET /api/commodity` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/commodity`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4ea2be155140c51", "name": "Dangling fetch: GET /api/ticker (components/LandingPage.tsx:620)", "shortDescription": {"text": "Dangling fetch: GET /api/ticker (components/LandingPage.tsx:620)"}, "fullDescription": {"text": "`components/LandingPage.tsx:620` calls `GET /api/ticker` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ticker`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02522f43336cd9eb", "name": "Dangling fetch: GET /api/firsatlar?minScore=45 (components/DashboardClient.tsx:204)", "shortDescription": {"text": "Dangling fetch: GET /api/firsatlar?minScore=45 (components/DashboardClient.tsx:204)"}, "fullDescription": {"text": "`components/DashboardClient.tsx:204` calls `GET /api/firsatlar?minScore=45` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/firsatlar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65f338a584b0e529", "name": "Dangling fetch: GET /api/gunun-secimi (components/DashboardClient.tsx:213)", "shortDescription": {"text": "Dangling fetch: GET /api/gunun-secimi (components/DashboardClient.tsx:213)"}, "fullDescription": {"text": "`components/DashboardClient.tsx:213` calls `GET /api/gunun-secimi` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/gunun-secimi`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e38e2b0390a18984", "name": "Dangling fetch: GET /api/signal-tracker (components/DashboardClient.tsx:221)", "shortDescription": {"text": "Dangling fetch: GET /api/signal-tracker (components/DashboardClient.tsx:221)"}, "fullDescription": {"text": "`components/DashboardClient.tsx:221` calls `GET /api/signal-tracker` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signal-tracker`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92ec2f4589246958", "name": "Dangling fetch: GET /api/sinyal-gecmisi?symbol=${encodeURIComponent(sembol)}&limit=10 (components/SinyalGecmisi.tsx:24)", "shortDescription": {"text": "Dangling fetch: GET /api/sinyal-gecmisi?symbol=${encodeURIComponent(sembol)}&limit=10 (components/SinyalGecmisi.tsx:24)"}, "fullDescription": {"text": "`components/SinyalGecmisi.tsx:24` calls `GET /api/sinyal-gecmisi?symbol=${encodeURIComponent(sembol)}&limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sinyal-gecmisi`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9cf9ff3323357435", "name": "Dangling fetch: GET /api/fundamentals/${encodeURIComponent(sembol)} (components/TakasKarti.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/fundamentals/${encodeURIComponent(sembol)} (components/TakasKarti.tsx:59)"}, "fullDescription": {"text": "`components/TakasKarti.tsx:59` calls `GET /api/fundamentals/${encodeURIComponent(sembol)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fundamentals/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-36a9adfe82dc5aed", "name": "Dangling fetch: GET /api/growth-momentum?market=${market}&limit=80 (components/BuyuyenSirketler.tsx:125)", "shortDescription": {"text": "Dangling fetch: GET /api/growth-momentum?market=${market}&limit=80 (components/BuyuyenSirketler.tsx:125)"}, "fullDescription": {"text": "`components/BuyuyenSirketler.tsx:125` calls `GET /api/growth-momentum?market=${market}&limit=80` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/growth-momentum`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cdf65f63a6146b0a", "name": "Dangling fetch: DELETE /api/signal-tracker?${params} (components/FirsatKarti.tsx:417)", "shortDescription": {"text": "Dangling fetch: DELETE /api/signal-tracker?${params} (components/FirsatKarti.tsx:417)"}, "fullDescription": {"text": "`components/FirsatKarti.tsx:417` calls `DELETE /api/signal-tracker?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signal-tracker`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11f3e783dfdfddb6", "name": "Dangling fetch: POST /api/signal-tracker (components/FirsatKarti.tsx:421)", "shortDescription": {"text": "Dangling fetch: POST /api/signal-tracker (components/FirsatKarti.tsx:421)"}, "fullDescription": {"text": "`components/FirsatKarti.tsx:421` calls `POST /api/signal-tracker` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signal-tracker`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8ab914ad026b48e", "name": "Dangling fetch: POST /api/portfolyo (components/PortfolyoEkleButton.tsx:26)", "shortDescription": {"text": "Dangling fetch: POST /api/portfolyo (components/PortfolyoEkleButton.tsx:26)"}, "fullDescription": {"text": "`components/PortfolyoEkleButton.tsx:26` calls `POST /api/portfolyo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portfolyo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dca01560c09b40db", "name": "Dangling fetch: GET /api/fundamental-health?symbol=${encodeURIComponent(sembol)}&market=${market} (components/FinansalSa", "shortDescription": {"text": "Dangling fetch: GET /api/fundamental-health?symbol=${encodeURIComponent(sembol)}&market=${market} (components/FinansalSaglik.tsx:22)"}, "fullDescription": {"text": "`components/FinansalSaglik.tsx:22` calls `GET /api/fundamental-health?symbol=${encodeURIComponent(sembol)}&market=${market}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fundamental-health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07babbde24517946", "name": "Dangling fetch: GET /api/investment-score?sembol=${encodeURIComponent(sembol)} (components/InvestableScoreCard.tsx:319)", "shortDescription": {"text": "Dangling fetch: GET /api/investment-score?sembol=${encodeURIComponent(sembol)} (components/InvestableScoreCard.tsx:319)"}, "fullDescription": {"text": "`components/InvestableScoreCard.tsx:319` calls `GET /api/investment-score?sembol=${encodeURIComponent(sembol)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/investment-score`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7942a1b75c077900", "name": "Dangling fetch: POST /api/explain (components/StockCard.tsx:287)", "shortDescription": {"text": "Dangling fetch: POST /api/explain (components/StockCard.tsx:287)"}, "fullDescription": {"text": "`components/StockCard.tsx:287` calls `POST /api/explain` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/explain`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ad95a4891fb15ac", "name": "Dangling fetch: GET /api/forward-outlook?symbol=${encodeURIComponent(sembol)} (components/GelecekGorunumu.tsx:32)", "shortDescription": {"text": "Dangling fetch: GET /api/forward-outlook?symbol=${encodeURIComponent(sembol)} (components/GelecekGorunumu.tsx:32)"}, "fullDescription": {"text": "`components/GelecekGorunumu.tsx:32` calls `GET /api/forward-outlook?symbol=${encodeURIComponent(sembol)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/forward-outlook`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57ec4df9603e9372", "name": "Dangling fetch: GET /api/mtf-analiz?symbol=${sembol} (components/MtfSinyalTablosu.tsx:17)", "shortDescription": {"text": "Dangling fetch: GET /api/mtf-analiz?symbol=${sembol} (components/MtfSinyalTablosu.tsx:17)"}, "fullDescription": {"text": "`components/MtfSinyalTablosu.tsx:17` calls `GET /api/mtf-analiz?symbol=${sembol}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/mtf-analiz`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51ffa3a76649e1f5", "name": "Dangling fetch: GET /api/peer-valuation?symbol=${encodeURIComponent(sembol)} (components/PeerDegerleme.tsx:22)", "shortDescription": {"text": "Dangling fetch: GET /api/peer-valuation?symbol=${encodeURIComponent(sembol)} (components/PeerDegerleme.tsx:22)"}, "fullDescription": {"text": "`components/PeerDegerleme.tsx:22` calls `GET /api/peer-valuation?symbol=${encodeURIComponent(sembol)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/peer-valuation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4131b7fcda24345f", "name": "Dangling fetch: DELETE /api/signals/${id} (components/DashboardSignals.tsx:194)", "shortDescription": {"text": "Dangling fetch: DELETE /api/signals/${id} (components/DashboardSignals.tsx:194)"}, "fullDescription": {"text": "`components/DashboardSignals.tsx:194` calls `DELETE /api/signals/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signals/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2dda8d6c9a8c8ab6", "name": "Dangling fetch: GET /api/fundamentals/${encodeURIComponent(sembol)} (components/TemelAnalizKarti.tsx:110)", "shortDescription": {"text": "Dangling fetch: GET /api/fundamentals/${encodeURIComponent(sembol)} (components/TemelAnalizKarti.tsx:110)"}, "fullDescription": {"text": "`components/TemelAnalizKarti.tsx:110` calls `GET /api/fundamentals/${encodeURIComponent(sembol)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/fundamentals/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7014becc1601542", "name": "Dangling fetch: GET /api/ohlcv?symbol=${sym}&days=5 (components/DashboardWatchlist.tsx:36)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sym}&days=5 (components/DashboardWatchlist.tsx:36)"}, "fullDescription": {"text": "`components/DashboardWatchlist.tsx:36` calls `GET /api/ohlcv?symbol=${sym}&days=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4919a1c9a76970b4", "name": "Dangling fetch: GET /api/profile (components/NavbarClient.tsx:171)", "shortDescription": {"text": "Dangling fetch: GET /api/profile (components/NavbarClient.tsx:171)"}, "fullDescription": {"text": "`components/NavbarClient.tsx:171` calls `GET /api/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ead3c04b6b530e7f", "name": "Dangling fetch: GET https://tradingeconomics.com/turkey/${path} (lib/turkey-macro.ts:172)", "shortDescription": {"text": "Dangling fetch: GET https://tradingeconomics.com/turkey/${path} (lib/turkey-macro.ts:172)"}, "fullDescription": {"text": "`lib/turkey-macro.ts:172` calls `GET https://tradingeconomics.com/turkey/${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/tradingeconomics.com/turkey/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8e7a8af94b9d27b", "name": "Dangling fetch: GET https://www.doviz.com/tahvil/tr-10-yillik-tahvil (lib/turkey-macro.ts:282)", "shortDescription": {"text": "Dangling fetch: GET https://www.doviz.com/tahvil/tr-10-yillik-tahvil (lib/turkey-macro.ts:282)"}, "fullDescription": {"text": "`lib/turkey-macro.ts:282` calls `GET https://www.doviz.com/tahvil/tr-10-yillik-tahvil` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.doviz.com/tahvil/tr-10-yillik-tahvil`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ccd5d92c6d396c39", "name": "Dangling fetch: GET /api/ohlcv?${params} (lib/api-client.ts:23)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?${params} (lib/api-client.ts:23)"}, "fullDescription": {"text": "`lib/api-client.ts:23` calls `GET /api/ohlcv?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dce4362ceede7e95", "name": "Dangling fetch: GET /api/ohlcv?${params} (lib/api-client.ts:56)", "shortDescription": {"text": "Dangling fetch: GET /api/ohlcv?${params} (lib/api-client.ts:56)"}, "fullDescription": {"text": "`lib/api-client.ts:56` calls `GET /api/ohlcv?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ohlcv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c31537f87c620f72", "name": "Dangling fetch: GET /api/macro (lib/api-client.ts:67)", "shortDescription": {"text": "Dangling fetch: GET /api/macro (lib/api-client.ts:67)"}, "fullDescription": {"text": "`lib/api-client.ts:67` calls `GET /api/macro` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/macro`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea14ad22d82276ee", "name": "Dangling fetch: GET /api/macro?history=${days} (lib/api-client.ts:76)", "shortDescription": {"text": "Dangling fetch: GET /api/macro?history=${days} (lib/api-client.ts:76)"}, "fullDescription": {"text": "`lib/api-client.ts:76` calls `GET /api/macro?history=${days}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/macro`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08be877dd3eab5f6", "name": "Dangling fetch: GET /api/risk (lib/api-client.ts:85)", "shortDescription": {"text": "Dangling fetch: GET /api/risk (lib/api-client.ts:85)"}, "fullDescription": {"text": "`lib/api-client.ts:85` calls `GET /api/risk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/risk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf8d1ab85eb1b3f8", "name": "Dangling fetch: GET /api/sectors (lib/api-client.ts:94)", "shortDescription": {"text": "Dangling fetch: GET /api/sectors (lib/api-client.ts:94)"}, "fullDescription": {"text": "`lib/api-client.ts:94` calls `GET /api/sectors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sectors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-611eb080805053ee", "name": "Dangling fetch: POST /api/signal-performance (lib/performance.ts:24)", "shortDescription": {"text": "Dangling fetch: POST /api/signal-performance (lib/performance.ts:24)"}, "fullDescription": {"text": "`lib/performance.ts:24` calls `POST /api/signal-performance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signal-performance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25d3af48cd83c9e6", "name": "Unused endpoint: POST /predict", "shortDescription": {"text": "Unused endpoint: POST /predict"}, "fullDescription": {"text": "`python-ml/main.py` declares `POST /predict` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a1214d3217233590", "name": "Unused endpoint: POST /retrain", "shortDescription": {"text": "Unused endpoint: POST /retrain"}, "fullDescription": {"text": "`python-ml/main.py` declares `POST /retrain` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25473"}, "properties": {"repository": "Doguserkivac09/BistAi", "repoUrl": "https://github.com/Doguserkivac09/BistAi", "branch": "main"}, "results": [{"ruleId": "scanner-d6c5d1f4821c41d9", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:74"}, "properties": {"repobilityId": "6f16eb9b82a2dcd6", "scanner": "scanner-primary", "fingerprint": "d6c5d1f4821c41d9", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-03fbd48a1a36ce51", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/emtia-endeks/page.tsx:174"}, "properties": {"repobilityId": "e732e284c5bd5478", "scanner": "scanner-primary", "fingerprint": "03fbd48a1a36ce51", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de8aaafe38ecb2de", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/hisse/[sembol]/HisseDetailClient.tsx:176"}, "properties": {"repobilityId": "fb37fae031817f2f", "scanner": "scanner-primary", "fingerprint": "de8aaafe38ecb2de", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-11ef3185fbab2b52", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/hisse/[sembol]/components/signal-row.tsx:77"}, "properties": {"repobilityId": "863b480b967aa832", "scanner": "scanner-primary", "fingerprint": "11ef3185fbab2b52", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5dd20144570a4bf3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/gecmis-firsatlar/page.tsx:230"}, "properties": {"repobilityId": "f7aab4d247e4cb4e", "scanner": "scanner-primary", "fingerprint": "5dd20144570a4bf3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6bc66436d232e22f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/scan-cache/route.ts:385"}, "properties": {"repobilityId": "697b1a85fb6d3198", "scanner": "scanner-primary", "fingerprint": "6bc66436d232e22f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2958137b5336c220", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/ai-portfolio/route.ts:77"}, "properties": {"repobilityId": "c1b9fa27bede0bdb", "scanner": "scanner-primary", "fingerprint": "2958137b5336c220", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3183fc6df8596f3a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/apex-portfolio/route.ts:79"}, "properties": {"repobilityId": "ff20fe74ec8daf80", "scanner": "scanner-primary", "fingerprint": "3183fc6df8596f3a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b72e35e91b23f4e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/long-term/route.ts:101"}, "properties": {"repobilityId": "3a601f30890f5f17", "scanner": "scanner-primary", "fingerprint": "b72e35e91b23f4e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2646595d146f94b3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/weekly-picks/route.ts:331"}, "properties": {"repobilityId": "6edb536caa16f0d5", "scanner": "scanner-primary", "fingerprint": "2646595d146f94b3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ddd25d02cdb85f80", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/sector-medians/route.ts:45"}, "properties": {"repobilityId": "fee7cb8f09f6cbd2", "scanner": "scanner-primary", "fingerprint": "ddd25d02cdb85f80", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e589a89e1be0402f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/scan/route.ts:157"}, "properties": {"repobilityId": "9e103c4a22e306f9", "scanner": "scanner-primary", "fingerprint": "e589a89e1be0402f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b336037383eb4831", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/future-scores-bist/route.ts:62"}, "properties": {"repobilityId": "b98c781a9388c2b4", "scanner": "scanner-primary", "fingerprint": "b336037383eb4831", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1aaece3a5d7e85e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/apex-us/route.ts:108"}, "properties": {"repobilityId": "fbebf9da54260f03", "scanner": "scanner-primary", "fingerprint": "1aaece3a5d7e85e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-198c983da3a07968", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/scan-us/route.ts:249"}, "properties": {"repobilityId": "fc408ea932197c60", "scanner": "scanner-primary", "fingerprint": "198c983da3a07968", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a5a1c5285aa5b49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/aegis-us/route.ts:330"}, "properties": {"repobilityId": "fead36d29b07f0b1", "scanner": "scanner-primary", "fingerprint": "3a5a1c5285aa5b49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-286e7e3839e6c9fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/future-scores/route.ts:62"}, "properties": {"repobilityId": "5a61655cfa2eb3fb", "scanner": "scanner-primary", "fingerprint": "286e7e3839e6c9fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f75038c83b256ddd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/firsatlar-fundamentals/route.ts:90"}, "properties": {"repobilityId": "6156603d0065931b", "scanner": "scanner-primary", "fingerprint": "f75038c83b256ddd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-943c7f5aa2cd7095", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/growth-momentum-bist/route.ts:67"}, "properties": {"repobilityId": "7c0766f23b009ef2", "scanner": "scanner-primary", "fingerprint": "943c7f5aa2cd7095", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99eb733aacc00e44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/profil/page.tsx:928"}, "properties": {"repobilityId": "9b90e58b9e614a00", "scanner": "scanner-primary", "fingerprint": "99eb733aacc00e44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aca40e80cffe5996", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/simulasyon/page.tsx:144"}, "properties": {"repobilityId": "7ef62030a84426e7", "scanner": "scanner-primary", "fingerprint": "aca40e80cffe5996", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-cbd4b5b9d259a3be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/tarama/page.tsx:838"}, "properties": {"repobilityId": "78d45fa820eb7cf4", "scanner": "scanner-primary", "fingerprint": "cbd4b5b9d259a3be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bec3bcd77345f18d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/makro/page.tsx:477"}, "properties": {"repobilityId": "b1c78f4c93ee038c", "scanner": "scanner-primary", "fingerprint": "bec3bcd77345f18d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f528680c8d78fc9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/ters-portfolyo/page.tsx:432"}, "properties": {"repobilityId": "01df3bf19a6c73a1", "scanner": "scanner-primary", "fingerprint": "5f528680c8d78fc9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-012afa7fef13b564", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/page.tsx:165"}, "properties": {"repobilityId": "90dea56fc87b4cfa", "scanner": "scanner-primary", "fingerprint": "012afa7fef13b564", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32882b47fcd65b93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/nasil-kullanilir/page.tsx:164"}, "properties": {"repobilityId": "b7683621ccc3e9f5", "scanner": "scanner-primary", "fingerprint": "32882b47fcd65b93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dcd5d8528b3149bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/sinyaller/[id]/page.tsx:203"}, "properties": {"repobilityId": "e252cf28da00d3fe", "scanner": "scanner-primary", "fingerprint": "dcd5d8528b3149bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f286d62a19eece7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/yardim/formasyonlar/[id]/page.tsx:260"}, "properties": {"repobilityId": "d2ebaafad2775a48", "scanner": "scanner-primary", "fingerprint": "0f286d62a19eece7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-48d2be62b43463ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/sohbet/page.tsx:450"}, "properties": {"repobilityId": "219cd7179bc898fa", "scanner": "scanner-primary", "fingerprint": "48d2be62b43463ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-592a21f07610138f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/topluluk/page.tsx:104"}, "properties": {"repobilityId": "648f36c5f4026629", "scanner": "scanner-primary", "fingerprint": "592a21f07610138f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c06b771e46fe43a5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/portfolyo/page.tsx:157"}, "properties": {"repobilityId": "5dcd85a837dd0dca", "scanner": "scanner-primary", "fingerprint": "c06b771e46fe43a5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-216a0b7a09f4fe8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/karsilastir/KarsilastirClient.tsx:837"}, "properties": {"repobilityId": "a2e38a1936ffeeb0", "scanner": "scanner-primary", "fingerprint": "216a0b7a09f4fe8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d52b65d9fe766da8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/sektorler/SektorlerClient.tsx:619"}, "properties": {"repobilityId": "48dc40967ddede83", "scanner": "scanner-primary", "fingerprint": "d52b65d9fe766da8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc34b3d71858233b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/HisseSkorKarti.tsx:140"}, "properties": {"repobilityId": "acc4b4eaa6900404", "scanner": "scanner-primary", "fingerprint": "fc34b3d71858233b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2f0bb929b484be1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/DashboardClient.tsx:483"}, "properties": {"repobilityId": "ab7eed33f57ede5a", "scanner": "scanner-primary", "fingerprint": "a2f0bb929b484be1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c64e4045c3b523f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/SinyalGecmisi.tsx:112"}, "properties": {"repobilityId": "1e818898a7a2365b", "scanner": "scanner-primary", "fingerprint": "c64e4045c3b523f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb0537b40f8ded6b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/BrokerLinkButton.tsx:101"}, "properties": {"repobilityId": "f00c1da7b29322c8", "scanner": "scanner-primary", "fingerprint": "bb0537b40f8ded6b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b9ac98147237b273", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/FirsatKarti.tsx:630"}, "properties": {"repobilityId": "bce72b984533dbb2", "scanner": "scanner-primary", "fingerprint": "b9ac98147237b273", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a80900f9d6442c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/NavbarClient.tsx:250"}, "properties": {"repobilityId": "610dda695217d783", "scanner": "scanner-primary", "fingerprint": "6a80900f9d6442c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e7d69db60686b7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/bist-guard.ts:12"}, "properties": {"repobilityId": "887ff7586aca01e2", "scanner": "scanner-primary", "fingerprint": "4e7d69db60686b7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6fad6a1a1e27d945", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/us-market-guard.ts:57"}, "properties": {"repobilityId": "dbfd93d2b55c568c", "scanner": "scanner-primary", "fingerprint": "6fad6a1a1e27d945", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e135131ceb18297", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/evaluate-engine.ts:255"}, "properties": {"repobilityId": "721129fd9a83c598", "scanner": "scanner-primary", "fingerprint": "6e135131ceb18297", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e96ff0a90c7d21d7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in python-ml/main.py:46"}, "properties": {"repobilityId": "e40c0bea45859c2a", "scanner": "scanner-primary", "fingerprint": "e96ff0a90c7d21d7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python-ml/main.py"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-dd9b3d7c32155394", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:74"}, "properties": {"repobilityId": "69d4743587f721a0", "scanner": "scanner-primary", "fingerprint": "dd9b3d7c32155394", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/layout.tsx"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-e58ad2e192eea516", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/simulasyon/page.tsx:144"}, "properties": {"repobilityId": "90bceaf2473415e8", "scanner": "scanner-primary", "fingerprint": "e58ad2e192eea516", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/simulasyon/page.tsx"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-2d2a7c2317f80426", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in .claude/hooks/gsd-check-update.js:9"}, "properties": {"repobilityId": "2f1a8e68723b6154", "scanner": "scanner-primary", "fingerprint": "2d2a7c2317f80426", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/hooks/gsd-check-update.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-ed30f4082a4e6757", "level": "note", "message": {"text": "Very large file: app/hisse/[sembol]/HisseDetailClient.tsx (1756 lines)"}, "properties": {"repobilityId": "253b8ad5930d6161", "scanner": "scanner-primary", "fingerprint": "ed30f4082a4e6757", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8d846170f988cd0b", "level": "note", "message": {"text": "Very large file: app/backtesting/page.tsx (1373 lines)"}, "properties": {"repobilityId": "dc14548d8eca1a6e", "scanner": "scanner-primary", "fingerprint": "8d846170f988cd0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-08670d1088a01c58", "level": "note", "message": {"text": "Very large file: app/makro/page.tsx (1757 lines)"}, "properties": {"repobilityId": "01448739eab2523d", "scanner": "scanner-primary", "fingerprint": "08670d1088a01c58", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bae1fcfb3bcb6987", "level": "note", "message": {"text": "Very large file: app/portfolyo/page.tsx (1521 lines)"}, "properties": {"repobilityId": "577cb78b2c5892d2", "scanner": "scanner-primary", "fingerprint": "bae1fcfb3bcb6987", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e0716dd5b1e6d180", "level": "note", "message": {"text": "Very large file: app/karsilastir/KarsilastirClient.tsx (1405 lines)"}, "properties": {"repobilityId": "595fb597eb2cca46", "scanner": "scanner-primary", "fingerprint": "e0716dd5b1e6d180", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b29ab97a5b3a8c7e", "level": "note", "message": {"text": "Very large file: app/sektorler/SektorlerClient.tsx (1661 lines)"}, "properties": {"repobilityId": "6a16ea092a6f7e8b", "scanner": "scanner-primary", "fingerprint": "b29ab97a5b3a8c7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a58d4d5d9b9cad3b", "level": "note", "message": {"text": "Very large file: components/LandingPage.tsx (1036 lines)"}, "properties": {"repobilityId": "0e90fdb005e4eacd", "scanner": "scanner-primary", "fingerprint": "a58d4d5d9b9cad3b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-de25d598465a2dae", "level": "note", "message": {"text": "Very large file: lib/signals.ts (1942 lines)"}, "properties": {"repobilityId": "d32dcb45b437faad", "scanner": "scanner-primary", "fingerprint": "de25d598465a2dae", "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": "9d232e9c3e0d8a28", "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": "022d9a5662acc116", "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": "121199be9545def6", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "e85eac3e3f5946a3", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "88c0a7f2afd7fe06", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "4f1469b5a95c07cf", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "20fa59007072fd3c", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2722702157f0f8a7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/gsd-file-manifest.json"}, "properties": {"repobilityId": "dd503ce8df430217", "scanner": "scanner-primary", "fingerprint": "2722702157f0f8a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/gsd-file-manifest.json"}, "region": {"startLine": 1}}}]}, {"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-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-ecb0d2c55ed6875d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.json"}, "properties": {"repobilityId": "d8bae33a6d517bf0", "scanner": "scanner-primary", "fingerprint": "ecb0d2c55ed6875d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a897f9640570497b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-planner.md"}, "properties": {"repobilityId": "427147ec66d16942", "scanner": "scanner-primary", "fingerprint": "a897f9640570497b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-planner.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-efecebab2bc7fee1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-ui-checker.md"}, "properties": {"repobilityId": "acc855d9ffc1f094", "scanner": "scanner-primary", "fingerprint": "efecebab2bc7fee1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-ui-checker.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0c6b0d501e013a2b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-project-researcher.md"}, "properties": {"repobilityId": "311b3f67f834be8b", "scanner": "scanner-primary", "fingerprint": "0c6b0d501e013a2b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-project-researcher.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9bf8fdb335919a36", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-ui-auditor.md"}, "properties": {"repobilityId": "c2e92c54f7d70335", "scanner": "scanner-primary", "fingerprint": "9bf8fdb335919a36", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-ui-auditor.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5ff671b66e931f23", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-nyquist-auditor.md"}, "properties": {"repobilityId": "fe6b7cce7dfed456", "scanner": "scanner-primary", "fingerprint": "5ff671b66e931f23", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-nyquist-auditor.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fd0d926e69f56057", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-verifier.md"}, "properties": {"repobilityId": "b76cfddf23fb6815", "scanner": "scanner-primary", "fingerprint": "fd0d926e69f56057", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-verifier.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-171c7e61359921e2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-roadmapper.md"}, "properties": {"repobilityId": "0c66d0f39751bb8f", "scanner": "scanner-primary", "fingerprint": "171c7e61359921e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-roadmapper.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8258d2109ddaf05b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-phase-researcher.md"}, "properties": {"repobilityId": "6a22dcfa685efe34", "scanner": "scanner-primary", "fingerprint": "8258d2109ddaf05b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-phase-researcher.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-71db13b265929262", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-plan-checker.md"}, "properties": {"repobilityId": "bb38c09ff1310fd4", "scanner": "scanner-primary", "fingerprint": "71db13b265929262", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-plan-checker.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce3cbbf053488d74", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-executor.md"}, "properties": {"repobilityId": "8a4647570e2884b2", "scanner": "scanner-primary", "fingerprint": "ce3cbbf053488d74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-executor.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-688aa81b5a8e6a40", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/gsd-ui-researcher.md"}, "properties": {"repobilityId": "a941e831c740f6f3", "scanner": "scanner-primary", "fingerprint": "688aa81b5a8e6a40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/gsd-ui-researcher.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb217e5ec84deecd", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/add-todo.md"}, "properties": {"repobilityId": "b96668dd6d5f92f6", "scanner": "scanner-primary", "fingerprint": "bb217e5ec84deecd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/add-todo.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-573fbba17168da2b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/progress.md"}, "properties": {"repobilityId": "7891846c186a1dcd", "scanner": "scanner-primary", "fingerprint": "573fbba17168da2b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/progress.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d53a9399c1743995", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/do.md"}, "properties": {"repobilityId": "1cea2a3b8d7a3afb", "scanner": "scanner-primary", "fingerprint": "d53a9399c1743995", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/do.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0f29c3ba77e0ef34", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/help.md"}, "properties": {"repobilityId": "81f76960160e2d8b", "scanner": "scanner-primary", "fingerprint": "0f29c3ba77e0ef34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/help.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-70bdcc12079b4a59", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/add-tests.md"}, "properties": {"repobilityId": "aab74fad50b089c3", "scanner": "scanner-primary", "fingerprint": "70bdcc12079b4a59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/add-tests.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8ad2090000f31390", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/pause-work.md"}, "properties": {"repobilityId": "cb79eaade31af3c3", "scanner": "scanner-primary", "fingerprint": "8ad2090000f31390", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/pause-work.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90d4e29caecd3f9f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/set-profile.md"}, "properties": {"repobilityId": "6b9bd42bdeaa47c1", "scanner": "scanner-primary", "fingerprint": "90d4e29caecd3f9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/set-profile.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bda20c47ee9748a4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/discuss-phase.md"}, "properties": {"repobilityId": "2d72542f7d1aae53", "scanner": "scanner-primary", "fingerprint": "bda20c47ee9748a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/discuss-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-165c3127aa52b8e6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/health.md"}, "properties": {"repobilityId": "346866edda491907", "scanner": "scanner-primary", "fingerprint": "165c3127aa52b8e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/health.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6d492dcbfa1a9c5c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/reapply-patches.md"}, "properties": {"repobilityId": "057dce5470f6c43e", "scanner": "scanner-primary", "fingerprint": "6d492dcbfa1a9c5c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/reapply-patches.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4c65b8c7c342b53e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/remove-phase.md"}, "properties": {"repobilityId": "27238b77197d72bc", "scanner": "scanner-primary", "fingerprint": "4c65b8c7c342b53e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/remove-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b2154c4fd48ee764", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/add-phase.md"}, "properties": {"repobilityId": "e2da96db408cb254", "scanner": "scanner-primary", "fingerprint": "b2154c4fd48ee764", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/add-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a9e0d58d7daeb659", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/settings.md"}, "properties": {"repobilityId": "1325a7aae985a8ea", "scanner": "scanner-primary", "fingerprint": "a9e0d58d7daeb659", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/settings.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a3ff8bcca97b166", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/profile-user.md"}, "properties": {"repobilityId": "680e4d20513689d7", "scanner": "scanner-primary", "fingerprint": "6a3ff8bcca97b166", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/profile-user.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-925c6bf1ba78b524", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/check-todos.md"}, "properties": {"repobilityId": "3d67f68ec1c5e375", "scanner": "scanner-primary", "fingerprint": "925c6bf1ba78b524", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/check-todos.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-31d62f6a7ead23de", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/debug.md"}, "properties": {"repobilityId": "58e9cb1b4965d852", "scanner": "scanner-primary", "fingerprint": "31d62f6a7ead23de", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/debug.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f14294c894084d84", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/next.md"}, "properties": {"repobilityId": "7de891ae5aadc931", "scanner": "scanner-primary", "fingerprint": "f14294c894084d84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/next.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7dd7af5d6e6b568", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/new-milestone.md"}, "properties": {"repobilityId": "f1eb7662b2b0fedb", "scanner": "scanner-primary", "fingerprint": "a7dd7af5d6e6b568", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/new-milestone.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ff195dcf306d416a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/list-phase-assumptions.md"}, "properties": {"repobilityId": "e91c396be632d0e0", "scanner": "scanner-primary", "fingerprint": "ff195dcf306d416a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/list-phase-assumptions.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8549997a13e43f36", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/autonomous.md"}, "properties": {"repobilityId": "effa7c3701057bbc", "scanner": "scanner-primary", "fingerprint": "8549997a13e43f36", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/autonomous.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0004567600b489d9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/plan-phase.md"}, "properties": {"repobilityId": "0d4cd53feb4baff6", "scanner": "scanner-primary", "fingerprint": "0004567600b489d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/plan-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-245b85665988390a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/plan-milestone-gaps.md"}, "properties": {"repobilityId": "aae716aa01fd5df8", "scanner": "scanner-primary", "fingerprint": "245b85665988390a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/plan-milestone-gaps.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f67588ffd7007ad1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/update.md"}, "properties": {"repobilityId": "31de8655f00298c2", "scanner": "scanner-primary", "fingerprint": "f67588ffd7007ad1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/update.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-746f34135b5c7480", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/cleanup.md"}, "properties": {"repobilityId": "ce45d26c73653a9e", "scanner": "scanner-primary", "fingerprint": "746f34135b5c7480", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/cleanup.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6c02de24e4d7a9ba", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/new-project.md"}, "properties": {"repobilityId": "1261c6ed2ce31cc0", "scanner": "scanner-primary", "fingerprint": "6c02de24e4d7a9ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/new-project.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-adee8005f954ba01", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/stats.md"}, "properties": {"repobilityId": "d153e925fc443d8d", "scanner": "scanner-primary", "fingerprint": "adee8005f954ba01", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/stats.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9da71014ad1431df", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/ui-review.md"}, "properties": {"repobilityId": "ba8fab744b310e03", "scanner": "scanner-primary", "fingerprint": "9da71014ad1431df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/ui-review.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7626612b68d8ade1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/session-report.md"}, "properties": {"repobilityId": "4f63268ac01a76ab", "scanner": "scanner-primary", "fingerprint": "7626612b68d8ade1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/session-report.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c15f002265f87896", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gsd/research-phase.md"}, "properties": {"repobilityId": "51cb0171feae1cf5", "scanner": "scanner-primary", "fingerprint": "c15f002265f87896", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gsd/research-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a9a666c8b5e2963d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/milestone-archive.md"}, "properties": {"repobilityId": "e048caf75fbf4e06", "scanner": "scanner-primary", "fingerprint": "a9a666c8b5e2963d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/milestone-archive.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c460598f508f51ca", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/VALIDATION.md"}, "properties": {"repobilityId": "b9b68e459a9df1b7", "scanner": "scanner-primary", "fingerprint": "c460598f508f51ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/VALIDATION.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92f8d012173ae0f2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/state.md"}, "properties": {"repobilityId": "f6f05f2b9e021539", "scanner": "scanner-primary", "fingerprint": "92f8d012173ae0f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/state.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-665596707e65a898", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/phase-prompt.md"}, "properties": {"repobilityId": "f53551aae7aff8cd", "scanner": "scanner-primary", "fingerprint": "665596707e65a898", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/phase-prompt.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a2a8910d54e4c885", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/copilot-instructions.md"}, "properties": {"repobilityId": "72c223c51feedff7", "scanner": "scanner-primary", "fingerprint": "a2a8910d54e4c885", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/copilot-instructions.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b03ee0354e205d1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/dev-preferences.md"}, "properties": {"repobilityId": "859d43518624bf77", "scanner": "scanner-primary", "fingerprint": "1b03ee0354e205d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/dev-preferences.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-896a0568829cadd9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/claude-md.md"}, "properties": {"repobilityId": "6ba6302c8e674d82", "scanner": "scanner-primary", "fingerprint": "896a0568829cadd9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/claude-md.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a1e18490e7a7b3bb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/research.md"}, "properties": {"repobilityId": "638bcfec9d741349", "scanner": "scanner-primary", "fingerprint": "a1e18490e7a7b3bb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/research.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-42edafe48e3bf20c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/research-project/STACK.md"}, "properties": {"repobilityId": "0c25548487f091ba", "scanner": "scanner-primary", "fingerprint": "42edafe48e3bf20c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/research-project/STACK.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8301f5b45cf87820", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/stack.md"}, "properties": {"repobilityId": "55c5fc74b968e547", "scanner": "scanner-primary", "fingerprint": "8301f5b45cf87820", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/codebase/stack.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-35043920d856b91c", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/get-shit-done/templates/codebase/stack.md"}, "properties": {"repobilityId": "92c664edaa53e9df", "scanner": "scanner-primary", "fingerprint": "35043920d856b91c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/codebase/stack.md"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-1216a6c6e25a8a7b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/concerns.md"}, "properties": {"repobilityId": "2ab020a04e6b13e3", "scanner": "scanner-primary", "fingerprint": "1216a6c6e25a8a7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/codebase/concerns.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a7ab6f4c4a57b25", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/testing.md"}, "properties": {"repobilityId": "0e3b554b26e0c3d3", "scanner": "scanner-primary", "fingerprint": "4a7ab6f4c4a57b25", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/codebase/testing.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-920ae36b2b11fdc0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/templates/codebase/architecture.md"}, "properties": {"repobilityId": "248d0775055542ab", "scanner": "scanner-primary", "fingerprint": "920ae36b2b11fdc0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/templates/codebase/architecture.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b15cb6d897ccccf8", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/add-todo.md"}, "properties": {"repobilityId": "596ad3526c723d50", "scanner": "scanner-primary", "fingerprint": "b15cb6d897ccccf8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/add-todo.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-47cf1675d1a44ad3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/diagnose-issues.md"}, "properties": {"repobilityId": "2792d69a743df639", "scanner": "scanner-primary", "fingerprint": "47cf1675d1a44ad3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/diagnose-issues.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3cd93ec5a51a8b2d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/add-tests.md"}, "properties": {"repobilityId": "17981ae5f3ed82e3", "scanner": "scanner-primary", "fingerprint": "3cd93ec5a51a8b2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/add-tests.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0f133dfc70b08d00", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/pause-work.md"}, "properties": {"repobilityId": "eadeb7eb14702a4d", "scanner": "scanner-primary", "fingerprint": "0f133dfc70b08d00", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/pause-work.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cf02774b276f4ad6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/health.md"}, "properties": {"repobilityId": "c48db0a3785734cc", "scanner": "scanner-primary", "fingerprint": "cf02774b276f4ad6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/health.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ff1fd4e293bfd611", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/verify-work.md"}, "properties": {"repobilityId": "e6de5c4686fb3366", "scanner": "scanner-primary", "fingerprint": "ff1fd4e293bfd611", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/verify-work.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0ce99967d20744eb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/insert-phase.md"}, "properties": {"repobilityId": "66ac9695ae492bae", "scanner": "scanner-primary", "fingerprint": "0ce99967d20744eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/insert-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-978a49899a067bfa", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/execute-plan.md"}, "properties": {"repobilityId": "35c2423dcdbf6c1b", "scanner": "scanner-primary", "fingerprint": "978a49899a067bfa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/execute-plan.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-91ab092218fa61b4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/add-phase.md"}, "properties": {"repobilityId": "e405f0045b1995bb", "scanner": "scanner-primary", "fingerprint": "91ab092218fa61b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/add-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b22d0e879a7bffe7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/settings.md"}, "properties": {"repobilityId": "aa823998ec6e8120", "scanner": "scanner-primary", "fingerprint": "b22d0e879a7bffe7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/settings.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a0985cfb3642a73a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/validate-phase.md"}, "properties": {"repobilityId": "dec51536f8fd15c0", "scanner": "scanner-primary", "fingerprint": "a0985cfb3642a73a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/validate-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c57d8f6dac0ce98", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/check-todos.md"}, "properties": {"repobilityId": "421ed6952024d25a", "scanner": "scanner-primary", "fingerprint": "7c57d8f6dac0ce98", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/check-todos.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b38e3c7b17d0eea0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/ship.md"}, "properties": {"repobilityId": "90c418134583d1d6", "scanner": "scanner-primary", "fingerprint": "b38e3c7b17d0eea0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/ship.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-87c15cb5dbcdc1e8", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/resume-project.md"}, "properties": {"repobilityId": "bfe674597ab46fa9", "scanner": "scanner-primary", "fingerprint": "87c15cb5dbcdc1e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/resume-project.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-362cc90b28a7d48c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/ui-phase.md"}, "properties": {"repobilityId": "4248b5d2ae47d034", "scanner": "scanner-primary", "fingerprint": "362cc90b28a7d48c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/ui-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f573c4dcc8f682cc", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/autonomous.md"}, "properties": {"repobilityId": "c8530f38f2e0d9ee", "scanner": "scanner-primary", "fingerprint": "f573c4dcc8f682cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/autonomous.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0f5885b149ba86eb", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/get-shit-done/workflows/plan-phase.md"}, "properties": {"repobilityId": "c661cc432f2def1c", "scanner": "scanner-primary", "fingerprint": "0f5885b149ba86eb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/plan-phase.md"}, "region": {"startLine": 460}}}]}, {"ruleId": "scanner-8b74778d433cb776", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/plan-phase.md"}, "properties": {"repobilityId": "33b5e9c99f39d9b7", "scanner": "scanner-primary", "fingerprint": "8b74778d433cb776", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/plan-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41db87ed704dd194", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/execute-phase.md"}, "properties": {"repobilityId": "d54c38d69f8100f2", "scanner": "scanner-primary", "fingerprint": "41db87ed704dd194", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/execute-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e40ead765fcc3fb9", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/get-shit-done/workflows/update.md"}, "properties": {"repobilityId": "caeba5dddeacb414", "scanner": "scanner-primary", "fingerprint": "e40ead765fcc3fb9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/update.md"}, "region": {"startLine": 255}}}]}, {"ruleId": "scanner-c29eafa422b6edfe", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/cleanup.md"}, "properties": {"repobilityId": "e6b2712777ffbd13", "scanner": "scanner-primary", "fingerprint": "c29eafa422b6edfe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/cleanup.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-61ed08f466344220", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/new-project.md"}, "properties": {"repobilityId": "c0715030e74e581d", "scanner": "scanner-primary", "fingerprint": "61ed08f466344220", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/new-project.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-91fbb35bfb488f7a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/stats.md"}, "properties": {"repobilityId": "70325f9049a3d088", "scanner": "scanner-primary", "fingerprint": "91fbb35bfb488f7a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/stats.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-844c3d2374636fc2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/workflows/research-phase.md"}, "properties": {"repobilityId": "88ca71210de81931", "scanner": "scanner-primary", "fingerprint": "844c3d2374636fc2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/workflows/research-phase.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4ce36038651b8e68", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/tdd.md"}, "properties": {"repobilityId": "b1ad44136e655b81", "scanner": "scanner-primary", "fingerprint": "4ce36038651b8e68", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/references/tdd.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-72f2912e92722897", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/continuation-format.md"}, "properties": {"repobilityId": "99d381f0c75377c9", "scanner": "scanner-primary", "fingerprint": "72f2912e92722897", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/references/continuation-format.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f9025bd8fed9a19e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/decimal-phase-calculation.md"}, "properties": {"repobilityId": "c844d91559f5fbfe", "scanner": "scanner-primary", "fingerprint": "f9025bd8fed9a19e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/references/decimal-phase-calculation.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56945162ec777f74", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/model-profile-resolution.md"}, "properties": {"repobilityId": "41f2652763b35da2", "scanner": "scanner-primary", "fingerprint": "56945162ec777f74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/references/model-profile-resolution.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-68c06571bc6e109f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/git-planning-commit.md"}, "properties": {"repobilityId": "e231b0765fee7895", "scanner": "scanner-primary", "fingerprint": "68c06571bc6e109f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/references/git-planning-commit.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ff52d9241b568d0a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/checkpoints.md"}, "properties": {"repobilityId": "a97ba87db2b42b6f", "scanner": "scanner-primary", "fingerprint": "ff52d9241b568d0a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/references/checkpoints.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-141dc2e7e36f26e1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/planning-config.md"}, "properties": {"repobilityId": "f38980b2c15d2368", "scanner": "scanner-primary", "fingerprint": "141dc2e7e36f26e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/references/planning-config.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-852ec1190d69fa1f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/get-shit-done/references/phase-argument-parsing.md"}, "properties": {"repobilityId": "26b2805b3e7a5bda", "scanner": "scanner-primary", "fingerprint": "852ec1190d69fa1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/get-shit-done/references/phase-argument-parsing.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d8f945a585e6445d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/hisse/[sembol]/HisseDetailClient.tsx:308"}, "properties": {"repobilityId": "0831252ef328a0f7", "scanner": "scanner-primary", "fingerprint": "d8f945a585e6445d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92e841f82ff17584", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/gecmis-firsatlar/page.tsx:71"}, "properties": {"repobilityId": "446d9472c6ca51e2", "scanner": "scanner-primary", "fingerprint": "92e841f82ff17584", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ffa869a6a96352e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cron/price-alerts/route.ts:72"}, "properties": {"repobilityId": "876aa23566f9c852", "scanner": "scanner-primary", "fingerprint": "ffa869a6a96352e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-331ff99fa7db8042", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/cron/scan-cache/route.ts:29"}, "properties": {"repobilityId": "4dfed1d56411698e", "scanner": "scanner-primary", "fingerprint": "331ff99fa7db8042", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5accce13263ab162", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/uzun-vade-firsatlar/route.ts:99"}, "properties": {"repobilityId": "f62eae86aec2184a", "scanner": "scanner-primary", "fingerprint": "5accce13263ab162", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bf5891c22feca10", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/ai-portfoyler/page.tsx:239"}, "properties": {"repobilityId": "f8b0b30f3f3d35f2", "scanner": "scanner-primary", "fingerprint": "0bf5891c22feca10", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c0c2f0a1b44ef9fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/profil/page.tsx:142"}, "properties": {"repobilityId": "039ae10efeee33d7", "scanner": "scanner-primary", "fingerprint": "c0c2f0a1b44ef9fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd852f874bdfc565", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/firsatlar/page.tsx:360"}, "properties": {"repobilityId": "e67b07fa3370f788", "scanner": "scanner-primary", "fingerprint": "bd852f874bdfc565", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-667ff4d063690a76", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/simulasyon/page.tsx:206"}, "properties": {"repobilityId": "1895fe43be8c2579", "scanner": "scanner-primary", "fingerprint": "667ff4d063690a76", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-357f220e9194436c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/temalar/page.tsx:40"}, "properties": {"repobilityId": "9c702dab5b68a73a", "scanner": "scanner-primary", "fingerprint": "357f220e9194436c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e968578b7eb120dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/tarama/page.tsx:305"}, "properties": {"repobilityId": "a67783e91df4ba76", "scanner": "scanner-primary", "fingerprint": "e968578b7eb120dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2357b3e4618c86f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/makro/page.tsx:167"}, "properties": {"repobilityId": "0e4b17b92e001955", "scanner": "scanner-primary", "fingerprint": "2357b3e4618c86f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-164e1775f926f988", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/makro/page.tsx:1075"}, "properties": {"repobilityId": "b153271e3258f758", "scanner": "scanner-primary", "fingerprint": "164e1775f926f988", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3fba24d9101f558", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/watchlist/page.tsx:576"}, "properties": {"repobilityId": "b6d385e0ab072043", "scanner": "scanner-primary", "fingerprint": "a3fba24d9101f558", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ada190a5bf57b7e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/ters-portfolyo/page.tsx:167"}, "properties": {"repobilityId": "2f25ad75ca5fec04", "scanner": "scanner-primary", "fingerprint": "9ada190a5bf57b7e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a28107fe786cba68", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/sinyal-takip/page.tsx:47"}, "properties": {"repobilityId": "ead0200819239be1", "scanner": "scanner-primary", "fingerprint": "a28107fe786cba68", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7981145c0fd0f7ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/topluluk/page.tsx:359"}, "properties": {"repobilityId": "3ae6302051637517", "scanner": "scanner-primary", "fingerprint": "7981145c0fd0f7ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5040b4c8b481592b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/tema/[id]/page.tsx:66"}, "properties": {"repobilityId": "f67f1677a8149883", "scanner": "scanner-primary", "fingerprint": "5040b4c8b481592b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd4b9af6ff84bc2f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/sektorler/SektorlerClient.tsx:1198"}, "properties": {"repobilityId": "e09eba00e37633f3", "scanner": "scanner-primary", "fingerprint": "fd4b9af6ff84bc2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a540a15635eba2bb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-investment-score.mjs:15"}, "properties": {"repobilityId": "b66d7c84d57f4272", "scanner": "scanner-primary", "fingerprint": "a540a15635eba2bb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-79c84c73c5f86f1b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/PushNotificationButton.tsx:96"}, "properties": {"repobilityId": "79e021020c76d480", "scanner": "scanner-primary", "fingerprint": "79c84c73c5f86f1b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64e34dd1381e4c56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/LandingPage.tsx:395"}, "properties": {"repobilityId": "05185394484a5007", "scanner": "scanner-primary", "fingerprint": "64e34dd1381e4c56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fc285d69970a0c79", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/FirsatKarti.tsx:421"}, "properties": {"repobilityId": "2f67be870ebf1050", "scanner": "scanner-primary", "fingerprint": "fc285d69970a0c79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-45ceb76faea597a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/api-client.ts:23"}, "properties": {"repobilityId": "23b247fa15c8b0ac", "scanner": "scanner-primary", "fingerprint": "45ceb76faea597a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-110c48f867b1c795", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/signals.ts:922"}, "properties": {"repobilityId": "7da665b976e73948", "scanner": "scanner-primary", "fingerprint": "110c48f867b1c795", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45bacbb0834bef07", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/news-impact.ts:375"}, "properties": {"repobilityId": "a18b46bda87e00bd", "scanner": "scanner-primary", "fingerprint": "45bacbb0834bef07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7059f1cbcad9bed", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/fundamental-health.ts:78"}, "properties": {"repobilityId": "8a7fa42d9c0b70cd", "scanner": "scanner-primary", "fingerprint": "e7059f1cbcad9bed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5a1d7b350ec64d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in .claude/hooks/gsd-context-monitor.js:2"}, "properties": {"repobilityId": "12550d8c2db964d3", "scanner": "scanner-primary", "fingerprint": "a5a1d7b350ec64d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6529599616cf58ce", "level": "error", "message": {"text": "FastAPI POST `predict` without auth dependency \u2014 python-ml/main.py:277"}, "properties": {"repobilityId": "e75aafb7448ccdbc", "scanner": "scanner-primary", "fingerprint": "6529599616cf58ce", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python-ml/main.py"}, "region": {"startLine": 277}}}]}, {"ruleId": "scanner-2f1f9adcce4ed264", "level": "error", "message": {"text": "FastAPI POST `retrain` without auth dependency \u2014 python-ml/main.py:313"}, "properties": {"repobilityId": "7f1e1b9394817076", "scanner": "scanner-primary", "fingerprint": "2f1f9adcce4ed264", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "python-ml/main.py"}, "region": {"startLine": 313}}}]}, {"ruleId": "scanner-81acd8eca94791ee", "level": "error", "message": {"text": "Dangling fetch: GET /api/apex-portfolio (app/apex-portfoyu/page.tsx:64)"}, "properties": {"repobilityId": "262b0477fcdf3701", "scanner": "scanner-primary", "fingerprint": "81acd8eca94791ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c16581811b8175e8", "level": "error", "message": {"text": "Dangling fetch: GET /api/emtia-analiz (app/emtia-endeks/page.tsx:354)"}, "properties": {"repobilityId": "06a51456224a5d15", "scanner": "scanner-primary", "fingerprint": "c16581811b8175e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bcc7404d5e31945c", "level": "error", "message": {"text": "Dangling fetch: GET /api/profile (app/fiyatlandirma/page.tsx:78)"}, "properties": {"repobilityId": "c69cfde10b047225", "scanner": "scanner-primary", "fingerprint": "bcc7404d5e31945c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17271722ab98c6e8", "level": "error", "message": {"text": "Dangling fetch: POST /api/stripe/checkout (app/fiyatlandirma/page.tsx:104)"}, "properties": {"repobilityId": "bee21ccf7815dab4", "scanner": "scanner-primary", "fingerprint": "17271722ab98c6e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44306e42e175b015", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${s}&days=30 (app/hisse/[sembol]/HisseDetailClient.tsx:308)"}, "properties": {"repobilityId": "432476bb4511ce8c", "scanner": "scanner-primary", "fingerprint": "44306e42e175b015", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5fe8381c6bb1ee43", "level": "error", "message": {"text": "Dangling fetch: GET /api/signal-stats (app/hisse/[sembol]/HisseDetailClient.tsx:356)"}, "properties": {"repobilityId": "3f59e4233039ef7d", "scanner": "scanner-primary", "fingerprint": "5fe8381c6bb1ee43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea3c9404e47218ca", "level": "error", "message": {"text": "Dangling fetch: GET /api/investment-score?sembol=${encodeURIComponent(sembol)} (app/hisse/[sembol]/HisseDetailClient.tsx:382)"}, "properties": {"repobilityId": "c91ce20958ab0de1", "scanner": "scanner-primary", "fingerprint": "ea3c9404e47218ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b69bbf389e9120f5", "level": "error", "message": {"text": "Dangling fetch: GET /api/haber?sembol=${sembol} (app/hisse/[sembol]/HisseDetailClient.tsx:462)"}, "properties": {"repobilityId": "d5669175913a7a73", "scanner": "scanner-primary", "fingerprint": "b69bbf389e9120f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-150f47bac8e4fe4b", "level": "error", "message": {"text": "Dangling fetch: GET /api/kap?sembol=${encodeURIComponent(sembol)} (app/hisse/[sembol]/HisseDetailClient.tsx:481)"}, "properties": {"repobilityId": "2fcf3606488847fe", "scanner": "scanner-primary", "fingerprint": "150f47bac8e4fe4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25c285103280c65c", "level": "error", "message": {"text": "Dangling fetch: POST /api/explain (app/hisse/[sembol]/HisseDetailClient.tsx:523)"}, "properties": {"repobilityId": "0b2cf477d0f1eed2", "scanner": "scanner-primary", "fingerprint": "25c285103280c65c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f2b89271faa68d7", "level": "error", "message": {"text": "Dangling fetch: POST /api/kap/summarize (app/hisse/[sembol]/HisseDetailClient.tsx:1619)"}, "properties": {"repobilityId": "4ea31e029de45994", "scanner": "scanner-primary", "fingerprint": "3f2b89271faa68d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e696e2b91394ddb", "level": "error", "message": {"text": "Dangling fetch: GET /api/gecmis-firsatlar?${params} (app/gecmis-firsatlar/page.tsx:64)"}, "properties": {"repobilityId": "b46950dcbadd0f0f", "scanner": "scanner-primary", "fingerprint": "8e696e2b91394ddb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fa93e153866925f", "level": "error", "message": {"text": "Dangling fetch: GET /api/apex-us-portfolio (app/apex-us-portfoyu/page.tsx:65)"}, "properties": {"repobilityId": "d0ebdecb7db8d269", "scanner": "scanner-primary", "fingerprint": "1fa93e153866925f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d298f67cfbc6fdbc", "level": "error", "message": {"text": "Dangling fetch: GET https://query1.finance.yahoo.com/v10/finance/quoteSummary/${symbol}?modules=news (app/api/tema-haberleri/route.ts:64)"}, "properties": {"repobilityId": "f5ffdbc16f082cfd", "scanner": "scanner-primary", "fingerprint": "d298f67cfbc6fdbc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7140be1b608e48e0", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (app/api/cron/price-alerts/route.ts:72)"}, "properties": {"repobilityId": "5691b600f22801a1", "scanner": "scanner-primary", "fingerprint": "7140be1b608e48e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d3fa8fc7c053205", "level": "error", "message": {"text": "Dangling fetch: GET /api/weekly-picks (app/haftalik-secimler/page.tsx:163)"}, "properties": {"repobilityId": "640e83b66f1bbce7", "scanner": "scanner-primary", "fingerprint": "9d3fa8fc7c053205", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aea3fe9544681372", "level": "error", "message": {"text": "Dangling fetch: GET /api/weekly-picks (app/ai-portfoyler/page.tsx:239)"}, "properties": {"repobilityId": "5b52594d11f8513f", "scanner": "scanner-primary", "fingerprint": "aea3fe9544681372", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba918ee13ea91752", "level": "error", "message": {"text": "Dangling fetch: GET /api/ai-portfolio (app/ai-portfoyler/page.tsx:240)"}, "properties": {"repobilityId": "a95408a171bab449", "scanner": "scanner-primary", "fingerprint": "ba918ee13ea91752", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26926fafacdc6230", "level": "error", "message": {"text": "Dangling fetch: GET /api/apex-portfolio (app/ai-portfoyler/page.tsx:241)"}, "properties": {"repobilityId": "721972a195fdf6e1", "scanner": "scanner-primary", "fingerprint": "26926fafacdc6230", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73b7aa4c482dc7a0", "level": "error", "message": {"text": "Dangling fetch: GET /api/apex-us-portfolio (app/ai-portfoyler/page.tsx:242)"}, "properties": {"repobilityId": "0b5a317ef32eadb3", "scanner": "scanner-primary", "fingerprint": "73b7aa4c482dc7a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d98a723e5988b1c", "level": "error", "message": {"text": "Dangling fetch: GET /api/aegis-us-portfolio (app/ai-portfoyler/page.tsx:243)"}, "properties": {"repobilityId": "d6549a7409fde42a", "scanner": "scanner-primary", "fingerprint": "0d98a723e5988b1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83902ff091d15d2d", "level": "error", "message": {"text": "Dangling fetch: POST /api/profile/avatar (app/profil/page.tsx:142)"}, "properties": {"repobilityId": "702f0e82eafe0f8b", "scanner": "scanner-primary", "fingerprint": "83902ff091d15d2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e377caf42c614ac", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/profile (app/profil/page.tsx:148)"}, "properties": {"repobilityId": "5cadebdf17325612", "scanner": "scanner-primary", "fingerprint": "8e377caf42c614ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d71789a9a93ee11", "level": "error", "message": {"text": "Dangling fetch: GET /api/profile (app/profil/page.tsx:325)"}, "properties": {"repobilityId": "c06439356e85c05d", "scanner": "scanner-primary", "fingerprint": "0d71789a9a93ee11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25a5278c708e7c9a", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/alert-preferences (app/profil/page.tsx:344)"}, "properties": {"repobilityId": "2161efb71c7c8908", "scanner": "scanner-primary", "fingerprint": "25a5278c708e7c9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b092b1cbfe66aa1", "level": "error", "message": {"text": "Dangling fetch: POST /api/user/alert-preferences (app/profil/page.tsx:363)"}, "properties": {"repobilityId": "96933052891a51f0", "scanner": "scanner-primary", "fingerprint": "2b092b1cbfe66aa1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6276dac52127138a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/profile (app/profil/page.tsx:374)"}, "properties": {"repobilityId": "c032fd43a0562b40", "scanner": "scanner-primary", "fingerprint": "6276dac52127138a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e00f3cc7acbf8ff", "level": "error", "message": {"text": "Dangling fetch: GET /api/price-alerts (app/profil/page.tsx:383)"}, "properties": {"repobilityId": "cd799051944e9408", "scanner": "scanner-primary", "fingerprint": "3e00f3cc7acbf8ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c558abacd528e7b1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/price-alerts?id=${id} (app/profil/page.tsx:393)"}, "properties": {"repobilityId": "d61532c85946137b", "scanner": "scanner-primary", "fingerprint": "c558abacd528e7b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31d8845454c52376", "level": "error", "message": {"text": "Dangling fetch: POST /api/stripe/portal (app/profil/page.tsx:408)"}, "properties": {"repobilityId": "c35caf15d73940e7", "scanner": "scanner-primary", "fingerprint": "31d8845454c52376", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-218fb3055b35e200", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/profile (app/profil/page.tsx:425)"}, "properties": {"repobilityId": "e92623a99764d4b4", "scanner": "scanner-primary", "fingerprint": "218fb3055b35e200", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-00218f46a19b33c9", "level": "error", "message": {"text": "Dangling fetch: GET /api/backtesting?${params.toString()} (app/backtesting/page.tsx:1207)"}, "properties": {"repobilityId": "952d8598d09f99e9", "scanner": "scanner-primary", "fingerprint": "00218f46a19b33c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e7de3cb7009ed76", "level": "error", "message": {"text": "Dangling fetch: GET /api/watchlist (app/firsatlar/page.tsx:297)"}, "properties": {"repobilityId": "4e65ef0904cca6c0", "scanner": "scanner-primary", "fingerprint": "7e7de3cb7009ed76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fdcbd1d13269539d", "level": "error", "message": {"text": "Dangling fetch: GET /api/signal-stats-summary (app/firsatlar/page.tsx:308)"}, "properties": {"repobilityId": "60b7ac81ea8e4868", "scanner": "scanner-primary", "fingerprint": "fdcbd1d13269539d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2ba9fb3bf68315e", "level": "error", "message": {"text": "Dangling fetch: GET /api/gunun-secimi (app/firsatlar/page.tsx:318)"}, "properties": {"repobilityId": "4142c9ab1f6ed64e", "scanner": "scanner-primary", "fingerprint": "d2ba9fb3bf68315e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0fa915d8aa126d6a", "level": "error", "message": {"text": "Dangling fetch: GET /api/haftanin-secimi (app/firsatlar/page.tsx:328)"}, "properties": {"repobilityId": "cf536948bbd454b6", "scanner": "scanner-primary", "fingerprint": "0fa915d8aa126d6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3249ddc42e164afc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/firsatlar/page.tsx:356)"}, "properties": {"repobilityId": "a2118e4acf66c3c9", "scanner": "scanner-primary", "fingerprint": "3249ddc42e164afc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb1a93cf8dfe2646", "level": "error", "message": {"text": "Dangling fetch: POST /api/watchlist (app/firsatlar/page.tsx:360)"}, "properties": {"repobilityId": "29cb5b1b7a45c98c", "scanner": "scanner-primary", "fingerprint": "fb1a93cf8dfe2646", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2cc67b5b1490710", "level": "error", "message": {"text": "Dangling fetch: GET /api/uzun-vade-firsatlar (app/uzun-vade-firsatlar/page.tsx:354)"}, "properties": {"repobilityId": "c52922cf93b2700a", "scanner": "scanner-primary", "fingerprint": "c2cc67b5b1490710", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ae5fe3668a339f1", "level": "error", "message": {"text": "Dangling fetch: GET /api/haftanin-secimi (app/uzun-vade-firsatlar/page.tsx:363)"}, "properties": {"repobilityId": "3ed3de111f2f2581", "scanner": "scanner-primary", "fingerprint": "6ae5fe3668a339f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e21a1898e495465", "level": "error", "message": {"text": "Dangling fetch: GET /api/price-alerts (app/fiyat-alertler/page.tsx:27)"}, "properties": {"repobilityId": "a1f682039aa34d7b", "scanner": "scanner-primary", "fingerprint": "0e21a1898e495465", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40235d4fa84b30e0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/price-alerts?id=${id} (app/fiyat-alertler/page.tsx:40)"}, "properties": {"repobilityId": "f059e9092327228c", "scanner": "scanner-primary", "fingerprint": "40235d4fa84b30e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aebff7d0b7e56cd4", "level": "error", "message": {"text": "Dangling fetch: GET /api/macro (app/simulasyon/page.tsx:206)"}, "properties": {"repobilityId": "1e36c737f0beef5a", "scanner": "scanner-primary", "fingerprint": "aebff7d0b7e56cd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-459b02511f202e93", "level": "error", "message": {"text": "Dangling fetch: POST /api/simulasyon (app/simulasyon/page.tsx:244)"}, "properties": {"repobilityId": "c46ef3206bca22fd", "scanner": "scanner-primary", "fingerprint": "459b02511f202e93", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-321e96205f353db2", "level": "error", "message": {"text": "Dangling fetch: GET /api/tema-performans?tema=${theme.id} (app/temalar/page.tsx:33)"}, "properties": {"repobilityId": "6ca6c4b450bc6c1d", "scanner": "scanner-primary", "fingerprint": "321e96205f353db2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-572b9278c2a8a368", "level": "error", "message": {"text": "Dangling fetch: GET /api/tema-haberleri?tema=${theme.id} (app/temalar/page.tsx:40)"}, "properties": {"repobilityId": "b94b59df64da81c6", "scanner": "scanner-primary", "fingerprint": "572b9278c2a8a368", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-99f8614080c6adc9", "level": "error", "message": {"text": "Dangling fetch: GET /api/ai-portfolio (app/yapay-zeka-portfoyu/page.tsx:64)"}, "properties": {"repobilityId": "05d1b5b014c2c9cc", "scanner": "scanner-primary", "fingerprint": "99f8614080c6adc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a80b6f7dc7c24f29", "level": "error", "message": {"text": "Dangling fetch: GET /api/watchlist (app/tarama/page.tsx:286)"}, "properties": {"repobilityId": "af699ee8c6d974a3", "scanner": "scanner-primary", "fingerprint": "a80b6f7dc7c24f29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a6dbf9b82c4f927", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/tarama/page.tsx:302)"}, "properties": {"repobilityId": "75f05ae9407e8473", "scanner": "scanner-primary", "fingerprint": "5a6dbf9b82c4f927", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e2a37bdb2e6a1f5", "level": "error", "message": {"text": "Dangling fetch: POST /api/watchlist (app/tarama/page.tsx:305)"}, "properties": {"repobilityId": "4ecc4ebb7c1464ce", "scanner": "scanner-primary", "fingerprint": "5e2a37bdb2e6a1f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b540efafc4d6dee2", "level": "error", "message": {"text": "Dangling fetch: GET /api/screener?${params} (app/tarama/page.tsx:342)"}, "properties": {"repobilityId": "fbb2a56d10ec6c8d", "scanner": "scanner-primary", "fingerprint": "b540efafc4d6dee2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc0a78bc293e6019", "level": "error", "message": {"text": "Dangling fetch: GET /api/macro (app/makro/page.tsx:1072)"}, "properties": {"repobilityId": "1672ad398c261fdb", "scanner": "scanner-primary", "fingerprint": "cc0a78bc293e6019", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38f54ac07795e926", "level": "error", "message": {"text": "Dangling fetch: GET /api/risk (app/makro/page.tsx:1073)"}, "properties": {"repobilityId": "f0e7a33a29e63693", "scanner": "scanner-primary", "fingerprint": "38f54ac07795e926", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5043c0ce0e2b6d6c", "level": "error", "message": {"text": "Dangling fetch: GET /api/sectors (app/makro/page.tsx:1074)"}, "properties": {"repobilityId": "f9fcc81121723676", "scanner": "scanner-primary", "fingerprint": "5043c0ce0e2b6d6c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcd5e0422d7c2313", "level": "error", "message": {"text": "Dangling fetch: GET /api/alerts (app/makro/page.tsx:1075)"}, "properties": {"repobilityId": "27fb422e4d95f42a", "scanner": "scanner-primary", "fingerprint": "fcd5e0422d7c2313", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45b6997bbf369a4c", "level": "error", "message": {"text": "Dangling fetch: GET /api/macro?history=true&days=${period} (app/makro/page.tsx:1076)"}, "properties": {"repobilityId": "b770a2e43d6fce01", "scanner": "scanner-primary", "fingerprint": "45b6997bbf369a4c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a96f528aea15e4c3", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${encodeURIComponent(sym)}&days=30 (app/makro/page.tsx:1106)"}, "properties": {"repobilityId": "93ab64d8faf2ee56", "scanner": "scanner-primary", "fingerprint": "a96f528aea15e4c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-791523e0ca205d53", "level": "error", "message": {"text": "Dangling fetch: GET /api/macro?history=true&days=${p} (app/makro/page.tsx:1126)"}, "properties": {"repobilityId": "0ca12a4fcd7d5b98", "scanner": "scanner-primary", "fingerprint": "791523e0ca205d53", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c58a4e318a6f70b", "level": "error", "message": {"text": "Dangling fetch: GET /api/watchlist (app/watchlist/page.tsx:465)"}, "properties": {"repobilityId": "94302a3094e1e806", "scanner": "scanner-primary", "fingerprint": "6c58a4e318a6f70b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6684ceeb75085b0d", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=20 (app/watchlist/page.tsx:477)"}, "properties": {"repobilityId": "a5f475d4b457b308", "scanner": "scanner-primary", "fingerprint": "6684ceeb75085b0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc92f0ef8016d882", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/watchlist/page.tsx:552)"}, "properties": {"repobilityId": "19ce9da9d7275cdb", "scanner": "scanner-primary", "fingerprint": "fc92f0ef8016d882", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-496014571ccb373b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/watchlist/page.tsx:564)"}, "properties": {"repobilityId": "b99a9f0387bc6390", "scanner": "scanner-primary", "fingerprint": "496014571ccb373b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e03fa98b76466c9d", "level": "error", "message": {"text": "Dangling fetch: POST /api/watchlist (app/watchlist/page.tsx:576)"}, "properties": {"repobilityId": "7305cf2a04fe2111", "scanner": "scanner-primary", "fingerprint": "e03fa98b76466c9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-da9198bcfa1a4d8f", "level": "error", "message": {"text": "Dangling fetch: GET /api/sectors (app/ters-portfolyo/page.tsx:105)"}, "properties": {"repobilityId": "5fa051a95fa0cf57", "scanner": "scanner-primary", "fingerprint": "da9198bcfa1a4d8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-594c7ec125c099ce", "level": "error", "message": {"text": "Dangling fetch: GET /api/watchlist (app/ters-portfolyo/page.tsx:138)"}, "properties": {"repobilityId": "02a9c3d62605d82f", "scanner": "scanner-primary", "fingerprint": "594c7ec125c099ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c9068f8a46586e9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/watchlist?id=${id} (app/ters-portfolyo/page.tsx:163)"}, "properties": {"repobilityId": "e6df889ab681c950", "scanner": "scanner-primary", "fingerprint": "5c9068f8a46586e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea4733c683b735c8", "level": "error", "message": {"text": "Dangling fetch: POST /api/watchlist (app/ters-portfolyo/page.tsx:167)"}, "properties": {"repobilityId": "c6d426f19f060253", "scanner": "scanner-primary", "fingerprint": "ea4733c683b735c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8eb922ee4f6709f", "level": "error", "message": {"text": "Dangling fetch: POST /api/ters-portfolyo (app/ters-portfolyo/page.tsx:285)"}, "properties": {"repobilityId": "17cab719ef7ae127", "scanner": "scanner-primary", "fingerprint": "c8eb922ee4f6709f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1892fc42078215a", "level": "error", "message": {"text": "Dangling fetch: POST /api/ekonomi-takvimi (app/haberler/TabTakvim.tsx:190)"}, "properties": {"repobilityId": "4dd8cb4a21556d8b", "scanner": "scanner-primary", "fingerprint": "e1892fc42078215a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9d0e651bd9b42f2", "level": "error", "message": {"text": "Dangling fetch: GET /api/kap (app/haberler/TabKap.tsx:41)"}, "properties": {"repobilityId": "daef7df685025c15", "scanner": "scanner-primary", "fingerprint": "e9d0e651bd9b42f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b02dd50648951c5f", "level": "error", "message": {"text": "Dangling fetch: GET /api/signal-tracker (app/sinyal-takip/page.tsx:34)"}, "properties": {"repobilityId": "73000cb1cde6291b", "scanner": "scanner-primary", "fingerprint": "b02dd50648951c5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-584d12eda0b75dc0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/signal-tracker?${params} (app/sinyal-takip/page.tsx:47)"}, "properties": {"repobilityId": "155fa1e80f06a23f", "scanner": "scanner-primary", "fingerprint": "584d12eda0b75dc0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-951b05cd0352eda0", "level": "error", "message": {"text": "Dangling fetch: GET /api/chat/sessions (app/sohbet/page.tsx:167)"}, "properties": {"repobilityId": "733ba3121dac1575", "scanner": "scanner-primary", "fingerprint": "951b05cd0352eda0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cef2bcb733752e4e", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat/sessions (app/sohbet/page.tsx:177)"}, "properties": {"repobilityId": "370cdc75007baa71", "scanner": "scanner-primary", "fingerprint": "cef2bcb733752e4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-236e1db898c6b652", "level": "error", "message": {"text": "Dangling fetch: GET /api/chat/sessions?id=${id} (app/sohbet/page.tsx:194)"}, "properties": {"repobilityId": "29c5a7065a93905b", "scanner": "scanner-primary", "fingerprint": "236e1db898c6b652", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5223be1e3513b46d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/chat/sessions?id=${id} (app/sohbet/page.tsx:211)"}, "properties": {"repobilityId": "0e9f37a3bc155995", "scanner": "scanner-primary", "fingerprint": "5223be1e3513b46d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d4c126a0ceb6af3", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat (app/sohbet/page.tsx:262)"}, "properties": {"repobilityId": "7be96e0e702089ba", "scanner": "scanner-primary", "fingerprint": "1d4c126a0ceb6af3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-807de918d43596ca", "level": "error", "message": {"text": "Dangling fetch: GET /api/aegis-us-portfolio (app/aegis-us-portfoyu/page.tsx:62)"}, "properties": {"repobilityId": "868bdccc452cade0", "scanner": "scanner-primary", "fingerprint": "807de918d43596ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c50242da517520c", "level": "error", "message": {"text": "Dangling fetch: GET /api/community/posts?${params} (app/topluluk/page.tsx:359)"}, "properties": {"repobilityId": "89509a430ec8f3e5", "scanner": "scanner-primary", "fingerprint": "4c50242da517520c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39a1a9cc0d63a560", "level": "error", "message": {"text": "Dangling fetch: GET /api/community/posts/${id} (app/topluluk/[id]/page.tsx:248)"}, "properties": {"repobilityId": "508ce78d2edd314a", "scanner": "scanner-primary", "fingerprint": "39a1a9cc0d63a560", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8fb98573d3523b50", "level": "error", "message": {"text": "Dangling fetch: GET /api/community/posts/${id}/like (app/topluluk/[id]/page.tsx:292)"}, "properties": {"repobilityId": "6a62ffdb18ab037c", "scanner": "scanner-primary", "fingerprint": "8fb98573d3523b50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c3fcc695aa25b15", "level": "error", "message": {"text": "Dangling fetch: POST /api/community/posts/${id}/comments (app/topluluk/[id]/page.tsx:319)"}, "properties": {"repobilityId": "ebbd2108dcddd528", "scanner": "scanner-primary", "fingerprint": "4c3fcc695aa25b15", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb1a03de503a63ab", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/community/posts/${id}/comments/${commentId} (app/topluluk/[id]/page.tsx:343)"}, "properties": {"repobilityId": "357b68d0b37f8f12", "scanner": "scanner-primary", "fingerprint": "eb1a03de503a63ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b56c9b1b222f74b", "level": "error", "message": {"text": "Dangling fetch: POST /api/community/posts/${id}/report (app/topluluk/[id]/page.tsx:355)"}, "properties": {"repobilityId": "7e28d7ce5e6c8551", "scanner": "scanner-primary", "fingerprint": "1b56c9b1b222f74b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0a596d4364d5dda", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/community/posts/${id} (app/topluluk/[id]/page.tsx:380)"}, "properties": {"repobilityId": "02b3c1135d29f9da", "scanner": "scanner-primary", "fingerprint": "d0a596d4364d5dda", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f191b40415831fe0", "level": "error", "message": {"text": "Dangling fetch: POST /api/community/posts (app/topluluk/yeni/page.tsx:154)"}, "properties": {"repobilityId": "f9a650007317c783", "scanner": "scanner-primary", "fingerprint": "f191b40415831fe0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5a1a12dfb77bd4c", "level": "error", "message": {"text": "Dangling fetch: GET /api/tema-performans?tema=${themeId} (app/tema/[id]/page.tsx:66)"}, "properties": {"repobilityId": "bf7a51220eccbde3", "scanner": "scanner-primary", "fingerprint": "c5a1a12dfb77bd4c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-025453c418f76ff8", "level": "error", "message": {"text": "Dangling fetch: GET /api/tema-haberleri?tema=${themeId} (app/tema/[id]/page.tsx:73)"}, "properties": {"repobilityId": "bc0530ec6b50f087", "scanner": "scanner-primary", "fingerprint": "025453c418f76ff8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a2366a9a8e64df7", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?symbol=XU100.IS&days=90 (app/portfolyo/page.tsx:887)"}, "properties": {"repobilityId": "01d1091abc3175b8", "scanner": "scanner-primary", "fingerprint": "1a2366a9a8e64df7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0e037589a166b6a", "level": "error", "message": {"text": "Dangling fetch: GET /api/portfolyo (app/portfolyo/page.tsx:906)"}, "properties": {"repobilityId": "39c4a6c596a33451", "scanner": "scanner-primary", "fingerprint": "e0e037589a166b6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1893f2f9a5e280f5", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=90 (app/portfolyo/page.tsx:918)"}, "properties": {"repobilityId": "f84afd8bac377386", "scanner": "scanner-primary", "fingerprint": "1893f2f9a5e280f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c0037bb5f4655112", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/alert-preferences (app/portfolyo/page.tsx:966)"}, "properties": {"repobilityId": "0c9a3e82b3e14d25", "scanner": "scanner-primary", "fingerprint": "c0037bb5f4655112", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01f873ce4ddd69fd", "level": "error", "message": {"text": "Dangling fetch: POST /api/user/alert-preferences (app/portfolyo/page.tsx:979)"}, "properties": {"repobilityId": "fdef0daac08c9d9b", "scanner": "scanner-primary", "fingerprint": "01f873ce4ddd69fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e63bf917eb34493", "level": "error", "message": {"text": "Dangling fetch: POST /api/portfolyo (app/portfolyo/page.tsx:992)"}, "properties": {"repobilityId": "c209ca0112e369eb", "scanner": "scanner-primary", "fingerprint": "7e63bf917eb34493", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48dd43a3d82b6478", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/portfolyo (app/portfolyo/page.tsx:1016)"}, "properties": {"repobilityId": "cb5d8df27810ae0c", "scanner": "scanner-primary", "fingerprint": "48dd43a3d82b6478", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b0b20f158b43f86", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/portfolyo?id=${id} (app/portfolyo/page.tsx:1038)"}, "properties": {"repobilityId": "8a76c2b94d583c86", "scanner": "scanner-primary", "fingerprint": "5b0b20f158b43f86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24d9b9f4de881dcc", "level": "error", "message": {"text": "Dangling fetch: POST /api/sectors/ai-summary (app/sektorler/SektorlerClient.tsx:1022)"}, "properties": {"repobilityId": "99dae38cf8be61e4", "scanner": "scanner-primary", "fingerprint": "24d9b9f4de881dcc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01a88fd87c341745", "level": "error", "message": {"text": "Dangling fetch: GET /api/sectors (app/sektorler/SektorlerClient.tsx:1198)"}, "properties": {"repobilityId": "bb8a8a489e83e55e", "scanner": "scanner-primary", "fingerprint": "01a88fd87c341745", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0caf030d3531ab36", "level": "error", "message": {"text": "Dangling fetch: GET /api/commodity (app/sektorler/SektorlerClient.tsx:1226)"}, "properties": {"repobilityId": "f565234c66f2913e", "scanner": "scanner-primary", "fingerprint": "0caf030d3531ab36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20006277e0e6568f", "level": "error", "message": {"text": "Dangling fetch: GET /api/movers (app/sektorler/SektorlerClient.tsx:1253)"}, "properties": {"repobilityId": "731600b532378c69", "scanner": "scanner-primary", "fingerprint": "20006277e0e6568f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bff9ef5a889c9ba", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=${OHLCV_DAYS} (app/sektorler/SektorlerClient.tsx:1282)"}, "properties": {"repobilityId": "fe55c69f19440389", "scanner": "scanner-primary", "fingerprint": "9bff9ef5a889c9ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ac2de58508c4454", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sembol}&days=120 (app/sektorler/[id]/SectorDetailClient.tsx:93)"}, "properties": {"repobilityId": "964d18631a9cf135", "scanner": "scanner-primary", "fingerprint": "2ac2de58508c4454", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e04019d6925f3614", "level": "error", "message": {"text": "Dangling fetch: POST /api/price-alerts (components/PriceAlertButton.tsx:34)"}, "properties": {"repobilityId": "e6fe3e996c1fa391", "scanner": "scanner-primary", "fingerprint": "e04019d6925f3614", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8eddd295f859b84b", "level": "error", "message": {"text": "Dangling fetch: GET /api/push/subscribe (components/PushNotificationButton.tsx:73)"}, "properties": {"repobilityId": "bc53bc69a53f44a1", "scanner": "scanner-primary", "fingerprint": "8eddd295f859b84b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-808082c8b0fc2b06", "level": "error", "message": {"text": "Dangling fetch: POST /api/push/subscribe (components/PushNotificationButton.tsx:96)"}, "properties": {"repobilityId": "b4b195d8c199806b", "scanner": "scanner-primary", "fingerprint": "808082c8b0fc2b06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e91e099b22eae1e", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/push/subscribe (components/PushNotificationButton.tsx:121)"}, "properties": {"repobilityId": "a757e00def0d41bc", "scanner": "scanner-primary", "fingerprint": "7e91e099b22eae1e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-affcca433ac45aef", "level": "error", "message": {"text": "Dangling fetch: GET /api/news-impact?symbol=${encodeURIComponent(sembol)} (components/HaberEtkisi.tsx:53)"}, "properties": {"repobilityId": "f28f8ce35b075a63", "scanner": "scanner-primary", "fingerprint": "affcca433ac45aef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0b7f3f4953a76b8", "level": "error", "message": {"text": "Dangling fetch: GET /api/commodity (components/LandingPage.tsx:395)"}, "properties": {"repobilityId": "8aba8f8f03cf7d24", "scanner": "scanner-primary", "fingerprint": "d0b7f3f4953a76b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4ea2be155140c51", "level": "error", "message": {"text": "Dangling fetch: GET /api/ticker (components/LandingPage.tsx:620)"}, "properties": {"repobilityId": "8e22c022ee720073", "scanner": "scanner-primary", "fingerprint": "c4ea2be155140c51", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02522f43336cd9eb", "level": "error", "message": {"text": "Dangling fetch: GET /api/firsatlar?minScore=45 (components/DashboardClient.tsx:204)"}, "properties": {"repobilityId": "6ea1cf4c213cd20a", "scanner": "scanner-primary", "fingerprint": "02522f43336cd9eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65f338a584b0e529", "level": "error", "message": {"text": "Dangling fetch: GET /api/gunun-secimi (components/DashboardClient.tsx:213)"}, "properties": {"repobilityId": "1594fd033f35d08d", "scanner": "scanner-primary", "fingerprint": "65f338a584b0e529", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e38e2b0390a18984", "level": "error", "message": {"text": "Dangling fetch: GET /api/signal-tracker (components/DashboardClient.tsx:221)"}, "properties": {"repobilityId": "818a684448b8914f", "scanner": "scanner-primary", "fingerprint": "e38e2b0390a18984", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92ec2f4589246958", "level": "error", "message": {"text": "Dangling fetch: GET /api/sinyal-gecmisi?symbol=${encodeURIComponent(sembol)}&limit=10 (components/SinyalGecmisi.tsx:24)"}, "properties": {"repobilityId": "c92a7d02570a97b7", "scanner": "scanner-primary", "fingerprint": "92ec2f4589246958", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9cf9ff3323357435", "level": "error", "message": {"text": "Dangling fetch: GET /api/fundamentals/${encodeURIComponent(sembol)} (components/TakasKarti.tsx:59)"}, "properties": {"repobilityId": "d26adf85b4c3841e", "scanner": "scanner-primary", "fingerprint": "9cf9ff3323357435", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36a9adfe82dc5aed", "level": "error", "message": {"text": "Dangling fetch: GET /api/growth-momentum?market=${market}&limit=80 (components/BuyuyenSirketler.tsx:125)"}, "properties": {"repobilityId": "b08e8071152c8247", "scanner": "scanner-primary", "fingerprint": "36a9adfe82dc5aed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cdf65f63a6146b0a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/signal-tracker?${params} (components/FirsatKarti.tsx:417)"}, "properties": {"repobilityId": "a699e2abd441f7fa", "scanner": "scanner-primary", "fingerprint": "cdf65f63a6146b0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11f3e783dfdfddb6", "level": "error", "message": {"text": "Dangling fetch: POST /api/signal-tracker (components/FirsatKarti.tsx:421)"}, "properties": {"repobilityId": "b160a55223afb4f6", "scanner": "scanner-primary", "fingerprint": "11f3e783dfdfddb6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8ab914ad026b48e", "level": "error", "message": {"text": "Dangling fetch: POST /api/portfolyo (components/PortfolyoEkleButton.tsx:26)"}, "properties": {"repobilityId": "c764a417cc70f45b", "scanner": "scanner-primary", "fingerprint": "e8ab914ad026b48e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dca01560c09b40db", "level": "error", "message": {"text": "Dangling fetch: GET /api/fundamental-health?symbol=${encodeURIComponent(sembol)}&market=${market} (components/FinansalSaglik.tsx:22)"}, "properties": {"repobilityId": "e2e8c6267703301e", "scanner": "scanner-primary", "fingerprint": "dca01560c09b40db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07babbde24517946", "level": "error", "message": {"text": "Dangling fetch: GET /api/investment-score?sembol=${encodeURIComponent(sembol)} (components/InvestableScoreCard.tsx:319)"}, "properties": {"repobilityId": "6c930a26772c0c36", "scanner": "scanner-primary", "fingerprint": "07babbde24517946", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7942a1b75c077900", "level": "error", "message": {"text": "Dangling fetch: POST /api/explain (components/StockCard.tsx:287)"}, "properties": {"repobilityId": "868a45b60f638faf", "scanner": "scanner-primary", "fingerprint": "7942a1b75c077900", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ad95a4891fb15ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/forward-outlook?symbol=${encodeURIComponent(sembol)} (components/GelecekGorunumu.tsx:32)"}, "properties": {"repobilityId": "7387f081135b1525", "scanner": "scanner-primary", "fingerprint": "9ad95a4891fb15ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57ec4df9603e9372", "level": "error", "message": {"text": "Dangling fetch: GET /api/mtf-analiz?symbol=${sembol} (components/MtfSinyalTablosu.tsx:17)"}, "properties": {"repobilityId": "76a185b7f0821e0e", "scanner": "scanner-primary", "fingerprint": "57ec4df9603e9372", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51ffa3a76649e1f5", "level": "error", "message": {"text": "Dangling fetch: GET /api/peer-valuation?symbol=${encodeURIComponent(sembol)} (components/PeerDegerleme.tsx:22)"}, "properties": {"repobilityId": "556660df5a907ab7", "scanner": "scanner-primary", "fingerprint": "51ffa3a76649e1f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4131b7fcda24345f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/signals/${id} (components/DashboardSignals.tsx:194)"}, "properties": {"repobilityId": "b286fbb078506b62", "scanner": "scanner-primary", "fingerprint": "4131b7fcda24345f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2dda8d6c9a8c8ab6", "level": "error", "message": {"text": "Dangling fetch: GET /api/fundamentals/${encodeURIComponent(sembol)} (components/TemelAnalizKarti.tsx:110)"}, "properties": {"repobilityId": "d9f8bed521d5ce86", "scanner": "scanner-primary", "fingerprint": "2dda8d6c9a8c8ab6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7014becc1601542", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?symbol=${sym}&days=5 (components/DashboardWatchlist.tsx:36)"}, "properties": {"repobilityId": "62ade7b3d9bfd718", "scanner": "scanner-primary", "fingerprint": "d7014becc1601542", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4919a1c9a76970b4", "level": "error", "message": {"text": "Dangling fetch: GET /api/profile (components/NavbarClient.tsx:171)"}, "properties": {"repobilityId": "c1f8ebbac0a2d9ab", "scanner": "scanner-primary", "fingerprint": "4919a1c9a76970b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ead3c04b6b530e7f", "level": "error", "message": {"text": "Dangling fetch: GET https://tradingeconomics.com/turkey/${path} (lib/turkey-macro.ts:172)"}, "properties": {"repobilityId": "31b08773e6ca8fdd", "scanner": "scanner-primary", "fingerprint": "ead3c04b6b530e7f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8e7a8af94b9d27b", "level": "error", "message": {"text": "Dangling fetch: GET https://www.doviz.com/tahvil/tr-10-yillik-tahvil (lib/turkey-macro.ts:282)"}, "properties": {"repobilityId": "6b7d3083bf9ce9db", "scanner": "scanner-primary", "fingerprint": "b8e7a8af94b9d27b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ccd5d92c6d396c39", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?${params} (lib/api-client.ts:23)"}, "properties": {"repobilityId": "81b3cf1b3a21847e", "scanner": "scanner-primary", "fingerprint": "ccd5d92c6d396c39", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dce4362ceede7e95", "level": "error", "message": {"text": "Dangling fetch: GET /api/ohlcv?${params} (lib/api-client.ts:56)"}, "properties": {"repobilityId": "6c468d2542f1170f", "scanner": "scanner-primary", "fingerprint": "dce4362ceede7e95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c31537f87c620f72", "level": "error", "message": {"text": "Dangling fetch: GET /api/macro (lib/api-client.ts:67)"}, "properties": {"repobilityId": "c38b4f179fe6af9b", "scanner": "scanner-primary", "fingerprint": "c31537f87c620f72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea14ad22d82276ee", "level": "error", "message": {"text": "Dangling fetch: GET /api/macro?history=${days} (lib/api-client.ts:76)"}, "properties": {"repobilityId": "52ccb8d5e7fcc9a8", "scanner": "scanner-primary", "fingerprint": "ea14ad22d82276ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08be877dd3eab5f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/risk (lib/api-client.ts:85)"}, "properties": {"repobilityId": "b4917570faa263a7", "scanner": "scanner-primary", "fingerprint": "08be877dd3eab5f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf8d1ab85eb1b3f8", "level": "error", "message": {"text": "Dangling fetch: GET /api/sectors (lib/api-client.ts:94)"}, "properties": {"repobilityId": "a462f0e5b3301188", "scanner": "scanner-primary", "fingerprint": "cf8d1ab85eb1b3f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-611eb080805053ee", "level": "error", "message": {"text": "Dangling fetch: POST /api/signal-performance (lib/performance.ts:24)"}, "properties": {"repobilityId": "f47128c6aee693e9", "scanner": "scanner-primary", "fingerprint": "611eb080805053ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25d3af48cd83c9e6", "level": "note", "message": {"text": "Unused endpoint: POST /predict"}, "properties": {"repobilityId": "8d08215134c08fe9", "scanner": "scanner-primary", "fingerprint": "25d3af48cd83c9e6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a1214d3217233590", "level": "note", "message": {"text": "Unused endpoint: POST /retrain"}, "properties": {"repobilityId": "08413ca2c83189ba", "scanner": "scanner-primary", "fingerprint": "a1214d3217233590", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}