{"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-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eededa67583303e7", "name": "Stray `console.log` in TS/JS \u2014 tools/run_tests.js:166", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/run_tests.js:166"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c71576e65ad1f922", "name": "Icon-only button without accessible name \u2014 src/ui/wizard.js:247", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/wizard.js:247"}, "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-04bdd6823a6e8fe6", "name": "Stray `console.log` in TS/JS \u2014 src/ui/verification.js:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/ui/verification.js:116"}, "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-905a866fe8b94f9c", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/plan/page.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/plan/page.tsx:118"}, "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-a57502938fcf7aa3", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/readiness/page.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/readiness/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-71cbafc347066e27", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/worklist/page.tsx:160", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/worklist/page.tsx:160"}, "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-804be086623ce7a3", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/my-items/page.tsx:214", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/my-items/page.tsx:214"}, "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-9ea3dfb1346bfd2e", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/governance/page.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/governance/page.tsx:116"}, "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-1aaf93f2eabddb68", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/command-palette.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/command-palette.tsx:171"}, "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-c58feb0291b554a9", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/notification-bell.tsx:176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/notification-bell.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-6a70b72eb3644236", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/dashboard/phase-progress.tsx:47", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/dashboard/phase-progress.tsx:47"}, "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-1ce6301ba83111b7", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/milestones/milestones-grid.tsx:607", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/milestones/milestones-grid.tsx:607"}, "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-46d1319973a68ee1", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/milestones/gantt-view.tsx:196", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/milestones/gantt-view.tsx:196"}, "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-c9f8f577a0a7c6f7", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/reports/weekly-report.tsx:224", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/reports/weekly-report.tsx:224"}, "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-fc16a7ef72b69fc5", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/resources/meeting-form.tsx:187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/resources/meeting-form.tsx:187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b3767e36e61bb7d", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/projects/project-switcher.tsx:52", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/projects/project-switcher.tsx:52"}, "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-13bfb901035c1c5a", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/documents/document-form.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/documents/document-form.tsx:70"}, "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-b19c99ae7c366dc7", "name": "`truncate` class without `title=` for hover reveal \u2014 v2/components/ui/impact-drawer.tsx:476", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/ui/impact-drawer.tsx:476"}, "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-b732a4721e51373b", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/shell.js:37", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/shell.js:37"}, "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-9d1e40328a42a8db", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/wizard.js:75", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/wizard.js:75"}, "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-30727ed0b895d5ca", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/grid.js:72", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/grid.js:72"}, "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-038f6266a95eda7a", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/dashboard.js:29", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/dashboard.js:29"}, "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-7075a9569f9416c1", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/welcome.js:19", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/welcome.js:19"}, "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-77f64f3b9f430088", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/steerco.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/steerco.js:35"}, "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-0093c3bfa47c8754", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/detail.js:83", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/detail.js:83"}, "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-b11469394b1433d6", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/banner.js:48", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/banner.js:48"}, "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-7dd41bf5ef1a1b25", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/verification.js:22", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/verification.js:22"}, "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-0122895a87163a00", "name": "Insecure pattern 'node_child_process' in v2/scripts/release-verify.mjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in v2/scripts/release-verify.mjs:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1c720f4679e12802", "name": "Insecure pattern 'node_child_process' in v2/scripts/local-preview.mjs:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in v2/scripts/local-preview.mjs:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad6701f0a8405e22", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-304bb3750929fc50", "name": "Very large file: src/test/test.js (846 lines)", "shortDescription": {"text": "Very large file: src/test/test.js (846 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-fb3f500d23776090", "name": "Very large file: v2/app/(app)/setup/page.tsx (1382 lines)", "shortDescription": {"text": "Very large file: v2/app/(app)/setup/page.tsx (1382 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-b31d5ab0b4171198", "name": "Very large file: v2/components/resources/resources-panel.tsx (1217 lines)", "shortDescription": {"text": "Very large file: v2/components/resources/resources-panel.tsx (1217 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-f4f8632135c7aff9", "name": "Very large file: v2/lib/mockData.ts (1049 lines)", "shortDescription": {"text": "Very large file: v2/lib/mockData.ts (1049 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-902ddb6bb0f1a9d8", "name": "Very large file: v2/lib/templates/project-templates.ts (1441 lines)", "shortDescription": {"text": "Very large file: v2/lib/templates/project-templates.ts (1441 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "29 tests / 160 src (ratio 0.18)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 34 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 131 placeholder/mock markers across 56 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-62b5a15975d5209b", "name": "Agent authority lacks a verifier contract: .claude/skills/focused-read/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/focused-read/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-19a5ab398a69776a", "name": "Agent authority lacks a verifier contract: .claude/skills/session-bootstrap/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/session-bootstrap/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-19d010a462dc7297", "name": "Commented-code block (6 lines) in src/test/test.js:651", "shortDescription": {"text": "Commented-code block (6 lines) in src/test/test.js:651"}, "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-080e0798c03d9a2f", "name": "Commented-code block (6 lines) in src/services/projectService.js:199", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/projectService.js:199"}, "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-e042c16b0c346fd0", "name": "Commented-code block (7 lines) in src/services/editService.js:13", "shortDescription": {"text": "Commented-code block (7 lines) in src/services/editService.js:13"}, "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-81c91ae44d55a789", "name": "Commented-code block (5 lines) in src/domain/dates.js:80", "shortDescription": {"text": "Commented-code block (5 lines) in src/domain/dates.js:80"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c0e4c0c7697eed6", "name": "Commented-code block (8 lines) in src/domain/documents.js:72", "shortDescription": {"text": "Commented-code block (8 lines) in src/domain/documents.js:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01364de3ec6f46b2", "name": "Commented-code block (6 lines) in src/domain/scheduling.js:85", "shortDescription": {"text": "Commented-code block (6 lines) in src/domain/scheduling.js:85"}, "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-78f5833ab5450e9b", "name": "Commented-code block (5 lines) in src/ui/shell.js:367", "shortDescription": {"text": "Commented-code block (5 lines) in src/ui/shell.js:367"}, "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-f83e99dc05f4b481", "name": "Legacy-named symbol `002B_UserJourney_IA_v2` in src/ui/wizard.js:7", "shortDescription": {"text": "Legacy-named symbol `002B_UserJourney_IA_v2` in src/ui/wizard.js:7"}, "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-f7c14ec8e4d54be4", "name": "Commented-code block (8 lines) in src/ui/grid.js:102", "shortDescription": {"text": "Commented-code block (8 lines) in src/ui/grid.js:102"}, "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-450c9439c69026f1", "name": "Legacy-named symbol `aivello_pending_setup_review_v1` in v2/app/(app)/page.tsx:67", "shortDescription": {"text": "Legacy-named symbol `aivello_pending_setup_review_v1` in v2/app/(app)/page.tsx:67"}, "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-1435f5bff26d9765", "name": "Legacy-named symbol `aivello_pending_setup_review_v1` in v2/app/(app)/setup/page.tsx:86", "shortDescription": {"text": "Legacy-named symbol `aivello_pending_setup_review_v1` in v2/app/(app)/setup/page.tsx:86"}, "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-4a1c36c1fcc6779e", "name": "Legacy-named symbol `aivello_milestones_v1` in v2/app/(app)/my-items/page.tsx:40", "shortDescription": {"text": "Legacy-named symbol `aivello_milestones_v1` in v2/app/(app)/my-items/page.tsx:40"}, "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-9c3cbd0b546c5197", "name": "Legacy-named symbol `aivello_sample_optin_v1` in v2/tests/e2e/ui-regression.spec.ts:57", "shortDescription": {"text": "Legacy-named symbol `aivello_sample_optin_v1` in v2/tests/e2e/ui-regression.spec.ts:57"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9df1e4cc3ffebf48", "name": "Legacy-named symbol `aivello_guidance_role_v1` in v2/components/guidance/role-selector.tsx:7", "shortDescription": {"text": "Legacy-named symbol `aivello_guidance_role_v1` in v2/components/guidance/role-selector.tsx:7"}, "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-612d93afaa4a9bc2", "name": "Legacy-named symbol `aivello_tasks_v1` in v2/components/milestones/milestones-grid.tsx:131", "shortDescription": {"text": "Legacy-named symbol `aivello_tasks_v1` in v2/components/milestones/milestones-grid.tsx:131"}, "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-b08f467518080ee4", "name": "Commented-code block (5 lines) in v2/components/charter/charter-view.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in v2/components/charter/charter-view.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99cc58d1e083a5a2", "name": "Commented-code block (5 lines) in v2/components/activity/activity-feed.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in v2/components/activity/activity-feed.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a6427b812309c3c", "name": "Commented-code block (6 lines) in v2/components/tasks/task-form.tsx:82", "shortDescription": {"text": "Commented-code block (6 lines) in v2/components/tasks/task-form.tsx:82"}, "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-91e8ee0e8d83a8dc", "name": "Commented-code block (5 lines) in v2/components/tasks/tasks-grid.tsx:719", "shortDescription": {"text": "Commented-code block (5 lines) in v2/components/tasks/tasks-grid.tsx:719"}, "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-a514a4b25fd79f1b", "name": "Legacy-named symbol `aivello_milestones_v1` in v2/components/projects/export-button.tsx:51", "shortDescription": {"text": "Legacy-named symbol `aivello_milestones_v1` in v2/components/projects/export-button.tsx:51"}, "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-d9bbadde7e5fe0cf", "name": "Legacy-named symbol `aivello_active_project_v1` in v2/components/projects/project-provider.tsx:7", "shortDescription": {"text": "Legacy-named symbol `aivello_active_project_v1` in v2/components/projects/project-provider.tsx:7"}, "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-c7fc306549a7e1ae", "name": "Commented-code block (6 lines) in v2/components/ui/impact-drawer.tsx:16", "shortDescription": {"text": "Commented-code block (6 lines) in v2/components/ui/impact-drawer.tsx:16"}, "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-664a30bd569417b0", "name": "Legacy-named symbol `aivello_tasks_v1` in v2/lib/useLocalStorageState.ts:10", "shortDescription": {"text": "Legacy-named symbol `aivello_tasks_v1` in v2/lib/useLocalStorageState.ts:10"}, "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-9fc71c7e136f0720", "name": "Legacy-named symbol `aivello_milestones_v1` in v2/lib/searchIndex.ts:39", "shortDescription": {"text": "Legacy-named symbol `aivello_milestones_v1` in v2/lib/searchIndex.ts:39"}, "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-406de80939333337", "name": "Commented-code block (5 lines) in v2/lib/mockData.ts:257", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/mockData.ts:257"}, "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-05e6e960bfb5a884", "name": "Legacy-named symbol `aivello_settings_v1` in v2/lib/settingsStore.ts:18", "shortDescription": {"text": "Legacy-named symbol `aivello_settings_v1` in v2/lib/settingsStore.ts:18"}, "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-c20a0a4b52b02848", "name": "Legacy-named symbol `aivello_tours_seen_v1` in v2/lib/guidance/tours.ts:7", "shortDescription": {"text": "Legacy-named symbol `aivello_tours_seen_v1` in v2/lib/guidance/tours.ts:7"}, "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-2d78b7aec787f40d", "name": "Legacy-named symbol `aivello_milestones_v1` in v2/lib/stores/entity-store.ts:37", "shortDescription": {"text": "Legacy-named symbol `aivello_milestones_v1` in v2/lib/stores/entity-store.ts:37"}, "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-059096b96108a306", "name": "Commented-code block (6 lines) in v2/lib/stores/audit.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in v2/lib/stores/audit.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e1db8ec9a72762b", "name": "Commented-code block (5 lines) in v2/lib/hooks/use-focus-row.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/hooks/use-focus-row.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-154ab50702c7f2b5", "name": "Commented-code block (5 lines) in v2/lib/hooks/use-project-evm.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/hooks/use-project-evm.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0292a821959f7562", "name": "Commented-code block (6 lines) in v2/lib/templates/project-templates.ts:21", "shortDescription": {"text": "Commented-code block (6 lines) in v2/lib/templates/project-templates.ts:21"}, "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-f57ced17bbe556a6", "name": "Legacy-named symbol `aivello_custom_project_templates_v1` in v2/lib/templates/custom-project-templates.ts:13", "shortDescription": {"text": "Legacy-named symbol `aivello_custom_project_templates_v1` in v2/lib/templates/custom-project-templates.ts:13"}, "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-de53c4f0036e2cdd", "name": "Commented-code block (8 lines) in v2/lib/validation/project-validator.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in v2/lib/validation/project-validator.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-165c6f718a69e7eb", "name": "Commented-code block (7 lines) in v2/lib/domain/consequence.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in v2/lib/domain/consequence.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2404fa2f1c4c2c9c", "name": "Commented-code block (7 lines) in v2/lib/domain/baseline.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in v2/lib/domain/baseline.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fec36963797e8f60", "name": "Commented-code block (5 lines) in v2/lib/domain/dates.ts:101", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/domain/dates.ts:101"}, "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-e49bb389593afbd5", "name": "Commented-code block (5 lines) in v2/lib/domain/delivery-truth.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/domain/delivery-truth.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80c45ecd2aee6469", "name": "Commented-code block (5 lines) in v2/lib/domain/hard-windows.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/domain/hard-windows.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6797b52d0d3c365a", "name": "Commented-code block (6 lines) in v2/lib/domain/evm-coverage.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in v2/lib/domain/evm-coverage.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-834aaf3717e29241", "name": "Commented-code block (5 lines) in v2/lib/domain/evm-project.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/domain/evm-project.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-586558f6f8763b57", "name": "Commented-code block (6 lines) in v2/lib/domain/scheduling.algorithm.test.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in v2/lib/domain/scheduling.algorithm.test.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b2b580b083305a5", "name": "Commented-code block (5 lines) in v2/lib/domain/activity-feed.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/domain/activity-feed.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3559aa08c079448a", "name": "Commented-code block (5 lines) in v2/lib/domain/scheduling.test.ts:551", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/domain/scheduling.test.ts:551"}, "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-10cbbd1a9b2122f5", "name": "Commented-code block (5 lines) in v2/lib/domain/critical-path.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/domain/critical-path.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c21fba4b8669fd98", "name": "Commented-code block (9 lines) in v2/lib/domain/variance.test.ts:69", "shortDescription": {"text": "Commented-code block (9 lines) in v2/lib/domain/variance.test.ts:69"}, "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-c9ba31efd4a312fb", "name": "Commented-code block (5 lines) in v2/lib/domain/scheduling.ts:310", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/domain/scheduling.ts:310"}, "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-36cd5efa77982b8b", "name": "Commented-code block (5 lines) in v2/lib/domain/evm.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in v2/lib/domain/evm.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24756"}, "properties": {"repository": "buildpod/pharmapm-command-center", "repoUrl": "https://github.com/buildpod/pharmapm-command-center", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-eededa67583303e7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/run_tests.js:166"}, "properties": {"repobilityId": "fe914d622bcfea69", "scanner": "scanner-primary", "fingerprint": "eededa67583303e7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c71576e65ad1f922", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/wizard.js:247"}, "properties": {"repobilityId": "a442efd8746129ef", "scanner": "scanner-primary", "fingerprint": "c71576e65ad1f922", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-04bdd6823a6e8fe6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/ui/verification.js:116"}, "properties": {"repobilityId": "a31408e1b96f0352", "scanner": "scanner-primary", "fingerprint": "04bdd6823a6e8fe6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-905a866fe8b94f9c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/plan/page.tsx:118"}, "properties": {"repobilityId": "c7da02cefd5dc510", "scanner": "scanner-primary", "fingerprint": "905a866fe8b94f9c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a57502938fcf7aa3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/readiness/page.tsx:165"}, "properties": {"repobilityId": "d3d9cd7c854f441f", "scanner": "scanner-primary", "fingerprint": "a57502938fcf7aa3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71cbafc347066e27", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/worklist/page.tsx:160"}, "properties": {"repobilityId": "887389f3f8025859", "scanner": "scanner-primary", "fingerprint": "71cbafc347066e27", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-804be086623ce7a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/my-items/page.tsx:214"}, "properties": {"repobilityId": "47f11f64d7b7adbb", "scanner": "scanner-primary", "fingerprint": "804be086623ce7a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9ea3dfb1346bfd2e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/app/(app)/governance/page.tsx:116"}, "properties": {"repobilityId": "d00a22992d6ef1c0", "scanner": "scanner-primary", "fingerprint": "9ea3dfb1346bfd2e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1aaf93f2eabddb68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/command-palette.tsx:171"}, "properties": {"repobilityId": "c3a1bca5fd8d9da5", "scanner": "scanner-primary", "fingerprint": "1aaf93f2eabddb68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c58feb0291b554a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/notification-bell.tsx:176"}, "properties": {"repobilityId": "a3e98ef49167afff", "scanner": "scanner-primary", "fingerprint": "c58feb0291b554a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a70b72eb3644236", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/dashboard/phase-progress.tsx:47"}, "properties": {"repobilityId": "04ac423659448f3f", "scanner": "scanner-primary", "fingerprint": "6a70b72eb3644236", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ce6301ba83111b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/milestones/milestones-grid.tsx:607"}, "properties": {"repobilityId": "d601e4e19bf19dd1", "scanner": "scanner-primary", "fingerprint": "1ce6301ba83111b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46d1319973a68ee1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/milestones/gantt-view.tsx:196"}, "properties": {"repobilityId": "de7906a49b4cb09a", "scanner": "scanner-primary", "fingerprint": "46d1319973a68ee1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c9f8f577a0a7c6f7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/reports/weekly-report.tsx:224"}, "properties": {"repobilityId": "d4d53e798b377c12", "scanner": "scanner-primary", "fingerprint": "c9f8f577a0a7c6f7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc16a7ef72b69fc5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/resources/meeting-form.tsx:187"}, "properties": {"repobilityId": "d01fe3f1028c0ab7", "scanner": "scanner-primary", "fingerprint": "fc16a7ef72b69fc5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4b3767e36e61bb7d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/projects/project-switcher.tsx:52"}, "properties": {"repobilityId": "d678e4b8eb0d6182", "scanner": "scanner-primary", "fingerprint": "4b3767e36e61bb7d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-13bfb901035c1c5a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/documents/document-form.tsx:70"}, "properties": {"repobilityId": "0ff7fbe53e8ad0cd", "scanner": "scanner-primary", "fingerprint": "13bfb901035c1c5a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b19c99ae7c366dc7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 v2/components/ui/impact-drawer.tsx:476"}, "properties": {"repobilityId": "417af5f348e19c79", "scanner": "scanner-primary", "fingerprint": "b19c99ae7c366dc7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b732a4721e51373b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/shell.js:37"}, "properties": {"repobilityId": "b60cf78a507db13a", "scanner": "scanner-primary", "fingerprint": "b732a4721e51373b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/shell.js"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-9d1e40328a42a8db", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/wizard.js:75"}, "properties": {"repobilityId": "6f88e4ae9297f606", "scanner": "scanner-primary", "fingerprint": "9d1e40328a42a8db", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/wizard.js"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-30727ed0b895d5ca", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/grid.js:72"}, "properties": {"repobilityId": "ea93af086793f5d6", "scanner": "scanner-primary", "fingerprint": "30727ed0b895d5ca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/grid.js"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-038f6266a95eda7a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/dashboard.js:29"}, "properties": {"repobilityId": "c20a4661ace3e19b", "scanner": "scanner-primary", "fingerprint": "038f6266a95eda7a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/dashboard.js"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-7075a9569f9416c1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/welcome.js:19"}, "properties": {"repobilityId": "8a39eaa0665f90a8", "scanner": "scanner-primary", "fingerprint": "7075a9569f9416c1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/welcome.js"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-77f64f3b9f430088", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/steerco.js:35"}, "properties": {"repobilityId": "1ecb4f23c0f55967", "scanner": "scanner-primary", "fingerprint": "77f64f3b9f430088", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/steerco.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-0093c3bfa47c8754", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/detail.js:83"}, "properties": {"repobilityId": "f4430c018ecf2208", "scanner": "scanner-primary", "fingerprint": "0093c3bfa47c8754", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/detail.js"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-b11469394b1433d6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/banner.js:48"}, "properties": {"repobilityId": "a525345b8e0ca26e", "scanner": "scanner-primary", "fingerprint": "b11469394b1433d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/banner.js"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-7dd41bf5ef1a1b25", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/verification.js:22"}, "properties": {"repobilityId": "450a052d10f9467e", "scanner": "scanner-primary", "fingerprint": "7dd41bf5ef1a1b25", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/verification.js"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-0122895a87163a00", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in v2/scripts/release-verify.mjs:3"}, "properties": {"repobilityId": "7fde78c5f64e352c", "scanner": "scanner-primary", "fingerprint": "0122895a87163a00", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v2/scripts/release-verify.mjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-1c720f4679e12802", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in v2/scripts/local-preview.mjs:4"}, "properties": {"repobilityId": "f804bd3801748afd", "scanner": "scanner-primary", "fingerprint": "1c720f4679e12802", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "v2/scripts/local-preview.mjs"}, "region": {"startLine": 4}}}]}, {"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-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2aee2e2d969c7c6b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bacb3eb1f157784f", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bee6b8956e03198c", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b70dbcc8f54d72ab", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "419d1ec7943efec2", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-ad6701f0a8405e22", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8384c23520d55657", "scanner": "scanner-primary", "fingerprint": "ad6701f0a8405e22", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-304bb3750929fc50", "level": "note", "message": {"text": "Very large file: src/test/test.js (846 lines)"}, "properties": {"repobilityId": "3e69755519563a82", "scanner": "scanner-primary", "fingerprint": "304bb3750929fc50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fb3f500d23776090", "level": "note", "message": {"text": "Very large file: v2/app/(app)/setup/page.tsx (1382 lines)"}, "properties": {"repobilityId": "59f1026e3b5f0bf8", "scanner": "scanner-primary", "fingerprint": "fb3f500d23776090", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b31d5ab0b4171198", "level": "note", "message": {"text": "Very large file: v2/components/resources/resources-panel.tsx (1217 lines)"}, "properties": {"repobilityId": "a7b2eb89d467ab49", "scanner": "scanner-primary", "fingerprint": "b31d5ab0b4171198", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f4f8632135c7aff9", "level": "note", "message": {"text": "Very large file: v2/lib/mockData.ts (1049 lines)"}, "properties": {"repobilityId": "f04cfed1ccf69568", "scanner": "scanner-primary", "fingerprint": "f4f8632135c7aff9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-902ddb6bb0f1a9d8", "level": "note", "message": {"text": "Very large file: v2/lib/templates/project-templates.ts (1441 lines)"}, "properties": {"repobilityId": "482efedb60b9c10c", "scanner": "scanner-primary", "fingerprint": "902ddb6bb0f1a9d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "84977a7a3c537d67", "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": "6487b3e7c50f112b", "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": "8f97869bb3c0cf4b", "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": "756972aecfdca13e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "1f5531dab06ba81d", "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-62b5a15975d5209b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/focused-read/SKILL.md"}, "properties": {"repobilityId": "4467c9c6e6e3853e", "scanner": "scanner-primary", "fingerprint": "62b5a15975d5209b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/focused-read/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19a5ab398a69776a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/session-bootstrap/SKILL.md"}, "properties": {"repobilityId": "f022347ba2b90de4", "scanner": "scanner-primary", "fingerprint": "19a5ab398a69776a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/session-bootstrap/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19d010a462dc7297", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/test/test.js:651"}, "properties": {"repobilityId": "bd23e7faa02a3ca4", "scanner": "scanner-primary", "fingerprint": "19d010a462dc7297", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-080e0798c03d9a2f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/projectService.js:199"}, "properties": {"repobilityId": "b9bf764edaec9e23", "scanner": "scanner-primary", "fingerprint": "080e0798c03d9a2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e042c16b0c346fd0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/services/editService.js:13"}, "properties": {"repobilityId": "8d5d7d1bf5201325", "scanner": "scanner-primary", "fingerprint": "e042c16b0c346fd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81c91ae44d55a789", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/domain/dates.js:80"}, "properties": {"repobilityId": "66d9764dc0d0aadb", "scanner": "scanner-primary", "fingerprint": "81c91ae44d55a789", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c0e4c0c7697eed6", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/domain/documents.js:72"}, "properties": {"repobilityId": "e4ea46b37bff063d", "scanner": "scanner-primary", "fingerprint": "8c0e4c0c7697eed6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01364de3ec6f46b2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/domain/scheduling.js:85"}, "properties": {"repobilityId": "47b1bc17cec70940", "scanner": "scanner-primary", "fingerprint": "01364de3ec6f46b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78f5833ab5450e9b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/ui/shell.js:367"}, "properties": {"repobilityId": "a85d0138d9b724db", "scanner": "scanner-primary", "fingerprint": "78f5833ab5450e9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f83e99dc05f4b481", "level": "note", "message": {"text": "Legacy-named symbol `002B_UserJourney_IA_v2` in src/ui/wizard.js:7"}, "properties": {"repobilityId": "6d4497e774638da5", "scanner": "scanner-primary", "fingerprint": "f83e99dc05f4b481", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f7c14ec8e4d54be4", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/ui/grid.js:102"}, "properties": {"repobilityId": "d4e57da26cad1b57", "scanner": "scanner-primary", "fingerprint": "f7c14ec8e4d54be4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-450c9439c69026f1", "level": "note", "message": {"text": "Legacy-named symbol `aivello_pending_setup_review_v1` in v2/app/(app)/page.tsx:67"}, "properties": {"repobilityId": "e329b33f5ff7774a", "scanner": "scanner-primary", "fingerprint": "450c9439c69026f1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1435f5bff26d9765", "level": "note", "message": {"text": "Legacy-named symbol `aivello_pending_setup_review_v1` in v2/app/(app)/setup/page.tsx:86"}, "properties": {"repobilityId": "9ad5a6eeceac2528", "scanner": "scanner-primary", "fingerprint": "1435f5bff26d9765", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4a1c36c1fcc6779e", "level": "note", "message": {"text": "Legacy-named symbol `aivello_milestones_v1` in v2/app/(app)/my-items/page.tsx:40"}, "properties": {"repobilityId": "503ed24d8d09a89f", "scanner": "scanner-primary", "fingerprint": "4a1c36c1fcc6779e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9c3cbd0b546c5197", "level": "note", "message": {"text": "Legacy-named symbol `aivello_sample_optin_v1` in v2/tests/e2e/ui-regression.spec.ts:57"}, "properties": {"repobilityId": "7916f80559b44a2e", "scanner": "scanner-primary", "fingerprint": "9c3cbd0b546c5197", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9df1e4cc3ffebf48", "level": "note", "message": {"text": "Legacy-named symbol `aivello_guidance_role_v1` in v2/components/guidance/role-selector.tsx:7"}, "properties": {"repobilityId": "c37256cdf2488bc4", "scanner": "scanner-primary", "fingerprint": "9df1e4cc3ffebf48", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-612d93afaa4a9bc2", "level": "note", "message": {"text": "Legacy-named symbol `aivello_tasks_v1` in v2/components/milestones/milestones-grid.tsx:131"}, "properties": {"repobilityId": "33f6870c06a9a72c", "scanner": "scanner-primary", "fingerprint": "612d93afaa4a9bc2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b08f467518080ee4", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/components/charter/charter-view.tsx:3"}, "properties": {"repobilityId": "a8fcb9c9d1676263", "scanner": "scanner-primary", "fingerprint": "b08f467518080ee4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99cc58d1e083a5a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/components/activity/activity-feed.tsx:3"}, "properties": {"repobilityId": "eee65ce1d4052932", "scanner": "scanner-primary", "fingerprint": "99cc58d1e083a5a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a6427b812309c3c", "level": "none", "message": {"text": "Commented-code block (6 lines) in v2/components/tasks/task-form.tsx:82"}, "properties": {"repobilityId": "48655261eaf79619", "scanner": "scanner-primary", "fingerprint": "2a6427b812309c3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91e8ee0e8d83a8dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/components/tasks/tasks-grid.tsx:719"}, "properties": {"repobilityId": "fcccb8061a0ae737", "scanner": "scanner-primary", "fingerprint": "91e8ee0e8d83a8dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a514a4b25fd79f1b", "level": "note", "message": {"text": "Legacy-named symbol `aivello_milestones_v1` in v2/components/projects/export-button.tsx:51"}, "properties": {"repobilityId": "319cd433e3db546b", "scanner": "scanner-primary", "fingerprint": "a514a4b25fd79f1b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d9bbadde7e5fe0cf", "level": "note", "message": {"text": "Legacy-named symbol `aivello_active_project_v1` in v2/components/projects/project-provider.tsx:7"}, "properties": {"repobilityId": "83277932a8c52e91", "scanner": "scanner-primary", "fingerprint": "d9bbadde7e5fe0cf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c7fc306549a7e1ae", "level": "none", "message": {"text": "Commented-code block (6 lines) in v2/components/ui/impact-drawer.tsx:16"}, "properties": {"repobilityId": "a0361e2924ee24c1", "scanner": "scanner-primary", "fingerprint": "c7fc306549a7e1ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-664a30bd569417b0", "level": "note", "message": {"text": "Legacy-named symbol `aivello_tasks_v1` in v2/lib/useLocalStorageState.ts:10"}, "properties": {"repobilityId": "2d44719a77984702", "scanner": "scanner-primary", "fingerprint": "664a30bd569417b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9fc71c7e136f0720", "level": "note", "message": {"text": "Legacy-named symbol `aivello_milestones_v1` in v2/lib/searchIndex.ts:39"}, "properties": {"repobilityId": "f51d6638ac695eab", "scanner": "scanner-primary", "fingerprint": "9fc71c7e136f0720", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-406de80939333337", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/mockData.ts:257"}, "properties": {"repobilityId": "9f71782d12524757", "scanner": "scanner-primary", "fingerprint": "406de80939333337", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05e6e960bfb5a884", "level": "note", "message": {"text": "Legacy-named symbol `aivello_settings_v1` in v2/lib/settingsStore.ts:18"}, "properties": {"repobilityId": "92995a02b836a0ef", "scanner": "scanner-primary", "fingerprint": "05e6e960bfb5a884", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c20a0a4b52b02848", "level": "note", "message": {"text": "Legacy-named symbol `aivello_tours_seen_v1` in v2/lib/guidance/tours.ts:7"}, "properties": {"repobilityId": "e5f3102bcaa533d3", "scanner": "scanner-primary", "fingerprint": "c20a0a4b52b02848", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2d78b7aec787f40d", "level": "note", "message": {"text": "Legacy-named symbol `aivello_milestones_v1` in v2/lib/stores/entity-store.ts:37"}, "properties": {"repobilityId": "1e78825b700c8faf", "scanner": "scanner-primary", "fingerprint": "2d78b7aec787f40d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-059096b96108a306", "level": "none", "message": {"text": "Commented-code block (6 lines) in v2/lib/stores/audit.ts:3"}, "properties": {"repobilityId": "761b349aac665cd4", "scanner": "scanner-primary", "fingerprint": "059096b96108a306", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e1db8ec9a72762b", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/hooks/use-focus-row.ts:3"}, "properties": {"repobilityId": "9701b0b581d2589e", "scanner": "scanner-primary", "fingerprint": "7e1db8ec9a72762b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-154ab50702c7f2b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/hooks/use-project-evm.ts:3"}, "properties": {"repobilityId": "d8c8941234ca4f6e", "scanner": "scanner-primary", "fingerprint": "154ab50702c7f2b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0292a821959f7562", "level": "none", "message": {"text": "Commented-code block (6 lines) in v2/lib/templates/project-templates.ts:21"}, "properties": {"repobilityId": "e0e228234aaee474", "scanner": "scanner-primary", "fingerprint": "0292a821959f7562", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f57ced17bbe556a6", "level": "note", "message": {"text": "Legacy-named symbol `aivello_custom_project_templates_v1` in v2/lib/templates/custom-project-templates.ts:13"}, "properties": {"repobilityId": "eac330f87475a38e", "scanner": "scanner-primary", "fingerprint": "f57ced17bbe556a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-de53c4f0036e2cdd", "level": "none", "message": {"text": "Commented-code block (8 lines) in v2/lib/validation/project-validator.ts:3"}, "properties": {"repobilityId": "66735c82aac3cdf9", "scanner": "scanner-primary", "fingerprint": "de53c4f0036e2cdd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-165c6f718a69e7eb", "level": "none", "message": {"text": "Commented-code block (7 lines) in v2/lib/domain/consequence.ts:3"}, "properties": {"repobilityId": "c524213aca953c2e", "scanner": "scanner-primary", "fingerprint": "165c6f718a69e7eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2404fa2f1c4c2c9c", "level": "none", "message": {"text": "Commented-code block (7 lines) in v2/lib/domain/baseline.ts:3"}, "properties": {"repobilityId": "c49f3bef9e1f403f", "scanner": "scanner-primary", "fingerprint": "2404fa2f1c4c2c9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fec36963797e8f60", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/domain/dates.ts:101"}, "properties": {"repobilityId": "2096ea53e4e6e4fc", "scanner": "scanner-primary", "fingerprint": "fec36963797e8f60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e49bb389593afbd5", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/domain/delivery-truth.ts:1"}, "properties": {"repobilityId": "71408e66d1268c0f", "scanner": "scanner-primary", "fingerprint": "e49bb389593afbd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80c45ecd2aee6469", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/domain/hard-windows.ts:3"}, "properties": {"repobilityId": "9bec882d5fa2dc2c", "scanner": "scanner-primary", "fingerprint": "80c45ecd2aee6469", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6797b52d0d3c365a", "level": "none", "message": {"text": "Commented-code block (6 lines) in v2/lib/domain/evm-coverage.ts:3"}, "properties": {"repobilityId": "226599f39e315df1", "scanner": "scanner-primary", "fingerprint": "6797b52d0d3c365a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-834aaf3717e29241", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/domain/evm-project.ts:7"}, "properties": {"repobilityId": "b3f6e10172d6e820", "scanner": "scanner-primary", "fingerprint": "834aaf3717e29241", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-586558f6f8763b57", "level": "none", "message": {"text": "Commented-code block (6 lines) in v2/lib/domain/scheduling.algorithm.test.ts:3"}, "properties": {"repobilityId": "ed75d51358318e69", "scanner": "scanner-primary", "fingerprint": "586558f6f8763b57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b2b580b083305a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/domain/activity-feed.ts:3"}, "properties": {"repobilityId": "fb276fab8cb0d29e", "scanner": "scanner-primary", "fingerprint": "1b2b580b083305a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3559aa08c079448a", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/domain/scheduling.test.ts:551"}, "properties": {"repobilityId": "16014b487df4ed41", "scanner": "scanner-primary", "fingerprint": "3559aa08c079448a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10cbbd1a9b2122f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/domain/critical-path.ts:3"}, "properties": {"repobilityId": "2f7e00597eb87de4", "scanner": "scanner-primary", "fingerprint": "10cbbd1a9b2122f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c21fba4b8669fd98", "level": "none", "message": {"text": "Commented-code block (9 lines) in v2/lib/domain/variance.test.ts:69"}, "properties": {"repobilityId": "714ca0cb1c733582", "scanner": "scanner-primary", "fingerprint": "c21fba4b8669fd98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9ba31efd4a312fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/domain/scheduling.ts:310"}, "properties": {"repobilityId": "34b235ee7d4ece9a", "scanner": "scanner-primary", "fingerprint": "c9ba31efd4a312fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36cd5efa77982b8b", "level": "none", "message": {"text": "Commented-code block (5 lines) in v2/lib/domain/evm.ts:3"}, "properties": {"repobilityId": "890676821b3907e9", "scanner": "scanner-primary", "fingerprint": "36cd5efa77982b8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}