@minniexcode/codex-switch 0.0.11 → 0.1.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/README.AI.md +110 -152
- package/README.CN.md +179 -215
- package/README.md +183 -217
- package/dist/app/add-provider.js +9 -3
- package/dist/app/edit-provider.js +17 -3
- package/dist/app/get-status.js +8 -3
- package/dist/app/list-providers.js +48 -1
- package/dist/app/run-doctor.js +4 -0
- package/dist/cli/output.js +153 -18
- package/dist/commands/handlers.js +10 -6
- package/dist/commands/help.js +9 -5
- package/dist/commands/registry.js +22 -14
- package/dist/domain/config.js +26 -1
- package/dist/domain/providers.js +16 -0
- package/dist/domain/runtime-state.js +30 -8
- package/dist/infra/config-repo.js +16 -206
- package/dist/interaction/interactive.js +16 -6
- package/dist/runtime/copilot-bridge.js +2 -1
- package/dist/storage/config-repo.js +0 -23
- package/docs/Design/codex-switch-v0.0.12-design.md +343 -0
- package/docs/Design/codex-switch-v0.1.0-design.md +152 -0
- package/docs/PRD/codex-switch-prd-v0.0.12.md +279 -0
- package/docs/PRD/codex-switch-prd-v0.1.0.md +217 -317
- package/docs/Tests/testing.md +31 -151
- package/docs/cli-usage.md +223 -524
- package/docs/codex-switch-command-design.md +649 -646
- package/docs/codex-switch-product-overview.md +86 -241
- package/docs/codex-switch-technical-architecture.md +1115 -1112
- package/package.json +51 -51
- package/dist/app/rollback-latest.js +0 -26
|
@@ -1,317 +1,217 @@
|
|
|
1
|
-
# codex-switch `0.0
|
|
2
|
-
|
|
3
|
-
## 文档信息
|
|
4
|
-
|
|
5
|
-
- 状态:
|
|
6
|
-
- 产品名:`codex-switch`
|
|
7
|
-
- CLI 命令名:`codexs`
|
|
8
|
-
-
|
|
9
|
-
- 目标版本:`0.0
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
`
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
-
|
|
149
|
-
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
-
|
|
206
|
-
|
|
207
|
-
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
### 架构约束
|
|
219
|
-
|
|
220
|
-
`0.0.6` 需要明确以下约束:
|
|
221
|
-
|
|
222
|
-
- 不把第三方 SDK 调用直接塞进 CLI 入口
|
|
223
|
-
- 不把 prompt 逻辑继续散落到每个命令分支内部
|
|
224
|
-
- 不让 `app` 层直接依赖终端输出细节
|
|
225
|
-
- 不让运行时集成逻辑反向污染领域规则
|
|
226
|
-
- 不因未来接入 Copilot 或其他 provider,就改变本地事务与回滚的安全语义
|
|
227
|
-
|
|
228
|
-
## `0.0.6` 稳定性要求
|
|
229
|
-
|
|
230
|
-
### 命令行为一致性
|
|
231
|
-
|
|
232
|
-
现有命令在 `0.0.6` 需要重点收敛:
|
|
233
|
-
|
|
234
|
-
- help 文案与真实命令行为一致
|
|
235
|
-
- 默认文本输出与 `--json` 输出语义一致
|
|
236
|
-
- TTY 与非交互模式下的失败路径可预测
|
|
237
|
-
- 危险命令的确认规则一致
|
|
238
|
-
- 同一类错误优先映射到同一类错误码
|
|
239
|
-
|
|
240
|
-
### 写命令安全语义
|
|
241
|
-
|
|
242
|
-
所有会修改 `providers.json`、`config.toml`、`auth.json` 的命令继续默认遵守:
|
|
243
|
-
|
|
244
|
-
- 单次锁
|
|
245
|
-
- 单次备份
|
|
246
|
-
- 单次失败整体回滚
|
|
247
|
-
|
|
248
|
-
不能接受的结果:
|
|
249
|
-
|
|
250
|
-
- `providers.json` 已更新但 `config.toml` 未同步
|
|
251
|
-
- `config.toml` 已更新但 `providers.json` 未同步
|
|
252
|
-
- `auth.json` 或 active profile 因失败留在半切换状态
|
|
253
|
-
|
|
254
|
-
### 读取稳定性
|
|
255
|
-
|
|
256
|
-
读取命令在 `0.0.6` 至少需要满足:
|
|
257
|
-
|
|
258
|
-
- 不因历史 workspace 或边缘状态轻易崩溃
|
|
259
|
-
- `status` 与 `doctor` 的诊断信号保持一致语义
|
|
260
|
-
- `config-show` 与 `config-list-profiles` 输出结构稳定
|
|
261
|
-
- 对缺失文件、解析失败和不一致状态给出可预测错误或警告
|
|
262
|
-
|
|
263
|
-
## Future-Ready Integration 边界
|
|
264
|
-
|
|
265
|
-
### 为什么 `0.0.6` 要预留这条线
|
|
266
|
-
|
|
267
|
-
未来存在明确扩展需求:
|
|
268
|
-
|
|
269
|
-
- 通过第三方 auth 获取认证态
|
|
270
|
-
- 借助本地代理使特定上游可在 Codex 中使用
|
|
271
|
-
- 接入外部 SDK,例如 GitHub Copilot 相关能力
|
|
272
|
-
|
|
273
|
-
如果继续沿用当前“命令直接长在 `cli.ts` 上”的方式,后续集成会快速把架构拖回高耦合状态。
|
|
274
|
-
|
|
275
|
-
### `0.0.6` 的预留目标
|
|
276
|
-
|
|
277
|
-
本版只要求建立边界,不要求交付真实功能:
|
|
278
|
-
|
|
279
|
-
- 允许未来把第三方 auth 封装为独立 integration 模块
|
|
280
|
-
- 允许未来把本地 proxy runtime 封装为独立运行时组件
|
|
281
|
-
- 允许未来把外部依赖探测、可用性检查、错误语义收敛到 runtime integration 层
|
|
282
|
-
- 不在本版锁定具体命令名、交互细节或 SDK 选型细节
|
|
283
|
-
|
|
284
|
-
### Copilot 作为代表性场景
|
|
285
|
-
|
|
286
|
-
GitHub Copilot 相关 auth / SDK / 本地代理能力,在 `0.0.6` 里的定位是:
|
|
287
|
-
|
|
288
|
-
- 作为未来架构设计的代表性输入
|
|
289
|
-
- 用于验证 `Runtime Integrations` 分层是否足够清晰
|
|
290
|
-
- 不作为 `0.0.6` 必须实现的命令需求
|
|
291
|
-
|
|
292
|
-
## 对实现的要求
|
|
293
|
-
|
|
294
|
-
从 `0.0.5` 到 `0.0.6` 的改造,默认遵守:
|
|
295
|
-
|
|
296
|
-
- 不破坏现有命令名
|
|
297
|
-
- 不破坏统一 JSON envelope
|
|
298
|
-
- 不破坏备份、回滚、锁模型
|
|
299
|
-
- 不引入只能靠交互完成的核心流程
|
|
300
|
-
- 不把未来第三方集成耦合进当前 provider/config 领域规则
|
|
301
|
-
- 允许内部文件和模块重组,但外部 CLI 契约保持稳定
|
|
302
|
-
|
|
303
|
-
## 验收标准
|
|
304
|
-
|
|
305
|
-
达到以下条件时,`0.0.6` 可以认为完成:
|
|
306
|
-
|
|
307
|
-
- 当前 help 文案与命令行为、参数、危险提示基本一致
|
|
308
|
-
- 现有命令在 TTY / 非交互 / `--json` 模式下行为稳定
|
|
309
|
-
- 读取命令对历史状态和异常状态的处理更稳,不产生明显回归
|
|
310
|
-
- 写命令继续满足锁、备份、失败回滚语义
|
|
311
|
-
- `cli.ts` 不再承担持续膨胀的主调度与交互编排复杂度
|
|
312
|
-
- 应用编排、交互层、运行时集成边界比 `0.0.5` 更清晰
|
|
313
|
-
- 为未来第三方 auth / 本地 proxy / SDK 接入预留了清楚但非侵入式的扩展边界
|
|
314
|
-
|
|
315
|
-
## 结论
|
|
316
|
-
|
|
317
|
-
`0.0.6` 是一个修复型版本,但它不是“只修 bug 不动结构”的保守补丁版。它的真正目标,是在不破坏当前 CLI 公共契约的前提下,把 `0.0.5` 已经长出来的命令面和事务能力稳住,并把代码结构调整到足以支撑下一阶段 integration-ready 演进的状态。
|
|
1
|
+
# codex-switch `0.1.0` Release Gate PRD
|
|
2
|
+
|
|
3
|
+
## 文档信息
|
|
4
|
+
|
|
5
|
+
- 状态:Release Gate
|
|
6
|
+
- 产品名:`codex-switch`
|
|
7
|
+
- CLI 命令名:`codexs`
|
|
8
|
+
- 当前稳定基线:`0.0.12`
|
|
9
|
+
- 目标版本:`0.1.0`
|
|
10
|
+
- 文档定位:定义 `codex-switch` 第一次稳定发布前必须满足的门槛
|
|
11
|
+
- 关联 beta PRD:[`./codex-switch-prd-v0.0.12.md`](./codex-switch-prd-v0.0.12.md)
|
|
12
|
+
- 关联实现约束设计:[`../Design/codex-switch-v0.1.0-design.md`](../Design/codex-switch-v0.1.0-design.md)
|
|
13
|
+
- 关联长期演进稿:[`./codex-switch-prd-v0.0.5-to-v0.1.0.md`](./codex-switch-prd-v0.0.5-to-v0.1.0.md)
|
|
14
|
+
|
|
15
|
+
## 1. 定位
|
|
16
|
+
|
|
17
|
+
`0.1.0` 是 `codex-switch` 的第一条稳定发布线,不是继续扩 feature surface 的版本,也不是把 `0.0.12` 再包装一次。
|
|
18
|
+
|
|
19
|
+
这个版本的判断标准只有一个:当前仓库已经足够稳定,能把命令面、输出契约、主工作流、诊断语义和文档事实对外固定下来,并且不需要再依赖开发期解释来“补全理解”。
|
|
20
|
+
|
|
21
|
+
## 2. 当前阻塞项
|
|
22
|
+
|
|
23
|
+
以下问题仍然阻止 `0.1.0` 成为真正可发布的稳定版本:
|
|
24
|
+
|
|
25
|
+
1. `tests/` 被忽略,导致测试无法被版本化和审阅。
|
|
26
|
+
2. README 里仍有失效的 `docs/Tests/testing.md` 链接,用户会直接遇到死链。
|
|
27
|
+
3. 版本叙事仍停留在 `0.0.12`,对外材料没有把 `0.1.0` 讲成稳定发布线。
|
|
28
|
+
4. 发布故事和实现状态还没有完全对齐,尤其是主工作流、`migrate` 定位和 `setup` 定位。
|
|
29
|
+
|
|
30
|
+
这些阻塞项必须先被收口,`0.1.0` 才能成立。
|
|
31
|
+
|
|
32
|
+
## 3. `0.1.0` 的稳定合同
|
|
33
|
+
|
|
34
|
+
`0.1.0` 必须把以下内容视为稳定合同,不再当作可随意重写的草案。
|
|
35
|
+
|
|
36
|
+
### 3.1 命令面
|
|
37
|
+
|
|
38
|
+
稳定命令面包括:
|
|
39
|
+
|
|
40
|
+
- `init`
|
|
41
|
+
- `login`
|
|
42
|
+
- `list`
|
|
43
|
+
- `show`
|
|
44
|
+
- `current`
|
|
45
|
+
- `status`
|
|
46
|
+
- `doctor`
|
|
47
|
+
- `config show`
|
|
48
|
+
- `config list-profiles`
|
|
49
|
+
- `add`
|
|
50
|
+
- `edit`
|
|
51
|
+
- `switch`
|
|
52
|
+
- `remove`
|
|
53
|
+
- `import`
|
|
54
|
+
- `export`
|
|
55
|
+
- `bridge start`
|
|
56
|
+
- `bridge status`
|
|
57
|
+
- `bridge stop`
|
|
58
|
+
- `backups list`
|
|
59
|
+
- `rollback`
|
|
60
|
+
|
|
61
|
+
其中:
|
|
62
|
+
|
|
63
|
+
- `migrate` 只能是高级 adopt helper。
|
|
64
|
+
- `setup` 只能是 deprecated entry。
|
|
65
|
+
|
|
66
|
+
### 3.2 `--json` envelope
|
|
67
|
+
|
|
68
|
+
`--json` 的顶层 envelope 必须保持不变:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"ok": true,
|
|
73
|
+
"command": "list",
|
|
74
|
+
"data": {},
|
|
75
|
+
"warnings": [],
|
|
76
|
+
"error": null
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
约束如下:
|
|
81
|
+
|
|
82
|
+
- 顶层字段名不变。
|
|
83
|
+
- 顶层字段顺序和 shape 不变。
|
|
84
|
+
- 新信息只能继续追加到 `data`、`warnings` 或 `error.details`。
|
|
85
|
+
|
|
86
|
+
### 3.3 dual-path model
|
|
87
|
+
|
|
88
|
+
`0.1.0` 必须把以下分层固定为正式合同:
|
|
89
|
+
|
|
90
|
+
- tool home:
|
|
91
|
+
- `codex-switch.json`
|
|
92
|
+
- `providers.json`
|
|
93
|
+
- `backups/`
|
|
94
|
+
- `runtime/`
|
|
95
|
+
- `runtimes/`
|
|
96
|
+
- target Codex runtime:
|
|
97
|
+
- `config.toml`
|
|
98
|
+
- `auth.json`
|
|
99
|
+
|
|
100
|
+
含义必须稳定:
|
|
101
|
+
|
|
102
|
+
- `providers.json` 是管理态 SSOT。
|
|
103
|
+
- `config.toml` 是受管 runtime routing 文件。
|
|
104
|
+
- `auth.json` 是受管 auth projection 文件。
|
|
105
|
+
|
|
106
|
+
### 3.4 主工作流
|
|
107
|
+
|
|
108
|
+
Direct provider 主路径:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
codexs init
|
|
112
|
+
codexs add <provider> --profile <name> --api-key <key>
|
|
113
|
+
codexs switch <provider>
|
|
114
|
+
codexs status
|
|
115
|
+
codexs doctor
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Copilot provider 主路径:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
codexs init
|
|
122
|
+
codexs login copilot
|
|
123
|
+
codexs add <provider> --copilot --profile <name>
|
|
124
|
+
codexs switch <provider>
|
|
125
|
+
codexs status
|
|
126
|
+
codexs doctor
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
`migrate` 的定位必须明确为:
|
|
130
|
+
|
|
131
|
+
- 面向已有 runtime state 的高级 adopt helper。
|
|
132
|
+
- 不应与 fresh install 主路径混淆。
|
|
133
|
+
- 不应被写成所有新用户都应先执行的默认步骤。
|
|
134
|
+
|
|
135
|
+
## 4. Release Gate
|
|
136
|
+
|
|
137
|
+
只有以下条件全部满足,才允许发布 `0.1.0`。
|
|
138
|
+
|
|
139
|
+
### 4.1 工作流
|
|
140
|
+
|
|
141
|
+
- fresh tool home 下 direct provider 主路径可稳定走通。
|
|
142
|
+
- fresh tool home 下 Copilot 主路径可稳定走通。
|
|
143
|
+
- `switch` 的成功语义仍然等于 config 和 auth projection 都正确。
|
|
144
|
+
- `rollback` 对受管写操作仍然可信。
|
|
145
|
+
|
|
146
|
+
### 4.2 输出与语义
|
|
147
|
+
|
|
148
|
+
- `--json` 读命令输出稳定。
|
|
149
|
+
- 非交互模式不会意外触发 prompt。
|
|
150
|
+
- 错误码和 issue code 对常见失败场景足够稳定。
|
|
151
|
+
- `status` 与 `doctor` 能清楚说明下一步修复动作。
|
|
152
|
+
- `list`、`status`、`doctor` 的人类可读输出和交互提示一致。
|
|
153
|
+
|
|
154
|
+
### 4.3 文档
|
|
155
|
+
|
|
156
|
+
- README、README.CN、README.AI、CLI usage、product overview、PRD、design 和 changelog 与实际行为一致。
|
|
157
|
+
- `docs/Tests/testing.md` 不能继续停留在忽略状态,测试回归必须落仓库并可版本化。
|
|
158
|
+
- 主路径在所有面向用户的文档中必须一致。
|
|
159
|
+
- `0.1.0` 的定位必须压过旧的 `0.0.12` 叙事。
|
|
160
|
+
|
|
161
|
+
### 4.4 包内容
|
|
162
|
+
|
|
163
|
+
- `npm pack --dry-run` 结果合理。
|
|
164
|
+
- tarball 中包含正确的 README、LICENSE、docs、dist。
|
|
165
|
+
- `codexs --help`、`codexs --version`、安装指引与 npm 包元数据一致。
|
|
166
|
+
|
|
167
|
+
### 4.5 结构
|
|
168
|
+
|
|
169
|
+
- 不再保留明显误导性的历史目录语义。
|
|
170
|
+
- 稳定模块的边界说明足够清楚。
|
|
171
|
+
- 新问题不再需要反复回到超大入口文件修补。
|
|
172
|
+
|
|
173
|
+
## 5. 可执行验证清单
|
|
174
|
+
|
|
175
|
+
`0.1.0` 的发布前验证必须至少覆盖以下项目:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
npm run build
|
|
179
|
+
npm test
|
|
180
|
+
npx tsc --noEmit
|
|
181
|
+
npm pack --dry-run
|
|
182
|
+
node dist/cli.js --help
|
|
183
|
+
node dist/cli.js --version
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
同时必须做以下行为验证:
|
|
187
|
+
|
|
188
|
+
- fresh direct provider flow。
|
|
189
|
+
- fresh Copilot provider flow。
|
|
190
|
+
- `list/status/doctor` 语义检查。
|
|
191
|
+
- `--json` 输出检查。
|
|
192
|
+
- `migrate` 作为高级 adopt helper 的检查。
|
|
193
|
+
- `setup` 作为 deprecated entry 的检查。
|
|
194
|
+
|
|
195
|
+
## 6. 明确不在范围内
|
|
196
|
+
|
|
197
|
+
`0.1.0` 不要求完成以下内容:
|
|
198
|
+
|
|
199
|
+
- 新 upstream。
|
|
200
|
+
- GUI / TUI。
|
|
201
|
+
- daemon。
|
|
202
|
+
- plugin system。
|
|
203
|
+
- auto migration。
|
|
204
|
+
- 兼容层。
|
|
205
|
+
- dual-read / dual-write。
|
|
206
|
+
- `migrate` 的完整非交互产品化。
|
|
207
|
+
- 旧状态的自动升级保留逻辑。
|
|
208
|
+
|
|
209
|
+
## 7. 若 Gate 未通过
|
|
210
|
+
|
|
211
|
+
如果任何阻塞项仍然存在,就不要强行发布 `0.1.0`。
|
|
212
|
+
|
|
213
|
+
此时应继续发布 beta 或 rc 版本,而不是为了版本号好看提前进入稳定线。
|
|
214
|
+
|
|
215
|
+
## 8. 结论
|
|
216
|
+
|
|
217
|
+
`0.1.0` 的本质不是“功能更多”,而是“承诺更稳”。当命令面、输出契约、主工作流、诊断语义、包内容和文档事实完全一致时,这个版本号才成立。
|