@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
@@ -2,20 +2,25 @@
2
2
 
3
3
  | 类型 | 资产 | 来源 | 状态 | 备注 |
4
4
  | --- | --- | --- | --- | --- |
5
- | logo | 待填写 | 待确认 | pending | |
6
- | 产品图 | 待填写 | 待确认 | pending | |
7
- | UI 图 | 待填写 | 待确认 | pending | |
8
- | 功能图标 | 新入口/按钮/空态默认配图标 | UI 图标 Phosphor;实现库 Lucide/Tabler/React Icons;AI 品牌 LobeHub;技术栈 Tech Icons | pending | 开发新功能时 Agent 自动找图标并登记,不等用户要求 |
9
- | 摄影 / 插图 | 待填写 | 待确认 | pending | |
10
- | 色板 / 字体 | 待填写 | 待确认 | pending | |
11
- | 动效节奏 | 待填写 | 待确认 | pending | |
12
- | 背景 / 表面 | 待填写 | 待确认 | pending | |
13
- | 构图记忆点 | 待填写 | 待确认 | pending | |
5
+ | logo | 复用 OpenPrd 现有文字标识 | 当前 Review topbar | reuse | 不重新设计品牌 |
6
+ | 产品图 | Review Studio 三方向接触表 | Image 2 + `visual-prepare` | ready | `.openprd/design/active/review-studio-v020-directions/contact-sheet.jpg` |
7
+ | UI 图 | 业务导览、双轨证据、项目驾驶舱三个候选 | Image 2 裁切 | ready | `crops/01.png`、`02.png`、`03.png` |
8
+ | 功能图标 | 评审、证据、风险、任务、版本、迁移、上下文 | 复用现有内联图标语义;实现期统一为已有 outline 体系 | planned | 不新增装饰性图标 |
9
+ | 摄影 / 插图 | | 不需要 | not-needed | 产品成立不依赖真实图片 |
10
+ | 色板 / 字体 | 复用现有 Review tokens 与系统字体 | 当前 Review CSS | reuse | 保持可访问对比度 |
11
+ | 动效节奏 | 仅视图切换、证据展开、确认反馈 | 产品交互需求 | planned | 120–180ms,尊重 reduced-motion |
12
+ | 背景 / 表面 | 中性灰画布 + 白色内容面 + 轻边框 | 当前 Review CSS | reuse | 避免玻璃拟态与渐变 |
13
+ | 构图记忆点 | 顶部共享决策时间线 + 业务/工程双视图 | 方向 B | selected | 两种视图共享同一 model digest |
14
14
 
15
15
  ## 冻结变量
16
16
 
17
- - lens: 待填写
18
- - theme: 待填写
19
- - layout: 待填写
20
- - aesthetic: 待填写
21
- - memory-point: 待填写
17
+ - lens: evidence-first progressive disclosure
18
+ - theme: quiet professional control plane
19
+ - layout: shared timeline + dual projection workbench
20
+ - aesthetic: restrained, dense, calm, explainable
21
+ - memory-point: 一条时间线,两种视角
22
+
23
+ ## 0.1.21 结果画布资产
24
+
25
+ - 色彩:暖灰画布 `#f4efe6`、纸白表面 `#fffdf8`、陶土强调 `#c65f3f`、通过状态 `#39795c`。
26
+ - 图片:直接复用用户提供的真实截图,不增加装饰图片或默认网格覆盖层。
@@ -2,6 +2,22 @@
2
2
 
3
3
  | 方向 | 生成逻辑 | lens | theme | layout | 审美主张 | 记忆点 | 为什么不同 | 适用场景 | 主要风险 |
4
4
  | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
5
- | 方向 1 | contrast | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 |
6
- | 方向 2 | reference-transfer | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 |
7
- | 方向 3 | design-lens | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 |
5
+ | A 业务评审导览 | contrast | progressive disclosure | guided review | 左侧议程 + 中央业务故事图 + 底部确认 | 最低认知负担 | 一步一块完成评审 | 从业务阅读顺序出发,隐藏工程细节 | 非技术用户首次评审 | 工程追溯需要另开入口 |
6
+ | B 双轨证据工作台 | reference-transfer | evidence-first | dual projection | 共享时间线 + 业务/工程 Tab + 证据工作区 | 同一事实,多种读法 | 一条时间线,两种视角 | 把现有 Review 与证据链整合为同一模型双投影 | 产品与工程共同评审 | 信息密度较高,需要默认收起细节 |
7
+ | C 项目驾驶舱 | design-lens | operational overview | control room | 健康总览 + 并行任务 + 迁移/上下文侧栏 | 全局态势一屏掌握 | 项目健康与资源雷达 | 把评审放进项目级控制平面 | 多线程项目负责人 | 容易把 0.1.20 范围扩大成完整项目管理器 |
8
+
9
+ ## 内部评估
10
+
11
+ | 维度 | A | B | C |
12
+ | --- | ---: | ---: | ---: |
13
+ | 小白可理解性 | 5 | 4 | 3 |
14
+ | 工程可追溯性 | 2 | 5 | 4 |
15
+ | 与现有 Review 兼容 | 4 | 5 | 3 |
16
+ | 控制平面定位 | 3 | 5 | 5 |
17
+ | 0.1.20 可落地性 | 5 | 4 | 2 |
18
+ | 合计 | 19 | 23 | 17 |
19
+
20
+ - 选 B 为主方向。
21
+ - 吸收 A 的左侧议程与逐步确认,避免双轨变成工程后台。
22
+ - C 保留为后续 Project Cockpit 投影,不塞进本轮 Review 主页面。
23
+
@@ -2,12 +2,21 @@
2
2
 
3
3
  | 字段 | 当前值 | 来源 | verifiedAt | 状态 |
4
4
  | --- | --- | --- | --- | --- |
5
- | 产品 / 项目名 | 待填写 | 待确认 | - | pending |
6
- | 版本 / 发布状态 | 待填写 | 待确认 | - | pending |
7
- | 关键事实 1 | 待填写 | 待确认 | - | pending |
8
- | 关键事实 2 | 待填写 | 待确认 | - | pending |
5
+ | 产品 / 项目名 | OpenPrd Review Studio | 当前仓库 `src/html-artifacts.js` | 2026-07-10 | verified |
6
+ | 目标版本 | 0.1.21 | 用户确认的版本自增目标 | 2026-07-11 | verified |
7
+ | 主要受众 | 非技术业务用户、产品负责人、工程执行者 | v0018 用户与场景 | 2026-07-10 | verified |
8
+ | 现有视觉语言 | 中性灰背景、白色表面、深色正文、蓝/靛当前态、青色健康态、琥珀风险态 | 当前 Review HTML/CSS | 2026-07-10 | verified |
9
+ | 现有交互 | 阶段轨道、评审清单、需求关系图、四类内容卡、方向卡、底部确认栏 | `src/html-artifacts.js` | 2026-07-10 | verified |
10
+ | 核心问题 | 同一评审里业务结论和工程细节缺少清晰分层,复杂项目不易快速理解 | 用户目标与线程审计 | 2026-07-10 | verified |
11
+ | 技术事实 | v0018 使用稳定 snapshot digest 与 work unit;评审文案由 `review-presentation` 校验 | 当前 CLI 与快照 | 2026-07-10 | verified |
9
12
 
10
- ## 备注
13
+ ## 设计意图
11
14
 
12
- - 没核实到就保留 `pending`
13
- - 不要把记忆当来源
15
+ - 让不懂内部实现的人先看懂“为什么做、会发生什么、风险是什么、怎样算完成”。
16
+ - 让工程执行者从同一决策模型切换到任务、证据、版本与追溯信息,不再维护第二套结论。
17
+ - 记忆点是“一条共享决策时间线,两种阅读视角”,而不是再堆一个通用仪表盘。
18
+
19
+ ## 0.1.21 视觉证据画布
20
+
21
+ - 普通结果画布采用暖色、紧凑双卡结构,截图和结论优先。
22
+ - 网格、基线和辅助线只属于布局类 `alignment-board`,不默认覆盖普通截图。
@@ -2,8 +2,9 @@
2
2
 
3
3
  | 问题 | 回答 |
4
4
  | --- | --- |
5
- | 真实图片是不是页面成立前提 | 待填写 |
6
- | 必需图片类型 | 待填写 |
7
- | 计划来源 | 待填写 |
8
- | 缺失风险 | 待填写 |
9
- | 降级方案 | 待填写 |
5
+ | 真实图片是不是页面成立前提 | 否。Review Studio 是信息与决策产品,依赖真实项目数据而不是摄影素材。 |
6
+ | 必需图片类型 | 只需要三方向交互候选图作为评审证据。 |
7
+ | 计划来源 | 使用 Codex 原生 Image 2 生成,并用 `openprd visual-prepare` 拆分成 reference set。 |
8
+ | 缺失风险 | 候选图只表达信息架构,不作为像素级实现稿;生成文字可能失真。 |
9
+ | 降级方案 | 实现以现有 Review DOM、tokens 和真实 v0018 数据为准,候选图只约束布局、层级和阅读路径。 |
10
+
@@ -0,0 +1,34 @@
1
+ {
2
+ "version": 1,
3
+ "schema": "openprd.visual-prepare.plan.v1",
4
+ "generatedAt": "2026-07-10 23:10:01",
5
+ "title": "OpenPrd Review Studio 0.1.20 三方向 对比计划",
6
+ "referenceSet": ".openprd/design/active/review-studio-v020-directions/reference-set.json",
7
+ "artifacts": {
8
+ "focusBoardTemplate": ".openprd/design/active/review-studio-v020-directions/focus-board.template.json",
9
+ "parallelBoardTemplate": ".openprd/design/active/review-studio-v020-directions/parallel-board.template.json"
10
+ },
11
+ "items": [
12
+ {
13
+ "id": "01",
14
+ "label": "对象 01",
15
+ "reference": ".openprd/design/active/review-studio-v020-directions/crops/01.png",
16
+ "suggestedActual": "__REPLACE_WITH_IMPLEMENTATION_SCREENSHOT__",
17
+ "suggestedCommand": "openprd visual-compare . --reference .openprd/design/active/review-studio-v020-directions/crops/01.png --actual __REPLACE_WITH_IMPLEMENTATION_SCREENSHOT__"
18
+ },
19
+ {
20
+ "id": "02",
21
+ "label": "对象 02",
22
+ "reference": ".openprd/design/active/review-studio-v020-directions/crops/02.png",
23
+ "suggestedActual": "__REPLACE_WITH_IMPLEMENTATION_SCREENSHOT__",
24
+ "suggestedCommand": "openprd visual-compare . --reference .openprd/design/active/review-studio-v020-directions/crops/02.png --actual __REPLACE_WITH_IMPLEMENTATION_SCREENSHOT__"
25
+ },
26
+ {
27
+ "id": "03",
28
+ "label": "对象 03",
29
+ "reference": ".openprd/design/active/review-studio-v020-directions/crops/03.png",
30
+ "suggestedActual": "__REPLACE_WITH_IMPLEMENTATION_SCREENSHOT__",
31
+ "suggestedCommand": "openprd visual-compare . --reference .openprd/design/active/review-studio-v020-directions/crops/03.png --actual __REPLACE_WITH_IMPLEMENTATION_SCREENSHOT__"
32
+ }
33
+ ]
34
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "mode": "focus-board",
3
+ "title": "OpenPrd Review Studio 0.1.20 三方向 局部焦点模板",
4
+ "summary": "把 right.path 替换成实现截图;如果实现截图布局与参考图不同,再分别调整 rightBox。",
5
+ "left": {
6
+ "path": ".openprd/design/active/review-studio-v020-directions/source.png",
7
+ "label": "参考整板"
8
+ },
9
+ "right": {
10
+ "path": "__REPLACE_WITH_IMPLEMENTATION_SCREENSHOT__",
11
+ "label": "实现截图"
12
+ },
13
+ "focusRegions": [
14
+ {
15
+ "label": "对象 01",
16
+ "reason": "1/3 列 · 1/1 行",
17
+ "leftBox": {
18
+ "unit": "ratio",
19
+ "x": 0,
20
+ "y": 0,
21
+ "width": 0.333333,
22
+ "height": 1
23
+ },
24
+ "rightBox": {
25
+ "unit": "ratio",
26
+ "x": 0,
27
+ "y": 0,
28
+ "width": 0.333333,
29
+ "height": 1
30
+ }
31
+ },
32
+ {
33
+ "label": "对象 02",
34
+ "reason": "2/3 列 · 1/1 行",
35
+ "leftBox": {
36
+ "unit": "ratio",
37
+ "x": 0.333333,
38
+ "y": 0,
39
+ "width": 0.333333,
40
+ "height": 1
41
+ },
42
+ "rightBox": {
43
+ "unit": "ratio",
44
+ "x": 0.333333,
45
+ "y": 0,
46
+ "width": 0.333333,
47
+ "height": 1
48
+ }
49
+ },
50
+ {
51
+ "label": "对象 03",
52
+ "reason": "3/3 列 · 1/1 行",
53
+ "leftBox": {
54
+ "unit": "ratio",
55
+ "x": 0.666667,
56
+ "y": 0,
57
+ "width": 0.333333,
58
+ "height": 1
59
+ },
60
+ "rightBox": {
61
+ "unit": "ratio",
62
+ "x": 0.666667,
63
+ "y": 0,
64
+ "width": 0.333333,
65
+ "height": 1
66
+ }
67
+ }
68
+ ]
69
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "mode": "parallel-board",
3
+ "title": "OpenPrd Review Studio 0.1.20 三方向 参考映射模板",
4
+ "summary": "每张卡先挂参考 crop。要做多对象、多方向或多页面统一验收时,在对应卡片里继续补实现截图、指标或备注。",
5
+ "columns": 3,
6
+ "cardWidth": 360,
7
+ "items": [
8
+ {
9
+ "label": "对象 01",
10
+ "subtitle": "参考对象 01",
11
+ "verdict": "待补实现截图",
12
+ "media": [
13
+ {
14
+ "path": ".openprd/design/active/review-studio-v020-directions/crops/01.png",
15
+ "label": "参考 crop"
16
+ }
17
+ ],
18
+ "notes": "需要时可继续补实现截图、指标或阶段性结论。"
19
+ },
20
+ {
21
+ "label": "对象 02",
22
+ "subtitle": "参考对象 02",
23
+ "verdict": "待补实现截图",
24
+ "media": [
25
+ {
26
+ "path": ".openprd/design/active/review-studio-v020-directions/crops/02.png",
27
+ "label": "参考 crop"
28
+ }
29
+ ],
30
+ "notes": "需要时可继续补实现截图、指标或阶段性结论。"
31
+ },
32
+ {
33
+ "label": "对象 03",
34
+ "subtitle": "参考对象 03",
35
+ "verdict": "待补实现截图",
36
+ "media": [
37
+ {
38
+ "path": ".openprd/design/active/review-studio-v020-directions/crops/03.png",
39
+ "label": "参考 crop"
40
+ }
41
+ ],
42
+ "notes": "需要时可继续补实现截图、指标或阶段性结论。"
43
+ }
44
+ ]
45
+ }
@@ -0,0 +1,143 @@
1
+ {
2
+ "version": 1,
3
+ "schema": "openprd.reference-set.v1",
4
+ "generatedAt": "2026-07-10 23:10:01",
5
+ "id": "review-studio-v020-directions",
6
+ "title": "OpenPrd Review Studio 0.1.20 三方向",
7
+ "mode": "grid",
8
+ "summary": "3x1 网格切片,共 3 个参考对象。",
9
+ "source": {
10
+ "originalPath": "/Users/chaojifeng/.codex/generated_images/019f4c66-86fb-74d1-8ae8-ec1ce9064e59/exec-6739c328-3559-4bcf-8689-fe9596c42b0b.png",
11
+ "originalSha256": "571f2b74c32dc4f0e1a8a1a08a6fd14b65243226c401a8a6f684b6f1de223ead",
12
+ "originalMetadata": {
13
+ "width": 1716,
14
+ "height": 917,
15
+ "format": "png"
16
+ },
17
+ "stagedPath": ".openprd/design/active/review-studio-v020-directions/source.png",
18
+ "stagedSha256": "37ecd4c9ef7853c1fd9f1d237f7bacfe174986b8cd274a7809431a00b444e590",
19
+ "stagedMetadata": {
20
+ "width": 1716,
21
+ "height": 917,
22
+ "format": "png"
23
+ }
24
+ },
25
+ "selection": {
26
+ "mode": "grid",
27
+ "grid": {
28
+ "columns": 3,
29
+ "rows": 1
30
+ },
31
+ "include": null
32
+ },
33
+ "artifacts": {
34
+ "contactSheet": ".openprd/design/active/review-studio-v020-directions/contact-sheet.jpg",
35
+ "focusBoardTemplate": ".openprd/design/active/review-studio-v020-directions/focus-board.template.json",
36
+ "parallelBoardTemplate": ".openprd/design/active/review-studio-v020-directions/parallel-board.template.json",
37
+ "comparePlan": ".openprd/design/active/review-studio-v020-directions/compare-plan.json"
38
+ },
39
+ "items": [
40
+ {
41
+ "order": 1,
42
+ "id": "01",
43
+ "label": "对象 01",
44
+ "note": "1/3 列 · 1/1 行",
45
+ "cropPath": ".openprd/design/active/review-studio-v020-directions/crops/01.png",
46
+ "cropSha256": "861f3bcc79ca56cb8cad5eda6b7280d9748c555a845933ac045403ed8a36c8a6",
47
+ "cropMetadata": {
48
+ "width": 572,
49
+ "height": 917,
50
+ "format": "png"
51
+ },
52
+ "cropBox": {
53
+ "unit": "ratio",
54
+ "x": 0,
55
+ "y": 0,
56
+ "width": 0.333333,
57
+ "height": 1
58
+ },
59
+ "absoluteBox": {
60
+ "x": 0,
61
+ "y": 0,
62
+ "width": 572,
63
+ "height": 917
64
+ },
65
+ "requestedUnit": "ratio",
66
+ "requestedBox": {
67
+ "unit": "ratio",
68
+ "x": 0,
69
+ "y": 0,
70
+ "width": 0.333333,
71
+ "height": 1
72
+ }
73
+ },
74
+ {
75
+ "order": 2,
76
+ "id": "02",
77
+ "label": "对象 02",
78
+ "note": "2/3 列 · 1/1 行",
79
+ "cropPath": ".openprd/design/active/review-studio-v020-directions/crops/02.png",
80
+ "cropSha256": "7f1927369d514079615b0f475856ad6481645822e8a14ef390bbf9a3633c3091",
81
+ "cropMetadata": {
82
+ "width": 572,
83
+ "height": 917,
84
+ "format": "png"
85
+ },
86
+ "cropBox": {
87
+ "unit": "ratio",
88
+ "x": 0.333333,
89
+ "y": 0,
90
+ "width": 0.333333,
91
+ "height": 1
92
+ },
93
+ "absoluteBox": {
94
+ "x": 572,
95
+ "y": 0,
96
+ "width": 572,
97
+ "height": 917
98
+ },
99
+ "requestedUnit": "ratio",
100
+ "requestedBox": {
101
+ "unit": "ratio",
102
+ "x": 0.333333,
103
+ "y": 0,
104
+ "width": 0.333333,
105
+ "height": 1
106
+ }
107
+ },
108
+ {
109
+ "order": 3,
110
+ "id": "03",
111
+ "label": "对象 03",
112
+ "note": "3/3 列 · 1/1 行",
113
+ "cropPath": ".openprd/design/active/review-studio-v020-directions/crops/03.png",
114
+ "cropSha256": "295ee41a5fd24ba080fcd7a695fd6fa7d4252cdf71f4f29c04cc3d285227cb0b",
115
+ "cropMetadata": {
116
+ "width": 572,
117
+ "height": 917,
118
+ "format": "png"
119
+ },
120
+ "cropBox": {
121
+ "unit": "ratio",
122
+ "x": 0.666667,
123
+ "y": 0,
124
+ "width": 0.333333,
125
+ "height": 1
126
+ },
127
+ "absoluteBox": {
128
+ "x": 1144,
129
+ "y": 0,
130
+ "width": 572,
131
+ "height": 917
132
+ },
133
+ "requestedUnit": "ratio",
134
+ "requestedBox": {
135
+ "unit": "ratio",
136
+ "x": 0.666667,
137
+ "y": 0,
138
+ "width": 0.333333,
139
+ "height": 1
140
+ }
141
+ }
142
+ ]
143
+ }
@@ -1,13 +1,27 @@
1
1
  # Selected Direction
2
2
 
3
- - selected: 待填写
4
- - reason: 待填写
5
- - lens: 待填写
6
- - theme: 待填写
7
- - layout: 待填写
8
- - aesthetic: 待填写
9
- - memory-point: 待填写
3
+ - selected: B 双轨证据工作台
4
+ - reason: 在小白可理解、工程可追溯、现有实现兼容和控制平面定位之间得分最高;同一 ReviewModel 可直接支撑两种投影,避免形成两套真相。
5
+ - lens: evidence-first progressive disclosure
6
+ - theme: quiet professional control plane
7
+ - layout: 共享决策时间线 + 业务/工程双视图 + 可展开证据区
8
+ - aesthetic: 克制、清晰、可信、信息密度可控
9
+ - memory-point: 一条时间线,两种视角
10
10
  - components:
11
- - 待填写
11
+ - 共享决策时间线
12
+ - 业务视角 / 工程视角切换
13
+ - 左侧评审议程
14
+ - 业务故事与风险卡
15
+ - 工程证据、任务与版本追溯
16
+ - 固定确认与修订动作栏
12
17
  - follow-up risks:
13
- - 待填写
18
+ - 默认必须打开业务视角,工程信息按需展开。
19
+ - 两种视图必须共享同一 model digest,样式重渲染不能使业务确认失效。
20
+ - 实现后需要业务词泄漏检查、同构卡片对齐板和真实浏览器截图证据。
21
+
22
+ ## 0.1.21 补充方向:紧凑结果画布
23
+
24
+ - scope: `visual-compare` 最终结果展示。
25
+ - aesthetic: 温暖、直接、低装饰,截图占主要面积。
26
+ - memory-point: 用户一眼看到“比了什么、是否通过”。
27
+ - routing: 普通结果无网格;只有布局、间距、对齐或同构结构进入 `alignment-board`。
@@ -0,0 +1,203 @@
1
+ {
2
+ "type": "architecture",
3
+ "locale": "zh-CN",
4
+ "title": "OpenPrd 0.1.20 可解释项目控制平面",
5
+ "subtitle": "一份项目事实、一个并发协调层、按需编译上下文,并向业务与工程生成不同读法。",
6
+ "components": [
7
+ {
8
+ "id": "people-agents",
9
+ "name": "用户与 Agent",
10
+ "type": "external",
11
+ "subtitle": "业务用户负责目标与决策,Codex、Cursor、Claude Code 在授权范围内执行。",
12
+ "details": [
13
+ "显式任务、会话和工作单元标识始终优先",
14
+ "高风险动作绑定当前操作的明确授权"
15
+ ]
16
+ },
17
+ {
18
+ "id": "review-studio",
19
+ "name": "业务与工程双视图",
20
+ "type": "frontend",
21
+ "subtitle": "同一 ReviewModel 生成小白可懂的业务视图和工程可追溯视图。",
22
+ "details": [
23
+ "共享决策时间线与 model digest",
24
+ "默认业务视角,工程证据按需展开"
25
+ ]
26
+ },
27
+ {
28
+ "id": "adapter-spi",
29
+ "name": "跨工具适配层",
30
+ "type": "cloud",
31
+ "subtitle": "归一生命周期事件,协商能力并渲染各工具需要的上下文与决定。",
32
+ "details": [
33
+ "Codex、Cursor、Claude Code 使用同一合同",
34
+ "能力缺口明确返回,不模拟支持"
35
+ ]
36
+ },
37
+ {
38
+ "id": "context-compiler",
39
+ "name": "上下文编译器",
40
+ "type": "backend",
41
+ "subtitle": "按任务、风险、权限与 token 预算生成稳定 Capsule 或 Delta。",
42
+ "details": [
43
+ "完整摘要 800 tokens,增量 250 tokens",
44
+ "同 revision 同输入产生同 digest",
45
+ "默认只读,telemetry 与事实分离"
46
+ ]
47
+ },
48
+ {
49
+ "id": "gate-engine",
50
+ "name": "分级门禁与证据",
51
+ "type": "security",
52
+ "subtitle": "项目、变更、工作单元、任务、会话和单次操作各自判断。",
53
+ "details": [
54
+ "局部任务不被无关项目债务阻断",
55
+ "发布与真实迁移继续执行项目级门禁"
56
+ ]
57
+ },
58
+ {
59
+ "id": "task-runtime",
60
+ "name": "并发任务运行态",
61
+ "type": "backend",
62
+ "subtitle": "Lane、claim、lease、heartbeat、write-set 与 CAS 协调多线程执行。",
63
+ "details": [
64
+ "同一任务只能被一个有效 claim 持有",
65
+ "不相交文件范围可以并行",
66
+ "崩溃后安全回收过期 lease"
67
+ ]
68
+ },
69
+ {
70
+ "id": "domain-services",
71
+ "name": "需求与项目服务",
72
+ "type": "backend",
73
+ "subtitle": "Change、Task、Review、Quality、Knowledge 与 Migration 只通过控制平面变更事实。",
74
+ "details": [
75
+ "保持现有 CLI 兼容入口",
76
+ "Knowledge 有证据、作用域、有效期与替代链"
77
+ ]
78
+ },
79
+ {
80
+ "id": "project-ledger",
81
+ "name": "Project Ledger",
82
+ "type": "database",
83
+ "subtitle": "事件信封、连续 revision、幂等键和可重建投影构成唯一业务真相。",
84
+ "details": [
85
+ "current、task graph、review、knowledge index 都是投影",
86
+ "支持 verify、replay 与损坏恢复"
87
+ ]
88
+ },
89
+ {
90
+ "id": "atomic-store",
91
+ "name": "原子存储与版本清单",
92
+ "type": "database",
93
+ "subtitle": "原子写入、锁、checksum、reader/writer 版本和迁移记录保护旧项目。",
94
+ "details": [
95
+ "legacy、dual、ledger 三种兼容模式",
96
+ "真实升级前备份,失败按项目回滚",
97
+ "symlink 与过新 schema 安全拒绝写入"
98
+ ]
99
+ }
100
+ ],
101
+ "flows": [
102
+ {
103
+ "source": "people-agents",
104
+ "target": "review-studio",
105
+ "label": "理解范围、风险与决定",
106
+ "type": "standard"
107
+ },
108
+ {
109
+ "source": "people-agents",
110
+ "target": "adapter-spi",
111
+ "label": "提交任务与运行事件",
112
+ "type": "standard"
113
+ },
114
+ {
115
+ "source": "adapter-spi",
116
+ "target": "context-compiler",
117
+ "label": "协商能力与上下文格式",
118
+ "type": "standard"
119
+ },
120
+ {
121
+ "source": "context-compiler",
122
+ "target": "gate-engine",
123
+ "label": "附带适用门禁与权限",
124
+ "type": "security"
125
+ },
126
+ {
127
+ "source": "gate-engine",
128
+ "target": "task-runtime",
129
+ "label": "允许后领取任务范围",
130
+ "type": "security"
131
+ },
132
+ {
133
+ "source": "task-runtime",
134
+ "target": "domain-services",
135
+ "label": "在 claim 与 write-set 内执行",
136
+ "type": "standard"
137
+ },
138
+ {
139
+ "source": "domain-services",
140
+ "target": "project-ledger",
141
+ "label": "追加事实事件",
142
+ "type": "standard"
143
+ },
144
+ {
145
+ "source": "project-ledger",
146
+ "target": "context-compiler",
147
+ "label": "提供最新权威事实",
148
+ "type": "standard"
149
+ },
150
+ {
151
+ "source": "project-ledger",
152
+ "target": "review-studio",
153
+ "label": "生成双投影",
154
+ "type": "standard"
155
+ },
156
+ {
157
+ "source": "atomic-store",
158
+ "target": "project-ledger",
159
+ "label": "原子持久化与版本保护",
160
+ "type": "security"
161
+ }
162
+ ],
163
+ "summaryCards": [
164
+ {
165
+ "title": "用户得到什么",
166
+ "color": "frontend",
167
+ "items": [
168
+ "进入项目后直接看到本次任务需要的最少上下文",
169
+ "多线程并行不会互相覆盖,冲突会说清原因和下一步",
170
+ "业务评审先看结果,工程细节仍能从同一结论追溯"
171
+ ]
172
+ },
173
+ {
174
+ "title": "系统如何可靠",
175
+ "color": "backend",
176
+ "items": [
177
+ "唯一项目账本 + 可重建投影,运行态不再冒充业务真相",
178
+ "revision、幂等键、claim、lease、write-set 与 CAS 防止丢失更新",
179
+ "上下文编译默认只读、可缓存、可增量、可解释"
180
+ ]
181
+ },
182
+ {
183
+ "title": "如何安全升级",
184
+ "color": "cloud",
185
+ "items": [
186
+ "0.1.20 先以 dual 模式和旧状态对账",
187
+ "每个真实项目都先预检、备份、校验,再原子替换",
188
+ "归档保持不变,失败只回滚当前项目"
189
+ ]
190
+ }
191
+ ],
192
+ "reviewInstructions": [
193
+ "用户已明确授权按此架构继续实现,无需中途停顿。",
194
+ "任何 lost update、错误项目写入、归档变化、敏感信息泄漏或无法回滚都阻断真实刷新。",
195
+ "版本升级和 fleet 刷新只能在全量测试与项目级门禁健康后执行。"
196
+ ],
197
+ "metadata": {
198
+ "versionId": "v0018",
199
+ "owner": "OpenPrd",
200
+ "targetSystem": "OpenPrd CLI 与本地项目生态",
201
+ "reviewStatus": "confirmed"
202
+ }
203
+ }