@owlmeans/server-planning 0.1.18-rc.19 → 0.1.18-rc.20

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
@@ -10,7 +10,7 @@ the `@owlmeans/server-planning/store` subpath.
10
10
  ## Installation
11
11
 
12
12
  ```sh
13
- bun add @owlmeans/server-planning@^0.1.18-rc.19 @owlmeans/planning@^0.1.18-rc.16 ajv
13
+ bun add @owlmeans/server-planning@^0.1.18-rc.20 @owlmeans/planning@^0.1.18-rc.17 ajv
14
14
  ```
15
15
 
16
16
  ## Concepts
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/server-planning",
4
- "version": "0.1.18-rc.19",
5
- "generatedAt": "2026-10-03T15:33:53.018Z",
4
+ "version": "0.1.18-rc.20",
5
+ "generatedAt": "2026-10-04T01:01:54.399Z",
6
6
  "canonicalRepo": "https://github.com/owlmeans/common",
7
7
  "entries": [
8
8
  {
@@ -8,7 +8,7 @@ user-invocable: false
8
8
  # @owlmeans/server-planning
9
9
 
10
10
  **Layer:** Server
11
- **Install:** `"@owlmeans/server-planning": "^0.1.18-rc.19"` in `dependencies` (`ajv` is a peer)
11
+ **Install:** `"@owlmeans/server-planning": "^0.1.18-rc.20"` in `dependencies` (`ajv` is a peer)
12
12
 
13
13
  The general implementation of `@owlmeans/planning`: the planning service (a plugin host), the
14
14
  scoped facade, the executor every write goes through, the in-memory reference store, the commit
@@ -321,7 +321,7 @@ decision per request; a throw is the request's answer (an `AuthForbidden` answer
321
321
  admits, over `writes`: the project itself, a card whose `parents` name one, a specification
322
322
  through its parent card; a create needs every named parent writable, and a create at the root
323
323
  (no parent, not a project) is refused. `schema.define` of a project layer needs the project in
324
- `writes`. A refusal is `PlanningForbidden` (403) with `writes:<id>`, checked before the grants
324
+ `writes`. A refusal is `PlanningForbidden` (403, `forbidden:writes:<id>`), checked before the grants
325
325
  and before the executor. NOT governed by it: a project create (`grants.createProjects` alone) and
326
326
  the organization layer (`grants.defineSchemas`). A card the scope cannot see is still answered
327
327
  as absent by the executor. Omitted — every visible project is writable.
@@ -334,26 +334,17 @@ decision per request; a throw is the request's answer (an `AuthForbidden` answer
334
334
 
335
335
  ## Mounting in a target
336
336
 
337
- A generated target serves the STOCK tree; it never writes card, transition or schema routes of its
338
- own, and its domain rules are `before` plugins.
339
-
340
- - **common** declares the one tree the api and the web share:
341
- `makePlanningProtocols({ base: { alias: 'api:planning' }, guards: DEFAULT_GUARD, definitions: true })`.
342
- - **api** binds `servePlanningEntrypoints(tree, { access })` WITHOUT the commit socket —
343
- `.filter(entrypoint => entrypoint.protocol !== tree.commit.events)`: a target has no socket that
344
- authenticates after open, so the client long-polls (`commit.get` with `wait`, `execute` with
345
- `wait: true`).
346
- - **The resolver** answers `{ entityId, projects, writes, grants }`: `projects` = the containers the
347
- person may view, `writes` = those they may modify, `grants` = `createProjects` / `deleteProjects`
348
- / `defineSchemas` from their create and admin rights. A creator sees what they created — stamp
349
- ownership in a `before` hook and add it to both lists.
350
- - **Kit types and flows** are LITERAL objects in the target's `sources/common/src/planning.ts`
351
- `PLANNING` plugin, between its sentinels (`// owlmeans: add planning flows above this line`,
352
- `… types above this line`) — a spread or an imported constant hides them from the library's
353
- registration checks. Card types and flows carry `overridable: true`, `fields` schemas stay open
354
- (`additionalProperties: true`), and the container project type carries `scopedCardTypes: true`,
355
- so the people of the app can override and extend them as data through `schema.define`.
356
- - The web side is `client-planning` → Mounting in a target; the store, `planning-postgres`.
337
+ The api half of the target mount (the common tree and the kit literals: `planning` → Mounting in a
338
+ target).
339
+
340
+ - Bind `servePlanningEntrypoints(tree, { access })` WITHOUT the commit socket —
341
+ `.filter(entrypoint => entrypoint.protocol !== tree.commit.events)`: nothing authenticates a
342
+ target's socket after it opens, so the client long-polls (`commit.get` with `wait`, `execute`
343
+ with `wait: true`). Never write card, transition or schema routes beside it.
344
+ - The resolver maps container permissions onto the access: `projects` = the containers the person
345
+ may view, `writes` = those they may modify, `grants` = `createProjects` / `deleteProjects` /
346
+ `defineSchemas` from their create and admin rights. A creator sees what they created — stamp
347
+ ownership in a `before` hook and add the card to both lists.
357
348
 
358
349
  ## Data-defined types and flows
359
350
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/server-planning",
3
- "version": "0.1.18-rc.19",
3
+ "version": "0.1.18-rc.20",
4
4
  "license": "MIT",
5
5
  "description": "The general planning implementation — the planning service and its plugin/middleware registry, the transition executor, the in-memory store, the protocol handlers and the commit feed.",
6
6
  "type": "module",
@@ -50,7 +50,7 @@
50
50
  "@owlmeans/context": "^0.1.18-rc.32",
51
51
  "@owlmeans/entrypoint": "^0.1.18-rc.39",
52
52
  "@owlmeans/error": "^0.1.18-rc.36",
53
- "@owlmeans/planning": "^0.1.18-rc.16",
53
+ "@owlmeans/planning": "^0.1.18-rc.17",
54
54
  "@owlmeans/queue": "^0.1.18-rc.38",
55
55
  "@owlmeans/resource": "^0.1.18-rc.37",
56
56
  "@owlmeans/route": "^0.1.18-rc.33",