@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 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.11 ajv ajv-formats
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/server-planning` — server execution and projection implementations
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.41
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
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/planning",
4
- "version": "0.1.18-rc.11",
5
- "generatedAt": "2026-09-28T02:06:37.879Z",
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"` in `dependencies` (`ajv` and `ajv-formats` are peers)
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, `revision` /
169
- `bodyChars`, `status`/`intrinsic`/`flows`/`closedAt` outside a create (they move only through
170
- `transit`), `category`, a fixed `code`, and clearing a required field.
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
 
@@ -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;;;;;;;;;;;;;;;GAeG;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"}
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"}
@@ -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;AAgBD,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;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,SAAU,mBAAmB,QAAQ,aAAa,KAAG,IA0B9E,CAAA;AAsID;;;;;;;;;;;;;;;;;GAiBG;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"}
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"}
@@ -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) && !DERIVED_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":"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"}
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.11",
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.36",
32
+ "@owlmeans/resource": "^0.1.18-rc.37",
33
33
  "@owlmeans/route": "^0.1.18-rc.33"
34
34
  },
35
35
  "peerDependencies": {
@@ -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,
@@ -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) && !DERIVED_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
  */
@@ -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
  })