@terreno/mcp 57.6.1 → 57.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/upgrades/57.7.0.md +64 -0
- package/dist/docs/upgrades/58.0.0.md +4 -0
- package/dist/docs/versioned/next/explanation/loop-engineering.md +32 -3
- package/dist/docs/versioned/next/explanation/repository-settings.md +12 -5
- package/dist/docs/versioned/next/explanation/roadmap-process.md +41 -19
- package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +271 -22
- package/dist/docs/versioned/next/explanation/static-analysis.md +3 -2
- package/dist/docs/versioned/next/explanation/test-isolation.md +42 -0
- package/dist/docs/versioned/next/how-to/circleci.md +95 -53
- package/dist/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/dist/docs/versioned/next/how-to/run-tests-locally.md +23 -2
- package/dist/docs/versioned/next/implementationPlans/IP_TEMPLATE.md +3 -1
- package/dist/docs/versioned/next/implementationPlans/admin-improvements.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/agent-ui-blocks.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/ai-agents-and-failover.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/ai-observability.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/announcements-surfaces.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/announcements.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/app-mcp-server.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/better-auth-strict-oauth-provider.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/can-as-permission-seam.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/collection-registry.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/compile-pipeline-dedup.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/describe-model-schema.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/framework-audit-log.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/inbound-webhooks.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/knip-cleanup.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/mcp-doc-sync-off-compile-path.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/mcp-service-tokens.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/notification-center.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/org-management-ui.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/rate-limiting.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/support-agent.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/syncdb-codegen.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -1
- package/dist/docs/versioned/next/reference/lifecycle-plugin.md +2 -2
- package/dist/docs/versioned/next/reference/test.md +1 -1
- package/dist/docs/versioned/next/reference/ui.md +65 -2
- package/dist/docs/versioned/next/tasks/can-as-permission-seam.md +4 -4
- package/dist/docs/versioned/next/tasks/collection-registry.md +6 -6
- package/dist/docs/versioned/next/tasks/describe-model-schema.md +5 -5
- package/dist/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +6 -3
- package/package.json +2 -2
- package/src/docs/upgrades/57.7.0.md +64 -0
- package/src/docs/upgrades/58.0.0.md +4 -0
- package/src/docs/versioned/next/explanation/loop-engineering.md +32 -3
- package/src/docs/versioned/next/explanation/repository-settings.md +12 -5
- package/src/docs/versioned/next/explanation/roadmap-process.md +41 -19
- package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +271 -22
- package/src/docs/versioned/next/explanation/static-analysis.md +3 -2
- package/src/docs/versioned/next/explanation/test-isolation.md +42 -0
- package/src/docs/versioned/next/how-to/circleci.md +95 -53
- package/src/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/src/docs/versioned/next/how-to/run-tests-locally.md +23 -2
- package/src/docs/versioned/next/implementationPlans/IP_TEMPLATE.md +3 -1
- package/src/docs/versioned/next/implementationPlans/admin-improvements.md +1 -1
- package/src/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +2 -1
- package/src/docs/versioned/next/implementationPlans/agent-ui-blocks.md +1 -0
- package/src/docs/versioned/next/implementationPlans/ai-agents-and-failover.md +1 -0
- package/src/docs/versioned/next/implementationPlans/ai-observability.md +1 -0
- package/src/docs/versioned/next/implementationPlans/announcements-surfaces.md +1 -1
- package/src/docs/versioned/next/implementationPlans/announcements.md +2 -1
- package/src/docs/versioned/next/implementationPlans/app-mcp-server.md +1 -0
- package/src/docs/versioned/next/implementationPlans/better-auth-strict-oauth-provider.md +2 -1
- package/src/docs/versioned/next/implementationPlans/can-as-permission-seam.md +1 -1
- package/src/docs/versioned/next/implementationPlans/collection-registry.md +1 -1
- package/src/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +1 -1
- package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +1 -1
- package/src/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
- package/src/docs/versioned/next/implementationPlans/compile-pipeline-dedup.md +2 -1
- package/src/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +1 -1
- package/src/docs/versioned/next/implementationPlans/describe-model-schema.md +1 -1
- package/src/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -1
- package/src/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -1
- package/src/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -1
- package/src/docs/versioned/next/implementationPlans/framework-audit-log.md +1 -1
- package/src/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +1 -0
- package/src/docs/versioned/next/implementationPlans/inbound-webhooks.md +1 -1
- package/src/docs/versioned/next/implementationPlans/knip-cleanup.md +1 -0
- package/src/docs/versioned/next/implementationPlans/mcp-doc-sync-off-compile-path.md +2 -1
- package/src/docs/versioned/next/implementationPlans/mcp-service-tokens.md +2 -1
- package/src/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +2 -1
- package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +1 -1
- package/src/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +1 -1
- package/src/docs/versioned/next/implementationPlans/notification-center.md +1 -1
- package/src/docs/versioned/next/implementationPlans/org-management-ui.md +1 -1
- package/src/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +1 -1
- package/src/docs/versioned/next/implementationPlans/rate-limiting.md +1 -1
- package/src/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -0
- package/src/docs/versioned/next/implementationPlans/support-agent.md +1 -0
- package/src/docs/versioned/next/implementationPlans/syncdb-codegen.md +1 -1
- package/src/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -1
- package/src/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -1
- package/src/docs/versioned/next/reference/lifecycle-plugin.md +2 -2
- package/src/docs/versioned/next/reference/test.md +1 -1
- package/src/docs/versioned/next/reference/ui.md +65 -2
- package/src/docs/versioned/next/tasks/can-as-permission-seam.md +4 -4
- package/src/docs/versioned/next/tasks/collection-registry.md +6 -6
- package/src/docs/versioned/next/tasks/describe-model-schema.md +5 -5
- package/src/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +6 -3
|
@@ -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`) |
|
|
@@ -332,12 +365,23 @@ Only stable tags (`57.3.0`) run `deploy-demo` after publish. Use
|
|
|
332
365
|
`{"run-demo-deploy":true}` on `master` if a prerelease must also refresh the
|
|
333
366
|
demo site.
|
|
334
367
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
`run-preview-cleanup`
|
|
368
|
+
CircleCI does not receive GitHub `pull_request.closed` events, so
|
|
369
|
+
`.github/workflows/preview-cleanup.yml` forwards them: it runs master's
|
|
370
|
+
`scripts/ci/trigger-circleci-pipeline.sh` with `{"run-preview-cleanup":"<PR>"}`
|
|
371
|
+
and deactivates the PR's old GitHub Deployments. The manual GHA publisher
|
|
372
|
+
(`publish-on-tag.yml`) uses the same script to start `{"run-demo-deploy":true}`
|
|
373
|
+
on `master`. Both need the GitHub secret `CIRCLECI_TOKEN` (a CircleCI personal
|
|
374
|
+
or project API token) and the repository variable
|
|
375
|
+
`CIRCLECI_PIPELINE_DEFINITION_ID` (Project Settings → Pipelines, or
|
|
376
|
+
`GET /api/v2/projects/<project id>/pipeline-definitions`; the project id comes from
|
|
377
|
+
`GET /api/v2/project/<slug>`). Set the
|
|
378
|
+
optional variable `CIRCLECI_PROJECT_SLUG` if re-linking the project changes
|
|
379
|
+
its slug. Path-filtered
|
|
338
380
|
preview **deploys** run on open PRs from this repository; fork PRs are skipped.
|
|
339
381
|
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
|
|
382
|
+
up the open PR for `CIRCLE_BRANCH` via the GitHub API on `TerrenoLabs/terreno`
|
|
383
|
+
(`GITHUB_REPOSITORY` when set). It does not use `CIRCLE_PROJECT_USERNAME`,
|
|
384
|
+
which can still be the pre-transfer `FlourishHealth` project link.
|
|
341
385
|
|
|
342
386
|
`mcp-server-docker` is push-only, matching GitHub Actions. It uses
|
|
343
387
|
`resolve-preview-pr.sh` for that lookup and skips when a PR exists. Its
|
|
@@ -348,8 +392,7 @@ tree.
|
|
|
348
392
|
## Path-filter parity guard
|
|
349
393
|
|
|
350
394
|
`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
|
|
395
|
+
workflows are disabled on GitHub, so they are not in the parity mapping. New CircleCI-only path rules still belong in
|
|
353
396
|
`.circleci/config.yml` and config tests. The checker prefers live `config.yml`
|
|
354
397
|
when `setup: true`.
|
|
355
398
|
|
|
@@ -401,12 +444,11 @@ circleci config validate .circleci/continue-config.yml
|
|
|
401
444
|
|
|
402
445
|
## Disabled GitHub workflows
|
|
403
446
|
|
|
404
|
-
Package CI, e2e,
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
npm tag publishers. Never leave both GCP terraform applies enabled.
|
|
447
|
+
Package CI, e2e, npm tag, and deploy workflows (`docs-deploy.yml`,
|
|
448
|
+
`demo-deploy.yml`, `frontend-example-deploy.yml`, `cd.yml`) stay
|
|
449
|
+
`push.branches-ignore: ["**"]` for rollback. `preview-cleanup.yml` stays live
|
|
450
|
+
only as the PR-close trigger. Never enable both npm tag publishers. Never
|
|
451
|
+
re-enable `cd.yml` while CircleCI deploys: both would apply terraform.
|
|
410
452
|
|
|
411
453
|
## Cursor GitHub App checks
|
|
412
454
|
|
|
@@ -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
|
|
|
@@ -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)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Implementation Plan: Reference Documentation Coverage
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete
|
|
4
4
|
**Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1009
|
|
5
5
|
**Priority:** High
|
|
6
6
|
**Effort:** Big batch
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Implementation Plan: Documentation Site, Versioned Docs, and Docs-Maintenance Skills
|
|
2
2
|
|
|
3
3
|
**Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1086
|
|
4
|
-
**Status:**
|
|
4
|
+
**Status:** Complete — shipped in #754
|
|
5
5
|
|
|
6
6
|
*When an engineer is assigned to a project but before you begin coding, you should fill in the implementation plan and get feedback from the engineering team. Once you have finished or you make any changes, tag Josh with the @ symbol so he can review. Also tag anyone else that needs to be notified, has conflicting work, etc.*
|
|
7
7
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Implementation Plan: Examples, Demo, and Test Coverage
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete — shipped in #1299
|
|
4
4
|
**Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1016
|
|
5
5
|
**Priority:** Medium
|
|
6
6
|
**Effort:** Big batch
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Implementation Plan: Remove the Knip baseline
|
|
2
2
|
|
|
3
3
|
**Status:** Complete
|
|
4
|
+
**Roadmap:** Area=`dx`, Target=`Released`, Impact=`Improvement`
|
|
4
5
|
**Created:** 2026-09-09
|
|
5
6
|
**Owner:** unassigned
|
|
6
7
|
**Primary packages:** repo-wide (`knip.jsonc`, `scripts/static-analysis/`, every workspace Knip currently fingerprints)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Implementation Plan: Move mcp-server doc-sync off the compile path
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete
|
|
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:** mcp-doc-sync-off-compile-path (round 1) — **must land before** `compile-pipeline-dedup`
|
|
6
7
|
**Findings:** mcp-doc-sync-on-compile-path (medium, S)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Implementation Plan: Migrate built-in admin to syncdb
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete
|
|
4
|
+
**Roadmap:** Area=`admin`, Target=`Released`, Impact=`Improvement`
|
|
4
5
|
**Branch:** `cursor/migrate-admin-to-syncdb-de61`
|
|
5
6
|
**Owner:** Josh Gachnang
|
|
6
7
|
**Created:** 2026-09-01
|
|
@@ -214,7 +214,7 @@ are ported.
|
|
|
214
214
|
| `codeql-analysis` | CircleCI job uploading SARIF to GitHub Code Scanning API **or** third-party SAST orb; preserve Security tab if possible |
|
|
215
215
|
| `dependabot-auto-merge` | Keep Dependabot PRs on GitHub; auto-merge via CircleCI on Dependabot branches **or** Renovate on CircleCI |
|
|
216
216
|
| `triage.yml` | CircleCI pipeline trigger on `issues` via GitHub Apps webhook → CircleCI API, or GitHub Action **stub** only if product accepts residual GHA (conflicts with CC1 — prefer webhook) |
|
|
217
|
-
| `roadmap-generate` |
|
|
217
|
+
| `roadmap-generate`, `roadmap-sync`, `roadmap-reconcile` | **Stay on GitHub Actions** (decided 2026-09-26). They only talk to GitHub (issues, Projects v2, `master` commits via `ROADMAP_PROJECT_TOKEN`), so moving them buys nothing. Exception to CC1. |
|
|
218
218
|
| `architectural-pr-review` | Implemented: CircleCI job + `CURSOR_API_KEY` / `GITHUB_TOKEN`. Checks out `origin/master`, skips forks. GHA workflow is `push.branches-ignore: ["**"]`. |
|
|
219
219
|
| Cursor Approval / Security / Bugbot | **Cannot move.** Cursor GitHub App automations, not repo workflows. |
|
|
220
220
|
| `agentics-maintenance` + `*.lock.yml` gh-aw | Re-home to CircleCI scheduled pipelines calling the same scripts **or** retire features; do not leave gh-aw as the only runner if CC1 holds |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Implementation Plan: Organizations as a first-class primitive (admin UI + RBAC)
|
|
2
2
|
|
|
3
|
-
**Status:**
|
|
3
|
+
**Status:** Complete
|
|
4
4
|
**Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1024 (absorbs `orgs-and-teams`; retitle on approve)
|
|
5
5
|
**Priority:** High
|
|
6
6
|
**Effort:** Big batch
|