优化: 弱模型治理收尾(AC-2探索预算:单轮上限+目录去重+禁绕行 + AC-5失败画像:合法目标回灌+相近锚点提示)
This commit is contained in:
@@ -35,6 +35,7 @@ use crate::task_state_machine::{can_transition, is_regression, is_valid_state, A
|
||||
/// 3. 状态机(三类拒绝,错误区分供前端分辨):
|
||||
/// - 同态拒绝(from==to):Validation「相同状态,无需推进」(非状态机违例,是空操作)
|
||||
/// - 非法转换(跳态/终态后继等):InvalidState「非法状态转换 X→Y」(含 from/to 上下文)
|
||||
/// - 两类拒绝均附 legal_targets(from) 合法目标列表,供 LLM 下次选对目标态(AC-5)
|
||||
/// - can_transition 闸门矩阵判否即此分支
|
||||
/// 4. 原子写:advance_status_atomic CAS,to 是退回转换时 bump_rounds=true
|
||||
/// 5. CAS 失败(affected==0):状态已被并发改动 → InvalidState 错误(防 TOCTOU 静默成功)
|
||||
@@ -63,15 +64,26 @@ pub async fn advance_task_atomic(
|
||||
// 3. 状态机校验(三类拒绝,错误类型区分供前端分辨):
|
||||
// - 同态(from==to):Validation「相同状态,无需推进」(空操作,非状态机违例)
|
||||
// - 非法转换(跳态/终态无后继等):InvalidState「非法状态转换 X→Y」
|
||||
// - 两类错误均附加 legal_targets(from) 合法目标列表(当前态→可去态),
|
||||
// 让 LLM 下次直接选对目标态,降低状态机拒绝的往返次数(AC-5 机制降失败)。
|
||||
let from = current.status.as_str();
|
||||
let legal_hint = |from: &str| -> String {
|
||||
let legal = crate::task_state_machine::legal_targets(from);
|
||||
if legal.is_empty() {
|
||||
format!("{from} 是终态, 无合法后继")
|
||||
} else {
|
||||
format!("{from} 的合法目标: {}", legal.join("/"))
|
||||
}
|
||||
};
|
||||
if from == target_status {
|
||||
return Err(df_types::error::Error::Validation(format!(
|
||||
"相同状态 {from:?},无需推进"
|
||||
"相同状态 {from:?},无需推进,{}",
|
||||
legal_hint(from)
|
||||
)));
|
||||
}
|
||||
if !can_transition(from, target_status) {
|
||||
return Err(df_types::error::Error::InvalidState {
|
||||
current: format!("{from}→{target_status}(非法状态转换)"),
|
||||
current: format!("{from}→{target_status}(非法状态转换), {}", legal_hint(from)),
|
||||
expected: target_status.to_string(),
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user