@terreno/mcp 57.6.0 → 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.
Files changed (117) hide show
  1. package/dist/docs/upgrades/57.7.0.md +64 -0
  2. package/dist/docs/upgrades/58.0.0.md +4 -0
  3. package/dist/docs/versioned/next/explanation/loop-engineering.md +32 -3
  4. package/dist/docs/versioned/next/explanation/repository-settings.md +12 -5
  5. package/dist/docs/versioned/next/explanation/roadmap-process.md +41 -19
  6. package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +271 -22
  7. package/dist/docs/versioned/next/explanation/static-analysis.md +3 -2
  8. package/dist/docs/versioned/next/explanation/test-isolation.md +42 -0
  9. package/dist/docs/versioned/next/how-to/circleci.md +95 -53
  10. package/dist/docs/versioned/next/how-to/github-actions-ci.md +4 -3
  11. package/dist/docs/versioned/next/how-to/run-tests-locally.md +23 -2
  12. package/dist/docs/versioned/next/implementationPlans/IP_TEMPLATE.md +3 -1
  13. package/dist/docs/versioned/next/implementationPlans/admin-improvements.md +1 -1
  14. package/dist/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +2 -1
  15. package/dist/docs/versioned/next/implementationPlans/agent-ui-blocks.md +1 -0
  16. package/dist/docs/versioned/next/implementationPlans/ai-agents-and-failover.md +1 -0
  17. package/dist/docs/versioned/next/implementationPlans/ai-observability.md +1 -0
  18. package/dist/docs/versioned/next/implementationPlans/announcements-surfaces.md +1 -1
  19. package/dist/docs/versioned/next/implementationPlans/announcements.md +2 -1
  20. package/dist/docs/versioned/next/implementationPlans/app-mcp-server.md +1 -0
  21. package/dist/docs/versioned/next/implementationPlans/better-auth-strict-oauth-provider.md +2 -1
  22. package/dist/docs/versioned/next/implementationPlans/can-as-permission-seam.md +1 -1
  23. package/dist/docs/versioned/next/implementationPlans/collection-registry.md +1 -1
  24. package/dist/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +1 -1
  25. package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +1 -1
  26. package/dist/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
  27. package/dist/docs/versioned/next/implementationPlans/compile-pipeline-dedup.md +2 -1
  28. package/dist/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +1 -1
  29. package/dist/docs/versioned/next/implementationPlans/describe-model-schema.md +1 -1
  30. package/dist/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -1
  31. package/dist/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -1
  32. package/dist/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -1
  33. package/dist/docs/versioned/next/implementationPlans/framework-audit-log.md +1 -1
  34. package/dist/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +1 -0
  35. package/dist/docs/versioned/next/implementationPlans/inbound-webhooks.md +1 -1
  36. package/dist/docs/versioned/next/implementationPlans/knip-cleanup.md +1 -0
  37. package/dist/docs/versioned/next/implementationPlans/mcp-doc-sync-off-compile-path.md +2 -1
  38. package/dist/docs/versioned/next/implementationPlans/mcp-service-tokens.md +2 -1
  39. package/dist/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +2 -1
  40. package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +1 -1
  41. package/dist/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +1 -1
  42. package/dist/docs/versioned/next/implementationPlans/notification-center.md +1 -1
  43. package/dist/docs/versioned/next/implementationPlans/org-management-ui.md +1 -1
  44. package/dist/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +1 -1
  45. package/dist/docs/versioned/next/implementationPlans/rate-limiting.md +1 -1
  46. package/dist/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -0
  47. package/dist/docs/versioned/next/implementationPlans/support-agent.md +1 -0
  48. package/dist/docs/versioned/next/implementationPlans/syncdb-codegen.md +1 -1
  49. package/dist/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -1
  50. package/dist/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -1
  51. package/dist/docs/versioned/next/reference/api.md +16 -0
  52. package/dist/docs/versioned/next/reference/lifecycle-plugin.md +2 -2
  53. package/dist/docs/versioned/next/reference/test.md +1 -1
  54. package/dist/docs/versioned/next/reference/ui.md +65 -2
  55. package/dist/docs/versioned/next/tasks/can-as-permission-seam.md +4 -4
  56. package/dist/docs/versioned/next/tasks/collection-registry.md +6 -6
  57. package/dist/docs/versioned/next/tasks/describe-model-schema.md +5 -5
  58. package/dist/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +6 -3
  59. package/package.json +2 -2
  60. package/src/docs/upgrades/57.7.0.md +64 -0
  61. package/src/docs/upgrades/58.0.0.md +4 -0
  62. package/src/docs/versioned/next/explanation/loop-engineering.md +32 -3
  63. package/src/docs/versioned/next/explanation/repository-settings.md +12 -5
  64. package/src/docs/versioned/next/explanation/roadmap-process.md +41 -19
  65. package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +271 -22
  66. package/src/docs/versioned/next/explanation/static-analysis.md +3 -2
  67. package/src/docs/versioned/next/explanation/test-isolation.md +42 -0
  68. package/src/docs/versioned/next/how-to/circleci.md +95 -53
  69. package/src/docs/versioned/next/how-to/github-actions-ci.md +4 -3
  70. package/src/docs/versioned/next/how-to/run-tests-locally.md +23 -2
  71. package/src/docs/versioned/next/implementationPlans/IP_TEMPLATE.md +3 -1
  72. package/src/docs/versioned/next/implementationPlans/admin-improvements.md +1 -1
  73. package/src/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +2 -1
  74. package/src/docs/versioned/next/implementationPlans/agent-ui-blocks.md +1 -0
  75. package/src/docs/versioned/next/implementationPlans/ai-agents-and-failover.md +1 -0
  76. package/src/docs/versioned/next/implementationPlans/ai-observability.md +1 -0
  77. package/src/docs/versioned/next/implementationPlans/announcements-surfaces.md +1 -1
  78. package/src/docs/versioned/next/implementationPlans/announcements.md +2 -1
  79. package/src/docs/versioned/next/implementationPlans/app-mcp-server.md +1 -0
  80. package/src/docs/versioned/next/implementationPlans/better-auth-strict-oauth-provider.md +2 -1
  81. package/src/docs/versioned/next/implementationPlans/can-as-permission-seam.md +1 -1
  82. package/src/docs/versioned/next/implementationPlans/collection-registry.md +1 -1
  83. package/src/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +1 -1
  84. package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +1 -1
  85. package/src/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
  86. package/src/docs/versioned/next/implementationPlans/compile-pipeline-dedup.md +2 -1
  87. package/src/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +1 -1
  88. package/src/docs/versioned/next/implementationPlans/describe-model-schema.md +1 -1
  89. package/src/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -1
  90. package/src/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -1
  91. package/src/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -1
  92. package/src/docs/versioned/next/implementationPlans/framework-audit-log.md +1 -1
  93. package/src/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +1 -0
  94. package/src/docs/versioned/next/implementationPlans/inbound-webhooks.md +1 -1
  95. package/src/docs/versioned/next/implementationPlans/knip-cleanup.md +1 -0
  96. package/src/docs/versioned/next/implementationPlans/mcp-doc-sync-off-compile-path.md +2 -1
  97. package/src/docs/versioned/next/implementationPlans/mcp-service-tokens.md +2 -1
  98. package/src/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +2 -1
  99. package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +1 -1
  100. package/src/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +1 -1
  101. package/src/docs/versioned/next/implementationPlans/notification-center.md +1 -1
  102. package/src/docs/versioned/next/implementationPlans/org-management-ui.md +1 -1
  103. package/src/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +1 -1
  104. package/src/docs/versioned/next/implementationPlans/rate-limiting.md +1 -1
  105. package/src/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -0
  106. package/src/docs/versioned/next/implementationPlans/support-agent.md +1 -0
  107. package/src/docs/versioned/next/implementationPlans/syncdb-codegen.md +1 -1
  108. package/src/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -1
  109. package/src/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -1
  110. package/src/docs/versioned/next/reference/api.md +16 -0
  111. package/src/docs/versioned/next/reference/lifecycle-plugin.md +2 -2
  112. package/src/docs/versioned/next/reference/test.md +1 -1
  113. package/src/docs/versioned/next/reference/ui.md +65 -2
  114. package/src/docs/versioned/next/tasks/can-as-permission-seam.md +4 -4
  115. package/src/docs/versioned/next/tasks/collection-registry.md +6 -6
  116. package/src/docs/versioned/next/tasks/describe-model-schema.md +5 -5
  117. 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, and semver-tag npm releases. Path filters start
8
- CircleCI Netlify and GCP production/preview jobs, but those jobs **skip green**
9
- until `terreno-netlify` and `terreno-gcp` are filled. GitHub Actions still
10
- owns live Netlify/GCP deploys in this window. Do not leave both applying
11
- terraform once CircleCI GCP deploys succeed — set the GHA deploy workflows
12
- back to `push.branches-ignore: ["**"]` in the same change. GitHub-native security, Cursor GitHub App
13
- checks (Approval / Security / Bugbot), and repository automation remain
14
- enabled. EAS PR updates and the fingerprint gate are temporarily disabled;
15
- manual EAS development dispatch remains available in CircleCI. Preview
16
- **cleanup** on PR close is GitHub `preview-cleanup.yml` plus the manual
17
- CircleCI `run-preview-cleanup` parameter.
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. Until they
27
- are set, CircleCI deploy jobs skip with exit 0 and GHA remains the live
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/W3HZeMJujyMB2sYiUXaQbs`.
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/**` | `run-deploy-frontend` | `deploy-frontend-preview` | `deploy-frontend` |
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/**` | `run-cd-backend` | `gcp-cd-preview` | `gcp-cd-prod` |
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
- Until `terreno-netlify` is populated, GitHub Actions `docs-deploy` /
176
- `demo-deploy` / `frontend-example-deploy` publish the live sites (including
177
- PR aliases). CircleCI `deploy-*-preview` jobs still start from path filters
178
- and skip when `NETLIFY_AUTH_TOKEN` or the site id is missing. The same skip
179
- applies to `gcp-cd-*` when `terreno-gcp` lacks WIF or SA emails, so GitHub
180
- `cd.yml` remains the live GCP writer. GitHub `terraform-preview` and
181
- `backend-deploy-preview` run only when
182
- `github.event.pull_request.head.repo.full_name == github.repository`.
183
- Terraform preview always describes the Infra Manager preview (state,
184
- `errorCode`, `errorLogs`) before delete, including when `previews create`
185
- fails. Fork PRs still present `repository: TerrenoLabs/terreno` on the
186
- OIDC token, so
187
- WIF would accept them if those jobs ran. Netlify GHA jobs fail closed on
188
- forks (secrets withheld). After filling a context, confirm a CircleCI deploy
189
- URL, then set the matching GHA workflows to `push.branches-ignore: ["**"]`. Turn off Netlify's
190
- GitHub auto-build so only one system publishes.
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 **halt as the first step** when `terreno-netlify` /
219
- `terreno-gcp` are empty, before checkout or `bun install`. Path filters still
220
- start those jobs so filling the context turns deploys on without a config
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 (not yet ported) | Planned CircleCI job |
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`) | CircleCI manual `run-preview-cleanup` |
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
- PR preview **cleanup** is manual because CircleCI does not receive GitHub
336
- `pull_request.closed` events. Configure a GitHub App/webhook to call
337
- `run-preview-cleanup` if automatic lifecycle cleanup is required. Path-filtered
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 dual-run until CircleCI contexts are filled; they are not in
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, and npm tag workflows stay `push.branches-ignore: ["**"]`. Netlify/GCP deploy
405
- workflows are **re-enabled** until CircleCI contexts have the same secrets.
406
- After a successful CircleCI production or preview deploy, set
407
- `docs-deploy.yml`, `demo-deploy.yml`, `frontend-example-deploy.yml`, `cd.yml`,
408
- and `preview-cleanup.yml` back to `push.branches-ignore: ["**"]` in the same PR. Never enable both
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
- GitHub Actions is the CI of record. Operator map for the expensive jobs:
4
- [GitHub Actions CI](github-actions-ci.md). CircleCI twins are parked; see
5
- [CircleCI](circleci.md).
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 — package tests
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` (lint, compile, `analyze:full`) |
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:** Approved
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:** Approved (operator) — 2026-09-14
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,7 @@
1
1
  # Implementation plan: AI agents and provider failover
2
2
 
3
3
  **Status:** Draft
4
+ **Roadmap:** Area=`ai`, Target=`Future`, Impact=`Feature`
4
5
  **Branch:** `cursor/ai-agents-and-failover-ip-97fd`
5
6
  **Owner:** unassigned
6
7
  **Created:** 2026-08-24
@@ -1,6 +1,7 @@
1
1
  # Implementation Plan: AI observability (Langfuse-light, pluggable)
2
2
 
3
3
  **Status:** Draft
4
+ **Roadmap:** Area=`ai`, Target=`Future`, Impact=`Feature`
4
5
  **Created:** 2026-08-24
5
6
  **Owner:** unassigned
6
7
  **Branch:** `cursor/ai-observability-ip-64ca`
@@ -1,6 +1,6 @@
1
1
  # Announcement Surfaces, Targeting, and Click Tracking
2
2
 
3
- **Status:** Implementation complete — Phase 4 verified; Taste in progress
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:** In progress — implementation and Roast complete; pending Brew
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:** In progress
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
  # `can()` as the permission seam
2
2
 
3
- **Status:** Approved — 2026-08-24
3
+ **Status:** Complete
4
4
  **Branch:** `cursor/architecture-ips-a7ec`
5
5
  **Owner:** —
6
6
  **Created:** 2026-08-24
@@ -1,6 +1,6 @@
1
1
  # One collection registry
2
2
 
3
- **Status:** Approved — 2026-08-24
3
+ **Status:** Complete
4
4
  **Branch:** `cursor/architecture-ips-a7ec`
5
5
  **Owner:** —
6
6
  **Created:** 2026-08-24
@@ -1,6 +1,6 @@
1
1
  # Implementation Plan: Comms adapter — Expo push notifications
2
2
 
3
- **Status:** In progress
3
+ **Status:** Complete — shipped in #1204
4
4
  **Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1019
5
5
  **Priority:** High
6
6
  **Effort:** Small batch
@@ -1,6 +1,6 @@
1
1
  # Implementation Plan: Comms adapter — Twilio SMS
2
2
 
3
- **Status:** Approved
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,6 @@
1
1
  # Implementation Plan: Comms admin dashboard (errors, retries, log digging)
2
2
 
3
- **Status:** Approved
3
+ **Status:** Complete
4
4
  **Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1091
5
5
  **Priority:** High
6
6
  **Effort:** Medium batch
@@ -1,6 +1,7 @@
1
1
  # Implementation Plan: Compile pipeline dedup (remove redundant recompiles)
2
2
 
3
- **Status:** Approved (2026-09-22)
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: DataTable server-side filtering and search
2
2
 
3
- **Status:** Approved
3
+ **Status:** Complete — shipped in #1303
4
4
  **Branch:** `cursor/datatable-server-side-filtering-191d`
5
5
  **Owner:** —
6
6
  **Created:** 2026-09-10
@@ -1,6 +1,6 @@
1
1
  # `describeModel()` schema metadata
2
2
 
3
- **Status:** Approved — 2026-08-24
3
+ **Status:** Complete — shipped in #1154
4
4
  **Branch:** `cursor/architecture-ips-a7ec`
5
5
  **Owner:** —
6
6
  **Created:** 2026-08-24
@@ -1,6 +1,6 @@
1
1
  # Implementation Plan: Reference Documentation Coverage
2
2
 
3
- **Status:** In progress — remaining README, sanitization, and docs-audit work
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:** Approved
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:** Approved — key decisions recorded (2026-07-29)
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,6 @@
1
1
  # Implementation Plan: Framework-level audit log
2
2
 
3
- **Status:** Approved
3
+ **Status:** Complete — shipped in #1301
4
4
  **Branch:** `cursor/framework-audit-log-grow-0d6c`
5
5
  **Owner:** —
6
6
  **Created:** 2026-09-10
@@ -1,6 +1,7 @@
1
1
  # GPTChat optional mascot
2
2
 
3
3
  **Status:** Complete
4
+ **Roadmap:** Area=`ui`, Target=`Released`, Impact=`Feature`
4
5
  **Branch:** `cursor/gpt-chat-mascot-d39f`
5
6
  **Owner:** cloud agent
6
7
  **Created:** 2026-09-15
@@ -1,6 +1,6 @@
1
1
  # Implementation Plan: Inbound webhook framework
2
2
 
3
- **Status:** Approved
3
+ **Status:** Complete — shipped in #1251
4
4
  **Branch:** `cursor/inbound-webhooks-4945`
5
5
  **Owner:** —
6
6
  **Created:** 2026-09-01
@@ -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:** Approved (2026-09-22)
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: MCP service tokens
2
2
 
3
- **Status:** Approved
3
+ **Status:** Complete — shipped in #1263
4
+ **Roadmap:** Area=`mcp`, Target=`Released`, Impact=`Feature`
4
5
  **Branch:** TBD
5
6
  **Owner:** unassigned
6
7
  **Created:** 2026-09-03
@@ -1,6 +1,7 @@
1
1
  # Implementation Plan: Migrate built-in admin to syncdb
2
2
 
3
- **Status:** Approved
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` | Scheduled CircleCI job with `ROADMAP_PROJECT_TOKEN` |
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
  # MongoDB migrations tooling
2
2
 
3
- **Status:** Approved — decisions 2026-09-10
3
+ **Status:** Complete
4
4
  **Branch:** `cursor/mongodb-migrations-tooling-04f9`
5
5
  **Owner:** —
6
6
  **Created:** 2026-09-10
@@ -1,6 +1,6 @@
1
1
  # Implementation Plan: In-app notification center
2
2
 
3
- **Status:** Approved
3
+ **Status:** Complete — shipped in #1307
4
4
  **Branch:** `cursor/notification-center-ip-b11f`
5
5
  **Owner:** —
6
6
  **Created:** 2026-09-10
@@ -1,6 +1,6 @@
1
1
  # Implementation Plan: Organizations as a first-class primitive (admin UI + RBAC)
2
2
 
3
- **Status:** Approved
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
@@ -1,6 +1,6 @@
1
1
  # Implementation Plan: Password reset and email verification
2
2
 
3
- **Status:** Approved
3
+ **Status:** Complete
4
4
  **Roadmap issue:** https://github.com/TerrenoLabs/terreno/issues/1023
5
5
  **Priority:** High
6
6
  **Effort:** Big batch
@@ -1,6 +1,6 @@
1
1
  # Implementation Plan: API rate limiting
2
2
 
3
- **Status:** Approved
3
+ **Status:** Complete
4
4
  **Branch:** `cursor/api-rate-limiting-d03a`
5
5
  **Owner:** —
6
6
  **Created:** 2026-08-30
@@ -1,6 +1,7 @@
1
1
  # Implementation Plan: Remove legacy RTK realtime in Terreno 58
2
2
 
3
3
  **Status:** Approved
4
+ **Roadmap:** Area=`api`, Target=`58`, Impact=`Breaking`
4
5
  **Branch:** `cursor/deprecate-realtime-for-58`
5
6
  **Owner:** unassigned
6
7
  **Created:** 2026-08-25