收窄策划会话状态判断
移除 submit 与 replay 路径中不可达的 revision_requested 分支 简化 successor binding fingerprint 的 active child 校验 删除 receipt 收口后的冗余 recovery_required 检查
This commit is contained in:
@@ -2340,13 +2340,6 @@ pub(crate) fn plan_gdd_typed_completion_blocker_at_locked(
|
||||
),
|
||||
));
|
||||
}
|
||||
if session.phase == "recovery_required" {
|
||||
return Some(plan_gdd_completion_blocker(
|
||||
"needs-reconciliation",
|
||||
"planning session 仍处于 recovery_required,不能收束任务",
|
||||
format!("gddVersion={}", latest.version),
|
||||
));
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
|
||||
@@ -2408,8 +2408,7 @@ pub(crate) fn validate_plan_session_successor(
|
||||
&& next.active_run_id.is_some()
|
||||
&& next.last_run_id == next.active_run_id.clone().unwrap_or_default();
|
||||
if next.run_profile_binding_fingerprint != previous.run_profile_binding_fingerprint
|
||||
&& (!active_run_changed
|
||||
|| !matches!(next.phase.as_str(), "collecting" | "revision_requested"))
|
||||
&& !active_run_changed
|
||||
{
|
||||
return Err(conflict(
|
||||
"session 只有在绑定新的 active planning child 时才能更换 Run Profile binding fingerprint",
|
||||
|
||||
@@ -1166,15 +1166,7 @@ fn validate_current_session_cas(
|
||||
"plan.submit_gdd 必须绑定当前活跃策划子 Run",
|
||||
));
|
||||
}
|
||||
// 这条 phase 判据实际只可能看到 `collecting`:上面的 activeRunId 判据要求
|
||||
// session 绑着当前策划子 run,而 schema 不变量禁止 `awaiting_user_input`、
|
||||
// `awaiting_gdd_approval`、`revision_requested`、`approved`、`rejected`、
|
||||
// `recovery_required` 保留 activeRunId(planning_storage.rs 的
|
||||
// 「session 进入审批/终态/recovery_required 后不得保留 activeRunId」)。
|
||||
// 因此 revise/reject 之后能不能重做,不由这条门决定,而由 M1C-2b 的 continuation
|
||||
// 起点 writer 决定——它必须以新 activeRunId 写 revision+1 successor,phase 只能落回
|
||||
// `collecting`。这里保留 `revision_requested` 作为既有冗余,不再新增更多不可达分支。
|
||||
if !matches!(session.phase.as_str(), "collecting" | "revision_requested") {
|
||||
if session.phase != "collecting" {
|
||||
return Err(submit_error(
|
||||
"PLAN_PENDING_GDD_EXISTS",
|
||||
"当前 planning session 仍有未决 GDD",
|
||||
@@ -1641,11 +1633,7 @@ fn project_submit_successors_locked(
|
||||
let source_session_matches_gdd = session_identity_matches_gdd
|
||||
&& previous_session.session_revision == gdd.source_session_revision
|
||||
&& previous_session.session_fingerprint == gdd.source_session_fingerprint
|
||||
&& previous_session.active_run_id.as_deref() == Some(gdd.created_by_run_id.as_str())
|
||||
&& matches!(
|
||||
previous_session.phase.as_str(),
|
||||
"collecting" | "revision_requested"
|
||||
);
|
||||
&& previous_session.active_run_id.as_deref() == Some(gdd.created_by_run_id.as_str());
|
||||
if !session_identity_matches_gdd {
|
||||
recovery_pending = true;
|
||||
} else if same_ref {
|
||||
|
||||
Reference in New Issue
Block a user