@@ -233,6 +233,8 @@ Sopify 接收后由 protocol admission 做结构校验准入,不由生产器
233233
234234** source** :** MUST** 标识验证器来源,供 Validator 和宿主解释 evidence provenance。是否基于 source 做差异化处理不在当前 normative scope。
235235
236+ 显式审计某个 plan 时,Verifier 仍保持只读并返回 ` verdict / evidence / source ` 。宿主以 ` subject_type=plan ` 、方案目录 ` subject_ref ` 和目标 ` plan.md ` 的 SHA-256 ` revision_digest ` 重新校验主体后,只能通过 ` sopify_writer ` 写入该方案未占用的 ` verify_NNN ` receipt;不得切换 active plan、改写 handoff 或修改方案正文。本规则只明确写入责任,不定义新的 Review Wire 或 evidence attachment schema。
237+
236238#### Verifier Read-Only Contract(P8 升格)
237239
238240P8 新增 Verifier 写入边界约束:
@@ -459,6 +461,8 @@ ExecutionAuthorizationReceipt 是 execute_existing_plan 授权通过后生成的
459461
460462** 顺序设计原则** :active_plan 定位后** 先读 plan.md 建立语义真相** ,再读 current_handoff 作为恢复提示——避免 handoff 反过来变成第二真相源。
461463
464+ ` workspace_status_lite ` 可用时只聚合上述文件事实;不可用时宿主直接按 4 步文件协议继续。MCP 不是 managed action 的入口依赖,也不输出工作流结论。
465+
462466### 8.4 读取预算红线
463467
464468| 资产 | 默认读取 | 何时扩展 |
@@ -490,6 +494,10 @@ host MUST NOT 默认全量扫描 receipts/ 内容。
490494
491495写 ` state/active_plan.json ` 、` state/current_handoff.json ` 、` plan/<id>/receipts/*.json ` 时 MUST 走 ` sopify_writer ` 。Host prompt 负责 request admission 与默认 spec workflow 入口,不负责生成机器真相、不生成计划优先级、不执行验证。
492496
497+ ` sopify_writer ` 写 receipt 时 MUST 拒绝覆盖同名文件。调用方选择未占用的既有 ` exec_NNN / verify_NNN / final ` 标识;本协议不新增编号器、锁或重试机制。
498+
499+ session 标识只用于 provenance,不单独构成并发冲突。只有用户明确要求同时开发、宿主确认另一任务仍在运行,或从本轮最近一次已验证快照到首次有副作用开发前出现非本轮已知写入导致的目标 ` plan.md ` digest / 匹配 handoff 变化,宿主才停止当前写入并询问一次。用户确认其他开发已停止后,宿主重读最新方案状态再继续。
500+
493501### 8.7 链路失败模式(fail-open)
494502
495503| 步 | 文件缺失时 host 行为 |
@@ -501,14 +509,23 @@ host MUST NOT 默认全量扫描 receipts/ 内容。
501509
502510### 8.8 读后分叉
503511
504- | 读到的事实 | Host 行为 |
505- | ---| ---|
506- | 无 active_plan | consult / new-plan |
507- | 用户请求不指向当前 active_plan | 不自动接续;按 ActionProposal 处理 |
508- | active_plan 存在且 continue_plan | 按 plan.md + tasks.md 继续 |
509- | required_host_action = answer_questions | 只展示问题并等待回答 |
510- | required_host_action = confirm_decision | 只展示选项并等待确认 |
511- | plan.md 与 handoff 冲突 | 以 plan.md 为准;提示 state conflict |
512+ 处理优先序固定为:** 本轮用户意图 → active plan 有效性与主体绑定 → 仅消费与 active plan 匹配的 handoff / checkpoint** 。同一轮同一冲突只检查、询问一次。
513+
514+ | 用户意图与状态 | Host 行为 | 用户交互 |
515+ | ---| ---| ---|
516+ | consult / unmanaged quick_fix,任意方案状态 | 完成当前请求,不进入接续链,不展示无关状态异常 | 无 |
517+ | new_plan,无 active plan | 创建方案并通过 writer 设置新指针 | 无 |
518+ | new_plan,active plan 无效或缺 ` plan.md ` | 创建方案并由 writer 替换无效指针 | 不追加清理确认 |
519+ | new_plan,active plan 有效 | 确认切换、合并或暂停 | 一次决策 |
520+ | continue_plan,active plan 有效 | 按 4 步协议和方案进度继续;缺 handoff / receipts 属正常降级 | 无 |
521+ | continue_plan,active plan 有效但用户明确指定其他方案 | 确认切换、合并或暂停 | 一次决策 |
522+ | continue_plan,用户明确指定有效方案但 active plan 缺失或无效 | 通过 writer 激活所指方案并继续 | 不追加清理确认 |
523+ | continue_plan / finalize,active plan 无效且未指定目标 | 说明阻断原因和可选目标后停车 | 一次决策 |
524+ | handoff 与 active plan 失配 | 以 ` plan.md ` 为准,提示一次并继续;下一次正常 handoff 写入自然替换旧提示 | 不等待 |
525+ | 首次进入 continue_plan,匹配 handoff 含 ` answer_questions / confirm_decision ` | 展示 checkpoint 后停车;失配 handoff 不触发 checkpoint | 一次响应 |
526+ | 用户正在回答匹配 checkpoint | 先绑定当前 plan 与 checkpoint,消费回答并通过 writer 更新一次;不得重显原问题 | 无;无法唯一绑定时提示一次 |
527+ | 显式审计非 active plan | Verifier 只读目标;宿主校验 ` plan.md ` digest 后通过 writer 写 ` verify_NNN ` receipt | 无;active plan / handoff 不变 |
528+ | 同一 active plan 出现 §8.6 并行推进信号 | 当前 session 不执行有副作用的开发;可继续只读审计,或等待用户确认后重读最新状态 | 一次决策 |
512529
513530### 8.9 State 文件索引(P8 post-cutover: 2 文件)
514531
@@ -517,6 +534,8 @@ host MUST NOT 默认全量扫描 receipts/ 内容。
517534| ` state/active_plan.json ` | 定位:当前 plan_id | ignored |
518535| ` state/current_handoff.json ` | 恢复:上次停哪 + required_host_action | ignored |
519536
537+ ` active_plan.json ` 只保存 ` plan_id ` 。Wave 和任务进度属于 ` plan.md / tasks.md ` ,不得写入 active pointer。
538+
520539P8 删除的 state 文件:` current_run.json ` 、` current_plan.json ` 、` current_clarification.json ` 、` current_decision.json ` 、` current_gate_receipt.json ` 、` current_archive_receipt.json ` 、` last_route.json ` 。
521540
522541` plan/_registry.yaml ` [ DEPRECATED by P8] :P8 显式退场。不属于协议内核,不作为 host 接续入口,不作为 active plan pointer。协议校验 MUST fail if ` _registry.yaml ` appears in host entry path。删除理由和未来替代方案见 P8 design.md §4.3。
0 commit comments