@rytass/bpm-core-shared 0.22.0 โ†’ 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,46 @@
1
+ ## 0.23.0 (2026-11-14)
2
+
3
+ ### ๐Ÿš€ Features
4
+
5
+ - **form-data-source:** locate approver-fill VALUE_NOT_RESOLVED on its field or cell ([1a17907a](https://github.com/Rytass/BPMCore/commit/1a17907a))
6
+ - **shared:** add column mode to field access matrix ([d0658f54](https://github.com/Rytass/BPMCore/commit/d0658f54))
7
+ - **bpm-core-client:** expose host error code on BPMGraphQLRequestError ([3a388721](https://github.com/Rytass/BPMCore/commit/3a388721))
8
+ - **workflow-command:** keep column grants in field access matrix ([ce50a7b0](https://github.com/Rytass/BPMCore/commit/ce50a7b0))
9
+ - **bpm-core-react:** pass column-mode table access to approver fill ([c4fcb87d](https://github.com/Rytass/BPMCore/commit/c4fcb87d))
10
+ - **bpm-core-react:** add per-table access to form renderer ([98cd5208](https://github.com/Rytass/BPMCore/commit/98cd5208))
11
+ - **field-access:** reject publish when a table dependent column is not opened ([a4f64372](https://github.com/Rytass/BPMCore/commit/a4f64372))
12
+ - **field-access:** export dependency break helper for column fills ([d25212c6](https://github.com/Rytass/BPMCore/commit/d25212c6))
13
+ - **field-access:** allow approver-filled data-source columns in column mode ([3b8cb06a](https://github.com/Rytass/BPMCore/commit/3b8cb06a))
14
+ - **field-access:** lint per-column fill conflicts and approver data sources ([2d081bb2](https://github.com/Rytass/BPMCore/commit/2d081bb2))
15
+ - **field-access:** read per-column fill units for table fields ([996bffcc](https://github.com/Rytass/BPMCore/commit/996bffcc))
16
+ - **workflow-engine:** expose recordTaskAutoDecisionFailed on the engine token ([40d69180](https://github.com/Rytass/BPMCore/commit/40d69180))
17
+ - **instance-event:** expose admin list and retry resolvers ([4cbb84ac](https://github.com/Rytass/BPMCore/commit/4cbb84ac))
18
+ - **instance-event:** purge delivered rows past retention ([69d19f9a](https://github.com/Rytass/BPMCore/commit/69d19f9a))
19
+ - **instance-event:** schedule periodic delivery scans ([ac9b7dc3](https://github.com/Rytass/BPMCore/commit/ac9b7dc3))
20
+ - **instance-event:** deliver on commit via subscriber ([53641feb](https://github.com/Rytass/BPMCore/commit/53641feb))
21
+ - **instance-event:** add outbox delivery service ([b7ddcd3f](https://github.com/Rytass/BPMCore/commit/b7ddcd3f))
22
+ - **instance-event:** add outbox event writer ([fd891be4](https://github.com/Rytass/BPMCore/commit/fd891be4))
23
+ - **instance-event:** add lifecycle event outbox and observer wiring ([74dcdffd](https://github.com/Rytass/BPMCore/commit/74dcdffd))
24
+ - **workflow-engine:** add pre-decision host guard for submit, resubmit and decide ([8d450dd3](https://github.com/Rytass/BPMCore/commit/8d450dd3))
25
+ - **form:** add HOST_RULE issue reason with optional host code ([3d58779d](https://github.com/Rytass/BPMCore/commit/3d58779d))
26
+ - **shared:** allow REQUIRED on approver-filled boolean fields ([2b669b75](https://github.com/Rytass/BPMCore/commit/2b669b75))
27
+ - **instances:** filter approval instances by template key ([18d496c7](https://github.com/Rytass/BPMCore/commit/18d496c7))
28
+ - **conditions:** optionally read unfilled form fields as null ([958d3be6](https://github.com/Rytass/BPMCore/commit/958d3be6))
29
+ - **template:** add a HOST_ONLY launch mode to template versions ([d83db05e](https://github.com/Rytass/BPMCore/commit/d83db05e))
30
+ - **initiator:** let a host add customFields to the built snapshot ([609bc5ab](https://github.com/Rytass/BPMCore/commit/609bc5ab))
31
+ - **inbox:** filter inbox and approval history by template ([6870883a](https://github.com/Rytass/BPMCore/commit/6870883a))
32
+ - **migrations:** add the host integration round schema ([34eef9b2](https://github.com/Rytass/BPMCore/commit/34eef9b2))
33
+
34
+ ### ๐Ÿฉน Fixes
35
+
36
+ - **workflow-engine:** report only changed keys to the resubmit guard ([53d7bdb2](https://github.com/Rytass/BPMCore/commit/53d7bdb2))
37
+ - **field-access:** lint column-mode fills of data-source columns ([314ba31d](https://github.com/Rytass/BPMCore/commit/314ba31d))
38
+ - **field-access:** keep column-mode fills out of whole-field write paths ([dca765de](https://github.com/Rytass/BPMCore/commit/dca765de))
39
+
40
+ ### โค๏ธ Thank You
41
+
42
+ - Chia Yu Pai @fantasywind
43
+
1
44
  ## 0.22.0 (2026-11-13)
2
45
 
3
46
  ### ๐Ÿš€ Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rytass/bpm-core-shared",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Shared TypeScript contracts for the Rytass BPM approval workflow stack (workflow, form, condition, identity, organization, status types).",
5
5
  "keywords": [
6
6
  "bpm",
@@ -1,4 +1,5 @@
1
1
  import { FormDefinitionSchema, FormFieldDefinition } from './form';
2
+ import { FieldAccessFillUnit } from './field-access';
2
3
  import type { FieldAccessDisplay, FieldAccessEntry, FieldAccessFill, UserTaskNode, WorkflowDefinition } from './workflow';
3
4
  import { isOnOwnParallelBranch, readReachableWorkflowNodeIds, readWorkflowParallelBranchSets } from './workflow-reachability';
4
5
  export { isOnOwnParallelBranch, readReachableWorkflowNodeIds, readWorkflowParallelBranchSets, };
@@ -10,7 +11,7 @@ export { isOnOwnParallelBranch, readReachableWorkflowNodeIds, readWorkflowParall
10
11
  * filled it in) stays in the backend: it needs the expression sources of
11
12
  * every node, which the matrix does not show.
12
13
  */
13
- export type FieldAccessIssueCode = 'applicantRuleReadsApproverFilled' | 'approverFilledFieldDataSource' | 'approverFilledFieldFileUpload' | 'approverFilledFieldFormRule' | 'approverFilledMultipleFillNodesOnPath' | 'approverFilledRequiredBoolean' | 'approverFilledTableDataSourceColumn' | 'fieldAccessAutoApprove' | 'fieldAccessDuplicate' | 'fieldAccessFillHidden' | 'fieldAccessGroupPolicy' | 'fieldAccessInvalid' | 'fieldAccessSkipNode' | 'fieldAccessUnknownField' | 'legacyFieldPermissions' | 'setFormFieldApproverFilled';
14
+ export type FieldAccessIssueCode = 'applicantRuleReadsApproverFilled' | 'approverFilledFieldDataSource' | 'approverFilledFieldFileUpload' | 'approverFilledFieldFormRule' | 'approverFilledMultipleFillNodesOnPath' | 'approverFilledTableDataSourceColumn' | 'fieldAccessAutoApprove' | 'fieldAccessDuplicate' | 'fieldAccessFillHidden' | 'fieldAccessGroupPolicy' | 'fieldAccessInvalid' | 'fieldAccessSkipNode' | 'fieldAccessUnknownField' | 'legacyFieldPermissions' | 'setFormFieldApproverFilled';
14
15
  export interface FieldAccessIssue {
15
16
  readonly code: FieldAccessIssueCode;
16
17
  /** The top-level fields the issue is about, the offending one first. */
@@ -83,9 +84,10 @@ export declare function readDefinitionFieldAccessIssues(definition: WorkflowDefi
83
84
  * Why a form field cannot be one an approver fills in, as the issues the
84
85
  * publish lint reports once it is: a form-level rule (`required` / `hidden`
85
86
  * set to `true`, the others set at all โ€” `required: false` and
86
- * `hidden: false`, what the form editor writes for "off", are not rules), a
87
- * data source, a file upload, or a table with a data-source column. Empty
88
- * when the field can be filled in.
87
+ * `hidden: false`, what the form editor writes for "off", are not rules) or a
88
+ * file upload. A data source, or a table with a data-source column, can be
89
+ * filled in by the approver (ADR 27 ยง4(b)). Empty when the field can be filled
90
+ * in.
89
91
  */
90
92
  export declare function readFormFieldFillIssues(field: FormFieldDefinition): readonly FieldAccessIssue[];
91
93
  /**
@@ -101,13 +103,31 @@ export declare function readFormFieldFillIssues(field: FormFieldDefinition): rea
101
103
  * stricter.
102
104
  */
103
105
  export declare function referencesFormField(expression: string, fieldKey: string): boolean;
106
+ /**
107
+ * A data-source column of a column-mode table that reads another column of the
108
+ * same table (ADR 27 ยง4.3) while the approver may fill in the read column but
109
+ * not this one. Once the read column changes, this column still holds the
110
+ * value its old source gave.
111
+ */
112
+ export interface FieldAccessDependencyBreak {
113
+ readonly fieldKey: string;
114
+ readonly sourceColumnKey: string;
115
+ readonly dependentColumnKey: string;
116
+ }
117
+ /**
118
+ * Every column the approver may fill in that a data-source column of the same
119
+ * table reads, while that data-source column is not open to the same node.
120
+ * A table granted whole is skipped: every column of it is then open. An
121
+ * EXPRESSION source counts only through a `row` reference, the way the cell
122
+ * reads its own row. Empty when `schema` is null.
123
+ */
124
+ export declare function readFieldAccessDependencyBreaks(schema: FormDefinitionSchema | null, units: readonly FieldAccessFillUnit[]): readonly FieldAccessDependencyBreak[];
104
125
  /**
105
126
  * The issues read against the form the definition is bound to, in
106
127
  * publish-lint order: a `fieldKey` that is not a top-level field of the form,
107
128
  * an approver-filled field the form will not let anybody fill in
108
129
  * (`readFormFieldFillIssues`, once per field however many nodes fill it in),
109
- * `fill: 'REQUIRED'` on a boolean (`false` is an answer, so required can never
110
- * fail), and an applicant's rule that reads an approver-filled field โ€” the
130
+ * and an applicant's rule that reads an approver-filled field โ€” the
111
131
  * rule is evaluated against the submitted form, where that field is still
112
132
  * empty, and the evaluation silently compares against nothing.
113
133
  */
@@ -8,6 +8,7 @@ exports.createWorkflowCoRunReader = createWorkflowCoRunReader;
8
8
  exports.readDefinitionFieldAccessIssues = readDefinitionFieldAccessIssues;
9
9
  exports.readFormFieldFillIssues = readFormFieldFillIssues;
10
10
  exports.referencesFormField = referencesFormField;
11
+ exports.readFieldAccessDependencyBreaks = readFieldAccessDependencyBreaks;
11
12
  exports.readFormFieldAccessIssues = readFormFieldAccessIssues;
12
13
  const form_1 = require("./form");
13
14
  const field_access_1 = require("./field-access");
@@ -57,6 +58,33 @@ exports.FIELD_ACCESS_FILLS = [
57
58
  'OPTIONAL',
58
59
  'REQUIRED',
59
60
  ];
61
+ /**
62
+ * Whether a stored `columns` list is one the publish lint accepts: a non-empty
63
+ * array of column entries with a non-blank, unique `columnKey` and a `fill` of
64
+ * `OPTIONAL` or `REQUIRED`. Absent means whole-field mode and is valid.
65
+ */
66
+ const isFieldAccessColumnsValid = (columns) => {
67
+ if (columns === undefined) {
68
+ return true;
69
+ }
70
+ if (!Array.isArray(columns) || columns.length === 0) {
71
+ return false;
72
+ }
73
+ const columnKeys = columns.map((column) => isPlainRecord(column) && typeof column['columnKey'] === 'string'
74
+ ? column['columnKey']
75
+ : undefined);
76
+ return (columns.every((column) => isPlainRecord(column) &&
77
+ typeof column['columnKey'] === 'string' &&
78
+ column['columnKey'].trim() !== '' &&
79
+ (column['fill'] === 'OPTIONAL' || column['fill'] === 'REQUIRED')) && new Set(columnKeys).size === columnKeys.length);
80
+ };
81
+ /**
82
+ * Whether two fill-unit column sets share a unit: a whole-field unit (`null`)
83
+ * overlaps every column, and two columns overlap only when they are the same.
84
+ */
85
+ const doFillUnitsOverlap = (left, right) => left.some((leftColumn) => right.some((rightColumn) => leftColumn === null ||
86
+ rightColumn === null ||
87
+ leftColumn === rightColumn));
60
88
  /**
61
89
  * Whether a stored entry is one the publish lint accepts. Stricter than
62
90
  * `readNodeFieldAccess`, which the engine reads with: a blank `fieldKey`
@@ -67,7 +95,8 @@ function isFieldAccessEntryValid(entry) {
67
95
  typeof entry['fieldKey'] === 'string' &&
68
96
  entry['fieldKey'].trim() !== '' &&
69
97
  exports.FIELD_ACCESS_DISPLAYS.some((display) => display === entry['display']) &&
70
- exports.FIELD_ACCESS_FILLS.some((fill) => fill === entry['fill']));
98
+ exports.FIELD_ACCESS_FILLS.some((fill) => fill === entry['fill']) &&
99
+ isFieldAccessColumnsValid(entry['columns']));
71
100
  }
72
101
  /**
73
102
  * One user task node's issues, in publish-lint order: the deprecated
@@ -118,7 +147,7 @@ function readNodeFieldAccessIssues(node) {
118
147
  ];
119
148
  }
120
149
  const fieldKeys = entries.map((entry) => entry.fieldKey);
121
- const hasFillableField = (0, field_access_1.readNodeFillableFieldKeys)(node).size > 0;
150
+ const fillableFieldKeys = (0, field_access_1.readNodeFillGrantFieldKeys)(node);
122
151
  return [
123
152
  ...legacyIssues,
124
153
  ...fieldKeys
@@ -131,14 +160,14 @@ function readNodeFieldAccessIssues(node) {
131
160
  nodeIds: [nodeId],
132
161
  })),
133
162
  ...(0, field_access_1.readNodeFieldAccess)(node)
134
- .filter((entry) => entry.fill !== 'NONE' && entry.display === 'HIDE')
163
+ .filter((entry) => entry.display === 'HIDE' && fillableFieldKeys.has(entry.fieldKey))
135
164
  .map((entry) => ({
136
165
  code: 'fieldAccessFillHidden',
137
166
  fieldKeys: [entry.fieldKey],
138
167
  message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.fieldAccessFillHidden(nodeId, entry.fieldKey),
139
168
  nodeIds: [nodeId],
140
169
  })),
141
- ...(hasFillableField ? readUserTaskFillConflicts(node) : []).map((conflict) => ({
170
+ ...(fillableFieldKeys.size > 0 ? readUserTaskFillConflicts(node) : []).map((conflict) => ({
142
171
  code: FILL_CONFLICT_ISSUES[conflict].code,
143
172
  fieldKeys: [],
144
173
  message: FILL_CONFLICT_ISSUES[conflict].message(nodeId),
@@ -211,19 +240,26 @@ function readDefinitionFieldAccessIssues(definition) {
211
240
  const userTasks = definition.nodes.filter((node) => node.type === 'userTask');
212
241
  const canBothRun = createWorkflowCoRunReader(definition);
213
242
  const pathIssues = [...approverFilled].flatMap((fieldKey) => {
214
- const fillNodeIds = [
215
- ...new Set(userTasks
216
- .filter((node) => (0, field_access_1.readNodeFillableFieldKeys)(node).has(fieldKey))
217
- .map((node) => node.id)),
218
- ];
219
- return fillNodeIds.flatMap((nodeId, index) => fillNodeIds
243
+ // One filler per (fieldKey, columnKey): two nodes filling different
244
+ // columns of one table never overwrite each other (ADR 27 ยง4(a)).
245
+ const fillers = userTasks
246
+ .map((node) => ({
247
+ nodeId: node.id,
248
+ columnKeys: (0, field_access_1.readNodeFillUnits)(node)
249
+ .filter((unit) => unit.fieldKey === fieldKey)
250
+ .map((unit) => unit.columnKey),
251
+ }))
252
+ .filter((filler) => filler.columnKeys.length > 0);
253
+ return fillers.flatMap((filler, index) => fillers
220
254
  .slice(index + 1)
221
- .filter((otherNodeId) => canBothRun(nodeId, otherNodeId))
222
- .map((otherNodeId) => ({
255
+ .filter((other) => other.nodeId !== filler.nodeId &&
256
+ doFillUnitsOverlap(filler.columnKeys, other.columnKeys) &&
257
+ canBothRun(filler.nodeId, other.nodeId))
258
+ .map((other) => ({
223
259
  code: 'approverFilledMultipleFillNodesOnPath',
224
260
  fieldKeys: [fieldKey],
225
- message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledMultipleFillNodesOnPath(fieldKey, nodeId, otherNodeId),
226
- nodeIds: [nodeId, otherNodeId],
261
+ message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledMultipleFillNodesOnPath(fieldKey, filler.nodeId, other.nodeId),
262
+ nodeIds: [filler.nodeId, other.nodeId],
227
263
  })));
228
264
  });
229
265
  return [...writeIssues, ...pathIssues];
@@ -232,9 +268,10 @@ function readDefinitionFieldAccessIssues(definition) {
232
268
  * Why a form field cannot be one an approver fills in, as the issues the
233
269
  * publish lint reports once it is: a form-level rule (`required` / `hidden`
234
270
  * set to `true`, the others set at all โ€” `required: false` and
235
- * `hidden: false`, what the form editor writes for "off", are not rules), a
236
- * data source, a file upload, or a table with a data-source column. Empty
237
- * when the field can be filled in.
271
+ * `hidden: false`, what the form editor writes for "off", are not rules) or a
272
+ * file upload. A data source, or a table with a data-source column, can be
273
+ * filled in by the approver (ADR 27 ยง4(b)). Empty when the field can be filled
274
+ * in.
238
275
  */
239
276
  function readFormFieldFillIssues(field) {
240
277
  const { fieldKey } = field;
@@ -248,22 +285,11 @@ function readFormFieldFillIssues(field) {
248
285
  ...workflow_graph_1.APPROVER_FILLED_FORM_RULES.filter((rule) => rule === 'required' || rule === 'hidden'
249
286
  ? field[rule] === true
250
287
  : field[rule] !== undefined).map((rule) => issue('approverFilledFieldFormRule', workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledFieldFormRule(fieldKey, rule))),
251
- ...((0, form_1.isFormDataSourceFieldDefinition)(field)
252
- ? [
253
- issue('approverFilledFieldDataSource', workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledFieldDataSource(fieldKey)),
254
- ]
255
- : []),
256
288
  ...(field.type === 'file_upload'
257
289
  ? [
258
290
  issue('approverFilledFieldFileUpload', workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledFieldFileUpload(fieldKey)),
259
291
  ]
260
292
  : []),
261
- ...((0, form_1.isTableFieldDefinition)(field) &&
262
- field.columns.some(form_1.isFormDataSourceFieldDefinition)
263
- ? [
264
- issue('approverFilledTableDataSourceColumn', workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledTableDataSourceColumn(fieldKey)),
265
- ]
266
- : []),
267
293
  ];
268
294
  }
269
295
  /**
@@ -279,22 +305,64 @@ function readFormFieldFillIssues(field) {
279
305
  * stricter.
280
306
  */
281
307
  function referencesFormField(expression, fieldKey) {
282
- const escapedKey = fieldKey.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
283
- // Not preceded by an identifier character or a dot, so `myform` and
284
- // `a.form` do not pass for the root.
285
- const root = '(?<![\\p{L}\\p{N}_.])(?:formData|form)\\s*';
308
+ return referencesRootedKey(expression, '(?:formData|form)', fieldKey);
309
+ }
310
+ /**
311
+ * The same match as `referencesFormField`, for an arbitrary root: `root` is a
312
+ * regex alternation (`(?:formData|form)`, `row`) placed before `.key` or
313
+ * `["key"]`. The root may not be preceded by an identifier character or a dot.
314
+ */
315
+ function referencesRootedKey(expression, root, key) {
316
+ const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
317
+ const rootPattern = `(?<![\\p{L}\\p{N}_.])${root}\\s*`;
286
318
  return [
287
- new RegExp(`${root}\\.\\s*${escapedKey}(?![\\p{L}\\p{N}_])`, 'u'),
288
- new RegExp(`${root}\\[\\s*["']${escapedKey}["']\\s*\\]`, 'u'),
319
+ new RegExp(`${rootPattern}\\.\\s*${escapedKey}(?![\\p{L}\\p{N}_])`, 'u'),
320
+ new RegExp(`${rootPattern}\\[\\s*["']${escapedKey}["']\\s*\\]`, 'u'),
289
321
  ].some((pattern) => pattern.test(expression));
290
322
  }
323
+ const readDependentColumnKeys = (table, sourceColumnKey) => table.columns
324
+ .filter((column) => (0, form_1.isFormDataSourceFieldDefinition)(column) &&
325
+ column.dataSource.bindings.some(({ from }) => from.kind === 'ROW_FIELD'
326
+ ? from.columnKey === sourceColumnKey
327
+ : from.kind === 'EXPRESSION' &&
328
+ referencesRootedKey(from.expression, 'row', sourceColumnKey)))
329
+ .map((column) => column.fieldKey);
330
+ /**
331
+ * Every column the approver may fill in that a data-source column of the same
332
+ * table reads, while that data-source column is not open to the same node.
333
+ * A table granted whole is skipped: every column of it is then open. An
334
+ * EXPRESSION source counts only through a `row` reference, the way the cell
335
+ * reads its own row. Empty when `schema` is null.
336
+ */
337
+ function readFieldAccessDependencyBreaks(schema, units) {
338
+ if (schema === null) {
339
+ return [];
340
+ }
341
+ const wholeFieldKeys = new Set(units
342
+ .filter(({ columnKey }) => columnKey === null)
343
+ .map(({ fieldKey }) => fieldKey));
344
+ return schema.fields.flatMap((field) => {
345
+ if (!(0, form_1.isTableFieldDefinition)(field) ||
346
+ wholeFieldKeys.has(field.fieldKey)) {
347
+ return [];
348
+ }
349
+ const openColumnKeys = new Set(units.flatMap(({ fieldKey, columnKey }) => fieldKey === field.fieldKey && columnKey !== null ? [columnKey] : []));
350
+ return [...openColumnKeys].flatMap((sourceColumnKey) => readDependentColumnKeys(field, sourceColumnKey)
351
+ .filter((dependentColumnKey) => dependentColumnKey !== sourceColumnKey &&
352
+ !openColumnKeys.has(dependentColumnKey))
353
+ .map((dependentColumnKey) => ({
354
+ dependentColumnKey,
355
+ fieldKey: field.fieldKey,
356
+ sourceColumnKey,
357
+ })));
358
+ });
359
+ }
291
360
  /**
292
361
  * The issues read against the form the definition is bound to, in
293
362
  * publish-lint order: a `fieldKey` that is not a top-level field of the form,
294
363
  * an approver-filled field the form will not let anybody fill in
295
364
  * (`readFormFieldFillIssues`, once per field however many nodes fill it in),
296
- * `fill: 'REQUIRED'` on a boolean (`false` is an answer, so required can never
297
- * fail), and an applicant's rule that reads an approver-filled field โ€” the
365
+ * and an applicant's rule that reads an approver-filled field โ€” the
298
366
  * rule is evaluated against the submitted form, where that field is still
299
367
  * empty, and the evaluation silently compares against nothing.
300
368
  */
@@ -313,18 +381,6 @@ function readFormFieldAccessIssues(definition, schema) {
313
381
  message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.fieldAccessUnknownField(node.id, fieldKey),
314
382
  nodeIds: [node.id],
315
383
  })));
316
- const requiredBooleanIssues = userTasks.flatMap((node) => (0, field_access_1.readNodeFieldAccess)(node)
317
- .filter(({ fieldKey, fill }) => {
318
- var _a;
319
- return fill === 'REQUIRED' &&
320
- ((_a = fieldsByKey.get(fieldKey)) === null || _a === void 0 ? void 0 : _a.type) === 'boolean';
321
- })
322
- .map(({ fieldKey }) => ({
323
- code: 'approverFilledRequiredBoolean',
324
- fieldKeys: [fieldKey],
325
- message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledRequiredBoolean(node.id, fieldKey),
326
- nodeIds: [node.id],
327
- })));
328
384
  const approverFilled = (0, field_access_1.readApproverFilledFieldKeys)(definition);
329
385
  const applicantRuleIssues = ((_b = schema === null || schema === void 0 ? void 0 : schema.fields) !== null && _b !== void 0 ? _b : [])
330
386
  .filter((field) => !approverFilled.has(field.fieldKey))
@@ -345,10 +401,19 @@ function readFormFieldAccessIssues(definition, schema) {
345
401
  const field = fieldsByKey.get(fieldKey);
346
402
  return field === undefined ? [] : readFormFieldFillIssues(field);
347
403
  });
404
+ // A column the approver fills in whose data-source dependent the same node
405
+ // leaves open would keep its upstream value after the approver changes its
406
+ // source, so the publish refuses it (ADR 27 ยง4.3).
407
+ const dependencyIssues = userTasks.flatMap((node) => readFieldAccessDependencyBreaks(schema, (0, field_access_1.readNodeFillUnits)(node)).map(({ fieldKey, sourceColumnKey, dependentColumnKey }) => ({
408
+ code: 'approverFilledTableDataSourceColumn',
409
+ fieldKeys: [fieldKey],
410
+ message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledTableDataSourceColumn(node.id, fieldKey, sourceColumnKey, dependentColumnKey),
411
+ nodeIds: [node.id],
412
+ })));
348
413
  return [
349
414
  ...unknownFieldIssues,
350
415
  ...fieldIssues,
351
- ...requiredBooleanIssues,
416
+ ...dependencyIssues,
352
417
  ...applicantRuleIssues,
353
418
  ];
354
419
  }
@@ -1 +1 @@
1
- {"version":3,"file":"field-access-lint.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/field-access-lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-access-lint.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/field-access-lint.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,30 @@
1
1
  import { FieldAccessIssue, UserTaskFillConflict } from './field-access-lint';
2
- import type { FormDefinitionSchema, FormFieldDefinition } from './form';
3
- import type { FieldAccessEntry, WorkflowDefinition } from './workflow';
2
+ import { type FormDefinitionSchema, type FormFieldDefinition } from './form';
3
+ import type { FieldAccessColumnEntry, FieldAccessEntry, FieldAccessFill, WorkflowDefinition } from './workflow';
4
4
  /**
5
5
  * What a cell of the field access matrix offers. `DEFAULT` writes nothing for
6
- * the node, so the field falls back to the derived value; the other four each
7
- * stand for one `FieldAccessEntry` (`fill` other than `NONE` is always shown,
8
- * since a hidden fill cannot be published).
6
+ * the node, so the field falls back to the derived value. `SHOW`, `HIDE`,
7
+ * `FILL_OPTIONAL` and `FILL_REQUIRED` each stand for one whole-field
8
+ * `FieldAccessEntry` (`fill` other than `NONE` is always shown, since a hidden
9
+ * fill cannot be published). `COLUMNS` stands for a column-mode entry (ADR 27
10
+ * ยง4(a)) on a table field, whose fillable columns are set per column through
11
+ * `updateFieldAccessColumnFill`; it may hold zero columns while being edited.
9
12
  */
10
- export type FieldAccessChoice = 'DEFAULT' | 'FILL_OPTIONAL' | 'FILL_REQUIRED' | 'HIDE' | 'SHOW';
13
+ export type FieldAccessChoice = 'DEFAULT' | 'FILL_OPTIONAL' | 'FILL_REQUIRED' | 'HIDE' | 'SHOW' | 'COLUMNS';
11
14
  export declare const FIELD_ACCESS_CHOICES: readonly FieldAccessChoice[];
12
15
  /**
13
16
  * What a viewer at one place in the flow gets for a field. `FILL` is the
14
17
  * applicant's own field; `NOT_SHOWN` is an approver-filled field nobody has
15
18
  * filled in yet, which BPM leaves off the screen; `HIDDEN` is a node that
16
- * chose to hide the field (display only, never a permission).
19
+ * chose to hide the field (display only, never a permission); `FILL_COLUMNS`
20
+ * is a node that lets its approver fill some columns of a table.
17
21
  */
18
- export type FieldAccessEffective = 'FILL' | 'FILL_OPTIONAL' | 'FILL_REQUIRED' | 'HIDDEN' | 'NOT_SHOWN' | 'READ_ONLY';
22
+ export type FieldAccessEffective = 'FILL' | 'FILL_COLUMNS' | 'FILL_OPTIONAL' | 'FILL_REQUIRED' | 'HIDDEN' | 'NOT_SHOWN' | 'READ_ONLY';
23
+ /** One column of a table field, as the matrix lists it under the table row. */
24
+ export interface FieldAccessMatrixTableColumn {
25
+ readonly columnKey: string;
26
+ readonly label: string;
27
+ }
19
28
  /**
20
29
  * Why a cell reads the way it does: the node lists the field (`EXPLICIT`), an
21
30
  * ordinary field every node sees read-only (`APPLICANT_FIELD`), an
@@ -49,6 +58,8 @@ export interface FieldAccessMatrixCell {
49
58
  /** The fill choices this cell cannot take, for the node or the field. */
50
59
  readonly disabledChoices: readonly FieldAccessChoice[];
51
60
  readonly effective: FieldAccessEffective;
61
+ /** The fillable columns of a column-mode entry; empty for any other cell. */
62
+ readonly columnFills: readonly FieldAccessColumnEntry[];
52
63
  readonly explicit: FieldAccessEntry | null;
53
64
  readonly nodeId: string;
54
65
  readonly reason: FieldAccessCellReason;
@@ -68,6 +79,8 @@ export interface FieldAccessMatrixRow {
68
79
  /** Publish-blocking issues that name this field. */
69
80
  readonly issues: readonly FieldAccessIssue[];
70
81
  readonly notices: readonly FieldAccessNotice[];
82
+ /** The columns a table field offers per-column access for; empty otherwise. */
83
+ readonly tableColumns: readonly FieldAccessMatrixTableColumn[];
71
84
  }
72
85
  export interface FieldAccessMatrix {
73
86
  readonly columns: readonly FieldAccessMatrixColumn[];
@@ -79,8 +92,20 @@ export interface FieldAccessMatrix {
79
92
  readonly rows: readonly FieldAccessMatrixRow[];
80
93
  }
81
94
  export declare function readFieldAccessChoice(entry: FieldAccessEntry | null): FieldAccessChoice;
82
- /** The entry a choice writes for the field, or `null` for `DEFAULT`. */
95
+ /**
96
+ * The entry a choice writes for the field, or `null` for `DEFAULT`. `COLUMNS`
97
+ * writes an empty column list, which the publish lint rejects until a column
98
+ * is checked, so the drawer must not apply it on its own.
99
+ */
83
100
  export declare function readFieldAccessEntryForChoice(fieldKey: string, choice: FieldAccessChoice): FieldAccessEntry | null;
101
+ /**
102
+ * The entry after one column of a table field is set to `fill`, or cleared
103
+ * when `fill` is `NONE`. The other columns keep their fill and order; a
104
+ * whole-field entry (no `columns`) starts from an empty column list.
105
+ */
106
+ export declare function updateFieldAccessColumnFill(entry: FieldAccessEntry | null, fieldKey: string, columnKey: string, fill: FieldAccessFill): FieldAccessEntry;
107
+ /** The table columns a field offers per-column access for; none for other fields. */
108
+ export declare function readTableColumns(field: FormFieldDefinition): readonly FieldAccessMatrixTableColumn[];
84
109
  /**
85
110
  * The designer's field access matrix: one row per top-level form field, one
86
111
  * column per user task in flow order, and in each cell the node's explicit