@crvouga/mockingbird-service-plane 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog — @crvouga/mockingbird-service-plane
2
2
 
3
+ ## 2.2.0 (2026-10-05)
4
+
5
+ ### Features
6
+
7
+ - add scripted local API mock ([4a76a11](https://github.com/crvouga/mockingbird/commit/4a76a114e2efad45934e0a93cf29576fd418e15c))
8
+ - preserve work-item type assignments ([d25f554](https://github.com/crvouga/mockingbird/commit/d25f5549df8485cf0a577cdb7145354fc6eacac0))
9
+ - model cycles and work-item membership ([4186f59](https://github.com/crvouga/mockingbird/commit/4186f59ccf0cf12332a77cf95aa5c77cfe26f556))
10
+
11
+ ### Fixes and improvements
12
+
13
+ - support embedded route parameters ([127cad9](https://github.com/crvouga/mockingbird/commit/127cad997ef106950c1b866070eea191ba54403f))
14
+
15
+ ## 2.1.0 (2026-10-04)
16
+
17
+ ### Features
18
+
19
+ - use shared forms for service actions ([af19eb9](https://github.com/crvouga/mockingbird/commit/af19eb9d4896d8418f5db850f20808a89291b949))
20
+ - replace UI with Ant Design ([6547b4e](https://github.com/crvouga/mockingbird/commit/6547b4ef1663fb597ab515cce06245c82010407a))
21
+
22
+ ### Fixes and improvements
23
+
24
+ - fill the embedded viewport ([c1a35a4](https://github.com/crvouga/mockingbird/commit/c1a35a4789389ee9cd06c286d09bd47c4d06c71e))
25
+ - make dialog cleanup immediate ([0c1a3c5](https://github.com/crvouga/mockingbird/commit/0c1a3c5b12584d50c19dcae595b951b8e5417b9c))
26
+
3
27
  ## 2.0.0 (2026-10-04)
4
28
 
5
29
  ### ⚠️ Breaking changes
@@ -18,10 +42,6 @@
18
42
  - parse ISO journal timestamps ([20b39a2](https://github.com/crvouga/mockingbird/commit/20b39a2c738e278533d610dfc91f1cb3ae9b3f1e))
19
43
  - harden shared controls ([7822614](https://github.com/crvouga/mockingbird/commit/7822614f6cba0387aeb60ba7320b0379aa1ef690))
20
44
 
21
- ### Dependencies
22
-
23
- - `@crvouga/mockingbird-service-sqlite`
24
-
25
45
  ## 1.8.0 (2026-10-01)
26
46
 
27
47
  ### Features
package/README.md CHANGED
@@ -72,6 +72,21 @@ workspace's slug (`acme` in the examples).
72
72
  | `GET` / `POST work-items/{id}/links/` | `{url, title?}` → 201 link; the same URL twice is 409 `{error, id}`. |
73
73
  | `GET states/` | The project's workflow states (`id`, `name`, `group`, `color`, `sequence`, `default`). |
74
74
  | `GET` / `POST labels/` | `{name, color?, description?}` → 201 label; a duplicate name is 409 `{error, id: <existing>}`. |
75
+ | `GET` / `POST cycles/` | Create with `{name, description?, start_date?, end_date?, external_source?, external_id?}`. Both dates must be present or null. Lists use the cursor envelope (default 20 rows); `cycle_view=current` returns a bare array. Other views: `all`, `upcoming`, `completed`, `draft`, `incomplete`. |
76
+ | `GET` / `POST cycles/{id}/cycle-issues/` | POST `{issues: [<work item UUID>]}` adds or moves items and returns membership rows, without duplicates. GET returns paginated work items with their latest fields. Unknown/foreign item IDs are ignored; missing cycles are 404. Completed cycles reject additions with `CYCLE_COMPLETED`. |
77
+ | `GET work-item-types/` | A bare array of seeded type metadata, including stable UUIDs, names, `project_ids`, default/active flags and timestamps. This endpoint has no cursor pagination. |
78
+
79
+ Seed types through `POST /__admin/work-item-types`, then send `type_id` on work-item create or
80
+ patch. GET returns both `type_id` and `type`, as Plane's
81
+ [work-item serializer](https://github.com/makeplane/plane/blob/c7a5afee6afd15f16038ebda1ec1489ebd8af67d/apps/api/plane/api/serializers/issue.py)
82
+ does. Unknown IDs fail with a DRF `type_id` error before any field or sequence number changes.
83
+ Creation inherits a seeded default type; an explicit patch `type_id: null` clears it.
84
+
85
+ Cycle dates use UTC project days and the mock clock, following Plane's
86
+ [cycle endpoint](https://github.com/makeplane/plane/blob/c7a5afee6afd15f16038ebda1ec1489ebd8af67d/apps/api/plane/api/views/cycle.py)
87
+ and [date converter](https://github.com/makeplane/plane/blob/c7a5afee6afd15f16038ebda1ec1489ebd8af67d/apps/api/plane/utils/timezone_converter.py):
88
+ future/past starts are 00:00:01, today's start is the creation time, and ends are 23:59:00.
89
+ The current filter includes both endpoints. Cycle counts follow work-item state changes.
75
90
 
76
91
  Errors: no key 401 `{"detail": "Authentication credentials were not provided."}`, a key outside
77
92
  `apiKeys` 401 `{"detail": "Given API token is not valid"}`, unknown item/project 404
@@ -85,6 +100,7 @@ throttled. Expected available in N seconds."}` with `x-ratelimit-*` headers.
85
100
  | `POST /__admin/work-items/:id/state` | `{state: "<id or name>"}`: move an item (e.g. to `Done`) as a teammate would. |
86
101
  | `GET /__admin/work-items` | The namespace's work items. |
87
102
  | `POST /__admin/projects` | `{workspace, project}`: provision a project now; answers its states and labels. |
103
+ | `POST /__admin/work-item-types` | `{workspace, project, types: [{name, description?, is_default?}]}`: seed project type metadata with stable IDs; repeat calls update metadata and preserve creation time. Types start empty. Invalid batches do not partially write. |
88
104
  | `GET/PUT /__admin/settings` | `{apiKeys?, rateLimitPerMinute?: number \| null, projects?: ["<slug>/<uuid>"]}`. `rateLimitPerMinute: 60` reproduces Plane's limit on the mock clock; `projects` pins which projects exist (others 404). |
89
105
 
90
106
  Fault presets (`POST /__admin/faults {"preset": "<name>", "count"?: n}`): `rate_limited` (429),
@@ -101,9 +117,10 @@ never retried.
101
117
 
102
118
  ### Deliberately not modelled
103
119
 
104
- - Plane webhooks (our app polls), cycles, modules, pages, intake, attachments, members,
120
+ - Plane webhooks (our app polls), cycle editing/deletion and non-UTC project timezones, modules, pages, intake, attachments, members,
105
121
  estimates, worklogs, and `expand=`.
106
122
  - Deleting work items, comments, links or labels; archiving.
123
+ - Vendor work-item type administration, custom type schemas, epics and cross-project type sharing. Seed types with the admin control for this list/assignment surface.
107
124
  - Rich-text processing: `description_stripped` / `comment_stripped` are tag-stripped text.
108
125
 
109
126
  ## API
package/SUPPORT.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  Generated from `openapi.yaml`; do not edit by hand.
4
4
 
5
- - operations in spec: **11**
6
- - supported by the mock: **11**
7
- - parity enabled: **11**
5
+ - operations in spec: **16**
6
+ - supported by the mock: **16**
7
+ - parity enabled: **16**
8
8
 
9
9
  | operationId | route | mock | parity | notes |
10
10
  | --- | --- | --- | --- | --- |
@@ -19,3 +19,8 @@ Generated from `openapi.yaml`; do not edit by hand.
19
19
  | `ListStates` | `GET /api/v1/workspaces/{slug}/projects/{project_id}/states/` | ✅ supported | ✅ | |
20
20
  | `ListLabels` | `GET /api/v1/workspaces/{slug}/projects/{project_id}/labels/` | ✅ supported | ✅ | |
21
21
  | `CreateLabel` | `POST /api/v1/workspaces/{slug}/projects/{project_id}/labels/` | ✅ supported | ⚠️ unsafe (opt-in) | |
22
+ | `ListCycles` | `GET /api/v1/workspaces/{slug}/projects/{project_id}/cycles/` | ✅ supported | ✅ | |
23
+ | `CreateCycle` | `POST /api/v1/workspaces/{slug}/projects/{project_id}/cycles/` | ✅ supported | ⚠️ unsafe (opt-in) | |
24
+ | `ListCycleWorkItems` | `GET /api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/` | ✅ supported | ✅ | |
25
+ | `AddCycleWorkItems` | `POST /api/v1/workspaces/{slug}/projects/{project_id}/cycles/{cycle_id}/cycle-issues/` | ✅ supported | ⚠️ unsafe (opt-in) | |
26
+ | `ListWorkItemTypes` | `GET /api/v1/workspaces/{slug}/projects/{project_id}/work-item-types/` | ✅ supported | ✅ | |
@@ -3,7 +3,7 @@ import {
3
3
  createRuntime,
4
4
  parseDuration,
5
5
  resolveAdminPrefix
6
- } from "./chunk-C6XLQ2US.js";
6
+ } from "./chunk-ZF6D32HZ.js";
7
7
 
8
8
  // ../../adapters/node/dist/cli.js
9
9
  import { readFile as readFile2 } from "node:fs/promises";
@@ -843,4 +843,4 @@ export {
843
843
  createServer2 as createServer,
844
844
  serveTarget
845
845
  };
846
- //# sourceMappingURL=chunk-IKIADEZM.js.map
846
+ //# sourceMappingURL=chunk-EQQXMBQ4.js.map