change-reportlisted
Install: claude install-skill 2021291696/worklog-alllog
# Change Report
按本次 git 改动生成面向上级的正式变更报告:具体改了什么、改在哪些文件、为什么改。结构与 worklog 平行:md/word 分目录 + 变更记录流水 + 按改动范围起点命名。全程只读(git status/log/diff),无代码、无敏感信息。
## 存储布局
按项目分目录:`<项目>` = `报告文档/代码/_projects.json` 里仓库路径的映射名;未映射的仓库用 git 根目录名。仓库里 `scripts/project_name.py` 是同一条规则的可执行副本:`python scripts/project_name.py <git-root> [_projects.json]`。
```
报告文档/代码/<项目>/
├── 变更记录.md # 变更流水账,只追加从不覆盖
├── md形式/<范围起点>.md # md 报告源,可重复生成
└── word形式/<范围起点>.docx # Word 报告(docx skill 渲染)
```
`<范围起点>` = 本次改动范围最旧 commit 的日期(`git show -s --format=%cs <base>`);仅未提交改动时用今天。目标文件已存在 → 先确认覆盖。
## V3:可组合、可恢复的执行模型(优先于下文任何冲突规则)
change-report 可在 commit 前、push 前、push 后或补记后调用;不要求固定顺序,也绝不为了凑齐流程���编造状态。
**报告状态如实标记:**
- `draft`:存在未提交改动
- `local-commit`:已有本地 commit,尚未确认已推��
- `pushed`:本地远端跟踪信息或状态索引证明已推送
- `unknown`:无法可靠确认远端状态
重复调用同一范围时,默认展示或更新 md 草稿,再重新渲染。md 源保留在 `md形式/`。成功生成后可将 `reported` 与输出路径写入本地状态索引,但不得将索引或报告内容自动提交、推送。
## 前置检查
1. 确认是 git 仓库:`git rev-parse --is-inside-work-tree`,非 git 仓库 → 报错退出。
2. 确认有改动:git status --short 有内容,或主干分支存在 commit → 否则提示"没有可报告的改动"退出。
## 工作流
### ① 圈定改动范围(先问用户)
展示候选范围(未提交改动 / 未推送 commit / 已推送未合并 commit),请用户选择或显式指定:
- `--record <ID>` / `--range <base>..<head>` / `--commit <SHA>`
- 不得以"最近 N 个 commit"作为无提示默认范围
- 无可用主干分支时回退最近 N 个 commit(默认 5)
比较基准按 origin/main → main → master 取第一个存在的主干:
```bash
git status --short
git log origin/main..HEAD --oneline 2>/dev/null || git log main..HEAD --oneline 2>/dev/null || git log master..HEAD --oneline 2>/dev/null || git log HEAD --onel