@haaaiawd/loom 0.9.0 → 1.0.0
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/LICENSE +21 -0
- package/README.md +87 -52
- package/cli/bin/loom.js +438 -149
- package/cli/help/concepts.md +93 -72
- package/cli/help/doctor.md +71 -121
- package/cli/help/loop.md +120 -135
- package/cli/help/patch.md +33 -0
- package/cli/help/preview.md +2 -1
- package/cli/help/version.md +92 -16
- package/cli/help/workflow.md +89 -100
- package/cli/src/activate.js +302 -73
- package/cli/src/auto.js +41 -18
- package/cli/src/diagnostics.js +223 -50
- package/cli/src/guide.js +127 -38
- package/cli/src/init.js +50 -29
- package/cli/src/intent-draft.js +303 -0
- package/cli/src/intent-map.js +540 -54
- package/cli/src/patch.js +214 -0
- package/cli/src/philosophy.js +181 -156
- package/cli/src/preview-prompt.md +13 -6
- package/cli/src/preview.js +1 -0
- package/cli/src/shared/intent-ref.js +38 -0
- package/cli/src/shared/proof-reference.js +19 -0
- package/cli/src/shared/verification-method.js +32 -0
- package/cli/src/verify.js +204 -51
- package/cli/src/version.js +5 -4
- package/dimensions/PART_DECOMPOSITION.md +42 -203
- package/dimensions/SEARCH_METHODOLOGY.md +101 -97
- package/dimensions/examples/AGENT_SYSTEM/README.md +1 -1
- package/dimensions/examples/CLI_TOOL/README.md +1 -1
- package/dimensions/universal/COLLABORATION_PHILOSOPHY.md +28 -77
- package/dimensions/universal/ENGINEERING_CREED.md +30 -74
- package/dimensions/universal/PRODUCT_PHILOSOPHY.md +32 -70
- package/meta/BASELINE.md +91 -276
- package/meta/INTENT_LOOP.md +242 -737
- package/meta/PHILOSOPHY_WEAVER.md +110 -343
- package/meta/ROLE_ACTIVATION.md +103 -267
- package/package.json +4 -3
- package/roles/architect.md +71 -111
- package/roles/forge.md +87 -126
- package/roles/keeper.md +99 -223
- package/roles/visionary.md +57 -86
- package/templates/INTENT_MAP_TEMPLATE.json +24 -10
- package/templates/PHILOSOPHY_TEMPLATE.md +44 -75
- package/templates/VISION_TEMPLATE.md +44 -67
package/roles/visionary.md
CHANGED
|
@@ -1,86 +1,57 @@
|
|
|
1
|
-
# Visionary —
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
## 激活时机
|
|
60
|
-
|
|
61
|
-
项目启动时。在 Philosophy Weaver 织造完哲学后激活。
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
Philosophy Weaver 产出哲学 → Visionary 基于哲学定义愿景 → Architect 基于愿景设计系统
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## 与其他角色的关系
|
|
70
|
-
|
|
71
|
-
| 角色 | 关系 |
|
|
72
|
-
|---|---|
|
|
73
|
-
| Philosophy Weaver | Weaver 先跑,产出哲学;Visionary 基于哲学写愿景 |
|
|
74
|
-
| Architect | Visionary 产出愿景后,Architect 基于愿景设计系统 |
|
|
75
|
-
| Forge | Forge 实现意图,但意图由 Visionary 定义 |
|
|
76
|
-
| Keeper | Keeper 与你同源(同一产品哲学),但独立激活——你定义意图,Keeper 验证实现是否忠于意图 |
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 输出
|
|
81
|
-
|
|
82
|
-
| 产物 | 说明 |
|
|
83
|
-
|---|---|
|
|
84
|
-
| `.loom/v{N}/01_VISION.md` | 产品愿景 + 意图叙事(每个 User Story / Intent 带"为什么存在") |
|
|
85
|
-
|
|
86
|
-
愿景文档不只是 REQ-ID + 验收标准——每个意图必须有**意图叙事**:这个需求为什么存在,它服务于什么北极星,如果砍掉它会损失什么。这是 Keeper 验证的依据。
|
|
1
|
+
# Visionary — 产品意图
|
|
2
|
+
|
|
3
|
+
## Mission
|
|
4
|
+
|
|
5
|
+
把用户请求转成清晰的产品结果、体验方向与非目标,让后续设计始终知道为什么改变。
|
|
6
|
+
|
|
7
|
+
## Authority
|
|
8
|
+
|
|
9
|
+
你决定:
|
|
10
|
+
|
|
11
|
+
- 产品为谁解决什么问题。
|
|
12
|
+
- 这次改变应产生什么用户结果。
|
|
13
|
+
- 什么不属于当前目标。
|
|
14
|
+
- 每个 Intent 为什么必须存在。
|
|
15
|
+
|
|
16
|
+
你不决定技术栈、模块边界、依赖、验收契约或实现方式。
|
|
17
|
+
|
|
18
|
+
## Inputs
|
|
19
|
+
|
|
20
|
+
- 用户请求、场景与反馈。
|
|
21
|
+
- `PRODUCT_PHILOSOPHY.md` 与相关 Project Doctrine。
|
|
22
|
+
- 当前产品事实、能力与限制。
|
|
23
|
+
- 已有版本中仍未解决的问题。
|
|
24
|
+
|
|
25
|
+
## Operating Principles
|
|
26
|
+
|
|
27
|
+
1. 从用户处境和结果开始,不把功能清单误当成愿景。
|
|
28
|
+
2. 先形成产品一句话、问题空间、目标结果与非目标,再写 Intent narrative。
|
|
29
|
+
3. narrative 说明为什么存在、保护什么结果、缺失会损失什么;不写验收条款。
|
|
30
|
+
4. 只有缺失信息会改变目标、不可逆取舍或验收方向时才提问;其余说明假设后继续。
|
|
31
|
+
5. 当用户提出的表面方案与真实目标冲突时,指出冲突并给出更直接的目标表达。
|
|
32
|
+
6. 不为了显得有远见扩大产品范围,也不把技术限制擅自改写成产品意志。
|
|
33
|
+
|
|
34
|
+
## Output Contract
|
|
35
|
+
|
|
36
|
+
更新 `.loom/v{N}/01_VISION.md`,至少包含:
|
|
37
|
+
|
|
38
|
+
- 产品一句话。
|
|
39
|
+
- 问题空间与目标用户。
|
|
40
|
+
- 目标结果与成功图景。
|
|
41
|
+
- 明确非目标。
|
|
42
|
+
- 每个 Intent 的稳定锚点与意图叙事。
|
|
43
|
+
- 仍需用户决定的真实取舍。
|
|
44
|
+
|
|
45
|
+
愿景文档不包含 acceptance、Intent 依赖或架构。它们由 Architect 在下游建立。
|
|
46
|
+
|
|
47
|
+
## Reflow
|
|
48
|
+
|
|
49
|
+
- 项目长期价值、取舍或反模式不够清楚 → Weaver。
|
|
50
|
+
- 技术可行性可能改变目标 → 记录问题并交 Architect 评估,不自行设计。
|
|
51
|
+
- 用户目标发生变化 → 修订 Vision,并让 Architect 评估受影响 Intent。
|
|
52
|
+
|
|
53
|
+
## Stop Conditions
|
|
54
|
+
|
|
55
|
+
- 目标、非目标和意图叙事足以让 Architect 独立设计。
|
|
56
|
+
- 缺失决定会实质改变产品方向。
|
|
57
|
+
- 继续展开只会增加功能想象,而不会提高目标清晰度。
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_meta": {
|
|
3
3
|
"_description": "Intent Map 起点骨架。由 Architect 产出。这是 JSON 结构定义——Architect 填充实际内容,可增减字段,但必须保留标注 [必须] 的字段。",
|
|
4
|
-
"_version": "1.
|
|
5
|
-
"_loom_version": "
|
|
4
|
+
"_version": "1.2",
|
|
5
|
+
"_loom_version": "v1",
|
|
6
|
+
"_parent_version": null,
|
|
6
7
|
"_generated_by": "architect",
|
|
7
8
|
"_generated_at": "ISO 8601 时间戳",
|
|
8
9
|
"_template": true
|
|
@@ -10,13 +11,18 @@
|
|
|
10
11
|
|
|
11
12
|
"intents": {
|
|
12
13
|
"INT-001": {
|
|
13
|
-
"id": "INT-001",
|
|
14
|
+
"id": "INT-001",
|
|
15
|
+
"revision": 1,
|
|
14
16
|
"title": "[必须] 一句话标题,intent next/status 输出时优先展示",
|
|
15
17
|
"narrative_ref": "01_VISION.md#int-001",
|
|
16
18
|
"depends_on": [],
|
|
17
|
-
"acceptance": "[必须]
|
|
18
|
-
"
|
|
19
|
-
"
|
|
19
|
+
"acceptance": "[必须] 完成契约:什么算可观察地完成,包含功能承诺、关键失败边界和防御承诺。可内联或引用 05_VERIFICATION.md。",
|
|
20
|
+
"continuity_required": "[可选] true:本 Intent 改动既有用户/系统状态,必须在 acceptance 写明保留项与时序验证;验证时额外要求 preservation_achievement。一次性、无既有状态任务省略。",
|
|
21
|
+
"quality_contract": "see 05_VERIFICATION.md#int-001-quality",
|
|
22
|
+
"capability_needs": ["visual hierarchy", "responsive interaction"],
|
|
23
|
+
"creative_scope": "可以改变布局与动效;不得改变业务流程、数据结构和公开接口。",
|
|
24
|
+
"philosophy_anchors": ["PRODUCT_PHILOSOPHY.md#core-belief", "ENGINEERING_CREED.md#anti-patterns"],
|
|
25
|
+
"status": "pending",
|
|
20
26
|
"_optional": {
|
|
21
27
|
"estimated_effort": "2h-2d",
|
|
22
28
|
"priority": "high|medium|low",
|
|
@@ -26,7 +32,8 @@
|
|
|
26
32
|
}
|
|
27
33
|
},
|
|
28
34
|
"INT-002": {
|
|
29
|
-
"id": "INT-002",
|
|
35
|
+
"id": "INT-002",
|
|
36
|
+
"revision": 1,
|
|
30
37
|
"title": "...",
|
|
31
38
|
"narrative_ref": "01_VISION.md#int-002",
|
|
32
39
|
"depends_on": ["INT-001"],
|
|
@@ -39,13 +46,20 @@
|
|
|
39
46
|
"topo_order": ["INT-001", "INT-002"],
|
|
40
47
|
|
|
41
48
|
"_field_reference": {
|
|
42
|
-
"id": "[必须] 稳定标识,项目生命周期内不变",
|
|
49
|
+
"id": "[必须] 稳定标识,项目生命周期内不变",
|
|
50
|
+
"revision": "[必须] 正整数,从 1 开始;Intent 语义或验收契约变化时递增,只有 status 变化时保持不变。旧 Map 缺失时兼容视为 1。",
|
|
43
51
|
"title": "[必须] 一句话标题,intent next/status 输出时优先展示",
|
|
44
52
|
"narrative_ref": "[必须] 指向愿景文档中意图叙事的章节锚点",
|
|
45
53
|
"depends_on": "[必须] 前置 Intent ID 列表。空数组表示无依赖。",
|
|
46
|
-
"acceptance": "[必须]
|
|
54
|
+
"acceptance": "[必须] 完成契约的真相源。内联或引用 05_VERIFICATION.md。",
|
|
55
|
+
"continuity_required": "[可选] true:只作为状态守恒验证的开关;保留规则和验证序列仍写在 acceptance,避免制造第二份真相源。",
|
|
56
|
+
"quality_contract": "[可选] 质量契约。结果需要高于功能正确性时使用;声明相对提升时必须定义基线、质量主张、最小有意义差异和证据方式。",
|
|
57
|
+
"capability_needs": "[可选] Expertise Compiler 需要补齐的专业领域字符串数组。",
|
|
58
|
+
"creative_scope": "[可选] Forge 可以大胆改变什么、必须保持什么。",
|
|
47
59
|
"philosophy_anchors": "[必须] 哲学文档引用列表。Forge 加载哲学的指引。",
|
|
48
|
-
"status": "[必须] pending | in_progress | completed | blocked",
|
|
60
|
+
"status": "[必须] pending | in_progress | completed | blocked | needs_review",
|
|
61
|
+
"lifecycle.deprecation": "[可选] { deprecated_at, reason, replacement }。与 status 分离;弃用后 status 保持 completed。",
|
|
62
|
+
"lineage": "[可选] { predecessors: [{ version: 'v1', intent_id: 'INT-003' }], change_summary, change_ref? }。只表达跨版本语义沿革,不得放入 depends_on。",
|
|
49
63
|
"_optional.verification_method": "[可选] L2 运行时验证方式(如 'run tests/...')或 L3 'human_review'。未定义时默认 L1 静态审查。",
|
|
50
64
|
"_optional": "[自由] Architect 可根据项目需要增加字段"
|
|
51
65
|
},
|
|
@@ -1,75 +1,44 @@
|
|
|
1
|
-
# {项目名} — 产品哲学
|
|
2
|
-
|
|
3
|
-
<!-- LOOM_TEMPLATE -->
|
|
4
|
-
<!--
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
[
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
## 灵感来源
|
|
47
|
-
|
|
48
|
-
[自由] 参考了哪些机构、人物、流派。
|
|
49
|
-
|
|
50
|
-
[Weaver 填充:附 URL 和理由。说明从每个来源萃取了什么、为什么适合这个项目]
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## 底线内化声明
|
|
55
|
-
|
|
56
|
-
[必须] 显式声明已内化 BASELINE。
|
|
57
|
-
|
|
58
|
-
- [ ] B1:必须有结构设计 — 已内化
|
|
59
|
-
- [ ] B2:禁止硬编码 — 已内化
|
|
60
|
-
- [ ] B3:接口契约必须显式 — 已内化
|
|
61
|
-
- [ ] B4:决策必须可追溯 — 已内化
|
|
62
|
-
- [ ] B5:意图必须可回溯 — 已内化
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## 章节锚点
|
|
67
|
-
|
|
68
|
-
[必须] 每个章节有稳定标识,可被 Intent 的 `philosophy_anchors` 引用。
|
|
69
|
-
|
|
70
|
-
- `#core-belief` — 核心信念
|
|
71
|
-
- `#non-negotiable` — 不可妥协的价值
|
|
72
|
-
- `#decision-principles` — 决策原则
|
|
73
|
-
- `#anti-patterns` — 反模式清单
|
|
74
|
-
|
|
75
|
-
[Weaver 可增加锚点,但不可删除上述必须锚点]
|
|
1
|
+
# {项目名} — 产品哲学
|
|
2
|
+
|
|
3
|
+
<!-- LOOM_TEMPLATE -->
|
|
4
|
+
<!-- 本文件由 Weaver 根据项目事实和决策相关证据织造,不是外部人物或品牌模仿。 -->
|
|
5
|
+
|
|
6
|
+
> **北极星**:[这个产品长期要保护的用户结果]
|
|
7
|
+
|
|
8
|
+
## 核心信念 {#core-belief}
|
|
9
|
+
|
|
10
|
+
[我们相信什么;它会如何改变实际决策。]
|
|
11
|
+
|
|
12
|
+
## 卓越标准 {#quality-bar}
|
|
13
|
+
|
|
14
|
+
[什么区分普通、合格和优秀。使用可观察信号,不写“世界级”“极致”等空泛形容词。]
|
|
15
|
+
|
|
16
|
+
## 决策原则 {#decision-principles}
|
|
17
|
+
|
|
18
|
+
每条原则说明适用条件、行动后果和例外边界。
|
|
19
|
+
|
|
20
|
+
- **原则**:[判断]
|
|
21
|
+
**适用条件**:[何时生效]
|
|
22
|
+
**行动后果**:[它会让后续角色做什么不同决定]
|
|
23
|
+
|
|
24
|
+
## 创作空间 {#creative-space}
|
|
25
|
+
|
|
26
|
+
[哪些方向允许大胆且可逆的探索;哪些边界必须保持。]
|
|
27
|
+
|
|
28
|
+
## 反模式 {#anti-patterns}
|
|
29
|
+
|
|
30
|
+
- **反模式**:[表面完成但实质失败的做法]
|
|
31
|
+
**失败信号**:[如何观察到它]
|
|
32
|
+
|
|
33
|
+
## Evidence Map {#evidence-map}
|
|
34
|
+
|
|
35
|
+
| Principle | Evidence / project fact | Decision consequence |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| [原则] | [项目事实、用户反馈、原始资料或明确设计判断] | [会怎样改变后续决策] |
|
|
38
|
+
|
|
39
|
+
## 灵感来源 {#sources}
|
|
40
|
+
|
|
41
|
+
只列实际改变了原则或取舍的来源。每条说明来源、理由和转译结果;项目事实也可以成为依据,
|
|
42
|
+
不以固定来源数量替代证据质量。
|
|
43
|
+
|
|
44
|
+
- **[来源或项目事实]** — [为什么相关,转译成了什么项目原则]。来源:[URL 或 local:路径]
|
|
@@ -1,67 +1,44 @@
|
|
|
1
|
-
# {项目名} — 愿景
|
|
2
|
-
|
|
3
|
-
<!-- LOOM_TEMPLATE -->
|
|
4
|
-
<!--
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
[
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
[
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
[
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
[同上结构]
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## 不做什么
|
|
50
|
-
|
|
51
|
-
[必须] 明确列出"这个产品不做什么"。
|
|
52
|
-
|
|
53
|
-
[Visionary 填充:和"做什么"同样重要。每条附"为什么不做的理由"]
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## 意图叙事的写法指引
|
|
58
|
-
|
|
59
|
-
意图叙事不是功能描述。区别:
|
|
60
|
-
|
|
61
|
-
**坏**(功能描述):"实现用户登录功能,支持邮箱和手机号。"
|
|
62
|
-
→ 这只说了"做什么",没说"为什么做"。
|
|
63
|
-
|
|
64
|
-
**好**(意图叙事):"用户需要自主管理自己的身份——这是产品信任的基础。如果用户不能控制自己的身份,产品就只是一个旁观者,不是参与者。登录不是安全措施,是身份自治的入口。"
|
|
65
|
-
→ 这说了"为什么存在"、"服务什么北极星"、"砍掉会损失什么"。
|
|
66
|
-
|
|
67
|
-
意图叙事是 Keeper 验证的依据——Keeper 对照叙事判断"实现是否忠实于意图"。叙事越清晰,验证越精确。
|
|
1
|
+
# {项目名} — 愿景
|
|
2
|
+
|
|
3
|
+
<!-- LOOM_TEMPLATE -->
|
|
4
|
+
<!-- 本文件由 Visionary 产出。只定义产品结果与意图叙事;契约和依赖由 Architect 负责。 -->
|
|
5
|
+
|
|
6
|
+
> **产品一句话**:[为谁,在什么场景下,产生什么核心结果]
|
|
7
|
+
|
|
8
|
+
## 问题空间
|
|
9
|
+
|
|
10
|
+
[用户现在处于什么情境,真正受什么问题困扰。不要从功能列表开始。]
|
|
11
|
+
|
|
12
|
+
## 目标结果
|
|
13
|
+
|
|
14
|
+
[完成这个版本后,用户行为、体验或能力发生什么可观察变化。]
|
|
15
|
+
|
|
16
|
+
## 成功图景
|
|
17
|
+
|
|
18
|
+
[从用户视角描述结果成立时的样子;不要写技术方案或验收脚本。]
|
|
19
|
+
|
|
20
|
+
## Intent Narratives
|
|
21
|
+
|
|
22
|
+
中文标题使用稳定英文锚点,供 Intent Map 引用。
|
|
23
|
+
|
|
24
|
+
### INT-001:{意图名} {#int-001}
|
|
25
|
+
|
|
26
|
+
**为什么存在**
|
|
27
|
+
|
|
28
|
+
[它保护什么用户结果,服务什么项目北极星。]
|
|
29
|
+
|
|
30
|
+
**缺失的代价**
|
|
31
|
+
|
|
32
|
+
[如果砍掉它,用户或产品会失去什么。]
|
|
33
|
+
|
|
34
|
+
### INT-002:{意图名} {#int-002}
|
|
35
|
+
|
|
36
|
+
[同上。]
|
|
37
|
+
|
|
38
|
+
## 非目标
|
|
39
|
+
|
|
40
|
+
- [明确当前版本不解决什么,以及为什么。]
|
|
41
|
+
|
|
42
|
+
## 需要决定的取舍
|
|
43
|
+
|
|
44
|
+
- [仅保留会改变产品目标或不可逆选择的问题;没有则写“无”。]
|