@terreno/mcp 57.6.1 → 57.7.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/dist/docs/upgrades/57.7.0.md +64 -0
- package/dist/docs/upgrades/58.0.0.md +4 -0
- package/dist/docs/versioned/next/explanation/loop-engineering.md +32 -3
- package/dist/docs/versioned/next/explanation/repository-settings.md +12 -5
- package/dist/docs/versioned/next/explanation/roadmap-process.md +41 -19
- package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +271 -22
- package/dist/docs/versioned/next/explanation/static-analysis.md +3 -2
- package/dist/docs/versioned/next/explanation/test-isolation.md +42 -0
- package/dist/docs/versioned/next/how-to/circleci.md +95 -53
- package/dist/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/dist/docs/versioned/next/how-to/run-tests-locally.md +23 -2
- package/dist/docs/versioned/next/implementationPlans/IP_TEMPLATE.md +3 -1
- package/dist/docs/versioned/next/implementationPlans/admin-improvements.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/agent-ui-blocks.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/ai-agents-and-failover.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/ai-observability.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/announcements-surfaces.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/announcements.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/app-mcp-server.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/better-auth-strict-oauth-provider.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/can-as-permission-seam.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/collection-registry.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/compile-pipeline-dedup.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/describe-model-schema.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/framework-audit-log.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/inbound-webhooks.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/knip-cleanup.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/mcp-doc-sync-off-compile-path.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/mcp-service-tokens.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/notification-center.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/org-management-ui.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/rate-limiting.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/support-agent.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/syncdb-codegen.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -1
- package/dist/docs/versioned/next/reference/lifecycle-plugin.md +2 -2
- package/dist/docs/versioned/next/reference/test.md +1 -1
- package/dist/docs/versioned/next/reference/ui.md +65 -2
- package/dist/docs/versioned/next/tasks/can-as-permission-seam.md +4 -4
- package/dist/docs/versioned/next/tasks/collection-registry.md +6 -6
- package/dist/docs/versioned/next/tasks/describe-model-schema.md +5 -5
- package/dist/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +6 -3
- package/package.json +2 -2
- package/src/docs/upgrades/57.7.0.md +64 -0
- package/src/docs/upgrades/58.0.0.md +4 -0
- package/src/docs/versioned/next/explanation/loop-engineering.md +32 -3
- package/src/docs/versioned/next/explanation/repository-settings.md +12 -5
- package/src/docs/versioned/next/explanation/roadmap-process.md +41 -19
- package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +271 -22
- package/src/docs/versioned/next/explanation/static-analysis.md +3 -2
- package/src/docs/versioned/next/explanation/test-isolation.md +42 -0
- package/src/docs/versioned/next/how-to/circleci.md +95 -53
- package/src/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/src/docs/versioned/next/how-to/run-tests-locally.md +23 -2
- package/src/docs/versioned/next/implementationPlans/IP_TEMPLATE.md +3 -1
- package/src/docs/versioned/next/implementationPlans/admin-improvements.md +1 -1
- package/src/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +2 -1
- package/src/docs/versioned/next/implementationPlans/agent-ui-blocks.md +1 -0
- package/src/docs/versioned/next/implementationPlans/ai-agents-and-failover.md +1 -0
- package/src/docs/versioned/next/implementationPlans/ai-observability.md +1 -0
- package/src/docs/versioned/next/implementationPlans/announcements-surfaces.md +1 -1
- package/src/docs/versioned/next/implementationPlans/announcements.md +2 -1
- package/src/docs/versioned/next/implementationPlans/app-mcp-server.md +1 -0
- package/src/docs/versioned/next/implementationPlans/better-auth-strict-oauth-provider.md +2 -1
- package/src/docs/versioned/next/implementationPlans/can-as-permission-seam.md +1 -1
- package/src/docs/versioned/next/implementationPlans/collection-registry.md +1 -1
- package/src/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +1 -1
- package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +1 -1
- package/src/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
- package/src/docs/versioned/next/implementationPlans/compile-pipeline-dedup.md +2 -1
- package/src/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +1 -1
- package/src/docs/versioned/next/implementationPlans/describe-model-schema.md +1 -1
- package/src/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -1
- package/src/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -1
- package/src/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -1
- package/src/docs/versioned/next/implementationPlans/framework-audit-log.md +1 -1
- package/src/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +1 -0
- package/src/docs/versioned/next/implementationPlans/inbound-webhooks.md +1 -1
- package/src/docs/versioned/next/implementationPlans/knip-cleanup.md +1 -0
- package/src/docs/versioned/next/implementationPlans/mcp-doc-sync-off-compile-path.md +2 -1
- package/src/docs/versioned/next/implementationPlans/mcp-service-tokens.md +2 -1
- package/src/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +2 -1
- package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +1 -1
- package/src/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +1 -1
- package/src/docs/versioned/next/implementationPlans/notification-center.md +1 -1
- package/src/docs/versioned/next/implementationPlans/org-management-ui.md +1 -1
- package/src/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +1 -1
- package/src/docs/versioned/next/implementationPlans/rate-limiting.md +1 -1
- package/src/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -0
- package/src/docs/versioned/next/implementationPlans/support-agent.md +1 -0
- package/src/docs/versioned/next/implementationPlans/syncdb-codegen.md +1 -1
- package/src/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -1
- package/src/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -1
- package/src/docs/versioned/next/reference/lifecycle-plugin.md +2 -2
- package/src/docs/versioned/next/reference/test.md +1 -1
- package/src/docs/versioned/next/reference/ui.md +65 -2
- package/src/docs/versioned/next/tasks/can-as-permission-seam.md +4 -4
- package/src/docs/versioned/next/tasks/collection-registry.md +6 -6
- package/src/docs/versioned/next/tasks/describe-model-schema.md +5 -5
- package/src/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +6 -3
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Implementation Plan: Support answering agent (`@terreno/support`)
|
|
2
2
|
|
|
3
3
|
**Status:** Draft — awaiting approval (Grow ran unattended; every Decisions row marked `assumed` is a recommended default the reviewer can change before Approve)
|
|
4
|
+
**Roadmap:** Area=`ai`, Target=`Future`, Impact=`Feature`
|
|
4
5
|
**Branch:** `cursor/support-agent-grow-fd63`
|
|
5
6
|
**Owner:** unassigned
|
|
6
7
|
**Created:** 2026-09-15
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Implementation Plan: @terreno/syncdb-codegen
|
|
2
2
|
|
|
3
3
|
**Status:** Complete — shipped as `syncdb/src/codegen` + `terreno-syncdb-codegen`
|
|
4
|
-
**Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/
|
|
4
|
+
**Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1110
|
|
5
5
|
**Branch:** cursor/syncdb-codegen-in-package-746d
|
|
6
6
|
**Owner:**
|
|
7
7
|
**Created:** 2026-07-08
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @terreno/langfuse
|
|
2
2
|
|
|
3
3
|
**Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1093
|
|
4
|
-
**Status:**
|
|
4
|
+
**Status:** Complete
|
|
5
5
|
|
|
6
6
|
> **See also:** Native in-app observability (prompts, traces, evals, experiments, review queue) is specified in [ai-observability.md](./ai-observability.md). This IP remains the **Langfuse Cloud/self-host vendor plugin**. Both plugins may be registered; traces/scores fan out (see that IP).
|
|
7
7
|
|
|
@@ -14,7 +14,7 @@ loops that invoke those stages; they are not stages and must not appear as `stag
|
|
|
14
14
|
| `terreno-2-pick` | approved task + branch/state | one implemented slice, then Roast, then the next task | Roast, or Brew when the list is done |
|
|
15
15
|
| `terreno-3-roast` | Pick result + current diff | independent requirement/evidence verdict for the current task | emit Pick if tasks remain, else Brew; never invoke Pick; pass a task-scoped briefing; do not spawn two unconstrained reviewers |
|
|
16
16
|
| `terreno-4-brew` | Roast PASS for every in-scope task + branch/evidence | pushed head + PR + product-CI trigger check + review-bot wait + attached evidence | Taste |
|
|
17
|
-
| `terreno-5-taste` | PR + current state | one current-head reaction; before push:
|
|
17
|
+
| `terreno-5-taste` | PR + current state | one current-head reaction; before push: fetch latest `master` (merge only when needed), re-verify last-run failed tests locally, run root `prepush` when present (otherwise affected-package checks) in a no-context subagent, then watch CI; invoked directly, repeats bounded reactions until terminal | null or fresh Taste |
|
|
18
18
|
|
|
19
19
|
Outer loops (not stages):
|
|
20
20
|
|
|
@@ -51,7 +51,7 @@ until async review bots (Bugbot, CodeQL, and similar) on the current head have r
|
|
|
51
51
|
preferring provider CLI watch hooks or harness event subscriptions over sleep polling.
|
|
52
52
|
Taste then waits in a loop for product CI using GitHub CLI (`gh pr checks --watch`,
|
|
53
53
|
`gh run watch`) or CircleCI CLI (`circleci run watch`) until jobs are terminal or the
|
|
54
|
-
wait times out. Before any push, Taste
|
|
54
|
+
wait times out. Before any push, Taste fetches latest `master` (merging it only when needed), records last-run
|
|
55
55
|
failed tests and re-verifies them locally, then spawns a
|
|
56
56
|
fresh subagent with no parent conversation. If the repository root defines a `prepush`
|
|
57
57
|
package script, Taste runs it as the authoritative local gate; otherwise it falls back
|
|
@@ -148,7 +148,7 @@ the demo compiles. Add a story plus `demoConfig.tsx` registration for new
|
|
|
148
148
|
components, or an allowlist entry with a specific reason — not "hard to demo".
|
|
149
149
|
The allowlist is limited to shell/providers, React context objects, thin RN
|
|
150
150
|
list wrappers, subcomponents already exercised by a parent story
|
|
151
|
-
(
|
|
151
|
+
(DropdownPanel, Table, DateTimeField, HeightField, ConsentFormScreen), and
|
|
152
152
|
product surfaces that belong in `example-frontend` rather than the isolated
|
|
153
153
|
UI demo (announcements and in-app notifications).
|
|
154
154
|
Standalone picker sheets (`NumberPickerActionSheet`, `DecimalRangeActionSheet`)
|
|
@@ -226,6 +226,69 @@ overrides it:
|
|
|
226
226
|
| Helper | `{testID}.helper` |
|
|
227
227
|
| Show/hide toggle | `{testID}.visibility-toggle` |
|
|
228
228
|
|
|
229
|
+
### DropdownPanel
|
|
230
|
+
|
|
231
|
+
`DropdownPanel` is the compositional dropdown behind the DataTable filter popovers. A
|
|
232
|
+
trigger opens an anchored panel of arbitrary composed content with an optional
|
|
233
|
+
Apply / Clear / Cancel footer, so it also fits non-filter panels (bulk actions, column
|
|
234
|
+
pickers, sort menus).
|
|
235
|
+
|
|
236
|
+
``````typescript
|
|
237
|
+
<DropdownPanel
|
|
238
|
+
label="Filters"
|
|
239
|
+
onApply={applyDraft}
|
|
240
|
+
onCancel={resetDraft}
|
|
241
|
+
onClear={clearDraft}
|
|
242
|
+
onOpenChange={(isOpen) => isOpen && seedDraft()}
|
|
243
|
+
width={340}
|
|
244
|
+
>
|
|
245
|
+
<FilterSelectMenu title="Due date" options={DUE_DATE_OPTIONS} value={dueDate} onChange={setDueDate} />
|
|
246
|
+
<FilterBoolean title="Urgent tasks only" value={urgentOnly} onChange={setUrgentOnly} />
|
|
247
|
+
</DropdownPanel>
|
|
248
|
+
``````
|
|
249
|
+
|
|
250
|
+
> `Filter` is the former name and stays exported as a deprecated alias (with `FilterProps`)
|
|
251
|
+
> until Terreno 58. The `FilterSelectMenu` / `FilterBoolean` / `FilterAccordion` /
|
|
252
|
+
> `FilterChangesBadge` controls keep their names.
|
|
253
|
+
|
|
254
|
+
#### Positioning
|
|
255
|
+
|
|
256
|
+
The panel never renders inside its parent's clipping or stacking context: on web it is
|
|
257
|
+
portaled to `document.body` with fixed positioning, and on native it is teleported to the
|
|
258
|
+
`TerrenoProvider` portal host (falling back to an inline absolute overlay when no host is
|
|
259
|
+
mounted). `computeDropdownPanelLayout` then anchors it to the measured trigger:
|
|
260
|
+
|
|
261
|
+
| Situation | Behavior |
|
|
262
|
+
| --- | --- |
|
|
263
|
+
| Panel fits beside the trigger | Left edges line up (`align="start"`) |
|
|
264
|
+
| Left-aligned panel would cross the right viewport edge | Right edges line up instead (`align="auto"`, the default) |
|
|
265
|
+
| Panel is wider than the viewport | Narrowed to the viewport minus the 8px screen margins |
|
|
266
|
+
| Less than 160px below the trigger, and more above | Flipped above the trigger |
|
|
267
|
+
| Content taller than the space on screen | Panel body scrolls; the footer stays pinned |
|
|
268
|
+
|
|
269
|
+
Pass `align="start"` or `align="end"` to pin the side explicitly, and `maxPanelHeight` to
|
|
270
|
+
cap the height below what the viewport allows.
|
|
271
|
+
|
|
272
|
+
#### Trigger
|
|
273
|
+
|
|
274
|
+
The default trigger is a `Button` (or a compact icon trigger with `iconOnly`). Style it
|
|
275
|
+
with `triggerVariant` (any `Button` variant), `triggerSize`, and `fullWidth`, or replace
|
|
276
|
+
it entirely with `renderTrigger` when the design needs chrome the button variants do not
|
|
277
|
+
cover:
|
|
278
|
+
|
|
279
|
+
``````typescript
|
|
280
|
+
<DropdownPanel
|
|
281
|
+
fullWidth
|
|
282
|
+
renderTrigger={({isOpen, toggle}) => <MyPill active={isOpen} onPress={toggle} />}
|
|
283
|
+
width={300}
|
|
284
|
+
>
|
|
285
|
+
{fields}
|
|
286
|
+
</DropdownPanel>
|
|
287
|
+
``````
|
|
288
|
+
|
|
289
|
+
`variant` still sets both the trigger and the Apply button; `triggerVariant` and
|
|
290
|
+
`applyButtonVariant` override each independently.
|
|
291
|
+
|
|
229
292
|
### GPTChat
|
|
230
293
|
|
|
231
294
|
Streaming chat surface for `@terreno/ai`. Histories, messages, submit, and optional MCP/tools stay under consumer control.
|
|
@@ -811,10 +874,10 @@ columns; web shows one **More filters** popover and native includes them in the
|
|
|
811
874
|
|
|
812
875
|
| Platform | Chrome |
|
|
813
876
|
| --- | --- |
|
|
814
|
-
| Web | Toolbar search + per-column `
|
|
877
|
+
| Web | Toolbar search + per-column `DropdownPanel` popovers (`column.filter`) |
|
|
815
878
|
| Native | Toolbar search + one **Filters** sheet (`Modal`) with the same fields |
|
|
816
879
|
|
|
817
|
-
Column headers use `
|
|
880
|
+
Column headers use `DropdownPanel` with `iconOnly`, which renders a compact icon trigger
|
|
818
881
|
(24px at the default `triggerSize="sm"`, 32px with `triggerSize="default"`) instead
|
|
819
882
|
of a labeled button. Give it an accessible name with `triggerAccessibilityLabel`.
|
|
820
883
|
|
|
@@ -4,7 +4,7 @@ IP: [can-as-permission-seam.md](../implementationPlans/can-as-permission-seam.md
|
|
|
4
4
|
|
|
5
5
|
## Phase 1 — `assertAllowed`
|
|
6
6
|
|
|
7
|
-
- [
|
|
7
|
+
- [x] **Task 1.1**: Helper + unit tests
|
|
8
8
|
- Delivers: `assertAllowed` implements legacy `checkPermissions` and `accessControl.can()`; double-gate test (access allow + permissions deny → allow)
|
|
9
9
|
- Files: `api/src/rbac/assertAllowed.ts`, `api/src/rbac/assertAllowed.test.ts`
|
|
10
10
|
- Blocked by: none (can land before MCP adapters; executors wiring waits on unified writes if MCP still duplicates checks)
|
|
@@ -12,7 +12,7 @@ IP: [can-as-permission-seam.md](../implementationPlans/can-as-permission-seam.md
|
|
|
12
12
|
|
|
13
13
|
## Phase 2 — Hot path
|
|
14
14
|
|
|
15
|
-
- [
|
|
15
|
+
- [x] **Task 2.1**: Middleware + executors
|
|
16
16
|
- Delivers: `permissionMiddleware` and `executeCreate/Update/Delete` call `assertAllowed`; `buildAccessPermissions` not used on requests
|
|
17
17
|
- Files: `api/src/permissions.ts`, `api/src/sync/executors.ts`, `api/src/api.ts`, `api/src/rbac/modelRouterAccess.ts`, tests
|
|
18
18
|
- Blocked by: 1.1; unified-mutation-executors Phase 2 so MCP is included automatically
|
|
@@ -20,12 +20,12 @@ IP: [can-as-permission-seam.md](../implementationPlans/can-as-permission-seam.md
|
|
|
20
20
|
|
|
21
21
|
## Phase 3 — Consumers and docs
|
|
22
22
|
|
|
23
|
-
- [
|
|
23
|
+
- [x] **Task 3.1**: example-backend dual config
|
|
24
24
|
- Delivers: routers with `access` drop redundant AND `permissions` where RBAC is the intent
|
|
25
25
|
- Files: `example-backend/src/**` model routers
|
|
26
26
|
- Blocked by: 2.1
|
|
27
27
|
- Acceptance: example-backend tests pass
|
|
28
|
-
- [
|
|
28
|
+
- [x] **Task 3.2**: Docs + breaking changelog
|
|
29
29
|
- Files: `docs/reference/api.md`, `docs/how-to/create-a-model.md`, `docs/implementationPlans/rbac-permissions.md` pointer, changelog
|
|
30
30
|
- Blocked by: 2.1
|
|
31
31
|
- Skills: `update-docs`
|
|
@@ -4,12 +4,12 @@ IP: [collection-registry.md](../implementationPlans/collection-registry.md)
|
|
|
4
4
|
|
|
5
5
|
## Phase 1 — Dual-write catalog
|
|
6
6
|
|
|
7
|
-
- [
|
|
7
|
+
- [x] **Task 1.1**: `CollectionRegistry` module
|
|
8
8
|
- Delivers: `registerCollection`, `replaceCollectionOptions`, `getCollection`, `listCollections`, `clearCollectionRegistry` with unit tests (unknown path no-op, options replace)
|
|
9
9
|
- Files: `api/src/collectionRegistry.ts`, `api/src/collectionRegistry.test.ts`
|
|
10
10
|
- Blocked by: none
|
|
11
11
|
- Acceptance: bun tests for the module pass without wiring modelRouter
|
|
12
|
-
- [
|
|
12
|
+
- [x] **Task 1.2**: Dual-write from `modelRouter`
|
|
13
13
|
- Delivers: `modelRouter` / `_buildModelRouter` write the catalog in addition to existing `register*` / `update*`
|
|
14
14
|
- Files: `api/src/api.ts`
|
|
15
15
|
- Blocked by: 1.1
|
|
@@ -17,12 +17,12 @@ IP: [collection-registry.md](../implementationPlans/collection-registry.md)
|
|
|
17
17
|
|
|
18
18
|
## Phase 2 — Surfaces read the catalog
|
|
19
19
|
|
|
20
|
-
- [
|
|
20
|
+
- [x] **Task 2.1**: MCP and realtime views
|
|
21
21
|
- Delivers: `getMCPRegistry` / realtime finders read `CollectionRegistry`; arrays in those files removed
|
|
22
22
|
- Files: `api/src/mcp/registry.ts`, `api/src/realtime/registry.ts`, related tests
|
|
23
23
|
- Blocked by: 1.2
|
|
24
24
|
- Acceptance: MCP and realtime tests pass; `updateMCPRegistryOptions` updates the shared record
|
|
25
|
-
- [
|
|
25
|
+
- [x] **Task 2.2**: Sync view + keep validation
|
|
26
26
|
- Delivers: sync lookup uses catalog; `registerSync` validation + index promises still run
|
|
27
27
|
- Files: `api/src/sync/registry.ts`, `api/src/sync/*.test.ts`
|
|
28
28
|
- Blocked by: 1.2
|
|
@@ -30,12 +30,12 @@ IP: [collection-registry.md](../implementationPlans/collection-registry.md)
|
|
|
30
30
|
|
|
31
31
|
## Phase 3 — Contract
|
|
32
32
|
|
|
33
|
-
- [
|
|
33
|
+
- [x] **Task 3.1**: Single writer + clear-all
|
|
34
34
|
- Delivers: `modelRouter` only writes `CollectionRegistry`; wrapper register/update/clear functions; tests that used independent clears updated
|
|
35
35
|
- Files: `api/src/api.ts`, registry wrappers, tests
|
|
36
36
|
- Blocked by: 2.1, 2.2
|
|
37
37
|
- Acceptance: one `replaceCollectionOptions` is enough for MCP+sync options identity
|
|
38
|
-
- [
|
|
38
|
+
- [x] **Task 3.2**: Docs + changelog
|
|
39
39
|
- Files: `docs/explanation/modular-api-design.md`, `docs/reference/api.md`, changelog
|
|
40
40
|
- Blocked by: 3.1
|
|
41
41
|
- Skills: `update-docs`
|
|
@@ -4,12 +4,12 @@ IP: [describe-model-schema.md](../implementationPlans/describe-model-schema.md)
|
|
|
4
4
|
|
|
5
5
|
## Phase 1 — Descriptor + MCP
|
|
6
6
|
|
|
7
|
-
- [
|
|
7
|
+
- [x] **Task 1.1**: `describeModel` / `describeModelForRouter`
|
|
8
8
|
- Delivers: field graph + snapshot tests on a fixture schema
|
|
9
9
|
- Files: `api/src/schemaMetadata.ts`, `api/src/schemaMetadata.test.ts`
|
|
10
10
|
- Blocked by: none
|
|
11
11
|
- Acceptance: snapshots for enum, ref, array, subdocument, system fields
|
|
12
|
-
- [
|
|
12
|
+
- [x] **Task 1.2**: MCP Zod from descriptor
|
|
13
13
|
- Delivers: `schemaGenerator.ts` maps `FieldDescription`; no SchemaType switch for kinds already in the descriptor
|
|
14
14
|
- Files: `api/src/mcp/schemaGenerator.ts`, `api/src/mcp/schemaGenerator.test.ts`
|
|
15
15
|
- Blocked by: 1.1
|
|
@@ -17,7 +17,7 @@ IP: [describe-model-schema.md](../implementationPlans/describe-model-schema.md)
|
|
|
17
17
|
|
|
18
18
|
## Phase 2 — Admin
|
|
19
19
|
|
|
20
|
-
- [
|
|
20
|
+
- [x] **Task 2.1**: `extractFieldMeta` from descriptor
|
|
21
21
|
- Delivers: admin config fields built from `describeModel`, not OpenAPI property walk
|
|
22
22
|
- Files: `admin-backend/src/adminApp.ts`, admin-backend tests
|
|
23
23
|
- Blocked by: 1.1
|
|
@@ -25,12 +25,12 @@ IP: [describe-model-schema.md](../implementationPlans/describe-model-schema.md)
|
|
|
25
25
|
|
|
26
26
|
## Phase 3 — OpenAPI + docs
|
|
27
27
|
|
|
28
|
-
- [
|
|
28
|
+
- [x] **Task 3.1**: `getOpenApiSpecForModel` from descriptor
|
|
29
29
|
- Delivers: OpenAPI properties derived from `ModelDescription`; populate still applied
|
|
30
30
|
- Files: `api/src/populate.ts`, `api/src/openApi.test.ts` / example-backend openapi snapshot if required
|
|
31
31
|
- Blocked by: 1.1
|
|
32
32
|
- Acceptance: OpenAPI tests pass; any snapshot diff is reviewed in the PR
|
|
33
|
-
- [
|
|
33
|
+
- [x] **Task 3.2**: Docs + export
|
|
34
34
|
- Files: `docs/explanation/schema-metadata.md`, `docs/reference/api.md`, `docs/how-to/create-a-model.md`, admin reference, `api/src/index.ts`, changelog
|
|
35
35
|
- Blocked by: 1.2, 2.1, 3.1
|
|
36
36
|
- Skills: `update-docs`
|
|
@@ -103,19 +103,21 @@ Research: [`docs/implementationPlans/migrate-cicd-to-circleci-research.md`](../i
|
|
|
103
103
|
- Files: `.circleci/continue-config.yml`
|
|
104
104
|
- Depends on: Task 0.2, Task 1.3
|
|
105
105
|
- Acceptance: preview deploy URL posted or visible; prod deploy on master path filter.
|
|
106
|
-
- Note:
|
|
106
|
+
- Note: CircleCI is the only Netlify deployer; jobs fail when `terreno-netlify` is empty. PR close triggers CircleCI `preview-cleanup` through `preview-cleanup.yml`.
|
|
107
107
|
|
|
108
108
|
- [ ] **Task 4.2**: Preview cleanup port
|
|
109
109
|
- Description: On PR close, clean Netlify/GCP preview resources from CircleCI (webhook or GitHub App → pipeline). Prefer OIDC over `GCP_SA_KEY`.
|
|
110
110
|
- Files: `.circleci/continue-config.yml`
|
|
111
111
|
- Depends on: Task 4.1
|
|
112
112
|
- Acceptance: closing a PR removes preview resources; no orphaned Cloud Run `pr-N` services in a test PR.
|
|
113
|
+
- Note: Cutover code landed on branch `move-cd-to-circleci` (GHA deploy workflows disabled; CircleCI deploy jobs fail on empty contexts). Check off after contexts are filled and the acceptance is observed.
|
|
113
114
|
|
|
114
115
|
- [ ] **Task 4.3**: Dual-run cutover for Netlify
|
|
115
116
|
- Description: Delete GHA deploy workflows after CircleCI trusted.
|
|
116
117
|
- Files: `.github/workflows/demo-deploy.yml`, `frontend-example-deploy.yml`, `docs-deploy.yml`, `preview-cleanup.yml`
|
|
117
118
|
- Depends on: Task 4.1, Task 4.2
|
|
118
119
|
- Acceptance: GHA deploy twins deleted.
|
|
120
|
+
- Note: Cutover code landed on branch `move-cd-to-circleci` (GHA deploy workflows disabled; CircleCI deploy jobs fail on empty contexts). Check off after contexts are filled and the acceptance is observed.
|
|
119
121
|
|
|
120
122
|
## Phase 5: EAS + fingerprint
|
|
121
123
|
|
|
@@ -150,13 +152,14 @@ Research: [`docs/implementationPlans/migrate-cicd-to-circleci-research.md`](../i
|
|
|
150
152
|
- Files: `.circleci/continue-config.yml`
|
|
151
153
|
- Depends on: Task 6.1
|
|
152
154
|
- Acceptance: terraform preview on PR; apply+deploy on master for a safe test path; GitHub Deployment records optional but documented.
|
|
153
|
-
- Note:
|
|
155
|
+
- Note: CircleCI is the only GCP deployer; jobs fail when `terreno-gcp` is empty. `gcp-cd-prod` runs MCP `test:ci` before the MCP deploy.
|
|
154
156
|
|
|
155
157
|
- [ ] **Task 6.3**: Dual-run cutover for CD
|
|
156
158
|
- Description: Single deployer: disable GHA `cd.yml` when CircleCI CD is required; remove GitHub OIDC provider only after GHA CD is gone (or keep read-only if other repos need it — document).
|
|
157
159
|
- Files: `.github/workflows/cd.yml`, terraform OIDC
|
|
158
160
|
- Depends on: Task 6.2
|
|
159
161
|
- Acceptance: only CircleCI performs terreno CD; no double apply.
|
|
162
|
+
- Note: Cutover code landed on branch `move-cd-to-circleci` (GHA deploy workflows disabled; CircleCI deploy jobs fail on empty contexts). Check off after contexts are filled and the acceptance is observed.
|
|
160
163
|
|
|
161
164
|
## Phase 7: npm publish
|
|
162
165
|
|
|
@@ -200,7 +203,7 @@ Research: [`docs/implementationPlans/migrate-cicd-to-circleci-research.md`](../i
|
|
|
200
203
|
- Depends on: Task 0.2
|
|
201
204
|
- Acceptance: Security tab still receives results **or** explicit maintainer sign-off on alternative.
|
|
202
205
|
|
|
203
|
-
- [ ] **Task 9.2**: Replace Dependabot auto-merge + triage +
|
|
206
|
+
- [ ] **Task 9.2**: Replace Dependabot auto-merge + triage + docs-audit (roadmap workflows stay on GitHub Actions, decided 2026-09-26)
|
|
204
207
|
- Description: Implement CircleCI (or Renovate) equivalents; wire issue/schedule triggers without leaving required logic on GHA.
|
|
205
208
|
- Files: `.circleci/continue-config.yml`, corresponding GHA deletions
|
|
206
209
|
- Depends on: Task 0.2
|