diff --git a/apps/web/src/app/styles/console.css b/apps/web/src/app/styles/console.css
index 727cd83..60eb626 100644
--- a/apps/web/src/app/styles/console.css
+++ b/apps/web/src/app/styles/console.css
@@ -507,8 +507,15 @@
/* ── 流程详情:左版本列 + 右画布(补充)──────────────────────────────
版本收在流程内部:左列是这条流的全部版本(恰一个生效),点谁看谁的图;
属性区从右侧窄栏挪到图下整行(g-wide),声明式契约细节再往下。 */
-.g-flowlab { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(0, 2.2fr); gap: 12px; align-items: start; }
-.g-vers { position: sticky; top: 2px; display: flex; flex-direction: column; gap: 8px; }
+.g-flowlab { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(0, 2.2fr); gap: 12px; align-items: stretch; }
+/* 版本卡:与右侧的图**等高**(grid stretch),版本多了在卡内滚,不把页面撑长 */
+.g-vercard { display: flex; flex-direction: column; min-height: 0; background: var(--card); border: 1px solid var(--cline); border-radius: 13px; box-shadow: var(--cshadow); overflow: hidden; }
+.g-vercard-h { flex: none; display: flex; align-items: center; gap: 8px; padding: 11px 13px; border-bottom: 1px solid var(--line-soft); font-size: 12.5px; font-weight: 800; color: var(--ink-2); }
+.g-vercard-h svg { color: var(--ink-4); }
+.g-vercard-h .n { font-family: var(--mono); font-size: 11px; font-weight: 700; color: var(--ink-4); }
+.g-vercard-h .g-ver-act { margin-left: auto; display: inline-flex; align-items: center; gap: 4px; }
+.g-vercard-list { flex: 1; min-height: 0; overflow-y: auto; padding: 10px; display: flex; flex-direction: column; gap: 8px; }
+.g-vercard-f { flex: none; padding: 9px 13px; border-top: 1px dashed var(--line-soft); font-size: 11px; line-height: 1.6; color: var(--ink-3); }
.g-ver { display: flex; align-items: center; gap: 8px; padding: 10px 12px; background: var(--card); border: 1px solid var(--cline); border-radius: 11px; cursor: pointer; font: inherit; text-align: left; transition: border-color var(--t-fast), box-shadow var(--t-fast); }
.g-ver:hover { border-color: #c9d6e6; }
.g-ver.on { border-color: var(--brand); box-shadow: 0 0 0 2px var(--brand-wash); }
diff --git a/apps/web/src/features/gov-process/internal/panel.tsx b/apps/web/src/features/gov-process/internal/panel.tsx
index e0f7c99..20246c2 100644
--- a/apps/web/src/features/gov-process/internal/panel.tsx
+++ b/apps/web/src/features/gov-process/internal/panel.tsx
@@ -435,6 +435,48 @@ function FlowLab({
},
});
+ /**
+ * 新建版本 = **以当前看的版本为底克隆一版**(服务端定版号并即刻生效)。
+ * 与「激活」分工明确:激活只是把生效指针切过去,不产生新版本;
+ * 新建版本才长一版 —— 把旧定义复活成最新版、或在现状上另起一版接着画,都走这儿。
+ */
+ const cloneVersion = useMutation({
+ mutationFn: () => call<{ pkg: ProcessPackage; report: ClosureReport }>(saveProcessRoute, { body: { pkg } }),
+ onSuccess: (out) => {
+ setReport(out.report);
+ void queryClient.invalidateQueries({ queryKey: ['gov', 'process'] });
+ void queryClient.invalidateQueries({ queryKey: ['gov', 'process-reports'] });
+ setAsk(undefined);
+ onSaved();
+ },
+ });
+
+ const askClone = () =>
+ setAsk({
+ spec: {
+ title: `新建版本:以 v${pkg.version} 为底 → v${nextVersion}`,
+ note:
+ dirty && !readOnly ? (
+