{"id":"5d361525-7533-45eb-8b0e-fa0e767a5e6e","version_id":"f8059a73-36a8-47df-a7df-a9175ac16a3f","reporter":"小敏(audit owner)","bug_summary":"--self-check 模式范围扩张,实际扫描整个 ~/.claude/skills/ 而非仅 audit skill 自身,scope 处理不一致","root_cause":"scripts/scan.py:413 设置了 args.self_check_root = SKILL_DIR(~/.claude/skills/audit/),意图是把 --self-check 的扫描范围限定在 audit 自身目录。但各 module 的 check 实现继续使用模块顶部定义的常量路径:principles_core 用 SKILLS_ROOT = CLAUDE_ROOT / skills;principles_depth 类似地用全局常量遍历;scope_expansion 用 PROJECTS 绝对路径。这些常量都没有读取 cfg.self_check_root 做范围限定,导致 --self-check 跑出 134 条 finding(9 blocker + 125 warn),其中绝大部分来自其他 skill(SkillOpt-main / sdlc-code / sdlc-design / sdlc-operate / sdlc-requirement / consolidate-claude / audit-triage 等),而非 audit 自身。这违背了 --self-check 的设计意图(让 audit owner 改完自身代码后,快速得到 仅关于自己的 报告),也违背了一致性原则:scope 处理应该被 cfg 统一驱动。","fix_plan":"1) 在 lib/config.py 的 AuditConfig 新增 scan_root: Path | None = None 字段,self-check 模式下 scan.py 把它设为 SKILL_DIR;2) 重构 lib/modules/*.py 各 module 的常量(SKILLS_ROOT 等)改为函数级读取 cfg.scan_root,self-check 时退到 SKILL_DIR,默认仍为 CLAUDE_ROOT / skills;3) 或更轻量:在 lib/core.py 加 ScanScope helper,所有 module 通过它取路径,ScanScope 内部读 cfg.scan_root;4) 单测覆盖:新增 test_self_check_scopes_only_audit_own_dir,用 mock cfg 验证 --self-check 跑出来 finding 的 target path 都以 SKILL_DIR 为前缀;5) 跑 --self-check 验证现状 9 blocker + 125 warn 应回归到接近 0 blocker / 仅 audit 自身 warn。","severity":"low","status":"open","decision":null,"reused_in_projects":["audit"],"decided_at":null,"created_at":"2026-06-26T12:06:08.358262","requirement_id":"25aae05a-fa2f-4824-afad-9fce03c44f2f"}