@openprd/cli 0.1.9 → 0.1.11
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/.openprd/benchmarks/index.md +16 -0
- package/.openprd/benchmarks/sources.yaml +53 -1
- package/.openprd/config.yaml +10 -0
- package/.openprd/design/README.md +47 -0
- package/.openprd/design/README_EN.md +25 -0
- package/.openprd/design/active/asset-spec.md +15 -0
- package/.openprd/design/active/direction-plan.md +7 -0
- package/.openprd/design/active/facts-sheet.md +13 -0
- package/.openprd/design/active/image-preflight.md +9 -0
- package/.openprd/design/active/selected-direction.md +11 -0
- package/.openprd/design/anti-slop.md +16 -0
- package/.openprd/design/assets/dark-mesh.svg +14 -0
- package/.openprd/design/assets/paper-grid.svg +14 -0
- package/.openprd/design/assets/surface-presets.md +21 -0
- package/.openprd/design/assets/workbench-grid.svg +16 -0
- package/.openprd/design/checklists/ui-quality-gate.md +22 -0
- package/.openprd/design/components/component-catalog.md +42 -0
- package/.openprd/design/layouts/layout-catalog.json +45 -0
- package/.openprd/design/lenses/frontend-lenses.md +31 -0
- package/.openprd/design/recipes/content-experience.md +26 -0
- package/.openprd/design/recipes/operational-tool.md +25 -0
- package/.openprd/design/recipes/product-launch.md +26 -0
- package/.openprd/design/templates/README.md +36 -0
- package/.openprd/design/templates/README_EN.md +31 -0
- package/.openprd/design/templates/content-home.html +415 -0
- package/.openprd/design/templates/ops-dashboard.html +340 -0
- package/.openprd/design/templates/product-launch.html +360 -0
- package/.openprd/design/themes/theme-catalog.json +77 -0
- package/.openprd/engagements/active/prd.md +111 -100
- package/.openprd/schema/prd.schema.yaml +25 -0
- package/.openprd/templates/base/intake.md +17 -0
- package/.openprd/templates/base/prd.md +31 -6
- package/AGENTS.md +10 -7
- package/README.md +26 -28
- package/README_EN.md +3 -3
- package/package.json +41 -2
- package/scripts/openprd-codex-isolated-worker.mjs +799 -0
- package/skills/openprd-benchmark-router/SKILL.md +5 -0
- package/skills/openprd-frontend-design/SKILL.md +161 -0
- package/skills/openprd-frontend-design/references/design-asset-contract.md +34 -0
- package/skills/openprd-frontend-design/references/direction-engine.md +46 -0
- package/skills/openprd-harness/SKILL.md +37 -20
- package/skills/openprd-learning-review/SKILL.md +2 -1
- package/skills/openprd-learning-review/references/style-packs/xianxia-cultivation.prompt.md +1 -1
- package/skills/openprd-quality/SKILL.md +5 -3
- package/skills/openprd-requirement-intake/SKILL.md +27 -5
- package/skills/openprd-requirement-intake/references/prd-template-lenses.md +6 -3
- package/skills/openprd-requirement-intake/references/routing-rubric.md +9 -5
- package/skills/openprd-requirement-intake/references/startup-validation-lens.md +108 -0
- package/skills/openprd-router/SKILL.md +13 -5
- package/skills/openprd-shared/SKILL.md +38 -25
- package/src/agent-integration.js +120 -69
- package/src/brainstorm-artifacts.js +1805 -0
- package/src/brainstorm-presentation.js +233 -0
- package/src/brainstorm.js +766 -0
- package/src/cli/args.js +51 -3
- package/src/cli/doctor-print.js +34 -8
- package/src/cli/print.js +6 -0
- package/src/cli/quality-print.js +79 -3
- package/src/cli/run-print.js +43 -1
- package/src/cli/shared-print.js +33 -2
- package/src/cli/workflow-print.js +21 -0
- package/src/codex-hook-runner-template.mjs +838 -58
- package/src/design-starter-support.js +462 -0
- package/src/design-starter.js +1207 -0
- package/src/diagram-core.js +384 -151
- package/src/html-artifacts.js +403 -50
- package/src/knowledge.js +291 -32
- package/src/learning-review.js +3 -3
- package/src/loop.js +839 -101
- package/src/openprd.js +86 -1
- package/src/openspec/change-validate.js +1 -0
- package/src/prd-core.js +119 -2
- package/src/quality-html-artifact.js +30 -5
- package/src/quality-learning.js +50 -6
- package/src/quality.js +22 -12
- package/src/run-harness.js +191 -29
- package/src/self-update.js +301 -4
- package/src/standards.js +46 -5
- package/src/visual-prepare.js +940 -0
- package/src/workspace-core.js +175 -0
- package/src/workspace-workflow.js +307 -7
- package/.openprd/benchmarks/evidence/milvus-io-ai-code-review-gets-better-when-models-debate-claude-vs-gemini-vs-code.md +0 -14
- package/.openprd/benchmarks/evidence/nolanlawson-com-using-ai-to-write-better-code-more-slowly.md +0 -14
- package/.openprd/discovery/config.json +0 -35
- package/.openprd/engagements/active/flows.md +0 -35
- package/.openprd/engagements/active/handoff.md +0 -16
- package/.openprd/engagements/active/review.html +0 -61
- package/.openprd/engagements/active/roles.md +0 -22
- package/.openprd/engagements/work-units/wu-20260524015648-6d33ded7.json +0 -23
- package/.openprd/engagements/work-units/wu-20260602113956-a99b5b88.json +0 -18
- package/.openprd/engagements/work-units/wu-20260602122244-78656aaf.json +0 -18
- package/.openprd/engagements/work-units/wu-20260602122442-e96489e2.json +0 -18
- package/.openprd/engagements/work-units/wu-20260602132835-695429e8.json +0 -18
- package/.openprd/exports/.gitkeep +0 -0
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/candidate.json +0 -78
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/diagnostic-report.json +0 -129
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/root-cause-candidates.json +0 -41
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/timeline.json +0 -14
- package/.openprd/knowledge/drafts/openprd-experience-diagnostic-candidate-turn-1780116203372-5f266a79e968c758/SKILL.md +0 -49
- package/.openprd/knowledge/index.json +0 -47
- package/.openprd/reviews/v0001.html +0 -1322
- package/.openprd/reviews/v0002.html +0 -1150
- package/.openprd/reviews/v0003.html +0 -1150
- package/.openprd/reviews/v0004.html +0 -1150
- package/.openprd/reviews/v0005.html +0 -1150
- package/.openprd/sessions/.gitkeep +0 -0
- package/.openprd/state/changes.json +0 -27
- package/.openprd/state/current.json +0 -505
- package/.openprd/state/release-ledger.json +0 -387
- package/.openprd/state/version-index.json +0 -67
- package/.openprd/state/versions/.gitkeep +0 -0
- package/.openprd/state/versions/v0001.json +0 -121
- package/.openprd/state/versions/v0001.md +0 -161
- package/.openprd/state/versions/v0002.json +0 -264
- package/.openprd/state/versions/v0002.md +0 -183
- package/.openprd/state/versions/v0003.json +0 -269
- package/.openprd/state/versions/v0003.md +0 -188
- package/.openprd/state/versions/v0004.json +0 -274
- package/.openprd/state/versions/v0004.md +0 -193
- package/.openprd/state/versions/v0005.json +0 -299
- package/.openprd/state/versions/v0005.md +0 -189
- package/docs/assets/openprd-capability-overview-en.png +0 -0
- package/docs/assets/openprd-capability-overview-zh.png +0 -0
- package/docs/assets/openprd-learning-html.png +0 -0
- package/docs/assets/openprd-quality-html.png +0 -0
- package/docs/assets/openprd-requirement-routing-en.png +0 -0
- package/docs/assets/openprd-requirement-routing-en.svg +0 -102
- package/docs/assets/openprd-requirement-routing-zh-refined.png +0 -0
- package/docs/assets/openprd-requirement-routing-zh.png +0 -0
- package/docs/assets/openprd-requirement-routing-zh.svg +0 -102
- package/docs/assets/openprd-review-html.png +0 -0
- package/docs/assets/openprd-scenario-overview.png +0 -0
- package/docs/assets/openprd-scenario-overview.svg +0 -114
- package/docs/assets/openprd-self-evolving-mechanisms-en.png +0 -0
- package/docs/assets/openprd-self-evolving-mechanisms-zh.png +0 -0
- package/docs/assets/openprd-visual-compare-case-study-en.png +0 -0
- package/docs/assets/openprd-visual-compare-case-study-zh.png +0 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"themes": [
|
|
4
|
+
{
|
|
5
|
+
"id": "quiet-sand",
|
|
6
|
+
"useFor": ["editorial-contrast", "catalog-clarity"],
|
|
7
|
+
"summary": "Warm neutral editorial theme with restrained contrast.",
|
|
8
|
+
"bodyFont": "\"Inter\", \"PingFang SC\", sans-serif",
|
|
9
|
+
"headlineFont": "\"Iowan Old Style\", \"Noto Serif SC\", \"Songti SC\", serif",
|
|
10
|
+
"surfacePreset": "paper-grid",
|
|
11
|
+
"tokens": {
|
|
12
|
+
"background": "#F6F1E8",
|
|
13
|
+
"surface": "#FFFDF8",
|
|
14
|
+
"text": "#1F1A17",
|
|
15
|
+
"muted": "#6B625C",
|
|
16
|
+
"accent": "#A64B2A",
|
|
17
|
+
"border": "#D8CEC1",
|
|
18
|
+
"radius": "8px",
|
|
19
|
+
"shadow": "0 12px 32px rgba(31,26,23,0.08)"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "deep-launch",
|
|
24
|
+
"useFor": ["product-launch", "immersive-showcase"],
|
|
25
|
+
"summary": "Dark, cinematic launch theme with controlled highlight color.",
|
|
26
|
+
"bodyFont": "\"Inter\", \"PingFang SC\", sans-serif",
|
|
27
|
+
"headlineFont": "\"Inter\", \"PingFang SC\", sans-serif",
|
|
28
|
+
"surfacePreset": "dark-mesh",
|
|
29
|
+
"tokens": {
|
|
30
|
+
"background": "#0D1117",
|
|
31
|
+
"surface": "#131A23",
|
|
32
|
+
"text": "#F5F7FA",
|
|
33
|
+
"muted": "#A0A8B3",
|
|
34
|
+
"accent": "#34D3A2",
|
|
35
|
+
"border": "#243140",
|
|
36
|
+
"radius": "8px",
|
|
37
|
+
"shadow": "0 16px 40px rgba(0,0,0,0.35)"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "warm-editorial",
|
|
42
|
+
"useFor": ["editorial-contrast", "product-launch"],
|
|
43
|
+
"summary": "Bright magazine-like theme with warmer accents and layered typography.",
|
|
44
|
+
"bodyFont": "\"Avenir Next\", \"PingFang SC\", sans-serif",
|
|
45
|
+
"headlineFont": "\"Iowan Old Style\", \"Noto Serif SC\", \"Songti SC\", serif",
|
|
46
|
+
"surfacePreset": "paper-grid",
|
|
47
|
+
"tokens": {
|
|
48
|
+
"background": "#FFF9F1",
|
|
49
|
+
"surface": "#FFFFFF",
|
|
50
|
+
"text": "#1B1714",
|
|
51
|
+
"muted": "#6A6258",
|
|
52
|
+
"accent": "#D96B34",
|
|
53
|
+
"border": "#E7D8C7",
|
|
54
|
+
"radius": "6px",
|
|
55
|
+
"shadow": "0 10px 24px rgba(27,23,20,0.07)"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "tool-neutral",
|
|
60
|
+
"useFor": ["operational-density", "catalog-clarity"],
|
|
61
|
+
"summary": "Quiet operational theme for work-focused interfaces.",
|
|
62
|
+
"bodyFont": "\"Avenir Next\", \"PingFang SC\", sans-serif",
|
|
63
|
+
"headlineFont": "\"Inter\", \"PingFang SC\", sans-serif",
|
|
64
|
+
"surfacePreset": "workbench-grid",
|
|
65
|
+
"tokens": {
|
|
66
|
+
"background": "#F4F6F8",
|
|
67
|
+
"surface": "#FFFFFF",
|
|
68
|
+
"text": "#17212B",
|
|
69
|
+
"muted": "#5F6B76",
|
|
70
|
+
"accent": "#2F80ED",
|
|
71
|
+
"border": "#D9E1E8",
|
|
72
|
+
"radius": "6px",
|
|
73
|
+
"shadow": "0 6px 18px rgba(23,33,43,0.06)"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
@@ -1,84 +1,88 @@
|
|
|
1
|
-
# OpenPrd
|
|
1
|
+
# OpenPrd loop 隔离 worktree 提交闭环
|
|
2
2
|
> 语言规则:默认用简体中文生成 PRD、spec、tasks 和用户可见说明;除 PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词外,其余内容优先写成简体中文。
|
|
3
|
-
- 版本:
|
|
3
|
+
- 版本: v0006
|
|
4
4
|
- 负责人: Codex
|
|
5
|
-
-
|
|
6
|
-
-
|
|
5
|
+
- 产品场景: 以 Agent 为主要使用场景
|
|
6
|
+
- 场景模板: 以 Agent 为主要使用场景
|
|
7
7
|
- 状态: synthesized
|
|
8
|
-
- 生成时间: 2026-06-
|
|
8
|
+
- 生成时间: 2026-06-07 13:07:07
|
|
9
9
|
## 元信息
|
|
10
10
|
|
|
11
|
-
- 标题: OpenPrd
|
|
11
|
+
- 标题: OpenPrd loop 隔离 worktree 提交闭环
|
|
12
12
|
- 负责人: Codex
|
|
13
13
|
- 状态: clarifying
|
|
14
|
-
- 版本:
|
|
15
|
-
-
|
|
16
|
-
- 日期: 2026-06-
|
|
14
|
+
- 版本: v0006
|
|
15
|
+
- 产品场景: 以 Agent 为主要使用场景
|
|
16
|
+
- 日期: 2026-06-07
|
|
17
17
|
|
|
18
18
|
## 问题
|
|
19
19
|
|
|
20
|
-
- 问题陈述: OpenPrd
|
|
21
|
-
- 为什么是现在:
|
|
20
|
+
- 问题陈述: OpenPrd 的 loop 虽然支持逐任务 finish 和可选 commit,但最近没有稳定形成“隔离 worktree + 单任务 commit + 可审查回归”的闭环。当前 loop --run 不会自动切到隔离环境,loop --finish --commit 仍按全仓 git add -A 提交,主工作区一旦有脏改动就容易把无关内容卷进来,导致任务虽然 done 却没有可靠的 commit 留痕。
|
|
21
|
+
- 为什么是现在: 最近一个月里 loop 仍有 finish 通过,但没有稳定产出你期望的逐任务 commit 闭环;当前 openprd 仓库也出现了 done 任务没有 commitSha 的情况。要把 L2 和长程实现真正挂到 loop 上,就需要先把隔离执行、提交流程和状态留痕补齐。
|
|
22
22
|
- 证据:
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
23
|
+
- 最近一个月能查到多次 loop finish 通过,但没有对应的 Commit 记录。
|
|
24
|
+
- 当前 openprd/.openprd/harness/feature-list.json 里 22 个 done 任务的 commitSha 为空。
|
|
25
|
+
- 现有 loop --run 直接在当前 cwd 执行,未自动创建或切换 worktree。
|
|
26
|
+
- 现有 loop --finish --commit 仍按 git add -A 提交,提交范围过宽。
|
|
27
|
+
- 当前隔离副本多为 detached HEAD,缺少稳定的 branch / worktree / commit 绑定。
|
|
26
28
|
|
|
27
29
|
## 用户与相关方
|
|
28
30
|
|
|
29
31
|
- 主要用户:
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
+
- 需要用 OpenPrd loop 执行中等到长程实现的维护者
|
|
33
|
+
- 希望逐任务 commit、可审查、可回归且不污染主工作区的 Agent 协作者
|
|
32
34
|
- 次要用户:
|
|
33
35
|
- 待补充
|
|
34
36
|
- 相关方:
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
+
- OpenPrd 维护者
|
|
38
|
+
- 在脏仓库或长程任务中依赖 loop 的项目协作者
|
|
37
39
|
|
|
38
40
|
## 目标与成功标准
|
|
39
41
|
|
|
40
42
|
- 目标:
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
43
|
+
- 让 loop 在需要时显式进入隔离 worktree / branch 中执行,而不是默认污染主工作区。
|
|
44
|
+
- 让逐任务 commit 只包含当前任务的改动,便于单独审查和回归。
|
|
45
|
+
- 让 worktree、branch、commitSha 和 session 形成完整可追踪链路。
|
|
44
46
|
- 成功指标:
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
47
|
+
- loop --run 可以显式创建或接入 worktree / branch,或提供等价包装入口。
|
|
48
|
+
- 主工作区脏时,loop --finish --commit 默认阻断,只有显式豁免才允许继续。
|
|
49
|
+
- 逐任务 commit 不再使用全仓 git add -A,而是基于 write-scope 或本轮 touched files。
|
|
50
|
+
- loop-state.json 与 agent-sessions.jsonl 能记录 worktreePath、branch、commitSha。
|
|
49
51
|
- 验收目标:
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
52
|
+
- 在隔离 worktree 中连续完成多个 loop 任务时,每个任务都能生成独立 commit,并把 commitSha 写回状态。
|
|
53
|
+
- 在脏主工作区直接尝试 finish --commit 时,会收到明确阻断和豁免提示。
|
|
54
|
+
- 从状态文件和 session 日志可以追溯每个任务对应的 worktree、branch、commit 和测试报告。
|
|
55
|
+
- 新能力不破坏现有 loop 的 plan、next、run、finish、verify 基本路径。
|
|
53
56
|
|
|
54
57
|
## 范围与非目标
|
|
55
58
|
|
|
56
59
|
- 范围内:
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
60
|
+
- 给 openprd loop --run 增加显式 --worktree / --branch,或提供先创建隔离 worktree 再执行的包装入口。
|
|
61
|
+
- 在 commit 前增加主工作区脏状态门禁和显式 override 机制。
|
|
62
|
+
- 把提交范围从 git add -A 收窄到 task write-scope 或本轮 touched files。
|
|
63
|
+
- 把 worktreePath、branch、commitSha 写入 loop-state.json、agent-sessions.jsonl 以及相关状态输出。
|
|
61
64
|
- 范围外:
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
65
|
+
- 不在这次能力里自动 push、开 PR 或发布。
|
|
66
|
+
- 不做复杂的交互式冲突解决或自动合并策略。
|
|
67
|
+
- 不强制把每个 task 都拆成独立 worktree;第一版优先支持一个 change / 一段 loop 使用一个隔离 worktree。
|
|
68
|
+
- 不先重做整套 release / publish 工作流。
|
|
66
69
|
|
|
67
70
|
## 场景与流程
|
|
68
71
|
|
|
69
72
|
- 主流程:
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
- 画像确认后再进入后续 PRD、review、change 和 tasks 流程
|
|
73
|
+
- 用户为一个 change 进入 loop 开发时,OpenPrd 可显式创建或接入隔离 worktree 与命名分支,再在其中逐任务运行和提交。
|
|
74
|
+
- 每个任务验证通过后执行 finish --commit,只提交当前任务 write-scope / touched files,并把 commit 信息写回状态。
|
|
75
|
+
- 评审或回归时,维护者可从状态文件直接定位 worktree、branch、commitSha 和测试报告。
|
|
74
76
|
- 边界情况:
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
77
|
+
- 用户在脏主工作区里直接尝试 finish --commit。
|
|
78
|
+
- 当前任务没有可确定的 write-scope,需要回退到 touched files 或明确失败提示。
|
|
79
|
+
- 已有 worktree 存在但 branch 缺失、处于 detached HEAD 或命名不规范。
|
|
80
|
+
- 任务验证通过但 commit 写回状态失败,需要保持任务未完全收口并给出修复入口。
|
|
78
81
|
- 失败模式:
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
+
- 误把主工作区无关改动一起提交。
|
|
83
|
+
- loop 在 detached HEAD 或错误分支上提交,后续难以审查和回放。
|
|
84
|
+
- 状态里只标 done 但缺少 commitSha / worktree 信息,导致无法追溯。
|
|
85
|
+
- 隔离 worktree 创建成功,但后续 run / finish 没有使用同一执行环境。
|
|
82
86
|
|
|
83
87
|
## 可视化图表
|
|
84
88
|
|
|
@@ -86,30 +90,30 @@
|
|
|
86
90
|
|
|
87
91
|
```mermaid
|
|
88
92
|
flowchart LR
|
|
89
|
-
entry["入口触发<br
|
|
90
|
-
experience["产品内步骤<br
|
|
91
|
-
decision{"决策点<br
|
|
92
|
-
success(["成功结果<br
|
|
93
|
-
failure[["失败与恢复<br
|
|
94
|
-
entry -->|"
|
|
95
|
-
experience -->|"
|
|
96
|
-
decision -->|"
|
|
97
|
-
decision -.->|"
|
|
93
|
+
entry["入口触发<br/>用户为一个 change 进入 loop 开发时,OpenPrd 可显式创建或接入隔离 worktree 与命名分支,再在其中…"]
|
|
94
|
+
experience["产品内步骤<br/>每个任务验证通过后执行 finish --commit,只提交当前任务 write-scope / touched files…"]
|
|
95
|
+
decision{"决策点<br/>用户在脏主工作区里直接尝试 finish --commit。"}
|
|
96
|
+
success(["成功结果<br/>loop --run 可以显式创建或接入 worktree / branch,或提供等价包装入口。"])
|
|
97
|
+
failure[["失败与恢复<br/>误把主工作区无关改动一起提交。"]]
|
|
98
|
+
entry -->|"用户为一个 change 进入 loop 开发时,OpenPrd 可显式创建或接入…"| experience
|
|
99
|
+
experience -->|"每个任务验证通过后执行 finish --commit,只提交当前任务 write…"| decision
|
|
100
|
+
decision -->|"让 loop 在需要时显式进入隔离 worktree / branch 中执行,而…"| success
|
|
101
|
+
decision -.->|"误把主工作区无关改动一起提交。"| failure
|
|
98
102
|
```
|
|
99
103
|
|
|
100
104
|
### 架构
|
|
101
105
|
|
|
102
106
|
```mermaid
|
|
103
107
|
flowchart LR
|
|
104
|
-
users["主要用户<br
|
|
108
|
+
users["主要用户<br/>需要用 OpenPrd loop 执行中等到长程实现的维护者 · 希望逐任务 commit、可审查、可回归且不污染主工作区的 …"]
|
|
105
109
|
subgraph solution["方案边界"]
|
|
106
|
-
experience["Agent
|
|
107
|
-
core["核心产品逻辑<br/>OpenPrd
|
|
108
|
-
integrations["依赖与集成<br
|
|
109
|
-
governance[["约束与可靠性<br
|
|
110
|
-
delivery["验证与交接<br
|
|
110
|
+
experience["Agent 使用场景层<br/>用户为一个 change 进入 loop 开发时,OpenPrd 可显式创建或接入隔离 worktree 与命名分支,再在其中…"]
|
|
111
|
+
core["核心产品逻辑<br/>OpenPrd 的 loop 虽然支持逐任务 finish 和可选 commit,但最近没有稳定形成“隔离 worktree …"]
|
|
112
|
+
integrations["依赖与集成<br/>Git worktree 能力。 · 现有 loop task executionStrategy.writeScope 与 …"]
|
|
113
|
+
governance[["约束与可靠性<br/>提交与状态写回不能泄露用户本地无关改动或敏感信息。"]]
|
|
114
|
+
delivery["验证与交接<br/>loop --run 可以显式创建或接入 worktree / branch,或提供等价包装入口。 · 主工作区脏时,loop…"]
|
|
111
115
|
end
|
|
112
|
-
users -->|"
|
|
116
|
+
users -->|"用户为一个 change 进入 loop 开发时,OpenPrd 可显式创建或…"| experience
|
|
113
117
|
experience -->|"产品动作与编排"| core
|
|
114
118
|
core -->|"依赖与外部服务"| integrations
|
|
115
119
|
core -.->|"策略、可靠性与合规"| governance
|
|
@@ -121,69 +125,76 @@ flowchart LR
|
|
|
121
125
|
## 需求
|
|
122
126
|
|
|
123
127
|
- 功能需求:
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
+
- 支持显式 worktree / branch 配置,或提供隔离运行包装命令。
|
|
129
|
+
- 支持检测主工作区脏状态,并在 finish --commit 前阻断高风险路径。
|
|
130
|
+
- 支持基于 write-scope 或 touched files 生成本任务提交集。
|
|
131
|
+
- 支持在 loop 状态、session 日志和测试报告中记录 commit 关联信息。
|
|
132
|
+
- 支持为未满足 commit 前置条件的任务给出清晰诊断与恢复指引。
|
|
128
133
|
- 非功能需求:
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
134
|
+
- 默认路径必须安全,不能把无关改动静默卷入 commit。
|
|
135
|
+
- 行为必须可追踪,可从状态文件复原任务执行链路。
|
|
136
|
+
- 对现有 loop 用户保持兼容,新增能力应尽量显式开启或有明确默认策略。
|
|
137
|
+
- 失败路径必须可恢复,不能留下半记录状态。
|
|
132
138
|
- 业务规则:
|
|
133
|
-
-
|
|
134
|
-
-
|
|
135
|
-
-
|
|
136
|
-
- clarify 阶段默认不生成 HTML,正式可视化仍留给 review 或 diagram 阶段
|
|
139
|
+
- 逐任务 commit 只在任务验证通过后允许执行。
|
|
140
|
+
- 主工作区脏时默认禁止高风险 commit,除非用户显式豁免。
|
|
141
|
+
- 状态留痕必须与实际 commit 结果一致,不能先写成功后提交失败。
|
|
137
142
|
|
|
138
143
|
## 业务护栏
|
|
139
144
|
|
|
140
145
|
- 成本来源:
|
|
141
|
-
-
|
|
146
|
+
- 这次主要要避免无关改动混入 commit、回滚成本升高,以及逐任务审查和回归失去抓手。
|
|
142
147
|
- 额度与限制:
|
|
143
|
-
-
|
|
148
|
+
- 默认不允许在脏主工作区直接完成高风险 commit;需要显式进入隔离路径或明确豁免。
|
|
144
149
|
- 滥用防护:
|
|
145
|
-
-
|
|
146
|
-
-
|
|
150
|
+
- 不能把未在当前任务范围内的文件静默加入 commit。
|
|
151
|
+
- 不能把 detached HEAD 上的匿名提交伪装成可回归的标准 loop 结果。
|
|
147
152
|
- 监控信号:
|
|
148
|
-
-
|
|
153
|
+
- 需要持续看 loop 任务完成后是否稳定写回 commitSha。
|
|
154
|
+
- 需要看 worktreePath、branch、commitSha 是否在状态和 session 日志里一致。
|
|
155
|
+
- 需要看脏主工作区门禁是否挡住了无关改动被带进提交。
|
|
149
156
|
- 报警阈值:
|
|
150
|
-
-
|
|
157
|
+
- 只要出现用户要求 commit 但任务完成后没有 commitSha,就算这条闭环没有打通。
|
|
158
|
+
- 只要出现主工作区无关改动被带进 loop commit,就应立即视为高风险回退。
|
|
151
159
|
- 止损动作:
|
|
152
|
-
-
|
|
153
|
-
-
|
|
160
|
+
- 无法安全判定提交范围时,停止自动 commit,保留任务验证结果并提示人工处理。
|
|
161
|
+
- worktree / branch 状态异常时,不把任务标记为已完成提交。
|
|
154
162
|
|
|
155
163
|
## 约束、依赖与风险
|
|
156
164
|
|
|
157
165
|
- 技术约束:
|
|
158
|
-
-
|
|
159
|
-
-
|
|
166
|
+
- 基于现有 openprd loop / git 流程扩展,不重写整套任务调度。
|
|
167
|
+
- 兼容当前 feature-list、loop-state、agent-sessions 与 test-reports 结构。
|
|
168
|
+
- 需要同时考虑 worktree、命名分支与 detached HEAD 的兼容行为。
|
|
160
169
|
- 合规要求:
|
|
161
|
-
-
|
|
162
|
-
- 新增提示和用户可见文案应保持面向产品与业务语言,不直接暴露内部技术细节。
|
|
170
|
+
- 提交与状态写回不能泄露用户本地无关改动或敏感信息。
|
|
163
171
|
- 依赖:
|
|
164
|
-
-
|
|
165
|
-
-
|
|
172
|
+
- Git worktree 能力。
|
|
173
|
+
- 现有 loop task executionStrategy.writeScope 与 finish / verify 流程。
|
|
174
|
+
- OpenPrd 的状态文件、review / change / tasks 主流程。
|
|
166
175
|
- 假设:
|
|
167
|
-
-
|
|
168
|
-
-
|
|
176
|
+
- 第一版默认以一个 change / 一段 loop 对应一个隔离 worktree 为优先模型,而不是每个 task 一个 worktree。
|
|
177
|
+
- 已有 task write-scope 在多数实现任务里足够收窄 commit 范围;不足时需要 touched files 补位。
|
|
169
178
|
- 风险:
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
179
|
+
- 如果 worktree / branch 生命周期设计不清,会显著抬高 loop 使用复杂度。
|
|
180
|
+
- 如果 touched files 收集不稳定,可能出现漏提或误提。
|
|
181
|
+
- 如果状态写回与 git 操作顺序不当,会出现 done / commitSha 不一致。
|
|
173
182
|
- 开放问题:
|
|
174
|
-
-
|
|
183
|
+
- 第一版是否明确采用一个 change 一个 worktree、一个 task 一个 commit。
|
|
184
|
+
- worktree / branch 命名规范是否要产品化成 CLI 默认值。
|
|
185
|
+
- override 脏仓库门禁时,CLI 需要多强的显式确认语义。
|
|
175
186
|
|
|
176
187
|
## 类型专项模块
|
|
177
188
|
|
|
178
|
-
- 类型: Agent
|
|
179
|
-
- humanAgentContract: Agent
|
|
180
|
-
- autonomyBoundary: Agent
|
|
181
|
-
- toolBoundary:
|
|
182
|
-
- stateModel:
|
|
183
|
-
- evalPlan: 通过
|
|
189
|
+
- 类型: Agent 使用场景专项
|
|
190
|
+
- humanAgentContract: 用户决定是否进入 loop、是否要求 commit、是否接受 override;Agent 负责在安全前提下创建隔离执行环境,并维护状态与证据闭环。
|
|
191
|
+
- autonomyBoundary: Agent 可以在 loop 运行前准备 worktree、检查脏状态并收集 touched files,但不能在用户未授权 commit 的情况下自动提交,也不能在高风险脏仓库里静默绕过门禁。
|
|
192
|
+
- toolBoundary: 优先使用本地 Git 与 OpenPrd loop 状态完成这次能力,不引入新的远端托管或发布前置依赖。
|
|
193
|
+
- stateModel: change 进入 loop 后,先绑定隔离执行环境,再逐任务 run / verify / finish / commit,并把 worktree、branch、commit 与测试报告写回同一条状态链。
|
|
194
|
+
- evalPlan: 通过 loop 单测、worktree / dirty repo 场景测试、状态持久化测试,以及一次真实隔离 worktree 的串行回归验证这次改动。
|
|
184
195
|
|
|
185
196
|
## 交接
|
|
186
197
|
|
|
187
198
|
- 负责人: Codex
|
|
188
|
-
- 下一步:
|
|
199
|
+
- 下一步: 完成 review 确认后生成 change 和 tasks,再实现 loop 的隔离 worktree 提交闭环。
|
|
189
200
|
- 目标系统: OpenPrd
|
|
@@ -27,6 +27,31 @@ sections:
|
|
|
27
27
|
- successMetrics
|
|
28
28
|
- acceptanceGoals
|
|
29
29
|
|
|
30
|
+
validation:
|
|
31
|
+
requiredFields:
|
|
32
|
+
- community
|
|
33
|
+
- seedUsers
|
|
34
|
+
- communityFit
|
|
35
|
+
- currentAlternative
|
|
36
|
+
- painEvidence
|
|
37
|
+
- manualPath
|
|
38
|
+
- manualPlaybook
|
|
39
|
+
- commitmentSignals
|
|
40
|
+
- firstValidationStep
|
|
41
|
+
- defaultAlivePlan
|
|
42
|
+
- paymentProof
|
|
43
|
+
- mvpSlice
|
|
44
|
+
- weekendTest
|
|
45
|
+
- smallestExecution
|
|
46
|
+
- productizeGate
|
|
47
|
+
- firstCustomerPath
|
|
48
|
+
- pricingHypothesis
|
|
49
|
+
- customerOneProfitability
|
|
50
|
+
- growthDiscipline
|
|
51
|
+
- reversibility
|
|
52
|
+
- customerTruth
|
|
53
|
+
- valuesFit
|
|
54
|
+
|
|
30
55
|
scope:
|
|
31
56
|
requiredFields:
|
|
32
57
|
- inScope
|
|
@@ -6,8 +6,25 @@
|
|
|
6
6
|
|
|
7
7
|
- 我们要解决什么问题?
|
|
8
8
|
- 主要是给谁用的?他们会在什么场景下最先感受到价值?如果你愿意,也可以直接说它更偏面向个人消费者、面向企业服务,还是以 Agent 为主。
|
|
9
|
+
- 第一批最容易触达、最可能愿意给真实反馈的社区、渠道或人群是谁?
|
|
10
|
+
- 你为什么算这个社区里的“自己人”?他们平时主要在哪里聚集、为什么你现在就能触达?这是不是一个足够小、足够集中的切口?
|
|
9
11
|
- 第一版最小可用切片,最希望先让用户完成什么关键动作?
|
|
10
12
|
- 当前临时解决方式是什么?
|
|
13
|
+
- 这个问题到底有多痛?用户现在是不是已经在为更差的办法花时间、花钱,或者至少在强行 workaround?如果一句话描述客户和痛点,会怎么说?
|
|
14
|
+
- 如果先不做完整产品,能不能先靠手工服务、半自动流程或轻量交付把价值跑出来?
|
|
15
|
+
- 如果先手工交付,这份“手工作战卡”该怎么写:触发条件、关键步骤、用什么工具、单客大概花多久、谁来接力?
|
|
16
|
+
- 如果今天禁止你写复杂代码,只能用 spreadsheet、表单、Zapier/Notion/Airtable 这类现成工具,你会怎么把第一版跑起来?哪些东西现在明确先不 build?如果已经不得不做产品,也只自动化最重复的一步,先压成 forms / lists / CRUD 这种最轻骨架。
|
|
17
|
+
- 第一版到底只做哪一件事?它能不能被压成一个周末级 MVP、一个顾问式试跑,或一个更轻的验证动作?
|
|
18
|
+
- 你现在至少能不能点出 3 到 10 个具体的人、团队或客户样本?如果已经聊过,里面有多少人真的愿意付费、预约试跑、导入真实数据,或者给出同等级别的承诺?
|
|
19
|
+
- 第一批客户最现实的触达顺序是什么?先熟人、现有客户、社区,还是陌生线索?
|
|
20
|
+
- 从第一个客户开始准备怎么收费?什么价格既是 no-brainer,又不会因为免费而失真?
|
|
21
|
+
- 什么真实承诺最能证明这不是口头兴趣,比如付费、预约、提交真实素材、拉人进群或导入数据?
|
|
22
|
+
- 最低成本先验证哪一步最关键?如果验证结果一般,什么情况下应该先停,或者先换更轻的方式继续?
|
|
23
|
+
- 如果只拿到第一个客户,这条路怎么打平时间和交付成本?更接近 default alive 还是 default dead?
|
|
24
|
+
- 你准备在什么条件下才允许自己“产品化”或继续加功能?例如已经服务了 10+ 付费客户、需求已经稳定几周、手工步骤几乎不再变化。一旦真的开始做产品,默认也只自动化一小步,不直接做大平台。
|
|
25
|
+
- 销售和增长这条线准备怎么守纪律?是不是先熟人、再社区、再陌生线索;100 个付费客户前不把 launch 当获客策略;先花时间别先花钱;有自然增长前不急着投广告或招人。
|
|
26
|
+
- 如果结果一般,这个方向有多可逆?更像是在解决客户真问题,还是在满足我们自己的技术冲动?
|
|
27
|
+
- 这条路是否符合团队现在想坚持的价值观和做事方式?如果连续这样做 3 到 5 年,你还愿意住在这套业务里吗?
|
|
11
28
|
- 哪些内容这轮先不做?
|
|
12
29
|
- 哪些既有能力、流程、体验或业务结果不能被破坏?
|
|
13
30
|
- 成功后,用户会明显感受到什么变化?我们怎么判断它值得做成?
|
|
@@ -27,24 +27,49 @@
|
|
|
27
27
|
- 成功指标:
|
|
28
28
|
- 验收目标:
|
|
29
29
|
|
|
30
|
-
## 5.
|
|
30
|
+
## 5. 验证与创业闭环
|
|
31
|
+
|
|
32
|
+
- 可触达社区:
|
|
33
|
+
- 第一批种子用户:
|
|
34
|
+
- 社区契合与触达依据:
|
|
35
|
+
- 当前替代方案:
|
|
36
|
+
- 痛点与替代证据:
|
|
37
|
+
- 手工交付路径:
|
|
38
|
+
- 手工作战卡:
|
|
39
|
+
- 承诺信号:
|
|
40
|
+
- 首个低成本验证:
|
|
41
|
+
- 先活下来方案:
|
|
42
|
+
- 付费验证信号:
|
|
43
|
+
- 第一版只做一件事:
|
|
44
|
+
- 周末级验证:
|
|
45
|
+
- 最小工具桥接:
|
|
46
|
+
- 产品化门槛:
|
|
47
|
+
- 第一批客户路径:
|
|
48
|
+
- 初始收费假设:
|
|
49
|
+
- 客户 1 盈利路径:
|
|
50
|
+
- 销售与增长纪律:
|
|
51
|
+
- 可逆性判断:
|
|
52
|
+
- 客户真问题校验:
|
|
53
|
+
- 价值观一致性:
|
|
54
|
+
|
|
55
|
+
## 6. 范围与非目标
|
|
31
56
|
|
|
32
57
|
- 范围内:
|
|
33
58
|
- 范围外:
|
|
34
59
|
|
|
35
|
-
##
|
|
60
|
+
## 7. 场景与流程
|
|
36
61
|
|
|
37
62
|
- 主流程:
|
|
38
63
|
- 边界情况:
|
|
39
64
|
- 失败模式:
|
|
40
65
|
|
|
41
|
-
##
|
|
66
|
+
## 8. 需求
|
|
42
67
|
|
|
43
68
|
- 功能需求:
|
|
44
69
|
- 非功能需求:
|
|
45
70
|
- 业务规则:
|
|
46
71
|
|
|
47
|
-
##
|
|
72
|
+
## 9. 业务护栏
|
|
48
73
|
|
|
49
74
|
- 成本来源:
|
|
50
75
|
- 额度与限制:
|
|
@@ -53,14 +78,14 @@
|
|
|
53
78
|
- 报警阈值:
|
|
54
79
|
- 止损动作:
|
|
55
80
|
|
|
56
|
-
##
|
|
81
|
+
## 10. 约束、依赖与风险
|
|
57
82
|
|
|
58
83
|
- 技术约束:
|
|
59
84
|
- 依赖:
|
|
60
85
|
- 风险:
|
|
61
86
|
- 开放问题:
|
|
62
87
|
|
|
63
|
-
##
|
|
88
|
+
## 11. 交接
|
|
64
89
|
|
|
65
90
|
- 下一步:
|
|
66
91
|
- 目标系统:
|
package/AGENTS.md
CHANGED
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
- 先读 `skills/openprd-router/SKILL.md`;在生成的 Codex / Claude 环境里,优先读同名 `openprd-router` skill。
|
|
14
14
|
- 需要具体命令时,优先读 `.openprd/harness/command-catalog.md`,不要继续把命令清单膨胀回 `AGENTS.md`。
|
|
15
15
|
- `$openprd-shared`:共用语言、文档影响、敏感信息、浏览器安全、小程序验证、产品文案与 i18n 规则。
|
|
16
|
-
- `$openprd-requirement-intake`:需求入口分流、用户可见需求类型与内部 L0/L1/L2 路由码对照、PRD
|
|
16
|
+
- `$openprd-requirement-intake`:需求入口分流、用户可见需求类型与内部 L0/L1/L2 路由码对照、PRD 场景视角选择,以及创业验证闭环。
|
|
17
17
|
- `$openprd-test-strategy`:测试策略分流、分层验证、任务级 evidence-plan、升级原因与豁免理由。
|
|
18
18
|
- `$openprd-harness`:主工作流、`run/loop`、review/change/tasks 与执行节奏。
|
|
19
|
+
- `$openprd-frontend-design`:前端设计框架、审美资产库、设计主题/骨架/组件/配方/模板,以及事实、素材、图片和方向前置门。
|
|
19
20
|
- `$openprd-benchmark-router`:外部技术、公开 GitHub 仓库、benchmark/对标/最佳实践路由。
|
|
20
21
|
- `$openprd-standards` / `$openprd-quality`:`docs/basic/`、就绪验证、EVO 门禁、知识沉淀。
|
|
21
22
|
- `$openprd-diagram-review` / `$openprd-discovery-loop`:可视评审与长时间只读挖掘。
|
|
@@ -24,18 +25,20 @@
|
|
|
24
25
|
|
|
25
26
|
1. 动手前先从 `.openprd/` 重建状态,并先运行 `openprd run . --context`;它是建议上下文,不是自动执行指令。
|
|
26
27
|
2. 规划、分析、架构评审、“怎么改”或“会动哪些文件”类请求保持只读;只有用户明确要求实现、继续任务、深度调研、对标复刻或提交时才进入执行。
|
|
27
|
-
3. 先分流再执行:`openprd-requirement-intake`
|
|
28
|
+
3. 先分流再执行:`openprd-requirement-intake` 按影响面、未知数、决策成本和验证成本判断需求类型,并保留内部路由码对照:直接处理=L0,现有功能优化=L1,新功能/新流程方案=L2。用户审查默认把路由码并进“需求类型:直接处理(L0)”这类标签里;只有内部排障确实受益时,才额外附“内部路由码”。直接处理类需求可直接处理并事后说明,不打开正式 PRD/review/change/tasks;现有功能优化先在对话内给 mini-plan 再执行,默认不生成正式 PRD/change/tasks;如果用户刚刚已经确认了 L1 mini-plan、范围边界或正式产品边界,后续承接要写成“已确认,我按这个继续”,不要用“确认,我们就按这个……”这类像再次索取确认的句子。只有新功能/新流程方案才先走 requirement intake、对话内 requirement 摘要确认,再 `review/change/tasks`,最后才实现。L2 的 requirement 摘要默认按“需求判断 / 需求理解 / 功能范围 / 技术方案”来写,其中“功能范围”和“技术方案”优先用 Markdown 表格,帮助用户一眼看清;`需求判断` 和 `需求理解` 先用 1 到 2 句轻量主句说清这次是什么、核心问题和第一版目标,边界、风险、异常例子和技术细节下沉到后面的分项或表格,不要把它们都塞进一整段长话里,也不要把某条示例文案写成固定模板。若当前仍在 0 到 1 探索、脑暴或值不值得做的判断,摘要里还要主动补上“验证与创业闭环”:第一批最容易触达的社区或种子用户、你为什么算这个社区里的自己人、当前替代方案和痛点证据、先怎么手工交付、手工作战卡怎么写、能不能先用 spreadsheet / 表单 / no-code 跑起来、如果必须开始做产品也只自动化最重复的一步并先压成 forms / lists / CRUD 骨架、第一版只做哪一件事、能不能压成周末级 MVP、第一批客户路径、从第一个客户开始怎么收费、客户 1 如何打平成本、有没有 10 个样本和更强付费信号、达到什么条件才允许产品化、增长阶段守什么纪律、这条路是否可逆、是否真在解决客户问题、以及是否符合团队价值观、是不是你愿意长期住进去的业务形态。L2 的首轮澄清只能承诺“我先整理需求摘要给你确认”,不能把 requirement 摘要确认、review 和实现压成一句“你回我一句我就开始实现”。如果 `openprd run . --context` 仍然建议 `clarify-user`,当前这轮回复的目标就只能是 `需求摘要` 或 `1 个最高价值澄清点`,不要写成“我先按默认方案实现”。如果用户的下一条回复只是承接上一轮 requirement 摘要的短跟进,而不是提出新范围、改目标或重新发起分析请求,就把它当成对上一轮摘要、默认方向或选项的继续确认,不要重新开一轮泛化 clarify;应直接按当前对话上下文把已确认事实用 canonical capture 路径、`user-confirmed` 来源写回,而不是继续写 `agent-inferred/project-derived` 的用户澄清字段。单纯的“请帮我实现/继续实现”只表示有执行意图,不表示可以跳过 requirement 摘要确认、`capture/classify/synthesize` 写入路径或 review;只有用户明确表示“不需要进行任何确认”时,才允许静默走完整 requirement write path。`review.html` 是稳定评审 artifact,不再默认等于唯一的人类停顿点;默认按 decision-points approval policy 执行,只有当前 lane 仍要求人类决策时才在 final answer 主体里停下请求确认;当 review 已确认且 tasks 已就绪但还需要执行授权时,先给执行确认清单再请用户确认。
|
|
28
29
|
4. change/tasks 就绪后,用 `openprd-test-strategy` 按风险选择单元、集成、端到端、人工、视觉、小程序、性能或安全验证组合,并在任务或报告中保留 evidence-plan;同时根据任务边界记录 execution strategy:小范围修正保持 `serial`,中等规模 L1/L2 可推荐 `parallel-workers`,高风险或大规模实现再升级到 `parallel-workers-isolated`;70/20/10 只作健康形状参考,不作硬门禁。
|
|
29
|
-
5. 纯图片、封面图、配图、海报、插画、图标、贴纸、mockup 或“先看样子”请求默认直接使用 `imagegen`,也就是 Codex 原生 Image 2;其中 logo、icon、avatar、badge 等开发素材在用户未明确要求场景化展示时,默认按独立素材输出(standalone asset)生成:全画布单主体,不额外添加卡片、设备框或其他展示容器;只有实际发生 `imagegen`
|
|
30
|
-
6.
|
|
31
|
-
7.
|
|
32
|
-
8.
|
|
33
|
-
9.
|
|
30
|
+
5. 纯图片、封面图、配图、海报、插画、图标、贴纸、mockup 或“先看样子”请求默认直接使用 `imagegen`,也就是 Codex 原生 Image 2;其中 logo、icon、avatar、badge 等开发素材在用户未明确要求场景化展示时,默认按独立素材输出(standalone asset)生成:全画布单主体,不额外添加卡片、设备框或其他展示容器;只有实际发生 `imagegen` 调用后,才能汇报生图结果、失败或限流。生图结果先当候选效果图,不要默认登记到 `.openprd/harness/visual-reviews/`。Agent 要主动确认是否符合预期、是否纳入后续效果图/实现截图对比、以及是否按此继续实现;只有确认后,才把选定方向、整张图或其中子图整理成 reference-set 并进入实现。进入实现阶段时,已有确认参考图用 `openprd visual-compare --reference/--actual`;如果参考图是一张整板、网格图或多对象组合,先运行 `openprd visual-prepare --reference <效果图> --grid <列>x<行>` 或 `--boxes <plan.json>`,确认 contact sheet 后再逐项对比;没有参考图时先判断新建界面还是修改既有界面,新建界面先按用户目标、信息架构变化、视觉决策成本和验证风险完成 3 方向方案评审,修改既有界面用 `openprd visual-compare --before/--after`;局部细节重点则补 `openprd visual-compare --board <focus-board.json>`,多方向实验则补 `openprd visual-compare --board <parallel-board.json>`。用户后续如果说“跟效果图”“不一致”“好丑”“复刻”,不能只口头说对比过了,至少先产出一份视觉证据图。如果用户目标是把工作转成可学习、可复用、可回看、可教学或可沉淀的材料,先按期望产物是否需要章节结构、证据锚点、图文讲解、检索练习、工作示例或长期阅读体验来判断;需要时优先走 `openprd learn .` 生成学习包和阅读器,不要用关键词表触发。
|
|
31
|
+
6. 界面、页面、视觉、样式、信息架构或前端体验任务进入实现前,先读取 `$openprd-frontend-design`,并用 `.openprd/design/active/` 补齐 `facts-sheet / asset-spec / image-preflight / direction-plan / selected-direction`;空白工作区优先从 `.openprd/design/templates/` 选最近模板。若用户已经给了效果图、设计稿、参考截图或其他明确参考图,先把它当成主参考源;只有现有 starter、theme、layout 足够接近时才复用,不接近就允许偏离默认组合,以参考图为准。若当前轮用户已经把页面主题、模块范围或“直接实现”的意图说清,优先运行 `openprd run . --context --message <用户原话>`。若页面主题和模块范围已经明确,优先运行 `openprd design-starter . --starter <starter-id> --out index.html --brief "<页面主题>" --sections "<模块1|模块2|模块3>"` 起第一版真实页面;只有这个页面本来就不依赖外部产品事实、品牌素材或真实图片时,才在 active design artifacts 写清无依赖并补 `--no-external-facts --no-brand-assets --no-real-images`;若题目更像旅游、导览、展览、博物馆、城市、自然观察或案例内容页,先不要带 `--no-real-images`,让 starter 先尝试补首批真实图片;若这类冷启动即使带 message 仍短暂返回 `clarify-user`,把它当成摘要级提醒,先用 3 到 5 行 mini-plan 收口,再继续。starter 落地后默认进入 `Patch Mode`,必须直接在生成的入口文件上补丁修改;即使结构要大改,也是在同一路径内覆盖,不做 delete-first,更不要删除 `index.html` 后另起新稿。如果确实要整页重写,先把完整新稿写到 sibling draft,例如 `index.next.html`,确认内容成形后再覆盖回 `index.html`,不要让正式入口出现空窗;starter 一落地后,只允许做一轮就地对焦:快速读一次生成的入口文件和必要的 active design artifacts;这轮对焦结束后,下一步就必须是真实写入口,不要再回头搜网页、翻 `docs/basic/` 或继续模板漫游;把最后一批必要的查事实、查图、读模板动作放在口头宣布之前做完;一旦已经说“开始覆盖入口文件”或“开始整页重写”,下一步必须出现真实写文件动作,而不是继续只读浏览、压图或停在口头承诺;必要时 hook 会把这类非写入动作挡回去;`Patch Mode` 完成不等于只补合同、只下载素材或只写计划;至少要把入口文件本体改完、主要占位清掉,并把已准备好的真实图片或参考约束真正落进页面;没有明确参考方向时,不要直接落回同一种安全极简解。
|
|
32
|
+
7. 用户给出会话 ID 并要求继续时,按工具无关的历史会话续接;不要要求工具专属 ID,也不要用当前 active change 或相似历史替代指定会话。
|
|
33
|
+
8. 单个 task 收尾时只运行本任务最小足够验证,并通过 `--evidence`、测试报告或任务 metadata 留下 task-scoped evidence;代码修改完成后、最终回复前,针对本轮实际 touched code files 运行 `openprd dev-check . <file...>`。阶段收口、全部实现完成、handoff/commit/release/publish 前,再运行 `openprd standards . --verify`、`openprd quality . --verify` 和 `openprd run . --verify`;L2 或跨页面实现的最终回复必须列出最新 HTML 质量报告和 task-scoped Markdown/HTML 测试报告路径。如果还没有 `.openprd/harness/test-reports/` 下的 Markdown / HTML 测试报告,就不要把状态表述成项目级已经闭环。
|
|
34
|
+
9. 微信小程序相关任务默认按“最小足够验证”执行:只有用户明确要求小程序实测、截图、抓日志/网络、复现问题,或当前改动必须依赖运行态证据时,才升级到本地小程序运行态验证;默认沿用当前小程序运行态或开发者工具会话连续验证,不要为了验证自动重开应用;只有用户明确要求从 0 到 1、冷启动或重开时,才从头启动。如果当前客户端没有相应工具,不要假定已经安装,也不要把缺少工具当成阻断。
|
|
35
|
+
10. `openprd init/setup/update/doctor` 记录的 `optionalCapabilities` 是非阻断式增强建议。当前任务明显受益但能力还未配置时,可在后续建议里说明它能帮什么、附官方文档 / GitHub 链接,并询问用户是否需要按当前客户端补配置;不要因为它未配置就阻断当前任务。
|
|
34
36
|
|
|
35
37
|
### Hook-Enforced Gates
|
|
36
38
|
|
|
37
39
|
- requirement:需求未完成 `clarify/review/change/tasks` 前阻断实现写入;tasks 就绪后,只有用户原始意图已明确要求实现,或后续在看过执行确认清单后明确发出执行指令时才放行。
|
|
38
40
|
- research:公开 GitHub 架构/对标先 DeepWiki;第三方技术用法、配置、限制、版本差异或迁移先查本地证据,不足时再按 `resolve_library_id -> query_docs` 使用 Context7。
|
|
41
|
+
- design:界面、页面、视觉和前端体验任务进入实现前,先读取 `$openprd-frontend-design`,并补齐 `.openprd/design/active/` 下的事实、素材、图片和方向合同。
|
|
39
42
|
- skill-visualization:修改 skill、`SKILL.md`、`AGENTS.md` 或相关 workflow 前,先输出彩色 Mermaid 方案并等待用户确认。
|
|
40
43
|
- secrets / weapp / browser / copy:分别处理 `secrets-vault`、按需的小程序运行态验证、窗口归属与 i18n/普通用户文案提醒。
|
|
41
44
|
- 需要细节时,读 router 指向的 skill 和 command catalog,而不是继续扩写 `AGENTS.md`。
|