@terreno/mcp 57.3.0 → 57.4.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/README.md +7 -1
- package/dist/bootstrap.d.ts +0 -18
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +10 -2428
- package/dist/bootstrap.js.map +1 -1
- package/dist/docs/guidelines/admin-frontend/guidelines/core.md +5 -1
- package/dist/docs/guidelines/api/skills/mongoose-schema-safety/SKILL.md +23 -10
- package/dist/docs/resources/syncdb.md +4 -1
- package/dist/docs/upgrades/57.4.0.md +140 -0
- package/dist/docs/versioned/next/README.md +3 -0
- package/dist/docs/versioned/next/explanation/README.md +4 -1
- package/dist/docs/versioned/next/explanation/admin-interface.md +20 -13
- package/dist/docs/versioned/next/explanation/charts.md +29 -0
- package/dist/docs/versioned/next/explanation/deployment-architecture-gcp.md +32 -0
- package/dist/docs/versioned/next/explanation/deployment-baseline.md +1 -1
- package/dist/docs/versioned/next/explanation/example-coverage.md +43 -0
- package/dist/docs/versioned/next/explanation/local-first-data.md +5 -2
- package/dist/docs/versioned/next/explanation/loop-engineering.md +9 -6
- package/dist/docs/versioned/next/explanation/model-router-actions.md +19 -2
- package/dist/docs/versioned/next/explanation/organizations.md +88 -0
- package/dist/docs/versioned/next/explanation/planning-plugins.md +114 -0
- package/dist/docs/versioned/next/explanation/positioning.md +3 -3
- package/dist/docs/versioned/next/explanation/repository-settings.md +6 -5
- package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +44 -34
- package/dist/docs/versioned/next/explanation/source-rules.md +1 -1
- package/dist/docs/versioned/next/explanation/static-analysis.md +76 -16
- package/dist/docs/versioned/next/how-to/README.md +10 -0
- package/dist/docs/versioned/next/how-to/add-gpt-chat-mascot.md +92 -0
- package/dist/docs/versioned/next/how-to/add-organizations.md +204 -0
- package/dist/docs/versioned/next/how-to/admin-add-model.md +9 -1
- package/dist/docs/versioned/next/how-to/admin-import-prebuilt.md +7 -1
- package/dist/docs/versioned/next/how-to/audit-log.md +85 -0
- package/dist/docs/versioned/next/how-to/background-jobs.md +296 -0
- package/dist/docs/versioned/next/how-to/build-admin-screens.md +42 -13
- package/dist/docs/versioned/next/how-to/charts-and-dashboards.md +37 -0
- package/dist/docs/versioned/next/how-to/circleci.md +136 -27
- package/dist/docs/versioned/next/how-to/compare-chart-rendered-snapshots.md +36 -0
- package/dist/docs/versioned/next/how-to/configure-better-auth.md +4 -0
- package/dist/docs/versioned/next/how-to/create-a-terreno-app.md +154 -0
- package/dist/docs/versioned/next/how-to/deploy-backend-to-cloud-run.md +2 -0
- package/dist/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/dist/docs/versioned/next/how-to/github-issue-lifecycle.md +12 -8
- package/dist/docs/versioned/next/how-to/in-app-notifications.md +147 -0
- package/dist/docs/versioned/next/how-to/install-agent-skills.md +24 -12
- package/dist/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +19 -3
- package/dist/docs/versioned/next/how-to/product-announcements.md +155 -0
- package/dist/docs/versioned/next/how-to/run-mongodb-migrations.md +127 -0
- package/dist/docs/versioned/next/how-to/run-tests-locally.md +102 -0
- package/dist/docs/versioned/next/how-to/seed-a-database.md +7 -2
- package/dist/docs/versioned/next/implementationPlans/README.md +8 -5
- package/dist/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +44 -0
- package/dist/docs/versioned/next/implementationPlans/agent-ui-blocks.md +386 -0
- package/dist/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +11 -8
- package/dist/docs/versioned/next/implementationPlans/announcements-surfaces.md +231 -0
- package/dist/docs/versioned/next/implementationPlans/announcements.md +289 -0
- package/dist/docs/versioned/next/implementationPlans/b2b-platform-program.md +3 -1
- package/dist/docs/versioned/next/implementationPlans/charts-and-dashboards.md +246 -0
- package/dist/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +4 -3
- package/dist/docs/versioned/next/implementationPlans/create-terreno-app.md +177 -0
- package/dist/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +219 -0
- package/dist/docs/versioned/next/implementationPlans/examples-demo-coverage.md +17 -17
- package/dist/docs/versioned/next/implementationPlans/framework-audit-log.md +247 -0
- package/dist/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +40 -0
- package/dist/docs/versioned/next/implementationPlans/job-queues.md +330 -0
- package/dist/docs/versioned/next/implementationPlans/knip-cleanup.md +136 -0
- package/dist/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +210 -0
- package/dist/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +254 -0
- package/dist/docs/versioned/next/implementationPlans/notification-center.md +185 -0
- package/dist/docs/versioned/next/implementationPlans/org-management-ui.md +8 -3
- package/dist/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -1
- package/dist/docs/versioned/next/reference/README.md +4 -0
- package/dist/docs/versioned/next/reference/admin-backend.md +83 -5
- package/dist/docs/versioned/next/reference/admin-config.md +7 -0
- package/dist/docs/versioned/next/reference/admin-frontend.md +178 -5
- package/dist/docs/versioned/next/reference/admin-spa.md +18 -1
- package/dist/docs/versioned/next/reference/ai.md +2 -0
- package/dist/docs/versioned/next/reference/announcements.md +179 -0
- package/dist/docs/versioned/next/reference/api.md +343 -4
- package/dist/docs/versioned/next/reference/comms.md +33 -0
- package/dist/docs/versioned/next/reference/create-terreno-app.md +44 -0
- package/dist/docs/versioned/next/reference/environment-variables.md +29 -0
- package/dist/docs/versioned/next/reference/jobs.md +319 -0
- package/dist/docs/versioned/next/reference/legacy/rtk.md +5 -1
- package/dist/docs/versioned/next/reference/lifecycle-plugin.md +29 -11
- package/dist/docs/versioned/next/reference/mcp-server.md +2 -43
- package/dist/docs/versioned/next/reference/scan-plugin.md +169 -0
- package/dist/docs/versioned/next/reference/syncdb.md +38 -12
- package/dist/docs/versioned/next/reference/test.md +57 -6
- package/dist/docs/versioned/next/reference/ui-performance.md +2 -1
- package/dist/docs/versioned/next/reference/ui.md +257 -3
- package/dist/docs/versioned/next/tasks/admin-scripts-durable-jobs.md +10 -0
- package/dist/docs/versioned/next/tasks/agent-ui-blocks.md +114 -0
- package/dist/docs/versioned/next/tasks/announcements-surfaces.md +101 -0
- package/dist/docs/versioned/next/tasks/announcements.md +173 -0
- package/dist/docs/versioned/next/tasks/charts-and-dashboards.md +120 -0
- package/dist/docs/versioned/next/tasks/create-terreno-app.md +82 -0
- package/dist/docs/versioned/next/tasks/datatable-server-side-filtering.md +87 -0
- package/dist/docs/versioned/next/tasks/examples-demo-coverage.md +123 -17
- package/dist/docs/versioned/next/tasks/framework-audit-log.md +86 -0
- package/dist/docs/versioned/next/tasks/gpt-chat-mascot.md +13 -0
- package/dist/docs/versioned/next/tasks/job-queues.md +144 -0
- package/dist/docs/versioned/next/tasks/knip-cleanup.md +146 -0
- package/dist/docs/versioned/next/tasks/migrate-admin-to-syncdb.md +209 -0
- package/dist/docs/versioned/next/tasks/mongodb-migrations-tooling.md +107 -0
- package/dist/docs/versioned/next/tasks/notification-center.md +102 -0
- package/dist/docs/versioned/next/tasks/org-management-ui.md +14 -14
- package/dist/docs/versioned/next/tutorials/README.md +1 -1
- package/dist/docs/versioned/next/tutorials/getting-started.md +62 -22
- package/dist/help/excerpt.d.ts +2 -0
- package/dist/help/excerpt.d.ts.map +1 -0
- package/dist/help/excerpt.js +8 -0
- package/dist/help/excerpt.js.map +1 -0
- package/dist/help/updateNotes.d.ts +42 -0
- package/dist/help/updateNotes.d.ts.map +1 -0
- package/dist/help/updateNotes.js +235 -0
- package/dist/help/updateNotes.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/local/tools/databaseQuery.d.ts +1 -0
- package/dist/local/tools/databaseQuery.d.ts.map +1 -1
- package/dist/local/tools/databaseQuery.js +1 -0
- package/dist/local/tools/databaseQuery.js.map +1 -1
- package/dist/packageGuidelines.d.ts +2 -2
- package/dist/packageGuidelines.d.ts.map +1 -1
- package/dist/packageGuidelines.js +2 -8
- package/dist/packageGuidelines.js.map +1 -1
- package/dist/resources.d.ts +3 -0
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +3 -0
- package/dist/resources.js.map +1 -1
- package/dist/search/chunker.d.ts +1 -0
- package/dist/search/chunker.d.ts.map +1 -1
- package/dist/search/chunker.js +1 -0
- package/dist/search/chunker.js.map +1 -1
- package/dist/search/docIndex.d.ts +1 -5
- package/dist/search/docIndex.d.ts.map +1 -1
- package/dist/search/docIndex.js +1 -0
- package/dist/search/docIndex.js.map +1 -1
- package/dist/search/docVersion.d.ts +2 -1
- package/dist/search/docVersion.d.ts.map +1 -1
- package/dist/search/docVersion.js +3 -1
- package/dist/search/docVersion.js.map +1 -1
- package/dist/tools.d.ts +2 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +113 -2
- package/dist/tools.js.map +1 -1
- package/package.json +28 -27
- package/src/docs/guidelines/admin-frontend/guidelines/core.md +5 -1
- package/src/docs/guidelines/api/skills/mongoose-schema-safety/SKILL.md +23 -10
- package/src/docs/resources/syncdb.md +4 -1
- package/src/docs/upgrades/57.4.0.md +140 -0
- package/src/docs/versioned/next/README.md +3 -0
- package/src/docs/versioned/next/explanation/README.md +4 -1
- package/src/docs/versioned/next/explanation/admin-interface.md +20 -13
- package/src/docs/versioned/next/explanation/charts.md +29 -0
- package/src/docs/versioned/next/explanation/deployment-architecture-gcp.md +32 -0
- package/src/docs/versioned/next/explanation/deployment-baseline.md +1 -1
- package/src/docs/versioned/next/explanation/example-coverage.md +43 -0
- package/src/docs/versioned/next/explanation/local-first-data.md +5 -2
- package/src/docs/versioned/next/explanation/loop-engineering.md +9 -6
- package/src/docs/versioned/next/explanation/model-router-actions.md +19 -2
- package/src/docs/versioned/next/explanation/organizations.md +88 -0
- package/src/docs/versioned/next/explanation/planning-plugins.md +114 -0
- package/src/docs/versioned/next/explanation/positioning.md +3 -3
- package/src/docs/versioned/next/explanation/repository-settings.md +6 -5
- package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +44 -34
- package/src/docs/versioned/next/explanation/source-rules.md +1 -1
- package/src/docs/versioned/next/explanation/static-analysis.md +76 -16
- package/src/docs/versioned/next/how-to/README.md +10 -0
- package/src/docs/versioned/next/how-to/add-gpt-chat-mascot.md +92 -0
- package/src/docs/versioned/next/how-to/add-organizations.md +204 -0
- package/src/docs/versioned/next/how-to/admin-add-model.md +9 -1
- package/src/docs/versioned/next/how-to/admin-import-prebuilt.md +7 -1
- package/src/docs/versioned/next/how-to/audit-log.md +85 -0
- package/src/docs/versioned/next/how-to/background-jobs.md +296 -0
- package/src/docs/versioned/next/how-to/build-admin-screens.md +42 -13
- package/src/docs/versioned/next/how-to/charts-and-dashboards.md +37 -0
- package/src/docs/versioned/next/how-to/circleci.md +136 -27
- package/src/docs/versioned/next/how-to/compare-chart-rendered-snapshots.md +36 -0
- package/src/docs/versioned/next/how-to/configure-better-auth.md +4 -0
- package/src/docs/versioned/next/how-to/create-a-terreno-app.md +154 -0
- package/src/docs/versioned/next/how-to/deploy-backend-to-cloud-run.md +2 -0
- package/src/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/src/docs/versioned/next/how-to/github-issue-lifecycle.md +12 -8
- package/src/docs/versioned/next/how-to/in-app-notifications.md +147 -0
- package/src/docs/versioned/next/how-to/install-agent-skills.md +24 -12
- package/src/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +19 -3
- package/src/docs/versioned/next/how-to/product-announcements.md +155 -0
- package/src/docs/versioned/next/how-to/run-mongodb-migrations.md +127 -0
- package/src/docs/versioned/next/how-to/run-tests-locally.md +102 -0
- package/src/docs/versioned/next/how-to/seed-a-database.md +7 -2
- package/src/docs/versioned/next/implementationPlans/README.md +8 -5
- package/src/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +44 -0
- package/src/docs/versioned/next/implementationPlans/agent-ui-blocks.md +386 -0
- package/src/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +11 -8
- package/src/docs/versioned/next/implementationPlans/announcements-surfaces.md +231 -0
- package/src/docs/versioned/next/implementationPlans/announcements.md +289 -0
- package/src/docs/versioned/next/implementationPlans/b2b-platform-program.md +3 -1
- package/src/docs/versioned/next/implementationPlans/charts-and-dashboards.md +246 -0
- package/src/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +4 -3
- package/src/docs/versioned/next/implementationPlans/create-terreno-app.md +177 -0
- package/src/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +219 -0
- package/src/docs/versioned/next/implementationPlans/examples-demo-coverage.md +17 -17
- package/src/docs/versioned/next/implementationPlans/framework-audit-log.md +247 -0
- package/src/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +40 -0
- package/src/docs/versioned/next/implementationPlans/job-queues.md +330 -0
- package/src/docs/versioned/next/implementationPlans/knip-cleanup.md +136 -0
- package/src/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +210 -0
- package/src/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +254 -0
- package/src/docs/versioned/next/implementationPlans/notification-center.md +185 -0
- package/src/docs/versioned/next/implementationPlans/org-management-ui.md +8 -3
- package/src/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -1
- package/src/docs/versioned/next/reference/README.md +4 -0
- package/src/docs/versioned/next/reference/admin-backend.md +83 -5
- package/src/docs/versioned/next/reference/admin-config.md +7 -0
- package/src/docs/versioned/next/reference/admin-frontend.md +178 -5
- package/src/docs/versioned/next/reference/admin-spa.md +18 -1
- package/src/docs/versioned/next/reference/ai.md +2 -0
- package/src/docs/versioned/next/reference/announcements.md +179 -0
- package/src/docs/versioned/next/reference/api.md +343 -4
- package/src/docs/versioned/next/reference/comms.md +33 -0
- package/src/docs/versioned/next/reference/create-terreno-app.md +44 -0
- package/src/docs/versioned/next/reference/environment-variables.md +29 -0
- package/src/docs/versioned/next/reference/jobs.md +319 -0
- package/src/docs/versioned/next/reference/legacy/rtk.md +5 -1
- package/src/docs/versioned/next/reference/lifecycle-plugin.md +29 -11
- package/src/docs/versioned/next/reference/mcp-server.md +2 -43
- package/src/docs/versioned/next/reference/scan-plugin.md +169 -0
- package/src/docs/versioned/next/reference/syncdb.md +38 -12
- package/src/docs/versioned/next/reference/test.md +57 -6
- package/src/docs/versioned/next/reference/ui-performance.md +2 -1
- package/src/docs/versioned/next/reference/ui.md +257 -3
- package/src/docs/versioned/next/tasks/admin-scripts-durable-jobs.md +10 -0
- package/src/docs/versioned/next/tasks/agent-ui-blocks.md +114 -0
- package/src/docs/versioned/next/tasks/announcements-surfaces.md +101 -0
- package/src/docs/versioned/next/tasks/announcements.md +173 -0
- package/src/docs/versioned/next/tasks/charts-and-dashboards.md +120 -0
- package/src/docs/versioned/next/tasks/create-terreno-app.md +82 -0
- package/src/docs/versioned/next/tasks/datatable-server-side-filtering.md +87 -0
- package/src/docs/versioned/next/tasks/examples-demo-coverage.md +123 -17
- package/src/docs/versioned/next/tasks/framework-audit-log.md +86 -0
- package/src/docs/versioned/next/tasks/gpt-chat-mascot.md +13 -0
- package/src/docs/versioned/next/tasks/job-queues.md +144 -0
- package/src/docs/versioned/next/tasks/knip-cleanup.md +146 -0
- package/src/docs/versioned/next/tasks/migrate-admin-to-syncdb.md +209 -0
- package/src/docs/versioned/next/tasks/mongodb-migrations-tooling.md +107 -0
- package/src/docs/versioned/next/tasks/notification-center.md +102 -0
- package/src/docs/versioned/next/tasks/org-management-ui.md +14 -14
- package/src/docs/versioned/next/tutorials/README.md +1 -1
- package/src/docs/versioned/next/tutorials/getting-started.md +62 -22
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,10 @@ Read the architecture first:
|
|
|
8
8
|
Use `AdminProvider` + `AdminShellLayout`. Home is `AdminHome`. Generic models use
|
|
9
9
|
`AdminScreenRouter` on `[model]/index` (create is `[model]/create`, not `new`).
|
|
10
10
|
Custom screens need the same `name` on `AdminApp.customScreens` and
|
|
11
|
-
`widgets.screens`.
|
|
11
|
+
`widgets.screens`. String-`_id` model CRUD uses windowed syncdb when
|
|
12
|
+
`adminBroadcast` is enabled. Framework admin RPC uses host-bound
|
|
13
|
+
`adminRequest`; ObjectId/API-only compatibility CRUD keeps `useAdminApi` in
|
|
14
|
+
Terreno 57. Do not add new admin `injectEndpoints`; Terreno 58 removes that path
|
|
15
|
+
and the required `api` prop.
|
|
12
16
|
|
|
13
17
|
Agent workflow: skill `building-admin-interfaces`.
|
|
@@ -83,29 +83,40 @@ schema.statics = {
|
|
|
83
83
|
- Apply the standard plugins (`createdUpdatedPlugin`, `isDeletedPlugin`, `findOneOrNone`, `findExactlyOne`) on every new model. Most existing models go through `addDefaultPlugins`.
|
|
84
84
|
- `checkModelsStrict()` runs at non-prod startup (`server.ts`) and validates schema consistency — keep it passing.
|
|
85
85
|
|
|
86
|
+
## Migration files
|
|
87
|
+
|
|
88
|
+
Schema and data changes that must run once per environment belong in
|
|
89
|
+
`migrations/<YYYYMMDDHHmmss>-<slug>.ts` with required `up` and optional `down`.
|
|
90
|
+
Generate a draft with `terreno-migrate generate --dir ./migrations --models ./src/models.ts`,
|
|
91
|
+
then `terreno-migrate up --dir ./migrations --dry` before wet apply.
|
|
92
|
+
See [Run MongoDB migrations](../../../../docs/how-to/run-mongodb-migrations.md).
|
|
93
|
+
|
|
94
|
+
Admin **Scripts** (`ScriptRunner` + `BackgroundTask`) stay for one-off operator
|
|
95
|
+
tools. Do not use Scripts as the primary path for versioned schema backfills.
|
|
96
|
+
|
|
86
97
|
## Schema Change Risk Matrix
|
|
87
98
|
|
|
88
99
|
| Change Type | Risk Level | Required Mitigation |
|
|
89
100
|
|-------------|-----------|---------------------|
|
|
90
101
|
| Add optional field | Low | Safe to ship directly (still requires `description`) |
|
|
91
|
-
| Add required field | High | Must provide a default value, OR write a
|
|
102
|
+
| Add required field | High | Must provide a default value, OR write a versioned migration (`terreno-migrate generate` / `up`) with a backfill before wet apply |
|
|
92
103
|
| Remove field | Medium | Soft-remove first (mark optional, stop writing); hard-remove in next PR after deploys settle |
|
|
93
|
-
| Rename field | High | Three-step: add new → backfill → remove old (separate PRs) |
|
|
94
|
-
| Change field type | Critical | Treat as rename: new field + migration + remove old |
|
|
95
|
-
| Add index | Medium |
|
|
104
|
+
| Rename field | High | Three-step: add new → backfill migration → remove old (separate PRs) |
|
|
105
|
+
| Change field type | Critical | Treat as rename: new field + versioned migration + remove old |
|
|
106
|
+
| Add index | Medium | Prefer `terreno-migrate generate` for the index; build can slow writes on large collections — coordinate with ops |
|
|
96
107
|
| Remove index | Low | Safe to ship directly |
|
|
97
|
-
| Add unique index | High | Dedup
|
|
108
|
+
| Add unique index | High | Dedup in a versioned migration first; otherwise the index build fails on existing duplicates |
|
|
98
109
|
|
|
99
|
-
##
|
|
110
|
+
## One-off admin scripts
|
|
100
111
|
|
|
101
|
-
|
|
112
|
+
Ad-hoc operator tools (counts, reseeds, support fixes) still live as admin
|
|
113
|
+
Scripts using `ScriptRunner` and `BackgroundTask`:
|
|
102
114
|
|
|
103
115
|
```typescript
|
|
104
116
|
import type {ScriptContext, ScriptResult, ScriptRunner} from "@terreno/api";
|
|
105
117
|
|
|
106
118
|
export const run: ScriptRunner = async (wetRun, ctx) => {
|
|
107
119
|
const results: string[] = [];
|
|
108
|
-
// ... do work ...
|
|
109
120
|
if (wetRun) {
|
|
110
121
|
// commit changes
|
|
111
122
|
}
|
|
@@ -113,7 +124,9 @@ export const run: ScriptRunner = async (wetRun, ctx) => {
|
|
|
113
124
|
};
|
|
114
125
|
```
|
|
115
126
|
|
|
116
|
-
Always run with `wetRun = false` first
|
|
127
|
+
Always run with `wetRun = false` first. Use `ctx.checkCancellation()`,
|
|
128
|
+
`ctx.addLog()`, and `ctx.updateProgress()` for long-running tasks. Do not put
|
|
129
|
+
repeatable schema backfills here — use `migrations/` and `terreno-migrate`.
|
|
117
130
|
|
|
118
131
|
## Cross-Package Ripple
|
|
119
132
|
|
|
@@ -131,7 +144,7 @@ A schema change in one place often ripples:
|
|
|
131
144
|
- [ ] For a new model: all five types (`Document`, `Methods`, `Statics`, `Model`, `Schema`) created
|
|
132
145
|
- [ ] Statics/methods assigned directly on schema (`schema.statics = {...}`, `schema.methods = {...}`) — not `.static()` / `.method()`
|
|
133
146
|
- [ ] Other model type files checked — any model that populates this one updated if its shape changed
|
|
134
|
-
- [ ]
|
|
147
|
+
- [ ] Versioned migration written (`migrations/` + `terreno-migrate`) and dry-run verified for any backfill; unique-index dedup runs before the index is added
|
|
135
148
|
- [ ] `modelRouter` config updated (`queryFields`, `populatePaths`, `responseHandler`) if needed
|
|
136
149
|
- [ ] `AdminApp` `listFields` updated if the model is in the admin panel
|
|
137
150
|
- [ ] `bun run sdk` run from `example-frontend/` if the API response shape changed
|
|
@@ -36,7 +36,10 @@ const {create, update, remove} = useMutate("todos");
|
|
|
36
36
|
|
|
37
37
|
## What syncdb replaces
|
|
38
38
|
|
|
39
|
-
Do **not** use RTK Query `useGetXQuery` / `usePostXMutation` for synced
|
|
39
|
+
Do **not** use RTK Query `useGetXQuery` / `usePostXMutation` for synced
|
|
40
|
+
collections. Keep `bun run sdk` for non-synced routes such as auth/me and AI.
|
|
41
|
+
Built-in admin String-`_id` CRUD uses windowed syncdb; admin RPC uses its
|
|
42
|
+
host-bound fetch client; ObjectId compatibility CRUD remains RTK in Terreno 57.
|
|
40
43
|
|
|
41
44
|
Full reference: [docs/reference/syncdb.md](https://github.com/FlourishHealth/terreno/blob/master/docs/reference/syncdb.md)
|
|
42
45
|
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Upgrading to 57.4.0
|
|
2
|
+
|
|
3
|
+
**Action required:** Yes
|
|
4
|
+
**Affected packages:** @terreno/api, @terreno/ui, @terreno/admin-frontend, @terreno/admin-backend, @terreno/admin-spa, @terreno/announcements, @terreno/jobs, @terreno/mcp, @terreno/syncdb
|
|
5
|
+
|
|
6
|
+
## Summary
|
|
7
|
+
|
|
8
|
+
Bump every `@terreno/*` package together to `57.4.0`. This minor on the Expo SDK 57 line adds charts and dashboards, in-app notifications, product announcements, optional organizations, a framework audit log, durable jobs, MongoDB migrations, windowed admin sync, `create-terreno-app`, and first publish of `@terreno/announcements`. Scaffolding moves off the MCP `terreno_bootstrap_app` tool. Admin RTK `useAdminApi` is deprecated for Terreno 58. No Expo upgrade is required if you are already on `57.x`.
|
|
9
|
+
|
|
10
|
+
## Breaking changes
|
|
11
|
+
|
|
12
|
+
None
|
|
13
|
+
|
|
14
|
+
## Deprecations
|
|
15
|
+
|
|
16
|
+
### `useAdminApi` and the required admin `api` prop
|
|
17
|
+
|
|
18
|
+
These still work in 57.4.0 and will be removed in Terreno **58**:
|
|
19
|
+
|
|
20
|
+
- `@terreno/admin-frontend` `useAdminApi` (RTK `injectEndpoints`)
|
|
21
|
+
- required `api` prop on admin screens for eligible String-`_id` collections
|
|
22
|
+
|
|
23
|
+
New admin RPC uses host-bound `adminRequest` / `bindAdminRequest`. Eligible String-`_id` model CRUD uses windowed `@terreno/syncdb` (`AdminProvider` `syncDb`, `sync: {adminBroadcast: true}`). Keep passing `api` only for ObjectId / API-only hosts.
|
|
24
|
+
|
|
25
|
+
See [migrate-rtk-to-syncdb.md](../../../docs/how-to/migrate-rtk-to-syncdb.md).
|
|
26
|
+
|
|
27
|
+
## Changed behavior
|
|
28
|
+
|
|
29
|
+
### Scaffold with `create-terreno-app`, not MCP `terreno_bootstrap_app`
|
|
30
|
+
|
|
31
|
+
**What changed**
|
|
32
|
+
|
|
33
|
+
The MCP tool `terreno_bootstrap_app` is gone. The only supported scaffold is `bunx create-terreno-app` / `npm create terreno-app`. MCP still offers `terreno_bootstrap_ai_rules` for editor rules after the CLI runs.
|
|
34
|
+
|
|
35
|
+
**Why**
|
|
36
|
+
|
|
37
|
+
Generated apps need a deployable full-stack tree, not an in-chat file dump.
|
|
38
|
+
|
|
39
|
+
**Migration**
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Before
|
|
43
|
+
# Call MCP tool terreno_bootstrap_app
|
|
44
|
+
|
|
45
|
+
# After
|
|
46
|
+
bunx create-terreno-app
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Admin host auth for native fetch RPC
|
|
50
|
+
|
|
51
|
+
**What changed**
|
|
52
|
+
|
|
53
|
+
`AdminProvider` accepts host-injected `credentials` and `getAuthHeaders`. Hosts that inject those use native `adminRequest`. Hosts that pass only `api` keep RTK `injectEndpoints`. The admin SPA uses cookie `same-origin` credentials; the example app sends a Bearer token.
|
|
54
|
+
|
|
55
|
+
**Migration**
|
|
56
|
+
|
|
57
|
+
Cookie hosts:
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
<AdminProvider credentials="same-origin" /* ... */>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Bearer hosts:
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
<AdminProvider getAuthHeaders={async () => ({Authorization: `Bearer ${token}`})} /* ... */>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Hosts that only pass `api` do not need a change in 57.4.0.
|
|
70
|
+
|
|
71
|
+
### Admin HTTP scripts enqueue `admin/script` when `JobsApp` is registered
|
|
72
|
+
|
|
73
|
+
**What changed**
|
|
74
|
+
|
|
75
|
+
Admin panel HTTP script runs enqueue durable job `admin/script` when `JobsApp` is registered. The Scripts UI still polls `BackgroundTask`. If runner enqueue throws, the HTTP handler marks that `BackgroundTask` failed and returns 500. CLI script runs stay in-process.
|
|
76
|
+
|
|
77
|
+
**Migration**
|
|
78
|
+
|
|
79
|
+
If you register `JobsApp`, start a worker (`startWorker()`) so admin script runs execute. See [background-jobs.md](../../../docs/how-to/background-jobs.md).
|
|
80
|
+
|
|
81
|
+
### Combined `terreno-planning` plugin
|
|
82
|
+
|
|
83
|
+
**What changed**
|
|
84
|
+
|
|
85
|
+
The plugin now ships Terreno app, docs, upgrade, deployment, and verification skills with the lifecycle. Redundant `commit` and `create-pr` skills are removed in favor of Brew. Several unused Expo skills are no longer distributed. Plugin version is `2.12.0` after Taste re-verify and prepush gates.
|
|
86
|
+
|
|
87
|
+
**Migration**
|
|
88
|
+
|
|
89
|
+
Reinstall or update the `terreno-planning` plugin. Use Brew instead of the removed `commit` / `create-pr` skills.
|
|
90
|
+
|
|
91
|
+
## New capabilities
|
|
92
|
+
|
|
93
|
+
### Charts and dashboards
|
|
94
|
+
|
|
95
|
+
`@terreno/ui` ships `LineChart`, `BarChart`, `AreaChart`, `DonutChart`, and `DashboardGrid`. See [charts-and-dashboards.md](../../../docs/how-to/charts-and-dashboards.md).
|
|
96
|
+
|
|
97
|
+
### In-app notifications
|
|
98
|
+
|
|
99
|
+
Register `NotificationsApp`. Use `NotificationBell`, `NotificationInbox`, and `NotificationPreferences` from `@terreno/ui`. Inbox mutations use syncdb.
|
|
100
|
+
|
|
101
|
+
### Product announcements
|
|
102
|
+
|
|
103
|
+
`bun add @terreno/announcements` and register `AnnouncementsApp`. Frontend: `AnnouncementNavigator`. See [product-announcements.md](../../../docs/how-to/product-announcements.md).
|
|
104
|
+
|
|
105
|
+
### Optional organizations
|
|
106
|
+
|
|
107
|
+
Register `OrgsApp` for `Organization` / `Membership`, org context, and org-admin RBAC. Single-tenant apps stay unchanged.
|
|
108
|
+
|
|
109
|
+
### Audit log
|
|
110
|
+
|
|
111
|
+
Register `AuditApp` and set `audit: true` on `modelRouter`. See [audit-log.md](../../../docs/how-to/audit-log.md).
|
|
112
|
+
|
|
113
|
+
### Durable jobs
|
|
114
|
+
|
|
115
|
+
`@terreno/jobs` `JobsApp` with Mongo, GCP Cloud Tasks, or Vercel Queues runners. See [background-jobs.md](../../../docs/how-to/background-jobs.md).
|
|
116
|
+
|
|
117
|
+
### MongoDB migrations
|
|
118
|
+
|
|
119
|
+
`terreno-migrate` plus `TerrenoApp` `migrations.runOnStart`. Production wet apply requires `ALLOW_MIGRATIONS=true`.
|
|
120
|
+
|
|
121
|
+
### Windowed admin sync
|
|
122
|
+
|
|
123
|
+
Set `sync: {adminBroadcast: true}` and pass `syncDb` into `AdminProvider`. `GET /admin/config` includes `adminBroadcast` / `syncCollection`.
|
|
124
|
+
|
|
125
|
+
### `create-terreno-app`
|
|
126
|
+
|
|
127
|
+
Unscoped CLI published in lockstep. Generated scaffolds pin `^57.4.0` on Terreno dependencies.
|
|
128
|
+
|
|
129
|
+
### DataTable server-side filtering
|
|
130
|
+
|
|
131
|
+
Optional `onQueryChange` / `buildDataTableListQuery`. Admin tables adopt the same filter/search UI.
|
|
132
|
+
|
|
133
|
+
## Verification
|
|
134
|
+
|
|
135
|
+
- `bun add` every `@terreno/*` dependency to `57.4.0`, then `bun run compile` and `bun run lint` at the app root
|
|
136
|
+
- `cd <your frontend> && bun run sdk` after pulling `@terreno/api` (notifications, orgs, audit, migrations, jobs, announcements)
|
|
137
|
+
- Replace any `terreno_bootstrap_app` MCP usage with `bunx create-terreno-app`
|
|
138
|
+
- If you use admin RPC, inject `credentials` or `getAuthHeaders` (or keep `api` until Terreno 58)
|
|
139
|
+
- If you register `JobsApp`, confirm `startWorker()` so admin scripts and enqueued jobs run
|
|
140
|
+
- If you enable windowed admin, confirm `adminBroadcast` on the collection and a `Refresh` control on `AdminModelTable`
|
|
@@ -41,9 +41,11 @@ Canonical copy, language rules, and the Django/Rails comparison:
|
|
|
41
41
|
| [@terreno/admin-frontend](reference/admin-frontend.md) | Admin panel frontend screens for `@terreno/api` backends |
|
|
42
42
|
| [@terreno/admin-spa](reference/admin-spa.md) | Standalone admin SPA (Expo Router web) plus Express serve plugin |
|
|
43
43
|
| [@terreno/api-health](reference/api-health.md) | Health check plugin for `@terreno/api` |
|
|
44
|
+
| [@terreno/announcements](reference/announcements.md) | In-app product update announcements |
|
|
44
45
|
| [@terreno/comms](reference/comms.md) | Pluggable communications providers |
|
|
45
46
|
| [@terreno/feature-flags](reference/feature-flags.md) | Feature flags and A/B testing plugin for `@terreno/api` |
|
|
46
47
|
| [@terreno/mcp](reference/mcp-server.md) | MCP server that gives coding agents Terreno docs, codegen tools, and prompts |
|
|
48
|
+
| [create-terreno-app](reference/create-terreno-app.md) | CLI to scaffold a deployable full-stack Terreno app (`bunx create-terreno-app`) |
|
|
47
49
|
|
|
48
50
|
### Legacy
|
|
49
51
|
|
|
@@ -56,6 +58,7 @@ Canonical copy, language rules, and the Django/Rails comparison:
|
|
|
56
58
|
## Quick links
|
|
57
59
|
|
|
58
60
|
- [Getting started](tutorials/getting-started.md)
|
|
61
|
+
- [Create a Terreno app](how-to/create-a-terreno-app.md)
|
|
59
62
|
- [Positioning](explanation/positioning.md)
|
|
60
63
|
- [How admin interfaces are shaped](explanation/admin-interface.md)
|
|
61
64
|
- [Build admin screens](how-to/build-admin-screens.md)
|
|
@@ -11,11 +11,13 @@ Understanding-oriented documentation: concepts, architecture, and context.
|
|
|
11
11
|
## Contents
|
|
12
12
|
|
|
13
13
|
- [Local-first data](local-first-data.md) — Why the local store is the UI source of truth
|
|
14
|
+
- [Planning plugins](planning-plugins.md) — How the lifecycle and scan plugins divide discovery from delivery
|
|
14
15
|
- [Loop engineering](loop-engineering.md) — Fresh-invocation lifecycle, state, evidence, and orchestration boundaries
|
|
15
16
|
- [GitHub issue lifecycle](../how-to/github-issue-lifecycle.md) — Pick-ready issues and plan comments for Pick/Roast
|
|
16
17
|
- [Install agent skills](../how-to/install-agent-skills.md) — `npx skills add FlourishHealth/terreno`
|
|
17
18
|
- [AI-powered workflows](ai-workflows.md) — Autonomous documentation, testing, and maintenance workflows
|
|
18
19
|
- [Authentication architecture](authentication.md) — Better Auth, JWT, and optional MCP service tokens
|
|
20
|
+
- [Organization tenancy](organizations.md) — Optional Membership-backed tenancy, context, and isolation boundaries
|
|
19
21
|
- [Configuration system](configuration-system.md) — Runtime configuration with database persistence
|
|
20
22
|
- [Dependency management](dependency-management.md) — Catalog pins, exercise tests, fingerprint freeze
|
|
21
23
|
- [Modular API design](modular-api-design.md) — 🚧 Why TerrenoApp replaces setupServer
|
|
@@ -29,5 +31,6 @@ Understanding-oriented documentation: concepts, architecture, and context.
|
|
|
29
31
|
- [Admin plugin frontend widgets](admin-plugin-frontend.md) — Widget IDs from backend plugins
|
|
30
32
|
- [Consent admin migration](admin-consent-migration.md) — Which consent screens stay hand-written
|
|
31
33
|
- [Public roadmap process](roadmap-process.md) — GitHub roadmap vs Linear execution
|
|
34
|
+
- [Example app coverage](example-coverage.md) — Which framework capabilities the example apps exercise
|
|
32
35
|
- [Repository settings](repository-settings.md) — Maintainer GitHub settings that cannot be committed
|
|
33
|
-
- [
|
|
36
|
+
- [Why Terreno owns chart SVG](charts.md) — Owned `react-native-svg` vs victory-native
|
|
@@ -12,22 +12,25 @@ workflow (consent publish, comms message detail, password-on-create).
|
|
|
12
12
|
|
|
13
13
|
## Two hosts
|
|
14
14
|
|
|
15
|
-
| Host | When to use | Route prefix (`routeBase`) | API prefix (`apiBase`) |
|
|
16
|
-
| --- | --- | --- | --- |
|
|
17
|
-
| Embedded (`example-frontend/app/admin`) | Admin lives inside the product Expo app | `"/admin"` | `"/admin"` |
|
|
18
|
-
| Standalone (`@terreno/admin-spa`) | Same-origin console served by `AdminSpaServeApp` | `""` (SPA root; mount is `/console`) | `"/admin"` |
|
|
15
|
+
| Host | When to use | Route prefix (`routeBase`) | API prefix (`apiBase`) | Fetch auth |
|
|
16
|
+
| --- | --- | --- | --- | --- |
|
|
17
|
+
| Embedded (`example-frontend/app/admin`) | Admin lives inside the product Expo app | `"/admin"` | `"/admin"` | `getAuthHeaders` → Bearer, plus `apiOrigin` = RTK `baseUrl` so RPC does not hit the Expo origin |
|
|
18
|
+
| Standalone (`@terreno/admin-spa`) | Same-origin console served by `AdminSpaServeApp` | `""` (SPA root; mount is `/console`) | `"/admin"` | `credentials="same-origin"`; empty `getAuthHeaders`; omit `apiOrigin` |
|
|
19
19
|
|
|
20
20
|
`apiBase` is the HTTP path for `/config` and CRUD. `routeBase` is the Expo Router
|
|
21
21
|
prefix the sidebar concatenates onto `/{model.name}` and `/{screen.name}`. Mixing
|
|
22
|
-
them puts nav on the wrong URL.
|
|
22
|
+
them puts nav on the wrong URL. Embedded hosts must also set `apiOrigin` (the
|
|
23
|
+
backend origin, e.g. `http://localhost:4000`) on `AdminProvider`. Native `fetch`
|
|
24
|
+
RPC uses that origin to prefix `/admin/config` and `/rbac/roles`. Do not put the
|
|
25
|
+
origin in `apiBase` — that would rewrite in-app navigation.
|
|
23
26
|
|
|
24
27
|
## Screen kinds
|
|
25
28
|
|
|
26
29
|
| Kind | Source of truth | Frontend |
|
|
27
30
|
| --- | --- | --- |
|
|
28
|
-
| Model changelist / form | `modelRouter({admin: ...})` or plugin `adminContribution()` | `AdminScreenRouter` → `AdminModelTable` / `AdminModelForm` |
|
|
31
|
+
| Model changelist / form | `modelRouter({admin: ...})` or plugin `adminContribution()` | `AdminScreenRouter` → `AdminModelTable` / `AdminModelForm` (list filters live on `DataTable`, not a side drawer) |
|
|
29
32
|
| Custom screen | `AdminApp.customScreens` or plugin `customScreens` (`name` + `displayName`) | Matching `AdminProvider.widgets.screens[name]`, or a dedicated Expo route |
|
|
30
|
-
| Platform tool | Built-in (`scripts`, `roles`, `version`, `configuration`, audit log, feature flags) | Sidebar **Platform** section; visibility from `/admin/config.platformTools` |
|
|
33
|
+
| Platform tool | Built-in (`scripts`, `roles`, `version`, `configuration`, audit log, feature flags, jobs) | Sidebar **Platform** section; visibility from `/admin/config.platformTools` (jobs is lifted from `customScreens`) |
|
|
31
34
|
| Home widget | `AdminApp.home.slots` IDs | `AdminProvider.widgets.home` (built-ins already registered) |
|
|
32
35
|
|
|
33
36
|
`GET /admin/config` is caller-specific. Models and custom screens without read
|
|
@@ -41,12 +44,16 @@ app-level nav inside admin.
|
|
|
41
44
|
Order in the rail:
|
|
42
45
|
|
|
43
46
|
1. **Home** → `{routeBase}/`
|
|
44
|
-
2. **Models** grouped by `admin.group` (ungrouped models land in **General**)
|
|
45
|
-
3. **Screens**
|
|
46
|
-
4. **Platform** — Scripts (`/__scripts`),
|
|
47
|
+
2. **Models** grouped by `admin.group` (ungrouped models land in **General**). Custom screens with `group` render inside the matching group **before** model links for that group. A grouped screen with no models still gets its own group heading.
|
|
48
|
+
3. **Screens** — only `customScreens` **without** `group` (plus optional host extras)
|
|
49
|
+
4. **Platform** — Scripts (`/__scripts`), Migrations (`/__migrations` when
|
|
50
|
+
`migrations.enabled`), Roles, Version, Audit Log, Feature Flags, Jobs, Configuration
|
|
47
51
|
|
|
48
52
|
Audit log and Feature Flags are models, but the shell lifts them into Platform so
|
|
49
|
-
operators do not hunt for them among business collections.
|
|
53
|
+
operators do not hunt for them among business collections. The Platform Audit Log
|
|
54
|
+
row is `AuditEvent` when `AuditApp` is registered. `isAuditLogModel` also matches
|
|
55
|
+
legacy `AdminAuditLog`, `audit-log`, and `audit-events` names. Jobs is a custom
|
|
56
|
+
screen (`name: "jobs"`); the shell lifts it the same way.
|
|
50
57
|
|
|
51
58
|
Below 768px the rail becomes a hamburger drawer. The main column is a body-style
|
|
52
59
|
canvas (`neutral-050`). Nested `Page` screens use `color="transparent"` and
|
|
@@ -59,12 +66,12 @@ canvas (`neutral-050`). Nested `Page` screens use `color="transparent"` and
|
|
|
59
66
|
| Concern | Location |
|
|
60
67
|
| --- | --- |
|
|
61
68
|
| Which models appear | `modelRouter` `admin` block, or plugin `adminContribution()` |
|
|
62
|
-
| Extra non-CRUD pages | `AdminApp.customScreens` + `widgets.screens` with the **same** `name` |
|
|
69
|
+
| Extra non-CRUD pages | `AdminApp.customScreens` + `widgets.screens` with the **same** `name`. Optional `group` places the screen in that sidebar group (see **Models** above). |
|
|
63
70
|
| Home dashboard composition | `AdminApp.home.slots` |
|
|
64
71
|
| Field widgets | `admin.fieldOverrides.widget` + `widgets.fields` |
|
|
65
72
|
| Expo files | `app/admin/_layout.tsx` (shell once) or per-route shell in admin-spa |
|
|
66
73
|
| Dedicated extra segments (`/comms/:id`) | Explicit Expo files so `[model]/[id]` does not treat them as generic forms |
|
|
67
|
-
| Data fetching | `
|
|
74
|
+
| Data fetching | REST remains membership/search/sort/pagination. String `_id` models with `adminBroadcast` overlay TinyBase and write through syncdb when the host passes a window client + fetch auth. Framework RPC uses host-bound fetch; ObjectId/API-only CRUD keeps RTK compatibility in Terreno 57. |
|
|
68
75
|
|
|
69
76
|
## Related
|
|
70
77
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Why Terreno owns chart SVG
|
|
2
|
+
|
|
3
|
+
Terreno charts are drawn with `react-native-svg` and private `d3-scale` / `d3-shape` helpers inside `@terreno/ui`. Apps import `LineChart`, `BarChart`, `AreaChart`, and `DonutChart` — not d3 types and not a third-party chart API.
|
|
4
|
+
|
|
5
|
+
`victory-native` was rejected for this slice: Skia canvas fights Terreno theme fonts, bun tests, and accessibility. Owned SVG lets axis labels stay `@terreno/ui` `Text` (Nunito/Titillium) and lets hit targets stay clickable `Box`es with `testID`s.
|
|
6
|
+
|
|
7
|
+
`BarChart` grows each bar from the zero baseline (up for positives, down for negatives). A zero value draws no sliver; the press/hover hit stays at least 24px so the tooltip still works.
|
|
8
|
+
|
|
9
|
+
`DonutChart` uses `d3-shape` `arc` angles (`0` is 12 o'clock, clockwise). Slice press/hover hits use the same paint transform so the tooltip lands on the visible slice.
|
|
10
|
+
|
|
11
|
+
Axis ticks and donut legend labels use `Text` with `skipLinking`, matching `ChartFrame` tooltips, so a URL in `point.label` stays inert text instead of `Linking.openURL`.
|
|
12
|
+
|
|
13
|
+
Sizing flows one way: the frame stretches to the container (`alignSelf: stretch`), the plot
|
|
14
|
+
measures itself with `onLayout`, and the drawing is clipped to that measurement. Nothing inside a
|
|
15
|
+
chart may set its own min-content width, or the container would size to the chart and the chart
|
|
16
|
+
would size to the container. That is why x tick labels are absolutely positioned on their band
|
|
17
|
+
centers instead of laid out in a row, and why the plot column sets `minWidth: 0`.
|
|
18
|
+
|
|
19
|
+
Height works the same way: `height` is the whole chart, and the tick row, tooltip row, and legend
|
|
20
|
+
row come out of that budget. A chart therefore fits a fixed-height slot, and reserving the tooltip
|
|
21
|
+
row even when no tooltip is showing keeps hovering from reflowing the page.
|
|
22
|
+
|
|
23
|
+
`DashboardGrid` is layout only, so it stays on the eager root export. Chart implementations sit behind the same lazy root boundary as `GPTChat`. Cell width subtracts flex `gap` so `md`/`lg` column counts actually fit.
|
|
24
|
+
|
|
25
|
+
Chart paint is proven with **rendered PNG goldens**, not React test-renderer JSON.
|
|
26
|
+
`bun run ui:charts:compare` opens the demo gallery
|
|
27
|
+
(`/demo/chart-visual-gallery`), screenshots each fixture from easy to hard, and
|
|
28
|
+
pixel-diffs against `demo/rendered-snapshots/`. Agents use the `review-chart-visuals`
|
|
29
|
+
skill to read golden / actual / diff images when a compare fails.
|
|
@@ -11,6 +11,8 @@ flowchart TD
|
|
|
11
11
|
U["User<br/>iOS / Android / Web"]
|
|
12
12
|
CDN["Cloud CDN + GCS bucket<br/>expo export -p web output"]
|
|
13
13
|
CR["Cloud Run<br/>@terreno/api backend"]
|
|
14
|
+
CT["Cloud Tasks<br/>durable jobs push queue"]
|
|
15
|
+
JW["Cloud Run<br/>private jobs worker service"]
|
|
14
16
|
SM["Secret Manager<br/>auth secrets, MONGO_URI"]
|
|
15
17
|
AT["MongoDB Atlas<br/>replica set (change streams)"]
|
|
16
18
|
GCS["GCS bucket<br/>user file uploads"]
|
|
@@ -21,6 +23,9 @@ flowchart TD
|
|
|
21
23
|
CR --> SM
|
|
22
24
|
CR --> AT
|
|
23
25
|
CR --> GCS
|
|
26
|
+
CR -->|"enqueue"| CT
|
|
27
|
+
CT -->|"OIDC POST /jobs/execute"| JW
|
|
28
|
+
JW --> AT
|
|
24
29
|
AR --> CR
|
|
25
30
|
```
|
|
26
31
|
|
|
@@ -30,6 +35,8 @@ flowchart TD
|
|
|
30
35
|
|-----------|------|
|
|
31
36
|
| **Artifact Registry** | Stores versioned backend container images built from `example-backend/Dockerfile` |
|
|
32
37
|
| **Cloud Run** | Runs the long-lived `@terreno/api` process (HTTP + Socket.io) |
|
|
38
|
+
| **Cloud Tasks** | Dispatches persisted `@terreno/jobs` rows to an authenticated HTTP worker with queue-level concurrency limits |
|
|
39
|
+
| **Jobs worker service** | Runs the same example-backend image and job definitions; exposes only the Cloud Tasks execute callback through Cloud Run IAM |
|
|
33
40
|
| **Secret Manager** | Holds `MONGO_URI`, JWT secrets, and other credentials — mounted as env vars |
|
|
34
41
|
| **MongoDB Atlas** | Primary database; must be a replica set for change streams (realtime, feature flags) |
|
|
35
42
|
| **GCS (web bucket)** | Serves static web export; CDN caches at the edge |
|
|
@@ -59,6 +66,31 @@ flowchart TD
|
|
|
59
66
|
|
|
60
67
|
Native iOS and Android apps call Cloud Run directly; only the web client uses the CDN origin.
|
|
61
68
|
|
|
69
|
+
## Durable jobs and PR isolation
|
|
70
|
+
|
|
71
|
+
Cloud Tasks is a push service; it does not expose a pull-consumer API. Cloud Run worker
|
|
72
|
+
pools do not have HTTP ingress, so the example uses a private Cloud Run service as the
|
|
73
|
+
execution pool. Queue rate limits bound dispatch concurrency and Cloud Run scales the
|
|
74
|
+
worker instances.
|
|
75
|
+
|
|
76
|
+
Production and PR revisions share one queue safely because every task stores its complete
|
|
77
|
+
callback URL. A PR backend targets the matching `pr-<number>` worker tag and uses
|
|
78
|
+
`terreno-example-pr-<number>` as its Mongo database. Removing a preview removes both
|
|
79
|
+
service tags. An old callback then fails closed instead of reaching production or another
|
|
80
|
+
PR. A failed backend preview tag cannot stay on a not-Ready revision: CD rebuilds traffic
|
|
81
|
+
from Ready tags, deploys the new revision without `--tag`, then tags it.
|
|
82
|
+
|
|
83
|
+
Every example-frontend PR preview is paired with this isolated backend, including
|
|
84
|
+
frontend-only PRs. The exported Netlify bundle targets the matching `pr-<number>` Cloud
|
|
85
|
+
Run tag, whose CORS configuration trusts only that preview origin. Preview clients never
|
|
86
|
+
fall back to the production backend or production database.
|
|
87
|
+
|
|
88
|
+
Queue IAM grants `cloudtasks.enqueuer` and `iam.serviceAccountUser` on
|
|
89
|
+
`terreno-jobs-invoker` only to `terreno-backend-runtime`, the example API Cloud Run
|
|
90
|
+
identity. The project default Compute Engine SA (MCP and any other service that omits a
|
|
91
|
+
runtime identity) cannot create tasks that present that OIDC token. The worker remains
|
|
92
|
+
invokable only by `terreno-jobs-invoker`.
|
|
93
|
+
|
|
62
94
|
## Related
|
|
63
95
|
|
|
64
96
|
- [Deployment baseline](deployment-baseline.md) — seven requirements every host must satisfy
|
|
@@ -73,6 +73,6 @@ Three details consumers get wrong:
|
|
|
73
73
|
|
|
74
74
|
- **`PORT`** — Cloud Run and other platforms assign the listen port via `PORT`. Terreno reads `process.env.PORT` in `api/src/terrenoApp.ts` (default `9000` if unset).
|
|
75
75
|
- **Non-root** — Do not run the container as root in production.
|
|
76
|
-
- **Compile order** — Workspace packages (`@terreno/api`, `@terreno/test`, etc.) must compile before the example backend bundles.
|
|
76
|
+
- **Compile order** — Workspace packages (`@terreno/api`, `@terreno/jobs`, `@terreno/test`, etc.) must compile before the example backend bundles. Compile `@terreno/jobs` before `@terreno/admin-backend` — admin-backend imports jobs. The image `exports` point at `dist/`, so skipping a workspace compile fails `bun build --compile` with an unresolved `@terreno/*` import.
|
|
77
77
|
|
|
78
78
|
CI builds the image on every PR that touches backend paths (`.github/workflows/example-backend-docker.yml`).
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Example app coverage
|
|
2
|
+
|
|
3
|
+
The `example-backend` and `example-frontend` apps are the living checklist for
|
|
4
|
+
framework capabilities. When you add a capability to `@terreno/*`, update this
|
|
5
|
+
matrix in the same slice.
|
|
6
|
+
|
|
7
|
+
Citations are paths from the repository root. A "yes" means a reader can follow
|
|
8
|
+
that file (and its imports) to a working example. Gaps stay explicit.
|
|
9
|
+
|
|
10
|
+
## Capability matrix
|
|
11
|
+
|
|
12
|
+
| Capability | example-backend | example-frontend | Notes |
|
|
13
|
+
| --- | --- | --- | --- |
|
|
14
|
+
| `modelRouter` CRUD | yes — `example-backend/src/api/todos.ts` | yes — `example-frontend/components/SyncTodosScreen.tsx` (syncdb hooks generated from the same collection) | Todos are synced; list/create/update/delete go through `@terreno/syncdb`, not RTK collection hooks. |
|
|
15
|
+
| Owner permissions | yes — `OwnerQueryFilter` + `Permissions.IsOwner` in `example-backend/src/api/todos.ts` | yes — the todos screen only shows the signed-in user's rows after sync scopes apply | Also gated by RBAC `access: {resource: "todo"}`. |
|
|
16
|
+
| Admin panel (embedded) | yes — Admin plugin registration in `example-backend/src/server.ts` | yes — `example-frontend/app/admin/` | Expo routes wrap `@terreno/admin-frontend` screens. |
|
|
17
|
+
| Admin SPA | yes — `AdminSpaServeApp` in `example-backend/src/server.ts` | n/a | Standalone SPA is served from the backend; not a frontend route. |
|
|
18
|
+
| AI streaming chat | yes — `example-backend/src/api/ai.ts` (`addGptRoutes`) | yes — `example-frontend/app/(tabs)/ai.tsx` (`GPTChat`, optional `mascot`) | Empty-chat mascot is consumer-owned; the example fox is not a framework default. |
|
|
19
|
+
| AI structured output | no | no | `@terreno/ai` supports structured generation; the example only streams chat. Recorded gap — not claimed by a current tutorial. |
|
|
20
|
+
| Feature flags + live updates | yes — `FeatureFlagsApp` in `example-backend/src/server.ts`, seed `example-backend/src/scripts/seed-feature-flags.ts` | yes — `useTerrenoFeatureFlags` in `example-frontend/app/_layout.tsx` | Socket-backed live updates share the realtime connection. |
|
|
21
|
+
| Websockets / realtime | yes — `RealtimeApp` in `example-backend/src/server.ts`, `example-backend/src/websockets.ts` | yes — `useSocketConnection` in `example-frontend/app/_layout.tsx` | Sync deltas also use the socket (`SyncApp` + `@terreno/syncdb`). |
|
|
22
|
+
| Consent forms | yes — `example-backend/src/consentDefinitions.ts`, seed scripts | yes — `example-frontend/app/(tabs)/consents.tsx`, admin `example-frontend/app/admin/consent-forms/` | First-login flow is covered by e2e (`example-frontend/e2e/consents.spec.ts`). |
|
|
23
|
+
| File upload / GCS | yes — `example-backend/src/api/settings.ts`, AI file routes in `example-backend/src/api/ai.ts` | yes — `example-frontend/app/(tabs)/files.tsx`, `example-frontend/app/gcs-settings.tsx` | |
|
|
24
|
+
| Better Auth | yes — `example-backend/src/utils/betterAuthConfig.ts`, `BetterAuthApp` in `example-backend/src/server.ts` | yes — `example-frontend/app/login.tsx`, `example-frontend/lib/betterAuth.ts` | Default `AUTH_PROVIDER` is `better-auth`. |
|
|
25
|
+
| syncdb local-first | yes — `SyncApp` in `example-backend/src/server.ts` | yes — `example-frontend/store/syncdb.ts`, `example-frontend/app/(tabs)/index.tsx` | PR #869 closed without merge; `@terreno/syncdb` shipped on the launch line and is the example todos path. |
|
|
26
|
+
| RBAC | yes — `example-backend/src/rbacRoles.ts`, `access.ts`, `access: {resource: "todo"}` on the todo router | yes — `example-frontend/app/admin/roles.tsx` | Shipped. The IP snapshot that marked RBAC "not shipped" is stale. Plan: [rbac-permissions.md](../implementationPlans/rbac-permissions.md). |
|
|
27
|
+
| Organizations | yes — `createAccess({organizations: true})`, `organizationSettingsSchema`, `orgScopedPlugin` on projects | yes — admin org directory/settings at `example-frontend/app/admin/orgs/` | Settings live on `Organization.settings`; example registers a nested timezone schema. |
|
|
28
|
+
| Background jobs | no | no | No generic job queue example. Admin maintenance scripts (`example-backend/src/adminScripts.ts`, script runner widget) are a related but different surface. Plan: [admin-script-runner.md](../implementationPlans/admin-script-runner.md). |
|
|
29
|
+
|
|
30
|
+
## Gaps
|
|
31
|
+
|
|
32
|
+
| Gap | Why it stays | Follow-up |
|
|
33
|
+
| --- | --- | --- |
|
|
34
|
+
| AI structured output | Chat streaming already demonstrates the AI pillar; structured `generateObject`-style routes are unused by current tutorials | Track with [AI-first tutorials #1010](https://github.com/FlourishHealth/terreno/issues/1010) (`add-ai-features.md` requires one structured-output call). |
|
|
35
|
+
| Generic background jobs | Unshipped as a first-class example; do not invent a queue UI here | Track with [Durable background jobs #1188](https://github.com/FlourishHealth/terreno/issues/1188). Admin script runner is a related surface — [admin-script-runner.md](../implementationPlans/admin-script-runner.md). |
|
|
36
|
+
|
|
37
|
+
## Keeping the matrix true
|
|
38
|
+
|
|
39
|
+
When you add a framework capability:
|
|
40
|
+
|
|
41
|
+
1. Exercise it in `example-backend` and/or `example-frontend`.
|
|
42
|
+
2. Update this page (cite the file).
|
|
43
|
+
3. Mention the example in the PR.
|
|
@@ -27,7 +27,10 @@ Think **apply locally, then reconcile** instead of **request, wait, update cache
|
|
|
27
27
|
3. **Refetch orchestration** — `invalidatesTags`, `refetch()`, and list/detail cache coordination after mutations.
|
|
28
28
|
4. **Treating the network as the read path** — list screens blocked on `isLoading` for every navigation.
|
|
29
29
|
|
|
30
|
-
RTK Query remains appropriate for **non-synced** endpoints
|
|
30
|
+
RTK Query remains appropriate for **non-synced generated** endpoints such as
|
|
31
|
+
`/auth/me` and AI routes. Built-in admin RPC stays request/response through its
|
|
32
|
+
host-bound fetch client; ObjectId/API-only admin CRUD keeps RTK compatibility in
|
|
33
|
+
Terreno 57.
|
|
31
34
|
|
|
32
35
|
## What you start doing
|
|
33
36
|
|
|
@@ -35,7 +38,7 @@ RTK Query remains appropriate for **non-synced** endpoints: `/auth/me`, admin RP
|
|
|
35
38
|
2. **Sync-status UX** — Surface offline state, queued mutations, and drain progress with `useSyncStatus` (and optionally `SyncStatusBanner`).
|
|
36
39
|
3. **Encryption at rest (web)** — Web persistence uses AES-GCM via the default `createServerKeyProvider`; understand key fetch and `onDecryptFailure` for support flows.
|
|
37
40
|
4. **Key lifecycle on logout** — Call `syncDb.stop()` and consider `wipeLocalData` when the authenticated user changes so one account does not read another's local store.
|
|
38
|
-
5. **Backend sync registration** — Every synced collection needs `syncPlugin`, `isDeletedPlugin`, and a `sync` block on `modelRouter`, plus `SyncApp` and `RealtimeApp` on the server.
|
|
41
|
+
5. **Backend sync registration** — Every synced collection needs `syncPlugin`, `isDeletedPlugin`, and a `sync` block on `modelRouter`, plus `SyncApp` and `RealtimeApp` on the server. Optional `sync.adminBroadcast: true` also emits `sync:delta` to `{collection}|admin`. Admin clients subscribe with `mode: "window"` (`createSyncDb({windowCollections})`) so they do not snapshot or reconcile that collection; they call `hydrateWindow` (REST membership ids + `GET /sync/entities`). Pass the same `accessControl` into `SyncApp` that `AdminApp` uses so `{collection}|admin` requires `admin:access`. `AdminApp.register` also installs that model's admin list/read/`queryFilter` on the admin window so hydrate and live `|admin` deltas match `/admin` REST. Without RBAC, `user.admin` is enough for the shell gate. Live deltas on that stream apply only to ids already in the window; Refresh is a REST re-query plus `hydrateWindow`.
|
|
39
42
|
|
|
40
43
|
## Tradeoffs
|
|
41
44
|
|