统一 UI workflow 阶段并拒绝未知值
现行阶段原地使用并移除旧阶段 fallback 与迁移兼容
This commit is contained in:
@@ -684,6 +684,17 @@ fn find_page_ui_resource(
|
||||
{
|
||||
return Err(format!("页面 {} 的 UI workflow 资源身份冲突", page.page_id));
|
||||
}
|
||||
let generation_kind = asset
|
||||
.source
|
||||
.generation_kind
|
||||
.as_deref()
|
||||
.ok_or_else(|| format!("页面 {} 的 UI workflow 阶段缺失", page.page_id))?;
|
||||
if workflow_stage_rank(generation_kind).is_none() {
|
||||
return Err(format!(
|
||||
"页面 {} 的 UI workflow 阶段无效:{generation_kind}",
|
||||
page.page_id
|
||||
));
|
||||
}
|
||||
let mut expected_references = vec![
|
||||
canonical_resource_id(source),
|
||||
canonical_resource_id(design_asset),
|
||||
@@ -755,7 +766,7 @@ fn ensure_page_ui_resource(
|
||||
prompt: None,
|
||||
model: None,
|
||||
generation_route: None,
|
||||
generation_kind: Some("ui-workflow".to_string()),
|
||||
generation_kind: Some("ui-workflow.reference-ready".to_string()),
|
||||
reference_resource_ids: {
|
||||
let mut references = vec![
|
||||
canonical_resource_id(source),
|
||||
@@ -996,13 +1007,16 @@ fn update_page_manifest_stage(root: &Path, asset_id: &str, stage: &str) -> Resul
|
||||
return Err(format!("UI workflow 资源 {} 类型不匹配", asset_id));
|
||||
}
|
||||
let next_kind = format!("ui-workflow.{stage}");
|
||||
let current_rank = asset
|
||||
let current_kind = asset
|
||||
.source
|
||||
.generation_kind
|
||||
.as_deref()
|
||||
.and_then(workflow_stage_rank)
|
||||
.unwrap_or(0);
|
||||
let next_rank = workflow_stage_rank(&next_kind).unwrap_or(0);
|
||||
.ok_or_else(|| format!("UI workflow 资源 {} 阶段缺失", asset_id))?;
|
||||
let current_rank = workflow_stage_rank(current_kind).ok_or_else(|| {
|
||||
format!("UI workflow 资源 {} 阶段无效:{current_kind}", asset_id)
|
||||
})?;
|
||||
let next_rank = workflow_stage_rank(&next_kind)
|
||||
.ok_or_else(|| format!("UI workflow 下一阶段无效:{next_kind}"))?;
|
||||
if current_rank >= next_rank {
|
||||
return Ok(false);
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ ui-workflow.completed
|
||||
|
||||
联合请求一次携带全部页面参考图和已登记独立素材;页面参考图最多 4 张,独立素材最多 128 个,页面参考图不占用这 128 个独立素材额度。超过独立素材上限时在发起 Provider 请求前直接失败,不会退回旧的素材 batching 路径。
|
||||
|
||||
`workflow_stage_rank` 不是前端内存状态,也不是 UI 编辑器的步骤索引。它是 Rust workflow 模块里的内部比较函数:读取 UI JSON manifest 资产上持久化的 `source.generationKind`(例如 `ui-workflow.reference-ready`、`ui-workflow.binding-ready`),把阶段映射为数字 rank,用于 `update_page_manifest_stage` 的单调推进保护,避免较早阶段覆盖较晚阶段。真正的阶段值在项目 manifest 中持久化,并随项目 revision 更新;历史 `structure-ready`/`merge-ready` 是否迁移或继续认可属于持久化兼容决策,不由前端会话状态解决。
|
||||
`workflow_stage_rank` 不是前端内存状态,也不是 UI 编辑器的步骤索引。它是 Rust workflow 模块里的内部比较函数:读取 UI JSON manifest 资产上持久化的 `source.generationKind`(`ui-workflow.reference-ready`、`ui-workflow.binding-ready`、`ui-workflow.application-ready`、`ui-workflow.completed`),把阶段映射为数字 rank,用于 `update_page_manifest_stage` 的单调推进保护,避免较早阶段覆盖较晚阶段。阶段值在项目 manifest 中持久化,并随项目 revision 更新。当前实现只接受这组现行阶段;缺失或未知阶段直接报错,不做旧值 fallback,也不做迁移。
|
||||
|
||||
最终回执写入 `.agent/ui-workflows/<source-hash>.json`,客户端可据此恢复页面清单和最终编辑器路由。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user