-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathflow.json
More file actions
157 lines (157 loc) · 7.43 KB
/
Copy pathflow.json
File metadata and controls
157 lines (157 loc) · 7.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
{
"type": "flow",
"_note": "FlowSchema. Seeded from docs/audits/2026-06-flowschema-property-liveness.md. Consumers: service-automation engine + node executors. runAs is marker-driven experimental (spec). CORRECTED 2026-07: the previous note claimed 'status/active gate nothing' — that was true when the audit ran but became FALSE with commit 497bda853 (2026-07-05, 'honor flow status for enable/disable'). `status` now gates binding AND execution; `active` remains a deprecated no-op.",
"props": {
"name": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"successMessage": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts:1292"
},
"errorMessage": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts:1348"
},
"label": {
"status": "live",
"note": "display."
},
"description": {
"status": "dead",
"evidence": "no reader either layer"
},
"version": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"status": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts:1374-1382 (obsolete/invalid -> flowEnabled=false), :1387 (gates activateFlowTrigger), :1704 + :3097 (execute-time 'Flow is disabled' guard)",
"note": "RE-VERIFIED 2026-07 (#3686 preview-claim sweep): the prior `live` verdict cited only a metadata-admin PREVIEW panel, which echoes what the author typed. Verdict stands, evidence replaced: it is genuinely engine-consumed since 497bda853. The previously cited FlowPreview line number did not even contain a status read."
},
"active": {
"status": "dead",
"evidence": "spec already marks it '(Deprecated: use status)'; the only reader anywhere is a display fallback in objectui FlowPreview.tsx:157 (`d.status ?? (d.active ? ...)`)",
"authorWarn": true,
"authorHint": "Deprecated no-op — writing `active: false` does NOT stop a flow. Use `status: 'obsolete'` (or 'invalid') to unbind and disable it, `status: 'active'` to arm it.",
"note": "RE-VERIFIED 2026-07 (#3686 preview-claim sweep): the prior `live` verdict cited only a metadata-admin PREVIEW panel, which echoes what the author typed. Sharper than a plain no-op: the spec default is `false` while the engine treats an unset flow as enabled, so the key reads as if it disabled the flow when it does nothing."
},
"runAs": {
"status": "live",
"proof": "packages/qa/dogfood/test/flow-runas.dogfood.test.ts#flow-runas-identity",
"evidence": "packages/services/service-automation/src/builtin/crud-nodes.ts: CRUD nodes pass the run identity to ObjectQL per flow.runAs; the engine sets context.runAs at run setup; resolveRunDataContext maps system->isSystem / user->trigger user (#1888)",
"note": "ENFORCED 2026-06-24 (#1888, ADR-0049): was marker-driven experimental; the engine now switches the data-layer execution identity and restores the caller context. Proof-backed by the dogfood gate."
},
"template": {
"status": "dead",
"evidence": "no reader either layer",
"authorWarn": true,
"authorHint": "No reader in designer or engine — flagging a flow as a template/subflow does nothing. Invoke shared logic via a subflow node referencing the flow by name."
},
"type": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts:637",
"note": "flow.type==='schedule'/'api' drives trigger dispatch."
},
"variables": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts",
"note": "{name,isInput,isOutput} wired."
},
"edges": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts",
"note": "{source,target,condition(CEL),label} wired."
},
"nodes": {
"children": {
"id": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"type": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts",
"proof": "packages/qa/dogfood/test/flow-node.dogfood.test.ts#flow-node-execution",
"note": "open string vs live executor registry (ADR-0018); FlowNodeAction enum is out of sync. ADR-0054 high-risk class (flow nodes): the proof authors a flow, triggers it over HTTP, and asserts the update_record node executed AND the input variable wired into its filter (only the targeted record changed) — guarding node execution + variable wiring, not just that the engine reads the node."
},
"label": {
"status": "live",
"note": "designer/display."
},
"config": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"connectorConfig": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"position": {
"status": "live",
"note": "designer canvas layout (no engine consumer)."
},
"timeoutMs": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"inputSchema": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts",
"note": "runtime-validated."
},
"outputSchema": {
"status": "dead",
"evidence": "declared, never validated",
"authorWarn": true,
"authorHint": "Declared but never validated — node outputs are NOT checked against this schema at runtime. Do not rely on it for contract enforcement."
},
"waitEventConfig": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"boundaryConfig": {
"status": "live",
"evidence": "objectui: packages/app-shell/src/views/metadata-admin/inspectors/flow-node-config.ts:480",
"note": "LIVE via objectui metadata-admin authoring UI — the 2026-06 audit missed objectui; verified by reading the file."
}
}
},
"errorHandling": {
"children": {
"strategy": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"maxRetries": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"retryDelayMs": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"backoffMultiplier": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"maxRetryDelayMs": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"jitter": {
"status": "live",
"evidence": "packages/services/service-automation/src/engine.ts"
},
"fallbackNodeId": {
"status": "dead",
"evidence": "engine uses per-node fault edges, not this",
"authorWarn": true,
"authorHint": "The engine routes failures via per-node fault edges, not errorHandling.fallbackNodeId — wire a fault edge from the failing node instead."
}
}
}
}
}