@openprd/cli 0.1.18 → 0.1.21

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.
Files changed (118) hide show
  1. package/.openprd/changes/openprd-control-plane-v020/.openprd.yaml +2 -0
  2. package/.openprd/changes/openprd-control-plane-v020/design.md +78 -0
  3. package/.openprd/changes/openprd-control-plane-v020/proposal.md +54 -0
  4. package/.openprd/changes/openprd-control-plane-v020/specs/agent-requirements/spec.md +16 -0
  5. package/.openprd/changes/openprd-control-plane-v020/task-events.jsonl +27 -0
  6. package/.openprd/changes/openprd-control-plane-v020/tasks-002.md +35 -0
  7. package/.openprd/changes/openprd-control-plane-v020/tasks.md +427 -0
  8. package/.openprd/changes/openprd-generated-change/.openprd.yaml +2 -0
  9. package/.openprd/changes/openprd-generated-change/design.md +50 -0
  10. package/.openprd/changes/openprd-generated-change/proposal.md +37 -0
  11. package/.openprd/changes/openprd-generated-change/specs/agent-requirements/spec.md +16 -0
  12. package/.openprd/changes/openprd-generated-change/task-events.jsonl +21 -0
  13. package/.openprd/changes/openprd-generated-change/tasks.md +357 -0
  14. package/.openprd/changes/remove-session-tracking-humane-approval/.openprd.yaml +2 -0
  15. package/.openprd/changes/remove-session-tracking-humane-approval/design.md +52 -0
  16. package/.openprd/changes/remove-session-tracking-humane-approval/proposal.md +35 -0
  17. package/.openprd/changes/remove-session-tracking-humane-approval/specs/agent-requirements/spec.md +16 -0
  18. package/.openprd/changes/remove-session-tracking-humane-approval/task-events.jsonl +1 -0
  19. package/.openprd/changes/remove-session-tracking-humane-approval/tasks.md +170 -0
  20. package/.openprd/design/active/asset-spec.md +19 -14
  21. package/.openprd/design/active/direction-plan.md +19 -3
  22. package/.openprd/design/active/facts-sheet.md +16 -7
  23. package/.openprd/design/active/image-preflight.md +6 -5
  24. package/.openprd/design/active/review-studio-v020-directions/compare-plan.json +34 -0
  25. package/.openprd/design/active/review-studio-v020-directions/contact-sheet.jpg +0 -0
  26. package/.openprd/design/active/review-studio-v020-directions/crops/01.png +0 -0
  27. package/.openprd/design/active/review-studio-v020-directions/crops/02.png +0 -0
  28. package/.openprd/design/active/review-studio-v020-directions/crops/03.png +0 -0
  29. package/.openprd/design/active/review-studio-v020-directions/focus-board.template.json +69 -0
  30. package/.openprd/design/active/review-studio-v020-directions/parallel-board.template.json +45 -0
  31. package/.openprd/design/active/review-studio-v020-directions/reference-set.json +143 -0
  32. package/.openprd/design/active/review-studio-v020-directions/source.png +0 -0
  33. package/.openprd/design/active/selected-direction.md +23 -9
  34. package/.openprd/engagements/active/control-plane-architecture.json +203 -0
  35. package/.openprd/engagements/active/control-plane-intake.json +418 -0
  36. package/.openprd/engagements/active/prd.md +186 -100
  37. package/.openprd/engagements/active/review-presentation-v0018.json +176 -0
  38. package/.openprd/i18n-config.json +12 -0
  39. package/.openprd/ledger/events.jsonl +6 -0
  40. package/.openprd/ledger/heads/ebea1a71a9daa566f1c91b53.json +10 -0
  41. package/.openprd/manifest.json +21 -0
  42. package/AGENTS.md +1 -0
  43. package/README.md +22 -0
  44. package/README_EN.md +27 -0
  45. package/package.json +1 -1
  46. package/skills/openprd-frontend-design/SKILL.md +16 -0
  47. package/skills/openprd-harness/SKILL.md +1 -1
  48. package/skills/openprd-quality/SKILL.md +1 -1
  49. package/skills/openprd-requirement-intake/SKILL.md +1 -1
  50. package/skills/openprd-shared/SKILL.md +1 -1
  51. package/src/adapters/adapter-spi.js +193 -0
  52. package/src/adapters/capability-envelope.js +98 -0
  53. package/src/adapters/event-normalizer.js +55 -0
  54. package/src/adapters/index.js +4 -0
  55. package/src/adapters/install-safety.js +249 -0
  56. package/src/agent-canonical-content.js +6 -2
  57. package/src/agent-integration.js +147 -42
  58. package/src/canvas-app-client-app.js +838 -0
  59. package/src/canvas-app-client-helpers.js +1138 -0
  60. package/src/canvas-app-styles.js +898 -0
  61. package/src/canvas-app.html.js +6 -2781
  62. package/src/canvas-binding.js +414 -0
  63. package/src/canvas-codex-relay.js +430 -0
  64. package/src/canvas-i18n.js +8 -0
  65. package/src/canvas-scene.js +377 -0
  66. package/src/canvas-session-store.js +148 -0
  67. package/src/canvas-workspace.js +59 -1066
  68. package/src/cli/args.js +63 -4
  69. package/src/cli/gate-print.js +17 -0
  70. package/src/cli/quality-commands.js +18 -0
  71. package/src/cli/quality-print.js +10 -0
  72. package/src/cli/runtime-print.js +24 -0
  73. package/src/codex-hook-runner-template.mjs +87 -77
  74. package/src/codex-runtime.js +48 -5
  75. package/src/context/cache.js +245 -0
  76. package/src/context/compiler.js +438 -0
  77. package/src/context/constants.js +30 -0
  78. package/src/context/index.js +39 -0
  79. package/src/context/redaction.js +84 -0
  80. package/src/context/stable.js +69 -0
  81. package/src/context/telemetry.js +42 -0
  82. package/src/dev-standards.js +57 -0
  83. package/src/fleet.js +112 -95
  84. package/src/gates/index.js +2 -0
  85. package/src/gates/scoped-gates.js +256 -0
  86. package/src/gates/store.js +126 -0
  87. package/src/gates/workspace.js +41 -0
  88. package/src/html-artifacts.js +725 -28
  89. package/src/kernel/atomic-store.js +299 -0
  90. package/src/kernel/event-envelope.js +166 -0
  91. package/src/kernel/index.js +4 -0
  92. package/src/kernel/project-ledger.js +467 -0
  93. package/src/kernel/project-manifest.js +205 -0
  94. package/src/knowledge-v3/index.js +1 -0
  95. package/src/knowledge-v3/lifecycle.js +290 -0
  96. package/src/knowledge.js +14 -7
  97. package/src/openprd.js +71 -2
  98. package/src/review-model.js +413 -0
  99. package/src/review-presentation.js +1 -1
  100. package/src/run-harness.js +431 -37
  101. package/src/runtime/cli_runtime_README.md +28 -0
  102. package/src/runtime/errors.js +66 -0
  103. package/src/runtime/index.js +44 -0
  104. package/src/runtime/lane-schema.js +141 -0
  105. package/src/runtime/lane-store.js +279 -0
  106. package/src/runtime/task-runtime.js +449 -0
  107. package/src/runtime/workspace.js +179 -0
  108. package/src/runtime/write-set.js +206 -0
  109. package/src/session-binding.js +16 -3
  110. package/src/session-registry.js +59 -1
  111. package/src/upgrade/fleet-mutation.js +166 -0
  112. package/src/upgrade/fleet-transaction.js +398 -0
  113. package/src/upgrade/transaction-store.js +416 -0
  114. package/src/visual-compare-core.js +66 -27
  115. package/src/visual-compare.js +18 -12
  116. package/src/workspace-core.js +109 -7
  117. package/src/workspace-registry.js +39 -1
  118. package/src/workspace-workflow.js +18 -15
@@ -1,109 +1,154 @@
1
- # Vibe Coding 自动化三连:dev-check 自动重构、图标自动匹配、拼图证据入流
1
+ # OpenPrd 可解释项目控制平面与跨工具上下文升级
2
2
  > 语言规则:用户可见说明、PRD、spec 和 tasks 跟随用户当前主语言;无法判断时才使用简体中文兜底。PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词保留原文。
3
- - 版本: v0012
4
- - 负责人: Codex
3
+ - 版本: v0018
4
+ - 负责人: OpenPrd
5
5
  - 产品场景: 以 Agent 为主要使用场景
6
6
  - 场景模板: 以 Agent 为主要使用场景
7
7
  - 状态: synthesized
8
- - 生成时间: 2026-07-03 18:28:06
8
+ - 生成时间: 2026-07-10 23:07:12
9
9
  ## 元信息
10
10
 
11
- - 标题: Vibe Coding 自动化三连:dev-check 自动重构、图标自动匹配、拼图证据入流
12
- - 负责人: Codex
13
- - 状态: clarifying
14
- - 版本: v0012
11
+ - 标题: OpenPrd 可解释项目控制平面与跨工具上下文升级
12
+ - 负责人: OpenPrd
13
+ - 状态: classified
14
+ - 版本: v0018
15
15
  - 产品场景: 以 Agent 为主要使用场景
16
- - 日期: 2026-07-03
16
+ - 日期: 2026-07-10
17
17
 
18
18
  ## 问题
19
19
 
20
- - 问题陈述: OpenPrd 三项 Vibe Coding 自动化能力不足:1) dev-check 超行提醒停留在后续建议表格,用户不知如何处理,价值鸡肋;2) 开发新功能时图标最佳实践路由几乎从不自动触发(415 个图标相关会话仅 1 次真实接入图标库);3) 拼图/网格对齐证据板真实触发率低,证据图不在对话流中可视化,AI 自我审查作用未发挥。
21
- - 为什么是现在: 用户明确反馈不少人用了 OpenPrd 觉得疑惑它到底是干嘛的,希望有一套软件工程视角的标准流程引导;画布做了一半,需要继续对标白板工具补齐人机协同能力。
20
+ - 问题陈述: 统一项目事实、并发运行态和上下文编译,降低 token、延迟、错误目标与长期维护成本
21
+ - 为什么是现在: 0.1.19 已暴露多真相源、并发和跨版本迁移风险,需要在 0.1.20 建立兼容控制平面
22
22
  - 证据:
23
- - moticlaw docs/basic 平均行长 440-477 字符、37 行超 500 字符;.openprd 5.8GB,quality/reports 5118 份;artifacts/active 280 个版本目录、archive 0;对照组 ClipReady/gifeasy 年轻项目文档健康。
23
+ - 30 817 Codex 线程中,362 个具有 OpenPrd CLI 形态,共 3145 次调用;run --context 554 次,93 个线程重复调用,额外调用 271 次,单线程最多 22 次。
24
+ - 56 个同项目 OpenPrd 线程在 5 分钟内并发启动;当前 feature-list、loop-state、current state 和全局镜像缺少 claim、lease、CAS 与 write-set 冲突协议。
25
+ - 当前 run-harness 已出现 findSessionWorkspaceCandidates 被删除但仍调用,以及显式 session 在精确解析前被 active change 抢占的回归。
26
+ - 当前 v0017 与 remove-session-tracking change 混入前一个 Canvas 需求内容,证明局部 capture 与多投影可以形成语义污染。
27
+ - 本机持久范围发现 86 个 .openprd,版本跨 0.1.0、0.1.11、0.1.15、0.1.19;Home 级 Codex Skill 还被 Claude 适配内容和软链接污染。
24
28
 
25
29
  ## 用户与相关方
26
30
 
27
31
  - 主要用户:
28
- - Vibe Coding 方式做产品的产品经理
32
+ - 用自然语言驱动 Codex、Cursor、Claude Code 完成产品开发的非专业或半专业用户
33
+ - 在同一代码项目中并发运行多个 Agent、线程、worktree 的开发者
34
+ - 需要持续维护需求、代码健康、知识与版本迁移的项目负责人
29
35
  - 次要用户:
30
- - 待补充
36
+ - OpenPrd 集成与插件维护者
37
+ - 审阅业务范围、风险与验收结论的产品和业务协作者
31
38
  - 相关方:
32
- - OpenPrd 维护者
33
- - 在脏仓库或长程任务中依赖 loop 的项目协作者
39
+ - OpenPrd 产品与工程维护者
40
+ - OpenPrd 管理的本地项目所有者
41
+ - Codex、Cursor、Claude Code 适配层维护者
34
42
 
35
43
  ## 目标与成功标准
36
44
 
37
45
  - 目标:
38
- - 产品经理任何时刻都能一眼看到自己处在 7 步标准流程的哪一步和下一步动作
39
- - 画布接入评审方向导入与流程位置提示,让 PM 在白板上完成方向标注并把结论发回 Agent
46
+ - 用唯一 Project Ledger 管理项目业务事实,并把 current、task graph、review、knowledge index 等降为可重建投影
47
+ - Lane/Task Runtime 支持同项目多线程、多 Agent、多 worktree 安全 claim、lease、heartbeat、write-set 与 CAS
48
+ - 用 Context Compiler 向 Agent 提供最精准、最小 token、可缓存、可增量、可解释且默认只读的上下文
49
+ - 用 scoped Evidence 和 Gate 让局部任务不被无关项目债务阻断,同时保持发布级门禁
50
+ - 从同一 ReviewModel 生成小白可懂的业务视图和工程可执行视图,并保持同一 digest 与决策链
51
+ - 统一 Codex、Cursor、Claude Code 的 Adapter SPI、能力协商、事件归一和跨版本协议
52
+ - 把 Knowledge Evolution 变为有作用域、证据、有效期、替代链和可回滚的持续维护系统
53
+ - 安全将产品版本升级到 0.1.20,并刷新所有真实本地 OpenPrd 安装与旧项目
40
54
  - 成功指标:
41
- - openprd guide 在需求前/评审中/实现中/收口后各阶段输出正确的当前步骤与下一步
42
- - review.html 顶部展示流程位置条
43
- - 画布可一键导入当前评审的 designDirections 方向图卡片
55
+ - 相同 revision 与请求生成稳定 context digest;默认完整 Capsule 不超过 800 tokens,Delta 不超过 250 tokens
56
+ - Context warm cache p95 小于 100ms,cold build p95 小于 500ms;run --context 对业务状态零写入
57
+ - 同一 task 的 100 个并发 claim 只允许一个成功;CAS 与 write-set 压力测试零 lost update
58
+ - 显式 session/thread/task/work-unit 目标解析准确率 100%,active change 只在无精确索引时作为 fallback
59
+ - 业务 Review 不泄露内部命令和实现噪声,工程 Review 保持文件、任务、测试、证据和版本全链路可追溯
60
+ - Codex、Cursor、Claude Code 通过同一适配契约 fixture,能力缺口被明确表达而不伪装支持
61
+ - 所有真实活跃本地项目升级到 0.1.20,归档未改动,单项目回滚演练成功,Home Skill 不再出现跨适配器漂移
44
62
  - 验收目标:
45
- - 在 openprd 自身仓库通过单元测试与 standards/quality/run verify;用 Codex CLI 在本地跑一个桌面任务实测新流程效果并留下证据。
63
+ - 全量单元、集成、并发、迁移、回滚、性能和三平台契约测试通过
64
+ - 最新 Markdown/HTML 测试报告、质量报告、架构与视觉证据可追溯
65
+ - standards、quality、run verify 与 doctor 在发布/刷新前全部健康
66
+ - 所有真实项目刷新报告包含版本、checksum、备份、迁移结果和失败回滚状态
46
67
 
47
68
  ## 验证与创业闭环
48
69
 
49
70
  - 可触达社区:
50
- - 待补充
71
+ - 已经在本机真实项目中持续使用 OpenPrd、Codex、Cursor、Claude Code 的 Vibe Coding 用户与维护者
51
72
  - 第一批种子用户:
52
- - 待补充
73
+ - 当前 43 个活跃或真实旧项目的维护者
74
+ - 近一个月具有 OpenPrd CLI 行为的 362 个 Codex 线程代表的真实任务样本
53
75
  - 社区契合与触达依据:
54
- - 待补充
55
- - 当前替代方案: 待补充
76
+ - 团队本身就是高频 Vibe Coding 与多 Agent 协作者,拥有真实线程、真实项目、真实安装漂移和真实迁移样本,可以在自身工作流中完成 dogfood。
77
+ - 当前替代方案: 依赖 AGENTS.md、Skill、change/tasks、session binding、run-state、质量报告和人工记忆拼接上下文;发生冲突时靠重新运行 context、手工检查状态或切换线程。
56
78
  - 痛点与替代证据:
57
- - 待补充
79
+ - 重复 context、错误目标恢复、语义污染、全局 registry 膨胀、跨工具 Skill 漂移和 fleet 无事务更新均已在当前仓库与本机安装中复现。
58
80
  - 手工交付路径:
59
- - 待补充
81
+ - 先以兼容模式建立 manifest、事件信封、原子存储与 Ledger shadow-write,再逐层切换 Runtime、Context、Gate、Review、Knowledge 和 Adapter;每层均用真实项目 fixture 与旧版本 fixture 对账。
60
82
  - 手工作战卡:
61
- - 待补充
83
+ - 修复当前回归并冻结协议;建立 legacy/dual/ledger 三种存储模式;对每个旧项目执行 preflight、备份、临时生成、校验、原子替换与单项目回滚;按批次刷新 Home、Projects、Context 和活跃 worktree。
62
84
  - 承诺信号:
63
- - 待补充
64
- - 首个低成本验证: synthesize 生成 PRD 与 review.html 后走 change/tasks,再按任务实现并用 Codex CLI 本地桌面任务实测。
85
+ - 用户明确授权完整实施、自动解决中间问题并刷新全部真实本地版本
86
+ - 现有线程与安装盘点提供了可量化的前后对比基线
87
+ - 首个低成本验证: 在当前 OpenPrd 仓库先完成回归修复、项目 manifest、原子 Ledger、任务并发 Runtime 与只读 Context Capsule 的纵向闭环。
65
88
  - 先活下来方案:
66
- - 待补充
89
+ - 保持 0.1.x CLI 和现有生成文件兼容;新内核先 shadow-write,出现不一致时可切回 legacy read,禁止一次性破坏旧项目。
67
90
  - 付费验证信号:
68
- - 待补充
69
- - 第一版只做一件事: 待补充
70
- - 周末级验证: 待补充
91
+ - 本轮以真实使用频率、迁移覆盖、token 与执行时间下降、并发正确性和评审完成率作为价值证明,不引入商业收费动作。
92
+ - 第一版只做一件事: 0.1.20 首先交付可兼容的 Project Manifest、Event Envelope、Atomic Store、Project Ledger、Lane/Task Runtime、Context Capsule,以及安全 fleet 升级;双投影 Review、Adapter SPI 与 Knowledge Evolution 必须有可用纵向能力,但旧投影可保留兼容入口。
93
+ - 周末级验证: 用当前仓库、两个并发临时工作区、0.1.15/0.1.19 fixture 和 Home Skill 软链接 fixture 完成全链路演练。
71
94
  - 最小工具桥接:
72
- - 待补充
95
+ - 先修复 exact session 优先级并实现一个具备 expectedRevision、idempotencyKey、原子写入和可重建投影的 Ledger stream。
73
96
  - 产品化门槛:
74
- - 待补充
97
+ - 只有全量测试、并发压力、迁移幂等、回滚演练、三平台契约和真实项目 dry-run 均通过,才允许把 0.1.20 刷新到真实本地项目。
75
98
  - 第一批客户路径:
76
- - 待补充
77
- - 初始收费假设: 待补充
78
- - 客户 1 盈利路径: 待补充
99
+ - 先覆盖当前机器上的 OpenPrd 自身仓库与活跃项目,再把协议和迁移路径推广到其他 OpenPrd 用户。
100
+ - 初始收费假设: 本轮不改变开源 CLI 定价;价值通过更低上下文成本、更少返工和更稳定的长期项目维护体现。
101
+ - 客户 1 盈利路径: 单项目减少一次错误目标执行、一次全量 context 重注入或一次手工迁移回滚即可抵消升级成本。
79
102
  - 销售与增长纪律:
80
- - 待补充
81
- - 可逆性判断: 待补充
82
- - 客户真问题校验: 待补充
83
- - 价值观一致性: 待补充
103
+ - 先保证协议稳定、可回滚、可观测和旧项目兼容,再增加更多自动化;不以新增命令数量替代可验证的执行质量。
104
+ - 可逆性判断: 每个迁移阶段支持 legacy/dual/ledger 模式、preimage backup、幂等 migration id 与按项目 restore;归档和发布副本默认保持不可变。
105
+ - 客户真问题校验: 目标直接针对已观测的重复上下文、并发覆盖、错误目标、评审理解成本、跨版本漂移和长期知识失真,而不是为了架构整洁而重写。
106
+ - 价值观一致性: 坚持用户可理解、Agent 可执行、事实可追溯、风险可回滚、知识可持续演进的 OpenPrd 产品原则。
84
107
 
85
108
  ## 范围与非目标
86
109
 
87
110
  - 范围内:
88
- - dev-check 自动重构模式:默认开启,命中 attention/warning 时指示 Agent 本轮直接执行高内聚低耦合拆分(不丢功能),输出改为本次额外处理结果,并支持 --auto-refactor on/off 开关与收口确认话术
89
- - 图标最佳实践自动触发:asset-spec 增加功能图标行,design-starter/skills/catalog/hook 把新功能自动配图标写为默认行为
90
- - 拼图证据板强化:visual-compare 输出对话流嵌入 markdown,dev-check UI 文件补视觉证据提醒,skills/catalog 把网格对齐证据板写为界面布局场景默认动作
111
+ - Project Manifest、Event Envelope、Atomic Store、Project Ledger 与可重建投影
112
+ - Session/Lane/Task Runtime:claim、lease、heartbeat、write-set、CAS、worktree/branch trace
113
+ - Context Capsule、Delta、Cache、token budget、authority/freshness、引用解析与 secret redaction
114
+ - project/change/work-unit/task/lane/operation 分级 Gate 与 Evidence
115
+ - Review canonical model、业务/工程双投影、决策与 Canvas 标注绑定
116
+ - Knowledge v3 生命周期、检索预算、telemetry 分离、Learning/Growth 边界
117
+ - Codex/Cursor/Claude Code Adapter SPI、能力协商、runtime detection 与生成文件漂移修复
118
+ - 协议/reader/writer/adapter/projection 版本、N/N-1 兼容、幂等迁移、备份与回滚
119
+ - fleet nested legacy 扫描、symlink 安全、registry 隔离/压缩和真实本地项目批量刷新
120
+ - 面向普通用户的中文产品文案、i18n 提醒和 Review Studio 视觉交互验证
91
121
  - 范围外:
92
- - 画布实时多人协作
93
- - 重写画布为独立前端工程
94
- - 改动 Codex 线程桥接协议
122
+ - 不进行生产云端热修复、远程业务数据写入或替用户发布外部服务
123
+ - 不重写 Excalidraw/Canvas 引擎,不引入与控制平面无关的视觉资产系统
124
+ - 不静默删除历史 review、归档、release 副本或用户未提交源码改动
125
+ - 不在 0.1.20 直接移除全部 legacy 文件;先提供兼容投影和回滚窗口
126
+ - 不把 Codex、Cursor、Claude Code 不具备的生命周期能力伪装成已支持
127
+ - 不自动 push、npm publish 或创建远端 release,除非用户另行明确授权
95
128
 
96
129
  ## 场景与流程
97
130
 
98
131
  - 主流程:
99
- - PM 打开终端或让 Agent 运行 openprd guide,看到 7 步流程和当前位置,按提示进入下一步
100
- - PM 打开 review.html,顶部流程条显示当前在评审确认步;确认后进入方向选择
101
- - PM 打开画布点导入评审方向,3 个方向图变成卡片,圈选标注后用发送给 Codex 把结论发回
132
+ - Agent 进入已有项目,Adapter 识别运行环境,Context Compiler 基于 lane/task/revision 在预算内生成 Capsule 或 Delta
133
+ - 多个线程并发执行同一项目,Runtime task 和 write-set 原子 claim,冲突被结构化返回,不相交任务可并行
134
+ - 业务用户打开 Review,先看到问题、价值、范围、流程、风险和验收;工程视图从同一 model 展示 change/task/file/test/evidence
135
+ - 任务完成后 Evidence 只更新相关 task/work-unit 投影;阶段或发布门禁再聚合项目级质量
136
+ - 旧项目升级前生成 plan 与 backup,迁移到 dual 模式并验证;失败只回滚当前项目
137
+ - Knowledge 由 observation 进入 candidate,经证据验证后生效;过期、冲突或被替代的知识不再进入 Context
102
138
  - 边界情况:
103
- - 工作区还没有任何需求版本时 guide 显示第 1 步并给出起步动作
104
- - 当前评审没有 designDirections 时画布导入按钮提示暂无可导入方向
139
+ - 同一 session ID 在多个工作区有线索时不语义猜测,返回候选和安全阻断
140
+ - Agent 崩溃导致 lease 过期后,旧 heartbeat 不能覆盖新 claim
141
+ - Ledger JSONL 尾部半写、projection 损坏或 migration 重跑时可恢复且不重复应用
142
+ - workspace schema 过新时旧 writer 拒绝写入并说明最小兼容版本
143
+ - Home Skill 路径含跨目录 symlink 时拒绝跟随覆盖 canonical source,并给出可恢复迁移计划
144
+ - dirty worktree、detached worktree、归档、副本和 nested legacy 目录被明确分类,不误刷新
105
145
  - 失败模式:
106
- - 方向图片文件缺失时导入跳过该方向并提示,不中断其他方向导入
146
+ - expectedRevision 不一致时返回 OPENPRD_REVISION_CONFLICT,不覆盖新状态
147
+ - write-set 冲突时保留当前 claim 并返回冲突任务、owner、lease 与重试条件
148
+ - Context 超预算时按 authority、scope、freshness 和 relevance 确定性裁剪,并列出 excluded reason
149
+ - 迁移校验失败时用 preimage 恢复当前项目,registry 不提交该项目新版本
150
+ - Adapter 能力不足时生成 capability gap,不继续要求不存在的 hook 或 UI
151
+ - Review model digest 不匹配时不接受确认,CSS/artifact 重渲染不得改变业务 model digest
107
152
 
108
153
  ## 可视化图表
109
154
 
@@ -111,30 +156,30 @@
111
156
 
112
157
  ```mermaid
113
158
  flowchart LR
114
- entry["入口触发<br/>PM 打开终端或让 Agent 运行 openprd guide,看到 7 步流程和当前位置,按提示进入下一步"]
115
- experience["产品内步骤<br/>PM 打开 review.html,顶部流程条显示当前在评审确认步;确认后进入方向选择"]
116
- decision{"决策点<br/>工作区还没有任何需求版本时 guide 显示第 1 步并给出起步动作"}
117
- success(["成功结果<br/>openprd guide 在需求前/评审中/实现中/收口后各阶段输出正确的当前步骤与下一步"])
118
- failure[["失败与恢复<br/>方向图片文件缺失时导入跳过该方向并提示,不中断其他方向导入"]]
119
- entry -->|"PM 打开终端或让 Agent 运行 openprd guide,看到 7 步流程…"| experience
120
- experience -->|"PM 打开 review.html,顶部流程条显示当前在评审确认步;确认后进入方向…"| decision
121
- decision -->|"产品经理任何时刻都能一眼看到自己处在 7 步标准流程的哪一步和下一步动作"| success
122
- decision -.->|"方向图片文件缺失时导入跳过该方向并提示,不中断其他方向导入"| failure
159
+ entry["入口触发<br/>Agent 进入已有项目,Adapter 识别运行环境,Context Compiler 基于 lane/task/revis…"]
160
+ experience["产品内步骤<br/>多个线程并发执行同一项目,Runtime task 和 write-set 原子 claim,冲突被结构化返回,不相交任务…"]
161
+ decision{"决策点<br/>同一 session ID 在多个工作区有线索时不语义猜测,返回候选和安全阻断"}
162
+ success(["成功结果<br/>相同 revision 与请求生成稳定 context digest;默认完整 Capsule 不超过 800 tokens,…"])
163
+ failure[["失败与恢复<br/>expectedRevision 不一致时返回 OPENPRD_REVISION_CONFLICT,不覆盖新状态"]]
164
+ entry -->|"Agent 进入已有项目,Adapter 识别运行环境,Context Compi…"| experience
165
+ experience -->|"多个线程并发执行同一项目,Runtime task 和 write-set 原…"| decision
166
+ decision -->|"用唯一 Project Ledger 管理项目业务事实,并把 current、ta…"| success
167
+ decision -.->|"expectedRevision 不一致时返回 OPENPRD_REVISION_…"| failure
123
168
  ```
124
169
 
125
170
  ### 架构
126
171
 
127
172
  ```mermaid
128
173
  flowchart LR
129
- users["主要用户<br/>用 Vibe Coding 方式做产品的产品经理"]
174
+ users["主要用户<br/>用自然语言驱动 Codex、Cursor、Claude Code 完成产品开发的非专业或半专业用户 · 在同一代码项目中并发运…"]
130
175
  subgraph solution["方案边界"]
131
- experience["Agent 使用场景层<br/>PM 打开终端或让 Agent 运行 openprd guide,看到 7 步流程和当前位置,按提示进入下一步 · PM 打开…"]
132
- core["核心产品逻辑<br/>OpenPrd 三项 Vibe Coding 自动化能力不足:1) dev-check 超行提醒停留在后续建议表格,用户不知如…"]
133
- integrations["依赖与集成<br/>Codex 原生 imagegen(生成 3 方向交互稿图片);现有 review artifact 渲染与 hash 校验管…"]
134
- governance[["约束与可靠性<br/>提交与状态写回不能泄露用户本地无关改动或敏感信息。"]]
135
- delivery["验证与交接<br/>openprd guide 在需求前/评审中/实现中/收口后各阶段输出正确的当前步骤与下一步 · review.html 顶部…"]
176
+ experience["Agent 使用场景层<br/>Agent 进入已有项目,Adapter 识别运行环境,Context Compiler 基于 lane/task/revis…"]
177
+ core["核心产品逻辑<br/>统一项目事实、并发运行态和上下文编译,降低 token、延迟、错误目标与长期维护成本"]
178
+ integrations["依赖与集成<br/>现有 OpenPrd CLI、skills、hooks、workspace schema、review renderer、qu…"]
179
+ governance[["约束与可靠性<br/>上下文与日志不得包含 API key、token、账号、个人隐私或未脱敏 prompt 原文 · 迁移备份只包含当前任务需要的…"]]
180
+ delivery["验证与交接<br/>相同 revision 与请求生成稳定 context digest;默认完整 Capsule 不超过 800 tokens,…"]
136
181
  end
137
- users -->|"PM 打开终端或让 Agent 运行 openprd guide,看到 7 步…"| experience
182
+ users -->|"Agent 进入已有项目,Adapter 识别运行环境,Context Com…"| experience
138
183
  experience -->|"产品动作与编排"| core
139
184
  core -->|"依赖与外部服务"| integrations
140
185
  core -.->|"策略、可靠性与合规"| governance
@@ -146,58 +191,99 @@ flowchart LR
146
191
  ## 需求
147
192
 
148
193
  - 功能需求:
149
- - guide 命令基于工作区状态推断 7 步流程位置
150
- - review.html 渲染 stepper
151
- - canvas /api/review-directions 返回方向元数据与图片
152
- - canvas 前端导入方向卡片组
194
+ - 提供 project manifest、ledger append/read/head/verify/rebuild、projection replay API
195
+ - 提供 task claim/heartbeat/release、lease recovery、write-set conflict、lane binding API 与 CLI
196
+ - 提供 context compile/diff/cache/render/reference API,保持 run --context 兼容入口
197
+ - 提供 scoped gate/evidence evaluation 与明确 approval ID 绑定
198
+ - 提供 ReviewModel 业务/工程投影与稳定确认合同
199
+ - 提供 adapter detect/capabilities/install/normalize/render/handoff SPI
200
+ - 提供 Knowledge v3 validate/promote/deprecate/supersede/query 生命周期
201
+ - 提供 upgrade plan/dry-run/backup/atomic apply/restore 与 fleet 安全批处理
202
+ - 提供 registry prune/compact 与测试环境 OPENPRD_HOME 隔离
153
203
  - 非功能需求:
154
- - 不新增外部依赖
155
- - guide 与画布 API 只读工作区状态,不写状态
156
- - 全部文案用 PM 能看懂的普通语言
204
+ - Node.js 20.19+,优先零新增运行时依赖,复用现有 YAML 与 Sharp
205
+ - 所有核心写入具备原子替换、revision、幂等键、checksum crash recovery
206
+ - 读取路径默认无业务状态写入;telemetry 与事实真相分离
207
+ - 面向普通用户的默认文案使用简体中文、结果导向且不暴露内部实现术语
208
+ - 新旧 CLI 在一个兼容周期内保持字段与退出码兼容,并标注 deprecated 字段
209
+ - 每个迁移步骤可重复执行、可审计、可单项目回滚
157
210
  - 业务规则:
158
- - designDirections 仅在需求被判定涉及界面场景时要求;方向选定必须以 user-confirmed 来源写回;落选方向归档不删除。
211
+ - Project Ledger 是业务事实唯一真相,Harness 只存运行态,Review/Current/Task/Knowledge Index 是投影
212
+ - 显式 ID 优先于语义和 active change fallback;不能用最近状态猜用户目标
213
+ - 局部 task 成功不因无关 workspace debt 失败;发布、handoff 和 fleet 刷新仍执行项目级门禁
214
+ - Knowledge 必须有作用域、来源和证据;telemetry 不得改变知识正文或检索真相
215
+ - 归档和备份默认不可变;真实刷新范围必须由 inventory 分类而非仅按目录名猜测
216
+ - 版本 0.1.20 验证通过前不得刷新真实项目
159
217
 
160
218
  ## 业务护栏
161
219
 
162
220
  - 成本来源:
163
- - imagegen 每方向一次调用,共 3 次;报告清理为本地文件操作无外部成本。
221
+ - 全量线程与项目扫描、并发压力测试、Review 视觉验证、旧项目备份和批量迁移
222
+ - 重复上下文注入和过宽文档读取造成的 token 与执行时间
164
223
  - 额度与限制:
165
- - docs-compact 单次只处理 docs/basic 下的标准文档;retention 默认保留最近 30 份报告可配置。
224
+ - 默认 context Capsule 800 tokens,Delta 250 tokens;超预算需可解释裁剪
225
+ - 真实 fleet 按 Home、Projects、Context、活跃 worktree 分批执行,归档不纳入
226
+ - 单项目迁移失败不继续覆盖该项目,也不阻断已经验证成功的其他项目
166
227
  - 滥用防护:
167
- - docs-compact 重写稿默认写到 sibling draft 待确认,不直接覆盖原文档;retention 不触碰 evidence 目录中被 latest 报告引用的文件。
228
+ - 高风险操作绑定明确 lane/operation approval ID,短句确认不能放行其他 lane
229
+ - Symlink 路径、too-new schema、dirty archive 分类不明时拒绝破坏性写入
230
+ - Context 编译进行 secret redaction,Knowledge promotion 需要证据和 reviewer
168
231
  - 监控信号:
169
- - standards verify 输出 docsQuality 结果;doctor 输出 .openprd 体积与报告数量提示。
232
+ - context token、cold/warm p50/p95、cache hit、included/excluded reason
233
+ - claim 冲突、lease recovery、CAS conflict、lost update、write-set overlap
234
+ - projection digest、migration digest、rollback result、adapter drift、registry stale count
235
+ - 业务 Review 完成率、需求修订次数、用户可理解性检查与技术词泄漏
170
236
  - 报警阈值:
171
- - 单行超 300 字符 warning;prd.md 落后最新版本超过 20 个版本 warning;quality/reports 超过 200 份提示清理。
237
+ - 任何 lost update、错误项目写入、归档 checksum 变化、secret 泄漏或无法回滚均为阻断
238
+ - Context 超预算、p95 超 SLO、adapter fixture 不一致或 migration 对账不一致阻断真实 fleet
239
+ - 质量报告 productionReady=false 时不得声称整体完成
172
240
  - 止损动作:
173
- - 任一清理动作失败即中止并保留原状;归档失败回退为仅提示不移动。
241
+ - 切回 legacy read/storageMode,停止后续批次并按项目 restore preimage
242
+ - 保留失败报告、revision、digest 和 capability gap,不用写死逻辑绕过门禁
243
+ - 对分类不明的归档、副本或 symlink 目标保持只读
174
244
 
175
245
  ## 约束、依赖与风险
176
246
 
177
247
  - 技术约束:
178
- - 改动集中在 src/standards.jssrc/quality.js、src/openspec/change-lifecycle.js、src/review-presentation.js、src/html-artifacts.js,新增 src/docs-compact.js;skills 生成源同步 openprd-shared / openprd-frontend-design / command-catalog。
248
+ - 保持现有 CLIJSONL/JSON workspace Codex/Claude/Cursor 生成路径的向后兼容
249
+ - 当前 git worktree 含既有 i18n 和 unfinished session 修改,必须保留用户改动并分层整合,禁止 reset/stash
250
+ - Repo-local canonical source 与生成文件必须区分,写入前检查任一路径祖先是否为 symlink
251
+ - 测试必须使用隔离 OPENPRD_HOME,禁止污染真实全局 registry
252
+ - Review Studio 改动必须复用现有视觉系统并提供前后、焦点、验证与对齐证据
179
253
  - 合规要求:
180
- - 提交与状态写回不能泄露用户本地无关改动或敏感信息。
254
+ - 上下文与日志不得包含 API key、token、账号、个人隐私或未脱敏 prompt 原文
255
+ - 迁移备份只包含当前任务需要的最小文件并保留本机权限,不向外发送
256
+ - 不修改用户归档、远程仓库或生产环境
181
257
  - 依赖:
182
- - Codex 原生 imagegen(生成 3 方向交互稿图片);现有 review artifact 渲染与 hash 校验管线。
258
+ - 现有 OpenPrd CLI、skills、hooks、workspace schema、review renderer、quality/standards/test infrastructure
259
+ - 本机 Node.js、npm 全局软链接与真实 OpenPrd 项目 inventory
260
+ - Codex、Cursor、Claude Code 当前可观测的 runtime capability 与生成协议
183
261
  - 假设:
184
- - imagegen 由 Codex 原生 Image 2 提供,OpenPrd 只消费图片路径;review.html 静态打开,选择结果通过现有 canvas/browser handoff 或 review --mark 通道回传;巨行阈值默认 300 字符可配置。
262
+ - 0.1.20 可在不移除 legacy 文件的前提下交付兼容控制平面纵向能力
263
+ - 现有 43 个活跃真实项目与历史 0.1.15/0.1.19 fixture 足以覆盖主要迁移形态
264
+ - Codex、Cursor、Claude Code 平台差异可通过 capability negotiation 明确表达
185
265
  - 风险:
186
- - 流程步骤定义与既有 lane/gate 概念不完全一一对应,guide 只做展示层推断,不改门禁行为
266
+ - 改造横跨状态、hook、CLI、review、knowledge 与迁移,若没有兼容分层会形成大爆炸式回归
267
+ - 当前 dirty worktree 与语义污染状态可能把既有用户改动误当成稳定基线
268
+ - Home 级 Skill symlink 与通用 skills-sync 可能再次制造跨适配器漂移
269
+ - 全局 registry 已被测试临时目录污染,直接 compact 或 fleet 可能误删仍需的定位索引
270
+ - Review 双投影若没有 canonical digest 会再次产生两套真相
187
271
  - 开放问题:
188
- - 画布方向卡片是否需要内置投票/评分组件,留到下一轮看使用反馈
272
+ - Ledger 默认读路径在 0.1.20 是否切换到 dual-read,或先保持 legacy-read + shadow ledger;本轮以安全对账结果决定
273
+ - Home 全局 Skill 最终采用 adapter-neutral shared 内容还是让外部 skills-sync 排除 OpenPrd;本轮优先实现兼容 shared 内容与 symlink fence
274
+ - 历史 Documents 归档保持不可变,只验证 scanner 排除,不纳入版本刷新
189
275
 
190
276
  ## 类型专项模块
191
277
 
192
278
  - 类型: Agent 使用场景专项
193
- - humanAgentContract: 用户决定是否进入 loop、是否要求 commit、是否接受 override;Agent 负责在安全前提下创建隔离执行环境,并维护状态与证据闭环。
194
- - autonomyBoundary: Agent 可以在 loop 运行前准备 worktree、检查脏状态并收集 touched files,但不能在用户未授权 commit 的情况下自动提交,也不能在高风险脏仓库里静默绕过门禁。
195
- - toolBoundary: 优先使用本地 Git OpenPrd loop 状态完成这次能力,不引入新的远端托管或发布前置依赖。
196
- - stateModel: change 进入 loop 后,先绑定隔离执行环境,再逐任务 run / verify / finish / commit,并把 worktreebranchcommit 与测试报告写回同一条状态链。
197
- - evalPlan: 通过 loop 单测、worktree / dirty repo 场景测试、状态持久化测试,以及一次真实隔离 worktree 的串行回归验证这次改动。
279
+ - humanAgentContract: 用户负责目标、范围和高风险外部动作授权;Agent 可在已授权范围内完成架构实现、测试、迁移、回滚和本地刷新。所有事实变更写入 Ledger,所有运行 ownership 写入 Lane/Task Runtime。
280
+ - autonomyBoundary: 本轮用户明确授权无需中途确认,Agent 可自动处理本地源码和本地 OpenPrd 项目;不得扩展到远程 push、npm publish、生产云写入、归档篡改或敏感信息外发。
281
+ - toolBoundary: 使用当前工作区代码、OpenPrd CLI、测试工具、Product Design 审计与视觉证据、本机只读 inventory;所有文件编辑通过可审计补丁,真实迁移先 dry-run 和备份。
282
+ - stateModel: Project Ledger 记录业务事实;Manifest 记录模型与兼容版本;Lane/Task Runtime 记录临时 ownership;Context Capsule 是只读编译结果;Review、Current、Task GraphKnowledge IndexLearning 是可重建投影。
283
+ - evalPlan: 使用 characterization、unit、integration、concurrency、crash recovery、migration、rollback、performance、adapter parity、visual comparison、full regression、standards/quality/run/doctor 和真实 fleet readback 逐层验收。
198
284
 
199
285
  ## 交接
200
286
 
201
- - 负责人: Codex
202
- - 下一步: synthesize 生成 PRD 与 review.html 后走 change/tasks,再按任务实现并用 Codex CLI 本地桌面任务实测。
203
- - 目标系统: openprd CLI 自身仓库(harness-engineer/openprd)。
287
+ - 负责人: OpenPrd
288
+ - 下一步: 按阶段完成 P0 回归与协议冻结、P1-P8 纵向实现、全量验证、0.1.20 版本升级和真实本地项目分批刷新
289
+ - 目标系统: OpenPrd CLI、当前源码仓库、本机全局集成和所有真实活跃 OpenPrd 项目
@@ -0,0 +1,176 @@
1
+ {
2
+ "diagram": {
3
+ "type": "map",
4
+ "note": "从同一项目事实生成业务和工程两种阅读视图。"
5
+ },
6
+ "mapNodes": {
7
+ "problem": {
8
+ "title": "当前问题",
9
+ "text": "多份状态让上下文重复且目标易错"
10
+ },
11
+ "goal": {
12
+ "title": "升级目标",
13
+ "text": "一次编译精准上下文并安全并发"
14
+ },
15
+ "scope": {
16
+ "title": "本次范围",
17
+ "text": "统一事实、运行态、评审与迁移"
18
+ },
19
+ "flow": {
20
+ "title": "使用流程",
21
+ "text": "识别任务、领取执行、留证沉淀"
22
+ },
23
+ "risk": {
24
+ "title": "主要风险",
25
+ "text": "旧项目和本地改动必须可回滚"
26
+ }
27
+ },
28
+ "flowNodes": [
29
+ {
30
+ "id": "step1",
31
+ "text": "识别项目版本与当前任务"
32
+ },
33
+ {
34
+ "id": "step2",
35
+ "text": "按预算生成上下文并安全执行"
36
+ },
37
+ {
38
+ "id": "step3",
39
+ "text": "验证结果并沉淀可复用知识"
40
+ }
41
+ ],
42
+ "flowEdges": [
43
+ {
44
+ "from": "step1",
45
+ "to": "step2"
46
+ },
47
+ {
48
+ "from": "step2",
49
+ "to": "step3"
50
+ }
51
+ ],
52
+ "panels": {
53
+ "flow": [
54
+ {
55
+ "summary": "优化进入项目",
56
+ "detail": "Agent 先识别项目版本、当前任务和可用能力,只读取本次需要的事实。"
57
+ },
58
+ {
59
+ "summary": "新增安全领取",
60
+ "detail": "多个线程同时工作时先领取任务和文件范围,冲突会明确说明而不是互相覆盖。"
61
+ },
62
+ {
63
+ "summary": "优化执行上下文",
64
+ "detail": "首次提供完整摘要,后续只补变化内容,减少重复阅读和等待。"
65
+ },
66
+ {
67
+ "summary": "新增分级验收",
68
+ "detail": "单个任务先验证自己的结果,阶段和发布再汇总整个项目的健康度。"
69
+ },
70
+ {
71
+ "summary": "新增安全升级",
72
+ "detail": "旧项目先预检和备份,逐个升级;单个项目失败只回滚自己。"
73
+ }
74
+ ],
75
+ "function": [
76
+ {
77
+ "summary": "新增项目账本",
78
+ "detail": "需求、决定、任务和证据都从一份可追溯事实生成,不再由多份当前状态互相覆盖。"
79
+ },
80
+ {
81
+ "summary": "新增并行协调",
82
+ "detail": "任务领取、有效期、文件范围和版本检查共同保障多线程协作。"
83
+ },
84
+ {
85
+ "summary": "优化上下文",
86
+ "detail": "上下文按任务、风险和预算编译,并解释哪些内容被纳入或省略。"
87
+ },
88
+ {
89
+ "summary": "新增双视图",
90
+ "detail": "业务用户先看价值、范围、风险和验收,工程人员从同一结论查看任务与证据。"
91
+ },
92
+ {
93
+ "summary": "优化知识沉淀",
94
+ "detail": "经验有来源、适用范围、有效期和替代关系,过期内容不会继续误导 Agent。"
95
+ },
96
+ {
97
+ "summary": "统一三种工具",
98
+ "detail": "Codex、Cursor 和 Claude Code 使用同一适配合同,并如实说明能力差异。"
99
+ },
100
+ {
101
+ "summary": "新增版本协议",
102
+ "detail": "项目会明确记录可读写版本、迁移历史和回滚信息,避免新旧工具混用误写。"
103
+ }
104
+ ],
105
+ "guardrail": [
106
+ {
107
+ "summary": "限制上下文",
108
+ "detail": "完整摘要和增量摘要都有明确预算,超出时按重要性稳定裁剪。"
109
+ },
110
+ {
111
+ "summary": "保护用户改动",
112
+ "detail": "未提交代码、归档和发布副本不会被静默覆盖或清理。"
113
+ },
114
+ {
115
+ "summary": "隔离敏感信息",
116
+ "detail": "密钥、账号和个人信息不会进入上下文缓存、日志或知识正文。"
117
+ },
118
+ {
119
+ "summary": "保留回退路径",
120
+ "detail": "新账本先与旧状态并行对账,验证失败可以切回旧读取方式。"
121
+ },
122
+ {
123
+ "summary": "保持归档不变",
124
+ "detail": "历史备份只用于兼容验证,不纳入真实版本刷新。"
125
+ }
126
+ ],
127
+ "risk": [
128
+ {
129
+ "summary": "防止整体重写",
130
+ "detail": "升级按原子存储、账本、运行态、上下文、适配、评审和知识逐层切换。"
131
+ },
132
+ {
133
+ "summary": "修复旧状态污染",
134
+ "detail": "新的 v0018 与控制平面 change 取代混入 Canvas 内容的旧快照。"
135
+ },
136
+ {
137
+ "summary": "修复工具漂移",
138
+ "detail": "共享 Skill 内容不再写死某个平台,平台差异留在各自命令和运行能力中。"
139
+ },
140
+ {
141
+ "summary": "清理测试污染",
142
+ "detail": "测试改用隔离的 OpenPrd Home,真实 registry 再经过备份和有效路径校验后压缩。"
143
+ },
144
+ {
145
+ "summary": "防止双重真相",
146
+ "detail": "业务和工程评审共享同一模型摘要,样式变化不会改变已确认的业务结论。"
147
+ }
148
+ ]
149
+ },
150
+ "designDirections": {
151
+ "note": "三种方向均沿用现有 OpenPrd 视觉语言;本轮内部选择双轨证据工作台。",
152
+ "directions": [
153
+ {
154
+ "id": "guided-business-review",
155
+ "title": "业务评审导览",
156
+ "image": ".openprd/design/active/review-studio-v020-directions/crops/01.png",
157
+ "summary": "逐块引导非技术用户完成评审",
158
+ "tradeoff": "最易理解,但工程追溯需要另开入口"
159
+ },
160
+ {
161
+ "id": "dual-evidence-workbench",
162
+ "title": "双轨证据工作台",
163
+ "image": ".openprd/design/active/review-studio-v020-directions/crops/02.png",
164
+ "summary": "同一结论切换业务与工程视角",
165
+ "tradeoff": "兼顾理解与追溯,需控制默认密度"
166
+ },
167
+ {
168
+ "id": "project-cockpit",
169
+ "title": "项目驾驶舱",
170
+ "image": ".openprd/design/active/review-studio-v020-directions/crops/03.png",
171
+ "summary": "一屏掌握项目健康与并行任务",
172
+ "tradeoff": "全局感最强,但超出首版评审范围"
173
+ }
174
+ ]
175
+ }
176
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 1,
3
+ "defaultLanguage": "zh-Hans",
4
+ "supportedLanguages": [
5
+ "zh-Hans",
6
+ "en"
7
+ ],
8
+ "enforceOnDevCheck": true,
9
+ "platforms": [],
10
+ "translationStrategy": "key-value-file",
11
+ "notes": "用户可随时修改此文件来调整默认语言、支持语种和检查策略"
12
+ }
@@ -0,0 +1,6 @@
1
+ {"schema":"openprd.event","version":1,"eventType":"workflow.next","projectId":"project_a63099e6-6438-424c-ac39-49337f485ede","streamId":"workflow:workspace","revision":1,"occurredAt":"2026-07-10T15:49:37.758Z","actor":{"type":"openprd-cli"},"causationId":null,"correlationId":null,"payload":{"type":"next","at":"2026-07-10 23:49:37","nextAction":"freeze","reason":"已有版本化 PRD,交接前应先 freeze。","missingRequiredFields":0},"metadata":{"compatibilityProjection":".openprd/state/events.jsonl","ledgerPosition":1},"eventId":"evt_11631ea88d6fab75bc5c8cafe42f6053"}
2
+ {"schema":"openprd.event","version":1,"eventType":"workflow.next","projectId":"project_a63099e6-6438-424c-ac39-49337f485ede","streamId":"workflow:workspace","revision":2,"occurredAt":"2026-07-10T15:50:35.624Z","actor":{"type":"openprd-cli"},"causationId":null,"correlationId":null,"payload":{"type":"next","at":"2026-07-10 23:50:35","nextAction":"freeze","reason":"已有版本化 PRD,交接前应先 freeze。","missingRequiredFields":0},"metadata":{"compatibilityProjection":".openprd/state/events.jsonl","ledgerPosition":2},"eventId":"evt_8a85b3115c9b80b9fa515af4425266e3"}
3
+ {"schema":"openprd.event","version":1,"eventType":"workflow.next","projectId":"project_a63099e6-6438-424c-ac39-49337f485ede","streamId":"workflow:workspace","revision":3,"occurredAt":"2026-07-10T15:50:54.664Z","actor":{"type":"openprd-cli"},"causationId":null,"correlationId":null,"payload":{"type":"next","at":"2026-07-10 23:50:54","nextAction":"freeze","reason":"已有版本化 PRD,交接前应先 freeze。","missingRequiredFields":0},"metadata":{"compatibilityProjection":".openprd/state/events.jsonl","ledgerPosition":3},"eventId":"evt_ac6e2da11c56e11bb7d9ed5a28235548"}
4
+ {"schema":"openprd.event","version":1,"eventType":"workflow.next","projectId":"project_a63099e6-6438-424c-ac39-49337f485ede","streamId":"workflow:workspace","revision":4,"occurredAt":"2026-07-10T15:50:54.891Z","actor":{"type":"openprd-cli"},"causationId":null,"correlationId":null,"payload":{"type":"next","at":"2026-07-10 23:50:54","nextAction":"freeze","reason":"已有版本化 PRD,交接前应先 freeze。","missingRequiredFields":0},"metadata":{"compatibilityProjection":".openprd/state/events.jsonl","ledgerPosition":4},"eventId":"evt_297d1bb2d4f438b418122ed4784814ce"}
5
+ {"schema":"openprd.event","version":1,"eventType":"workflow.next","projectId":"project_a63099e6-6438-424c-ac39-49337f485ede","streamId":"workflow:workspace","revision":5,"occurredAt":"2026-07-10T15:51:01.843Z","actor":{"type":"openprd-cli"},"causationId":null,"correlationId":null,"payload":{"type":"next","at":"2026-07-10 23:51:01","nextAction":"freeze","reason":"已有版本化 PRD,交接前应先 freeze。","missingRequiredFields":0},"metadata":{"compatibilityProjection":".openprd/state/events.jsonl","ledgerPosition":5},"eventId":"evt_5bab375b038d07987fd886e782ab736b"}
6
+ {"schema":"openprd.event","version":1,"eventType":"workflow.work.units.backfilled","projectId":"project_a63099e6-6438-424c-ac39-49337f485ede","streamId":"workflow:workspace","revision":6,"occurredAt":"2026-07-11T11:23:43.123Z","actor":{"type":"openprd-cli"},"causationId":null,"correlationId":null,"payload":{"type":"work_units_backfilled","at":"2026-07-11 19:23:43","versions":18,"changedVersions":18},"metadata":{"compatibilityProjection":".openprd/state/events.jsonl","ledgerPosition":6},"eventId":"evt_19b2167661a74c24174705119098e339"}
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema": "openprd.stream-head",
3
+ "version": 1,
4
+ "projectId": "project_a63099e6-6438-424c-ac39-49337f485ede",
5
+ "streamId": "workflow:workspace",
6
+ "revision": 6,
7
+ "lastEventId": "evt_19b2167661a74c24174705119098e339",
8
+ "ledgerPosition": 6,
9
+ "updatedAt": "2026-07-11T11:23:43.123Z"
10
+ }