@crvouga/mockingbird-service-plane 3.0.0 → 3.1.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,15 @@
1
1
  # Changelog — @crvouga/mockingbird-service-plane
2
2
 
3
+ ## 3.1.0 (2026-10-08)
4
+
5
+ ### Features
6
+
7
+ - redesign emulator experience ([d6038c2](https://github.com/crvouga/mockingbird/commit/d6038c27eebbaa1751f02bc9305002a5b1304779))
8
+
9
+ ### Dependencies
10
+
11
+ - `@crvouga/mockingbird-service-sqlite`
12
+
3
13
  ## 3.0.0 (2026-10-07)
4
14
 
5
15
  ### ⚠️ Breaking changes
@@ -14,10 +24,6 @@
14
24
  - typecheck the brand gate before builds ([fc36095](https://github.com/crvouga/mockingbird/commit/fc3609514de70ffe3170a5d216fb8a49f9ce7cbb))
15
25
  - format the emulates records query ([8698872](https://github.com/crvouga/mockingbird/commit/8698872509d06002be5a8fcdc85d79f8462320c3))
16
26
 
17
- ### Dependencies
18
-
19
- - `@crvouga/mockingbird-service-sqlite`
20
-
21
27
  ## 2.3.0 (2026-10-04)
22
28
 
23
29
  ### Features
package/DISCOVERY.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @crvouga/mockingbird-service-plane discovery
2
2
 
3
3
  This is the installed-package index for coding agents and tooling. All relative links resolve
4
- inside `node_modules/@crvouga/mockingbird-service-plane/`; no repository checkout is needed to discover the mock's
4
+ inside `node_modules/@crvouga/mockingbird-service-plane/`; no repository checkout is needed to discover the emulator's
5
5
  supported surface or documented behavior.
6
6
 
7
7
  ## Capability and behavior sources
@@ -48,7 +48,7 @@ designed for assertions and diagnosis by consuming test suites.
48
48
  ## Report a mismatch or missing capability
49
49
 
50
50
  Follow the [agent reporting contract](https://github.com/crvouga/mockingbird/blob/main/docs/REPORTING_ISSUES.md). Include package version,
51
- operation/command, a minimal redacted request, actual mock result, expected oracle result or vendor
51
+ operation/command, a minimal redacted request, actual emulator result, expected oracle result or vendor
52
52
  documentation, and whether the mismatch appears in the matrix. Never include keys, tokens,
53
53
  customer data, prompts, PHI, card data, or unredacted recordings.
54
54
 
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # @crvouga/mockingbird-service-plane
2
2
 
3
- > Familiar calls. Faithful echoes. Part of [Mockingbird](https://github.com/crvouga/mockingbird).
3
+ > Local emulators. Real API contracts. Part of [Mockingbird](https://github.com/crvouga/mockingbird).
4
4
 
5
- Stateful mock of the **Plane** REST API (v1) for test suites, covering what our bug-report
5
+ Stateful emulator of the **Plane** REST API (v1) for test suites, covering what our bug-report
6
6
  dedup and resolution jobs call on one project: work items (Plane's cursor-paginated list, get,
7
7
  create, patch), comments, links, states and labels, with Plane's rate limit and error shapes.
8
8
  Projects are provisioned on first use with Plane's default workflow (Backlog, Todo, In
@@ -25,7 +25,7 @@ any Fetch server.
25
25
  ## Usage
26
26
 
27
27
  The backend hardcodes `https://api.plane.so` (`plane-http-client.ts`, seam **G-Y1**: make it
28
- env-driven). Point it at the mock; `PLANE_ACCESS_TOKEN`, `PLANE_WORKSPACE_SLUG` and
28
+ env-driven). Point it at the emulator; `PLANE_ACCESS_TOKEN`, `PLANE_WORKSPACE_SLUG` and
29
29
  `PLANE_BUGS_PROJECT_ID` can be any values (the project id must be a UUID, as our config
30
30
  validates).
31
31
 
@@ -82,7 +82,7 @@ patch. GET returns both `type_id` and `type`, as Plane's
82
82
  does. Unknown IDs fail with a DRF `type_id` error before any field or sequence number changes.
83
83
  Creation inherits a seeded default type; an explicit patch `type_id: null` clears it.
84
84
 
85
- Cycle dates use UTC project days and the mock clock, following Plane's
85
+ Cycle dates use UTC project days and the emulator clock, following Plane's
86
86
  [cycle endpoint](https://github.com/makeplane/plane/blob/c7a5afee6afd15f16038ebda1ec1489ebd8af67d/apps/api/plane/api/views/cycle.py)
87
87
  and [date converter](https://github.com/makeplane/plane/blob/c7a5afee6afd15f16038ebda1ec1489ebd8af67d/apps/api/plane/utils/timezone_converter.py):
88
88
  future/past starts are 00:00:01, today's start is the creation time, and ends are 23:59:00.
@@ -101,7 +101,7 @@ throttled. Expected available in N seconds."}` with `x-ratelimit-*` headers.
101
101
  | `GET /__admin/work-items` | The namespace's work items. |
102
102
  | `POST /__admin/projects` | `{workspace, project}`: provision a project now; answers its states and labels. |
103
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. |
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). |
104
+ | `GET/PUT /__admin/settings` | `{apiKeys?, rateLimitPerMinute?: number \| null, projects?: ["<slug>/<uuid>"]}`. `rateLimitPerMinute: 60` reproduces Plane's limit on the emulator clock; `projects` pins which projects exist (others 404). |
105
105
 
106
106
  Fault presets (`POST /__admin/faults {"preset": "<name>", "count"?: n}`): `rate_limited` (429),
107
107
  `server_error` (500), `bad_gateway` (502 HTML), `unauthorized` (401), `invalid_json` (200
@@ -127,13 +127,13 @@ never retried.
127
127
 
128
128
  | Export | Kind | Description |
129
129
  | --- | --- | --- |
130
- | `PlaneAPI` | class | The in-process mock: `fetch(request)`, `reset()`, `ensureProject(slug, id)`, `statesOf(id)`, `labelsOf(id)`, `moveToState(itemId, stateIdOrName)`, `applyPatch(item, patch)`, `workItems()`. Options: `sqlite`, `now`, `namespace`, `settings`. |
131
- | `createRuntime` | function | The mock with the full service contract (health, admin, namespaces, credentials, presets). Options: `settings`, `clock`, `seed`, `adminKey`, `onLog`, `sqlite`. |
130
+ | `PlaneAPI` | class | The in-process emulator: `fetch(request)`, `reset()`, `ensureProject(slug, id)`, `statesOf(id)`, `labelsOf(id)`, `moveToState(itemId, stateIdOrName)`, `applyPatch(item, patch)`, `workItems()`. Options: `sqlite`, `now`, `namespace`, `settings`. |
131
+ | `createRuntime` | function | The emulator with the full service contract (health, admin, namespaces, credentials, presets). Options: `settings`, `clock`, `seed`, `adminKey`, `onLog`, `sqlite`. |
132
132
  | `PLANE_PRESETS` | object | Every named fault preset. |
133
133
  | `PLANE_NAMESPACE` | string | The service name, `"plane"`. |
134
134
  | `DEFAULT_STATES` | array | The workflow a new project starts with. |
135
135
  | `apiKeyCredential` | function | The `X-API-Key` a request carries (how credentials map to namespaces). |
136
- | `uuidFrom` | function | The deterministic v4-shaped UUID the mock derives from a string. |
136
+ | `uuidFrom` | function | The deterministic v4-shaped UUID the emulator derives from a string. |
137
137
  | `document`, `operationIds`, `supportedOperationIds` | values | The OpenAPI contract and its operation ids. |
138
138
  | `createServer`, `serveTarget`, `DEFAULT_PORT` (`./server`) | Node | Serve over `node:http`; the `serve` CLI target (`--api-key`, `--rate-limit`); port 8821. |
139
139
 
package/SUPPORT.md CHANGED
@@ -3,10 +3,10 @@
3
3
  Generated from `openapi.yaml`; do not edit by hand.
4
4
 
5
5
  - operations in spec: **16**
6
- - supported by the mock: **16**
6
+ - supported by the emulator: **16**
7
7
  - parity enabled: **16**
8
8
 
9
- | operationId | route | mock | parity | notes |
9
+ | operationId | route | emulator | parity | notes |
10
10
  | --- | --- | --- | --- | --- |
11
11
  | `ListWorkItems` | `GET /api/v1/workspaces/{slug}/projects/{project_id}/work-items/` | ✅ supported | ✅ | |
12
12
  | `CreateWorkItem` | `POST /api/v1/workspaces/{slug}/projects/{project_id}/work-items/` | ✅ supported | ⚠️ unsafe (opt-in) | |