@namewta/speculo 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/dist/src/cli.js +40 -6
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/skills-mirror.d.ts +38 -0
- package/dist/src/skills-mirror.js +160 -0
- package/dist/src/skills-mirror.js.map +1 -0
- package/package.json +3 -2
- package/template/canonical/README.md +7 -1
- package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +2040 -0
- package/template/canonical/canonical-specdev-goal-plan.md +1379 -0
- package/template/canonical/canonical-specdev-grill-with-docs.md +848 -285
- package/template/canonical/canonical-specdev-spec.md +1061 -46
- package/template/canonical/canonical-specdev-tickets.md +1529 -175
- package/template/canonical/canonical-specdev-wayfinder.md +677 -107
- package/template/commands/git-repository-audit.md +682 -0
- package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +69 -36
- package/template/workflows/specdev/A-archive-and-consolidate/archive-checklist.md +15 -0
- package/template/workflows/specdev/A-archive-and-consolidate/knowledge-promotion-rules.md +32 -0
- package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +51 -51
- package/template/workflows/specdev/D-diagnose-bugs/diagnosis-template.md +64 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/E-engineering-cognitive-mentor.md +252 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/architecture-guidance.md +90 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/bug-guidance.md +80 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/codebase-guidance.md +107 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/comprehension-and-closure.md +95 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/domain-learning-guidance.md +62 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/evidence-and-options.md +132 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/interaction-protocol.md +116 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/mentor-report-template.md +135 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/mode-routing.md +47 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/persistence-and-resume.md +147 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/requirements-guidance.md +92 -0
- package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +100 -30
- package/template/workflows/specdev/G-grill-with-docs/adr-format.md +22 -77
- package/template/workflows/specdev/G-grill-with-docs/context-format.md +27 -53
- package/template/workflows/specdev/G-grill-with-docs/domain-modeling-rules.md +6 -82
- package/template/workflows/specdev/G-grill-with-docs/grilling-protocol.md +32 -49
- package/template/workflows/specdev/G-grill-with-docs/log-format.md +16 -98
- package/template/workflows/specdev/I-implement/I-implement.md +168 -52
- package/template/workflows/specdev/I-implement/code-review-process.md +10 -76
- package/template/workflows/specdev/I-implement/codebase-design-glossary.md +12 -109
- package/template/workflows/specdev/I-implement/deepening.md +12 -32
- package/template/workflows/specdev/I-implement/design-it-twice.md +6 -41
- package/template/workflows/specdev/I-implement/evidence-template.md +69 -0
- package/template/workflows/specdev/I-implement/execution-preflight.md +20 -0
- package/template/workflows/specdev/I-implement/tdd-examples.md +10 -135
- package/template/workflows/specdev/I-implement/tdd-rules.md +12 -28
- package/template/workflows/specdev/I-init-setup/I-init-setup.md +81 -86
- package/template/workflows/specdev/I-init-setup/change-status-template.json +15 -0
- package/template/workflows/specdev/I-init-setup/config-template.json +26 -0
- package/template/workflows/specdev/I-init-setup/domain-layout-template.md +23 -0
- package/template/workflows/specdev/I-init-setup/status-labels-template.md +55 -0
- package/template/workflows/specdev/I-init-setup/status-template.json +7 -0
- package/template/workflows/specdev/I-init-setup/tracking-template.md +10 -0
- package/template/workflows/specdev/INDEX.md +165 -82
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +108 -44
- package/template/workflows/specdev/P-goal-plan/completion-control.md +79 -0
- package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +105 -0
- package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +115 -0
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +70 -0
- package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +103 -40
- package/template/workflows/specdev/R-review-architecture/architecture-review-report-template.html +58 -0
- package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +68 -0
- package/template/workflows/specdev/R-review-architecture/proposal-to-ticket.md +11 -0
- package/template/workflows/specdev/S-spec/S-spec.md +103 -49
- package/template/workflows/specdev/S-spec/spec-readiness.md +16 -0
- package/template/workflows/specdev/S-spec/spec-template.md +95 -0
- package/template/workflows/specdev/T-tickets/T-tickets.md +146 -133
- package/template/workflows/specdev/T-tickets/decomposition-rules.md +56 -0
- package/template/workflows/specdev/T-tickets/ticket-readiness.md +45 -0
- package/template/workflows/specdev/T-tickets/ticket-template.md +124 -0
- package/template/workflows/specdev/T-tickets/tickets-map-template.md +52 -50
- package/template/workflows/specdev/T-triage/T-triage.md +32 -63
- package/template/workflows/specdev/T-triage/triage-template.md +29 -0
- package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +88 -155
- package/template/workflows/specdev/W-wayfinder/investigation-ticket-template.md +50 -0
- package/template/workflows/specdev/W-wayfinder/wayfinder-map-template.md +46 -0
- package/template/workflows/specdev/_state/status.json +1 -1
- package/template/workflows/specdev/common/README.md +47 -0
- package/template/workflows/specdev/common/rules/artifact-contract.md +57 -0
- package/template/workflows/specdev/common/rules/code-commenting-rule.md +39 -0
- package/template/workflows/specdev/common/rules/deviation-control.md +43 -0
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +57 -0
- package/template/workflows/specdev/common/rules/path-ownership.md +35 -0
- package/template/workflows/specdev/common/rules/path-reference-contract.md +116 -0
- package/template/workflows/specdev/common/rules/planning-principles.md +57 -0
- package/template/workflows/specdev/common/rules/readiness-and-depth.md +51 -0
- package/template/workflows/specdev/common/schemas/change-status.schema.json +170 -0
- package/template/workflows/specdev/common/schemas/config.schema.json +54 -0
- package/template/workflows/specdev/common/schemas/goal-plan.schema.json +21 -0
- package/template/workflows/specdev/common/schemas/spec.schema.json +16 -0
- package/template/workflows/specdev/common/schemas/status.schema.json +149 -0
- package/template/workflows/specdev/common/schemas/ticket.schema.json +130 -0
- package/template/workflows/specdev/common/schemas/tickets-map.schema.json +14 -0
- package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +28 -0
- package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +30 -0
- package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +16 -0
- package/template/workflows/specdev/common/skills/research/SKILL.md +43 -0
- package/template/workflows/specdev/common/tools/README.md +16 -0
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +1155 -0
- package/template/canonical/canonical-teach.md +0 -301
- package/template/workflows/specdev/A-archive-and-consolidate/archive-rules.md +0 -49
- package/template/workflows/specdev/A-archive-and-consolidate/cleanup-rules.md +0 -80
- package/template/workflows/specdev/A-archive-and-consolidate/consolidation-rules.md +0 -122
- package/template/workflows/specdev/A-archive-and-consolidate/discrimination-guide.md +0 -96
- package/template/workflows/specdev/A-archive-and-consolidate/knowledge-graduation.md +0 -51
- package/template/workflows/specdev/D-diagnose-bugs/cleanup-postmortem.md +0 -37
- package/template/workflows/specdev/D-diagnose-bugs/feedback-loop-techniques.md +0 -84
- package/template/workflows/specdev/D-diagnose-bugs/hypothesis-format.md +0 -46
- package/template/workflows/specdev/D-diagnose-bugs/instrumentation-rules.md +0 -51
- package/template/workflows/specdev/I-init-setup/domain-layout.md +0 -55
- package/template/workflows/specdev/I-init-setup/status-labels.md +0 -53
- package/template/workflows/specdev/I-init-setup/tracking-convention.md +0 -52
- package/template/workflows/specdev/P-goal-plan/execution-sections.md +0 -126
- package/template/workflows/specdev/P-goal-plan/governance-sections.md +0 -103
- package/template/workflows/specdev/P-goal-plan/input-validation.md +0 -94
- package/template/workflows/specdev/P-goal-plan/lead-orchestration-protocol.md +0 -158
- package/template/workflows/specdev/P-goal-plan/quick-reference-table.md +0 -60
- package/template/workflows/specdev/P-goal-plan/vision-sections.md +0 -80
- package/template/workflows/specdev/R-review-architecture/exploration-guide.md +0 -103
- package/template/workflows/specdev/R-review-architecture/html-report-template.md +0 -124
- package/template/workflows/specdev/T-triage/artifact-templates.md +0 -122
- package/template/workflows/specdev/T-triage/intake-rules.md +0 -71
- package/template/workflows/specdev/T-triage/routing-rules.md +0 -70
- package/template/workflows/specdev/T-triage/understanding-rules.md +0 -102
- package/template/workflows/specdev/_state/adr/.gitkeep +0 -0
- package/template/workflows/specdev/_state/context/.gitkeep +0 -0
- package/template/workflows/specdev/_state/research/.gitkeep +0 -0
- package/template/workflows/specdev/common/dev-worktree/SKILL.md +0 -48
- package/template/workflows/specdev/common/dev-worktree/references/create.md +0 -63
- package/template/workflows/specdev/common/dev-worktree/references/finalize.md +0 -102
- package/template/workflows/specdev/common/handoff/SKILL.md +0 -42
- package/template/workflows/specdev/common/neat-freak/SKILL.md +0 -210
- package/template/workflows/specdev/common/neat-freak/references/agent-paths.md +0 -72
- package/template/workflows/specdev/common/neat-freak/references/governance.md +0 -88
- package/template/workflows/specdev/common/neat-freak/references/sync-matrix.md +0 -77
- package/template/workflows/specdev/common/neat-freak/references/verification.md +0 -92
- package/template/workflows/specdev/common/neat-freak/scripts/audit-inventory.sh +0 -106
- package/template/workflows/specdev/common/prototype/LOGIC.md +0 -89
- package/template/workflows/specdev/common/prototype/SKILL.md +0 -78
- package/template/workflows/specdev/common/prototype/UI.md +0 -120
- package/template/workflows/specdev/common/research/SKILL.md +0 -54
- package/template/workflows/specdev/common/resolving-merge-conflicts/SKILL.md +0 -14
- package/template/workflows/specdev/common/scripts/hitl-loop.template.sh +0 -41
- package/template/workflows/specdev/common/triage/AGENT-BRIEF.md +0 -204
- package/template/workflows/specdev/common/triage/OUT-OF-SCOPE.md +0 -104
- package/template/workflows/specdev/common/triage/SKILL.md +0 -112
|
@@ -0,0 +1,682 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: git-repository-audit
|
|
3
|
+
type: command
|
|
4
|
+
name: Git Repository Audit
|
|
5
|
+
description: 只读盘点项目根目录下一个或多个 Git 仓库,生成可复核的代码迭代、团队协作与个人贡献报告
|
|
6
|
+
keywords: [git-audit, git-inventory, repository, commit, merge, contribution, 仓库盘点, 代码审计, 团队评估]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Git Repository Audit 命令
|
|
10
|
+
|
|
11
|
+
## 意图与边界
|
|
12
|
+
|
|
13
|
+
执行一次性、只读、可复现的 Git 仓库盘点:
|
|
14
|
+
|
|
15
|
+
- 发现 `project_root` 下的 Git 仓库;
|
|
16
|
+
- 按用户选择的时间、仓库、refs、作者名字和路径范围采集本地 Git 历史;
|
|
17
|
+
- 分析 commit、merge、功能迭代、bug 修复、提交节奏、代码增减、热点模块、团队协作和个人贡献;
|
|
18
|
+
- 将完整选择、Git 快照、原始指标、关键证据、结论和复核命令写入唯一 Markdown 报告。
|
|
19
|
+
|
|
20
|
+
本命令是单次短编排,不维护 workflow 状态机,不调用外部 API,不补抓远端数据。
|
|
21
|
+
|
|
22
|
+
## 持久化契约
|
|
23
|
+
|
|
24
|
+
唯一持久化产物:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
speculo/.speculo/commands/git-repository-audit/<YYYY-MM-DD>-<scope>-<topic>[-NN].md
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
实际路径必须通过 `speculo/.speculo/workspace.json` 的 `roots.state` 解析:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
{roots.state}/commands/git-repository-audit/<YYYY-MM-DD>-<scope>-<topic>[-NN].md
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
规则:
|
|
37
|
+
|
|
38
|
+
- `<scope>`:
|
|
39
|
+
- `workspace`:全部发现仓库;
|
|
40
|
+
- `multi-repo`:多个但非全部仓库;
|
|
41
|
+
- `repo-<slug>`:单个仓库。
|
|
42
|
+
- `<topic>`:用户主题转小写 kebab-case;缺失时为 `git-audit`。
|
|
43
|
+
- 同日同 scope/topic 冲突时,从 `-01` 开始选择最小未占用编号。
|
|
44
|
+
- 禁止覆盖已有报告。
|
|
45
|
+
- 禁止把正式报告写入 `temp/`、系统临时目录或其他位置。
|
|
46
|
+
- 本命令不创建 `state.json`、sidecar、CSV、JSON、数据库或长期缓存。
|
|
47
|
+
- 临时数据只存在于内存或 `tempfile.TemporaryDirectory()`,结束时清理。
|
|
48
|
+
- 报告内所有路径使用 POSIX 项目根相对路径;不持久化绝对路径。
|
|
49
|
+
|
|
50
|
+
## 写操作边界
|
|
51
|
+
|
|
52
|
+
只允许创建 command 专属目录并原子写入、重读本次报告。
|
|
53
|
+
|
|
54
|
+
不得修改仓库、工作区、索引、refs、远端或 Python 项目环境。不得执行:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
git add/commit/checkout/switch/reset/restore/clean/merge/rebase/cherry-pick/revert
|
|
58
|
+
git branch -d/-D
|
|
59
|
+
git tag/stash/fetch/pull/push/gc
|
|
60
|
+
uv sync/add/lock
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
不得修改项目源码、测试、文档、Git 配置、`.git/`、`pyproject.toml`、`uv.lock` 或项目内 `.venv`。
|
|
64
|
+
|
|
65
|
+
## Python 运行契约
|
|
66
|
+
|
|
67
|
+
所有 Python 采集和计算统一使用:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
uv run --no-project python -
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
- 脚本从标准输入传入;
|
|
74
|
+
- 仅使用 Python 标准库;
|
|
75
|
+
- 不直接调用 `python`、`python3`、`pip` 或 `poetry`;
|
|
76
|
+
- 不创建项目内虚拟环境;
|
|
77
|
+
- `uv` 不可用时停止,不切换管理方式。
|
|
78
|
+
|
|
79
|
+
## 输入选择
|
|
80
|
+
|
|
81
|
+
从用户自然语言解析:
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
start_time: "YYYY-MM-DD HH:mm:ss"
|
|
85
|
+
end_time: "YYYY-MM-DD HH:mm:ss"
|
|
86
|
+
timezone: "Asia/Shanghai"
|
|
87
|
+
|
|
88
|
+
repositories:
|
|
89
|
+
mode: all # all | selected
|
|
90
|
+
include: [] # project_root 相对路径
|
|
91
|
+
exclude: []
|
|
92
|
+
|
|
93
|
+
branches:
|
|
94
|
+
mode: default # default | selected | all-local | all-refs
|
|
95
|
+
include: []
|
|
96
|
+
primary_branch: ""
|
|
97
|
+
|
|
98
|
+
authors:
|
|
99
|
+
mode: all # all | selected
|
|
100
|
+
include: [] # 作者名字
|
|
101
|
+
exclude: []
|
|
102
|
+
exclude_bots: true
|
|
103
|
+
|
|
104
|
+
paths:
|
|
105
|
+
include: []
|
|
106
|
+
exclude:
|
|
107
|
+
- ".git/**"
|
|
108
|
+
- "speculo/.speculo/**"
|
|
109
|
+
- ".venv/**"
|
|
110
|
+
- "node_modules/**"
|
|
111
|
+
- "vendor/**"
|
|
112
|
+
- "dist/**"
|
|
113
|
+
- "build/**"
|
|
114
|
+
- "coverage/**"
|
|
115
|
+
- "*.min.js"
|
|
116
|
+
- "*.map"
|
|
117
|
+
- "*.lock"
|
|
118
|
+
|
|
119
|
+
options:
|
|
120
|
+
include_merge_commits: true
|
|
121
|
+
include_commit_body: true
|
|
122
|
+
include_raw_commit_appendix: true
|
|
123
|
+
weekly_breakdown: true
|
|
124
|
+
monthly_breakdown: true
|
|
125
|
+
top_n: 20
|
|
126
|
+
topic: git-audit
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
默认与阻塞规则:
|
|
130
|
+
|
|
131
|
+
1. 时区缺失时使用 `Asia/Shanghai`。
|
|
132
|
+
2. 仓库缺失时选择全部发现仓库。
|
|
133
|
+
3. refs 缺失时选择每个仓库主分支的可达历史。
|
|
134
|
+
4. 作者缺失时选择全部作者名字并排除可识别机器人。
|
|
135
|
+
5. 开始或结束时间缺失时:
|
|
136
|
+
- 只完成仓库发现;
|
|
137
|
+
- 展示各仓库最早、最新提交;
|
|
138
|
+
- 一次性询问缺失时间;
|
|
139
|
+
- 时间确认前不采集完整历史、不创建正式报告。
|
|
140
|
+
6. 纯日期的开始边界为 `00:00:00`,结束边界为 `23:59:59`,两端包含。
|
|
141
|
+
7. 指定仓库、ref 或作者名字未命中时停止并列出未命中项,不静默忽略。
|
|
142
|
+
|
|
143
|
+
## 作者身份
|
|
144
|
+
|
|
145
|
+
作者身份只使用 Git Author Name,即 `%an`。
|
|
146
|
+
|
|
147
|
+
身份键为“Unicode NFC 后去除首尾空白的作者名字”。
|
|
148
|
+
|
|
149
|
+
- 不读取、展示或使用邮箱;
|
|
150
|
+
- 不使用 `.mailmap`;
|
|
151
|
+
- 不调用 `git check-mailmap`;
|
|
152
|
+
- 同名合并为同一作者;
|
|
153
|
+
- 不同名字视为不同作者;
|
|
154
|
+
- 保持大小写,不猜测别名。
|
|
155
|
+
|
|
156
|
+
机器人只按名字识别,如 `[bot]`、`dependabot`、`renovate`、`github-actions`、`automation` 或明显的 `bot` 名称。
|
|
157
|
+
|
|
158
|
+
报告必须注明:同名可能误合并,同一人的不同名字可能被拆分。
|
|
159
|
+
|
|
160
|
+
## 执行
|
|
161
|
+
|
|
162
|
+
### 1. 解析 Speculo 工作区
|
|
163
|
+
|
|
164
|
+
1. 从当前目录向上寻找 `speculo/.speculo/workspace.json`。
|
|
165
|
+
2. 第一个命中的目录为 `project_root`;多个候选或用户目录不一致时停止消歧。
|
|
166
|
+
3. 验证 `workspace.json`:
|
|
167
|
+
- 非空且是有效 JSON;
|
|
168
|
+
- `path_base` 为 `project-root`;
|
|
169
|
+
- roots 是 POSIX 项目相对路径。
|
|
170
|
+
4. 读取 `speculo/config.json`。
|
|
171
|
+
5. 任一初始化文件缺失、为空或不可解析时,停止并提示运行:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
speculo init
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
完成标准:`project_root`、`roots.state` 和最终报告目录只有一个解析结果。
|
|
178
|
+
|
|
179
|
+
### 2. 检查工具
|
|
180
|
+
|
|
181
|
+
执行并记录:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
git --version
|
|
185
|
+
uv --version
|
|
186
|
+
uv run --no-project python -V
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
报告声明:
|
|
190
|
+
|
|
191
|
+
- 仅分析本地历史;
|
|
192
|
+
- 未执行 fetch;
|
|
193
|
+
- Git、uv、Python 版本;
|
|
194
|
+
- 生成时间和时区。
|
|
195
|
+
|
|
196
|
+
完成标准:Git 与 uv 可用,Python 由 uv 成功启动。
|
|
197
|
+
|
|
198
|
+
### 3. 发现仓库
|
|
199
|
+
|
|
200
|
+
用标准库脚本扫描 `project_root`,识别:
|
|
201
|
+
|
|
202
|
+
- 根目录仓库;
|
|
203
|
+
- `.git/` 目录;
|
|
204
|
+
- worktree/submodule 的 `.git` 文件;
|
|
205
|
+
- 嵌套仓库。
|
|
206
|
+
|
|
207
|
+
遍历时默认剪枝:
|
|
208
|
+
|
|
209
|
+
```text
|
|
210
|
+
.git
|
|
211
|
+
speculo/.speculo
|
|
212
|
+
.venv
|
|
213
|
+
node_modules
|
|
214
|
+
vendor
|
|
215
|
+
dist
|
|
216
|
+
build
|
|
217
|
+
coverage
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
对候选执行:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
git -C "<candidate>" rev-parse --is-inside-work-tree
|
|
224
|
+
git -C "<candidate>" rev-parse --show-toplevel
|
|
225
|
+
git -C "<candidate>" rev-parse --is-bare-repository
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
按真实仓库根路径去重。每个仓库记录:
|
|
229
|
+
|
|
230
|
+
- 名称和项目相对路径;
|
|
231
|
+
- bare/worktree/submodule 信号;
|
|
232
|
+
- 当前分支和主分支;
|
|
233
|
+
- 本地分支、远端跟踪分支、标签数量;
|
|
234
|
+
- 最早和最新提交;
|
|
235
|
+
- `git status --short` 摘要;
|
|
236
|
+
- remote 名称与脱敏地址;
|
|
237
|
+
- 分析开始时 HEAD;
|
|
238
|
+
- 选中 refs 的 tip 哈希。
|
|
239
|
+
|
|
240
|
+
主分支按以下顺序识别:
|
|
241
|
+
|
|
242
|
+
1. 用户指定;
|
|
243
|
+
2. `refs/remotes/origin/HEAD`;
|
|
244
|
+
3. `main`;
|
|
245
|
+
4. `master`;
|
|
246
|
+
5. `develop`;
|
|
247
|
+
6. 当前分支;
|
|
248
|
+
7. 最近提交最新的本地分支。
|
|
249
|
+
|
|
250
|
+
无法可靠确定时阻塞该仓库,不猜测。
|
|
251
|
+
|
|
252
|
+
完成标准:仓库列表去重,每个仓库有明确成功/失败状态和项目相对路径。
|
|
253
|
+
|
|
254
|
+
### 4. 确定 revision scope
|
|
255
|
+
|
|
256
|
+
- `default`:主分支可达历史;
|
|
257
|
+
- `selected`:用户指定 refs;
|
|
258
|
+
- `all-local`:全部本地分支;
|
|
259
|
+
- `all-refs`:本地与远端跟踪 refs。
|
|
260
|
+
|
|
261
|
+
多个 refs 含同一 commit 时,按“仓库 + 完整哈希”去重。
|
|
262
|
+
|
|
263
|
+
默认使用 Committer Date 过滤和统计,同时保留 Author Date 用于异常分析。
|
|
264
|
+
|
|
265
|
+
完成标准:每个纳入仓库都有明确 refs、tip 快照、时间范围和时区。
|
|
266
|
+
|
|
267
|
+
### 5. 采集 Git 原始数据
|
|
268
|
+
|
|
269
|
+
Commit 元数据:
|
|
270
|
+
|
|
271
|
+
- 完整/短哈希;
|
|
272
|
+
- 父提交与父数量;
|
|
273
|
+
- Author Name;
|
|
274
|
+
- Author Date;
|
|
275
|
+
- Committer Date;
|
|
276
|
+
- subject、body、refs;
|
|
277
|
+
- merge、revert、机器人标记;
|
|
278
|
+
- 是否位于主分支 first-parent。
|
|
279
|
+
|
|
280
|
+
使用记录分隔符和字段分隔符解析 `git log`,不得解析终端对齐表格。
|
|
281
|
+
|
|
282
|
+
文件变化:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
git -C "<repo>" show --numstat --format= <commit>
|
|
286
|
+
git -C "<repo>" show --name-status --find-renames --format= <commit>
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
记录:
|
|
290
|
+
|
|
291
|
+
- changed files;
|
|
292
|
+
- additions、deletions;
|
|
293
|
+
- binary;
|
|
294
|
+
- A/M/D/R/C/T;
|
|
295
|
+
- rename/copy;
|
|
296
|
+
- 一级/二级目录;
|
|
297
|
+
- 扩展名和语言;
|
|
298
|
+
- 业务代码、测试、文档、配置、CI、迁移、依赖、generated/vendor。
|
|
299
|
+
|
|
300
|
+
Merge commit 只统计合并事件;普通 churn 默认只汇总非 merge commit。需要 merge diff 时使用 first-parent 并单独标注。
|
|
301
|
+
|
|
302
|
+
路径排除只影响 LOC、热点和模块统计,不删除 commit。全部文件被排除的 commit 仍保留,`effective_churn` 为 0。
|
|
303
|
+
|
|
304
|
+
完成标准:每个指标可回溯到 commit;binary、rename 和排除路径口径明确。
|
|
305
|
+
|
|
306
|
+
### 6. 分类与主题聚合
|
|
307
|
+
|
|
308
|
+
一级分类:
|
|
309
|
+
|
|
310
|
+
```text
|
|
311
|
+
feature
|
|
312
|
+
bugfix
|
|
313
|
+
refactor
|
|
314
|
+
test
|
|
315
|
+
docs
|
|
316
|
+
build-ci
|
|
317
|
+
performance
|
|
318
|
+
security
|
|
319
|
+
chore
|
|
320
|
+
revert
|
|
321
|
+
merge
|
|
322
|
+
unknown
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
分类依据:
|
|
326
|
+
|
|
327
|
+
1. Conventional Commits;
|
|
328
|
+
2. subject/body;
|
|
329
|
+
3. issue、PR、需求编号;
|
|
330
|
+
4. 文件与模块;
|
|
331
|
+
5. diff 规模和文件类型;
|
|
332
|
+
6. 测试、文档、配置伴随变化。
|
|
333
|
+
|
|
334
|
+
置信度:
|
|
335
|
+
|
|
336
|
+
- `high`:message、路径、变化一致;
|
|
337
|
+
- `medium`:message 明确,文件证据有限;
|
|
338
|
+
- `low`:主要依赖推断;
|
|
339
|
+
- `unknown`:证据不足。
|
|
340
|
+
|
|
341
|
+
按编号、相似 message、模块、时间、依赖、follow-up fix 和 revert 链聚合功能/技术主题。每个主题记录:
|
|
342
|
+
|
|
343
|
+
- 可观察目标;
|
|
344
|
+
- 起止时间;
|
|
345
|
+
- commit 数和关键哈希;
|
|
346
|
+
- 主要作者名字;
|
|
347
|
+
- 仓库/模块;
|
|
348
|
+
- additions、deletions、churn;
|
|
349
|
+
- 测试伴随;
|
|
350
|
+
- 后续 fix/revert;
|
|
351
|
+
- 置信度。
|
|
352
|
+
|
|
353
|
+
证据不足时使用“疑似”或“待人工确认”,不杜撰业务背景。
|
|
354
|
+
|
|
355
|
+
完成标准:分类总数闭合;主要 feature/bugfix 已归入主题或未聚类清单。
|
|
356
|
+
|
|
357
|
+
### 7. 计算分析指标
|
|
358
|
+
|
|
359
|
+
基础指标:
|
|
360
|
+
|
|
361
|
+
```text
|
|
362
|
+
total_commits
|
|
363
|
+
non_merge_commits
|
|
364
|
+
merge_commits
|
|
365
|
+
first_parent_merges
|
|
366
|
+
revert_commits
|
|
367
|
+
feature/bugfix/refactor/test/docs/build_ci/performance/security/chore/unknown
|
|
368
|
+
active_authors
|
|
369
|
+
active_days
|
|
370
|
+
changed_files
|
|
371
|
+
additions
|
|
372
|
+
deletions
|
|
373
|
+
net_change
|
|
374
|
+
churn
|
|
375
|
+
binary_changes
|
|
376
|
+
added/deleted/renamed_files
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
定义:
|
|
380
|
+
|
|
381
|
+
```text
|
|
382
|
+
net_change = additions - deletions
|
|
383
|
+
churn = additions + deletions
|
|
384
|
+
active_day = 至少一个纳入统计的非 merge commit 的自然日
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
提交强度:
|
|
388
|
+
|
|
389
|
+
```text
|
|
390
|
+
commit_density = non_merge_commits / active_days
|
|
391
|
+
weekly_commit_rate = non_merge_commits / period_weeks
|
|
392
|
+
churn_per_active_day = churn / active_days
|
|
393
|
+
files_per_commit = changed_files / non_merge_commits
|
|
394
|
+
churn_per_commit = churn / non_merge_commits
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
按全局、仓库、周、月、作者和模块计算,并分析:
|
|
398
|
+
|
|
399
|
+
- 月/周趋势;
|
|
400
|
+
- 星期和小时分布;
|
|
401
|
+
- 工作日、周末、非标准时段占比;
|
|
402
|
+
- 连续活跃和最长静默;
|
|
403
|
+
- 高峰日/周;
|
|
404
|
+
- 中位数、四分位数、P95;
|
|
405
|
+
- 周期末集中提交;
|
|
406
|
+
- 超大或跨模块 commit;
|
|
407
|
+
- Author/Committer Date 差异。
|
|
408
|
+
|
|
409
|
+
不得把提交时间解释为工时或勤奋度。
|
|
410
|
+
|
|
411
|
+
功能迭代强度优先展示:
|
|
412
|
+
|
|
413
|
+
- 每周 feature commit/churn;
|
|
414
|
+
- feature 活跃天数和模块数;
|
|
415
|
+
- 测试伴随率;
|
|
416
|
+
- 后续 bugfix/revert 比例。
|
|
417
|
+
|
|
418
|
+
有足够比较样本时可附加:
|
|
419
|
+
|
|
420
|
+
```text
|
|
421
|
+
FII =
|
|
422
|
+
30% × normalized(feature_commits_per_active_week)
|
|
423
|
+
+ 25% × normalized(feature_churn_per_active_week)
|
|
424
|
+
+ 20% × normalized(feature_modules_touched)
|
|
425
|
+
+ 15% × normalized(feature_active_day_ratio)
|
|
426
|
+
+ 10% × normalized(feature_test_companion_rate)
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
必须同时显示原始值、标准化范围和权重;样本不足时不计算。
|
|
430
|
+
|
|
431
|
+
质量与风险信号:
|
|
432
|
+
|
|
433
|
+
- bugfix 占比与高频修复模块;
|
|
434
|
+
- feature 后快速 fix、连续 fix、revert 后重做;
|
|
435
|
+
- 测试伴随缺口;
|
|
436
|
+
- generated/vendor/lockfile 噪声;
|
|
437
|
+
- 高频热点和高 churn;
|
|
438
|
+
- Top1/Top2 作者 commit、churn 集中度;
|
|
439
|
+
- message 模糊和 unknown 比例。
|
|
440
|
+
|
|
441
|
+
这些只能作为 Git 证据信号,不得称为真实缺陷密度、实际 bus factor 或绩效事实。
|
|
442
|
+
|
|
443
|
+
完成标准:所有百分比同时给分子/分母,排名注明口径,表格合计一致。
|
|
444
|
+
|
|
445
|
+
### 8. 团队与个人评估
|
|
446
|
+
|
|
447
|
+
团队结论统一使用:
|
|
448
|
+
|
|
449
|
+
```text
|
|
450
|
+
事实 → 解释 → 风险或价值 → 建议
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
每个优点、不足和风险至少引用一个数据、项目相对路径或 commit 短哈希。建议分:
|
|
454
|
+
|
|
455
|
+
```text
|
|
456
|
+
P0:立即复核
|
|
457
|
+
P1:下一迭代改进
|
|
458
|
+
P2:持续优化
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
每位作者按统一结构输出:
|
|
462
|
+
|
|
463
|
+
- commit、merge、活跃天;
|
|
464
|
+
- additions、deletions、churn、changed files;
|
|
465
|
+
- 仓库和模块覆盖;
|
|
466
|
+
- feature/bugfix/refactor/test/docs/build-ci/performance/security;
|
|
467
|
+
- 测试伴随率;
|
|
468
|
+
- 平均、中位、最大 commit;
|
|
469
|
+
- 主要主题、模块和代表性 commit;
|
|
470
|
+
- Git 可见的贡献重心;
|
|
471
|
+
- 优势信号、风险和改进点;
|
|
472
|
+
- 证据与限制。
|
|
473
|
+
|
|
474
|
+
可使用“功能交付型、缺陷治理型、架构重构型、测试保障型、工程效率型、文档规范型、多模块支持型、核心模块深耕型”描述 Git 可见重心。
|
|
475
|
+
|
|
476
|
+
禁止只按 commit/LOC 给出最好或最差排名,禁止推断职位、态度、能力或绩效。
|
|
477
|
+
|
|
478
|
+
完成标准:每位纳入范围的非机器人作者都有多维画像和限制声明。
|
|
479
|
+
|
|
480
|
+
### 9. 交叉校验
|
|
481
|
+
|
|
482
|
+
写报告前验证:
|
|
483
|
+
|
|
484
|
+
- 全局 commit 与仓库去重合计一致;
|
|
485
|
+
- 非 merge 分类之和等于非 merge commit;
|
|
486
|
+
- merge 未重复进入普通 churn;
|
|
487
|
+
- 作者合计闭合;
|
|
488
|
+
- 多 refs 已去重;
|
|
489
|
+
- 时间边界和时区一致;
|
|
490
|
+
- binary 未作为普通 LOC;
|
|
491
|
+
- 排除路径一致应用;
|
|
492
|
+
- 仓库、周、月、作者和分类表合计一致;
|
|
493
|
+
- 关键哈希在对应仓库存在;
|
|
494
|
+
- 最终报告路径未占用。
|
|
495
|
+
|
|
496
|
+
无法修复的差异使报告 `status: partial`,并记录具体差异,禁止伪造平衡数字。
|
|
497
|
+
|
|
498
|
+
完成标准:校验结果进入报告正文和 frontmatter。
|
|
499
|
+
|
|
500
|
+
### 10. 原子持久化
|
|
501
|
+
|
|
502
|
+
1. 在内存生成完整 Markdown。
|
|
503
|
+
2. 在 command 专属目录创建同文件系统临时文件。
|
|
504
|
+
3. 写入并 flush;可用时 fsync。
|
|
505
|
+
4. 原子 rename 到最终未占用路径。
|
|
506
|
+
5. 重新读取验证:
|
|
507
|
+
- frontmatter 完整;
|
|
508
|
+
- command、scope 与文件名一致;
|
|
509
|
+
- 仓库选择和 Git 快照完整;
|
|
510
|
+
- 必需章节存在;
|
|
511
|
+
- 文件非空;
|
|
512
|
+
- 无绝对路径、邮箱或未脱敏凭证。
|
|
513
|
+
6. 清理临时脚本和数据。
|
|
514
|
+
7. 不执行 `git add` 或 commit。
|
|
515
|
+
|
|
516
|
+
完成标准:只有一个正式报告持久化,已有报告未覆盖,临时数据已清理。
|
|
517
|
+
|
|
518
|
+
## 报告 frontmatter
|
|
519
|
+
|
|
520
|
+
```yaml
|
|
521
|
+
---
|
|
522
|
+
command: git-repository-audit
|
|
523
|
+
schema_version: 1
|
|
524
|
+
status: complete
|
|
525
|
+
scope: workspace
|
|
526
|
+
topic: git-audit
|
|
527
|
+
generated_at: "ISO-8601"
|
|
528
|
+
project_root: "."
|
|
529
|
+
timezone: "Asia/Shanghai"
|
|
530
|
+
time_range:
|
|
531
|
+
start: "ISO-8601"
|
|
532
|
+
end: "ISO-8601"
|
|
533
|
+
date_basis: committer-date
|
|
534
|
+
author_identity: author-name-only
|
|
535
|
+
exclude_bots: true
|
|
536
|
+
repository_mode: all
|
|
537
|
+
repositories:
|
|
538
|
+
- path: "."
|
|
539
|
+
primary_branch: main
|
|
540
|
+
refs: [main]
|
|
541
|
+
head_at_start: "<full-sha>"
|
|
542
|
+
path_includes: []
|
|
543
|
+
path_excludes: []
|
|
544
|
+
include_merge_commits: true
|
|
545
|
+
local_history_only: true
|
|
546
|
+
fetch_performed: false
|
|
547
|
+
tool_versions:
|
|
548
|
+
git: ""
|
|
549
|
+
uv: ""
|
|
550
|
+
python: ""
|
|
551
|
+
validation:
|
|
552
|
+
status: passed
|
|
553
|
+
warnings: []
|
|
554
|
+
---
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
- `status` 为 `complete` 或 `partial`。
|
|
558
|
+
- `scope` 必须与文件名一致。
|
|
559
|
+
- `repositories` 保存完整选择、refs 和 HEAD 快照。
|
|
560
|
+
- 部分仓库失败时使用 `partial` 并列明。
|
|
561
|
+
- 不记录邮箱。
|
|
562
|
+
|
|
563
|
+
## 报告结构
|
|
564
|
+
|
|
565
|
+
```markdown
|
|
566
|
+
# Git 仓库代码迭代与团队贡献盘点报告
|
|
567
|
+
|
|
568
|
+
## 0. 执行摘要
|
|
569
|
+
## 1. 分析范围与统计口径
|
|
570
|
+
## 2. 仓库发现与 Git 快照
|
|
571
|
+
## 3. 全局核心指标
|
|
572
|
+
## 4. 仓库间对比
|
|
573
|
+
## 5. 提交时间与提交强度
|
|
574
|
+
## 6. 合并与分支活动
|
|
575
|
+
## 7. 功能迭代主题
|
|
576
|
+
## 8. Bug 修复与质量活动
|
|
577
|
+
## 9. 代码增减与变更结构
|
|
578
|
+
## 10. 热点模块与知识集中
|
|
579
|
+
## 11. 团队优点、不足与风险
|
|
580
|
+
## 12. 个人贡献画像
|
|
581
|
+
## 13. 优先行动项
|
|
582
|
+
## 14. 数据质量、限制与复核
|
|
583
|
+
## 15. 原始数据附录
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
执行摘要在一页内包含范围、仓库数、commit、merge、feature、bugfix、作者数、additions、deletions、churn、3 至 5 条关键发现、3 至 5 条建议和主要限制。
|
|
587
|
+
|
|
588
|
+
核心表格:
|
|
589
|
+
|
|
590
|
+
```markdown
|
|
591
|
+
| 仓库 | 项目相对路径 | 主分支 | refs | 本地分支 | 远端分支 | 标签 | 最早提交 | 最新提交 | 工作区状态 |
|
|
592
|
+
|---|---|---|---|---:|---:|---:|---|---|---|
|
|
593
|
+
|
|
594
|
+
| 主题 | 时间 | commits | 主要作者 | 仓库/模块 | +行 | -行 | 测试伴随 | 后续修复 | 关键哈希 | 置信度 |
|
|
595
|
+
|---|---|---:|---|---|---:|---:|---|---|---|---|
|
|
596
|
+
|
|
597
|
+
| 作者 | commits | 活跃天 | feature | bugfix | test | refactor | 工程类 | churn | 主要模块 | 主要主题 |
|
|
598
|
+
|---|---:|---:|---:|---:|---:|---:|---:|---:|---|---|
|
|
599
|
+
|
|
600
|
+
| 优先级 | 发现 | 数据证据 | 影响 | 建议行动 | 建议负责人 |
|
|
601
|
+
|---|---|---|---|---|---|
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
无法从 Git 判断负责人时写“团队共同确认”。
|
|
605
|
+
|
|
606
|
+
## 原始数据附录
|
|
607
|
+
|
|
608
|
+
默认在同一报告中保留全部所选 commit,不静默截断。每条至少包含:
|
|
609
|
+
|
|
610
|
+
```markdown
|
|
611
|
+
| 仓库 | 哈希 | Committer Date | 作者名字 | 类型 | 置信度 | Subject | 文件数 | +行 | -行 | 主要模块 | 主题 |
|
|
612
|
+
|---|---|---|---|---|---|---|---:|---:|---:|---|---|
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
同时包含:
|
|
616
|
+
|
|
617
|
+
- 仓库、周、月和作者原始汇总;
|
|
618
|
+
- merge 事件;
|
|
619
|
+
- 功能主题与 commit 对照;
|
|
620
|
+
- 待人工确认 commit;
|
|
621
|
+
- 排除文件和 binary 影响摘要。
|
|
622
|
+
|
|
623
|
+
commit 很多时按仓库和月份拆表,可用 `<details>` 折叠,但仍保留每个 commit,不生成第二个持久化数据文件。
|
|
624
|
+
|
|
625
|
+
## 数据限制
|
|
626
|
+
|
|
627
|
+
报告必须明确:
|
|
628
|
+
|
|
629
|
+
- 仅本地可见历史,未 fetch;
|
|
630
|
+
- 删除分支名称通常不可恢复;
|
|
631
|
+
- merge commit 数不等于历史分支数;
|
|
632
|
+
- squash/rebase 可能隐藏合并和多人贡献;
|
|
633
|
+
- 作者只按名字归一化;
|
|
634
|
+
- Git 无法完整反映设计、Review、沟通、带教、pair programming 和未提交工作;
|
|
635
|
+
- LOC 会受格式化、生成文件、lockfile 和文件移动影响;
|
|
636
|
+
- 测试文件未变化不等于没有测试;
|
|
637
|
+
- bugfix 占比不等于真实缺陷密度;
|
|
638
|
+
- 报告不能直接替代绩效评估。
|
|
639
|
+
|
|
640
|
+
## 复核命令
|
|
641
|
+
|
|
642
|
+
报告末尾按实际范围填充只读命令:
|
|
643
|
+
|
|
644
|
+
```bash
|
|
645
|
+
git -C "<repo>" log "<ref>" --since="<start>" --until="<end>" --format="%H" | sort -u | wc -l
|
|
646
|
+
git -C "<repo>" log "<ref>" --merges --first-parent --since="<start>" --until="<end>" --format="%H"
|
|
647
|
+
git -C "<repo>" log "<ref>" --no-merges --since="<start>" --until="<end>" --numstat
|
|
648
|
+
git -C "<repo>" shortlog -sn "<ref>" --since="<start>" --until="<end>"
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
作者复核不使用 `-e`,不输出邮箱。
|
|
652
|
+
|
|
653
|
+
## 返回
|
|
654
|
+
|
|
655
|
+
完成后只返回:
|
|
656
|
+
|
|
657
|
+
1. 报告项目相对路径;
|
|
658
|
+
2. 分析范围摘要;
|
|
659
|
+
3. 3 至 5 条最重要发现;
|
|
660
|
+
4. `complete` 或 `partial`;
|
|
661
|
+
5. 待人工复核事项。
|
|
662
|
+
|
|
663
|
+
完整报告不再次复制到对话;报告文件是唯一事实源。
|
|
664
|
+
|
|
665
|
+
## 完成标准
|
|
666
|
+
|
|
667
|
+
- Speculo 工作区和 state 根唯一解析;
|
|
668
|
+
- Python 仅通过 `uv run --no-project python -` 执行;
|
|
669
|
+
- 范围内仓库发现并去重;
|
|
670
|
+
- 时间、时区、仓库、refs、作者、路径范围明确;
|
|
671
|
+
- 作者只按名字区分,未读取或输出邮箱;
|
|
672
|
+
- commit 按仓库和完整哈希去重;
|
|
673
|
+
- merge 与普通 churn 分开;
|
|
674
|
+
- 功能、bugfix、时间、强度、代码量、热点、团队和个人分析完整;
|
|
675
|
+
- 所有评价有数据、路径或 commit 证据;
|
|
676
|
+
- 报告 frontmatter 保存完整选择和 Git 快照;
|
|
677
|
+
- 报告位于 command 专属规范路径且 scope 可见;
|
|
678
|
+
- 已有报告未覆盖;
|
|
679
|
+
- 未创建 state、sidecar 或第二份正式数据;
|
|
680
|
+
- 临时数据已清理;
|
|
681
|
+
- 未修改 Git 仓库、项目文件或 Python 项目环境;
|
|
682
|
+
- 最终报告已重读并通过结构和敏感信息检查。
|