@owlmeans/planning 0.1.18-rc.11 → 0.1.18-rc.13
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/README.md +24 -3
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/planning/SKILL.md +79 -7
- package/build/helpers/apply.d.ts +2 -0
- package/build/helpers/apply.d.ts.map +1 -1
- package/build/helpers/apply.js +2 -0
- package/build/helpers/apply.js.map +1 -1
- package/build/helpers/changes.d.ts +6 -1
- package/build/helpers/changes.d.ts.map +1 -1
- package/build/helpers/changes.js +18 -4
- package/build/helpers/changes.js.map +1 -1
- package/package.json +2 -2
- package/src/helpers/apply.ts +2 -0
- package/src/helpers/changes.ts +18 -4
- package/tests/apply.spec.ts +65 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ the executor with `@owlmeans/server-planning` and reads remotely with `@owlmeans
|
|
|
9
9
|
## Installation
|
|
10
10
|
|
|
11
11
|
```sh
|
|
12
|
-
bun add @owlmeans/planning@^0.1.18-rc.
|
|
12
|
+
bun add @owlmeans/planning@^0.1.18-rc.13 ajv ajv-formats
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## Concepts
|
|
@@ -78,6 +78,20 @@ const page = await context.entrypoint(planningProtocols.card.list).call({ query
|
|
|
78
78
|
const where = criteriaOf(decodeWorkcardQuery(req.query), { entityId })
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
+
Create a card and read it back through a facade — in process the one of `@owlmeans/server-planning`
|
|
82
|
+
(`ctx.service<PlanningHostService>(PLANNING_SERVICE).for({ entityId, profileId })`), remotely the one
|
|
83
|
+
of `@owlmeans/client-planning`:
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import { TransitionAction, WorkcardKind } from '@owlmeans/planning'
|
|
87
|
+
|
|
88
|
+
const drill = await planning.execute({
|
|
89
|
+
action: TransitionAction.Create,
|
|
90
|
+
card: { kind: WorkcardKind.Card, type: 'shed:tool', parent: shedId, title: 'Cordless drill' },
|
|
91
|
+
}, { wait: true }) // the options are the SECOND argument
|
|
92
|
+
const again = await planning.cards.get(drill.card!.id!)
|
|
93
|
+
```
|
|
94
|
+
|
|
81
95
|
Work through a model — the same code on either side of the wire:
|
|
82
96
|
|
|
83
97
|
```ts
|
|
@@ -141,9 +155,16 @@ const links = transitions.reduce(applyRelationship, [])
|
|
|
141
155
|
|
|
142
156
|
## Common pitfalls
|
|
143
157
|
|
|
158
|
+
- A create's draft goes under `card` (never `draft`), and `{ wait, timeout }` is the second argument
|
|
159
|
+
of `execute` — inside the execution an in-process facade ignores it.
|
|
160
|
+
- A type or flow declaration has no `name` or `key`: the display name is `label`, the key is `type`
|
|
161
|
+
(a type) or `id` (a flow); a status has `key`, a transition rule `name`. The declaration schemas
|
|
162
|
+
are closed — `definitions.define` refuses an extra key with `SchemaInvalid`.
|
|
144
163
|
- Pass a query through `encode*Query` before an HTTP call — arrays and objects do not survive a
|
|
145
164
|
query string as they are.
|
|
146
165
|
- `status`, `intrinsic` and `flows` move only through `transit`; an `update` naming them is refused.
|
|
166
|
+
- `createdBy` is written once, by a create's draft: `changes` or `unset` naming it is refused on
|
|
167
|
+
every action (`planning:immutable:createdBy`), so an ownership check can trust it.
|
|
147
168
|
- `fields` and `flows` in `changes` merge; every other key replaces. Clear with `null` or `unset`.
|
|
148
169
|
- A model's `expectSeq` is its record's head: a stale model refuses with `WorkcardConflict`.
|
|
149
170
|
- `WorkcardNotFound` is also the answer for another entity's card — never read it as "deleted".
|
|
@@ -157,7 +178,7 @@ const links = transitions.reduce(applyRelationship, [])
|
|
|
157
178
|
- `@owlmeans/server-planning` — executor, plugin registry, memory store, handlers
|
|
158
179
|
- `@owlmeans/client-planning` — remote facade, state mirror, commit waiting
|
|
159
180
|
- `@owlmeans/resource` — the criteria language
|
|
160
|
-
- `@owlmeans/
|
|
181
|
+
- `@owlmeans/planning-postgres` — the durable Postgres store
|
|
161
182
|
|
|
162
183
|
<!-- owlmeans:agent-guidance:start -->
|
|
163
184
|
## Agent guidance
|
|
@@ -167,7 +188,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
|
|
|
167
188
|
your project's skill store (`.agents/skills/`):
|
|
168
189
|
|
|
169
190
|
```sh
|
|
170
|
-
npx @owlmeans/agent-skills@^0.1.18-rc.
|
|
191
|
+
npx @owlmeans/agent-skills@^0.1.18-rc.44
|
|
171
192
|
```
|
|
172
193
|
|
|
173
194
|
The embedded files are version-matched to this package release. Do not edit them
|
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/planning",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-09-
|
|
4
|
+
"version": "0.1.18-rc.13",
|
|
5
|
+
"generatedAt": "2026-09-30T09:41:02.827Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -8,7 +8,7 @@ user-invocable: false
|
|
|
8
8
|
# @owlmeans/planning
|
|
9
9
|
|
|
10
10
|
**Layer:** Cross-cutting domain
|
|
11
|
-
**Install:** `"@owlmeans/planning": "^0.1.18-rc.
|
|
11
|
+
**Install:** `"@owlmeans/planning": "^0.1.18-rc.13"` in `dependencies` (`ajv` and `ajv-formats` are peers)
|
|
12
12
|
|
|
13
13
|
The contracts of project planning: record shapes, schemas, refusals, the protocol tree, the pure
|
|
14
14
|
fold and the models. No database, no fastify, no React. The executor, the plugin registry, the
|
|
@@ -22,6 +22,42 @@ transitions in `seq` order. There is one write path (`facade.execute(exec)`), on
|
|
|
22
22
|
(`applyTransition`) and one query translation (`criteriaOf`), shared by every store and both sides
|
|
23
23
|
of the wire, so one log always means one card.
|
|
24
24
|
|
|
25
|
+
## The write call
|
|
26
|
+
|
|
27
|
+
`facade.execute(execution, options?)` — the same signature on the server facade
|
|
28
|
+
(`@owlmeans/server-planning`, reached as `ctx.service<PlanningHostService>(PLANNING_SERVICE).for({
|
|
29
|
+
entityId, profileId })`) and the remote one (`@owlmeans/client-planning`).
|
|
30
|
+
|
|
31
|
+
- The **execution** has exactly these keys — `TransitionExecutionSchema` is closed, but only the
|
|
32
|
+
wire validates against it; in process an unknown key is silently ignored: `card` — the `WorkcardDraft` of a
|
|
33
|
+
create (`kind`, `type`, `title` required; `parent`/`parents`, `description`, `code`, `labels`,
|
|
34
|
+
`order`, `fields`, `status`, and a specification's `category`/`format`/`body`), the card id
|
|
35
|
+
otherwise — and `action` (`TransitionAction`), then per action `transition`, `flow`, `changes`,
|
|
36
|
+
`unset`, `link` / `links`, and `cause`, `key`, `expectSeq`.
|
|
37
|
+
- The **options** are `{ wait?, timeout? }`, always the second argument. Only the wire body
|
|
38
|
+
(`ExecuteRequest`) carries them beside the execution.
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import { TransitionAction, WorkcardKind } from '@owlmeans/planning'
|
|
42
|
+
|
|
43
|
+
const drill = await planning.execute({
|
|
44
|
+
action: TransitionAction.Create,
|
|
45
|
+
card: { kind: WorkcardKind.Card, type: 'shed:tool', parent: shedId, title: 'Cordless drill', fields: { brand: 'Acme' } },
|
|
46
|
+
}, { wait: true }) // drill.card — the committed record
|
|
47
|
+
await planning.cards.get(drill.card!.id!)
|
|
48
|
+
await planning.execute({ action: TransitionAction.Transit, card: drill.card!.id!, transition: 'lend' }, { wait: true })
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
| Wrong | What happens | Right |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| `{ action, draft: { … } }` | `planning:malformed:create-without-draft` | the draft goes under `card` |
|
|
54
|
+
| `{ …, wait: true }` in the execution | ignored in process: the receipt returns before the commit, with no `card` | `execute(exec, { wait: true })` |
|
|
55
|
+
| `action: 'create'` | a type error — `TransitionAction` is an enum | `TransitionAction.Create` |
|
|
56
|
+
|
|
57
|
+
Each is a compile error against the typed `TransitionExecution`; it reaches run time only through a
|
|
58
|
+
value typed `any`. `server-planning` carries the full example (facade, read back, data-defined
|
|
59
|
+
type and flow).
|
|
60
|
+
|
|
25
61
|
## Key exports
|
|
26
62
|
|
|
27
63
|
| Export | What it is |
|
|
@@ -63,6 +99,10 @@ of the wire, so one log always means one card.
|
|
|
63
99
|
`keepRevisions`, a JSON body `schema` — is declared on the PARENT's type. One record per
|
|
64
100
|
`(parent, category)` unless the slot is `multiple`; a revisioned slot increments `revision` on the
|
|
65
101
|
same record, and earlier bodies come back from the transition log.
|
|
102
|
+
- **`createdBy` is written once, from a create's draft, and never moves.** Named in `changes` or
|
|
103
|
+
`unset` it is refused on every action (`planning:immutable:createdBy`), so an ownership check
|
|
104
|
+
(`card.createdBy === profileId`) can trust it. A card that changes hands keeps that in a field of
|
|
105
|
+
its own type (`fields.assignee`); who made each later write is the transition's `actor`.
|
|
66
106
|
- **`seq` is the last folded transition, `head` the highest allocated.** `head > seq` means a write
|
|
67
107
|
is in flight (`isPending`); optimistic concurrency (`expectSeq`) compares against the head.
|
|
68
108
|
- `order` is a double: a card may sit between two others (`3.5`).
|
|
@@ -89,7 +129,21 @@ of the wire, so one log always means one card.
|
|
|
89
129
|
## Declaring a type
|
|
90
130
|
|
|
91
131
|
A `WorkcardTypeSchema` / `ProjectTypeSchema` is plain data registered through a plugin's `schemas`
|
|
92
|
-
or `makeSchemaRegistry({ types, flows })
|
|
132
|
+
or `makeSchemaRegistry({ types, flows })`. **Every declaration schema is closed** — these are ALL
|
|
133
|
+
the keys:
|
|
134
|
+
|
|
135
|
+
| Declaration | Required | Optional |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| card / specification type | `type` (its key), `kind`, `version`, `fields`, `flows` (at least one), `specifications` | `intrinsic`, `relationships`, `labels`, `code`, `label`, `overridable` |
|
|
138
|
+
| project type | the same, plus `cardTypes` | `projectTypes`, `scopedCardTypes` |
|
|
139
|
+
| flow | `id` (its key), `version`, `statuses` (at least one), `transitions` | `label`, `overridable` |
|
|
140
|
+
| status | `key`, `intrinsic` | `initial`, `terminal`, `label`, `tone` |
|
|
141
|
+
| transition rule | `name`, `from` (status keys or `'*'`), `to` | `label`, `explicit` |
|
|
142
|
+
|
|
143
|
+
The display name is `label` everywhere; a type or a flow has no `name`, `key` or `description`
|
|
144
|
+
(`key` belongs to a status, `name` to a rule). As data, `definitions` refuses an extra key with
|
|
145
|
+
`SchemaInvalid`; in code the registry does not validate a declaration, so only TypeScript's
|
|
146
|
+
excess-property check catches it — keep the literal typed.
|
|
93
147
|
|
|
94
148
|
- `fields` — the AJV schema of `fields`; the registry compiles and caches it (`validator(type)`).
|
|
95
149
|
- `specifications` — the slots this type's cards carry as children. A slot may name its
|
|
@@ -133,7 +187,20 @@ optional `PlanningStore.schemas` port — layered **code → entity → project*
|
|
|
133
187
|
- `PlanningFacade.definitions` (present only where the store has the port): `bundle(project?)`,
|
|
134
188
|
`registry(project?)`, `records`, `putType`/`putFlow` (CAS on the declaration's version),
|
|
135
189
|
`define` (each at its layer's next version, flows first), `seed` (only the keys the layer lacks),
|
|
136
|
-
`retire(kind, key, { project? })`.
|
|
190
|
+
`retire(kind, key, { project? })`. The declaration still carries its own `version` (any number
|
|
191
|
+
≥ 1 for `define`/`seed`, which assign the layer's next one; the exact next one for `put*`), and
|
|
192
|
+
a project layer is `{ project: <project card id> }` in the second argument:
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
await planning.definitions!.define({
|
|
196
|
+
flows: [{ id: 'shed:repair', version: 1, label: 'Repair',
|
|
197
|
+
statuses: [{ key: 'reported', intrinsic: IntrinsicStatus.Planned, initial: true },
|
|
198
|
+
{ key: 'fixed', intrinsic: IntrinsicStatus.Closed, terminal: true }],
|
|
199
|
+
transitions: [{ name: 'fix', from: ['reported'], to: 'fixed', explicit: true }] }],
|
|
200
|
+
types: [{ type: 'shed:repair', kind: WorkcardKind.Card, version: 1, label: 'Repair ticket',
|
|
201
|
+
fields: { type: 'object' }, flows: ['shed:repair'], specifications: [] }],
|
|
202
|
+
}, { project: shedId }) // admitted under the shed when its type says `scopedCardTypes: true` (or lists it in `cardTypes`)
|
|
203
|
+
```
|
|
137
204
|
|
|
138
205
|
## The fold
|
|
139
206
|
|
|
@@ -147,7 +214,10 @@ optional `PlanningStore.schemas` port — layered **code → entity → project*
|
|
|
147
214
|
replaces** — and clear `unset` (`key`, `fields.key`, `flows.id`); identity and required keys are
|
|
148
215
|
never written or cleared;
|
|
149
216
|
- `link`/`unlink` move only `seq`/`head`/`updatedAt`; `delete` answers `null`;
|
|
150
|
-
- every result carries `seq = transition.seq`, `head = max(head, seq)`, `updatedAt = transition.at
|
|
217
|
+
- every result carries `seq = transition.seq`, `head = max(head, seq)`, `updatedAt = transition.at`;
|
|
218
|
+
- the log is replayed AS WRITTEN: a row the executor would refuse today (an update naming
|
|
219
|
+
`createdBy`, appended before that refusal existed) still folds. Guards live at admission
|
|
220
|
+
(`assertMutable`, the executor), never in the fold, so a stored log never stops projecting.
|
|
151
221
|
|
|
152
222
|
`applyRelationship(links, transition)` folds the edges: a create's `links`, `link`, `unlink`, and a
|
|
153
223
|
`delete` dropping every edge touching the card. An existing edge is kept, so re-folding adds nothing.
|
|
@@ -164,10 +234,12 @@ optional `PlanningStore.schemas` port — layered **code → entity → project*
|
|
|
164
234
|
- transit — `flows[flow] = rule.to`, `status` on the primary flow, `intrinsic` when it moves,
|
|
165
235
|
`closedAt` set on entering closed and cleared on leaving; throws `IllegalTransition`;
|
|
166
236
|
- link/unlink/delete — nothing.
|
|
237
|
+
- `createdBy` only ever comes from a create's draft: `changes` and `unset` never carry it.
|
|
167
238
|
|
|
168
|
-
`assertMutable(exec, type)` refuses (`planning:immutable:<field>`) identity keys
|
|
169
|
-
`
|
|
170
|
-
`
|
|
239
|
+
`assertMutable(exec, type)` refuses (`planning:immutable:<field>`) identity keys (`createdAt`
|
|
240
|
+
among them), `createdBy` in `changes` or `unset` on any action (a create included),
|
|
241
|
+
`revision` / `bodyChars`, `status`/`intrinsic`/`flows`/`closedAt` outside a create (they move only
|
|
242
|
+
through `transit`), `category`, a fixed `code`, and clearing a required field.
|
|
171
243
|
|
|
172
244
|
## Querying
|
|
173
245
|
|
package/build/helpers/apply.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ import type { Relationship, Transition, Workcard } from '../types.js';
|
|
|
7
7
|
* safe.
|
|
8
8
|
* - Anything but the next seq (`card.seq + 1`, or 1 for a create with no card) is refused with
|
|
9
9
|
* `PlanningError('fold:out-of-order')`.
|
|
10
|
+
* - The log is replayed as written: a transition the executor would refuse today (an update naming
|
|
11
|
+
* `createdBy`, appended before that refusal existed) still folds. Guards live at admission.
|
|
10
12
|
* - `create` builds the whole record from `changes` plus the transition's identity; `delete`
|
|
11
13
|
* answers `null`; `link`/`unlink` only move `seq`/`head`/`updatedAt` (the edges are
|
|
12
14
|
* {@link applyRelationship}'s); `update`/`transit` write `changes` — `fields` and `flows` merge,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/helpers/apply.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAqB,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AA+DxF
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/helpers/apply.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAqB,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AA+DxF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,QAAQ,GAAG,QAAQ,QACrD,CAAC,GAAG,IAAI,GAAG,SAAS,cAAc,UAAU,KACjD,CAAC,GAAG,IAoDN,CAAA;AAgBD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,UAAW,YAAY,EAAE,cAAc,UAAU,KAAG,YAAY,EAwB7F,CAAA"}
|
package/build/helpers/apply.js
CHANGED
|
@@ -61,6 +61,8 @@ const writeChanges = (record, changes) => {
|
|
|
61
61
|
* safe.
|
|
62
62
|
* - Anything but the next seq (`card.seq + 1`, or 1 for a create with no card) is refused with
|
|
63
63
|
* `PlanningError('fold:out-of-order')`.
|
|
64
|
+
* - The log is replayed as written: a transition the executor would refuse today (an update naming
|
|
65
|
+
* `createdBy`, appended before that refusal existed) still folds. Guards live at admission.
|
|
64
66
|
* - `create` builds the whole record from `changes` plus the transition's identity; `delete`
|
|
65
67
|
* answers `null`; `link`/`unlink` only move `seq`/`head`/`updatedAt` (the edges are
|
|
66
68
|
* {@link applyRelationship}'s); `update`/`transit` write `changes` — `fields` and `flows` merge,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/helpers/apply.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/helpers/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,9 @@ export declare const applyUnset: <T extends object>(record: T, unset?: string[])
|
|
|
19
19
|
*
|
|
20
20
|
* `status`/`intrinsic`/`flows`/`closedAt` move only through `transit` (a create's draft may name
|
|
21
21
|
* the initial status); `code` is fixed once minted unless the type's policy says `mutable`;
|
|
22
|
-
* `category` is fixed; `revision`/`bodyChars` are computed
|
|
22
|
+
* `category` is fixed; `revision`/`bodyChars` are computed; `createdBy` is the create DRAFT's
|
|
23
|
+
* alone — named in `changes` or `unset` it is refused on every action, so an owner check
|
|
24
|
+
* (`card.createdBy === profileId`) can trust it.
|
|
23
25
|
*
|
|
24
26
|
* @throws {PlanningError} `planning:immutable:<field>`
|
|
25
27
|
*/
|
|
@@ -39,6 +41,9 @@ export declare const assertMutable: (exec: TransitionExecution, type: AnyTypeSch
|
|
|
39
41
|
* changes, diffed as in an update.
|
|
40
42
|
* - `link`, `unlink`, `delete`: nothing.
|
|
41
43
|
*
|
|
44
|
+
* `createdBy` comes from a create's draft only: `changes` and `unset` never carry it, on any action
|
|
45
|
+
* ({@link assertMutable} refuses an execution that tries).
|
|
46
|
+
*
|
|
42
47
|
* @throws {IllegalTransition} a transit the flow does not offer from the current status
|
|
43
48
|
* @throws {PlanningError} `malformed:*` for an execution missing what its action needs
|
|
44
49
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/helpers/changes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAAE,sBAAsB,EAAiB,iBAAiB,EAAE,mBAAmB,EAC5F,QAAQ,EAAE,eAAe,EAC1B,MAAM,aAAa,CAAA;AAKpB,KAAK,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAA;AAEtD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,eAAe,CAAA;IACxB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;
|
|
1
|
+
{"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/helpers/changes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAAE,sBAAsB,EAAiB,iBAAiB,EAAE,mBAAmB,EAC5F,QAAQ,EAAE,eAAe,EAC1B,MAAM,aAAa,CAAA;AAKpB,KAAK,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAA;AAEtD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,eAAe,CAAA;IACxB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAkBD,4CAA4C;AAC5C,eAAO,MAAM,SAAS,SAAU,OAAO,SAAS,OAAO,KAAG,OAczD,CAAA;AAKD,yDAAyD;AACzD,eAAO,MAAM,WAAW,UACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,KAC5E,MAAM,CAAC,MAAM,EAAE,OAAO,CACuC,CAAA;AAEhE,qFAAqF;AACrF,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,UAAU,CAAC,UAAU,MAAM,EAAE,KAAG,CAe1E,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,SAAU,mBAAmB,QAAQ,aAAa,KAAG,IA6B9E,CAAA;AA0ID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,cAAc,SACnB,QAAQ,GAAG,IAAI,GAAG,SAAS,QAC3B,mBAAmB,QACnB,aAAa,YACT,UAAU,MAChB,MAAM,SACH;IAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAAE,KACzC,SAsDF,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,aAAa,QAAS,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,KAAG,OAEW,CAAA"}
|
package/build/helpers/changes.js
CHANGED
|
@@ -5,6 +5,8 @@ import { bodyCharsOf, nextRevision } from './specification.js';
|
|
|
5
5
|
import { initialFlowsOf, initialStatusOf, primaryFlowOf, resolveIntrinsic, ruleOf } from './status.js';
|
|
6
6
|
/** Never in a caller's changes: the transition itself carries them. */
|
|
7
7
|
const IDENTITY_KEYS = ['id', 'kind', 'type', 'entityId', 'seq', 'head', 'createdAt'];
|
|
8
|
+
/** Written once, from a create's draft; never by `changes` or `unset`, whatever the action. */
|
|
9
|
+
const PROVENANCE_KEYS = ['createdBy'];
|
|
8
10
|
/** Move only through `transit` (or a create's draft). */
|
|
9
11
|
const FLOW_KEYS = ['status', 'intrinsic', 'flows', 'closedAt'];
|
|
10
12
|
/** Computed by the executor, never supplied. */
|
|
@@ -55,7 +57,9 @@ export const applyUnset = (record, unset) => {
|
|
|
55
57
|
*
|
|
56
58
|
* `status`/`intrinsic`/`flows`/`closedAt` move only through `transit` (a create's draft may name
|
|
57
59
|
* the initial status); `code` is fixed once minted unless the type's policy says `mutable`;
|
|
58
|
-
* `category` is fixed; `revision`/`bodyChars` are computed
|
|
60
|
+
* `category` is fixed; `revision`/`bodyChars` are computed; `createdBy` is the create DRAFT's
|
|
61
|
+
* alone — named in `changes` or `unset` it is refused on every action, so an owner check
|
|
62
|
+
* (`card.createdBy === profileId`) can trust it.
|
|
59
63
|
*
|
|
60
64
|
* @throws {PlanningError} `planning:immutable:<field>`
|
|
61
65
|
*/
|
|
@@ -69,7 +73,7 @@ export const assertMutable = (exec, type) => {
|
|
|
69
73
|
if (value === undefined) {
|
|
70
74
|
continue;
|
|
71
75
|
}
|
|
72
|
-
if (IDENTITY_KEYS.includes(key) || DERIVED_KEYS.includes(key)) {
|
|
76
|
+
if (IDENTITY_KEYS.includes(key) || PROVENANCE_KEYS.includes(key) || DERIVED_KEYS.includes(key)) {
|
|
73
77
|
refuse(key);
|
|
74
78
|
}
|
|
75
79
|
if (!create && (FLOW_KEYS.includes(key) || key === 'category' || (key === 'code' && codeFixed))) {
|
|
@@ -78,6 +82,9 @@ export const assertMutable = (exec, type) => {
|
|
|
78
82
|
}
|
|
79
83
|
for (const path of exec.unset ?? []) {
|
|
80
84
|
const head = path.split('.')[0];
|
|
85
|
+
if (PROVENANCE_KEYS.includes(head)) {
|
|
86
|
+
refuse(head);
|
|
87
|
+
}
|
|
81
88
|
if (IDENTITY_KEYS.includes(path) || DERIVED_KEYS.includes(path) || REQUIRED_KEYS.includes(path)
|
|
82
89
|
|| FLOW_KEYS.includes(head) || (path === 'code' && codeFixed)) {
|
|
83
90
|
refuse(path);
|
|
@@ -91,7 +98,7 @@ const diffInto = (card, changes, skip, set) => {
|
|
|
91
98
|
const out = set.changes;
|
|
92
99
|
const current = card;
|
|
93
100
|
for (const [key, value] of Object.entries(changes ?? {})) {
|
|
94
|
-
if (value === undefined || IDENTITY_KEYS.includes(key) || skip.includes(key)) {
|
|
101
|
+
if (value === undefined || IDENTITY_KEYS.includes(key) || PROVENANCE_KEYS.includes(key) || skip.includes(key)) {
|
|
95
102
|
continue;
|
|
96
103
|
}
|
|
97
104
|
if (key === 'fields' || key === 'flows') {
|
|
@@ -128,6 +135,9 @@ const diffInto = (card, changes, skip, set) => {
|
|
|
128
135
|
};
|
|
129
136
|
const unsetInto = (card, unset, set) => {
|
|
130
137
|
for (const path of unset ?? []) {
|
|
138
|
+
if (PROVENANCE_KEYS.includes(path.split('.')[0])) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
131
141
|
if (reach(card, path) !== undefined && !set.unset.includes(path)) {
|
|
132
142
|
set.unset.push(path);
|
|
133
143
|
}
|
|
@@ -170,7 +180,8 @@ const createOf = (exec, type, registry, at, slot) => {
|
|
|
170
180
|
}
|
|
171
181
|
const draft = exec.card;
|
|
172
182
|
const overlay = Object.fromEntries(Object.entries(exec.changes ?? {})
|
|
173
|
-
.filter(([key]) => !FLOW_KEYS.includes(key) && !IDENTITY_KEYS.includes(key) && !
|
|
183
|
+
.filter(([key]) => !FLOW_KEYS.includes(key) && !IDENTITY_KEYS.includes(key) && !PROVENANCE_KEYS.includes(key)
|
|
184
|
+
&& !DERIVED_KEYS.includes(key)));
|
|
174
185
|
const parent = overlay.parent ?? draft.parent;
|
|
175
186
|
const flows = initialFlowsOf(type, registry, draft.status ?? exec.changes?.status);
|
|
176
187
|
const intrinsic = resolveIntrinsic(type, flows, registry);
|
|
@@ -219,6 +230,9 @@ const createOf = (exec, type, registry, at, slot) => {
|
|
|
219
230
|
* changes, diffed as in an update.
|
|
220
231
|
* - `link`, `unlink`, `delete`: nothing.
|
|
221
232
|
*
|
|
233
|
+
* `createdBy` comes from a create's draft only: `changes` and `unset` never carry it, on any action
|
|
234
|
+
* ({@link assertMutable} refuses an execution that tries).
|
|
235
|
+
*
|
|
222
236
|
* @throws {IllegalTransition} a transit the flow does not offer from the current status
|
|
223
237
|
* @throws {PlanningError} `malformed:*` for an execution missing what its action needs
|
|
224
238
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/helpers/changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACnG,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAK/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAatG,uEAAuE;AACvE,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;AACpF,yDAAyD;AACzD,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;AAC9D,gDAAgD;AAChD,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;AAC9C,yBAAyB;AACzB,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;AACpF,8EAA8E;AAC9E,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;AAEzD,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE,CACzE,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAErE,4CAA4C;AAC5C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAa,EAAE,KAAc,EAAW,EAAE;IAClE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACrG,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAA;QACrE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAA;QACxE,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC5F,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,CAAmB,MAAS,EAAK,EAAE,CAC/C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAM,CAAA;AAE5F,yDAAyD;AACzD,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,IAAqC,EAAE,KAAsC,EACpD,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;KACnG,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAA;AAEhE,qFAAqF;AACrF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAmB,MAAS,EAAE,KAAgB,EAAK,EAAE;IAC7E,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAA4B,CAAA;IAC/D,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;YACtB,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO,IAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAyB,EAAE,IAAmB,EAAQ,EAAE;IACpF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,CAAA;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAA;IACjE,MAAM,MAAM,GAAG,CAAC,GAAW,EAAS,EAAE;QACpC,MAAM,IAAI,aAAa,CAAC,aAAa,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAClF,CAAC,CAAA;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAQ;QACV,CAAC;QACD,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC;YAChG,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;eAC1F,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,CAAA;QACd,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,CAAC,MAA+B,EAAE,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;KACtF,MAAM,CAAU,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AAE3F,4FAA4F;AAC5F,MAAM,QAAQ,GAAG,CAAC,IAAc,EAAE,OAAoC,EAAE,IAAc,EAAE,GAAc,EAAQ,EAAE;IAC9G,MAAM,GAAG,GAAG,GAAG,CAAC,OAAkC,CAAA;IAClD,MAAM,OAAO,GAAG,IAA0C,CAAA;IAE1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACzD,IAAI,KAAK,KAAK,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7E,SAAQ;QACV,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAA;YAC3D,MAAM,KAAK,GAA4B,EAAE,CAAA;YACzC,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACzF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC7B,SAAQ;gBACV,CAAC;gBACD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;oBACxB,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;wBAC7B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAA;oBACnC,CAAC;gBACH,CAAC;qBAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;oBAC9C,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,CAAA;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YAClB,CAAC;YACD,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBACzB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACrB,CAAC;YACD,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YACpC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QAClB,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,IAAc,EAAE,KAA2B,EAAE,GAAc,EAAQ,EAAE;IACtF,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,IAA0C,EAAE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,gEAAgE;AAChE,MAAM,QAAQ,GAAG,CAAC,IAAc,EAAE,GAAc,EAAQ,EAAE;IACxD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAA;IACvB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACtE,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACxC,OAAM;IACR,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACnG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,IAAc,EAAE,IAA0C,EAAE,GAAc,EAAQ,EAAE;IACtG,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,aAAa,EAAE,CAAC;QAC7C,OAAM;IACR,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAA;IACvB,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;SAAM,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC7B,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAE,GAA+B,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;IACxH,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAqB,EAAE,IAAI,CAAC,CAAA;QAC1D,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACzB,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CACf,IAAyB,EAAE,IAAmB,EAAE,QAAoB,EAAE,EAAU,EAAE,IAA+B,EACtG,EAAE;IACb,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,aAAa,CAAC,gCAAgC,CAAC,CAAA;IAC3D,CAAC;IACD,MAAM,KAAK,GAAkB,IAAI,CAAC,IAAI,CAAA;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SAClE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CACzF,CAAA;IAEpB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAA;IAC7C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAClF,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAEzD,MAAM,MAAM,GAA4B;QACtC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,OAAO;QACV,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM;QACN,OAAO,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;QACnE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;QACjD,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAClC,SAAS;QACT,QAAQ,EAAE,SAAS,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;KAChE,CAAA;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,QAAQ;YAC9D,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,MAAM,IAAI,mBAAmB,CAAC,QAAQ;YACtF,IAAI;YACJ,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,OAAO;YAC1D,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC;YAC5B,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;SACnC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAoB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;AACjE,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAAiC,EACjC,IAAyB,EACzB,IAAmB,EACnB,QAAoB,EACpB,EAAU,EACV,IAA0C,EAC/B,EAAE;IACb,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACvD,CAAC;IACD,MAAM,GAAG,GAAc,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;QACxF,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,aAAa,CAAC,aAAa,IAAI,CAAC,MAAM,eAAe,CAAC,CAAA;IAClE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QACrC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAChC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACnB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;QAEjC,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,aAAa,CAAC,sCAAsC,CAAC,CAAA;IACjE,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAA;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IAChD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,iBAAiB,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;IAC5C,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACzF,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACnB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAEjC,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;IAClD,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;IACzC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;IAC9B,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IACzD,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAA;IACnC,CAAC;IACD,IAAI,SAAS,KAAK,eAAe,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;QACtF,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAA;IAC3B,CAAC;SAAM,IAAI,SAAS,KAAK,eAAe,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QACzE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;AACpD,CAAC,CAAA;AAED,+DAA+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAyC,EAAW,EAAE,CAClF,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CACxE,KAAK,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/helpers/changes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/planning",
|
|
3
|
-
"version": "0.1.18-rc.
|
|
3
|
+
"version": "0.1.18-rc.13",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Runtime-free project-planning contracts — the workcard super type, projects, specifications, typed relationships, status flows with three intrinsic states, the transition event and its pure fold, the schema registry, the models and the protocol tree.",
|
|
6
6
|
"type": "module",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@owlmeans/entrypoint": "^0.1.18-rc.37",
|
|
30
30
|
"@owlmeans/error": "^0.1.18-rc.36",
|
|
31
31
|
"@owlmeans/i18n": "^0.1.18-rc.37",
|
|
32
|
-
"@owlmeans/resource": "^0.1.18-rc.
|
|
32
|
+
"@owlmeans/resource": "^0.1.18-rc.37",
|
|
33
33
|
"@owlmeans/route": "^0.1.18-rc.33"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
package/src/helpers/apply.ts
CHANGED
|
@@ -71,6 +71,8 @@ const writeChanges = (record: Record<string, unknown>, changes: Record<string, u
|
|
|
71
71
|
* safe.
|
|
72
72
|
* - Anything but the next seq (`card.seq + 1`, or 1 for a create with no card) is refused with
|
|
73
73
|
* `PlanningError('fold:out-of-order')`.
|
|
74
|
+
* - The log is replayed as written: a transition the executor would refuse today (an update naming
|
|
75
|
+
* `createdBy`, appended before that refusal existed) still folds. Guards live at admission.
|
|
74
76
|
* - `create` builds the whole record from `changes` plus the transition's identity; `delete`
|
|
75
77
|
* answers `null`; `link`/`unlink` only move `seq`/`head`/`updatedAt` (the edges are
|
|
76
78
|
* {@link applyRelationship}'s); `update`/`transit` write `changes` — `fields` and `flows` merge,
|
package/src/helpers/changes.ts
CHANGED
|
@@ -21,6 +21,8 @@ export interface ChangeSet {
|
|
|
21
21
|
|
|
22
22
|
/** Never in a caller's changes: the transition itself carries them. */
|
|
23
23
|
const IDENTITY_KEYS = ['id', 'kind', 'type', 'entityId', 'seq', 'head', 'createdAt']
|
|
24
|
+
/** Written once, from a create's draft; never by `changes` or `unset`, whatever the action. */
|
|
25
|
+
const PROVENANCE_KEYS = ['createdBy']
|
|
24
26
|
/** Move only through `transit` (or a create's draft). */
|
|
25
27
|
const FLOW_KEYS = ['status', 'intrinsic', 'flows', 'closedAt']
|
|
26
28
|
/** Computed by the executor, never supplied. */
|
|
@@ -82,7 +84,9 @@ export const applyUnset = <T extends object>(record: T, unset?: string[]): T =>
|
|
|
82
84
|
*
|
|
83
85
|
* `status`/`intrinsic`/`flows`/`closedAt` move only through `transit` (a create's draft may name
|
|
84
86
|
* the initial status); `code` is fixed once minted unless the type's policy says `mutable`;
|
|
85
|
-
* `category` is fixed; `revision`/`bodyChars` are computed
|
|
87
|
+
* `category` is fixed; `revision`/`bodyChars` are computed; `createdBy` is the create DRAFT's
|
|
88
|
+
* alone — named in `changes` or `unset` it is refused on every action, so an owner check
|
|
89
|
+
* (`card.createdBy === profileId`) can trust it.
|
|
86
90
|
*
|
|
87
91
|
* @throws {PlanningError} `planning:immutable:<field>`
|
|
88
92
|
*/
|
|
@@ -97,7 +101,7 @@ export const assertMutable = (exec: TransitionExecution, type: AnyTypeSchema): v
|
|
|
97
101
|
if (value === undefined) {
|
|
98
102
|
continue
|
|
99
103
|
}
|
|
100
|
-
if (IDENTITY_KEYS.includes(key) || DERIVED_KEYS.includes(key)) {
|
|
104
|
+
if (IDENTITY_KEYS.includes(key) || PROVENANCE_KEYS.includes(key) || DERIVED_KEYS.includes(key)) {
|
|
101
105
|
refuse(key)
|
|
102
106
|
}
|
|
103
107
|
if (!create && (FLOW_KEYS.includes(key) || key === 'category' || (key === 'code' && codeFixed))) {
|
|
@@ -107,6 +111,9 @@ export const assertMutable = (exec: TransitionExecution, type: AnyTypeSchema): v
|
|
|
107
111
|
|
|
108
112
|
for (const path of exec.unset ?? []) {
|
|
109
113
|
const head = path.split('.')[0]
|
|
114
|
+
if (PROVENANCE_KEYS.includes(head)) {
|
|
115
|
+
refuse(head)
|
|
116
|
+
}
|
|
110
117
|
if (IDENTITY_KEYS.includes(path) || DERIVED_KEYS.includes(path) || REQUIRED_KEYS.includes(path)
|
|
111
118
|
|| FLOW_KEYS.includes(head) || (path === 'code' && codeFixed)) {
|
|
112
119
|
refuse(path)
|
|
@@ -123,7 +130,7 @@ const diffInto = (card: Workcard, changes: WorkcardChanges | undefined, skip: st
|
|
|
123
130
|
const current = card as unknown as Record<string, unknown>
|
|
124
131
|
|
|
125
132
|
for (const [key, value] of Object.entries(changes ?? {})) {
|
|
126
|
-
if (value === undefined || IDENTITY_KEYS.includes(key) || skip.includes(key)) {
|
|
133
|
+
if (value === undefined || IDENTITY_KEYS.includes(key) || PROVENANCE_KEYS.includes(key) || skip.includes(key)) {
|
|
127
134
|
continue
|
|
128
135
|
}
|
|
129
136
|
if (key === 'fields' || key === 'flows') {
|
|
@@ -160,6 +167,9 @@ const diffInto = (card: Workcard, changes: WorkcardChanges | undefined, skip: st
|
|
|
160
167
|
|
|
161
168
|
const unsetInto = (card: Workcard, unset: string[] | undefined, set: ChangeSet): void => {
|
|
162
169
|
for (const path of unset ?? []) {
|
|
170
|
+
if (PROVENANCE_KEYS.includes(path.split('.')[0])) {
|
|
171
|
+
continue
|
|
172
|
+
}
|
|
163
173
|
if (reach(card as unknown as Record<string, unknown>, path) !== undefined && !set.unset.includes(path)) {
|
|
164
174
|
set.unset.push(path)
|
|
165
175
|
}
|
|
@@ -206,7 +216,8 @@ const createOf = (
|
|
|
206
216
|
}
|
|
207
217
|
const draft: WorkcardDraft = exec.card
|
|
208
218
|
const overlay = Object.fromEntries(Object.entries(exec.changes ?? {})
|
|
209
|
-
.filter(([key]) => !FLOW_KEYS.includes(key) && !IDENTITY_KEYS.includes(key) && !
|
|
219
|
+
.filter(([key]) => !FLOW_KEYS.includes(key) && !IDENTITY_KEYS.includes(key) && !PROVENANCE_KEYS.includes(key)
|
|
220
|
+
&& !DERIVED_KEYS.includes(key))
|
|
210
221
|
) as WorkcardChanges
|
|
211
222
|
|
|
212
223
|
const parent = overlay.parent ?? draft.parent
|
|
@@ -261,6 +272,9 @@ const createOf = (
|
|
|
261
272
|
* changes, diffed as in an update.
|
|
262
273
|
* - `link`, `unlink`, `delete`: nothing.
|
|
263
274
|
*
|
|
275
|
+
* `createdBy` comes from a create's draft only: `changes` and `unset` never carry it, on any action
|
|
276
|
+
* ({@link assertMutable} refuses an execution that tries).
|
|
277
|
+
*
|
|
264
278
|
* @throws {IllegalTransition} a transit the flow does not offer from the current status
|
|
265
279
|
* @throws {PlanningError} `malformed:*` for an execution missing what its action needs
|
|
266
280
|
*/
|
package/tests/apply.spec.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { IntrinsicStatus, TransitionAction, WorkcardKind } from '../src/consts.j
|
|
|
3
3
|
import { IllegalTransition, PlanningError } from '../src/errors.js'
|
|
4
4
|
import { applyRelationship, applyTransition } from '../src/helpers/apply.js'
|
|
5
5
|
import { assertMutable, computeChanges, isEmptyChange } from '../src/helpers/changes.js'
|
|
6
|
-
import type { Relationship, Specification, Workcard } from '../src/types.js'
|
|
6
|
+
import type { Relationship, Specification, Workcard, WorkcardChanges } from '../src/types.js'
|
|
7
7
|
import {
|
|
8
8
|
AT, ENTITY, LATER, PROJECT_TYPE, SPEC_TYPE, STORY_TYPE, TASK_TYPE, makeRegistry, transitionOf,
|
|
9
9
|
} from './fixtures.js'
|
|
@@ -173,4 +173,68 @@ describe('assertMutable', () => {
|
|
|
173
173
|
expect(() => assertMutable({ card: 'c1', action: TransitionAction.Update, changes: { code: 'free' } }, TASK_TYPE))
|
|
174
174
|
.not.toThrow()
|
|
175
175
|
})
|
|
176
|
+
|
|
177
|
+
test('provenance is never written after the create: createdBy and createdAt in changes or unset, on any action', () => {
|
|
178
|
+
const draft = { kind: WorkcardKind.Card, type: STORY_TYPE.type, parent: 'p1', title: 'Owned', createdBy: 'owner-1' }
|
|
179
|
+
const refused = [
|
|
180
|
+
{ card: 'c1', action: TransitionAction.Update, changes: { createdBy: 'intruder' } },
|
|
181
|
+
{ card: 'c1', action: TransitionAction.Update, changes: { createdBy: null } },
|
|
182
|
+
{ card: 'c1', action: TransitionAction.Update, unset: ['createdBy'] },
|
|
183
|
+
{ card: 'c1', action: TransitionAction.Transit, transition: 'start', changes: { createdBy: 'intruder' } },
|
|
184
|
+
{ card: 'c1', action: TransitionAction.Link, link: { type: 'follows', to: 'c2' }, unset: ['createdBy'] },
|
|
185
|
+
{ card: draft, action: TransitionAction.Create, changes: { createdBy: 'intruder' } },
|
|
186
|
+
] as Parameters<typeof assertMutable>[0][]
|
|
187
|
+
|
|
188
|
+
for (const exec of refused) {
|
|
189
|
+
expect(() => assertMutable(exec, STORY_TYPE)).toThrow('planning:immutable:createdBy')
|
|
190
|
+
}
|
|
191
|
+
expect(() => assertMutable({ card: 'c1', action: TransitionAction.Update, changes: { createdAt: LATER } as WorkcardChanges }, STORY_TYPE))
|
|
192
|
+
.toThrow('planning:immutable:createdAt')
|
|
193
|
+
expect(() => assertMutable({ card: 'c1', action: TransitionAction.Update, unset: ['createdAt'] }, STORY_TYPE))
|
|
194
|
+
.toThrow('planning:immutable:createdAt')
|
|
195
|
+
expect(() => assertMutable({ card: draft, action: TransitionAction.Create }, STORY_TYPE)).not.toThrow()
|
|
196
|
+
expect(() => assertMutable({ card: 'c1', action: TransitionAction.Update, changes: { createdBy: undefined, title: 'T' } }, STORY_TYPE))
|
|
197
|
+
.not.toThrow()
|
|
198
|
+
})
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
describe('createdBy — written by the create alone', () => {
|
|
202
|
+
const owned = (): Workcard => ({ ...created(), createdBy: 'owner-1' })
|
|
203
|
+
|
|
204
|
+
test('computeChanges takes it from the draft and never from changes or unset', () => {
|
|
205
|
+
const create = computeChanges(undefined, {
|
|
206
|
+
action: TransitionAction.Create,
|
|
207
|
+
card: { kind: WorkcardKind.Card, type: STORY_TYPE.type, parent: 'p1', title: 'Owned', createdBy: 'owner-1' },
|
|
208
|
+
changes: { createdBy: 'intruder' },
|
|
209
|
+
}, STORY_TYPE, registry, AT)
|
|
210
|
+
expect(create.changes.createdBy).toBe('owner-1')
|
|
211
|
+
|
|
212
|
+
const update = computeChanges(owned(), {
|
|
213
|
+
card: 'c1', action: TransitionAction.Update, changes: { createdBy: 'intruder', title: 'Renamed' }, unset: ['createdBy'],
|
|
214
|
+
}, STORY_TYPE, registry, LATER)
|
|
215
|
+
expect(update).toEqual({ changes: { title: 'Renamed' }, unset: [] })
|
|
216
|
+
|
|
217
|
+
const cleared = computeChanges(owned(), { card: 'c1', action: TransitionAction.Update, changes: { createdBy: null } as unknown as WorkcardChanges },
|
|
218
|
+
STORY_TYPE, registry, LATER)
|
|
219
|
+
expect(isEmptyChange(cleared)).toBe(true)
|
|
220
|
+
|
|
221
|
+
const transit = computeChanges(owned(), {
|
|
222
|
+
card: 'c1', action: TransitionAction.Transit, transition: 'start', changes: { createdBy: 'intruder' }, unset: ['createdBy'],
|
|
223
|
+
}, STORY_TYPE, registry, LATER)
|
|
224
|
+
expect(transit.changes.createdBy).toBeUndefined()
|
|
225
|
+
expect(transit.unset).not.toContain('createdBy')
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
test('the fold replays a legacy transition that named it, as written — the refusal is at admission', () => {
|
|
229
|
+
const card = owned()
|
|
230
|
+
const renamed = applyTransition(card, transitionOf({
|
|
231
|
+
card: 'c1', seq: 2, action: TransitionAction.Update, at: LATER, changes: { title: 'Legacy', createdBy: 'intruder' },
|
|
232
|
+
}))!
|
|
233
|
+
const cleared = applyTransition(renamed, transitionOf({ card: 'c1', seq: 3, action: TransitionAction.Update, unset: ['createdBy'] }))!
|
|
234
|
+
|
|
235
|
+
expect([renamed.seq, renamed.title, renamed.createdBy, renamed.createdAt]).toEqual([2, 'Legacy', 'intruder', AT])
|
|
236
|
+
expect([cleared.seq, cleared.title, cleared.createdBy]).toEqual([3, 'Legacy', undefined])
|
|
237
|
+
expect(applyTransition(cleared, transitionOf({ card: 'c1', seq: 4, action: TransitionAction.Update, changes: { title: 'After' } }))!
|
|
238
|
+
.title).toBe('After')
|
|
239
|
+
})
|
|
176
240
|
})
|