{"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-3be4d4e64b265f00", "name": "Stray `console.log` in TS/JS \u2014 src/main.tsx:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/main.tsx:46"}, "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-4ca7e37b8da4f94e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/SidebarCtaControls.tsx:269", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/SidebarCtaControls.tsx:269"}, "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-b8c41a1ae79a0823", "name": "Stray `console.log` in TS/JS \u2014 src/components/appversion/CreateAppVersionModal.tsx:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/appversion/CreateAppVersionModal.tsx: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-bf176dce70d49808", "name": "Icon-only button without accessible name \u2014 src/components/phone/ReplacePageActionModal.tsx:16", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/phone/ReplacePageActionModal.tsx:16"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-774aa4b5509b697e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/phone/CtaBlock.tsx:113", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/phone/CtaBlock.tsx:113"}, "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-90eea218026b8fc3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/phone/DescriptionBlock.tsx:58", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/phone/DescriptionBlock.tsx:58"}, "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-92a30b2ce1840381", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/translation/TranslationSideBar.tsx:322", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/translation/TranslationSideBar.tsx:322"}, "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-fe9433e6c25011ec", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/sidebar_right/TileIconSelector.tsx:254", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/sidebar_right/TileIconSelector.tsx:254"}, "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-8e3a105e33d1ef4b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/tile/TileGrids.tsx:540", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/tile/TileGrids.tsx:540"}, "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-44aa58f29fb721b0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/tile/DraggableScreen.tsx:1278", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/tile/DraggableScreen.tsx:1278"}, "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-01858f26a624feef", "name": "Stray `console.log` in TS/JS \u2014 src/services/translationApi.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/translationApi.ts:60"}, "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-b694300709a45c09", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/SidebarCtaControls.tsx:269", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/SidebarCtaControls.tsx:269"}, "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-d072520dcb366e54", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/phone/QuillEditorModal.tsx:52", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/phone/QuillEditorModal.tsx:52"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b7b0540c8717b0d", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/phone/CtaBlock.tsx:113", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/phone/CtaBlock.tsx:113"}, "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-208a5e6c4676408a", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/phone/DescriptionBlock.tsx:58", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/phone/DescriptionBlock.tsx:58"}, "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-04b1f843a4189da1", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/translation/InlineDescriptionEditor.tsx:46", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/translation/InlineDescriptionEditor.tsx:46"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41ca1f04b4396c42", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/translation/TranslationSideBar.tsx:322", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/translation/TranslationSideBar.tsx:322"}, "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-80bef35346b18291", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/translation/TranslationSideBar.tsx:84", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/translation/TranslationSideBar.tsx:84"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0187d70fda8bc4c7", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/sidebar_right/TileIconSelector.tsx:254", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/sidebar_right/TileIconSelector.tsx:254"}, "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-2a7ba30e4f9c8be5", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/tile/TileGrids.tsx:540", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/tile/TileGrids.tsx:540"}, "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-e3dffa696f54487f", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/tile/DraggableScreen.tsx:1278", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/tile/DraggableScreen.tsx:1278"}, "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-b4b2d387d1198485", "name": "Insecure pattern 'dangerous_innerhtml' in .claude/skills/implement-feature/SKILL.md:151", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in .claude/skills/implement-feature/SKILL.md:151"}, "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-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-0a9028b767435125", "name": "Very large file: src/App.tsx (2604 lines)", "shortDescription": {"text": "Very large file: src/App.tsx (2604 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-055bffaaceb2756f", "name": "Very large file: src/components/tile/DraggableScreen.tsx (1315 lines)", "shortDescription": {"text": "Very large file: src/components/tile/DraggableScreen.tsx (1315 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": "0 test file(s) for 93 source file(s) (ratio 0.00). 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 21 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 28 placeholder/mock markers across 16 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. 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": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests. 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-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.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-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-bc64efcc5614b7cb", "name": "Agent authority lacks a verifier contract: .claude/agents/js-ts-code-reviewer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/js-ts-code-reviewer.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-f3e428da84d30221", "name": "Agent authority lacks a verifier contract: .claude/hooks/hello-world.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/hooks/hello-world.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-e868b25f452fce4a", "name": "Agent authority lacks a verifier contract: .claude/commands/jira-plan.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/jira-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-6e77fbc69dcfb9b2", "name": "Agent authority lacks a verifier contract: .claude/commands/jira-review.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/jira-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-c2dd22e176a9021b", "name": "Agent authority lacks a verifier contract: .claude/commands/jira-implement.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/jira-implement.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-bf646116eaef4ef6", "name": "Agent authority lacks a verifier contract: .claude/agent-memory/js-ts-code-reviewer/project_widget_architecture.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agent-memory/js-ts-code-reviewer/project_widget_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-859263561c0b7f63", "name": "Agent authority lacks a verifier contract: .claude/skills/extract-component-workspace/iteration-1/eval-1-format-toolbar/", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/extract-component-workspace/iteration-1/eval-1-format-toolbar/eval_metadata.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-f315b7b970cc1995", "name": "Agent authority lacks a verifier contract: .claude/skills/extract-component/evals/evals.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/extract-component/evals/evals.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-994aa73ae786c736", "name": "Agent authority lacks a verifier contract: .claude/skills/revise-claude-md/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/revise-claude-md/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d783aef590947815", "name": "Agent authority lacks a verifier contract: .claude/skills/write-tests/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/write-tests/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7386e31f339cb33d", "name": "Agent authority lacks a verifier contract: .claude/skills/commit/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/commit/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-609027bf505fe8c8", "name": "Agent authority lacks a verifier contract: .claude/skills/implement-feature/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/implement-feature/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3635fe2d6c3c3ffa", "name": "Agent authority lacks a verifier contract: .claude/skills/branch-naming/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/branch-naming/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e78e498c767c58e4", "name": "Commented-code block (12 lines) in src/main.tsx:46", "shortDescription": {"text": "Commented-code block (12 lines) in src/main.tsx:46"}, "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-5688fc59ec55f6d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/mediaApi.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/mediaApi.ts:14"}, "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-29685206967d0aae", "name": "Commented-code block (5 lines) in src/components/MainCanvas.tsx:593", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/MainCanvas.tsx:593"}, "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-5c910c71ffd52694", "name": "Legacy-named symbol `createPageLegacy` in src/services/pagesApi.ts:160", "shortDescription": {"text": "Legacy-named symbol `createPageLegacy` in src/services/pagesApi.ts:160"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f924edff4d48958", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/apiClient.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/apiClient.ts: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-319e66a630e14977", "name": "2 env vars used in code but missing from .env.example", "shortDescription": {"text": "2 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `NODE_ENV`, `VITE_MAPS_API_KEY`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24501"}, "properties": {"repository": "bazirakyetonny/ReactAPP", "repoUrl": "https://github.com/bazirakyetonny/ReactAPP", "branch": "main"}, "results": [{"ruleId": "scanner-3be4d4e64b265f00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/main.tsx:46"}, "properties": {"repobilityId": "4879059f78ef8e58", "scanner": "scanner-primary", "fingerprint": "3be4d4e64b265f00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ca7e37b8da4f94e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/SidebarCtaControls.tsx:269"}, "properties": {"repobilityId": "f7d69451003abd96", "scanner": "scanner-primary", "fingerprint": "4ca7e37b8da4f94e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b8c41a1ae79a0823", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/appversion/CreateAppVersionModal.tsx:101"}, "properties": {"repobilityId": "9652193c94c3dbb7", "scanner": "scanner-primary", "fingerprint": "b8c41a1ae79a0823", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf176dce70d49808", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/phone/ReplacePageActionModal.tsx:16"}, "properties": {"repobilityId": "7bf2b82d2687eea9", "scanner": "scanner-primary", "fingerprint": "bf176dce70d49808", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-774aa4b5509b697e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/phone/CtaBlock.tsx:113"}, "properties": {"repobilityId": "c376418942f52c29", "scanner": "scanner-primary", "fingerprint": "774aa4b5509b697e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-90eea218026b8fc3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/phone/DescriptionBlock.tsx:58"}, "properties": {"repobilityId": "2ec715cf129596af", "scanner": "scanner-primary", "fingerprint": "90eea218026b8fc3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-92a30b2ce1840381", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/translation/TranslationSideBar.tsx:322"}, "properties": {"repobilityId": "2f4a146ba5646cf7", "scanner": "scanner-primary", "fingerprint": "92a30b2ce1840381", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-fe9433e6c25011ec", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/sidebar_right/TileIconSelector.tsx:254"}, "properties": {"repobilityId": "2f7e59f88c5bfad1", "scanner": "scanner-primary", "fingerprint": "fe9433e6c25011ec", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8e3a105e33d1ef4b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/tile/TileGrids.tsx:540"}, "properties": {"repobilityId": "5caefc9b6f6d2295", "scanner": "scanner-primary", "fingerprint": "8e3a105e33d1ef4b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-44aa58f29fb721b0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/tile/DraggableScreen.tsx:1278"}, "properties": {"repobilityId": "91c396eb7fba0fae", "scanner": "scanner-primary", "fingerprint": "44aa58f29fb721b0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-01858f26a624feef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/translationApi.ts:60"}, "properties": {"repobilityId": "1e68d68a5dd6d211", "scanner": "scanner-primary", "fingerprint": "01858f26a624feef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b694300709a45c09", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/SidebarCtaControls.tsx:269"}, "properties": {"repobilityId": "81cc9735a58c0c1b", "scanner": "scanner-primary", "fingerprint": "b694300709a45c09", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/SidebarCtaControls.tsx"}, "region": {"startLine": 269}}}]}, {"ruleId": "scanner-d072520dcb366e54", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/phone/QuillEditorModal.tsx:52"}, "properties": {"repobilityId": "43d31db939660816", "scanner": "scanner-primary", "fingerprint": "d072520dcb366e54", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/phone/QuillEditorModal.tsx"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-1b7b0540c8717b0d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/phone/CtaBlock.tsx:113"}, "properties": {"repobilityId": "6c1bc55744118482", "scanner": "scanner-primary", "fingerprint": "1b7b0540c8717b0d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/phone/CtaBlock.tsx"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-208a5e6c4676408a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/phone/DescriptionBlock.tsx:58"}, "properties": {"repobilityId": "bcb28d53b9f4dc62", "scanner": "scanner-primary", "fingerprint": "208a5e6c4676408a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/phone/DescriptionBlock.tsx"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-04b1f843a4189da1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/translation/InlineDescriptionEditor.tsx:46"}, "properties": {"repobilityId": "52b0140b20043322", "scanner": "scanner-primary", "fingerprint": "04b1f843a4189da1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/translation/InlineDescriptionEditor.tsx"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-41ca1f04b4396c42", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/translation/TranslationSideBar.tsx:322"}, "properties": {"repobilityId": "c3a4e818ee8ad6b2", "scanner": "scanner-primary", "fingerprint": "41ca1f04b4396c42", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/translation/TranslationSideBar.tsx"}, "region": {"startLine": 322}}}]}, {"ruleId": "scanner-80bef35346b18291", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/translation/TranslationSideBar.tsx:84"}, "properties": {"repobilityId": "8bbe5395e2dfe246", "scanner": "scanner-primary", "fingerprint": "80bef35346b18291", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/translation/TranslationSideBar.tsx"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-0187d70fda8bc4c7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/sidebar_right/TileIconSelector.tsx:254"}, "properties": {"repobilityId": "2476fc7c1399cfd2", "scanner": "scanner-primary", "fingerprint": "0187d70fda8bc4c7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/sidebar_right/TileIconSelector.tsx"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-2a7ba30e4f9c8be5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/tile/TileGrids.tsx:540"}, "properties": {"repobilityId": "2737a6eb9c598a18", "scanner": "scanner-primary", "fingerprint": "2a7ba30e4f9c8be5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/tile/TileGrids.tsx"}, "region": {"startLine": 540}}}]}, {"ruleId": "scanner-e3dffa696f54487f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/tile/DraggableScreen.tsx:1278"}, "properties": {"repobilityId": "f768a947f5af8c85", "scanner": "scanner-primary", "fingerprint": "e3dffa696f54487f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/tile/DraggableScreen.tsx"}, "region": {"startLine": 1278}}}]}, {"ruleId": "scanner-b4b2d387d1198485", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in .claude/skills/implement-feature/SKILL.md:151"}, "properties": {"repobilityId": "59dabdf868a80a53", "scanner": "scanner-primary", "fingerprint": "b4b2d387d1198485", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/implement-feature/SKILL.md"}, "region": {"startLine": 151}}}]}, {"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-0a9028b767435125", "level": "note", "message": {"text": "Very large file: src/App.tsx (2604 lines)"}, "properties": {"repobilityId": "57bfc71b44f5048a", "scanner": "scanner-primary", "fingerprint": "0a9028b767435125", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-055bffaaceb2756f", "level": "note", "message": {"text": "Very large file: src/components/tile/DraggableScreen.tsx (1315 lines)"}, "properties": {"repobilityId": "45c5c0be941d4f1f", "scanner": "scanner-primary", "fingerprint": "055bffaaceb2756f", "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": "02e728fc523ce5a2", "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": "7618e686a398dc11", "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": "35f1c3a72a8cda65", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "e3ffe3992038f4c5", "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": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "f87d2fad7fed7fc6", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "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": "70cece734589cbd7", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "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-bc64efcc5614b7cb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/js-ts-code-reviewer.md"}, "properties": {"repobilityId": "3fc8f32f65030939", "scanner": "scanner-primary", "fingerprint": "bc64efcc5614b7cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/js-ts-code-reviewer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f3e428da84d30221", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/hooks/hello-world.json"}, "properties": {"repobilityId": "34b59c248e8c866b", "scanner": "scanner-primary", "fingerprint": "f3e428da84d30221", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/hooks/hello-world.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e868b25f452fce4a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/jira-plan.md"}, "properties": {"repobilityId": "6f4d81bab8f59d3f", "scanner": "scanner-primary", "fingerprint": "e868b25f452fce4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/jira-plan.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6e77fbc69dcfb9b2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/jira-review.md"}, "properties": {"repobilityId": "e6fde8b61fd65737", "scanner": "scanner-primary", "fingerprint": "6e77fbc69dcfb9b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/jira-review.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c2dd22e176a9021b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/jira-implement.md"}, "properties": {"repobilityId": "3ab516c8c0a1e6ce", "scanner": "scanner-primary", "fingerprint": "c2dd22e176a9021b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/jira-implement.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bf646116eaef4ef6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agent-memory/js-ts-code-reviewer/project_widget_architecture.md"}, "properties": {"repobilityId": "fe3436961bf48f67", "scanner": "scanner-primary", "fingerprint": "bf646116eaef4ef6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agent-memory/js-ts-code-reviewer/project_widget_architecture.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-859263561c0b7f63", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/extract-component-workspace/iteration-1/eval-1-format-toolbar/eval_metadata.json"}, "properties": {"repobilityId": "e23b05cb601f716f", "scanner": "scanner-primary", "fingerprint": "859263561c0b7f63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/extract-component-workspace/iteration-1/eval-1-format-toolbar/eval_metadata.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f315b7b970cc1995", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/extract-component/evals/evals.json"}, "properties": {"repobilityId": "1257d1d683381e43", "scanner": "scanner-primary", "fingerprint": "f315b7b970cc1995", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/extract-component/evals/evals.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-994aa73ae786c736", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/revise-claude-md/SKILL.md"}, "properties": {"repobilityId": "aa48634409105488", "scanner": "scanner-primary", "fingerprint": "994aa73ae786c736", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/revise-claude-md/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d783aef590947815", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/write-tests/SKILL.md"}, "properties": {"repobilityId": "5e02f97ec71f9bba", "scanner": "scanner-primary", "fingerprint": "d783aef590947815", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/write-tests/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7386e31f339cb33d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/commit/SKILL.md"}, "properties": {"repobilityId": "29b2e02a9a6f056b", "scanner": "scanner-primary", "fingerprint": "7386e31f339cb33d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/commit/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-609027bf505fe8c8", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/implement-feature/SKILL.md"}, "properties": {"repobilityId": "4b72d1647d89abb6", "scanner": "scanner-primary", "fingerprint": "609027bf505fe8c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/implement-feature/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3635fe2d6c3c3ffa", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/branch-naming/SKILL.md"}, "properties": {"repobilityId": "e9299bc05debd298", "scanner": "scanner-primary", "fingerprint": "3635fe2d6c3c3ffa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/branch-naming/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e78e498c767c58e4", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/main.tsx:46"}, "properties": {"repobilityId": "e9d99e87d124631a", "scanner": "scanner-primary", "fingerprint": "e78e498c767c58e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5688fc59ec55f6d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/mediaApi.ts:14"}, "properties": {"repobilityId": "bb43e951afb08c5e", "scanner": "scanner-primary", "fingerprint": "5688fc59ec55f6d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-29685206967d0aae", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/MainCanvas.tsx:593"}, "properties": {"repobilityId": "a24c5b9e1ebf321e", "scanner": "scanner-primary", "fingerprint": "29685206967d0aae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c910c71ffd52694", "level": "note", "message": {"text": "Legacy-named symbol `createPageLegacy` in src/services/pagesApi.ts:160"}, "properties": {"repobilityId": "5f98957d78871d8e", "scanner": "scanner-primary", "fingerprint": "5c910c71ffd52694", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1f924edff4d48958", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/apiClient.ts:40"}, "properties": {"repobilityId": "7a19724a5abb7350", "scanner": "scanner-primary", "fingerprint": "1f924edff4d48958", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-319e66a630e14977", "level": "none", "message": {"text": "2 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "d838d1fc5d8231c9", "scanner": "scanner-primary", "fingerprint": "319e66a630e14977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}