{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-4+qual-2+sec-2","generated_at":"2026-11-14T00:02:47.937834Z","repo":{"ref":{"host":"github.com","owner":"centminmod","name":"my-claude-code-setup"},"default_branch":"master","clone_url":"https://github.com/centminmod/my-claude-code-setup.git","html_url":"https://github.com/centminmod/my-claude-code-setup","description":"Shared starter template configuration and CLAUDE.md memory bank system for Claude Code","stars":2732,"forks":259,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":2756,"primary_language":"Python","license_spdx":"MIT","created_at":"2025-07-08T01:55:33Z","pushed_at":"2026-11-09T23:03:04Z","security_policy_url":null,"distribution":{"owner_created_at":"2013-11-10T02:14:58Z","owner_type":"User","release_assets":[]}},"commit_sha":"c0e75920b4552e3e3d2c6878fe7b13b049910d6b","profile":{"lines_by_language":{"Python":31504,"Shell":108},"files_by_category":{"docs":91,"source":24,"vendored":12,"config":7},"source_lines":31612,"test_lines":0},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.65,"coverage":1.0,"label":"possible","breakdown":{"attributed_share":0.0,"suspected_share":0.4884,"estimated_share":0.0,"ai_artifacts":50.0,"flagged_work_units":5.0,"flagged_releases":null},"summary":"Weak signals consistent with AI-assisted development."},"quality":{"score":43.6,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":17.3,"duplication":78.5,"lint":73.5,"testing":10.0,"docs":85.0,"type_safety":40.0,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.00, no CI test run detected; 58% of function code in complex or long functions; 4% duplicated lines. Weakest area: testing."},"security":{"score":77.6,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":88.4,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: 10 high-severity SAST findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":310.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":67133.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2025-07":{"loc":0,"attributed_loc":0},"2025-08":{"loc":0,"attributed_loc":0},"2025-09":{"loc":0,"attributed_loc":0},"2025-10":{"loc":0,"attributed_loc":0},"2025-11":{"loc":0,"attributed_loc":0},"2025-12":{"loc":0,"attributed_loc":0},"2026-01":{"loc":0,"attributed_loc":0},"2026-02":{"loc":0,"attributed_loc":0},"2026-03":{"loc":1974,"attributed_loc":0},"2026-04":{"loc":30511,"attributed_loc":0},"2026-05":{"loc":26746,"attributed_loc":0},"2026-06":{"loc":6208,"attributed_loc":0},"2026-07":{"loc":704,"attributed_loc":0},"2026-08":{"loc":0,"attributed_loc":0},"2026-09":{"loc":833,"attributed_loc":0},"2026-10":{"loc":96,"attributed_loc":0},"2026-11":{"loc":61,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":50.0,"workflow_agents":0.0,"tools_configured":1.0,"earliest_adoption":1751940454.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":".claude/agents/code-searcher.md (claude-code configuration)","ref":".claude/agents/code-searcher.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/agents/code-searcher.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/codex-cli.md (claude-code configuration)","ref":".claude/agents/codex-cli.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/agents/codex-cli.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/get-current-datetime.md (claude-code configuration)","ref":".claude/agents/get-current-datetime.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/agents/get-current-datetime.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/memory-bank-synchronizer.md (claude-code configuration)","ref":".claude/agents/memory-bank-synchronizer.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/agents/memory-bank-synchronizer.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/ux-design-expert.md (claude-code configuration)","ref":".claude/agents/ux-design-expert.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/agents/ux-design-expert.md","weight":0.5},{"kind":"ai-artifact","description":".claude/agents/zai-cli.md (claude-code configuration)","ref":".claude/agents/zai-cli.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/agents/zai-cli.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/anthropic/apply-thinking-to.md (claude-code configuration)","ref":".claude/commands/anthropic/apply-thinking-to.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/anthropic/apply-thinking-to.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/anthropic/convert-to-todowrite-tasklist-prompt.md (claude-code configuration)","ref":".claude/commands/anthropic/convert-to-todowrite-tasklist-prompt.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/anthropic/convert-to-todowrite-tasklist-prompt.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/anthropic/update-memory-bank.md (claude-code configuration)","ref":".claude/commands/anthropic/update-memory-bank.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/anthropic/update-memory-bank.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/architecture/explain-architecture-pattern.md (claude-code configuration)","ref":".claude/commands/architecture/explain-architecture-pattern.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/architecture/explain-architecture-pattern.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/ccusage/ccusage-daily.md (claude-code configuration)","ref":".claude/commands/ccusage/ccusage-daily.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/ccusage/ccusage-daily.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/cleanup/cleanup-context.md (claude-code configuration)","ref":".claude/commands/cleanup/cleanup-context.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/cleanup/cleanup-context.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/documentation/create-readme-section.md (claude-code configuration)","ref":".claude/commands/documentation/create-readme-section.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/documentation/create-readme-section.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/documentation/create-release-note.md (claude-code configuration)","ref":".claude/commands/documentation/create-release-note.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/documentation/create-release-note.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/promptengineering/batch-operations-prompt.md (claude-code configuration)","ref":".claude/commands/promptengineering/batch-operations-prompt.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/promptengineering/batch-operations-prompt.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/promptengineering/convert-to-test-driven-prompt.md (claude-code configuration)","ref":".claude/commands/promptengineering/convert-to-test-driven-prompt.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/promptengineering/convert-to-test-driven-prompt.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/refactor/refactor-code.md (claude-code configuration)","ref":".claude/commands/refactor/refactor-code.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/refactor/refactor-code.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/security/check-best-practices.md (claude-code configuration)","ref":".claude/commands/security/check-best-practices.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/security/check-best-practices.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/security/secure-prompts.md (claude-code configuration)","ref":".claude/commands/security/secure-prompts.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/security/secure-prompts.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/security/security-audit.md (claude-code configuration)","ref":".claude/commands/security/security-audit.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/security/security-audit.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/security/test-examples/test-advanced-injection.md (claude-code configuration)","ref":".claude/commands/security/test-examples/test-advanced-injection.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/security/test-examples/test-advanced-injection.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/security/test-examples/test-authority-claims.md (claude-code configuration)","ref":".claude/commands/security/test-examples/test-authority-claims.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/security/test-examples/test-authority-claims.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/security/test-examples/test-basic-role-override.md (claude-code configuration)","ref":".claude/commands/security/test-examples/test-basic-role-override.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/security/test-examples/test-basic-role-override.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/security/test-examples/test-css-hiding.md (claude-code configuration)","ref":".claude/commands/security/test-examples/test-css-hiding.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/security/test-examples/test-css-hiding.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/security/test-examples/test-encoding-attacks.md (claude-code configuration)","ref":".claude/commands/security/test-examples/test-encoding-attacks.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/security/test-examples/test-encoding-attacks.md","weight":0.5},{"kind":"ai-artifact","description":".claude/commands/security/test-examples/test-invisible-chars.md (claude-code configuration)","ref":".claude/commands/security/test-examples/test-invisible-chars.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/commands/security/test-examples/test-invisible-chars.md","weight":0.5},{"kind":"ai-artifact","description":".claude/hooks/unified_notifier.py (claude-code configuration)","ref":".claude/hooks/unified_notifier.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/hooks/unified_notifier.py","weight":0.5},{"kind":"ai-artifact","description":".claude/hooks/unified_notifier.py.md (claude-code configuration)","ref":".claude/hooks/unified_notifier.py.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/hooks/unified_notifier.py.md","weight":0.5},{"kind":"ai-artifact","description":".claude/mcp/chrome-devtools.json (claude-code configuration)","ref":".claude/mcp/chrome-devtools.json","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/mcp/chrome-devtools.json","weight":0.5},{"kind":"ai-artifact","description":".claude/rules/core-rules.md (claude-code configuration)","ref":".claude/rules/core-rules.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/rules/core-rules.md","weight":0.5},{"kind":"ai-artifact","description":".claude/settings.json (claude-code configuration)","ref":".claude/settings.json","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/settings.json","weight":0.5},{"kind":"ai-artifact","description":".claude/settings.local.json (claude-code configuration)","ref":".claude/settings.local.json","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/settings.local.json","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/SKILL.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/SKILL.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/SKILL.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/references/analyze-reference.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/references/analyze-reference.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/references/analyze-reference.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/references/api-reference.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/references/api-reference.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/references/api-reference.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/references/composite-reference.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/references/composite-reference.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/references/composite-reference.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/references/consistency-presets.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/references/consistency-presets.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/references/consistency-presets.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/references/model-benchmarks.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/references/model-benchmarks.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/references/model-benchmarks.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/references/prompt-categories.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/references/prompt-categories.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/references/prompt-categories.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/references/prompt-core.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/references/prompt-core.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/references/prompt-core.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/references/prompt-platforms.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/references/prompt-platforms.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/references/prompt-platforms.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/references/setup-guide.md (claude-code configuration)","ref":".claude/skills/ai-image-creator/references/setup-guide.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/references/setup-guide.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/scripts/composite-banners.py (claude-code configuration)","ref":".claude/skills/ai-image-creator/scripts/composite-banners.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/scripts/composite-banners.py","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/scripts/generate-image.py (claude-code configuration)","ref":".claude/skills/ai-image-creator/scripts/generate-image.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/scripts/generate-image.py","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/ai-image-creator/tmp/.gitkeep (claude-code configuration)","ref":".claude/skills/ai-image-creator/tmp/.gitkeep","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/tmp/.gitkeep","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/audit-session-metrics/SKILL.md (claude-code configuration)","ref":".claude/skills/audit-session-metrics/SKILL.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/audit-session-metrics/SKILL.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/audit-session-metrics/references/detailed-audit.md (claude-code configuration)","ref":".claude/skills/audit-session-metrics/references/detailed-audit.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/audit-session-metrics/references/detailed-audit.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/audit-session-metrics/references/instance-quick-audit.md (claude-code configuration)","ref":".claude/skills/audit-session-metrics/references/instance-quick-audit.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/audit-session-metrics/references/instance-quick-audit.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/audit-session-metrics/references/project-detailed-audit.md (claude-code configuration)","ref":".claude/skills/audit-session-metrics/references/project-detailed-audit.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/audit-session-metrics/references/project-detailed-audit.md","weight":0.5},{"kind":"ai-artifact","description":".claude/skills/audit-session-metrics/references/project-quick-audit.md (claude-code configuration)","ref":".claude/skills/audit-session-metrics/references/project-quick-audit.md","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/audit-session-metrics/references/project-quick-audit.md","weight":0.5}],"data":{"artifacts":[{"tool":"claude-code","path":".claude/agents/code-searcher.md","added_at":1753690561},{"tool":"claude-code","path":".claude/agents/codex-cli.md","added_at":1768299326},{"tool":"claude-code","path":".claude/agents/get-current-datetime.md","added_at":1753711779},{"tool":"claude-code","path":".claude/agents/memory-bank-synchronizer.md","added_at":1753455524},{"tool":"claude-code","path":".claude/agents/ux-design-expert.md","added_at":1753878438},{"tool":"claude-code","path":".claude/agents/zai-cli.md","added_at":1768299326},{"tool":"claude-code","path":".claude/commands/anthropic/apply-thinking-to.md","added_at":1751940454},{"tool":"claude-code","path":".claude/commands/anthropic/convert-to-todowrite-tasklist-prompt.md","added_at":1751940454},{"tool":"claude-code","path":".claude/commands/anthropic/update-memory-bank.md","added_at":1751940454},{"tool":"claude-code","path":".claude/commands/architecture/explain-architecture-pattern.md","added_at":1751985577},{"tool":"claude-code","path":".claude/commands/ccusage/ccusage-daily.md","added_at":1751940454},{"tool":"claude-code","path":".claude/commands/cleanup/cleanup-context.md","added_at":1751940454},{"tool":"claude-code","path":".claude/commands/documentation/create-readme-section.md","added_at":1751985577},{"tool":"claude-code","path":".claude/commands/documentation/create-release-note.md","added_at":1760625484},{"tool":"claude-code","path":".claude/commands/promptengineering/batch-operations-prompt.md","added_at":1751985577},{"tool":"claude-code","path":".claude/commands/promptengineering/convert-to-test-driven-prompt.md","added_at":1751985577},{"tool":"claude-code","path":".claude/commands/refactor/refactor-code.md","added_at":1752523987},{"tool":"claude-code","path":".claude/commands/security/check-best-practices.md","added_at":1751985577},{"tool":"claude-code","path":".claude/commands/security/secure-prompts.md","added_at":1752875378},{"tool":"claude-code","path":".claude/commands/security/security-audit.md","added_at":1751985577},{"tool":"claude-code","path":".claude/commands/security/test-examples/test-advanced-injection.md","added_at":1752875378},{"tool":"claude-code","path":".claude/commands/security/test-examples/test-authority-claims.md","added_at":1752875378},{"tool":"claude-code","path":".claude/commands/security/test-examples/test-basic-role-override.md","added_at":1752875378},{"tool":"claude-code","path":".claude/commands/security/test-examples/test-css-hiding.md","added_at":1752875378},{"tool":"claude-code","path":".claude/commands/security/test-examples/test-encoding-attacks.md","added_at":1752875378},{"tool":"claude-code","path":".claude/commands/security/test-examples/test-invisible-chars.md","added_at":1752875378},{"tool":"claude-code","path":".claude/hooks/unified_notifier.py","added_at":1777843884},{"tool":"claude-code","path":".claude/hooks/unified_notifier.py.md","added_at":1777843884},{"tool":"claude-code","path":".claude/mcp/chrome-devtools.json","added_at":1759532436},{"tool":"claude-code","path":".claude/rules/core-rules.md","added_at":1777854882},{"tool":"claude-code","path":".claude/settings.json","added_at":1751984561},{"tool":"claude-code","path":".claude/settings.local.json","added_at":1751984561},{"tool":"claude-code","path":".claude/skills/ai-image-creator/SKILL.md","added_at":1774441343},{"tool":"claude-code","path":".claude/skills/ai-image-creator/references/analyze-reference.md","added_at":1775179520},{"tool":"claude-code","path":".claude/skills/ai-image-creator/references/api-reference.md","added_at":1774441343},{"tool":"claude-code","path":".claude/skills/ai-image-creator/references/composite-reference.md","added_at":1774557568},{"tool":"claude-code","path":".claude/skills/ai-image-creator/references/consistency-presets.md","added_at":1781791083},{"tool":"claude-code","path":".claude/skills/ai-image-creator/references/model-benchmarks.md","added_at":1790553826},{"tool":"claude-code","path":".claude/skills/ai-image-creator/references/prompt-categories.md","added_at":1774547878},{"tool":"claude-code","path":".claude/skills/ai-image-creator/references/prompt-core.md","added_at":1774547878},{"tool":"claude-code","path":".claude/skills/ai-image-creator/references/prompt-platforms.md","added_at":1774547878},{"tool":"claude-code","path":".claude/skills/ai-image-creator/references/setup-guide.md","added_at":1774441343},{"tool":"claude-code","path":".claude/skills/ai-image-creator/scripts/composite-banners.py","added_at":1774557568},{"tool":"claude-code","path":".claude/skills/ai-image-creator/scripts/generate-image.py","added_at":1774441343},{"tool":"claude-code","path":".claude/skills/ai-image-creator/tmp/.gitkeep","added_at":1774441343},{"tool":"claude-code","path":".claude/skills/audit-session-metrics/SKILL.md","added_at":1777410535},{"tool":"claude-code","path":".claude/skills/audit-session-metrics/references/detailed-audit.md","added_at":1777410535},{"tool":"claude-code","path":".claude/skills/audit-session-metrics/references/instance-quick-audit.md","added_at":1777435643},{"tool":"claude-code","path":".claude/skills/audit-session-metrics/references/project-detailed-audit.md","added_at":1777435643},{"tool":"claude-code","path":".claude/skills/audit-session-metrics/references/project-quick-audit.md","added_at":1777435643}],"workflows":[],"tools":["claude-code"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":105.0,"flagged_units":5.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":67133.0,"flagged_loc":32789.0,"flagged_loc_share":0.4884185125050273,"max_loc_per_hour":2796.5,"median_loc_per_hour":182.58373205741628,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"11,186 lines of first-party code in ~4.0h (2,796 lines/hour, 1 commit session)","ref":"f49e7f1d4914aac772f36be6230fda83bbf951d0","url":"https://github.com/centminmod/my-claude-code-setup/commit/f49e7f1d4914aac772f36be6230fda83bbf951d0","weight":0.6},{"kind":"velocity-burst","description":"10,220 lines of first-party code in ~5.0h (2,048 lines/hour, 3 commit session)","ref":"f69b1f922b1bf22e2fdd374f510b5e6beed8b950","url":"https://github.com/centminmod/my-claude-code-setup/commit/f69b1f922b1bf22e2fdd374f510b5e6beed8b950","weight":0.6},{"kind":"velocity-burst","description":"6,499 lines of first-party code in ~3.7h (1,754 lines/hour, 1 commit session)","ref":"bf00e6a21868788bdfc0415697384c0af11f976a","url":"https://github.com/centminmod/my-claude-code-setup/commit/bf00e6a21868788bdfc0415697384c0af11f976a","weight":0.5262348178137651},{"kind":"velocity-burst","description":"3,848 lines of first-party code in ~4.0h (962 lines/hour, 1 commit session)","ref":"516fd5d3dde099572cb434557362ab34144073d0","url":"https://github.com/centminmod/my-claude-code-setup/commit/516fd5d3dde099572cb434557362ab34144073d0","weight":0.28859999999999997},{"kind":"velocity-burst","description":"1,036 lines of first-party code in ~1.5h (671 lines/hour, 2 commit session)","ref":"53840c2400788a24da6be37e6d1a8fee6ae4a68a","url":"https://github.com/centminmod/my-claude-code-setup/commit/53840c2400788a24da6be37e6d1a8fee6ae4a68a","weight":0.20127361036157584}],"data":{"flagged_loc_by_commit":{"516fd5d3dde099572cb434557362ab34144073d0":3848,"bf00e6a21868788bdfc0415697384c0af11f976a":6499,"f49e7f1d4914aac772f36be6230fda83bbf951d0":11186,"26b3968bb636471d09a5bdabead9225b906912e6":9997,"f26ad854c4cf937d093c041af12db32176ce854e":157,"f69b1f922b1bf22e2fdd374f510b5e6beed8b950":66,"36e0d42d558aa7904b41b9c891f18b811fdee829":351,"53840c2400788a24da6be37e6d1a8fee6ae4a68a":685},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":31614.0,"index":0.3,"count:narrated_steps":5.0,"per_kloc:narrated_steps":0.158,"files:narrated_steps":2.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":9.0,"per_kloc:emoji_in_code":0.285,"files:emoji_in_code":3.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 3: ImageMagick trim transparent padding","ref":".claude/skills/ai-image-creator/scripts/generate-image.py:1700","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/scripts/generate-image.py#L1700","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 1: scratch dir. Resolve symlinks (``/tmp`` → ``/private/tmp`` on","ref":".claude/skills/session-metrics/scripts/session_metrics_compare.py:4408","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/session_metrics_compare.py#L4408","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 2: prompt suite + confirmation gate","ref":".claude/skills/session-metrics/scripts/session_metrics_compare.py:4428","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/session_metrics_compare.py#L4428","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 3: capture side A then side B","ref":".claude/skills/session-metrics/scripts/session_metrics_compare.py:4450","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/session_metrics_compare.py#L4450","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: # Step 4: hand off to the existing compare renderer","ref":".claude/skills/session-metrics/scripts/session_metrics_compare.py:4488","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/session_metrics_compare.py#L4488","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":22.0,"findings_high":10.0,"findings_medium":8.0,"findings_low":4.0,"weighted_findings":11.15,"scanned_lines":31612.0,"parse_errors":1.0},"findings":[{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/hooks/unified_notifier.py","line":48,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/hooks/unified_notifier.py:48"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/hooks/unified_notifier.py","line":65,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/hooks/unified_notifier.py:65"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/skills/ai-image-creator/scripts/composite-banners.py","line":161,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/skills/ai-image-creator/scripts/composite-banners.py:161"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/skills/ai-image-creator/scripts/composite-banners.py","line":213,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/skills/ai-image-creator/scripts/composite-banners.py:213"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'CompletedProcess' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/skills/ai-image-creator/scripts/composite-banners.py","line":219,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/skills/ai-image-creator/scripts/composite-banners.py:219"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/skills/ai-image-creator/scripts/composite-banners.py","line":236,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/skills/ai-image-creator/scripts/composite-banners.py:236"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/skills/ai-image-creator/scripts/composite-banners.py","line":251,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/skills/ai-image-creator/scripts/composite-banners.py:251"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/skills/ai-image-creator/scripts/generate-image.py","line":1621,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/skills/ai-image-creator/scripts/generate-image.py:1621"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/skills/ai-image-creator/scripts/generate-image.py","line":1706,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/skills/ai-image-creator/scripts/generate-image.py:1706"},{"rule_id":"opengrep/python.lang.security.audit.dangerous-subprocess-use-audit","severity":"high","message":"Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low]","path":".claude/skills/ai-image-creator/scripts/generate-image.py","line":1841,"fingerprint":"python.lang.security.audit.dangerous-subprocess-use-audit:.claude/skills/ai-image-creator/scripts/generate-image.py:1841"},{"rule_id":"opengrep/python.lang.security.audit.dynamic-urllib-use-detected","severity":"medium","message":"Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control the URLs, or consider using the 'requests' library instead. [confidence low]","path":".claude/skills/ai-image-creator/scripts/generate-image.py","line":1235,"fingerprint":"python.lang.security.audit.dynamic-urllib-use-detected:.claude/skills/ai-image-creator/scripts/generate-image.py:1235"},{"rule_id":"opengrep/python.lang.security.insecure-hash-algorithm-sha1","severity":"medium","message":"Detected SHA1 hash algorithm which is considered insecure. SHA1 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead. [confidence medium]","path":".claude/skills/session-metrics/scripts/_data.py","line":360,"fingerprint":"python.lang.security.insecure-hash-algorithm-sha1:.claude/skills/session-metrics/scripts/_data.py:360"},{"rule_id":"opengrep/python.lang.security.deserialization.avoid-pickle","severity":"medium","message":"Avoid using `pickle`, which is known to lead to code execution vulnerabilities. When unpickling, the serialized data could be manipulated to run arbitrary code. Instead, consider serializing the relevant data as JSON or a similar text-based serialization format. [confidence low]","path":".claude/skills/session-metrics/scripts/_data.py","line":394,"fingerprint":"python.lang.security.deserialization.avoid-pickle:.claude/skills/session-metrics/scripts/_data.py:394"},{"rule_id":"opengrep/python.lang.security.deserialization.avoid-pickle","severity":"medium","message":"Avoid using `pickle`, which is known to lead to code execution vulnerabilities. When unpickling, the serialized data could be manipulated to run arbitrary code. Instead, consider serializing the relevant data as JSON or a similar text-based serialization format. [confidence low]","path":".claude/skills/session-metrics/scripts/_data.py","line":413,"fingerprint":"python.lang.security.deserialization.avoid-pickle:.claude/skills/session-metrics/scripts/_data.py:413"},{"rule_id":"opengrep/python.lang.security.insecure-hash-algorithm-sha1","severity":"medium","message":"Detected SHA1 hash algorithm which is considered insecure. SHA1 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead. [confidence medium]","path":".claude/skills/session-metrics/scripts/_data.py","line":427,"fingerprint":"python.lang.security.insecure-hash-algorithm-sha1:.claude/skills/session-metrics/scripts/_data.py:427"},{"rule_id":"opengrep/python.lang.security.insecure-hash-algorithm-sha1","severity":"medium","message":"Detected SHA1 hash algorithm which is considered insecure. SHA1 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead. [confidence medium]","path":".claude/skills/session-metrics/scripts/_turn_parser.py","line":517,"fingerprint":"python.lang.security.insecure-hash-algorithm-sha1:.claude/skills/session-metrics/scripts/_turn_parser.py:517"},{"rule_id":"opengrep/python.lang.security.insecure-hash-algorithm-sha1","severity":"medium","message":"Detected SHA1 hash algorithm which is considered insecure. SHA1 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead. [confidence medium]","path":".claude/skills/session-metrics/scripts/session_metrics_compare.py","line":157,"fingerprint":"python.lang.security.insecure-hash-algorithm-sha1:.claude/skills/session-metrics/scripts/session_metrics_compare.py:157"},{"rule_id":"opengrep/python.lang.security.audit.exec-detected","severity":"medium","message":"Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources. [confidence low]","path":".claude/skills/session-metrics/scripts/session_metrics_compare.py","line":1543,"fingerprint":"python.lang.security.audit.exec-detected:.claude/skills/session-metrics/scripts/session_metrics_compare.py:1543"},{"rule_id":"opengrep/python.lang.security.use-defusedcsv","severity":"low","message":"Detected the generation of a CSV file using the built-in `csv` module. If user data is used to generate the data in this file, it is possible that an attacker could inject a formula when the CSV is imported into a spreadsheet application that runs an attacker script, which could steal data from the  [confidence low]","path":".claude/skills/session-metrics/scripts/_dispatch.py","line":1298,"fingerprint":"python.lang.security.use-defusedcsv:.claude/skills/session-metrics/scripts/_dispatch.py:1298"},{"rule_id":"opengrep/python.lang.security.use-defusedcsv","severity":"low","message":"Detected the generation of a CSV file using the built-in `csv` module. If user data is used to generate the data in this file, it is possible that an attacker could inject a formula when the CSV is imported into a spreadsheet application that runs an attacker script, which could steal data from the  [confidence low]","path":".claude/skills/session-metrics/scripts/_md_render.py","line":301,"fingerprint":"python.lang.security.use-defusedcsv:.claude/skills/session-metrics/scripts/_md_render.py:301"},{"rule_id":"opengrep/python.lang.security.use-defusedcsv","severity":"low","message":"Detected the generation of a CSV file using the built-in `csv` module. If user data is used to generate the data in this file, it is possible that an attacker could inject a formula when the CSV is imported into a spreadsheet application that runs an attacker script, which could steal data from the  [confidence low]","path":".claude/skills/session-metrics/scripts/session_metrics_compare.py","line":2095,"fingerprint":"python.lang.security.use-defusedcsv:.claude/skills/session-metrics/scripts/session_metrics_compare.py:2095"},{"rule_id":"opengrep/python.lang.security.use-defusedcsv","severity":"low","message":"Detected the generation of a CSV file using the built-in `csv` module. If user data is used to generate the data in this file, it is possible that an attacker could inject a formula when the CSV is imported into a spreadsheet application that runs an attacker script, which could steal data from the  [confidence low]","path":".claude/skills/session-metrics/scripts/session_metrics_compare.py","line":2373,"fingerprint":"python.lang.security.use-defusedcsv:.claude/skills/session-metrics/scripts/session_metrics_compare.py:2373"}],"evidence":[],"data":{"rulesets":["python","bash"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":574.0,"function_nloc":19328.0,"mean_ccn":9.44,"p90_ccn":21.0,"complex_functions":90.0,"long_functions":39.0,"many_param_functions":17.0,"risky_nloc_share":0.5841},"findings":[],"evidence":[{"kind":"complex-function","description":"main in .claude/skills/ai-image-creator/scripts/generate-image.py: complexity 186, 556 lines","ref":".claude/skills/ai-image-creator/scripts/generate-image.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/scripts/generate-image.py#L2044","weight":1.0},{"kind":"complex-function","description":"render_html in .claude/skills/session-metrics/scripts/_html_sections.py: complexity 162, 983 lines","ref":".claude/skills/session-metrics/scripts/_html_sections.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_html_sections.py#L4977","weight":1.0},{"kind":"complex-function","description":"render_md in .claude/skills/session-metrics/scripts/_md_render.py: complexity 142, 438 lines","ref":".claude/skills/session-metrics/scripts/_md_render.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_md_render.py#L808","weight":1.0},{"kind":"complex-function","description":"main in .claude/skills/session-metrics/scripts/_cli.py: complexity 76, 333 lines","ref":".claude/skills/session-metrics/scripts/_cli.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_cli.py#L776","weight":1.0},{"kind":"complex-function","description":"evaluate_triggers in .claude/skills/audit-session-metrics/scripts/audit-extract.py: complexity 70, 301 lines","ref":".claude/skills/audit-session-metrics/scripts/audit-extract.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/audit-session-metrics/scripts/audit-extract.py#L359","weight":1.0},{"kind":"complex-function","description":"_build_report in .claude/skills/session-metrics/scripts/_report.py: complexity 58, 194 lines","ref":".claude/skills/session-metrics/scripts/_report.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_report.py#L686","weight":0.9666666666666667},{"kind":"complex-function","description":"_compute_usage_insights in .claude/skills/session-metrics/scripts/_analytics.py: complexity 57, 229 lines","ref":".claude/skills/session-metrics/scripts/_analytics.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_analytics.py#L269","weight":0.95},{"kind":"complex-function","description":"_render_compare_analysis_md in .claude/skills/session-metrics/scripts/session_metrics_compare.py: complexity 54, 318 lines","ref":".claude/skills/session-metrics/scripts/session_metrics_compare.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/session_metrics_compare.py#L4763","weight":0.9},{"kind":"complex-function","description":"_build_turn_record in .claude/skills/session-metrics/scripts/_turn_parser.py: complexity 51, 162 lines","ref":".claude/skills/session-metrics/scripts/_turn_parser.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_turn_parser.py#L838","weight":0.85},{"kind":"complex-function","description":"main in .claude/skills/ai-image-creator/scripts/composite-banners.py: complexity 47, 148 lines","ref":".claude/skills/ai-image-creator/scripts/composite-banners.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/scripts/composite-banners.py#L678","weight":0.7833333333333333}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":27012.0,"duplicated_lines":1090.0,"duplicated_share":0.0404,"files":24.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/ai-image-creator/scripts/composite-banners.py:472 and .claude/skills/ai-image-creator/scripts/composite-banners.py:529","ref":".claude/skills/ai-image-creator/scripts/composite-banners.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/scripts/composite-banners.py#L472","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/ai-image-creator/scripts/generate-image.py:117 and .claude/skills/ai-image-creator/scripts/generate-image.py:129","ref":".claude/skills/ai-image-creator/scripts/generate-image.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/ai-image-creator/scripts/generate-image.py#L117","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/audit-session-metrics/scripts/audit-extract.py:302 and .claude/skills/audit-session-metrics/scripts/audit-extract.py:1050","ref":".claude/skills/audit-session-metrics/scripts/audit-extract.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/audit-session-metrics/scripts/audit-extract.py#L302","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/session-metrics/scripts/_charts.py:196 and .claude/skills/session-metrics/scripts/_charts.py:553","ref":".claude/skills/session-metrics/scripts/_charts.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_charts.py#L196","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/session-metrics/scripts/_cli.py:1133 and .claude/skills/session-metrics/scripts/_cli.py:1157","ref":".claude/skills/session-metrics/scripts/_cli.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_cli.py#L1133","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/session-metrics/scripts/_data.py:1584 and .claude/skills/session-metrics/scripts/_data.py:1716","ref":".claude/skills/session-metrics/scripts/_data.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_data.py#L1584","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/session-metrics/scripts/_dispatch.py:90 and .claude/skills/session-metrics/scripts/_dispatch.py:253","ref":".claude/skills/session-metrics/scripts/_dispatch.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_dispatch.py#L90","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/session-metrics/scripts/_dispatch.py:1459 and .claude/skills/session-metrics/scripts/_md_render.py:958","ref":".claude/skills/session-metrics/scripts/_dispatch.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_dispatch.py#L1459","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/session-metrics/scripts/_html_sections.py:217 and .claude/skills/session-metrics/scripts/_html_sections.py:325","ref":".claude/skills/session-metrics/scripts/_html_sections.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_html_sections.py#L217","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: .claude/skills/session-metrics/scripts/_html_sections.py:1015 and .claude/skills/session-metrics/scripts/_md_render.py:1425","ref":".claude/skills/session-metrics/scripts/_html_sections.py","url":"https://github.com/centminmod/my-claude-code-setup/blob/c0e75920b4552e3e3d2c6878fe7b13b049910d6b/.claude/skills/session-metrics/scripts/_html_sections.py#L1015","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":31.0,"weighted_findings":39.0,"scanned_lines":31612.0,"category:correctness":30.0,"category:maintainability":1.0},"findings":[{"rule_id":"opengrep/python.lang.correctness.tempfile.tempfile-without-flush","severity":"high","message":"Using 'tmp.name' without '.flush()' or '.close()' may cause an error because the file may not exist when 'tmp.name' is used. Use '.flush()' or close the file before using 'tmp.name'.","path":".claude/skills/ai-image-creator/scripts/generate-image.py","line":1617,"fingerprint":"python.lang.correctness.tempfile.tempfile-without-flush:.claude/skills/ai-image-creator/scripts/generate-image.py:1617"},{"rule_id":"opengrep/python.lang.correctness.tempfile.tempfile-without-flush","severity":"high","message":"Using 'tmp_keyed.name' without '.flush()' or '.close()' may cause an error because the file may not exist when 'tmp_keyed.name' is used. Use '.flush()' or close the file before using 'tmp_keyed.name'.","path":".claude/skills/ai-image-creator/scripts/generate-image.py","line":1682,"fingerprint":"python.lang.correctness.tempfile.tempfile-without-flush:.claude/skills/ai-image-creator/scripts/generate-image.py:1682"},{"rule_id":"opengrep/python.lang.correctness.tempfile.tempfile-without-flush","severity":"high","message":"Using 'f.name' without '.flush()' or '.close()' may cause an error because the file may not exist when 'f.name' is used. Use '.flush()' or close the file before using 'f.name'.","path":".claude/skills/ai-image-creator/scripts/generate-image.py","line":1970,"fingerprint":"python.lang.correctness.tempfile.tempfile-without-flush:.claude/skills/ai-image-creator/scripts/generate-image.py:1970"},{"rule_id":"opengrep/python.lang.correctness.tempfile.tempfile-without-flush","severity":"high","message":"Using 'tmp_raw.name' without '.flush()' or '.close()' may cause an error because the file may not exist when 'tmp_raw.name' is used. Use '.flush()' or close the file before using 'tmp_raw.name'.","path":".claude/skills/ai-image-creator/scripts/generate-image.py","line":2643,"fingerprint":"python.lang.correctness.tempfile.tempfile-without-flush:.claude/skills/ai-image-creator/scripts/generate-image.py:2643"},{"rule_id":"opengrep/python.lang.maintainability.useless-if-body","severity":"medium","message":"Useless if statement; both blocks have the same body","path":".claude/skills/ai-image-creator/scripts/composite-banners.py","line":408,"fingerprint":"python.lang.maintainability.useless-if-body:.claude/skills/ai-image-creator/scripts/composite-banners.py:408"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_data.py","line":2134,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_data.py:2134"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_data.py","line":2136,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_data.py:2136"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_data.py","line":2172,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_data.py:2172"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_data.py","line":2177,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_data.py:2177"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":342,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:342"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":2143,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:2143"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":2166,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:2166"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":2170,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:2170"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":2180,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:2180"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":2886,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:2886"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":2894,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:2894"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":3004,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:3004"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":3203,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:3203"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":3254,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:3254"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":3406,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:3406"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":3412,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:3412"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_html_sections.py","line":4353,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_html_sections.py:4353"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_md_render.py","line":510,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_md_render.py:510"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_md_render.py","line":1449,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_md_render.py:1449"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_md_render.py","line":1452,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_md_render.py:1452"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_md_render.py","line":1538,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_md_render.py:1538"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_md_render.py","line":1542,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_md_render.py:1542"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_md_render.py","line":1623,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_md_render.py:1623"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_md_render.py","line":1626,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_md_render.py:1626"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/_md_render.py","line":1629,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/_md_render.py:1629"},{"rule_id":"opengrep/python.lang.correctness.common-mistakes.string-concat-in-list","severity":"medium","message":"Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list?","path":".claude/skills/session-metrics/scripts/session_metrics_compare.py","line":2708,"fingerprint":"python.lang.correctness.common-mistakes.string-concat-in-list:.claude/skills/session-metrics/scripts/session_metrics_compare.py:2708"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":1.0,"test_lines":0.0,"source_lines":31612.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.3648,"cochange_commits":159.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":0.0,"check:changelog":1.0,"readme_lines":1111.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0},{"kind":"docs","description":"CHANGELOG.md","ref":"CHANGELOG.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.0,"check:low_escape_density":1.0,"escapes":30.0,"escapes_per_kloc":0.952},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}