@terreno/mcp 57.0.0 → 57.1.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 (220) hide show
  1. package/dist/bootstrap.d.ts +1 -1
  2. package/dist/bootstrap.d.ts.map +1 -1
  3. package/dist/bootstrap.js +381 -191
  4. package/dist/bootstrap.js.map +1 -1
  5. package/dist/docs/guidelines/api/skills/mongoose-schema-safety/SKILL.md +8 -0
  6. package/dist/docs/resources/overview.md +6 -1
  7. package/dist/docs/resources/rtk.md +3 -1
  8. package/dist/docs/resources/syncdb.md +43 -0
  9. package/dist/docs/upgrades/56.0.0-beta.2.md +34 -0
  10. package/dist/docs/upgrades/57.1.0.md +126 -0
  11. package/dist/docs/versioned/next/README.md +15 -3
  12. package/dist/docs/versioned/next/explanation/README.md +3 -0
  13. package/dist/docs/versioned/next/explanation/admin-consent-migration.md +15 -0
  14. package/dist/docs/versioned/next/explanation/admin-plugin-frontend.md +12 -0
  15. package/dist/docs/versioned/next/explanation/announcements/rtk-deprecation.md +29 -0
  16. package/dist/docs/versioned/next/explanation/authentication.md +51 -58
  17. package/dist/docs/versioned/next/explanation/local-first-data.md +52 -0
  18. package/dist/docs/versioned/next/explanation/loop-engineering.md +117 -0
  19. package/dist/docs/versioned/next/explanation/repository-settings.md +8 -0
  20. package/dist/docs/versioned/next/explanation/roadmap-process.md +22 -9
  21. package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +39 -0
  22. package/dist/docs/versioned/next/how-to/README.md +3 -0
  23. package/dist/docs/versioned/next/how-to/admin-add-model.md +41 -0
  24. package/dist/docs/versioned/next/how-to/admin-custom-home.md +31 -0
  25. package/dist/docs/versioned/next/how-to/admin-custom-widget.md +42 -0
  26. package/dist/docs/versioned/next/how-to/admin-import-prebuilt.md +25 -0
  27. package/dist/docs/versioned/next/how-to/circleci.md +173 -0
  28. package/dist/docs/versioned/next/how-to/configure-better-auth.md +13 -10
  29. package/dist/docs/versioned/next/how-to/expose-mcp-tools.md +194 -0
  30. package/dist/docs/versioned/next/how-to/install-agent-skills.md +46 -0
  31. package/dist/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +26 -1
  32. package/dist/docs/versioned/next/how-to/websocket-integration.md +2 -1
  33. package/dist/docs/versioned/next/implementationPlans/ModularAPI.md +1 -0
  34. package/dist/docs/versioned/next/implementationPlans/README.md +31 -17
  35. package/dist/docs/versioned/next/implementationPlans/admin-improvements-research.md +136 -0
  36. package/dist/docs/versioned/next/implementationPlans/admin-improvements.md +157 -527
  37. package/dist/docs/versioned/next/implementationPlans/admin-only-research.md +4 -0
  38. package/dist/docs/versioned/next/implementationPlans/admin-only.md +3 -1
  39. package/dist/docs/versioned/next/implementationPlans/admin-script-runner.md +1 -0
  40. package/dist/docs/versioned/next/implementationPlans/admin-ui-v2-django-parity.md +1 -0
  41. package/dist/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +160 -130
  42. package/dist/docs/versioned/next/implementationPlans/apierror-standard-error-redesign.md +1 -0
  43. package/dist/docs/versioned/next/implementationPlans/b2b-platform-program.md +5 -4
  44. package/dist/docs/versioned/next/implementationPlans/comms-abstraction-research.md +48 -0
  45. package/dist/docs/versioned/next/implementationPlans/comms-abstraction.md +152 -62
  46. package/dist/docs/versioned/next/implementationPlans/comms-adapter-sendgrid.md +9 -9
  47. package/dist/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
  48. package/dist/docs/versioned/next/implementationPlans/consent-forms.md +4 -0
  49. package/dist/docs/versioned/next/implementationPlans/design-blend-skill.md +1 -0
  50. package/dist/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -0
  51. package/dist/docs/versioned/next/implementationPlans/feature-flags-openfeature.md +1 -0
  52. package/dist/docs/versioned/next/implementationPlans/feature-flags.md +4 -0
  53. package/dist/docs/versioned/next/implementationPlans/infra-mcp-research.md +1 -0
  54. package/dist/docs/versioned/next/implementationPlans/infra-mcp.md +3 -3
  55. package/dist/docs/versioned/next/implementationPlans/mcp-boost-parity.md +1 -0
  56. package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci-research.md +1 -0
  57. package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +2 -2
  58. package/dist/docs/versioned/next/implementationPlans/model-router-actions.md +4 -0
  59. package/dist/docs/versioned/next/implementationPlans/model-router-mcp.md +5 -4
  60. package/dist/docs/versioned/next/implementationPlans/offline-mode.md +3 -1
  61. package/dist/docs/versioned/next/implementationPlans/oss-launch-program.md +11 -2
  62. package/dist/docs/versioned/next/implementationPlans/pluggable-database-sqlite-research.md +150 -0
  63. package/dist/docs/versioned/next/implementationPlans/pluggable-database-sqlite.md +247 -0
  64. package/dist/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -1
  65. package/dist/docs/versioned/next/implementationPlans/public-roadmap-github.md +2 -2
  66. package/dist/docs/versioned/next/implementationPlans/rbac-permissions.md +52 -15
  67. package/dist/docs/versioned/next/implementationPlans/rtk-to-syncdb-migration-docs.md +13 -12
  68. package/dist/docs/versioned/next/implementationPlans/syncdb-codegen-research.md +137 -0
  69. package/dist/docs/versioned/next/implementationPlans/syncdb-codegen.md +63 -59
  70. package/dist/docs/versioned/next/implementationPlans/syncdb-local-first.md +1 -0
  71. package/dist/docs/versioned/next/implementationPlans/syncdb-phase-c-design.md +1 -0
  72. package/dist/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -0
  73. package/dist/docs/versioned/next/implementationPlans/terreno-syncdb-2.md +1 -0
  74. package/dist/docs/versioned/next/implementationPlans/upgrade-banner.md +4 -0
  75. package/dist/docs/versioned/next/reference/README.md +6 -1
  76. package/dist/docs/versioned/next/reference/admin-config.md +51 -0
  77. package/dist/docs/versioned/next/reference/ai.md +15 -1
  78. package/dist/docs/versioned/next/reference/api.md +18 -0
  79. package/dist/docs/versioned/next/reference/comms.md +88 -7
  80. package/dist/docs/versioned/next/reference/environment-variables.md +9 -1
  81. package/dist/docs/versioned/next/reference/{rtk.md → legacy/rtk.md} +11 -7
  82. package/dist/docs/versioned/next/reference/lifecycle-plugin.md +54 -0
  83. package/dist/docs/versioned/next/reference/mcp-server.md +7 -0
  84. package/dist/docs/versioned/next/reference/syncdb.md +30 -3
  85. package/dist/docs/versioned/next/tasks/README.md +21 -10
  86. package/dist/docs/versioned/next/tasks/admin-improvements.md +189 -353
  87. package/dist/docs/versioned/next/tasks/admin-only.md +2 -0
  88. package/dist/docs/versioned/next/tasks/agentic-sdlc-plugin.md +54 -160
  89. package/dist/docs/versioned/next/tasks/comms-abstraction.md +30 -24
  90. package/dist/docs/versioned/next/tasks/comms-adapter-sendgrid.md +4 -4
  91. package/dist/docs/versioned/next/tasks/consent-forms.md +2 -0
  92. package/dist/docs/versioned/next/tasks/feature-flags.md +2 -0
  93. package/dist/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +14 -10
  94. package/dist/docs/versioned/next/tasks/model-router-actions.md +2 -0
  95. package/dist/docs/versioned/next/tasks/model-router-mcp.md +27 -27
  96. package/dist/docs/versioned/next/tasks/offline-mode.md +2 -0
  97. package/dist/docs/versioned/next/tasks/pluggable-database-sqlite.md +44 -0
  98. package/dist/docs/versioned/next/tasks/public-roadmap-github.md +1 -1
  99. package/dist/docs/versioned/next/tasks/rtk-to-syncdb-migration-docs.md +15 -15
  100. package/dist/docs/versioned/next/tasks/syncdb-codegen.md +37 -31
  101. package/dist/docs/versioned/next/tasks/upgrade-banner.md +2 -0
  102. package/dist/index.js +24 -55
  103. package/dist/index.js.map +1 -1
  104. package/dist/local/localServer.d.ts.map +1 -1
  105. package/dist/local/localServer.js +9 -8
  106. package/dist/local/localServer.js.map +1 -1
  107. package/dist/local/localTools.d.ts +1 -1
  108. package/dist/local/localTools.d.ts.map +1 -1
  109. package/dist/prompts.d.ts.map +1 -1
  110. package/dist/prompts.js +44 -45
  111. package/dist/prompts.js.map +1 -1
  112. package/dist/resources.d.ts.map +1 -1
  113. package/dist/resources.js +9 -2
  114. package/dist/resources.js.map +1 -1
  115. package/dist/tools.d.ts +1 -1
  116. package/dist/tools.d.ts.map +1 -1
  117. package/dist/tools.js +4 -2
  118. package/dist/tools.js.map +1 -1
  119. package/package.json +7 -3
  120. package/src/docs/guidelines/api/skills/mongoose-schema-safety/SKILL.md +8 -0
  121. package/src/docs/resources/overview.md +6 -1
  122. package/src/docs/resources/rtk.md +3 -1
  123. package/src/docs/resources/syncdb.md +43 -0
  124. package/src/docs/upgrades/56.0.0-beta.2.md +34 -0
  125. package/src/docs/upgrades/57.1.0.md +126 -0
  126. package/src/docs/versioned/next/README.md +15 -3
  127. package/src/docs/versioned/next/explanation/README.md +3 -0
  128. package/src/docs/versioned/next/explanation/admin-consent-migration.md +15 -0
  129. package/src/docs/versioned/next/explanation/admin-plugin-frontend.md +12 -0
  130. package/src/docs/versioned/next/explanation/announcements/rtk-deprecation.md +29 -0
  131. package/src/docs/versioned/next/explanation/authentication.md +51 -58
  132. package/src/docs/versioned/next/explanation/local-first-data.md +52 -0
  133. package/src/docs/versioned/next/explanation/loop-engineering.md +117 -0
  134. package/src/docs/versioned/next/explanation/repository-settings.md +8 -0
  135. package/src/docs/versioned/next/explanation/roadmap-process.md +22 -9
  136. package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +39 -0
  137. package/src/docs/versioned/next/how-to/README.md +3 -0
  138. package/src/docs/versioned/next/how-to/admin-add-model.md +41 -0
  139. package/src/docs/versioned/next/how-to/admin-custom-home.md +31 -0
  140. package/src/docs/versioned/next/how-to/admin-custom-widget.md +42 -0
  141. package/src/docs/versioned/next/how-to/admin-import-prebuilt.md +25 -0
  142. package/src/docs/versioned/next/how-to/circleci.md +173 -0
  143. package/src/docs/versioned/next/how-to/configure-better-auth.md +13 -10
  144. package/src/docs/versioned/next/how-to/expose-mcp-tools.md +194 -0
  145. package/src/docs/versioned/next/how-to/install-agent-skills.md +46 -0
  146. package/src/docs/versioned/next/how-to/migrate-rtk-to-syncdb.md +26 -1
  147. package/src/docs/versioned/next/how-to/websocket-integration.md +2 -1
  148. package/src/docs/versioned/next/implementationPlans/ModularAPI.md +1 -0
  149. package/src/docs/versioned/next/implementationPlans/README.md +31 -17
  150. package/src/docs/versioned/next/implementationPlans/admin-improvements-research.md +136 -0
  151. package/src/docs/versioned/next/implementationPlans/admin-improvements.md +157 -527
  152. package/src/docs/versioned/next/implementationPlans/admin-only-research.md +4 -0
  153. package/src/docs/versioned/next/implementationPlans/admin-only.md +3 -1
  154. package/src/docs/versioned/next/implementationPlans/admin-script-runner.md +1 -0
  155. package/src/docs/versioned/next/implementationPlans/admin-ui-v2-django-parity.md +1 -0
  156. package/src/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +160 -130
  157. package/src/docs/versioned/next/implementationPlans/apierror-standard-error-redesign.md +1 -0
  158. package/src/docs/versioned/next/implementationPlans/b2b-platform-program.md +5 -4
  159. package/src/docs/versioned/next/implementationPlans/comms-abstraction-research.md +48 -0
  160. package/src/docs/versioned/next/implementationPlans/comms-abstraction.md +152 -62
  161. package/src/docs/versioned/next/implementationPlans/comms-adapter-sendgrid.md +9 -9
  162. package/src/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
  163. package/src/docs/versioned/next/implementationPlans/consent-forms.md +4 -0
  164. package/src/docs/versioned/next/implementationPlans/design-blend-skill.md +1 -0
  165. package/src/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -0
  166. package/src/docs/versioned/next/implementationPlans/feature-flags-openfeature.md +1 -0
  167. package/src/docs/versioned/next/implementationPlans/feature-flags.md +4 -0
  168. package/src/docs/versioned/next/implementationPlans/infra-mcp-research.md +1 -0
  169. package/src/docs/versioned/next/implementationPlans/infra-mcp.md +3 -3
  170. package/src/docs/versioned/next/implementationPlans/mcp-boost-parity.md +1 -0
  171. package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci-research.md +1 -0
  172. package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +2 -2
  173. package/src/docs/versioned/next/implementationPlans/model-router-actions.md +4 -0
  174. package/src/docs/versioned/next/implementationPlans/model-router-mcp.md +5 -4
  175. package/src/docs/versioned/next/implementationPlans/offline-mode.md +3 -1
  176. package/src/docs/versioned/next/implementationPlans/oss-launch-program.md +11 -2
  177. package/src/docs/versioned/next/implementationPlans/pluggable-database-sqlite-research.md +150 -0
  178. package/src/docs/versioned/next/implementationPlans/pluggable-database-sqlite.md +247 -0
  179. package/src/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -1
  180. package/src/docs/versioned/next/implementationPlans/public-roadmap-github.md +2 -2
  181. package/src/docs/versioned/next/implementationPlans/rbac-permissions.md +52 -15
  182. package/src/docs/versioned/next/implementationPlans/rtk-to-syncdb-migration-docs.md +13 -12
  183. package/src/docs/versioned/next/implementationPlans/syncdb-codegen-research.md +137 -0
  184. package/src/docs/versioned/next/implementationPlans/syncdb-codegen.md +63 -59
  185. package/src/docs/versioned/next/implementationPlans/syncdb-local-first.md +1 -0
  186. package/src/docs/versioned/next/implementationPlans/syncdb-phase-c-design.md +1 -0
  187. package/src/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -0
  188. package/src/docs/versioned/next/implementationPlans/terreno-syncdb-2.md +1 -0
  189. package/src/docs/versioned/next/implementationPlans/upgrade-banner.md +4 -0
  190. package/src/docs/versioned/next/reference/README.md +6 -1
  191. package/src/docs/versioned/next/reference/admin-config.md +51 -0
  192. package/src/docs/versioned/next/reference/ai.md +15 -1
  193. package/src/docs/versioned/next/reference/api.md +18 -0
  194. package/src/docs/versioned/next/reference/comms.md +88 -7
  195. package/src/docs/versioned/next/reference/environment-variables.md +9 -1
  196. package/src/docs/versioned/next/reference/{rtk.md → legacy/rtk.md} +11 -7
  197. package/src/docs/versioned/next/reference/lifecycle-plugin.md +54 -0
  198. package/src/docs/versioned/next/reference/mcp-server.md +7 -0
  199. package/src/docs/versioned/next/reference/syncdb.md +30 -3
  200. package/src/docs/versioned/next/tasks/README.md +21 -10
  201. package/src/docs/versioned/next/tasks/admin-improvements.md +189 -353
  202. package/src/docs/versioned/next/tasks/admin-only.md +2 -0
  203. package/src/docs/versioned/next/tasks/agentic-sdlc-plugin.md +54 -160
  204. package/src/docs/versioned/next/tasks/comms-abstraction.md +30 -24
  205. package/src/docs/versioned/next/tasks/comms-adapter-sendgrid.md +4 -4
  206. package/src/docs/versioned/next/tasks/consent-forms.md +2 -0
  207. package/src/docs/versioned/next/tasks/feature-flags.md +2 -0
  208. package/src/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +14 -10
  209. package/src/docs/versioned/next/tasks/model-router-actions.md +2 -0
  210. package/src/docs/versioned/next/tasks/model-router-mcp.md +27 -27
  211. package/src/docs/versioned/next/tasks/offline-mode.md +2 -0
  212. package/src/docs/versioned/next/tasks/pluggable-database-sqlite.md +44 -0
  213. package/src/docs/versioned/next/tasks/public-roadmap-github.md +1 -1
  214. package/src/docs/versioned/next/tasks/rtk-to-syncdb-migration-docs.md +15 -15
  215. package/src/docs/versioned/next/tasks/syncdb-codegen.md +37 -31
  216. package/src/docs/versioned/next/tasks/upgrade-banner.md +2 -0
  217. package/dist/docs/versioned/next/implementationPlans/PLAN_INDEX.md +0 -73
  218. package/dist/docs/versioned/next/implementationPlans/syncdb-api-inventory.md +0 -303
  219. package/src/docs/versioned/next/implementationPlans/PLAN_INDEX.md +0 -73
  220. package/src/docs/versioned/next/implementationPlans/syncdb-api-inventory.md +0 -303
@@ -22,10 +22,10 @@ Discussion (Ideas/RFC)
22
22
  ▼
23
23
  Issue: Status = Shaping ─────────────────────────────┐
24
24
  │ IP approved → roadmap-item
25
- Blend writes IP + task list ────────────────────────┤ (sets IP field, Shaping → Planned)
25
+ Grow writes IP + task list ────────────────────────┤ (sets IP field, Shaping → Planned)
26
26
  (docs/implementationPlans/ + docs/tasks/) ▼
27
27
  Issue: Status = Planned
28
- │ Roast → Cupping → Pour
28
+ │ Pick → Roast → Brew
29
29
  ▼
30
30
  PR: Fixes #NNN
31
31
  │ merge
@@ -34,17 +34,17 @@ Blend writes IP + task list ─────────────────
34
34
  ```
35
35
 
36
36
  The planning pipeline (the `terreno-planning` plugin) drives the design-and-build half;
37
- the roadmap skills drive the public-tracking half. They meet at one handoff: **Blend
37
+ the roadmap skills drive the public-tracking half. They meet at one handoff: **Grow
38
38
  writes the IP, and once it is Approved hands off to `roadmap-item`.**
39
39
 
40
40
  | Transition | Who owns it | Authoritative artifact |
41
41
  | ---------- | ----------- | ---------------------- |
42
42
  | Idea debated and shaped | Community + maintainers | GitHub Discussion |
43
43
  | Discussion → first tracking issue (`Shaping`) | `roadmap-promote` | GitHub Issue + Project |
44
- | Design, scope, acceptance criteria | `terreno-1-blend` / `ip` | `docs/implementationPlans/<slug>.md` |
45
- | Task breakdown for implementation | `terreno-1-blend` / `ip` | `docs/tasks/<slug>.md` |
44
+ | Design, scope, acceptance criteria | `terreno-1-grow` | `docs/implementationPlans/<slug>.md` |
45
+ | Task breakdown for implementation | `terreno-1-grow` | `docs/tasks/<slug>.md` |
46
46
  | Approved IP → issue `Planned` + `IP` field set | `roadmap-item` | GitHub Issue + Project |
47
- | Implement, verify, submit, review | `terreno-2-roast` … `terreno-5-dialin` | the PR |
47
+ | Implement, verify, submit, review | `terreno-2-pick` … `terreno-5-taste` | the PR |
48
48
  | Sprint estimates, assignees, internal-only work | Linear | Linear |
49
49
  | Public rendered list | CI (`roadmap:generate`) | `ROADMAP.md` |
50
50
 
@@ -60,7 +60,7 @@ The `terreno-planning` plugin is meant to run in any Terreno repo, including one
60
60
  Discussions and no roadmap board (Flourish, most consumer apps). There, only the design-and-build
61
61
  half applies:
62
62
 
63
- - **Blend** still writes the IP + task list — that dual-file model is the source of truth
63
+ - **Grow** still writes the IP + task list — that dual-file model is the source of truth
64
64
  everywhere. It detects the absence of `.github/roadmap-fields.yml` and the `roadmap-item`
65
65
  skill and **skips the roadmap handoff** instead of inventing issues or labels.
66
66
  - Sprint execution is tracked in Linear and linked from the IP header; it is never copied
@@ -236,9 +236,9 @@ is the variable the generator reads.
236
236
 
237
237
  ## Maintainer skills
238
238
 
239
- Four agent skills cover the recurring roadmap work. Each one researches, proposes, and then
239
+ Five agent skills cover the recurring roadmap work. Each one researches, proposes, and then
240
240
  **stops for a maintainer to approve** before touching GitHub — roadmap decisions are the most
241
- human part of the process, so none of them mutate state on their own. All four are
241
+ human part of the process, so none of them mutate state on their own. All five are
242
242
  `disable-model-invocation`, meaning an agent will not start them on its own initiative;
243
243
  you invoke them explicitly.
244
244
 
@@ -248,6 +248,19 @@ you invoke them explicitly.
248
248
  | `roadmap-promote` | Maintainers accepted an Ideas or RFC discussion and it needs a tracked issue that links back to the thread |
249
249
  | `roadmap-item` | An approved IP needs its public tracking issue, or an existing entry's scope changed |
250
250
  | `roadmap-review` | Recurring hygiene: status drift, stale items, untriaged backlog, promotion candidates, then regenerate `ROADMAP.md` |
251
+ | `roadmap-frontier` | A destination is too large or uncertain for one IP/context and needs a map, a small unblocked frontier, and repeated Grow → Taste delivery loops |
252
+
253
+ ### Huge features: frontier maps
254
+
255
+ A frontier map is one low-resolution roadmap issue with an observable destination,
256
+ resolved-decision index, current frontier, fog, and explicit out-of-scope boundary. Child
257
+ tickets hold the detail and native blocking relationships. Work only the **frontier**:
258
+ open, unblocked, unclaimed tickets.
259
+
260
+ Decision tickets resolve one question. Delivery tickets link one approved IP/task pair and
261
+ run the complete planning pipeline. After each ticket, update the map, graduate clarified
262
+ fog into precise tickets, and return to the frontier with a fresh agent context. The map
263
+ closes only when the destination is reached and no in-scope fog or open child tickets remain.
251
264
 
252
265
  Sources live in `.rulesync/skills/`; run `bun run rules` after editing to regenerate the
253
266
  per-agent mirrors.
@@ -885,3 +885,42 @@ ad-hoc backfill scripts.
885
885
  - **Tasks:** *(not yet written)*
886
886
  - **RTK flag:** None
887
887
  - **Depends on:** —
888
+
889
+ ---
890
+
891
+ # Shipped, umbrella, and declined IPs
892
+
893
+ Tracking issues created for IPs that previously lacked a `**Roadmap issue:**` header.
894
+ Add each to the **Terreno Roadmap** project with the `IP` field set to the slug below.
895
+
896
+ | IP slug | GitHub issue | Status |
897
+ |---------|--------------|--------|
898
+ | `admin-only` | https://github.com/FlourishHealth/terreno/issues/1075 | Shipped |
899
+ | `admin-ui-v2-django-parity` | https://github.com/FlourishHealth/terreno/issues/1076 | Shipped |
900
+ | `admin-script-runner` | https://github.com/FlourishHealth/terreno/issues/1077 | Shipped |
901
+ | `consent-forms` | https://github.com/FlourishHealth/terreno/issues/1078 | Shipped |
902
+ | `upgrade-banner` | https://github.com/FlourishHealth/terreno/issues/1079 | Shipped |
903
+ | `apierror-standard-error-redesign` | https://github.com/FlourishHealth/terreno/issues/1080 | Shipped |
904
+ | `syncdb-local-first` | https://github.com/FlourishHealth/terreno/issues/1081 | Shipped |
905
+ | `feature-flags-openfeature` | https://github.com/FlourishHealth/terreno/issues/1082 | Shipped |
906
+ | `design-blend-skill` | https://github.com/FlourishHealth/terreno/issues/1083 | Shipped |
907
+ | `ModularAPI` | https://github.com/FlourishHealth/terreno/issues/1084 | Shipped |
908
+ | `mcp-boost-parity` | https://github.com/FlourishHealth/terreno/issues/1085 | In progress |
909
+ | `docs-site-and-versioning` | https://github.com/FlourishHealth/terreno/issues/1086 | Planned |
910
+ | `syncdb-codegen` | https://github.com/FlourishHealth/terreno/issues/1087 | Planned |
911
+ | `migrate-cicd-to-circleci` | https://github.com/FlourishHealth/terreno/issues/1088 | Planned |
912
+ | `rbac-permissions` | https://github.com/FlourishHealth/terreno/issues/1089 | Planned |
913
+ | `infra-mcp` | https://github.com/FlourishHealth/terreno/issues/1090 | Planned (blocked) |
914
+ | `comms-admin-dashboard` | https://github.com/FlourishHealth/terreno/issues/1091 | Planned |
915
+ | `model-router-mcp` | https://github.com/FlourishHealth/terreno/issues/1092 | Planned |
916
+ | `terreno-langfuse-integration` | https://github.com/FlourishHealth/terreno/issues/1093 | Future |
917
+ | `oss-launch-program` | https://github.com/FlourishHealth/terreno/issues/1094 | In progress |
918
+ | `b2b-platform-program` | https://github.com/FlourishHealth/terreno/issues/1095 | Planned |
919
+ | `offline-mode` | https://github.com/FlourishHealth/terreno/issues/1096 | Declined |
920
+ | `model-router-actions` | https://github.com/FlourishHealth/terreno/issues/1097 | Declined |
921
+ | `feature-flags` | https://github.com/FlourishHealth/terreno/issues/1098 | Declined |
922
+ | `admin-improvements` | https://github.com/FlourishHealth/terreno/issues/1099 | Declined |
923
+
924
+ Research and design sub-documents share the parent IP's issue: `admin-only-research` →
925
+ #1075; `infra-mcp-research` → #1090; `migrate-cicd-to-circleci-research` → #1088;
926
+ `syncdb-phase-c-design`, `terreno-syncdb-2`, and `syncdb-api-inventory` → #1081.
@@ -12,10 +12,13 @@ Problem-oriented, practical steps. Use these when you know what you want to do.
12
12
 
13
13
  ## Contents
14
14
 
15
+ - [CircleCI](circleci.md) — Dual-run CI on CircleCI (package CI / policy / e2e; deploys later)
15
16
  - [Create a Mongoose model](create-a-model.md) — Define models with proper conventions
16
17
  - [Add GitHub OAuth authentication](add-github-oauth.md) — Enable GitHub login for your API
17
18
  - [Configure Better Auth](configure-better-auth.md) — Set up Better Auth with social OAuth (Google, GitHub, Apple)
18
19
  - [Add WebSocket integration](websocket-integration.md) — Set up real-time Socket.io connections
20
+ - [Expose Model Context Protocol tools](expose-mcp-tools.md) — Turn `modelRouter` models into MCP tools an LLM can call
21
+ - [Install agent skills](install-agent-skills.md) — Install Grow/Pick/Roast/Brew/Taste and domain skills with `npx skills`
19
22
  - [Call external APIs](call-external-apis.md) — Authenticated HTTP client, retries, and error normalization for third-party integrations
20
23
  - [Deploy to Google Cloud Platform](deploy-to-gcp.md) — Deploy demo and example apps to GCS with CDN
21
24
  - [Migrate from @terreno/rtk to @terreno/syncdb](migrate-rtk-to-syncdb.md) — Move data sync to the local-first layer
@@ -0,0 +1,41 @@
1
+ # Add a model to the admin
2
+
3
+ Add `admin` directly to the model's existing `modelRouter` options:
4
+
5
+ ```ts
6
+ export const userRouter = modelRouter("/users", User, {
7
+ admin: {
8
+ displayName: "Users",
9
+ listFields: ["email", "name", "admin", "created"],
10
+ searchFields: ["email", "name"],
11
+ sortableFields: ["email", "name", "created"],
12
+ filters: [{field: "admin", kind: "boolean", label: "Admin user"}],
13
+ },
14
+ permissions: {
15
+ create: [Permissions.IsAdmin],
16
+ delete: [Permissions.IsAdmin],
17
+ list: [Permissions.IsAdmin],
18
+ read: [Permissions.IsAdmin],
19
+ update: [Permissions.IsAdmin],
20
+ },
21
+ });
22
+ ```
23
+
24
+ Register that router with `TerrenoApp`, then register `AdminApp`. The model appears in
25
+ `GET /admin/config` and at `/admin/User` without a duplicate `AdminApp.models` entry.
26
+
27
+ If the same Mongoose model is mounted at two `routePath`s (different filters or list
28
+ columns), `/admin/config` keeps `name` as the model name for the registered entry and
29
+ suffixes the others with the route slug (for example `Food-archived-foods`) so each list
30
+ is reachable.
31
+
32
+ Common fields:
33
+
34
+ - `listFields`: columns and fields exposed to admin CRUD.
35
+ - `searchFields`: string fields matched by the list search box (`q`) as a
36
+ case-insensitive partial (`$regex`) query.
37
+ - `sortableFields`: the only columns with sorting enabled.
38
+ - `filters`: typed filter drawer controls.
39
+ - `fieldsets`: grouped form sections.
40
+ - `readonlyFields` / `hiddenFields`: display-only or omitted form fields.
41
+ - `adminPermissions`: optional admin-specific permission methods.
@@ -0,0 +1,31 @@
1
+ # Customize the admin home
2
+
3
+ Configure home slots on `AdminApp`:
4
+
5
+ ```ts
6
+ new AdminApp({
7
+ home: {
8
+ title: "Operations",
9
+ slots: {
10
+ contentTop: ["feature-flags-overrides"],
11
+ main: ["modelStats"],
12
+ navGlobal: ["scriptRunner"],
13
+ sidebar: ["versionConfig", "recentActivity"],
14
+ },
15
+ },
16
+ });
17
+ ```
18
+
19
+ Built-in IDs include `modelStats`, `modelsGrid`, `scriptRunner`, `versionConfig`, and
20
+ `recentActivity`. Plugins add IDs such as `feature-flags-overrides`.
21
+
22
+ For an app-specific widget, implement `AdminHomeWidgetProps` and register it:
23
+
24
+ ```tsx
25
+ <AdminProvider widgets={{home: {operationsSummary: OperationsSummary}}} api={api}>
26
+ <AdminHome api={api} />
27
+ </AdminProvider>
28
+ ```
29
+
30
+ Then place `"operationsSummary"` in a home slot. Unknown IDs render a visible missing-widget
31
+ placeholder in development instead of crashing the dashboard.
@@ -0,0 +1,42 @@
1
+ # Add a custom admin field widget
2
+
3
+ 1. Name the widget in model admin metadata:
4
+
5
+ ```ts
6
+ admin: {
7
+ displayName: "Articles",
8
+ listFields: ["title", "body"],
9
+ fieldOverrides: {body: {widget: "rich-text"}},
10
+ }
11
+ ```
12
+
13
+ 2. Implement the field widget:
14
+
15
+ ```tsx
16
+ const RichTextWidget: React.FC<AdminFieldWidgetProps> = ({
17
+ value,
18
+ onChange,
19
+ readOnly,
20
+ }) => (
21
+ <RichTextEditor
22
+ disabled={Boolean(readOnly)}
23
+ onChange={onChange}
24
+ value={typeof value === "string" ? value : ""}
25
+ />
26
+ );
27
+ ```
28
+
29
+ 3. Register it once around the admin routes:
30
+
31
+ ```tsx
32
+ <AdminProvider
33
+ api={api}
34
+ apiBase="/admin"
35
+ routeBase="/admin"
36
+ widgets={{fields: {"rich-text": RichTextWidget}}}
37
+ >
38
+ <AdminRoutes />
39
+ </AdminProvider>
40
+ ```
41
+
42
+ Host registrations override built-ins with the same ID.
@@ -0,0 +1,25 @@
1
+ # Import pre-built admins
2
+
3
+ Register first-party plugins on the same `TerrenoApp` as `AdminApp`:
4
+
5
+ ```ts
6
+ const app = new TerrenoApp({userModel: User})
7
+ .register(new FeatureFlagsApp())
8
+ .register(new ConsentApp({auditTrail: true}))
9
+ .register(new DocumentStorageApp({bucketName: process.env.GCS_BUCKET ?? ""}))
10
+ .register(new AIAdminApp())
11
+ .register(new AdminApp({home: {slots: {main: ["modelStats"]}}}));
12
+ ```
13
+
14
+ `AdminApp` aggregates each plugin's `adminContribution()`:
15
+
16
+ - `FeatureFlagsApp`: FeatureFlag model and `feature-flags-overrides` home widget.
17
+ - `ConsentApp`: ConsentForm and ConsentResponse models plus consent field-widget IDs.
18
+ - `DocumentStorageApp`: `documents` custom screen.
19
+ - `AIAdminApp`: `ai-requests` custom screen and explorer API.
20
+
21
+ Wrap frontend admin routes in `AdminProvider`. First-party widgets are already in the built-in
22
+ registry, so no consumer-side switch statement or custom-screen map is required.
23
+
24
+ `featureFlagAdminConfig` and `AdminApp.models` remain compatibility paths, but new integrations
25
+ should use plugin contributions and `modelRouter({admin: ...})`.
@@ -0,0 +1,173 @@
1
+ # CircleCI (Terreno)
2
+
3
+ Dual-run migration from GitHub Actions. See
4
+ [`docs/implementationPlans/migrate-cicd-to-circleci.md`](../implementationPlans/migrate-cicd-to-circleci.md).
5
+
6
+ **Status (2026-08-20):** CircleCI is **disabled**. GitHub Actions is the CI of
7
+ record. Setup/path-filtering is parked in `.circleci/config.setup.yml`;
8
+ `.circleci/config.yml` is a no-op (`workflows.disabled.when: false`). Real jobs
9
+ remain in `.circleci/continue-config.yml`. To re-enable, copy `config.setup.yml`
10
+ over `config.yml`.
11
+
12
+ **Parked (2026-08-17):** Phase 1–3 config is in-repo (package CI, repo policy, Playwright
13
+ e2e). **Deploys are not ported yet** (Netlify, GCP CD, EAS, npm publish). GHA remains
14
+ required until CircleCI twins are trusted.
15
+
16
+ ## Project setup (maintainers)
17
+
18
+ 1. Link `FlourishHealth/terreno` in CircleCI (GitHub App).
19
+ 2. Default branch: `master`.
20
+ 3. Enable **dynamic config** / setup workflows for the project (required for
21
+ `.circleci/config.yml` `setup: true`).
22
+ 4. Build forked PRs if you want DCO + rulesync on forks.
23
+
24
+ Org/project slug: _(record after Phase 0.1 — e.g. `flourishhealth/terreno`)_.
25
+
26
+ ## Config layout
27
+
28
+ | File | Role |
29
+ |------|------|
30
+ | `.circleci/config.yml` | Active CircleCI config (currently a disabled no-op) |
31
+ | `.circleci/config.setup.yml` | Parked setup workflow + `path-filtering` (copy over `config.yml` to re-enable) |
32
+ | `.circleci/continue-config.yml` | Real jobs/workflows gated by those params |
33
+
34
+ Smoke job `config-ok` always runs on continuation.
35
+
36
+ `.circleci/**` sets `run-circleci-config`, which starts the `circleci-config`
37
+ workflow: one job from each ported family (package CI, policy, example apps,
38
+ `e2e` with `spec: login`, admin-spa). `comms/**` also sets
39
+ `run-example-backend` and `run-example-backend-script`, matching the GitHub
40
+ Actions twins.
41
+
42
+ ## Contexts (create empty shells, then fill)
43
+
44
+ Do **not** paste secret values into the repo. Create these CircleCI Contexts and restrict
45
+ `terreno-release` to tag/release pipelines when publish is ported.
46
+
47
+ | Context | Maps from GHA | Used by (planned / current) |
48
+ |---------|---------------|------------------------------|
49
+ | `terreno-npm` | `NPM_TOKEN` | publish (deferred) |
50
+ | `terreno-netlify` | `NETLIFY_*` | deploys (deferred) |
51
+ | `terreno-expo` | `EXPO_TOKEN` | EAS (deferred) |
52
+ | `terreno-gcp` | OIDC / WIF (no long-lived key for CD) | GCP CD (deferred) |
53
+ | `terreno-e2e` | `E2E_TOKEN_SECRET`, `E2E_REFRESH_TOKEN_SECRET`, `E2E_SESSION_SECRET` | `e2e`, `admin-spa-integration` |
54
+ | `terreno-release` | `REPO_ADMIN_TOKEN`, Zoom webhooks | publish (deferred) |
55
+ | `terreno-agentic` | `CURSOR_API_KEY` | agentic replacements (deferred) |
56
+ | `terreno-github-api` | PAT (`pull-requests`, `contents`, …) | `dco`, PR comments later |
57
+
58
+ Until contexts exist, e2e jobs may use **project env vars for `E2E_*` secrets only**
59
+ (or the in-job `ci-e2e-*-secret` fallbacks). **Do not** put `GITHUB_TOKEN` (or any
60
+ GitHub PAT) in project env vars — those are injected into every job, including
61
+ `bun` scripts from the PR. Create `terreno-github-api`, restrict it to this
62
+ project, leave fork-PR secret passing off, and attach that context **only** to
63
+ `dco` (and later comment jobs). DCO skips if `GITHUB_TOKEN` is unset.
64
+
65
+ After contexts exist, attach them on the matching jobs in
66
+ `.circleci/continue-config.yml` (see comments in the `workflows:` section).
67
+
68
+ ## Check name map (GHA → CircleCI)
69
+
70
+ Branch protection still requires **GitHub Actions** names during dual-run. CircleCI
71
+ checks appear as CircleCI job names in the GitHub Checks UI.
72
+
73
+ | GHA job `name:` / workflow | CircleCI job |
74
+ |----------------------------|--------------|
75
+ | Repository policies / No barrel imports | `no-barrel-imports` |
76
+ | Explicit any baseline | `explicit-any` |
77
+ | License coverage | `license-coverage` |
78
+ | Verify rules are in sync | `rulesync-check` |
79
+ | `dco` | `dco` |
80
+ | Run all tests (API CI) | `api-ci` |
81
+ | Run all tests (AI CI) | `ai-ci` |
82
+ | RTK Lint and Build | `rtk-ci` |
83
+ | UI Lint, Build, Types, and Tests | `ui-ci` |
84
+ | Demo TypeScript Check (UI dependency) | `ui-demo-typecheck` |
85
+ | Demo Lint and TypeScript Check | `ui-demo-ci` |
86
+ | Lint, compile, and test communications | `comms-ci` |
87
+ | Lint, Build, and Test (MCP) | `mcp-server-ci` |
88
+ | Build Docker Image (MCP) | `mcp-server-docker` |
89
+ | Example Frontend Lint and Test | `example-frontend-ci` |
90
+ | Example Backend Lint, Build, and Test | `example-backend-ci` |
91
+ | Run admin script CLI | `example-backend-script-runner` |
92
+ | Build backend Docker image | `example-backend-docker` |
93
+ | Admin SPA Build and E2E | `admin-spa-ci` |
94
+ | E2E · `<spec>` | `e2e` (matrix `spec`) |
95
+ | E2E Load · syncdb-loadlab | `e2e-load` (trigger-gated, see below) |
96
+ | Admin SPA Backend Integration E2E | `admin-spa-integration` |
97
+ | _(new)_ CircleCI path-filter parity | `circleci-parity` |
98
+ | _(smoke)_ | `config-ok` |
99
+
100
+ Deferred phases keep their GHA checks for now; these are the planned CircleCI job
101
+ names so branch protection can be remapped in one pass later:
102
+
103
+ | GHA job `name:` / workflow (not yet ported) | Planned CircleCI job |
104
+ |---------------------------------------------|----------------------|
105
+ | Fingerprint gate (`fingerprint-gate.yml`) | `fingerprint-gate` (Phase 5) |
106
+ | EAS PR update/build (`eas-pr.yml`) | `eas-pr` (Phase 5) |
107
+ | EAS dev build (`eas-dev-build.yml`) | `eas-dev-build`, manual pipeline (Phase 5) |
108
+ | CD terraform preview/apply (`cd.yml`) | `cd-terraform`, `cd-deploy` (Phase 6) |
109
+ | Preview cleanup (`preview-cleanup.yml`) | `preview-cleanup` (Phase 6) |
110
+ | Netlify demo / frontend / docs deploys | `deploy-demo`, `deploy-example-frontend`, `deploy-docs` (Phase 4) |
111
+ | Publish on tag (`publish-on-tag.yml`) | `publish-npm` (Phase 7, single-writer cutover) |
112
+ | Appium / Maestro | `appium-android`, `appium-ios`, `maestro` (Phase 8) |
113
+
114
+ ## Path-filter parity guard
115
+
116
+ `bun run check:circleci-parity` fails when a GHA `paths:` entry has no mapping to
117
+ its CircleCI parameter — otherwise the twin silently never runs. It runs as the
118
+ `circleci-parity` job (CircleCI) and the **CircleCI path-filter parity** job
119
+ (GitHub Actions `repo-policies`). Add new packages/paths to the mapping in
120
+ `.circleci/config.setup.yml` (or `config.yml` when enabled) and to `WORKFLOW_PARAMETERS` in
121
+ `scripts/check-circleci-parity/lib.ts`.
122
+
123
+ ## Config-only changes
124
+
125
+ When CircleCI is enabled, `.circleci/config.yml` / `continue-config.yml` /
126
+ `example-frontend/playwright.circleci.config.ts` edits set `run-circleci-config`,
127
+ which runs a representative slice (`api-ci`, `ui-ci`, `example-backend-ci`,
128
+ `no-barrel-imports`, `e2e` spec `login`) so config changes are actually exercised
129
+ instead of only hitting the always-on smoke jobs. While disabled, keep the mapping
130
+ in `config.setup.yml` in sync; `check:circleci-parity` reads that file first. CircleCI e2e
131
+ pre-starts a static `bun expo export` on `:8082` (`NODE_OPTIONS=--max-old-space-size=3072`
132
+ for the export only) and reuses it (60s test timeout, `large` Docker). Keeping Metro
133
+ alive next to Chromium gets SIGKILL on 8GB. `xlarge` is not on this project's plan.
134
+
135
+ ## Nightly load test
136
+
137
+ `e2e-load` (syncdb-loadlab) is never PR-blocking. Trigger the **setup** pipeline
138
+ with `run-e2e-load`. Setup skips path-filtering and continues with a differently
139
+ named continuation parameter (`e2e-load`) so CircleCI does not report conflicting
140
+ pipeline parameters.
141
+
142
+ ```json
143
+ {"run-e2e-load": true}
144
+ ```
145
+
146
+ This replaces the GHA cron / `workflow_dispatch` / `load-test` label triggers in
147
+ `e2e-load-nightly.yml`.
148
+
149
+ ## Local validation
150
+
151
+ ```bash
152
+ circleci config validate .circleci/config.yml
153
+ circleci config validate .circleci/continue-config.yml
154
+ ```
155
+
156
+ ## Dual-run drift
157
+
158
+ While both systems run, keep these in sync when editing a GHA workflow:
159
+
160
+ 1. `paths:` → mapping in `.circleci/config.setup.yml` (or `config.yml` when enabled; enforced by `check:circleci-parity`)
161
+ 2. e2e `spec:` matrix → `e2e` workflow matrix in `continue-config.yml`
162
+ 3. New package CI workflow → new param + job + `WORKFLOW_PARAMETERS` entry
163
+
164
+ ## Not in this phase
165
+
166
+ - Netlify / docs / demo / example-frontend **deploys**
167
+ - GCP `cd.yml`, preview-cleanup, OIDC
168
+ - EAS / fingerprint
169
+ - npm publish-on-tag
170
+ - Appium / Maestro
171
+ - CodeQL, Dependabot auto-merge, triage, gh-aw agentics
172
+
173
+ Keep matching `.github/workflows/*` until dual-run cutover deletes them per phase.
@@ -1,20 +1,23 @@
1
1
  # Configure Better Auth
2
2
 
3
- Set up Better Auth as an alternative authentication provider with built-in social OAuth support.
3
+ Set up Better Auth as the **default** authentication provider for new Terreno apps — session-based auth with built-in social OAuth and first-class `@terreno/syncdb` integration.
4
4
 
5
5
  ## Overview
6
6
 
7
- Better Auth is an optional authentication system that runs **alongside** the existing JWT/Passport authentication. You can choose which authentication provider to use at server startup via environment variables.
7
+ Better Auth is the recommended authentication system for new Terreno frontends. Register `BetterAuthApp` on the backend, set `AUTH_PROVIDER=better-auth`, and wire `createBetterAuthClient` + `generateBetterAuthSlice` on the client. Pair with `betterAuthAdapter` when using `@terreno/syncdb`.
8
8
 
9
- **Use Better Auth when you need:**
9
+ JWT/Passport remains available for legacy deployments (`AUTH_PROVIDER=jwt`). Both can run in parallel during migration.
10
+
11
+ **Choose Better Auth for:**
12
+ - New apps and greenfield screens
10
13
  - Social login (Google, GitHub, Apple)
11
- - Session-based authentication
12
- - Modern OAuth 2.0 flows
14
+ - Session-based authentication with `@terreno/syncdb`
15
+ - Socket.io sync via `RealtimeApp` bearer sessions
13
16
 
14
- **Use JWT authentication when you need:**
15
- - Stateless authentication
16
- - Simpler token-based auth
17
- - No social login required
17
+ **Stay on JWT only when:**
18
+ - You have an existing JWT deployment and are mid-migration
19
+ - You require a fully stateless token contract with no session cookies
20
+ - You have custom JWT payload requirements Better Auth cannot satisfy
18
21
 
19
22
  ## Backend Setup
20
23
 
@@ -292,5 +295,5 @@ Better Auth runs **in parallel** with JWT auth. You don't need to migrate existi
292
295
 
293
296
  - [Authentication Architecture](../explanation/authentication.md)
294
297
  - [@terreno/api Reference](../reference/api.md#better-auth)
295
- - [@terreno/rtk Reference](../reference/rtk.md#better-auth)
298
+ - [@terreno/rtk Reference (legacy)](../reference/legacy/rtk.md#better-auth)
296
299
  - [Better Auth Documentation](https://better-auth.com/)