From 6f1e56daca9ff41f9a708db8d465a58b78b2dfcb Mon Sep 17 00:00:00 2001 From: kris Date: Sat, 4 Apr 2026 10:50:11 +0800 Subject: [PATCH] feat: refocus remaining admin governance flows --- CHANGELOG.md | 6 ++++++ web/storyforge-web-v4/assets/app.js | 3 +++ web/storyforge-web-v4/tests/workbench-pages.test.mjs | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65a911f..f501ed2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -305,3 +305,9 @@ - 用户全局策略、用户平台策略在保存和历史回滚成功后,会自动回到 `我的策略` 对应 tab,不再只停留在成功提示里。 - 管理员覆盖策略在保存和历史回滚成功后,会自动回到 `管理员配置台 -> 覆盖与审计`,方便连续治理和审计查看。 - 前端回归新增了这三条治理回跳断言,避免后续又退回成“改完策略后自己重新找页面”。 + +### 管理员治理剩余回跳补齐 + +- 管理员在切换“覆盖目标”后,会自动回到 `管理员配置台 -> 覆盖与审计`,直接进入当前目标的审计区。 +- 系统主 Agent 历史回滚、系统平台策略历史回滚完成后,会自动回到 `管理员配置台 -> Agent 治理`,方便连续调整系统默认策略。 +- 前端回归新增了这三条管理员治理落点断言,锁住“改完就能继续治理”的交互。 diff --git a/web/storyforge-web-v4/assets/app.js b/web/storyforge-web-v4/assets/app.js index 1f1c4f0..381f948 100644 --- a/web/storyforge-web-v4/assets/app.js +++ b/web/storyforge-web-v4/assets/app.js @@ -9411,6 +9411,7 @@ async function openAdminOverrideTargetAction() { await loadAgentControlSurfaces(getOneLinerProjectId()); rememberAction("管理员覆盖目标已更新", `当前目标已切换到 ${formatAdminGovernanceTargetLabel(appState.adminOverrideTarget)}。`, "green"); renderAll(); + focusAdminGovernanceAuditWorkspace("admin-override-audit-anchor"); } }); } @@ -9534,6 +9535,7 @@ async function openSystemMainPolicyHistoryAction(preferredVersionId = "") { await loadAgentControlSurfaces(getOneLinerProjectId()); rememberAction("系统主 Agent 已回滚", `已回滚到版本 ${saved.current_version?.version_no || "所选版本"}。`, "green", saved); renderAll(); + focusAdminGovernanceAgentsWorkspace("admin-governance-anchor"); } }); } @@ -9572,6 +9574,7 @@ async function openSystemPlatformPolicyHistoryAction(platform, preferredVersionI await loadAgentControlSurfaces(getOneLinerProjectId()); rememberAction(`${platformLabel(normalizedPlatform)} 系统平台策略已回滚`, `已回滚到版本 ${saved.current_version?.version_no || "所选版本"}。`, "green", saved); renderAll(); + focusAdminGovernanceAgentsWorkspace("admin-governance-anchor"); } }); } diff --git a/web/storyforge-web-v4/tests/workbench-pages.test.mjs b/web/storyforge-web-v4/tests/workbench-pages.test.mjs index c9fee39..cd77901 100644 --- a/web/storyforge-web-v4/tests/workbench-pages.test.mjs +++ b/web/storyforge-web-v4/tests/workbench-pages.test.mjs @@ -709,6 +709,8 @@ test("admin governance actions apply local permission and empty-directory guards const targetPicker = extractBetween(APP, "async function openAdminOverrideTargetAction()", "function openAdminOverridePolicyAction()"); const systemMain = extractBetween(APP, "function openSystemMainPolicyAction()", "function openSystemPlatformPolicyAction(platform)"); const systemPlatform = extractBetween(APP, "function openSystemPlatformPolicyAction(platform)", "async function openAdminOverrideTargetAction()"); + const systemMainHistory = extractBetween(APP, "async function openSystemMainPolicyHistoryAction(preferredVersionId = \"\")", "async function openSystemPlatformPolicyHistoryAction(platform, preferredVersionId = \"\")"); + const systemPlatformHistory = extractBetween(APP, "async function openSystemPlatformPolicyHistoryAction(platform, preferredVersionId = \"\")", "function reopenPlatformAgentDetailSoon(platform)"); const actionRegistry = extractBetween(APP, "function openActionRegistryEditAction(actionKey)", "function openTenantQuotaAction()"); assert.match(helpers, /function ensureAdminGovernanceAccess\(\)/); @@ -717,10 +719,13 @@ test("admin governance actions apply local permission and empty-directory guards assert.match(adminFocusHelper, /setScreen\("admin-workbench"\)/); assert.match(adminFocusHelper, /scrollIntoView/); assert.match(targetPicker, /hideSubmit:\s*!directoryItems\.length/); + assert.match(targetPicker, /focusAdminGovernanceAuditWorkspace\("admin-override-audit-anchor"\)/); assert.match(systemMain, /if \(!ensureAdminGovernanceAccess\(\)\) return;/); assert.match(systemPlatform, /if \(!ensureAdminGovernanceAccess\(\)\) return;/); assert.match(systemMain, /focusAdminGovernanceAgentsWorkspace\("admin-governance-anchor"\)/); assert.match(systemPlatform, /focusAdminGovernanceAgentsWorkspace\("admin-governance-anchor"\)/); + assert.match(systemMainHistory, /focusAdminGovernanceAgentsWorkspace\("admin-governance-anchor"\)/); + assert.match(systemPlatformHistory, /focusAdminGovernanceAgentsWorkspace\("admin-governance-anchor"\)/); assert.match(actionRegistry, /focusAdminGovernanceAgentsWorkspace\("admin-action-registry-anchor"\)/); });