@openprd/cli 0.1.19 → 0.1.22
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/changes/openprd-control-plane-v020/.openprd.yaml +2 -0
- package/.openprd/changes/openprd-control-plane-v020/design.md +78 -0
- package/.openprd/changes/openprd-control-plane-v020/proposal.md +54 -0
- package/.openprd/changes/openprd-control-plane-v020/specs/agent-requirements/spec.md +16 -0
- package/.openprd/changes/openprd-control-plane-v020/task-events.jsonl +27 -0
- package/.openprd/changes/openprd-control-plane-v020/tasks-002.md +35 -0
- package/.openprd/changes/openprd-control-plane-v020/tasks.md +427 -0
- package/.openprd/changes/remove-session-tracking-humane-approval/.openprd.yaml +2 -0
- package/.openprd/changes/remove-session-tracking-humane-approval/design.md +52 -0
- package/.openprd/changes/remove-session-tracking-humane-approval/proposal.md +35 -0
- package/.openprd/changes/remove-session-tracking-humane-approval/specs/agent-requirements/spec.md +16 -0
- package/.openprd/changes/remove-session-tracking-humane-approval/task-events.jsonl +1 -0
- package/.openprd/changes/remove-session-tracking-humane-approval/tasks.md +170 -0
- package/.openprd/design/active/asset-spec.md +19 -14
- package/.openprd/design/active/direction-plan.md +19 -3
- package/.openprd/design/active/facts-sheet.md +16 -7
- package/.openprd/design/active/image-preflight.md +6 -5
- package/.openprd/design/active/review-studio-v020-directions/compare-plan.json +34 -0
- package/.openprd/design/active/review-studio-v020-directions/contact-sheet.jpg +0 -0
- package/.openprd/design/active/review-studio-v020-directions/crops/01.png +0 -0
- package/.openprd/design/active/review-studio-v020-directions/crops/02.png +0 -0
- package/.openprd/design/active/review-studio-v020-directions/crops/03.png +0 -0
- package/.openprd/design/active/review-studio-v020-directions/focus-board.template.json +69 -0
- package/.openprd/design/active/review-studio-v020-directions/parallel-board.template.json +45 -0
- package/.openprd/design/active/review-studio-v020-directions/reference-set.json +143 -0
- package/.openprd/design/active/review-studio-v020-directions/source.png +0 -0
- package/.openprd/design/active/selected-direction.md +23 -9
- package/.openprd/engagements/active/control-plane-architecture.json +203 -0
- package/.openprd/engagements/active/control-plane-intake.json +418 -0
- package/.openprd/engagements/active/prd.md +183 -119
- package/.openprd/engagements/active/review-presentation-v0018.json +176 -0
- package/.openprd/i18n-config.json +12 -0
- package/.openprd/ledger/events.jsonl +6 -0
- package/.openprd/ledger/heads/ebea1a71a9daa566f1c91b53.json +10 -0
- package/.openprd/manifest.json +21 -0
- package/AGENTS.md +7 -6
- package/README.md +31 -29
- package/README_EN.md +36 -39
- package/package.json +1 -1
- package/skills/openprd-frontend-design/SKILL.md +16 -0
- package/skills/openprd-harness/SKILL.md +7 -7
- package/skills/openprd-quality/SKILL.md +1 -1
- package/skills/openprd-requirement-intake/SKILL.md +1 -1
- package/skills/openprd-shared/SKILL.md +6 -6
- package/src/adapters/adapter-spi.js +193 -0
- package/src/adapters/capability-envelope.js +98 -0
- package/src/adapters/event-normalizer.js +55 -0
- package/src/adapters/index.js +4 -0
- package/src/adapters/install-safety.js +249 -0
- package/src/agent-canonical-content.js +4 -2
- package/src/agent-integration.js +169 -46
- package/src/cli/args.js +63 -4
- package/src/cli/gate-print.js +17 -0
- package/src/cli/quality-commands.js +18 -0
- package/src/cli/quality-print.js +10 -0
- package/src/cli/runtime-print.js +24 -0
- package/src/codex-hook-runner-template.mjs +129 -199
- package/src/codex-runtime.js +48 -5
- package/src/context/cache.js +245 -0
- package/src/context/compiler.js +438 -0
- package/src/context/constants.js +30 -0
- package/src/context/index.js +39 -0
- package/src/context/redaction.js +84 -0
- package/src/context/stable.js +69 -0
- package/src/context/telemetry.js +42 -0
- package/src/dev-standards.js +57 -0
- package/src/fleet.js +112 -95
- package/src/gates/index.js +2 -0
- package/src/gates/scoped-gates.js +256 -0
- package/src/gates/store.js +126 -0
- package/src/gates/workspace.js +41 -0
- package/src/html-artifacts.js +725 -28
- package/src/kernel/atomic-store.js +299 -0
- package/src/kernel/event-envelope.js +166 -0
- package/src/kernel/index.js +4 -0
- package/src/kernel/project-ledger.js +467 -0
- package/src/kernel/project-manifest.js +205 -0
- package/src/knowledge-v3/index.js +1 -0
- package/src/knowledge-v3/lifecycle.js +290 -0
- package/src/knowledge.js +14 -7
- package/src/openprd.js +71 -2
- package/src/review-model.js +413 -0
- package/src/review-presentation.js +1 -1
- package/src/run-harness.js +432 -38
- package/src/runtime/cli_runtime_README.md +28 -0
- package/src/runtime/errors.js +66 -0
- package/src/runtime/index.js +44 -0
- package/src/runtime/lane-schema.js +141 -0
- package/src/runtime/lane-store.js +279 -0
- package/src/runtime/task-runtime.js +449 -0
- package/src/runtime/workspace.js +179 -0
- package/src/runtime/write-set.js +206 -0
- package/src/session-binding.js +16 -3
- package/src/session-registry.js +59 -1
- package/src/upgrade/fleet-mutation.js +166 -0
- package/src/upgrade/fleet-transaction.js +398 -0
- package/src/upgrade/transaction-store.js +416 -0
- package/src/visual-compare-core.js +66 -27
- package/src/visual-compare.js +18 -12
- package/src/workspace-core.js +109 -7
- package/src/workspace-registry.js +39 -1
- package/src/workspace-workflow.js +18 -15
|
@@ -1,122 +1,154 @@
|
|
|
1
|
-
#
|
|
1
|
+
# OpenPrd 可解释项目控制平面与跨工具上下文升级
|
|
2
2
|
> 语言规则:用户可见说明、PRD、spec 和 tasks 跟随用户当前主语言;无法判断时才使用简体中文兜底。PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词保留原文。
|
|
3
|
-
- 版本:
|
|
3
|
+
- 版本: v0018
|
|
4
4
|
- 负责人: OpenPrd
|
|
5
5
|
- 产品场景: 以 Agent 为主要使用场景
|
|
6
6
|
- 场景模板: 以 Agent 为主要使用场景
|
|
7
7
|
- 状态: synthesized
|
|
8
|
-
- 生成时间: 2026-07-
|
|
8
|
+
- 生成时间: 2026-07-10 23:07:12
|
|
9
9
|
## 元信息
|
|
10
10
|
|
|
11
|
-
- 标题:
|
|
11
|
+
- 标题: OpenPrd 可解释项目控制平面与跨工具上下文升级
|
|
12
12
|
- 负责人: OpenPrd
|
|
13
|
-
- 状态:
|
|
14
|
-
- 版本:
|
|
13
|
+
- 状态: classified
|
|
14
|
+
- 版本: v0018
|
|
15
15
|
- 产品场景: 以 Agent 为主要使用场景
|
|
16
|
-
- 日期: 2026-07-
|
|
16
|
+
- 日期: 2026-07-10
|
|
17
17
|
|
|
18
18
|
## 问题
|
|
19
19
|
|
|
20
|
-
- 问题陈述:
|
|
21
|
-
- 为什么是现在:
|
|
20
|
+
- 问题陈述: 统一项目事实、并发运行态和上下文编译,降低 token、延迟、错误目标与长期维护成本
|
|
21
|
+
- 为什么是现在: 0.1.19 已暴露多真相源、并发和跨版本迁移风险,需要在 0.1.20 建立兼容控制平面
|
|
22
22
|
- 证据:
|
|
23
|
-
-
|
|
24
|
-
- OpenPrd
|
|
25
|
-
-
|
|
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 适配内容和软链接污染。
|
|
26
28
|
|
|
27
29
|
## 用户与相关方
|
|
28
30
|
|
|
29
31
|
- 主要用户:
|
|
30
|
-
-
|
|
32
|
+
- 用自然语言驱动 Codex、Cursor、Claude Code 完成产品开发的非专业或半专业用户
|
|
33
|
+
- 在同一代码项目中并发运行多个 Agent、线程、worktree 的开发者
|
|
34
|
+
- 需要持续维护需求、代码健康、知识与版本迁移的项目负责人
|
|
31
35
|
- 次要用户:
|
|
32
|
-
-
|
|
36
|
+
- OpenPrd 集成与插件维护者
|
|
37
|
+
- 审阅业务范围、风险与验收结论的产品和业务协作者
|
|
33
38
|
- 相关方:
|
|
34
|
-
- OpenPrd
|
|
35
|
-
-
|
|
39
|
+
- OpenPrd 产品与工程维护者
|
|
40
|
+
- 被 OpenPrd 管理的本地项目所有者
|
|
41
|
+
- Codex、Cursor、Claude Code 适配层维护者
|
|
36
42
|
|
|
37
43
|
## 目标与成功标准
|
|
38
44
|
|
|
39
45
|
- 目标:
|
|
40
|
-
-
|
|
41
|
-
- Agent
|
|
42
|
-
-
|
|
43
|
-
-
|
|
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 安装与旧项目
|
|
44
54
|
- 成功指标:
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
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 不再出现跨适配器漂移
|
|
48
62
|
- 验收目标:
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
63
|
+
- 全量单元、集成、并发、迁移、回滚、性能和三平台契约测试通过
|
|
64
|
+
- 最新 Markdown/HTML 测试报告、质量报告、架构与视觉证据可追溯
|
|
65
|
+
- standards、quality、run verify 与 doctor 在发布/刷新前全部健康
|
|
66
|
+
- 所有真实项目刷新报告包含版本、checksum、备份、迁移结果和失败回滚状态
|
|
52
67
|
|
|
53
68
|
## 验证与创业闭环
|
|
54
69
|
|
|
55
70
|
- 可触达社区:
|
|
56
|
-
-
|
|
71
|
+
- 已经在本机真实项目中持续使用 OpenPrd、Codex、Cursor、Claude Code 的 Vibe Coding 用户与维护者
|
|
57
72
|
- 第一批种子用户:
|
|
58
|
-
-
|
|
73
|
+
- 当前 43 个活跃或真实旧项目的维护者
|
|
74
|
+
- 近一个月具有 OpenPrd CLI 行为的 362 个 Codex 线程代表的真实任务样本
|
|
59
75
|
- 社区契合与触达依据:
|
|
60
|
-
-
|
|
61
|
-
- 当前替代方案:
|
|
76
|
+
- 团队本身就是高频 Vibe Coding 与多 Agent 协作者,拥有真实线程、真实项目、真实安装漂移和真实迁移样本,可以在自身工作流中完成 dogfood。
|
|
77
|
+
- 当前替代方案: 依赖 AGENTS.md、Skill、change/tasks、session binding、run-state、质量报告和人工记忆拼接上下文;发生冲突时靠重新运行 context、手工检查状态或切换线程。
|
|
62
78
|
- 痛点与替代证据:
|
|
63
|
-
-
|
|
79
|
+
- 重复 context、错误目标恢复、语义污染、全局 registry 膨胀、跨工具 Skill 漂移和 fleet 无事务更新均已在当前仓库与本机安装中复现。
|
|
64
80
|
- 手工交付路径:
|
|
65
|
-
-
|
|
81
|
+
- 先以兼容模式建立 manifest、事件信封、原子存储与 Ledger shadow-write,再逐层切换 Runtime、Context、Gate、Review、Knowledge 和 Adapter;每层均用真实项目 fixture 与旧版本 fixture 对账。
|
|
66
82
|
- 手工作战卡:
|
|
67
|
-
-
|
|
83
|
+
- 修复当前回归并冻结协议;建立 legacy/dual/ledger 三种存储模式;对每个旧项目执行 preflight、备份、临时生成、校验、原子替换与单项目回滚;按批次刷新 Home、Projects、Context 和活跃 worktree。
|
|
68
84
|
- 承诺信号:
|
|
69
|
-
-
|
|
70
|
-
-
|
|
85
|
+
- 用户明确授权完整实施、自动解决中间问题并刷新全部真实本地版本
|
|
86
|
+
- 现有线程与安装盘点提供了可量化的前后对比基线
|
|
87
|
+
- 首个低成本验证: 在当前 OpenPrd 仓库先完成回归修复、项目 manifest、原子 Ledger、任务并发 Runtime 与只读 Context Capsule 的纵向闭环。
|
|
71
88
|
- 先活下来方案:
|
|
72
|
-
-
|
|
89
|
+
- 保持 0.1.x CLI 和现有生成文件兼容;新内核先 shadow-write,出现不一致时可切回 legacy read,禁止一次性破坏旧项目。
|
|
73
90
|
- 付费验证信号:
|
|
74
|
-
-
|
|
75
|
-
- 第一版只做一件事:
|
|
76
|
-
- 周末级验证:
|
|
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 完成全链路演练。
|
|
77
94
|
- 最小工具桥接:
|
|
78
|
-
-
|
|
95
|
+
- 先修复 exact session 优先级并实现一个具备 expectedRevision、idempotencyKey、原子写入和可重建投影的 Ledger stream。
|
|
79
96
|
- 产品化门槛:
|
|
80
|
-
-
|
|
97
|
+
- 只有全量测试、并发压力、迁移幂等、回滚演练、三平台契约和真实项目 dry-run 均通过,才允许把 0.1.20 刷新到真实本地项目。
|
|
81
98
|
- 第一批客户路径:
|
|
82
|
-
-
|
|
83
|
-
- 初始收费假设:
|
|
84
|
-
- 客户 1 盈利路径:
|
|
99
|
+
- 先覆盖当前机器上的 OpenPrd 自身仓库与活跃项目,再把协议和迁移路径推广到其他 OpenPrd 用户。
|
|
100
|
+
- 初始收费假设: 本轮不改变开源 CLI 定价;价值通过更低上下文成本、更少返工和更稳定的长期项目维护体现。
|
|
101
|
+
- 客户 1 盈利路径: 单项目减少一次错误目标执行、一次全量 context 重注入或一次手工迁移回滚即可抵消升级成本。
|
|
85
102
|
- 销售与增长纪律:
|
|
86
|
-
-
|
|
87
|
-
- 可逆性判断:
|
|
88
|
-
- 客户真问题校验:
|
|
89
|
-
- 价值观一致性:
|
|
103
|
+
- 先保证协议稳定、可回滚、可观测和旧项目兼容,再增加更多自动化;不以新增命令数量替代可验证的执行质量。
|
|
104
|
+
- 可逆性判断: 每个迁移阶段支持 legacy/dual/ledger 模式、preimage backup、幂等 migration id 与按项目 restore;归档和发布副本默认保持不可变。
|
|
105
|
+
- 客户真问题校验: 目标直接针对已观测的重复上下文、并发覆盖、错误目标、评审理解成本、跨版本漂移和长期知识失真,而不是为了架构整洁而重写。
|
|
106
|
+
- 价值观一致性: 坚持用户可理解、Agent 可执行、事实可追溯、风险可回滚、知识可持续演进的 OpenPrd 产品原则。
|
|
90
107
|
|
|
91
108
|
## 范围与非目标
|
|
92
109
|
|
|
93
110
|
- 范围内:
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
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 视觉交互验证
|
|
101
121
|
- 范围外:
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
122
|
+
- 不进行生产云端热修复、远程业务数据写入或替用户发布外部服务
|
|
123
|
+
- 不重写 Excalidraw/Canvas 引擎,不引入与控制平面无关的视觉资产系统
|
|
124
|
+
- 不静默删除历史 review、归档、release 副本或用户未提交源码改动
|
|
125
|
+
- 不在 0.1.20 直接移除全部 legacy 文件;先提供兼容投影和回滚窗口
|
|
126
|
+
- 不把 Codex、Cursor、Claude Code 不具备的生命周期能力伪装成已支持
|
|
127
|
+
- 不自动 push、npm publish 或创建远端 release,除非用户另行明确授权
|
|
105
128
|
|
|
106
129
|
## 场景与流程
|
|
107
130
|
|
|
108
131
|
- 主流程:
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
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
|
|
113
138
|
- 边界情况:
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
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 目录被明确分类,不误刷新
|
|
117
145
|
- 失败模式:
|
|
118
|
-
-
|
|
119
|
-
-
|
|
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
|
|
120
152
|
|
|
121
153
|
## 可视化图表
|
|
122
154
|
|
|
@@ -124,30 +156,30 @@
|
|
|
124
156
|
|
|
125
157
|
```mermaid
|
|
126
158
|
flowchart LR
|
|
127
|
-
entry["入口触发<br
|
|
128
|
-
experience["产品内步骤<br
|
|
129
|
-
decision{"决策点<br
|
|
130
|
-
success(["成功结果<br
|
|
131
|
-
failure[["失败与恢复<br
|
|
132
|
-
entry -->|"
|
|
133
|
-
experience -->|"
|
|
134
|
-
decision -->|"
|
|
135
|
-
decision -.->|"
|
|
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
|
|
136
168
|
```
|
|
137
169
|
|
|
138
170
|
### 架构
|
|
139
171
|
|
|
140
172
|
```mermaid
|
|
141
173
|
flowchart LR
|
|
142
|
-
users["主要用户<br
|
|
174
|
+
users["主要用户<br/>用自然语言驱动 Codex、Cursor、Claude Code 完成产品开发的非专业或半专业用户 · 在同一代码项目中并发运…"]
|
|
143
175
|
subgraph solution["方案边界"]
|
|
144
|
-
experience["Agent 使用场景层<br
|
|
145
|
-
core["核心产品逻辑<br
|
|
146
|
-
integrations["依赖与集成<br
|
|
147
|
-
governance[["约束与可靠性<br
|
|
148
|
-
delivery["验证与交接<br
|
|
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,…"]
|
|
149
181
|
end
|
|
150
|
-
users -->|"
|
|
182
|
+
users -->|"Agent 进入已有项目,Adapter 识别运行环境,Context Com…"| experience
|
|
151
183
|
experience -->|"产品动作与编排"| core
|
|
152
184
|
core -->|"依赖与外部服务"| integrations
|
|
153
185
|
core -.->|"策略、可靠性与合规"| governance
|
|
@@ -159,67 +191,99 @@ flowchart LR
|
|
|
159
191
|
## 需求
|
|
160
192
|
|
|
161
193
|
- 功能需求:
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
-
|
|
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 隔离
|
|
167
203
|
- 非功能需求:
|
|
168
|
-
-
|
|
169
|
-
-
|
|
170
|
-
-
|
|
204
|
+
- Node.js 20.19+,优先零新增运行时依赖,复用现有 YAML 与 Sharp
|
|
205
|
+
- 所有核心写入具备原子替换、revision、幂等键、checksum 和 crash recovery
|
|
206
|
+
- 读取路径默认无业务状态写入;telemetry 与事实真相分离
|
|
207
|
+
- 面向普通用户的默认文案使用简体中文、结果导向且不暴露内部实现术语
|
|
208
|
+
- 新旧 CLI 在一个兼容周期内保持字段与退出码兼容,并标注 deprecated 字段
|
|
209
|
+
- 每个迁移步骤可重复执行、可审计、可单项目回滚
|
|
171
210
|
- 业务规则:
|
|
172
|
-
-
|
|
173
|
-
-
|
|
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 验证通过前不得刷新真实项目
|
|
174
217
|
|
|
175
218
|
## 业务护栏
|
|
176
219
|
|
|
177
220
|
- 成本来源:
|
|
178
|
-
-
|
|
221
|
+
- 全量线程与项目扫描、并发压力测试、Review 视觉验证、旧项目备份和批量迁移
|
|
222
|
+
- 重复上下文注入和过宽文档读取造成的 token 与执行时间
|
|
179
223
|
- 额度与限制:
|
|
180
|
-
-
|
|
224
|
+
- 默认 context Capsule 800 tokens,Delta 250 tokens;超预算需可解释裁剪
|
|
225
|
+
- 真实 fleet 按 Home、Projects、Context、活跃 worktree 分批执行,归档不纳入
|
|
226
|
+
- 单项目迁移失败不继续覆盖该项目,也不阻断已经验证成功的其他项目
|
|
181
227
|
- 滥用防护:
|
|
182
|
-
-
|
|
183
|
-
-
|
|
228
|
+
- 高风险操作绑定明确 lane/operation approval ID,短句确认不能放行其他 lane
|
|
229
|
+
- Symlink 路径、too-new schema、dirty archive 分类不明时拒绝破坏性写入
|
|
230
|
+
- Context 编译进行 secret redaction,Knowledge promotion 需要证据和 reviewer
|
|
184
231
|
- 监控信号:
|
|
185
|
-
-
|
|
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 完成率、需求修订次数、用户可理解性检查与技术词泄漏
|
|
186
236
|
- 报警阈值:
|
|
187
|
-
-
|
|
237
|
+
- 任何 lost update、错误项目写入、归档 checksum 变化、secret 泄漏或无法回滚均为阻断
|
|
238
|
+
- Context 超预算、p95 超 SLO、adapter fixture 不一致或 migration 对账不一致阻断真实 fleet
|
|
239
|
+
- 质量报告 productionReady=false 时不得声称整体完成
|
|
188
240
|
- 止损动作:
|
|
189
|
-
-
|
|
241
|
+
- 切回 legacy read/storageMode,停止后续批次并按项目 restore preimage
|
|
242
|
+
- 保留失败报告、revision、digest 和 capability gap,不用写死逻辑绕过门禁
|
|
243
|
+
- 对分类不明的归档、副本或 symlink 目标保持只读
|
|
190
244
|
|
|
191
245
|
## 约束、依赖与风险
|
|
192
246
|
|
|
193
247
|
- 技术约束:
|
|
194
|
-
-
|
|
195
|
-
-
|
|
196
|
-
-
|
|
248
|
+
- 保持现有 CLI、JSONL/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 改动必须复用现有视觉系统并提供前后、焦点、验证与对齐证据
|
|
197
253
|
- 合规要求:
|
|
198
|
-
-
|
|
199
|
-
-
|
|
254
|
+
- 上下文与日志不得包含 API key、token、账号、个人隐私或未脱敏 prompt 原文
|
|
255
|
+
- 迁移备份只包含当前任务需要的最小文件并保留本机权限,不向外发送
|
|
256
|
+
- 不修改用户归档、远程仓库或生产环境
|
|
200
257
|
- 依赖:
|
|
201
|
-
-
|
|
202
|
-
-
|
|
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 与生成协议
|
|
203
261
|
- 假设:
|
|
204
|
-
-
|
|
205
|
-
-
|
|
262
|
+
- 0.1.20 可在不移除 legacy 文件的前提下交付兼容控制平面纵向能力
|
|
263
|
+
- 现有 43 个活跃真实项目与历史 0.1.15/0.1.19 fixture 足以覆盖主要迁移形态
|
|
264
|
+
- Codex、Cursor、Claude Code 平台差异可通过 capability negotiation 明确表达
|
|
206
265
|
- 风险:
|
|
207
|
-
-
|
|
208
|
-
-
|
|
266
|
+
- 改造横跨状态、hook、CLI、review、knowledge 与迁移,若没有兼容分层会形成大爆炸式回归
|
|
267
|
+
- 当前 dirty worktree 与语义污染状态可能把既有用户改动误当成稳定基线
|
|
268
|
+
- Home 级 Skill symlink 与通用 skills-sync 可能再次制造跨适配器漂移
|
|
269
|
+
- 全局 registry 已被测试临时目录污染,直接 compact 或 fleet 可能误删仍需的定位索引
|
|
270
|
+
- Review 双投影若没有 canonical digest 会再次产生两套真相
|
|
209
271
|
- 开放问题:
|
|
210
|
-
-
|
|
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 排除,不纳入版本刷新
|
|
211
275
|
|
|
212
276
|
## 类型专项模块
|
|
213
277
|
|
|
214
278
|
- 类型: Agent 使用场景专项
|
|
215
|
-
- humanAgentContract:
|
|
216
|
-
- autonomyBoundary: Agent
|
|
217
|
-
- toolBoundary:
|
|
218
|
-
- stateModel:
|
|
219
|
-
- evalPlan:
|
|
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 Graph、Knowledge Index、Learning 是可重建投影。
|
|
283
|
+
- evalPlan: 使用 characterization、unit、integration、concurrency、crash recovery、migration、rollback、performance、adapter parity、visual comparison、full regression、standards/quality/run/doctor 和真实 fleet readback 逐层验收。
|
|
220
284
|
|
|
221
285
|
## 交接
|
|
222
286
|
|
|
223
287
|
- 负责人: OpenPrd
|
|
224
|
-
- 下一步:
|
|
225
|
-
- 目标系统: OpenPrd CLI
|
|
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,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"}
|