@terreno/mcp 57.6.1 → 57.8.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/resources/ui.md +5 -4
- package/dist/docs/upgrades/57.7.0.md +64 -0
- package/dist/docs/upgrades/57.8.0.md +61 -0
- package/dist/docs/upgrades/58.0.0.md +4 -0
- package/dist/docs/versioned/next/explanation/example-coverage.md +1 -0
- package/dist/docs/versioned/next/explanation/loop-engineering.md +32 -3
- package/dist/docs/versioned/next/explanation/model-router-actions.md +1 -1
- 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 +285 -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 +121 -64
- package/dist/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/dist/docs/versioned/next/how-to/preview-demo.md +19 -0
- package/dist/docs/versioned/next/how-to/product-announcements.md +3 -0
- 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/demo-workshop.md +219 -0
- 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/ai.md +3 -1
- package/dist/docs/versioned/next/reference/announcement-release-packs.md +146 -0
- package/dist/docs/versioned/next/reference/announcements.md +7 -3
- package/dist/docs/versioned/next/reference/api.md +1 -0
- package/dist/docs/versioned/next/reference/environment-variables.md +1 -0
- 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 +79 -8
- 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/demo-workshop.md +150 -0
- 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/resources/ui.md +5 -4
- package/src/docs/upgrades/57.7.0.md +64 -0
- package/src/docs/upgrades/57.8.0.md +61 -0
- package/src/docs/upgrades/58.0.0.md +4 -0
- package/src/docs/versioned/next/explanation/example-coverage.md +1 -0
- package/src/docs/versioned/next/explanation/loop-engineering.md +32 -3
- package/src/docs/versioned/next/explanation/model-router-actions.md +1 -1
- 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 +285 -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 +121 -64
- package/src/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/src/docs/versioned/next/how-to/preview-demo.md +19 -0
- package/src/docs/versioned/next/how-to/product-announcements.md +3 -0
- 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/demo-workshop.md +219 -0
- 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/ai.md +3 -1
- package/src/docs/versioned/next/reference/announcement-release-packs.md +146 -0
- package/src/docs/versioned/next/reference/announcements.md +7 -3
- package/src/docs/versioned/next/reference/api.md +1 -0
- package/src/docs/versioned/next/reference/environment-variables.md +1 -0
- 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 +79 -8
- 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/demo-workshop.md +150 -0
- 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
- package/dist/docs/ui-types-documentation.json +0 -33
- package/src/docs/ui-types-documentation.json +0 -33
|
@@ -4,17 +4,17 @@ CircleCI CI/CD source of truth. See
|
|
|
4
4
|
[`docs/implementationPlans/migrate-cicd-to-circleci.md`](../implementationPlans/migrate-cicd-to-circleci.md).
|
|
5
5
|
|
|
6
6
|
**Status:** CircleCI owns package CI, repo policies, Playwright e2e, Maestro web
|
|
7
|
-
e2e, architectural PR review,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
e2e, architectural PR review, semver-tag npm releases, and all continuous
|
|
8
|
+
deploys (Netlify demo / example frontend / docs, GCP terraform, Cloud Run
|
|
9
|
+
backend + tasks, MCP). The GitHub Actions deploy workflows are disabled and
|
|
10
|
+
kept only for rollback. CircleCI deploy jobs **fail** when `terreno-netlify`
|
|
11
|
+
or `terreno-gcp` is missing a value; they never skip green. GitHub-native
|
|
12
|
+
security, Cursor GitHub App checks (Approval / Security / Bugbot), and
|
|
13
|
+
repository automation remain enabled. EAS PR updates and the fingerprint gate
|
|
14
|
+
are temporarily disabled; manual EAS development dispatch remains available in
|
|
15
|
+
CircleCI. Preview **cleanup** on PR close is a thin GitHub
|
|
16
|
+
`preview-cleanup.yml` hook that starts a CircleCI `run-preview-cleanup`
|
|
17
|
+
pipeline.
|
|
18
18
|
|
|
19
19
|
## Project setup (maintainers)
|
|
20
20
|
|
|
@@ -23,9 +23,8 @@ CircleCI `run-preview-cleanup` parameter.
|
|
|
23
23
|
3. Enable **dynamic config** / setup workflows for the project (required for
|
|
24
24
|
`.circleci/config.yml` `setup: true`).
|
|
25
25
|
4. Create the contexts below (`terreno-netlify`, `terreno-gcp`, and the rest).
|
|
26
|
-
Copy Netlify and GCP values from GitHub Actions secrets/vars.
|
|
27
|
-
|
|
28
|
-
deployer.
|
|
26
|
+
Copy Netlify and GCP values from GitHub Actions secrets/vars. CircleCI is
|
|
27
|
+
the only deployer, so deploy jobs fail until these are set.
|
|
29
28
|
5. Set project Environment Variable `CODECOV_TOKEN` (Codecov upload token) so
|
|
30
29
|
package CI can upload `coverage/lcov.info`. Uploads skip when it is unset.
|
|
31
30
|
Mirror the same secret as GitHub Actions `CODECOV_TOKEN` for retained twins.
|
|
@@ -34,7 +33,7 @@ CircleCI `run-preview-cleanup` parameter.
|
|
|
34
33
|
6. Build forked PRs if you want DCO + rulesync on forks.
|
|
35
34
|
|
|
36
35
|
GitHub App org/project slug (API and CLI):
|
|
37
|
-
`circleci/6UHiK7pThPXbhnNi3umQNe/
|
|
36
|
+
`circleci/6UHiK7pThPXbhnNi3umQNe/LdjghuhydHjFMyFjcEXMA2`.
|
|
38
37
|
|
|
39
38
|
Do not query `gh/TerrenoLabs/terreno` — that slug returns `404 Project not found`.
|
|
40
39
|
Cloud agents use `CIRCLECI_TOKEN` (accepted alias of CircleCI's `CIRCLE_TOKEN`). Send
|
|
@@ -166,28 +165,62 @@ non-PR branch builds.
|
|
|
166
165
|
| Path (examples) | Parameter | PR job | `master` job |
|
|
167
166
|
| --- | --- | --- | --- |
|
|
168
167
|
| `demo/**`, `ui/**` | `run-deploy-demo` | `deploy-demo-preview` | `deploy-demo` |
|
|
169
|
-
| `example-frontend/**`, `admin-frontend/**`, `rtk
|
|
168
|
+
| `example-frontend/**`, `admin-frontend/**`, `rtk/**`, `ui/**`, `ai/**`, `syncdb/**`, `bun.lock` | `run-deploy-frontend` | `deploy-frontend-preview` | `deploy-frontend` |
|
|
170
169
|
| `docs/**`, `website/**` | `run-deploy-docs` | `deploy-docs-preview` | `deploy-docs` |
|
|
171
|
-
| `example-backend/**`, `api/**`, `comms
|
|
170
|
+
| `example-backend/**`, `api/**`, `comms/**`, `jobs/**`, `admin-spa/**`, `feature-flags/**`, `announcements/**`, plus every frontend path above | `run-cd-backend` | `gcp-cd-preview` | `gcp-cd-prod` |
|
|
172
171
|
| `terraform/**` | `run-cd-terraform` | `gcp-cd-preview` | `gcp-cd-prod` |
|
|
173
|
-
| `mcp-server/**` | `run-cd-mcp` | _(none)_ | `gcp-cd-prod` |
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
172
|
+
| `mcp-server/**`, `ui/**` | `run-cd-mcp` | _(none)_ | `gcp-cd-prod` (runs `mcp-server` `test:ci` first) |
|
|
173
|
+
|
|
174
|
+
The backend image bundles the admin SPA (ui, rtk, admin-frontend, syncdb), so
|
|
175
|
+
those paths redeploy the backend too. Every frontend PR preview therefore gets
|
|
176
|
+
an isolated `pr-N` backend: `deploy-frontend-preview` always points
|
|
177
|
+
`EXPO_PUBLIC_API_URL` at it (the prod backend rejects preview CORS) and waits
|
|
178
|
+
up to 20 minutes for its `/health` before publishing, because `gcp-cd-preview`
|
|
179
|
+
runs in a separate workflow.
|
|
180
|
+
|
|
181
|
+
Backend previews prune not-Ready tagged revisions from traffic
|
|
182
|
+
(`rebuild-cloud-run-ready-traffic.sh`), deploy untagged with
|
|
183
|
+
`--revision-suffix`, then point the `pr-N` tag at that revision. Terraform
|
|
184
|
+
preview always describes the Infra Manager preview (state, `errorCode`,
|
|
185
|
+
`errorLogs`) before delete, including when `previews create` fails. Fork PRs
|
|
186
|
+
still present `repository: TerrenoLabs/terreno` on the OIDC token, so WIF
|
|
187
|
+
would accept them if those jobs ran. Preview jobs halt on fork PRs, where CircleCI withholds contexts.
|
|
188
|
+
GitHub App builds do not set `CIRCLE_PR_USERNAME` / `CIRCLE_PR_REPONAME`;
|
|
189
|
+
`skip_if_fork_deploy` asks the pulls API and halts before
|
|
190
|
+
`require_*_context` would fail on those withheld secrets.
|
|
191
|
+
|
|
192
|
+
### GitHub Deployment records
|
|
193
|
+
|
|
194
|
+
Deploy scripts wrap the publish step in `with_github_deployment`
|
|
195
|
+
(`scripts/ci/github-deployment-lib.sh`): the deployment is created as
|
|
196
|
+
`in_progress` with the CircleCI job as `log_url`, then set to `success`
|
|
197
|
+
(with the environment URL) or `failure`. PR previews are transient; the rest
|
|
198
|
+
are production environments. Environment names match the retired GitHub
|
|
199
|
+
workflows, so history stays continuous:
|
|
200
|
+
|
|
201
|
+
| Job | Environment | URL |
|
|
202
|
+
| --- | --- | --- |
|
|
203
|
+
| `deploy-demo` / `deploy-demo-preview` | `demo` / `demo-preview-pr-N` | `terreno-demo.netlify.app` / `pr-N--terreno-demo.netlify.app` |
|
|
204
|
+
| `deploy-frontend` / `deploy-frontend-preview` | `example-frontend` / `example-frontend-preview-pr-N` | `terreno-frontend.netlify.app` / `pr-N--terreno-frontend.netlify.app` |
|
|
205
|
+
| `deploy-docs` / `deploy-docs-preview` | `docs` / `docs-preview-pr-N` | `terreno-docs.netlify.app` / `docs-pr-N--terreno-docs.netlify.app` |
|
|
206
|
+
| `gcp-cd-prod` backend / `gcp-cd-preview` | `example-backend-production` / `example-backend-preview-pr-N` | Cloud Run URL / `pr-N---` tag URL |
|
|
207
|
+
| `gcp-cd-prod` MCP | `mcp-production` | Cloud Run `terreno-mcp` URL |
|
|
208
|
+
|
|
209
|
+
Records are posted to `GITHUB_REPOSITORY` when that is set, otherwise
|
|
210
|
+
`TerrenoLabs/terreno`. CircleCI does not set `GITHUB_REPOSITORY`, and
|
|
211
|
+
`CIRCLE_PROJECT_USERNAME` can still be the pre-transfer `FlourishHealth`
|
|
212
|
+
project link, so the script does not use it. Recording is best-effort: an
|
|
213
|
+
unset `GITHUB_DEPLOYMENTS_TOKEN` or a GitHub API error prints a warning and
|
|
214
|
+
never fails the deploy. Terraform applies are not recorded. PR close
|
|
215
|
+
deactivates the preview environments (`preview-cleanup.yml`). The token lives
|
|
216
|
+
in its own context so the GitHub write scope is limited to deployments.
|
|
217
|
+
Same-repo PR pipelines can read every context their jobs attach, so keep this
|
|
218
|
+
token scoped to deployments.
|
|
219
|
+
|
|
220
|
+
Each deploy job has a `serial-group`: production jobs queue per target, and
|
|
221
|
+
previews queue per branch, so two master merges never apply terraform or roll
|
|
222
|
+
Cloud Run at the same time. Turn off Netlify's GitHub auto-build so only
|
|
223
|
+
CircleCI publishes.
|
|
191
224
|
|
|
192
225
|
## Contexts (create empty shells, then fill)
|
|
193
226
|
|
|
@@ -204,6 +237,7 @@ restrict `terreno-release` and `terreno-npm` to tag/manual release pipelines.
|
|
|
204
237
|
| `terreno-release` | `REPO_ADMIN_TOKEN`, `ZOOM_WEBHOOK_URL`, `ZOOM_WEBHOOK_TOKEN` | stable version bump + release notification |
|
|
205
238
|
| `terreno-agentic` | `CURSOR_API_KEY`, optional `CURSOR_MODEL` | `architectural-pr-review` |
|
|
206
239
|
| `terreno-github-api` | PAT (`pull-requests`, `contents`, …) | `dco`, `architectural-pr-review` |
|
|
240
|
+
| `terreno-github-deployments` | `GITHUB_DEPLOYMENTS_TOKEN`: fine-grained PAT on `TerrenoLabs/terreno` with **Deployments: read/write** and **Pull requests: read** only | GitHub Deployment records + preview PR lookup in every Netlify/GCP deploy job |
|
|
207
241
|
|
|
208
242
|
Until contexts exist, e2e jobs may use **project env vars for `E2E_*` secrets only**
|
|
209
243
|
(or the in-job `ci-e2e-*-secret` fallbacks). **Do not** put `GITHUB_TOKEN` (or any
|
|
@@ -215,10 +249,9 @@ project, leave fork-PR secret passing off, and attach that context **only** to
|
|
|
215
249
|
unset, and it skips fork PRs. The job checks out `origin/master` before running
|
|
216
250
|
the review script so a PR cannot rewrite the reviewer.
|
|
217
251
|
|
|
218
|
-
Netlify and GCP jobs **
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
change; skip-green no longer pays for a full `large` install. Docker Layer
|
|
252
|
+
Netlify and GCP jobs **validate their context as the first step** and fail,
|
|
253
|
+
before checkout or `bun install`, listing the missing variables. Preview jobs
|
|
254
|
+
halt earlier on fork PRs, where CircleCI withholds contexts. Docker Layer
|
|
222
255
|
Caching is off (200 credits per job). The docs Netlify target disables
|
|
223
256
|
Docusaurus minification so the build stays within the 8 GB `large` executor.
|
|
224
257
|
|
|
@@ -284,13 +317,13 @@ the same commands through the parameterized `packages-ci` job, gated by
|
|
|
284
317
|
|
|
285
318
|
CD replacement map:
|
|
286
319
|
|
|
287
|
-
| GHA job `name:` / workflow
|
|
320
|
+
| GHA job `name:` / workflow | CircleCI job |
|
|
288
321
|
|---------------------------------------------|----------------------|
|
|
289
322
|
| Fingerprint gate (`fingerprint-gate.yml`) | Temporarily disabled; no CircleCI automatic gate |
|
|
290
323
|
| EAS PR update/build (`eas-pr.yml`) | Temporarily disabled; use manual EAS dispatch |
|
|
291
324
|
| EAS dev build (`eas-dev-build.yml`) | CircleCI manual `eas-dev-target` |
|
|
292
325
|
| CD terraform / Cloud Run (`cd.yml`) | `gcp-cd-prod` (master) and `gcp-cd-preview` (PRs) |
|
|
293
|
-
| Preview cleanup (`preview-cleanup.yml`) |
|
|
326
|
+
| Preview cleanup (`preview-cleanup.yml`) | `preview-cleanup`, started by the GitHub PR-close hook |
|
|
294
327
|
| Netlify demo / frontend / docs deploys | production + `*-preview` jobs |
|
|
295
328
|
| Publish on tag (`publish-on-tag.yml`) | `publish-release` |
|
|
296
329
|
| Appium Android / iOS | Not ported (Maestro web is `maestro-e2e`) |
|
|
@@ -318,26 +351,52 @@ a closed PR.
|
|
|
318
351
|
`manual-publish-package` also accepts `feature-flags`. Versions must be semver.
|
|
319
352
|
Semver git tags (`57.3.0`, `57.3.0-beta.1`) automatically start
|
|
320
353
|
`publish-release`; prereleases publish to their prerelease npm dist-tag.
|
|
321
|
-
`
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
354
|
+
`publish-release` compiles the 16 lockstep packages once with
|
|
355
|
+
`bun run --filter ... compile` (dependency order), then runs
|
|
356
|
+
`scripts/ci/publish-package.sh` for all of them in parallel with
|
|
357
|
+
`TERRENO_PUBLISH_PREBUILT=1`. It does not rerun tests: the tagged commit
|
|
358
|
+
already passed CI on master, and rerunning every suite per package made
|
|
359
|
+
releases take 20+ minutes. The job has no Mongo sidecar. Each publish writes
|
|
360
|
+
its own temporary npmrc (`NPM_CONFIG_USERCONFIG`) so parallel publishes do not
|
|
361
|
+
remove each other's token.
|
|
362
|
+
|
|
363
|
+
`publish-package.sh` pins `workspace:*` to the tag version for the tarball.
|
|
364
|
+
It must not `bun install` after that pin: sibling `@terreno/*` packages are
|
|
365
|
+
not on npm yet, so bun would look up `@terreno/test@X.Y.Z` (and similar) on
|
|
366
|
+
the registry and fail the whole job. Without `TERRENO_PUBLISH_PREBUILT` (the
|
|
367
|
+
manual single-package publish), it compiles the package and its workspace
|
|
368
|
+
dependencies and runs `test:ci` when that script exists, not `test`.
|
|
369
|
+
`@terreno/ui`'s `test` is `bun test --watch` and would hang. If a package's
|
|
370
|
+
tag version is already on npm, `publish-package.sh` skips it so a recut of
|
|
371
|
+
the same tag can finish the rest.
|
|
372
|
+
|
|
373
|
+
Only stable tags (`57.3.0`) run `deploy-demo`. It builds the demo from source,
|
|
374
|
+
so it runs alongside `publish-release` instead of waiting for it. Use
|
|
332
375
|
`{"run-demo-deploy":true}` on `master` if a prerelease must also refresh the
|
|
333
376
|
demo site.
|
|
334
377
|
|
|
335
|
-
|
|
336
|
-
`
|
|
337
|
-
`
|
|
378
|
+
`scripts/ci/netlify-deploy.sh` builds each site itself and calls
|
|
379
|
+
`netlify deploy --no-build`. Without `--no-build`, netlify-cli runs the root
|
|
380
|
+
`netlify.toml` docs build (wipe `node_modules`, reinstall, full Docusaurus),
|
|
381
|
+
which added about 3.5 minutes to every demo and frontend deploy.
|
|
382
|
+
|
|
383
|
+
CircleCI does not receive GitHub `pull_request.closed` events, so
|
|
384
|
+
`.github/workflows/preview-cleanup.yml` forwards them: it runs master's
|
|
385
|
+
`scripts/ci/trigger-circleci-pipeline.sh` with `{"run-preview-cleanup":"<PR>"}`
|
|
386
|
+
and deactivates the PR's old GitHub Deployments. The manual GHA publisher
|
|
387
|
+
(`publish-on-tag.yml`) uses the same script to start `{"run-demo-deploy":true}`
|
|
388
|
+
on `master`. Both need the GitHub secret `CIRCLECI_TOKEN` (a CircleCI personal
|
|
389
|
+
or project API token) and the repository variable
|
|
390
|
+
`CIRCLECI_PIPELINE_DEFINITION_ID` (Project Settings → Pipelines, or
|
|
391
|
+
`GET /api/v2/projects/<project id>/pipeline-definitions`; the project id comes from
|
|
392
|
+
`GET /api/v2/project/<slug>`). Set the
|
|
393
|
+
optional variable `CIRCLECI_PROJECT_SLUG` if re-linking the project changes
|
|
394
|
+
its slug. Path-filtered
|
|
338
395
|
preview **deploys** run on open PRs from this repository; fork PRs are skipped.
|
|
339
396
|
If `CIRCLE_PULL_REQUEST` is unset (GitHub App `push` pipelines), the job looks
|
|
340
|
-
up the open PR for `CIRCLE_BRANCH` via the GitHub API
|
|
397
|
+
up the open PR for `CIRCLE_BRANCH` via the GitHub API on `TerrenoLabs/terreno`
|
|
398
|
+
(`GITHUB_REPOSITORY` when set). It does not use `CIRCLE_PROJECT_USERNAME`,
|
|
399
|
+
which can still be the pre-transfer `FlourishHealth` project link.
|
|
341
400
|
|
|
342
401
|
`mcp-server-docker` is push-only, matching GitHub Actions. It uses
|
|
343
402
|
`resolve-preview-pr.sh` for that lookup and skips when a PR exists. Its
|
|
@@ -348,8 +407,7 @@ tree.
|
|
|
348
407
|
## Path-filter parity guard
|
|
349
408
|
|
|
350
409
|
`bun run check:circleci-parity` guards active GitHub/CircleCI twins. Deploy
|
|
351
|
-
workflows are
|
|
352
|
-
the parity mapping. New CircleCI-only path rules still belong in
|
|
410
|
+
workflows are disabled on GitHub, so they are not in the parity mapping. New CircleCI-only path rules still belong in
|
|
353
411
|
`.circleci/config.yml` and config tests. The checker prefers live `config.yml`
|
|
354
412
|
when `setup: true`.
|
|
355
413
|
|
|
@@ -401,12 +459,11 @@ circleci config validate .circleci/continue-config.yml
|
|
|
401
459
|
|
|
402
460
|
## Disabled GitHub workflows
|
|
403
461
|
|
|
404
|
-
Package CI, e2e,
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
npm tag publishers. Never leave both GCP terraform applies enabled.
|
|
462
|
+
Package CI, e2e, npm tag, and deploy workflows (`docs-deploy.yml`,
|
|
463
|
+
`demo-deploy.yml`, `frontend-example-deploy.yml`, `cd.yml`) stay
|
|
464
|
+
`push.branches-ignore: ["**"]` for rollback. `preview-cleanup.yml` stays live
|
|
465
|
+
only as the PR-close trigger. Never enable both npm tag publishers. Never
|
|
466
|
+
re-enable `cd.yml` while CircleCI deploys: both would apply terraform.
|
|
410
467
|
|
|
411
468
|
## Cursor GitHub App checks
|
|
412
469
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# GitHub Actions CI (Terreno)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
[
|
|
3
|
+
CircleCI is the CI/CD of record; see [CircleCI](circleci.md). The GitHub
|
|
4
|
+
Actions CI and deploy workflows below are disabled
|
|
5
|
+
(`push.branches-ignore: ["**"]`) and kept only for rollback. This page
|
|
6
|
+
describes how they behaved if one is ever re-enabled.
|
|
6
7
|
|
|
7
8
|
## Docs site (`docs-deploy.yml`)
|
|
8
9
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Preview a component demo
|
|
2
|
+
|
|
3
|
+
Open a component demo and change the shareable query. The preview bar is on demo and
|
|
4
|
+
dev component routes. `?embed=1` applies the same query and hides the bar.
|
|
5
|
+
|
|
6
|
+
```text
|
|
7
|
+
/demo/Button?theme=dark&viewport=375&background=inverse&locale=en-US&rtl=1&reducedMotion=1
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
| Query | Values |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| `theme` | `light` (default) or `dark` (canonical dark role remap) |
|
|
13
|
+
| `viewport` | `full` (default), `320`, `375`, `1024`, `1280` |
|
|
14
|
+
| `background` | `default`, `inverse`, `transparent` |
|
|
15
|
+
| `locale` | Passed to components that already read a locale, such as consent |
|
|
16
|
+
| `rtl` | `1` sets document direction to `rtl` on web |
|
|
17
|
+
| `reducedMotion` | `1` sets `data-reduced-motion="1"` on the document element |
|
|
18
|
+
|
|
19
|
+
Reload keeps the query. The bar shows the current query when any value is not the default. Choosing a control's default removes that key from the URL. Leaving the component route restores the app theme and, on web, document direction and reduced motion. Custom palettes stay on `/palette`.
|
|
@@ -11,6 +11,7 @@ import {AnnouncementsApp} from "@terreno/announcements";
|
|
|
11
11
|
|
|
12
12
|
new AnnouncementsApp({
|
|
13
13
|
defaultAcknowledgementPolicy: "dismiss-only",
|
|
14
|
+
uploadToken: process.env.ANNOUNCEMENTS_UPLOAD_TOKEN,
|
|
14
15
|
// audienceType staff/patient/all is applied inside the plugin via matchAudienceByType.
|
|
15
16
|
isStaff: (user) => (user as {admin?: boolean}).admin === true,
|
|
16
17
|
matchAudience: (user, announcement) => {
|
|
@@ -46,6 +47,8 @@ For Flourish-style surfaces on one collection:
|
|
|
46
47
|
|
|
47
48
|
2. Create announcements in admin (draft → publish). Use `AnnouncementOverview`, `AnnouncementEditor`, and (optionally) `AnnouncementList` from `@terreno/admin-frontend` with dedicated Expo routes (see `example-frontend/app/admin/announcements/`). The built-in admin screen widget key `announcements` renders the overview when your host uses `AdminScreenRouter` for custom screens. Published `title`/`body` edits auto-increment `version`, which re-shows the surface to users who only acknowledged the previous version.
|
|
48
49
|
|
|
50
|
+
For release-driven batches, use an [announcement release pack](../reference/announcement-release-packs.md). It keeps one `pack.yaml` manifest plus multiple Markdown announcements in source control, validates release and build versioning, and can import idempotent drafts or explicitly publish the whole pack through a dedicated bearer token. The example Cloud Run service accepts `Authorization: Bearer terreno-example-announcement-upload` (Terraform variable `announcements_upload_token`).
|
|
51
|
+
|
|
49
52
|
### Admin editor fields
|
|
50
53
|
|
|
51
54
|
`AnnouncementEditor` exposes structured targeting controls (no raw `requiresAcknowledgement` boolean):
|
|
@@ -8,7 +8,28 @@ the example-backend **dev** server need a replica-set `mongod` (see
|
|
|
8
8
|
[AGENTS.md](https://github.com/TerrenoLabs/terreno/blob/master/AGENTS.md) Cursor Cloud
|
|
9
9
|
section).
|
|
10
10
|
|
|
11
|
-
## Do now —
|
|
11
|
+
## Do now — prepush mirrors CI
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
bun run prepush # lint, compile, then every CI job this branch triggers
|
|
15
|
+
bun run prepush --dry-run # print the plan only
|
|
16
|
+
bun run prepush --all # every check, regardless of changed files
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`prepush` diffs committed, staged, unstaged, and untracked files against the merge-base
|
|
20
|
+
with `origin/master`. It applies the CircleCI path-filter mapping in
|
|
21
|
+
`.circleci/config.yml`, then runs the local command for each triggered job: package
|
|
22
|
+
`test:coverage` plus the 90% new-file LCOV gate, `ui` types, demo typecheck,
|
|
23
|
+
example-backend and example-frontend tests, every `repo-policies` step, rulesync drift,
|
|
24
|
+
and the typedoc API reference when `api/src` or `rtk/src` changes. Every step runs even
|
|
25
|
+
after a failure, so a single pass lists every problem. Fix them all, then push once.
|
|
26
|
+
|
|
27
|
+
Jobs that need infrastructure (Playwright e2e, Maestro, admin-spa integration, Docker)
|
|
28
|
+
are listed at the end with the command to run by hand. A test in
|
|
29
|
+
`scripts/ci/prepush/plan.test.ts` fails when the mapping gains a parameter that
|
|
30
|
+
`prepush` neither runs nor lists.
|
|
31
|
+
|
|
32
|
+
## Package tests
|
|
12
33
|
|
|
13
34
|
From the repo root after `bun bootstrap`:
|
|
14
35
|
|
|
@@ -39,7 +60,7 @@ bun test --only-failures <path>
|
|
|
39
60
|
| `example-frontend-ci` | `bun run frontend:test` |
|
|
40
61
|
| `ui-demo-ci` | `cd demo && bun run test:ci` then `bun run check:demo-coverage` |
|
|
41
62
|
| `new-file-coverage` | `bun run check:new-file-coverage --base=origin/master --threshold=90` |
|
|
42
|
-
| `repo-policies` | `bun run prepush` (
|
|
63
|
+
| `repo-policies` | `bun run prepush` (runs every repo-policies step) |
|
|
43
64
|
|
|
44
65
|
Coverage gate for a published package: `cd <package> && bun run test:coverage`.
|
|
45
66
|
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
Copy to `docs/implementationPlans/<slug>.md` and replace placeholders. Pair with
|
|
4
4
|
`docs/tasks/<slug>.md`. Add `**Parent IP:** [other](other.md)` only when this plan
|
|
5
5
|
rides on another plan's roadmap entry instead of getting its own. A filled Parent
|
|
6
|
-
IP header skips reconcile for that file.
|
|
6
|
+
IP header skips reconcile for that file. `**Roadmap:**` sets the Area / Target / Impact
|
|
7
|
+
the roadmap entry is scaffolded with on merge; omit it to have them inferred.
|
|
7
8
|
|
|
8
9
|
**Status:** Draft | Approved | In progress | Complete | Deferred
|
|
10
|
+
**Roadmap:** Area=`api`, Target=`Next`, Impact=`Feature`
|
|
9
11
|
**Branch:**
|
|
10
12
|
**Owner:**
|
|
11
13
|
**Created:** YYYY-MM-DD
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Implementation Plan: Admin Improvements (post–Admin UI v2)
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Deferred — roadmap declined #1099; Phase 7 (rules, MCP generator, migration guide, telemetry) not started
|
|
4
4
|
**Branch:** (implementation TBD)
|
|
5
5
|
**Owner:** Josh Gachnang
|
|
6
6
|
**Created:** 2026-06-01 (original); revised 2026-08-20 post–v2 gap analysis
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Implementation Plan: Admin scripts via durable jobs
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete
|
|
4
|
+
**Roadmap:** Area=`admin`, Target=`Released`, Impact=`Improvement`
|
|
4
5
|
**Branch:** `cursor/scripts-via-durable-jobs-803d`
|
|
5
6
|
**Task list:** [admin-scripts-durable-jobs.md](../tasks/admin-scripts-durable-jobs.md)
|
|
6
7
|
**Depends on:** [job-queues.md](job-queues.md)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Agent UI Blocks — a strict YAML DSL for agent-rendered Terreno components
|
|
2
2
|
|
|
3
3
|
**Status:** Approved 2026-09-15 (grilling rounds 1–2 closed: D1, D2, D4, D6, D8, D15, D17, D18 confirmed; remaining `assumed` rows are engineering defaults Pick may revise with a note)
|
|
4
|
+
**Roadmap:** Area=`ai`, Target=`Next`, Impact=`Feature`
|
|
4
5
|
**Branch:** `cursor/agent-ui-blocks-grow-e5c0`
|
|
5
6
|
**Owner:** unassigned
|
|
6
7
|
**Created:** 2026-09-15
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Announcement Surfaces, Targeting, and Click Tracking
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete — shipped with announcements
|
|
4
4
|
**Parent IP:** [announcements](announcements.md)
|
|
5
5
|
**Branch:** `cursor/announcements-grow-bf9c`
|
|
6
6
|
**Owner:** Terreno
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Product Update Announcements — In-App Core Feature
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete — shipped with @terreno/announcements (57.6.x)
|
|
4
|
+
**Roadmap:** Area=`api`, Target=`Released`, Impact=`Feature`
|
|
4
5
|
**Branch:** `cursor/announcements-grow-bf9c`
|
|
5
6
|
**Owner:** Terreno
|
|
6
7
|
**Created:** 2026-09-08
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Implementation Plan: App MCP server
|
|
2
2
|
|
|
3
3
|
**Status:** Draft
|
|
4
|
+
**Roadmap:** Area=`mcp`, Target=`Future`, Impact=`Feature`
|
|
4
5
|
**Created:** 2026-08-24
|
|
5
6
|
**Owner:** unassigned
|
|
6
7
|
**Depends on:** [model-router-mcp.md](model-router-mcp.md) (shipped), [mcp-boost-parity.md](mcp-boost-parity.md) (dev-time MCP — sibling, not a blocker)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Implementation plan: Better Auth sync omits unset `oauthProvider`
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete — fix on master (`syncBetterAuthUser` omits unset `oauthProvider`)
|
|
4
|
+
**Roadmap:** Area=`auth`, Target=`Released`, Impact=`Fix`
|
|
4
5
|
**Issue:** https://github.com/TerrenoLabs/terreno/issues/1218
|
|
5
6
|
**Branch:** `cursor/better-auth-strict-oauth-provider-3b37`
|
|
6
7
|
**Created:** 2026-08-30
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Implementation Plan: Comms adapter — Twilio SMS
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** In progress — Phase 1 send path shipped; Phase 2 (status callbacks, STOP/START opt-out) open
|
|
4
4
|
**Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1020
|
|
5
5
|
**Priority:** Medium
|
|
6
6
|
**Effort:** Small batch
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Implementation Plan: Compile pipeline dedup (remove redundant recompiles)
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete — shipped in #1360
|
|
4
|
+
**Roadmap:** Area=`dx`, Target=`Released`, Impact=`Improvement`
|
|
4
5
|
**Scan goal:** reduce-cold-compile-time ([charter](../scans/reduce-cold-compile-time/charter.md)) — cold `bun run compile` 305s → 214s
|
|
5
6
|
**Slice:** pipeline-ordering-dedup (round 1, top slice)
|
|
6
7
|
**Findings:** redundant-explicit-prefix (high, S), compile-workspace-deps-overlap (high, M)
|