2020 - B1 只承诺迁移可见性、提示与说明
2121 - B1 不承诺一键升级器,也不承诺完整 ` deactivate / clean / prune `
2222
23+ 4 . installer Python 最低版本 preflight 移出本轮
24+ - 原 ` 5.7 ` 的 installer 三入口 Python 最低版本 preflight 不纳入当前 B1 主线与 ` feature/plan-b1-bootstrap-policy ` 分支策略
25+ - 若后续需要推进,单独立项并补对应回归;本轮不借道扩大 ` bootstrap policy + code matrix + CLI surface ` 的实现面
26+
2327## Part1 收口状态
2428- 已落地:
2529 - 首次写入授权前移到 host ingress / workspace preflight,` ~go / ~go plan / ~go init ` 与 ` ~compare / ~go finalize / ~go exec ` 的首写语义已落白名单/黑名单
60643 . 显式强意图命令与 ` confirm_bootstrap ` 的优先级必须固定
6165 - ` ~go ` / ` ~go plan ` 在 ` interactive + writable + target_root 无歧义 + 未命中 brake layer ` 时,可直接写入 thin stub
6266 - 仅当 ` monorepo root ` 存在歧义、workspace 不可写、处于 ` non-interactive / non-git ` 场景、或命中 brake layer 时,宿主才应回退到 ` confirm_bootstrap `
67+ - ` non-git ` 仅作为首次激活写入前的 ` confirm_bootstrap ` 触发原因之一;确认成功后回到普通成功路径,不单独抬为默认成功/失败主码,只在 warning/evidence 中暴露 ` non_git_workspace ` 与 ` ignore_mode = noop `
6368
64694 . 语义判定层只负责提议,不负责授权
6570 - 语义层只能输出结构化 intent proposal
8893 - 最低有效性 = ` JSON 可解析 + schema_version 字段存在 `
8994 - ` schema_version ` 值域、其他字段完整性与 bundle 兼容性仍由 ` preflight / validate ` 负责
90957 . ` non-interactive / readonly / non-git / monorepo ` 场景必须有确定性降级,不得卡在确认、不得 silent activation、不得静默写到错误 root
96+ - 其中 ` non-git ` 的确定性降级必须分层:写入前触发 ` confirm_bootstrap ` ,写入后仅在 warning/evidence 中可见,不额外生成默认结果主码
91978 . 所有授权路径都必须产出稳定 reason code,禁止 silent bootstrap,禁止 silent downgrade
9298
9399### 非目标
@@ -183,7 +189,7 @@ workspace-local `.sopify-runtime/manifest.json` 只保留最小控制面字段
1831891 . ` ignore_mode ` 由 bootstrap-time explicit choice 决定并写入 thin stub;它不是每次运行都要重复携带的 CLI flag,也不依赖首次可能不存在的配置文件
1841902 . git 仓库默认写 ` .git/info/exclude ` (` ignore_mode = exclude ` )
1851913 . 仅在显式 commit-lock 选择时才更新 ` .gitignore ` (` ignore_mode = gitignore ` )
186- 4 . 非 git 仓库给出可见但不阻断的降级提示 ,并记录为 ` ignore_mode = noop `
192+ 4 . 非 git 仓库在首次激活写入前作为 ` confirm_bootstrap ` 的触发原因之一;确认并写入成功后给出可见但不阻断的 warning/evidence ,并记录为 ` ignore_mode = noop ` ,但不额外抬升为默认结果主码
1871935 . ` .git/info/exclude ` 使用 managed block(` BEGIN/END sopify-managed ` )承载 Sopify 条目,按 best-effort 幂等追加;不以严格去重或文件锁为前提
1881946 . 若后续切换 ` ignore_mode ` ,必须通过显式 re-bootstrap / update 流程完成,并对 Sopify 可安全归属的旧模式条目做确定性处理;超出安全判定范围的残留给出可见提示与手动 remediation,不得静默遗留
189195
@@ -222,6 +228,8 @@ workspace-local `.sopify-runtime/manifest.json` 只保留最小控制面字段
222228 - ` action_level ` 与 ` primary_code ` 分离;消费侧仅可基于这三者做分支、渲染与测试断言
223229 - ` global_bundle_missing / global_bundle_incompatible / global_index_corrupted / legacy_fallback_selected ` 保持独立 ` primary_code ` ,以支持不同的 actionable hint
224230 - ` legacy_fallback_selected ` 不得 silent downgrade;若允许继续执行,必须带有可见性或确认语义
231+ - ` stub_invalid ` 保持独立 ` primary_code ` ;其 remediation 指向 workspace-local ` .sopify-runtime/manifest.json ` ,不得与全局 bundle 问题混桶
232+ - ` legacy_fallback_blocked ` 不进入默认结果 ` primary_code ` 集合;仅作为对应 global failure outcome 的 ` evidence ` / doctor / status 补充诊断暴露
225233 - ` message_hint ` 仅作 ` debug/unstable ` 辅助文本;消费侧不得依赖它驱动逻辑、渲染用户提示或编写稳定测试断言
226234
2272352 . Host Ingress Contract
@@ -239,6 +247,12 @@ workspace-local `.sopify-runtime/manifest.json` 只保留最小控制面字段
239247 - ` violations[].error_kind ` 值集固定为 ` missing | invalid_value | invalid_path | not_found | unreadable `
240248 - 当目标存在但不可作为目录使用时,` error_kind = not_found ` ,并可通过 ` actual_kind = file | broken_symlink | other ` 提供附加诊断;symlink 最终指向目录时视为合法
241249
250+ 4 . Result-Code Layering
251+ - ` default primary codes ` 只保留会改变默认 ` next_step ` 的结果:` stub_selected / stub_invalid / global_bundle_missing / global_bundle_incompatible / global_index_corrupted / legacy_fallback_selected / host_mismatch / ingress_contract_invalid / root_confirm_required / readonly / non_interactive `
252+ - ` diagnostic-only identifiers ` 只经 ` evidence ` 与 CLI warning surface 暴露,不新增新的稳定机器字段:` non_git_workspace / ignore_written / root_reuse_ancestor_marker / invalid_ancestor_marker / legacy_fallback_blocked `
253+ - ` non_git_workspace ` 不是默认成功主码,也不是默认失败主码;它只在首次激活写入前作为 ` confirm_bootstrap ` 触发原因,写入后只留在 warning/evidence,并同时暴露 ` ignore_mode = noop `
254+ - ` confirm_bootstrap ` 的触发原因不得与结果主码混用:写入前由 checkpoint reason / evidence 表达,写入后成功路径回到 ` stub_selected `
255+
242256## CLI 渲染层补充冻结
2432571 . 渲染层职责
244258 - CLI 渲染层只消费稳定机器事实:` primary_code + action_level + evidence ` ,以及 ` ingress_contract_invalid ` 下的 ` violations[] `
@@ -303,6 +317,7 @@ workspace-local `.sopify-runtime/manifest.json` 只保留最小控制面字段
303317- 为 stub-first 与 legacy fallback 补 reason code 矩阵
304318- 为 dual-host / old workspace / non-git 仓库补回归测试
305319- 同步总纲与迁移说明(仅限可见性/说明;不包含一键迁移器)
320+ - installer ` --workspace ` 本轮仅保留 internal / maintainer prewarm,不作为 B1 正式用户入口;若后续要正式支持 monorepo ` activation_root ` / root confirm UX,需在 B1 后单独立项
306321
307322## 验收门
3083231 . 新 workspace bootstrap 后只落 thin stub,不再复制整包 runtime
0 commit comments