@owlmeans/client-planning 0.1.18-rc.17 → 0.1.18-rc.18

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 @@ planning service runs in-process.
9
9
  ## Installation
10
10
 
11
11
  ```bash
12
- bun add @owlmeans/client-planning@^0.1.18-rc.17
12
+ bun add @owlmeans/client-planning@^0.1.18-rc.18
13
13
  ```
14
14
 
15
15
  ## Concepts
@@ -119,7 +119,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
119
119
  your project's skill store (`.agents/skills/`):
120
120
 
121
121
  ```sh
122
- npx @owlmeans/agent-skills@^0.1.18-rc.45
122
+ npx @owlmeans/agent-skills@^0.1.18-rc.46
123
123
  ```
124
124
 
125
125
  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/client-planning",
4
- "version": "0.1.18-rc.17",
5
- "generatedAt": "2026-10-02T19:07:09.545Z",
4
+ "version": "0.1.18-rc.18",
5
+ "generatedAt": "2026-10-03T11:19:50.787Z",
6
6
  "canonicalRepo": "https://github.com/owlmeans/common",
7
7
  "entries": [
8
8
  {
@@ -8,7 +8,7 @@ user-invocable: false
8
8
  # @owlmeans/client-planning
9
9
 
10
10
  **Layer:** Client
11
- **Install:** `"@owlmeans/client-planning": "^0.1.18-rc.17"` in `dependencies`
11
+ **Install:** `"@owlmeans/client-planning": "^0.1.18-rc.18"` in `dependencies`
12
12
 
13
13
  The client half of OwlMeans planning. It answers the `PlanningFacade` interface of
14
14
  `@owlmeans/planning` over the protocol tree a server mounted with `@owlmeans/server-planning`, keeps
@@ -60,8 +60,8 @@ appendPlanningStores(context) // a browser mirror; a Node client usually
60
60
  - `bind: false` when the host already bound the tree.
61
61
  - The service answers under `PLANNING_SERVICE`, the alias the server's service uses, so
62
62
  `context.planning().for(scope)` is the same call in a handler and in a screen. The scope is
63
- **advisory**: the server takes the entity and the actor from the credential. The execution's own
64
- `actor` is never sent.
63
+ **advisory** — it changes nothing the server decides: the server takes the entity and the actor
64
+ from the credential. The execution's own `actor` is never sent.
65
65
  - A client runs no middleware and folds nothing: `store()`, `committed()` and a plugin carrying
66
66
  `before`/`after`/`store`/`mintCode` answer `PlanningUnsupported`. `use()` accepts a schemas-only
67
67
  plugin, layered over the server's bundle.
@@ -92,11 +92,11 @@ whole cache — an organization-wide write reaches every project's layer — and
92
92
  ```typescript
93
93
  const planning = context.planning().for()
94
94
 
95
- const stories = await planning.cards.list({ parent: projectId, type: STORY, sort: ['order'], size: 0 })
96
- const board = await planning.cards.summary([projectId])
97
- const brief = await planning.specifications.current(projectId, 'specification')
98
- const story = await planning.model(storyId)
99
- story.available().map(rule => rule.name)
95
+ const tools = await planning.cards.list({ parent: shedId, type: 'shed:tool', sort: ['order'], size: 0 })
96
+ const board = await planning.cards.summary([shedId])
97
+ const rules = await planning.specifications.current(shedId, 'house-rules')
98
+ const drill = await planning.model(drillId)
99
+ drill.available().map(rule => rule.name)
100
100
  ```
101
101
 
102
102
  - The facade takes the rich `WorkcardQuery`; it encodes the scalar wire shape itself
@@ -136,8 +136,8 @@ The fold rules, shared by `syncCards`, `applyCards`, `applyCommitEvent` and `com
136
136
 
137
137
  ```typescript
138
138
  const feed = makePlanningFeed(context, {
139
- query: { parent: projectId, type: STORY },
140
- filter: { project: projectId },
139
+ query: { parent: shedId, type: 'shed:tool' },
140
+ filter: { project: shedId },
141
141
  refresh: 15_000,
142
142
  onChange: state => setState(state),
143
143
  })
@@ -197,18 +197,14 @@ A Node client passes no opener and relies on the long poll.
197
197
  (run by `execute` whenever stores are registered) raises the stored card's `head` to the new
198
198
  transition's `seq`, so `model.pending()` is true before any frame arrives; the commit's fold brings
199
199
  `seq` up to it. The mirror only ever grows `head`, so a list fetched before the append does not
200
- clear the marker. A model's writes default `expectSeq` to `record.head ?? record.seq`; a stale model
201
- gets `WorkcardConflict` — reload and retry.
200
+ clear the marker. A model's `expectSeq` default and its `WorkcardConflict` are `planning` → Models.
202
201
 
203
202
  ## Gotchas
204
203
 
205
204
  - Mount a feed once per screen; read the store everywhere else.
206
- - Do not `replace()` the card store — it holds every kind. Use `syncCards` with a `where`.
207
205
  - A refusal crosses the hop as its class (`IllegalTransition`, `WorkcardConflict`,
208
206
  `FieldsInvalid`, a plugin's own class) — branch on `instanceof`, never on message text.
209
207
  - `CommitTimeout` is not a failure of the transition; re-wait or re-read the card.
210
- - The scope passed to `for()` changes nothing the server decides; it exists so code written against
211
- `PlanningFacade` reads the same on both sides.
212
208
 
213
209
  ## Depends On
214
210
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/client-planning",
3
- "version": "0.1.18-rc.17",
3
+ "version": "0.1.18-rc.18",
4
4
  "license": "MIT",
5
5
  "description": "The client half of OwlMeans planning — the remote planning facade, the state mirror and its commit fold, and the subscribe-then-poll commit wait. React-free: it runs in a browser and in a Node client alike.",
6
6
  "type": "module",
@@ -23,16 +23,16 @@
23
23
  }
24
24
  },
25
25
  "dependencies": {
26
- "@owlmeans/auth": "^0.1.18-rc.37",
27
- "@owlmeans/client-context": "^0.1.18-rc.44",
28
- "@owlmeans/client-entrypoint": "^0.1.18-rc.43",
26
+ "@owlmeans/auth": "^0.1.18-rc.38",
27
+ "@owlmeans/client-context": "^0.1.18-rc.45",
28
+ "@owlmeans/client-entrypoint": "^0.1.18-rc.44",
29
29
  "@owlmeans/context": "^0.1.18-rc.32",
30
- "@owlmeans/entrypoint": "^0.1.18-rc.38",
30
+ "@owlmeans/entrypoint": "^0.1.18-rc.39",
31
31
  "@owlmeans/error": "^0.1.18-rc.36",
32
- "@owlmeans/planning": "^0.1.18-rc.14",
32
+ "@owlmeans/planning": "^0.1.18-rc.15",
33
33
  "@owlmeans/resource": "^0.1.18-rc.37",
34
34
  "@owlmeans/route": "^0.1.18-rc.33",
35
- "@owlmeans/socket": "^0.1.18-rc.36",
35
+ "@owlmeans/socket": "^0.1.18-rc.37",
36
36
  "@owlmeans/state": "^0.1.18-rc.36"
37
37
  },
38
38
  "peerDependencies": {
@@ -41,7 +41,7 @@
41
41
  },
42
42
  "devDependencies": {
43
43
  "@owlmeans/dep-config": "workspace:*",
44
- "@owlmeans/server-planning": "^0.1.18-rc.17",
44
+ "@owlmeans/server-planning": "^0.1.18-rc.18",
45
45
  "@owlmeans/test": "^0.1.18-rc.33",
46
46
  "@types/bun": "^1.4.0",
47
47
  "ajv": "^8.17.1",