删掉节点的「说明」字段 —— 它填得进、存得下,却从来画不出来

`sub` 声称是「画布上的第二行小字」,但画笔里那支只在 `variant !== 'business'`
(步骤图)才走,而全仓的调用点一律是 business:这个字段写了、存了、
一次也没显示过。属性面上那句提示是句假话。

整条清:属性面的一行 · `ProcessNode.sub`(契约) · `FlowNode.sub` ·
图↔包两处映射 · 画笔里那支画不出来的分支(连同它带来的「两种画法」分叉,
现在节点框里就一行活动名) · 节点宽度算法里 `node.sub || node.ghost` 的宽框判据
(sub 没了,只剩 ghost 决定宽窄)。

存量数据不受影响:库里没有一条带 sub 的定义(查过),schema 非严格,
真有旧值也只是解析时被剥掉。

五闸绿;契约快照随本提交入库(去一个可选字段,加法的反面,无下游)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
2026-07-29 17:48:12 +08:00
co-authored by Claude Opus 5
parent 28623cd1cb
commit 6cff6ab34c
8 changed files with 14 additions and 80 deletions
-32
View File
@@ -473,7 +473,6 @@ export declare const listProcessPackagesRoute: {
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -485,7 +484,6 @@ export declare const listProcessPackagesRoute: {
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -510,7 +508,6 @@ export declare const listProcessPackagesRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -538,7 +535,6 @@ export declare const listProcessPackagesRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -600,7 +596,6 @@ export declare const saveProcessRoute: {
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -612,7 +607,6 @@ export declare const saveProcessRoute: {
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -637,7 +631,6 @@ export declare const saveProcessRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -665,7 +658,6 @@ export declare const saveProcessRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -711,7 +703,6 @@ export declare const saveProcessRoute: {
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -723,7 +714,6 @@ export declare const saveProcessRoute: {
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -748,7 +738,6 @@ export declare const saveProcessRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -776,7 +765,6 @@ export declare const saveProcessRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -855,7 +843,6 @@ export declare const setProcessStateRoute: {
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -867,7 +854,6 @@ export declare const setProcessStateRoute: {
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -892,7 +878,6 @@ export declare const setProcessStateRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -920,7 +905,6 @@ export declare const setProcessStateRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -978,7 +962,6 @@ export declare const deleteProcessVersionRoute: {
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -990,7 +973,6 @@ export declare const deleteProcessVersionRoute: {
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1015,7 +997,6 @@ export declare const deleteProcessVersionRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1043,7 +1024,6 @@ export declare const deleteProcessVersionRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1102,7 +1082,6 @@ export declare const renameProcessRoute: {
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1114,7 +1093,6 @@ export declare const renameProcessRoute: {
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1139,7 +1117,6 @@ export declare const renameProcessRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1167,7 +1144,6 @@ export declare const renameProcessRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1217,7 +1193,6 @@ export declare const validateProcessRoute: {
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1229,7 +1204,6 @@ export declare const validateProcessRoute: {
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1254,7 +1228,6 @@ export declare const validateProcessRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -1282,7 +1255,6 @@ export declare const validateProcessRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -2344,7 +2316,6 @@ export declare const govWorkflowRoute: {
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -2356,7 +2327,6 @@ export declare const govWorkflowRoute: {
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -2381,7 +2351,6 @@ export declare const govWorkflowRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -2409,7 +2378,6 @@ export declare const govWorkflowRoute: {
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -113,7 +113,6 @@ export declare const processNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -125,7 +124,6 @@ export declare const processNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -150,7 +148,6 @@ export declare const processNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -178,7 +175,6 @@ export declare const processNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -225,7 +221,6 @@ export declare const processPackageSchema: z.ZodObject<{
kind: z.ZodLiteral<"start">; kind: z.ZodLiteral<"start">;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -237,7 +232,6 @@ export declare const processPackageSchema: z.ZodObject<{
output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>; output: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -262,7 +256,6 @@ export declare const processPackageSchema: z.ZodObject<{
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -290,7 +283,6 @@ export declare const processPackageSchema: z.ZodObject<{
message: z.ZodOptional<z.ZodString>; message: z.ZodOptional<z.ZodString>;
id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">; id: z.core.$ZodBranded<z.ZodString, "NodeId", "out">;
label: z.ZodString; label: z.ZodString;
sub: z.ZodOptional<z.ZodString>;
layout: z.ZodOptional<z.ZodObject<{ layout: z.ZodOptional<z.ZodObject<{
row: z.ZodNumber; row: z.ZodNumber;
col: z.ZodNumber; col: z.ZodNumber;
@@ -865,14 +865,6 @@ function FlowLab({
</Field> </Field>
{node.kind === 'activity' && ( {node.kind === 'activity' && (
<> <>
<Field k="说明" hint="画布上的第二行小字">
<input
className="g-input"
value={node.sub ?? ''}
placeholder="如:照谱执行 / 临场演绎 / 人裁节点"
onChange={(e) => patch((n) => ({ ...n, sub: e.target.value === '' ? undefined : e.target.value }))}
/>
</Field>
<Field k="节点类型" hint="只分两种;审批点是系统内置要素,不链活动"> <Field k="节点类型" hint="只分两种;审批点是系统内置要素,不链活动">
<Seg <Seg
value={node.flavor === 'approval' ? 'approval' : 'act'} value={node.flavor === 'approval' ? 'approval' : 'act'}
+1 -2
View File
@@ -29,7 +29,6 @@ export interface FlowNode {
/** Case 节点引用的库案例 id(cases[].id):L2 只是引用,下钻编辑共享库案例。 */ /** Case 节点引用的库案例 id(cases[].id):L2 只是引用,下钻编辑共享库案例。 */
caseRef?: string; caseRef?: string;
label: string; label: string;
sub?: string | undefined;
code?: string; code?: string;
ghost?: boolean; ghost?: boolean;
note?: string; note?: string;
@@ -265,7 +264,7 @@ function nodeWidth(node: FlowNode, m: Metrics, shrink: number): number {
case "callout": case "callout":
return m.calloutW; return m.calloutW;
case "activity": case "activity":
return Math.max(80, (node.sub || node.ghost ? m.actWide : m.actW) - shrink); return Math.max(80, (node.ghost ? m.actWide : m.actW) - shrink);
} }
} }
@@ -126,24 +126,7 @@ export function paintNode(group: SVGElement, node: FlowNode, w: number, h: numbe
const titleSize = variant === "business" ? 12 : 11.5; const titleSize = variant === "business" ? 12 : 11.5;
const inkColor = ghost ? "#6A7686" : skin.ink; const inkColor = ghost ? "#6A7686" : skin.ink;
const title = fitLine(node.label, w - 12, titleSize, 10); const title = fitLine(node.label, w - 12, titleSize, 10);
// L2 主图只留 标号/活动名/责任角标(2026-07 精简)——sub 小字仅步骤图(steps)渲染。 // 节点框里只写活动名(标号走左上角标)—— sub 第二行小字已退役,没有第二种画法了。
if (node.sub && variant !== "business") {
const sub = fitLine(node.sub, w - 12, 8.6, 8);
group.append(
svgEl(
"text",
{ x: w / 2, y: 18, "text-anchor": "middle", "font-family": FLOW_SANS, "font-size": title.size, "font-weight": 600, fill: inkColor },
title.text,
),
);
group.append(
svgEl(
"text",
{ x: w / 2, y: 32, "text-anchor": "middle", "font-family": FLOW_SANS, "font-size": sub.size, fill: ghost ? "#9AA6B4" : "#6A7686" },
sub.text,
),
);
} else {
group.append( group.append(
svgEl( svgEl(
"text", "text",
@@ -151,7 +134,6 @@ export function paintNode(group: SVGElement, node: FlowNode, w: number, h: numbe
title.text, title.text,
), ),
); );
}
// 标号角标:business 一贯有;步骤图(steps)的真实节点也要 S#/B# 编号与指导书条目对齐 // 标号角标:business 一贯有;步骤图(steps)的真实节点也要 S#/B# 编号与指导书条目对齐
// (2026-07 用户纠正)——ghost 骨架节点不标。 // (2026-07 用户纠正)——ghost 骨架节点不标。
if (variant === "business" || !ghost) { if (variant === "business" || !ghost) {
@@ -47,7 +47,6 @@ export function mergeGraphIntoPackage(
const base = { const base = {
id, id,
label: n.label, label: n.label,
...(n.sub === undefined ? {} : { sub: n.sub }),
layout, layout,
}; };
@@ -87,7 +87,6 @@ export function packageToGraph(pkg: ProcessPackage, marks: readonly InstanceMark
kind: 'activity', kind: 'activity',
label: n.label, label: n.label,
code: n.id, code: n.id,
...(n.sub === undefined ? {} : { sub: n.sub }),
...(state === undefined ? {} : { note: state }), ...(state === undefined ? {} : { note: state }),
}; };
if (n.kind === 'approval') { if (n.kind === 'approval') {
+5 -2
View File
@@ -118,8 +118,11 @@ export type NudgeLadder = z.infer<typeof nudgeLadderSchema>;
const nodeBase = { const nodeBase = {
id: nodeIdSchema, id: nodeIdSchema,
label: z.string().min(1), label: z.string().min(1),
/** 画布上的第二行小字(如「照谱执行 / 临场演绎」)—— 呈现注记,不影响语义 */ /*
sub: z.string().optional(), * (已退役 2026-07-30)sub —— 「画布上的第二行小字」。
* 它只在 `variant !== 'business'` 的步骤图里画,而全仓的调用点一律是 business:
* 填得进、存得下,**却从来画不出来**;属性面上那句「画布上的第二行小字」是句假话。
*/
/** /**
* 画布坐标 —— 布局引擎的输入;不影响语义。 * 画布坐标 —— 布局引擎的输入;不影响语义。
* row/col = 编译布局的行列;x/y = **手绘几何**(编辑器保存后,手绘成为呈现真相)。 * row/col = 编译布局的行列;x/y = **手绘几何**(编辑器保存后,手绘成为呈现真相)。