@llman-sdd/core 0.3.1 → 0.5.1
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/package.json +2 -1
- package/src/archive/freeze.ts +86 -18
- package/src/archive/frozenCard.ts +105 -0
- package/src/archive/sevenzip.ts +15 -13
- package/src/change/closeOutHarness.ts +29 -0
- package/src/change/collect.ts +140 -0
- package/src/change/frontmatter.ts +48 -6
- package/src/change/id.ts +2 -6
- package/src/change/lifecycle.ts +285 -86
- package/src/change/nextId.ts +63 -2
- package/src/change/resolve.ts +2 -2
- package/src/change/tasks.ts +59 -0
- package/src/config/changeId.ts +14 -12
- package/src/config/load.ts +14 -0
- package/src/config/schema.ts +4 -41
- package/src/config/surface.ts +6 -36
- package/src/context/indexStore.ts +7 -3
- package/src/context/retrieve.ts +8 -10
- package/src/context/tree.ts +28 -24
- package/src/git/spawnGit.ts +90 -2
- package/src/index.ts +81 -54
- package/src/init/defaultConfig.ts +1 -5
- package/src/init/init.ts +19 -4
- package/src/ports.ts +1 -7
- package/src/project/migrateNotes.ts +104 -0
- package/src/render/machine.ts +30 -0
- package/src/report/collect.ts +11 -127
- package/src/report/graph/analysis.ts +152 -0
- package/src/report/graph/deps.ts +30 -0
- package/src/report/graph/graphData.ts +53 -0
- package/src/report/graph/nodes.ts +130 -0
- package/src/report/graph/render.ts +83 -0
- package/src/report/graph/types.ts +47 -0
- package/src/report/graph.ts +9 -381
- package/src/report/show.ts +20 -22
- package/src/report/specHelpers.ts +45 -22
- package/src/report/specs.ts +23 -25
- package/src/review/review.ts +45 -30
- package/src/spec/authoring.ts +147 -71
- package/src/spec/ir.ts +43 -15
- package/src/spec/keywords.ts +147 -0
- package/src/spec/migrateNative.ts +201 -0
- package/src/spec/parser.ts +95 -83
- package/src/spec/reqRegistry.ts +31 -15
- package/src/templates/embedded.ts +10 -16
- package/src/templates/engine.ts +10 -5
- package/src/templates/locale.ts +1 -1
- package/src/templates/skills.ts +4 -5
- package/src/validation/changeCheck.ts +128 -105
- package/src/validation/harness.ts +161 -0
- package/src/validation/staleness.ts +9 -5
- package/src/validation/validate.ts +60 -88
- package/templates/en/skills/llman-sdd-apply-cycle.md +20 -28
- package/templates/en/skills/llman-sdd-apply.md +58 -76
- package/templates/en/skills/llman-sdd-arch-review.md +12 -19
- package/templates/en/skills/llman-sdd-archive.md +27 -42
- package/templates/en/skills/llman-sdd-continue.md +17 -24
- package/templates/en/skills/llman-sdd-draft.md +17 -28
- package/templates/en/skills/llman-sdd-explore.md +29 -43
- package/templates/en/skills/llman-sdd-ff.md +12 -17
- package/templates/en/skills/llman-sdd-graph.md +14 -32
- package/templates/en/skills/llman-sdd-propose.md +48 -63
- package/templates/en/skills/llman-sdd-quick.md +12 -27
- package/templates/en/skills/llman-sdd-research.md +13 -24
- package/templates/en/skills/llman-sdd-specs-compact.md +14 -39
- package/templates/en/skills/llman-sdd-validate.md +11 -15
- package/templates/en/skills/llman-sdd-verify.md +23 -44
- package/templates/en/skills/llman-sdd-wayfinder.md +18 -22
- package/templates/en/units/skills/cli-footer.md +2 -0
- package/templates/en/units/skills/git-native-flow-brief.md +7 -6
- package/templates/en/units/skills/git-native-flow.md +21 -11
- package/templates/en/units/skills/human-readable-summary.md +2 -3
- package/templates/en/units/skills/stage-guard.md +7 -7
- package/templates/en/units/skills/structured-protocol.md +5 -8
- package/templates/en/units/skills/validation-hints.md +10 -14
- package/templates/en/units/spec/feature-contract.md +27 -16
- package/templates/en/units/workflow/archive-freeze-guidance.md +6 -3
- package/templates/zh-Hans/skills/llman-sdd-apply-cycle.md +23 -31
- package/templates/zh-Hans/skills/llman-sdd-apply.md +63 -81
- package/templates/zh-Hans/skills/llman-sdd-arch-review.md +21 -28
- package/templates/zh-Hans/skills/llman-sdd-archive.md +29 -44
- package/templates/zh-Hans/skills/llman-sdd-continue.md +17 -24
- package/templates/zh-Hans/skills/llman-sdd-draft.md +18 -29
- package/templates/zh-Hans/skills/llman-sdd-explore.md +34 -48
- package/templates/zh-Hans/skills/llman-sdd-ff.md +13 -18
- package/templates/zh-Hans/skills/llman-sdd-graph.md +16 -34
- package/templates/zh-Hans/skills/llman-sdd-propose.md +51 -65
- package/templates/zh-Hans/skills/llman-sdd-quick.md +15 -30
- package/templates/zh-Hans/skills/llman-sdd-research.md +17 -28
- package/templates/zh-Hans/skills/llman-sdd-specs-compact.md +15 -40
- package/templates/zh-Hans/skills/llman-sdd-validate.md +11 -15
- package/templates/zh-Hans/skills/llman-sdd-verify.md +26 -47
- package/templates/zh-Hans/skills/llman-sdd-wayfinder.md +25 -29
- package/templates/zh-Hans/units/skills/cli-footer.md +2 -0
- package/templates/zh-Hans/units/skills/git-native-flow-brief.md +7 -6
- package/templates/zh-Hans/units/skills/git-native-flow.md +22 -12
- package/templates/zh-Hans/units/skills/human-readable-summary.md +4 -5
- package/templates/zh-Hans/units/skills/stage-guard.md +9 -9
- package/templates/zh-Hans/units/skills/structured-protocol.md +5 -8
- package/templates/zh-Hans/units/skills/validation-hints.md +10 -14
- package/templates/zh-Hans/units/spec/feature-contract.md +25 -16
- package/templates/zh-Hans/units/workflow/archive-freeze-guidance.md +6 -2
- package/templates/en/skills/llman-sdd-onboard.md +0 -34
- package/templates/en/skills/llman-sdd-show.md +0 -24
- package/templates/en/units/migrate-prompt.md +0 -28
- package/templates/zh-Hans/skills/llman-sdd-onboard.md +0 -34
- package/templates/zh-Hans/skills/llman-sdd-show.md +0 -24
- package/templates/zh-Hans/units/migrate-prompt.md +0 -28
|
@@ -1,56 +1,41 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "llman-sdd-quick"
|
|
3
|
-
description: "
|
|
3
|
+
description: "快速路径:不改行为合约的小改动(重构/错字/性能)。要改 MUST/SHALL 就停,转 propose。"
|
|
4
4
|
metadata:
|
|
5
5
|
version: "{{ llman_version }}"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# LLMAN SDD Quick Path
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
不改行为合约的小改动用此路径。
|
|
11
11
|
|
|
12
12
|
## Pipeline 位置
|
|
13
13
|
|
|
14
14
|
```mermaid
|
|
15
15
|
flowchart LR
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
quick["★ llman-sdd-quick ★<br/>快速路径(你现在在这里)"]
|
|
19
|
-
quick --> commit["git commit<br/>完成"]
|
|
20
|
-
|
|
21
|
-
explore --> propose["完整路径:<br/>propose(含 Branch binding 与 Specs landing)→ apply → verify → archive"]
|
|
22
|
-
propose --> apply["..."]
|
|
23
|
-
apply --> verify["..."]
|
|
24
|
-
verify --> archive["..."]
|
|
16
|
+
quick["★ llman-sdd-quick"] --> commit["git commit"]
|
|
17
|
+
explore["llman-sdd-explore"] --> propose["完整路径:propose → apply → verify → archive"]
|
|
25
18
|
|
|
26
19
|
style quick fill:#d4edda,stroke:#28a745,stroke-width:3px
|
|
27
20
|
```
|
|
28
21
|
|
|
29
|
-
> 📍
|
|
30
|
-
> 🗺️ 完整路径含 Git-native Branch binding + Specs landing(不是把 Specs landing 当成独立 skill)
|
|
22
|
+
> 📍 快速路径:直接改代码 commit。发现要改合约 → STOP,转 `llman-sdd-propose`。
|
|
31
23
|
|
|
32
|
-
##
|
|
24
|
+
## 使用条件(全部满足)
|
|
33
25
|
- 不改变任何 spec 中 MUST/SHALL 定义的外部可观测行为
|
|
34
|
-
-
|
|
35
|
-
- 不涉及迁移/兼容性
|
|
36
|
-
- 不是 SDD 元规范变更
|
|
26
|
+
- 不跨 capability;不涉及迁移/兼容性;不是 SDD 元规范变更
|
|
37
27
|
|
|
38
28
|
## 步骤
|
|
39
|
-
1. 用 `llman-sdd context --task "..." --paths "..."` 确认无相关 spec
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
4. git commit(message 写明 why)。
|
|
45
|
-
5. 无需 change 目录,无需 archive。
|
|
29
|
+
1. 用 `llman-sdd context --task "..." --paths "..."` 确认无相关 spec 变更。
|
|
30
|
+
- context 返回 `quality: "unavailable"` → 先 `llman-sdd index check`:stale/缺失则 `llman-sdd index rebuild`(默认 pageindex,免模型)后重试;fresh 仍不可用(`LLMAN_SDD_INDEX_CHAT_MODEL` 未设)→ 改用 `llman-sdd list --specs` + 直读 `.feature`——勿循环 rebuild。
|
|
31
|
+
2. 直接改代码。
|
|
32
|
+
3. 若要动 `llmanspec/specs/**`,STOP——除非已在绑定的非默认 change 分支上(迷你 change:`change start`/`attach` → 编辑 → commit)。禁止在默认分支 commit specs,即使 typo 或仅收紧 scope 也不行。优先把 specs 维护路由到 `llman-sdd-propose`。
|
|
33
|
+
4. git commit(message 写明 why)。无需 change 目录,无需 archive。
|
|
46
34
|
|
|
47
35
|
## 边界处理
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
> 💡 快速路径完成 → git commit 即可。若需要走完整路径 → `llman-sdd-propose` → `llman-sdd-apply` → `llman-sdd-verify` → `llman-sdd-archive`
|
|
36
|
+
- 修改中发现要改行为合约 → STOP,转 `llman-sdd-propose`。
|
|
37
|
+
- 涉及多文件且 scope 不明 → 先用 `llman-sdd context` 确认。
|
|
52
38
|
|
|
53
|
-
|
|
54
|
-
> 文中「规约」= 本项目 `llmanspec/specs/` 下的 `.feature` 文件;用 `llman-sdd list --specs` / `llman-sdd show <capability>` 查全文。
|
|
39
|
+
{{ unit("skills/cli-footer") }}
|
|
55
40
|
|
|
56
41
|
{{ unit("skills/ethics-governance") }}
|
|
@@ -1,46 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "llman-sdd-research"
|
|
3
|
-
description: "
|
|
3
|
+
description: "委托后台 agent 查一手资料(官方文档/API/源码),产出带引用的调研文档。"
|
|
4
4
|
metadata:
|
|
5
5
|
version: "{{ llman_version }}"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# LLMAN SDD Research
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
启动**后台 agent** 做调研,你继续手头工作。辅助工具,任意阶段可用(常见于 explore/wayfinder);产出回写 change 的 proposal「Further Notes」段。
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## 后台 agent 的职责
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
## 职责
|
|
19
|
-
|
|
20
|
-
后台 agent 的工作:
|
|
21
|
-
|
|
22
|
-
1. 针对**一手资料**调研问题——官方文档、源码、spec、第一方 API——而非对它们的二手转述。把每个论断追溯到拥有它的源头。
|
|
23
|
-
2. 把发现写入单个 Markdown 文件,为每个论断标注来源引用。
|
|
24
|
-
3. 存放位置(仓库另有约定时优先遵循):**默认** `llmanspec/changes/<current-change>/research/<topic>.md`(Change 文档,**不是** live specs)。仅当主题跨多个 change、归档后仍常引用时才写 `docs/research/`;**禁止**把单 change 选型/易腐深挖塞进 `docs/research/`。
|
|
25
|
-
4. **禁止**本 skill 直接编辑 `llmanspec/specs/**`。若调研表明必须改 MUST/SHALL → 建议 `llman-sdd-propose`(Branch binding → Specs landing)。
|
|
14
|
+
1. 针对**一手资料**调研——官方文档、源码、spec、第一方 API,而非二手转述;每个论断追溯到拥有它的源头。
|
|
15
|
+
2. 发现写入单个 Markdown 文件,每条论断标注来源。
|
|
16
|
+
3. 存放(仓库另有约定时优先):**默认** `llmanspec/changes/<current-change>/research/<topic>.md`(change 文档,**不是** specs)。仅当主题跨多个 change、归档后仍常引用时才写 `docs/research/`;**禁止**把单 change 选型/易腐深挖塞进 `docs/research/`。
|
|
17
|
+
4. **禁止**本 skill 直接编辑 `llmanspec/specs/**`。调研表明必须改 MUST/SHALL → 建议 `llman-sdd-propose`(绑定分支 → 落地 specs)。
|
|
26
18
|
|
|
27
19
|
## 步骤
|
|
28
20
|
|
|
29
|
-
1.
|
|
30
|
-
2. 用 Agent 工具 `subagent_type=general-purpose` + `run_in_background: true`
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
4. 读取产出,把关键结论摘要回写到当前 change 的 `proposal.md`「Further Notes」段(附文件指针)。
|
|
37
|
-
5. 若调研揭示需要决策,建议进入 `llman-sdd-explore` 的逐问深挖分支。
|
|
21
|
+
1. 明确调研问题(与用户确认;模糊时收窄到能被证实/证伪)。
|
|
22
|
+
2. 用 Agent 工具 `subagent_type=general-purpose` + `run_in_background: true` 启动,prompt 含:
|
|
23
|
+
- 问题陈述;只引一手资料、每条论断标来源 URL/路径的要求;
|
|
24
|
+
- 输出文件路径(默认 `llmanspec/changes/<id>/research/<topic>.md`);
|
|
25
|
+
- 字数上限(建议:聚焦事实,散文叙述 < 1500 词)。
|
|
26
|
+
3. 后台运行期间继续主流程;完成后读产出,把关键结论摘要回写当前 change 的 `proposal.md`「Further Notes」段(附文件指针)。
|
|
27
|
+
4. 若调研揭示需要决策,建议进入 `llman-sdd-explore` 的逐问深挖分支。
|
|
38
28
|
|
|
39
|
-
## 与 wayfinder
|
|
29
|
+
## 与 wayfinder 协作
|
|
40
30
|
|
|
41
|
-
`llman-sdd-wayfinder` 的查资料 ticket 委托本 skill 后台解决;解决后回写 ticket proposal
|
|
31
|
+
`llman-sdd-wayfinder` 的查资料 ticket 委托本 skill 后台解决;解决后回写 ticket proposal,并在地图的 Decisions-so-far 记一行要点。
|
|
42
32
|
|
|
43
|
-
|
|
44
|
-
> 文中「规约」= 本项目 `llmanspec/specs/` 下的 `.feature` 文件;用 `llman-sdd list --specs` / `llman-sdd show <capability>` 查全文。
|
|
33
|
+
{{ unit("skills/cli-footer") }}
|
|
45
34
|
|
|
46
35
|
{{ unit("skills/structured-protocol") }}
|
|
@@ -1,65 +1,40 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "llman-sdd-specs-compact"
|
|
3
|
-
description: "
|
|
3
|
+
description: "压缩去重 specs:合并冗余 requirement/scenario,规范行为不变。仅用户明确要求时手动运行。"
|
|
4
4
|
metadata:
|
|
5
5
|
version: "{{ llman_version }}"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# LLMAN SDD Specs Compact
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
## Pipeline 位置
|
|
13
|
-
|
|
14
|
-
```mermaid
|
|
15
|
-
flowchart LR
|
|
16
|
-
archive["llman-sdd-archive<br/>归档完成后"] --> compact
|
|
17
|
-
compact["📎 llman-sdd-specs-compact<br/>压缩重构 specs(维护工具)"]
|
|
18
|
-
|
|
19
|
-
style compact fill:#e8f4e8,stroke:#28a745,stroke-width:2px
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
> 📎 维护工具,通常在归档积累较多后执行。日常开发 → `llman-sdd-propose`(含 Branch binding + Specs landing)/ `llman-sdd-apply`(须 `readyToImplement`)。
|
|
10
|
+
在不改变规范行为的前提下压缩 specs。维护工具,不属于日常 pipeline,通常在归档积累较多后执行。
|
|
23
11
|
|
|
24
12
|
## Context
|
|
25
|
-
- specs
|
|
26
|
-
-
|
|
27
|
-
- 当 archive 历史过大时,会干扰压缩评审与定位。
|
|
13
|
+
- specs 随变更积累膨胀,出现重复 requirement/scenario;压缩必须可验证、可回归。
|
|
14
|
+
- archive 历史过大时会干扰压缩评审与定位。
|
|
28
15
|
|
|
29
16
|
## Goal
|
|
30
|
-
-
|
|
31
|
-
- 形成更紧凑且可维护的规范结构。
|
|
17
|
+
- 合并冗余 requirement/scenario,形成更紧凑可维护的规范结构。
|
|
32
18
|
|
|
33
19
|
## Constraints
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
- 每个保留 requirement 至少保留一个有效 scenario。
|
|
37
|
-
- **编辑 live `llmanspec/specs/**` 须走 change**:先 Branch binding(`change start` / `attach`),在绑定分支上做 Specs landing 式提交;**禁止**在默认分支直接压缩改写 live specs。
|
|
20
|
+
- 未经明确替代不得删除规范性行为;尽量保持 requirement 标题稳定;每个保留 requirement 至少一个有效 scenario。
|
|
21
|
+
- **改 `llmanspec/specs/**` 须走 change**:先绑定分支(`change start` / `attach`),在绑定分支上编辑提交;**禁止**在默认分支直接压缩改写。
|
|
38
22
|
|
|
39
23
|
## Workflow
|
|
40
|
-
1.
|
|
41
|
-
2.
|
|
42
|
-
|
|
43
|
-
- 执行:`llman-sdd archive freeze --before <YYYY-MM-DD> --keep-recent <N>`
|
|
44
|
-
3. 识别跨 capability 的重叠项。
|
|
24
|
+
1. 盘点 specs(`llman-sdd list --specs`)。
|
|
25
|
+
2. 归档历史较大时先 freeze:预览 `llman-sdd archive freeze --dry-run`;执行 `llman-sdd archive freeze --before <YYYY-MM-DD> --keep-recent <N>`。
|
|
26
|
+
3. 识别跨 capability 重叠(跨 specs 重复 req id:`llman-sdd project dedupe-req-ids --dry-run` 报告重映射计划)。
|
|
45
27
|
4. 产出压缩计划(canonical requirements + keep/merge/remove 决策 + 迁移说明)。
|
|
46
|
-
5. 执行并验证(`llman-sdd validate --specs --strict
|
|
28
|
+
5. 执行并验证(`llman-sdd validate --specs --strict`)。
|
|
47
29
|
|
|
48
30
|
## Decision Policy
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
- archive 目录噪声较大时,优先建议先 freeze 再压缩。
|
|
52
|
-
- 若压缩会改变外部行为,必须先暂停并询问用户。
|
|
31
|
+
- 语义等价优先合并;仅引用关系清晰时提取共享文本;archive 噪声大时先 freeze 再压缩。
|
|
32
|
+
- 若压缩会改变外部行为,先暂停并询问用户。
|
|
53
33
|
|
|
54
34
|
## Output Contract
|
|
55
|
-
-
|
|
56
|
-
- 包含:keep/merge/remove 决策及理由。
|
|
57
|
-
- 包含验证命令与预期结果。
|
|
58
|
-
|
|
59
|
-
> 💡 维护完成后,新需求走正常 pipeline:`llman-sdd-propose`(含 Branch binding + Specs landing)→ `llman-sdd-apply`(须 `readyToImplement`)→ `llman-sdd-verify` → `llman-sdd-archive`。
|
|
35
|
+
- 按 capability 分组的压缩方案:keep/merge/remove 决策及理由 + 验证命令与预期结果。
|
|
60
36
|
|
|
61
|
-
|
|
62
|
-
> 文中「规约」= 本项目 `llmanspec/specs/` 下的 `.feature` 文件;用 `llman-sdd list --specs` / `llman-sdd show <capability>` 查全文。
|
|
37
|
+
{{ unit("skills/cli-footer") }}
|
|
63
38
|
|
|
64
39
|
{{ unit("skills/validation-hints") }}
|
|
65
40
|
|
|
@@ -1,31 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "llman-sdd-validate"
|
|
3
|
-
description: "校验
|
|
3
|
+
description: "校验 change 与 specs,给出修复提示。"
|
|
4
4
|
metadata:
|
|
5
5
|
version: "{{ llman_version }}"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# LLMAN SDD 校验
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
校验 change/spec 格式与过期状态。
|
|
11
11
|
|
|
12
12
|
## 步骤
|
|
13
|
-
1.
|
|
14
|
-
2.
|
|
15
|
-
3. 在 CI 或自动化场景中使用 `--strict` 与 `--no-interactive`。
|
|
16
|
-
4. 若校验失败,汇总错误并给出最小、可执行的修复建议。
|
|
13
|
+
1. 单个:`llman-sdd validate <id>`;批量:`llman-sdd validate --all`(或 `--changes` / `--specs`);CI/自动化用 `--strict`。
|
|
14
|
+
2. 校验失败时汇总错误,给出最小可执行的修复建议。
|
|
17
15
|
{% if bdd_enabled %}
|
|
18
|
-
|
|
19
|
-
- 在**绑定分支**上验证
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
- `
|
|
23
|
-
-
|
|
24
|
-
- Change JSON 状态字段:`stage`(draft/designed/planned/full)/ `specsLanded` / `needsSpecsChange` / `readyToImplement`(`show --json`)。
|
|
16
|
+
3. **BDD 校验**:
|
|
17
|
+
- 在**绑定分支**上验证 `.feature` Gherkin 与 `@req` / 双写门禁;`.feature` 是 harness 权威——可执行 GWT 只在其中维护。
|
|
18
|
+
- 生命周期门禁:`change start` / `attach`(绑定分支)、`finalize`(收口;自动提交 `archive(sdd): <id>`,`--no-commit` 跳过)/ `diff`(只读)。
|
|
19
|
+
- `llman-sdd validate --specs` 做结构与合约门禁;配置 `bdd.run_command` 时缺省执行该 harness(`--no-check` 跳过,`--check` 为兼容别名),无占位符的命令每次调用至多执行一次。
|
|
20
|
+
- `list --specs --json` 查看 `morphology`(ruleCount / ruleEnforcedCount / rulePendingCount / acceptanceCount / featureScenarioCount)。
|
|
21
|
+
- change JSON 状态字段:`stage`(draft/designed/planned/full)/ `specsLanded` / `needsSpecsChange` / `readyToImplement`(`show --output json`)。
|
|
25
22
|
{% endif %}
|
|
26
23
|
|
|
27
|
-
|
|
28
|
-
> 文中「规约」= 本项目 `llmanspec/specs/` 下的 `.feature` 文件;用 `llman-sdd list --specs` / `llman-sdd show <capability>` 查全文。
|
|
24
|
+
{{ unit("skills/cli-footer") }}
|
|
29
25
|
|
|
30
26
|
{{ unit("skills/validation-hints") }}
|
|
31
27
|
|
|
@@ -1,56 +1,44 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "llman-sdd-verify"
|
|
3
|
-
description: "
|
|
3
|
+
description: "验证已实施 change 与 specs/design/tasks 是否一致,产出 CRITICAL/WARNING/SUGGESTION 分级报告。apply 后运行,全绿可归档。"
|
|
4
4
|
metadata:
|
|
5
5
|
version: "{{ llman_version }}"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# LLMAN SDD Verify
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
验证实现是否与该 change 的工件一致。
|
|
11
11
|
|
|
12
12
|
## Pipeline 位置
|
|
13
13
|
|
|
14
|
-
### Skill 导航(非生命周期;仅指示当前 skill)
|
|
15
|
-
|
|
16
14
|
```mermaid
|
|
17
15
|
flowchart LR
|
|
18
|
-
apply["llman-sdd-apply
|
|
19
|
-
verify["
|
|
20
|
-
verify --> archive["llman-sdd-archive<br/>归档"]
|
|
16
|
+
apply["llman-sdd-apply"] --> verify["★ llman-sdd-verify"]
|
|
17
|
+
verify --> archive["llman-sdd-archive"]
|
|
21
18
|
|
|
22
19
|
style verify fill:#fff3cd,stroke:#ffc107,stroke-width:3px
|
|
23
20
|
```
|
|
24
21
|
|
|
25
|
-
> 📍
|
|
26
|
-
> 🗺️ Skill 导航 ≠ Git-native 生命周期;完整生命周期见底部 brief 单元。
|
|
22
|
+
> 📍 你在验证阶段 → 通过则 `llman-sdd-archive`,失败回 `llman-sdd-apply` 修复。对象应已落地 specs 且 `readyToImplement=true`(全门绿——完成信号)。
|
|
27
23
|
|
|
28
24
|
## 硬约束
|
|
29
25
|
|
|
30
|
-
-
|
|
31
|
-
- **CRITICAL
|
|
32
|
-
-
|
|
26
|
+
- **必须先 apply 全绿**:未完成实现的 change 跳过验证。
|
|
27
|
+
- **CRITICAL 必须修复**:归档前清零。
|
|
28
|
+
- **亲自复跑门禁**:MUST 亲自重跑 `llman-sdd validate <id> --strict`(真实 harness)与项目门禁,MUST NOT 采信实现者报告的门禁结论;复跑结果与报告不符 → CRITICAL。
|
|
29
|
+
- **`--no-check` 不是证据**:以 `--no-check` 取得的门禁证据 → CRITICAL。收口会执行已配置的 `bdd.run_command`,收口前不必再跑一遍;`--no-check` 打出的跳过说明不是通过。
|
|
30
|
+
- **不要问「要不要继续」**:跑完整验证流程,输出完整报告。
|
|
33
31
|
|
|
34
32
|
{{ unit("skills/stage-guard") }}
|
|
35
33
|
|
|
36
34
|
## 步骤
|
|
37
|
-
1. 确定 change id(不明确时让用户从 `llman-sdd list --json`
|
|
38
|
-
2.
|
|
39
|
-
- `
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
- `
|
|
44
|
-
- `tasks.md`(理解实现范围)
|
|
45
|
-
- `llmanspec/changes/<id>/specs/` 若残留旧文档可忽略;SSOT 是 live specs
|
|
46
|
-
4. **双轴审查(标准轴 + 合约轴分离,互不掩盖)**——对比 diff(`git diff <merge-base>...HEAD`,merge-base 用现算 `git merge-base <本地默认分支> HEAD`;存储的 base_sha 仅作审计、MUST NOT 参与范围计算)分两轴:
|
|
47
|
-
- **合约轴(Spec)**:实现是否满足 `@human` 规则的 MUST/SHALL 与 `@executable` 的 GWT。
|
|
48
|
-
- 缺失/部分实现的行为、错误实现、以及 diff 中未被 spec 要求的超范围改动。
|
|
49
|
-
- 给出最小修复建议,或建议更新 artifacts。
|
|
50
|
-
- **标准轴(Standards)**:代码是否符合 `AGENTS.md` 的编码规范 + 常见代码坏味(code smell)清单。
|
|
51
|
-
- **权威优先级**:`AGENTS.md` 文档规范 > 坏味清单(文档说了算);工具已强制的项跳过。
|
|
52
|
-
- 坏味标记为**判断性提示**(「可能是 Feature Envy」),不是硬性违规。
|
|
53
|
-
- 坏味清单(每项「是什么 → 怎么修」):
|
|
35
|
+
1. 确定 change id(不明确时让用户从 `llman-sdd list --json` 选)。
|
|
36
|
+
2. 快速校验门禁:`llman-sdd validate <id> --strict`。
|
|
37
|
+
- 诊断结构问题(Gherkin 解析 / `@req` 链接 / 双写 / req_id 唯一性)先跑结构校验(配置 `bdd.run_command` 时 validate 缺省执行该 harness,`--no-check` 跳过;harness 失败以 ERROR 落在对应 spec 条目)。失败项在缺省 TOON 输出的 `items[].issues[]` 逐条列出(`--output human` 输出 `FAIL <item_type>/<id>` 行,位于 `Totals` 上方)。
|
|
38
|
+
3. 阅读:分支上的 `llmanspec/specs/**`(`<capability>.feature`,唯一事实来源)、`proposal.md` 与 `design.md`(如有)、`tasks.md`;`changes/<id>/specs/` 若有残留旧文档可忽略。
|
|
39
|
+
4. **双轴审查(两轴分离,互不掩盖)**——对比 diff(`git diff <merge-base>...HEAD`,merge-base 现算 `git merge-base <本地默认分支> HEAD`;存储的 base_sha 仅审计、MUST NOT 参与范围计算):
|
|
40
|
+
- **合约轴**:实现是否满足 `规则:` 块的需求表述(描述为自由文本,以其语义为准)与嵌套 `场景:` 的 GWT 步骤?缺失/部分实现、错误实现、spec 未要求的超范围改动 → 给最小修复建议或建议更新工件。前后对比类证据(计数、基线)核对测量位置:MUST 在 change 分支上测量(相对现算 merge-base);默认分支测得的值通常恒为基线,不构成证据。
|
|
41
|
+
- **标准轴**:代码是否符合 `AGENTS.md` 规范 + 常见坏味清单。权威优先级:`AGENTS.md` > 坏味清单;工具已强制的跳过。坏味是**判断性提示**(「可能是 Feature Envy」),不是硬性违规:
|
|
54
42
|
|
|
55
43
|
| 坏味 | 怎么修 |
|
|
56
44
|
|------|--------|
|
|
@@ -64,32 +52,23 @@ flowchart LR
|
|
|
64
52
|
| Divergent Change(一个文件因多个无关原因被改) | 拆分 |
|
|
65
53
|
| Speculative Generality(为未发生的需求加抽象) | 删掉 |
|
|
66
54
|
| Message Chains(长链 a.b().c()) | 隐入一个方法 |
|
|
67
|
-
| Middle Man(只转发) |
|
|
55
|
+
| Middle Man(只转发) | 删掉直连 |
|
|
68
56
|
| Refused Bequest(子类拒绝大部分继承) | 改组合 |
|
|
69
57
|
- 两轴可并行(sub-agent)审查;报告 MUST 分离呈现,MUST NOT 合并或交叉重排(一轴通过不能掩盖另一轴失败)。
|
|
70
|
-
5. **BDD
|
|
71
|
-
- 确认 change
|
|
72
|
-
- `llman-sdd validate --specs`:Gherkin + `@req
|
|
73
|
-
- 可选只读审查:`llman-sdd change diff <id>`(或 `--export-patch <path
|
|
74
|
-
-
|
|
75
|
-
- verify 通过后下一步:`llman-sdd-archive`(勿在此 inline finalize)。
|
|
58
|
+
5. **BDD 验证**——仅当 `config.yaml` 含 `bdd:` 段:
|
|
59
|
+
- 确认 change 已绑定分支且当前在该分支上。
|
|
60
|
+
- `llman-sdd validate --specs`:Gherkin + `@req`/双写门禁;配置 `bdd.run_command` 时缺省执行该 harness(`--no-check` 跳过),失败映射为对应 spec 条目的 ERROR。
|
|
61
|
+
- 可选只读审查:`llman-sdd change diff <id>`(或 `--export-patch <path>`)——仅审查/导出,绝不当作 apply 步骤。
|
|
62
|
+
- verify 通过后下一步 `llman-sdd-archive`(勿在此 inline finalize)。
|
|
76
63
|
{% if bdd_verify_prompt %}
|
|
77
64
|
- 额外要求: {{ bdd_verify_prompt }}
|
|
78
65
|
{% endif %}
|
|
79
|
-
6.
|
|
80
|
-
|
|
81
|
-
- **WARNING**(建议修复)
|
|
82
|
-
- **SUGGESTION**(可选优化)
|
|
83
|
-
7. **人审检查点**:报告无 CRITICAL 后、建议归档前,运行 `llman-sdd review`:
|
|
84
|
-
- 退出码为零 → 建议 `llman-sdd-archive` 进行 finalize/archive。
|
|
85
|
-
- 非零退出 = CRITICAL 发现:用 `llman-sdd-apply` 修复后重跑 review;MUST NOT 带着 CRITICAL 进入 finalize/archive。
|
|
86
|
-
|
|
87
|
-
> 💡 验证通过 → 下一步 `llman-sdd-archive`(归档);有 CRITICAL → 回到 `llman-sdd-apply`(修复)
|
|
66
|
+
6. 输出简短报告:**CRITICAL**(归档前必须修复)/ **WARNING**(建议修复)/ **SUGGESTION**(可选优化)。
|
|
67
|
+
7. **人审关卡**:报告无 CRITICAL 后、建议归档前跑 `llman-sdd review`:退出码零 → 建议 `llman-sdd-archive`;非零 = CRITICAL → 用 `llman-sdd-apply` 修复后重跑 review;MUST NOT 带 CRITICAL 进入 finalize/archive。
|
|
88
68
|
|
|
89
69
|
{{ unit("skills/git-native-flow-brief") }}
|
|
90
70
|
{{ unit("skills/human-readable-summary") }}
|
|
91
|
-
|
|
92
|
-
> 文中「规约」= 本项目 `llmanspec/specs/` 下的 `.feature` 文件;用 `llman-sdd list --specs` / `llman-sdd show <capability>` 查全文。
|
|
71
|
+
{{ unit("skills/cli-footer") }}
|
|
93
72
|
|
|
94
73
|
{{ unit("skills/validation-hints") }}
|
|
95
74
|
|
|
@@ -1,40 +1,37 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "llman-sdd-wayfinder"
|
|
3
|
-
description: "
|
|
3
|
+
description: "把超出单会话的大型模糊工作拆成决策地图,逐个解决直到路径清晰。仅手动触发。"
|
|
4
4
|
metadata:
|
|
5
5
|
version: "{{ llman_version }}"
|
|
6
|
+
disable-model-invocation: true
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# LLMAN SDD Wayfinder
|
|
9
10
|
|
|
10
|
-
一个又大又乱的工作来了——大到单个 agent
|
|
11
|
-
|
|
12
|
-
它把路径画成 llman SDD 的 **change 依赖图**(`llman-sdd graph`):每个子工作(ticket)解决一个**决策**而非交付一块代码,逐个解决直到路径清晰。
|
|
11
|
+
一个又大又乱的工作来了——大到单个 agent 会话装不下,从现在到**目的地**的路还看不见。这个 skill 不急着动手,先把路找出来:把路径画成 change 依赖图(`llman-sdd graph`),每个子工作(ticket)解决一个**决策**而非交付代码,逐个解决直到路径清晰。
|
|
13
12
|
|
|
14
13
|
## Pipeline 位置
|
|
15
14
|
|
|
16
|
-
辅助工具,用于主 pipeline
|
|
17
|
-
|
|
18
|
-
> 📍 这是独立可选 skill;地图清晰后 → `llman-sdd-propose`(把决策收拢为可建计划)。
|
|
15
|
+
辅助工具,用于主 pipeline 之前的**大型工作预规划**。地图清晰后 → `llman-sdd-propose` 收拢为可实施计划。
|
|
19
16
|
|
|
20
17
|
## 核心原则
|
|
21
18
|
|
|
22
|
-
- **只规划,不动手**:每个 ticket
|
|
23
|
-
-
|
|
24
|
-
- **单会话单 ticket
|
|
19
|
+
- **只规划,不动手**:每个 ticket 解决一个决策;地图完成于「路径清晰、无决策遗留」。想直接开干的冲动,通常是到了地图边界、该交接的信号。
|
|
20
|
+
- **用名字指代**:给人看的叙述里用 ticket 标题指代,MUST NOT 用裸 id/编号。
|
|
21
|
+
- **单会话单 ticket**(查资料 ticket 例外)。
|
|
25
22
|
|
|
26
23
|
## 地图结构
|
|
27
24
|
|
|
28
|
-
地图本身是一个 change(总纲 proposal
|
|
25
|
+
地图本身是一个 change(总纲 proposal),子决策是 `depends_on` 的子 change。用 `llman-sdd graph <map-id> --scope active` 可视化当前**可着手项**。
|
|
29
26
|
|
|
30
27
|
地图的 `proposal.md` 结构:
|
|
31
28
|
|
|
32
29
|
```markdown
|
|
33
30
|
## Destination(目的地)
|
|
34
|
-
|
|
31
|
+
<走到终点是什么样——spec/决策/变更。一两行。>
|
|
35
32
|
|
|
36
33
|
## Notes(备注)
|
|
37
|
-
<领域;每会话应查的 skill
|
|
34
|
+
<领域;每会话应查的 skill;常设偏好>
|
|
38
35
|
|
|
39
36
|
## Decisions so far(已定的决策)
|
|
40
37
|
<!-- 索引:每个已关闭 ticket 一行,结论要点 + 链接 -->
|
|
@@ -48,40 +45,39 @@ metadata:
|
|
|
48
45
|
|
|
49
46
|
## Ticket 类型
|
|
50
47
|
|
|
51
|
-
每个 ticket 是一个子 change,带 `wayfinder:<type>` 标注(写在 proposal
|
|
48
|
+
每个 ticket 是一个子 change,带 `wayfinder:<type>` 标注(写在 proposal 标题或 frontmatter):
|
|
52
49
|
|
|
53
|
-
- **Research(查资料,agent 自跑)**:读文档/API
|
|
50
|
+
- **Research(查资料,agent 自跑)**:读文档/API/本地资源,查出决策在等的事实。委托 `llman-sdd-research` 后台解决。
|
|
54
51
|
- **Prototype(做原型,需人参与)**:用廉价粗糙的可运行物(throwaway 小程序或 UI 变体)把讨论具象化。
|
|
55
52
|
- **逐问深挖(需人参与)**:用 `llman-sdd-explore` 的逐问深挖分支一问一答走清。**默认类型**。
|
|
56
|
-
- **Task
|
|
53
|
+
- **Task(杂活,人或 agent)**:决策前必须先做的手动工作(注册服务、迁数据以看清形状)。
|
|
57
54
|
|
|
58
55
|
## 尚未清晰区
|
|
59
56
|
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
57
|
+
地图**故意**不完整。判断一个点该不该现在立 ticket,只看一条:**现在能不能把问题说清楚**(不是能不能回答)。
|
|
58
|
+
- 能说清 → 立 ticket(即使暂时被挡)。
|
|
59
|
+
- 说不清 → 写进**尚未清晰区**(一团模糊日后可能变成多个 ticket,也可能一个都不变)。
|
|
63
60
|
|
|
64
61
|
## 步骤
|
|
65
62
|
|
|
66
63
|
### 画地图
|
|
67
|
-
1.
|
|
68
|
-
2.
|
|
64
|
+
1. **命名目的地**:用逐问深挖钉死这趟地图要通往哪里。
|
|
65
|
+
2. **广度优先扫可着手项**:再次逐问深挖,扇开而非深挖一条,浮出开放决策与现在能迈的第一步。若**没有模糊点浮出**——路径已清晰、一个会话能装下——不需要地图,停下问用户想怎么做。
|
|
69
66
|
3. **创建地图**(总纲 change):`llman-sdd change new <map-id>`,填 Destination/Notes,Decisions-so-far 留空,模糊点写进尚未清晰区。
|
|
70
|
-
4. **创建现在能说清的 ticket
|
|
67
|
+
4. **创建现在能说清的 ticket** 为子 change,再用 `llman-sdd graph` 接依赖边(先有 id 才能互引)。
|
|
71
68
|
5. 为每个查资料 ticket 启动 `llman-sdd-research` 后台 subagent。
|
|
72
69
|
6. 停——画图是单个会话的活,不要顺手解决任何决策。
|
|
73
70
|
|
|
74
71
|
### 推进地图
|
|
75
72
|
1. 加载地图(低分辨率视图,不用读每个 ticket 全文)。
|
|
76
|
-
2. 选 ticket
|
|
77
|
-
3. 解决它——按需深入(读相关 ticket 全文,调用 Notes 指定的 skill
|
|
78
|
-
4.
|
|
79
|
-
5. 新增 ticket
|
|
73
|
+
2. 选 ticket(用户指定或取可着手项第一个),先绑定分支(`change start` 或已有分支 `change attach`)占住它。规划文档可短暂在默认分支;ticket 要改 specs 时须在绑定分支落地。
|
|
74
|
+
3. 解决它——按需深入(读相关 ticket 全文,调用 Notes 指定的 skill);没把握时用逐问深挖。**不要**在未绑定时改 `llmanspec/specs/**`。
|
|
75
|
+
4. 记录解决:答案写入该 ticket 的 proposal 并关闭它,在地图 Decisions-so-far 追加一行要点 + 指针。
|
|
76
|
+
5. 新增 ticket(先建再接线);答案让模糊点变清晰的,升级为 ticket 并移出尚未清晰区;答案揭示某 ticket 越过目的地的,归入范围外而非在路径上解决。
|
|
80
77
|
|
|
81
78
|
## 输出
|
|
82
|
-
地图 change + 子决策 change 的依赖图(`llman-sdd graph
|
|
79
|
+
地图 change + 子决策 change 的依赖图(`llman-sdd graph`)。路径清晰后建议 `llman-sdd-propose` 收拢为可实施计划。
|
|
83
80
|
|
|
84
|
-
|
|
85
|
-
> 文中「规约」= 本项目 `llmanspec/specs/` 下的 `.feature` 文件;用 `llman-sdd list --specs` / `llman-sdd show <capability>` 查全文。
|
|
81
|
+
{{ unit("skills/cli-footer") }}
|
|
86
82
|
|
|
87
83
|
{{ unit("skills/structured-protocol") }}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
## Git
|
|
1
|
+
## Git 分支生命周期(摘要)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Skill 导航** ≠ **分支生命周期**。全图见根 `AGENTS.md` 或 `llman-sdd-propose` 内嵌图。
|
|
4
4
|
|
|
5
5
|
硬规则:
|
|
6
|
-
1.
|
|
7
|
-
2.
|
|
8
|
-
3. 收口用 `change finalize`(自动提交 `archive(sdd): <id>`;`--no-commit`
|
|
9
|
-
4. **禁止**在默认分支 commit
|
|
6
|
+
1. **先**绑定分支(`change start` / `attach`)→ full;**再**落地 specs(绑定分支上编辑并 commit `llmanspec/specs/**`)。
|
|
7
|
+
2. 无合约编辑 → `needs_specs_change: false`。`stage=full` 且 specs-landed 门通过即可进 apply;`readyToImplement=true`(全门绿)是 verify/finalize 前的完成信号。
|
|
8
|
+
3. 收口用 `change finalize`(自动提交 `archive(sdd): <id>`;`--no-commit` 跳过)。
|
|
9
|
+
4. **禁止**在默认分支 commit specs;已 attach 勿重复 `start`。
|
|
10
|
+
5. worktree(可选):`change start --worktree` 在独立 worktree 建分支、不动当前检出(`--base <branch>` 记录分叉源);finalize 目标被其他 worktree 持有时自动在该 worktree 内执行(输出标注位置)。
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
## Git
|
|
1
|
+
## Git 分支生命周期(权威全图)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
两层别混:**分支生命周期**(绑定分支 → 落地 specs → `readyToImplement`)与 **skill 导航**(explore→propose→apply→verify→archive)。落地 specs **不是**独立 skill。
|
|
4
4
|
|
|
5
5
|
```mermaid
|
|
6
6
|
flowchart TB
|
|
7
|
-
subgraph main_ok["
|
|
7
|
+
subgraph main_ok["可短暂在默认分支"]
|
|
8
8
|
A["change new → draft<br/>仅 proposal.md"]
|
|
9
9
|
B1["补 design.md → designed"]
|
|
10
10
|
B2["补 tasks.md → planned"]
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
subgraph
|
|
13
|
+
subgraph bind["绑定分支"]
|
|
14
14
|
C{"工作区干净<br/>且在默认分支?"}
|
|
15
15
|
D["change start<br/>建 sdd/<id> + 写 branch/base_branch/base_sha"]
|
|
16
16
|
E["或手动 checkout -b<br/>再 change attach"]
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
subgraph specs_only["仅在本 change 分支"]
|
|
20
|
-
F["编辑
|
|
21
|
-
G["commit →
|
|
20
|
+
F["编辑 llmanspec/specs/**(.feature)"]
|
|
21
|
+
G["commit → 落地 specs<br/>现算 merge-base...HEAD 含 specs 路径"]
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
subgraph implement["
|
|
24
|
+
subgraph implement["实施与收口"]
|
|
25
25
|
H["apply:按 tasks 改代码<br/>可继续改 specs"]
|
|
26
26
|
I["verify"]
|
|
27
|
-
J["finalize
|
|
27
|
+
J["finalize:合并(默认 squash)→ 改名 → 自动提交 archive(sdd): <id><br/>specs 首次进入目标分支"]
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
A --> B1 --> B2 --> C
|
|
@@ -34,7 +34,17 @@ flowchart TB
|
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
硬规则:
|
|
37
|
-
1. **先** `change start` / `attach
|
|
38
|
-
2.
|
|
39
|
-
3.
|
|
40
|
-
4. **禁止**为过干净树门禁把
|
|
37
|
+
1. **先** `change start` / `attach` 绑定分支(进入 full);**再**在绑定的非默认分支编辑 `llmanspec/specs/**` 并 commit(落地 specs)。
|
|
38
|
+
2. 无合约编辑的 change 设 frontmatter `needs_specs_change: false`。`stage=full` 且 specs-landed 门通过(specsLanded ∨ needs_specs_change=false)即可进 apply;`readyToImplement=true`(gateChecks 全过,含 tasks-done)是 verify/finalize 前的完成信号。diff 范围一律现算 merge-base;存储的 `base_sha` 仅审计。
|
|
39
|
+
3. 收口一律 `llman-sdd change finalize <id>`:自动提交 `archive(sdd): <id>`(实现 diff + 改名一笔);`--no-commit` 跳过自动提交。change 分支上提交自由(分段或 finalize 一次收尾均可)。
|
|
40
|
+
4. **禁止**为过干净树门禁把 specs commit 到默认分支;已 attach 勿重复 `start`。
|
|
41
|
+
|
|
42
|
+
Worktree 决策表:
|
|
43
|
+
|
|
44
|
+
| 工作形态 | 命令 | 判据 |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| 单检出 | `llman-sdd change start <id>` | 在默认分支且树干净;直接切到新分支 |
|
|
47
|
+
| 保留当前检出 / 并行 change | `llman-sdd change start <id> --worktree` | 分支建于独立 worktree(`sdd.worktree_root` / `sdd.worktree_naming` 可调,缺省仓库根兄弟目录),当前检出不动,输出含 worktree 路径;配 `--base <branch>` 记录非默认分叉源 |
|
|
48
|
+
| 已在 feature 分支(含手工 wt/git-worktree) | `llman-sdd change attach <id>` | 分支已存在;`--base <branch>` 显式记录分叉源 |
|
|
49
|
+
|
|
50
|
+
finalize 目标定位:目标分支被其他 worktree 持有时,`llman-sdd change finalize <id>` / `llman-sdd change archive <id>` 自动在该 worktree 内完成合并、改名与提交(输出含 `executed in target worktree <path>`);持有 worktree 脏时中止报错并列出处置选项(零写入)。
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
# 人读摘要(强制)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
先给出一段简短的人读摘要:
|
|
3
|
+
每份报告、交接或门禁输出,MUST 在任何机器细节之前先给人读摘要:
|
|
5
4
|
|
|
6
5
|
- **结论** — 一行(如「门禁全绿」/「发现 2 个 CRITICAL」)。
|
|
7
|
-
- **风险** —
|
|
8
|
-
- **待决策** —
|
|
6
|
+
- **风险** — 最多三条,按影响降序。
|
|
7
|
+
- **待决策** — 明确提问,或「无」。
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
十行以内;细节放折叠线以下。
|