@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
@@ -1,5 +1,7 @@
1
1
  # Task List: Admin-Only — Serve Admin SPA From a Terreno Backend
2
2
 
3
+ **Status:** Closed (2026-08-20) — IP complete. Shipped as `@terreno/admin-spa`. Open tasks below were not executed; see shipped code in `admin-spa/`.
4
+
3
5
  *Structured task breakdown for automated implementation. Each task should be independently implementable and testable.*
4
6
 
5
7
  See: `docs/implementationPlans/admin-only.md` for full plan.
@@ -1,163 +1,57 @@
1
- # Task List: Publish and Document the Agentic SDLC Plugin
1
+ # Task List: Loop-Engineering Lifecycle Plugin
2
2
 
3
3
  See: [`docs/implementationPlans/agentic-sdlc-plugin.md`](../implementationPlans/agentic-sdlc-plugin.md)
4
4
 
5
- **RTK deprecation flag:** **Partial.** Tasks marked `[RTK]` update the frontend-verification path lists, which name `rtk/` today and must name `syncdb/` after PR #869. Everything else is safe to implement now.
6
-
7
- ## Instructions for the implementing agent
8
-
9
- - Read all five skill files under `plugins/terreno-planning/skills/` before changing any of them. The stages reference each other's scope boundaries, so an edit to one often requires a matching edit elsewhere.
10
- - Do not change what a stage *does*. This IP is packaging, portability, and documentation. If you believe a stage's procedure is wrong, note it and propose it separately.
11
- - When you remove Flourish-specific content, do not remove the underlying judgment. "Apply PHI minimum-necessary handling" becomes a rule about sensitive data, not nothing.
12
- - Test portability claims by actually running the pipeline outside this repository. A portability fix you did not exercise in a consumer app is unverified.
13
- - Run `bun run rules:check` after touching `.rulesync/`, and `bun run check` before each commit.
14
-
15
- ## Phase 1: Decide and sanitize
16
-
17
- - [x] **Task 1.1**: Audit the plugin for repo- and org-specific content
18
- - Description: Grep all five skills for Flourish-specific and monorepo-specific content: `rg -n -i "phi|hipaa|flourish|dcb3|example-frontend|admin-spa|bun run|docs/implementationPlans"` across `plugins/`. Produce a table: file, line, category (org-specific / repo-path / hardcoded value / tool assumption), and the proposed replacement. Include the `.cursor-plugin/*.json` files (owner email, marketplace description). Do not change anything yet.
19
- - Files: none (findings in the PR body)
20
- - Depends on: none
21
- - Acceptance: every hit is categorized with a proposed replacement; the table covers all five skills plus both JSON files.
22
-
23
- - [x] **Task 1.2**: Generalize sensitive-data handling
24
- - Description: Per IP question AP2, replace PHI/HIPAA-specific language with generalized sensitive-data language across `terreno-1-blend`, `terreno-4-pour`, and `terreno-5-dialin`. The rule must survive the rewrite: PR text, review replies, and attached evidence media must not contain sensitive data (PHI, PII, credentials, customer data). Keep it concrete — a vague "be careful with data" is not a usable instruction for an agent.
25
- - Files: `plugins/terreno-planning/skills/terreno-1-blend/SKILL.md`, `terreno-4-pour/SKILL.md`, `terreno-5-dialin/SKILL.md`
26
- - Depends on: Task 1.1
27
- - Acceptance: `rg -n -i "phi|hipaa" plugins/` returns nothing; each rewritten rule names the specific artifacts it applies to (PR body, comments, screenshots, recordings) and the data categories.
28
-
29
- - [x] **Task 1.3**: Fix the hardcoded branch suffix
30
- - Description: `terreno-4-pour` documents the branch convention as `cursor/<descriptive-name>-dcb3`. The suffix is per-agent-run, not a fixed literal, so this will produce wrong branch names. Replace it with a description of the convention (a `cursor/` prefix plus the run-specific suffix the agent was given) and instruct the agent to use the suffix from its own run instructions rather than any literal in the skill.
31
- - Files: `plugins/terreno-planning/skills/terreno-4-pour/SKILL.md`
32
- - Depends on: Task 1.1
33
- - Acceptance: no literal run suffix appears anywhere in `plugins/`; the convention is described such that an agent in any run produces a correctly-suffixed branch.
34
-
35
- - [x] **Task 1.4**: Clean up plugin metadata
36
- - Description: Update `.cursor-plugin/marketplace.json` and `plugins/terreno-planning/.cursor-plugin/plugin.json`: adjust the marketplace description per the AP1 decision (it currently says "Team marketplace"), review whether a personal email is the right contact for a public plugin versus a role address, and add a field or README note declaring which Terreno versions the plugin targets (IP question AP7). Add `plugins/terreno-planning/LICENSE` matching the root license.
37
- - Files: `.cursor-plugin/marketplace.json`, `plugins/terreno-planning/.cursor-plugin/plugin.json`, `plugins/terreno-planning/LICENSE` (new)
38
- - Depends on: Task 1.1
39
- - Acceptance: both JSON files are valid and consistent with the AP1 decision; the contact address is a deliberate choice; the targeted Terreno version range is declared; the LICENSE matches the root license.
40
-
41
- ## Phase 2: Portability
42
-
43
- - [ ] **Task 2.1**: Remove repo-root-relative sibling-skill paths
44
- - Description: `terreno-4-pour` step 6 instructs reading `plugins/terreno-planning/skills/terreno-5-dialin/SKILL.md` "from the repository root", and `terreno-5-dialin` does the same for Pour. That path only resolves when the workspace happens to be this repository — an installed plugin lives in the agent's plugin cache. Replace with guidance that resolves in both cases: reference the sibling skill relative to the current skill's own location, and keep the existing note that Cursor may not resolve plugin skill names alone. Verify the replacement actually works by running Pour's handoff from a workspace that is not this repo.
45
- - Files: `plugins/terreno-planning/skills/terreno-4-pour/SKILL.md`, `terreno-5-dialin/SKILL.md`
46
- - Depends on: Task 1.3
47
- - Acceptance: the handoff resolves both inside this repo and in a consumer app; no absolute or repo-root-relative path to a sibling skill remains; the fix was exercised in a non-Terreno workspace.
48
-
49
- - [ ] **Task 2.2**: Resolve the `verify-ui-changes` dependency
50
- - Description: Four stages invoke `verify-ui-changes` by name, but that skill lives in this repo's `.rulesync/skills/` and a consumer installing the plugin does not get it. Choose and implement one resolution: bundle a consumer-appropriate copy inside the plugin, or declare it as a prerequisite with installation instructions, or have `terreno_bootstrap_app` generate it into consumer apps. Whichever is chosen, a consumer running the pipeline must end up with a working frontend-verification step rather than a reference to a skill they do not have.
51
- - Files: `plugins/terreno-planning/skills/*/SKILL.md`, plus the bundled skill or the bootstrap template
52
- - Depends on: Task 2.1
53
- - Acceptance: a consumer app that installed only the plugin can execute the frontend-verification step; the resolution is documented in `plugins/README.md`; no stage references a skill the user cannot obtain.
54
-
55
- - [ ] **Task 2.3**: `[RTK]` Derive frontend paths from project layout
56
- - Description: The frontend gates in Roast, Pour, and Dial In hardcode Terreno monorepo package names (`ui/`, `demo/`, `example-frontend/`, `admin-frontend/`, `admin-spa/`, `rtk/`). Replace with layout detection: describe how to identify frontend paths in the two shapes that matter — this monorepo, and a bootstrapped consumer app (which uses `frontend/`/`backend/`) — and instruct the agent to determine the set rather than assume it. Update the path list to name `syncdb/` instead of `rtk/` per PR #869, keeping `rtk/` for the deprecation window.
57
- - Files: `plugins/terreno-planning/skills/terreno-2-roast/SKILL.md`, `terreno-4-pour/SKILL.md`, `terreno-5-dialin/SKILL.md`
58
- - Depends on: Task 2.2, PR #869 merged
59
- - Acceptance: the gates fire correctly in both a bootstrapped consumer app and this monorepo, verified by running Roast on a frontend change in each; `syncdb/` is included and `rtk/` retained.
60
-
61
- - [ ] **Task 2.4**: Make Blend's conventions portable
62
- - Description: `terreno-1-blend` assumes `docs/implementationPlans/` and `docs/tasks/`, a project registry containing only `flourishhealth/terreno`, and this repo's `bun run` command set. Generalize: describe where planning artifacts go with a documented default and a way to detect an existing convention, replace the hardcoded registry with a resolution procedure, and describe the command set as "the project's lint/compile/test commands" discovered from `package.json`. Keep the question-first behavior exactly as it is — that is the stage's most valuable property.
63
- - Files: `plugins/terreno-planning/skills/terreno-1-blend/SKILL.md`
64
- - Depends on: Task 2.1
65
- - Acceptance: Blend produces an IP in a consumer app with no Terreno-specific directory assumptions; the question-first clarification gate is unchanged; the registry is a procedure rather than a fixed list.
66
-
67
- - [ ] **Task 2.5**: Verify the pipeline in a consumer app
68
- - Description: Scaffold an app with `terreno_bootstrap_app`, install the plugin, and take one small feature from request to open PR through all five stages. Record every place the pipeline assumed something untrue about the project. Fix each. This task is the actual acceptance test for Phase 2 — the previous tasks are hypotheses until this passes.
69
- - Files: any plugin skill needing correction
70
- - Depends on: Task 2.3, Task 2.4
71
- - Acceptance: all five stages complete in a consumer app; a PR is opened with evidence attached; every assumption failure found is fixed; the run is summarized in the PR body.
72
-
73
- ## Phase 3: Resolve overlap with repo skills
74
-
75
- - [ ] **Task 3.1**: Map the overlap precisely
76
- - Description: For each plugin stage, read its repo-skill counterparts (`submit`, `commit`, `create-pr`, `check-watcher`, `respond-to-review`, `autobot`, `ip`, `design-blend`, `implement`) and produce a table: plugin stage, overlapping skill, rules that agree, rules that **disagree**. The disagreements matter most — two documented processes with different rules is worse than either alone. Report in the PR body.
77
- - Files: none (findings in the PR body)
78
- - Depends on: none
79
- - Acceptance: every stage is mapped to its counterparts; all rule disagreements are listed explicitly with both wordings.
80
-
81
- - [ ] **Task 3.2**: Make Brew self-contained; inline Taste review loop per AP5
82
- - Description: Per IP question AP5, rewrite **Taste** (`terreno-5-taste`) to inline the full submit → CI → review loop (former `autobot` behavior) rather than delegating to repo skills — delegation has been unreliable inside the plugin. **Brew** (`terreno-4-brew`) may orchestrate `commit`/`create-pr` where those resolve from the plugin cache, but must not depend on monorepo-only paths. Resolve every disagreement from Task 3.1 in favor of one wording, in one place. Deprecate `submit` and `autobot` repo skills once Taste ships.
83
- - Files: `plugins/terreno-planning/skills/terreno-4-brew/SKILL.md`, `terreno-5-taste/SKILL.md`, and deprecated `.rulesync/skills/submit/`, `autobot/`
84
- - Depends on: Task 3.1, Task 2.5
85
- - Acceptance: Taste completes a full review loop without delegating to repo skills; no rule appears in both a plugin stage and a repo skill with different wording; `submit`/`autobot` are marked deprecated; `bun run rules:check` exits 0.
86
-
87
- - [ ] **Task 3.3**: Cross-reference deprecated repo skills
88
- - Description: Add a short deprecation note to `.rulesync/skills/submit/SKILL.md` and `autobot/SKILL.md` pointing to the plugin pipeline (Brew/Taste) as the supported path. Regenerate mirrors. Document in `plugins/README.md` that the individual repo skills are legacy once the plugin is public.
89
- - Files: `.rulesync/skills/submit/SKILL.md`, `.rulesync/skills/autobot/SKILL.md`, generated mirrors, `plugins/README.md`
90
- - Depends on: Task 3.2, Task 4.1
91
- - Acceptance: both skills state they are deprecated in favor of Brew/Taste; the plugin README references them as legacy; `bun run rules:check` exits 0.
92
-
93
- ## Phase 4: Documentation
94
-
95
- - [ ] **Task 4.1**: Write `plugins/README.md`
96
- - Description: Under 150 lines. Cover: what the pipeline is in two sentences; the five stages in a table with the plain-language meaning of each coffee name per IP question AP3; installation (marketplace, per the AP1 decision); a quickstart showing one feature going through all five stages; prerequisites (the skill dependency from Task 2.2, the Terreno version range from Task 1.4); how it relates to the individual repo skills; and how to use a single stage without the full pipeline. Every command must be one you ran.
97
- - Files: `plugins/README.md` (new)
98
- - Depends on: Task 2.5
99
- - Acceptance: under 150 lines; every coffee name is glossed; the installation steps were performed from a fresh state; the quickstart matches a run you completed.
100
-
101
- - [ ] **Task 4.2**: Write `docs/explanation/agentic-sdlc.md`
102
- - Description: The conceptual case, no commands. Cover: the process layer versus the MCP tool layer, and why both are needed; why planning is a separate stage with a question-first gate (agents confidently plan the wrong thing); why review happens in a **fresh context** rather than by asking the implementing agent to check its own work; why verification is a separate stage from implementation; why the frontend gate demands evidence rather than a claim; and why flaky CI must be classified rather than guessed at. Then an honest limits section: what the pipeline does not do, where a human must decide, and why the review loop persists through slow CI but stops when no autonomous action can advance a terminal failure. Reuse the mermaid diagram from the IP.
103
- - Files: `docs/explanation/agentic-sdlc.md` (new), `docs/explanation/README.md`
104
- - Depends on: Task 4.1
105
- - Acceptance: no commands; all six design rationales explained; a limits section naming at least three things the pipeline will not do; linked from the explanation index.
106
-
107
- - [ ] **Task 4.3**: Write `docs/how-to/use-the-terreno-plugin.md`
108
- - Description: Task-focused: install the plugin, take a small feature from request to merged PR through all five stages, with the real output of each stage. Include what to do when a stage stops and asks a question (Blend's clarification gate), when Roast's review sub-agent flags something, and when Dial In reports blocked. Include a "using one stage on its own" section — most people will start with Pour or Dial In on existing work rather than adopting the whole pipeline at once.
109
- - Files: `docs/how-to/use-the-terreno-plugin.md` (new), `docs/how-to/README.md`
110
- - Depends on: Task 4.2
111
- - Acceptance: the walkthrough was performed and the outputs shown are real; all three interruption cases documented; the single-stage section is present; listed in the how-to index.
112
-
113
- - [ ] **Task 4.4**: Write `docs/reference/sdlc-plugin.md`
114
- - Description: Per-stage reference: name, slash command, plain-language purpose, preconditions, inputs, outputs, scope boundary (what it explicitly does not own), handoff target, and failure/exit conditions. Include the `disable-model-invocation` behavior — several stages are deliberately not auto-invocable and must be called explicitly — and explain why. Add the plugin to `docs/reference/README.md`.
115
- - Files: `docs/reference/sdlc-plugin.md` (new), `docs/reference/README.md`
116
- - Depends on: Task 4.1
117
- - Acceptance: all five stages documented with all eight fields; the auto-invocation behavior matches each skill's frontmatter; listed in the reference index.
118
-
119
- ## Phase 5: Positioning
120
-
121
- - [ ] **Task 5.1**: Add the pipeline to the positioning copy
122
- - Description: Update `docs/explanation/positioning.md` (from [`positioning-django-rails-universal`](../implementationPlans/positioning-django-rails-universal.md)): name the pipeline in the AI-native pillar's `pillars` block, and rewrite the comparison table's generator row so it credits the pipeline — Django gives you `manage.py startapp`, Terreno gives you a reviewed path from request to mergeable PR. Add the tool-layer/process-layer distinction to the `pitch` block. Keep the copy blocks internally consistent, since every other surface copies them verbatim.
123
- - Files: `docs/explanation/positioning.md`
124
- - Depends on: Task 4.2
125
- - Acceptance: the pipeline appears in the pillars block and the comparison table; the tool/process distinction is in the pitch; the blocks remain consistent with each other.
126
-
127
- - [ ] **Task 5.2**: Surface the pipeline in the README and docs landing
128
- - Description: Add the pipeline to `README.md`'s AI section (currently only describes the MCP server) and to `docs/README.md`'s pillars, each with a link to the explainer and the how-to. Keep it to a short paragraph in each — the detail lives in the docs. Make sure the AI section names both layers so a reader understands they are complementary rather than alternatives.
129
- - Files: `README.md`, `docs/README.md`
130
- - Depends on: Task 5.1
131
- - Acceptance: both surfaces name the pipeline and the MCP server as the two halves of the AI story; both link the explainer; neither exceeds a paragraph.
132
-
133
- - [ ] **Task 5.3**: Make agents aware of the pipeline
134
- - Description: Add the pipeline to `.rulesync/rules/00-root.md` (source for `AGENTS.md`, `CLAUDE.md`, and the copilot instructions) and to `CLAUDE-consumer.md`, so an agent working in this repo or in a consumer app knows the pipeline exists and when to use it. Currently no root agent file mentions `plugins/` at all. Regenerate mirrors.
135
- - Files: `.rulesync/rules/00-root.md`, `CLAUDE-consumer.md`, generated mirrors
136
- - Depends on: Task 5.2
137
- - Acceptance: `AGENTS.md` and `CLAUDE.md` both describe the pipeline and when to use it; `bun run rules:check` exits 0.
138
-
139
- - [ ] **Task 5.4**: Use the pipeline in the dogfooding harness
140
- - Description: If AP1 made the plugin public, update `.rulesync/skills/build-terreno-app/SKILL.md` to install and use the pipeline during the dogfooding run — it is exactly the kind of public tooling that harness is meant to exercise, and the run will find portability problems that Task 2.5 missed. Add the plugin to the skill's list of permitted public sources, and add a friction-log section for pipeline-specific gaps. Regenerate mirrors.
141
- - Files: `.rulesync/skills/build-terreno-app/SKILL.md`, generated mirrors
142
- - Depends on: Task 5.3
143
- - Acceptance: the harness installs and uses the pipeline; the plugin is listed among permitted sources; the friction log has a pipeline section; `bun run rules:check` exits 0.
144
-
145
- ## Phase 6: Distribution
146
-
147
- - [ ] **Task 6.1**: Verify a fresh install
148
- - Description: From a clean agent environment with no plugin cache, install the plugin per `plugins/README.md` and confirm all five stages are available and invocable. Record what the install experience actually looks like, including whether the stages appear as slash commands and whether the sibling-skill handoff from Task 2.1 resolves from the cache rather than the workspace.
149
- - Files: `plugins/README.md` (corrections)
150
- - Depends on: Task 4.1, Task 1.4
151
- - Acceptance: a fresh install exposes all five stages; the handoff resolves from the plugin cache; every install-guide inaccuracy is fixed.
152
-
153
- - [ ] **Task 6.2**: Generate non-Cursor variants
154
- - Description: Per IP question AP6, make the pipeline available outside Cursor by routing it through `.rulesync/`, which already generates skills for cursor, claude, devin, copilot, and agents targets. Decide whether the plugin skills become rulesync sources (generated into the plugin directory) or whether a parallel rulesync copy is maintained — prefer one source of truth. Document which runtimes are supported and any behavioral differences (notably that the `disable-model-invocation` and slash-command behavior is Cursor-specific).
155
- - Files: `.rulesync/skills/` or the plugin skills, `plugins/README.md`, `docs/reference/sdlc-plugin.md`, generated mirrors
156
- - Depends on: Task 6.1
157
- - Acceptance: the pipeline is invocable in at least one non-Cursor runtime; there is a single source of truth per skill, not two divergent copies; runtime differences are documented; `bun run rules:check` exits 0.
158
-
159
- - [ ] **Task 6.3**: Extend license coverage to `plugins/`
160
- - Description: Update `scripts/check-license-coverage.ts` (from [`oss-governance-baseline`](../implementationPlans/oss-governance-baseline.md)) so `plugins/terreno-planning/` is covered by the license check. Confirm the plugin ships a LICENSE and that its declared license matches the root license.
161
- - Files: `scripts/check-license-coverage.ts`
162
- - Depends on: Task 1.4, `oss-governance-baseline` Task 1.6
163
- - Acceptance: `bun run check:licenses` covers the plugin; deleting `plugins/terreno-planning/LICENSE` makes it fail and name the plugin.
5
+ ## Phase 1: Audit and contracts
6
+
7
+ - [x] **Task 1.1**: Audit five lifecycle skills, metadata, references, repo skills, state conventions, sync tooling, and long-lived-context assumptions
8
+ - Blocked by: none
9
+ - Acceptance: Findings identify duplicated repository knowledge, missing handoffs, generated sources, and orchestration owned by stages.
10
+ - [x] **Task 1.2**: Define shared stage result and execution-state schemas
11
+ - Blocked by: Task 1.1
12
+ - Acceptance: Stable schemas use only `PASS`/`FAIL`/`BLOCKED`/`PENDING`, preserve evidence/attempts, and contain no reasoning transcript.
13
+ - [x] **Task 1.3**: Document loop ownership, retries, human gates, state transport, and supporting-skill discovery
14
+ - Blocked by: Task 1.2
15
+ - Acceptance: A fresh invocation packet and fallback execution-state location are explicit.
16
+
17
+ ## Phase 2: Bounded lifecycle stages
18
+
19
+ - [x] **Task 2.1**: Refactor Grow as an approved-artifact transition
20
+ - Blocked by: Task 1.3
21
+ - Acceptance: Grow classifies uncertainty, researches facts, grills decisions, maps acceptance to verification, and emits Pick-ready state.
22
+ - [x] **Task 2.2**: Refactor Pick as one-slice TDD implementation
23
+ - Blocked by: Task 1.3
24
+ - Acceptance: Pick consumes retry evidence, preserves verified behavior, runs independent implementation/test-quality review, and delegates repository detail.
25
+ - [x] **Task 2.3**: Refactor Roast as independent authoritative verification
26
+ - Blocked by: Task 2.2
27
+ - Acceptance: Roast executes a requirement/evidence matrix, does not trust Pick claims, and returns exact failures to Pick.
28
+ - [x] **Task 2.4**: Refactor Brew to terminate after PR setup
29
+ - Blocked by: Task 2.3
30
+ - Acceptance: Brew records PR/current head and recommends Taste without executing or waiting for it.
31
+ - [x] **Task 2.5**: Refactor Taste as one reactive iteration
32
+ - Blocked by: Task 2.4
33
+ - Acceptance: Taste observes current head once, handles current actionable work, emits state, exits, and contains no internal waiting loop.
34
+
35
+ ## Phase 3: Plugin boundary and composition
36
+
37
+ - [x] **Task 3.1**: Remove Terreno package commands/patterns from lifecycle control surfaces
38
+ - Blocked by: Task 2.5
39
+ - Acceptance: Exact repo knowledge remains under `.rulesync/skills/`; lifecycle stages discover applicable skills.
40
+ - [x] **Task 3.2**: Convert plugin utility/orchestration skills to shared references
41
+ - Blocked by: Task 2.5
42
+ - Acceptance: Plugin exposes exactly five lifecycle skill directories; independent review and feature-loop behavior remain documented once.
43
+ - [x] **Task 3.3**: Document backend, UI, and multi-invocation CI/review compositions
44
+ - Blocked by: Task 3.2
45
+ - Acceptance: Each scenario shows lifecycle + project skills + durable evidence.
46
+
47
+ ## Phase 4: Validation and documentation
48
+
49
+ - [x] **Task 4.1**: Add lifecycle architecture validator and unit tests
50
+ - Blocked by: Task 3.2
51
+ - Acceptance: Validator enforces names/directories, required contracts, status/transition values, portability, Brew/Taste boundaries, and migration docs.
52
+ - [x] **Task 4.2**: Update plugin/docs/metadata/changelog and regenerate integrations
53
+ - Blocked by: Task 4.1
54
+ - Acceptance: Plugin is `2.0.0`; docs describe the bounded loop; generated rules are current; retired names appear only in intentional migration/history.
55
+ - [x] **Task 4.3**: Run static tests, rulesync validation, lint/type checks, and independent review
56
+ - Blocked by: Task 4.2
57
+ - Acceptance: All checks pass and no material standards/spec findings remain.
@@ -9,39 +9,39 @@ IP: [comms-abstraction](../implementationPlans/comms-abstraction.md)
9
9
  - Files: `comms/package.json`, `comms/tsconfig.json`, `comms/biome.jsonc`, root `package.json`
10
10
  - Depends on: none
11
11
  - Acceptance: `bun run comms:compile` and `bun run comms:lint` pass
12
- - [ ] **Task 1.2**: Provider interfaces and message types
13
- - Description: `MailProvider`, `SmsProvider`, `PushProvider`, `VerificationProvider`, `SendResult` (incl. `errorCode`/`errorClass`), `DeliveryEvent`, `CommsHookContext`, `OptOutEvent` per IP
14
- - Status: base provider/message contracts shipped; `errorCode`/`errorClass`, `CommsHookContext`, and `OptOutEvent` remain
15
- - Files: `comms/src/types.ts`
12
+ - [x] **Task 1.2**: Finish provider types for remaining contracts
13
+ - Description: Add `cancelled` to `CommsMessageStatus`; expand `CommsHookContext` (`message`, `userId`, `isRetry`, `attempt`, `messageId`); add `OptOutEvent`; add `errorCode`/`errorClass` on `DeliveryEvent`; keep shipped `onRetry(context, result)` and `isPermanentFailure` alias
14
+ - Status: base provider/message/`errorCode`/`errorClass` shipped; listed fields remain
15
+ - Files: `comms/src/types.ts`, `comms/src/index.ts`
16
16
  - Depends on: 1.1
17
- - Acceptance: types compile and are exported
17
+ - Acceptance: types compile and are exported; existing SendGrid tests still typecheck against `onRetry(context, result)`
18
18
  - [x] **Task 1.3**: Console adapters
19
19
  - Description: dev adapters for all four channels logging via `logger.info`
20
20
  - Files: `comms/src/adapters/console.ts` + tests
21
21
  - Depends on: 1.2
22
22
  - Acceptance: each adapter returns `accepted: true` and logs
23
- - [ ] **Task 1.4**: `CommsMessage` model + `logSend`
24
- - Description: delivery log model with five-type pattern, `description` on every field, plugins, static `logSend` that never throws; dashboard-ready fields (`errorCode`, `errorClass`, `attempts[]`, `attemptCount`, `lastAttemptAt`, `retriedFromId`/`retriedById`, `templateId`, retained `payload`)
25
- - Files: `comms/src/models/commsMessage.ts` + tests
26
- - Depends on: 1.1
27
- - Acceptance: send logging survives a forced model error (logged, not thrown); attempts append per attempt
28
- - Status: model and non-throwing `logSend` shipped; dashboard-ready fields remain
29
- - [ ] **Task 1.5**: `commsService` send facade
30
- - Description: `sendMail`/`sendSms`/`sendPushToUser`/`startVerification`/`checkVerification`; template render helper; unconfigured-channel behavior (501 in prod, console fallback in dev); inline retry on `errorClass: "transient"` only
31
- - Status: send facade, templates, and unconfigured-channel behavior shipped; inline transient retry remains
32
- - Files: `comms/src/commsService.ts`, `comms/src/templates.ts` + tests
33
- - Depends on: 1.2, 1.3, 1.4
34
- - Acceptance: unit tests cover happy path + unconfigured channel in both env modes; permanent failures do not retry
35
- - [ ] **Task 1.6**: Lifecycle hooks
36
- - Description: `beforeSend` (mutate/cancel), `onSend`, `onError`, `onRetry`, `onOptOut`, `onDeliveryEvent` wiring in the facade; every hook wrapped so a throw is logged and never changes the send outcome
23
+ - [x] **Task 1.4**: `CommsMessage` attempt history + dashboard fields
24
+ - Description: add `status: cancelled`, `attempts[]`, `attemptCount`, `lastAttemptAt`, `retriedFromId`/`retriedById`, `templateId`, `payload`, `payloadExpiresAt`; `logSend` creates the first row; `appendAttempt` never throws; `clearExpiredPayloads` unsets expired `payload` only (limit 50)
25
+ - Files: `comms/src/models/commsMessage.ts`, `comms/src/modelTypes.ts` + tests
26
+ - Depends on: 1.2
27
+ - Acceptance: send logging survives a forced model error (logged, not thrown); a second attempt appends without a second row; Mongo TTL index is not used
28
+ - Status: model, `errorCode`/`errorClass`, and non-throwing `logSend` shipped; listed fields remain
29
+ - [x] **Task 1.5**: Channel-wide transient retry + no rethrow
30
+ - Description: wrap provider throws as `{accepted: false, errorClass: "transient", errorCode: "provider-throw"}`; retry once on transient for `sendMail`, `sendSms`, `startVerification`; for `sendPushToUser`, retry only tokens whose first result is transient; do not retry `checkVerification`; prune tokens when `errorClass === "permanent"` or `isPermanentFailure === true`
31
+ - Status: mail retry shipped; SMS/push/verification still rethrow; prune is `isPermanentFailure` only
37
32
  - Files: `comms/src/commsService.ts` + tests
33
+ - Depends on: 1.2, 1.3, 1.4
34
+ - Acceptance: unit tests cover happy path + unconfigured channel in both env modes; permanent/config failures do not retry; SMS throw returns a `SendResult` instead of rejecting
35
+ - [x] **Task 1.6**: Lifecycle hooks + event intake
36
+ - Description: `beforeSend` (mutate/cancel, once before first attempt; throwing beforeSend = no cancel); `onSend`/`onError`/`onRetry` (keep `(context, result)`, set `context.attempt`); `recordDeliveryEvent` / `recordOptOut` invoke `onDeliveryEvent` / `onOptOut` and update the log row by `providerMessageId` when present; wrap every hook
37
+ - Files: `comms/src/commsService.ts`, `comms/src/types.ts` + tests
38
38
  - Depends on: 1.5
39
- - Acceptance: one test per hook (fires with correct context) plus one throwing-hook test per hook
40
- - [ ] **Task 1.7**: Payload retention + redaction
41
- - Description: `retainPayloadDays` (default 30) storage of rendered payload post-`redactPayload`; expiry cleanup clears `payload` without touching the log row
39
+ - Acceptance: one test per hook (fires with correct context) plus one throwing-hook test per hook; cancelled send has `status: "cancelled"` and zero provider calls
40
+ - [x] **Task 1.7**: Payload retention + redaction
41
+ - Description: `retainPayloadDays` (default 30) stores the channel payload after `redactPayload`; `retainPayloadDays: 0` stores nothing; push payload omits tokens; verification start stores `{channel}` only; `clearExpiredPayloads` runs best-effort from `logSend`/`appendAttempt`
42
42
  - Files: `comms/src/commsService.ts`, `comms/src/models/commsMessage.ts` + tests
43
- - Depends on: 1.4, 1.5
44
- - Acceptance: payload stored redacted; expired payload cleared; `retainPayloadDays: 0` stores nothing
43
+ - Depends on: 1.4, 1.5, 1.6
44
+ - Acceptance: payload stored redacted; expired payload cleared without deleting the row; `retainPayloadDays: 0` stores nothing
45
45
 
46
46
  ## Phase 2 — CommsApp + routes
47
47
 
@@ -70,6 +70,7 @@ IP: [comms-abstraction](../implementationPlans/comms-abstraction.md)
70
70
  - Files: `comms/src/commsService.ts` + tests
71
71
  - Depends on: 2.1, 1.5
72
72
  - Acceptance: dead token is `active: false` after a failed send
73
+ - Note: remaining prune-by-`errorClass` work is in Task 1.5
73
74
 
74
75
  ## Phase 3 — Integration + docs
75
76
 
@@ -88,3 +89,8 @@ IP: [comms-abstraction](../implementationPlans/comms-abstraction.md)
88
89
  - Files: `.github/workflows/comms-ci.yml`, `.github/workflows/publish-on-tag.yml`
89
90
  - Depends on: 1.x
90
91
  - Acceptance: CI green on the PR
92
+ - [x] **Task 3.4**: Docs refresh for gap-fill APIs
93
+ - Description: document `beforeSend`, `recordDeliveryEvent`/`recordOptOut`, attempt history, payload retention, channel-wide retry, and the `onRetry`/`isPermanentFailure` aliases in reference docs + comms rule
94
+ - Files: `docs/reference/comms.md`, `.rulesync/rules/comms/00-comms.md`
95
+ - Depends on: 1.6, 1.7
96
+ - Acceptance: `bun run rules:check` passes; docs match the Approved IP
@@ -4,22 +4,22 @@ IP: [comms-adapter-sendgrid](../implementationPlans/comms-adapter-sendgrid.md)
4
4
 
5
5
  ## Phase 1 — Send path
6
6
 
7
- - [ ] **Task 1.1**: `SendGridMailProvider` with config + sandbox mode
7
+ - [x] **Task 1.1**: `SendGridMailProvider` with config + sandbox mode
8
8
  - Description: constructor/env config, from-address fallback chain, sandbox default under test
9
9
  - Files: `comms/src/adapters/sendgrid.ts`
10
10
  - Depends on: comms-abstraction Phase 1
11
11
  - Acceptance: mocked-client tests for text/html/template sends
12
- - [ ] **Task 1.2**: Error classification
12
+ - [x] **Task 1.2**: Error classification
13
13
  - Description: HTTP status → `errorCode`/`errorClass` per the IP table (400 permanent, 401/403 config, 429/5xx transient); full response body into `CommsMessage.metadata`; never throws
14
14
  - Files: `comms/src/adapters/sendgrid.ts`
15
15
  - Depends on: 1.1
16
16
  - Acceptance: unverified-sender (config), bad-address (permanent), and 429 (transient) fixtures assert `errorClass`; permanent skips the inline retry
17
- - [ ] **Task 1.3**: Dashboard metadata + hooks coverage
17
+ - [x] **Task 1.3**: Dashboard metadata + hooks coverage
18
18
  - Description: capture `x-message-id`; `metadata.consoleUrl` Email Activity deep link; `onError` fires with the classified `SendResult`
19
19
  - Files: `comms/src/adapters/sendgrid.ts` + tests
20
20
  - Depends on: 1.2
21
21
  - Acceptance: accepted-send test asserts message id + consoleUrl; failed-send test asserts onError invocation
22
- - [ ] **Task 1.4**: Peer dep + registration + docs
22
+ - [x] **Task 1.4**: Peer dep + registration + docs
23
23
  - Description: optional peer `@sendgrid/mail`; env-gated example-backend registration with fail-fast; reference + env docs incl. sender-verification checklist
24
24
  - Files: `comms/package.json`, `example-backend/src/server.ts`, `docs/reference/comms.md`, `docs/reference/environment-variables.md`
25
25
  - Depends on: 1.1
@@ -1,5 +1,7 @@
1
1
  # Task List: Consent Forms System
2
2
 
3
+ **Status:** Closed (2026-08-20) — IP complete. Shipped in `@terreno/api` (`ConsentApp`) and `@terreno/ui`. Open tasks below were not executed.
4
+
3
5
  *Structured task breakdown for automated implementation. Each task should be independently implementable and testable.*
4
6
 
5
7
  ## Phase 1: Models + API
@@ -1,5 +1,7 @@
1
1
  # Feature Flags — Task List
2
2
 
3
+ **Status:** Closed (2026-08-20) — IP deferred; superseded by [feature-flags-openfeature.md](./feature-flags-openfeature.md). Open tasks below will not be executed.
4
+
3
5
  ## Phase 1: Backend + Evaluation Engine
4
6
 
5
7
  - [ ] **Task 1.1**: Create `feature-flags/` package with FeatureFlag model (including archived field)
@@ -19,14 +19,16 @@ Research: [`docs/implementationPlans/migrate-cicd-to-circleci-research.md`](../i
19
19
  - Files: `docs/how-to/circleci.md` (stub OK)
20
20
  - Depends on: none (human prerequisite)
21
21
  - Acceptance: a manual “hello” pipeline can be triggered from the project; dynamic config is enabled.
22
+ - Note: hello scaffold merged (#1052). Dynamic config + org slug still need maintainer confirmation.
22
23
 
23
24
  - [ ] **Task 0.2**: Create CircleCI Contexts (empty shells)
24
25
  - Description: Create contexts named in the IP (`terreno-npm`, `terreno-netlify`, `terreno-expo`, `terreno-gcp`, `terreno-e2e`, `terreno-release`, `terreno-agentic`, `terreno-github-api`). Document which GitHub secrets map into each. Do not paste secret values into the repo.
25
26
  - Files: `docs/how-to/circleci.md`
26
27
  - Depends on: Task 0.1
27
28
  - Acceptance: contexts exist; mapping table is complete; access restrictions noted for `terreno-release`.
29
+ - Note: mapping table documented in how-to; contexts themselves are still a human step.
28
30
 
29
- - [ ] **Task 0.3**: Inventory required GitHub checks
31
+ - [x] **Task 0.3**: Inventory required GitHub checks
30
32
  - Description: List current branch-protection required checks and map each to the GHA job `name:` and the future CircleCI job name. Start from `docs/explanation/repository-settings.md` and live settings.
31
33
  - Files: `docs/how-to/circleci.md` or a short table in the IP
32
34
  - Depends on: none
@@ -34,43 +36,45 @@ Research: [`docs/implementationPlans/migrate-cicd-to-circleci-research.md`](../i
34
36
 
35
37
  ## Phase 1: Foundation
36
38
 
37
- - [ ] **Task 1.1**: Add setup + continue config skeleton
39
+ - [x] **Task 1.1**: Add setup + continue config skeleton
38
40
  - Description: Create `.circleci/config.yml` with `setup: true` using `circleci/path-filtering` (and `circleci/continuation`). Create `.circleci/continue-config.yml` with parameters for each package/area and a no-op `config-ok` job that always runs.
39
41
  - Files: `.circleci/config.yml`, `.circleci/continue-config.yml`
40
42
  - Depends on: Task 0.1
41
43
  - Acceptance: push triggers setup → continuation; `config-ok` is green.
42
44
 
43
- - [ ] **Task 1.2**: Shared Bun + cache commands
45
+ - [x] **Task 1.2**: Shared Bun + cache commands
44
46
  - Description: Add reusable commands (inline or orb) for installing Bun via `circleci/node`, `bun install --frozen-lockfile`, and cache keys equivalent to today’s GHA bun cache. Pin Bun policy (`latest` vs pin) consistently with EAS jobs that need a pin.
45
47
  - Files: `.circleci/continue-config.yml`
46
48
  - Depends on: Task 1.1
47
49
  - Acceptance: a sample job restores cache on second run; install is frozen-lockfile.
48
50
 
49
- - [ ] **Task 1.3**: Path-filter mapping
51
+ - [x] **Task 1.3**: Path-filter mapping
50
52
  - Description: Encode path → parameter mapping for api, ai, ui, rtk, comms, mcp-server, admin-*, example-*, demo, docs/website, terraform, e2e-relevant sets, matching current workflow path filters.
51
53
  - Files: `.circleci/config.yml`
52
54
  - Depends on: Task 1.1
53
55
  - Acceptance: a docs-only change sets docs/deploy params without setting `run-api`.
56
+ - Note: deploy path params omitted until Phase 4+.
54
57
 
55
58
  ## Phase 2: Package CI + policy
56
59
 
57
- - [ ] **Task 2.1**: Port package CI jobs
60
+ - [x] **Task 2.1**: Port package CI jobs
58
61
  - Description: Port api/ai/rtk/ui/ui-demo/comms/mcp-server/example-frontend/example-backend(+script)/admin-spa CI to CircleCI jobs gated by path params. Include Mongo service where GHA used it. Fix mcp branch filter to `master`.
59
62
  - Files: `.circleci/continue-config.yml`, possibly package scripts unchanged
60
63
  - Depends on: Task 1.2, Task 1.3
61
64
  - Acceptance: dual-run green for each package on a change that touches it; GHA still required.
62
65
 
63
- - [ ] **Task 2.2**: Port Docker build-only job
66
+ - [x] **Task 2.2**: Port Docker build-only job
64
67
  - Description: Port `example-backend-docker.yml` to CircleCI remote Docker / machine with layer caching replacement for `type=gha`.
65
68
  - Files: `.circleci/continue-config.yml`
66
69
  - Depends on: Task 2.1
67
70
  - Acceptance: PR touching `example-backend/**` builds the image without pushing.
68
71
 
69
- - [ ] **Task 2.3**: Port repo-policies + rulesync + DCO
72
+ - [x] **Task 2.3**: Port repo-policies + rulesync + DCO
70
73
  - Description: Port `repo-policies.yml`, `rulesync-check.yml`, and fork DCO checks. DCO must use GitHub API via `terreno-github-api` context.
71
74
  - Files: `.circleci/continue-config.yml`
72
75
  - Depends on: Task 0.2, Task 1.2
73
76
  - Acceptance: intentional barrel-import / dirty rulesync / missing DCO on a fork PR fails the CircleCI job.
77
+ - Note: DCO skips cleanly if `GITHUB_TOKEN` unset until context is created.
74
78
 
75
79
  - [ ] **Task 2.4**: Dual-run cutover for Phase 2
76
80
  - Description: Add CircleCI checks to branch protection; remove GHA package/policy workflows once trusted; delete corresponding `.github/workflows/*-ci.yml` and policy workflows.
@@ -80,7 +84,7 @@ Research: [`docs/implementationPlans/migrate-cicd-to-circleci-research.md`](../i
80
84
 
81
85
  ## Phase 3: Playwright E2E
82
86
 
83
- - [ ] **Task 3.1**: Port `e2e-ci` and `admin-spa-integration`
87
+ - [x] **Task 3.1**: Port `e2e-ci` and `admin-spa-integration`
84
88
  - Description: Mongo replica set, E2E secrets context, Playwright browsers, artifact store for reports. Skip Dependabot-equivalent if applicable.
85
89
  - Files: `.circleci/continue-config.yml`
86
90
  - Depends on: Task 2.1, Task 0.2
@@ -209,7 +213,7 @@ Research: [`docs/implementationPlans/migrate-cicd-to-circleci-research.md`](../i
209
213
  - Acceptance: `rg -n "GitHub Actions" docs/explanation/repository-settings.md` and deploy docs reflect CircleCI as source of truth.
210
214
 
211
215
  - [ ] **Task 10.2**: Final GHA workflow purge + IP close
212
- - Description: Ensure `.github/workflows` has no CI/CD yml left (except intentionally empty dir or README). Update `PLAN_INDEX.md`; archive IP when Complete.
213
- - Files: `.github/workflows/`, `docs/implementationPlans/PLAN_INDEX.md`
216
+ - Description: Ensure `.github/workflows` has no CI/CD yml left (except intentionally empty dir or README). Set the IP `**Status:**` to Complete and archive the IP.
217
+ - Files: `.github/workflows/`, `docs/implementationPlans/migrate-cicd-to-circleci.md`
214
218
  - Depends on: Task 9.3, Task 10.1, Task 8.2
215
219
  - Acceptance: `ls .github/workflows/*.yml` is empty (or only an agreed stub); IP status Complete.
@@ -1,5 +1,7 @@
1
1
  # modelRouter Actions — Task List
2
2
 
3
+ **Status:** Closed (2026-08-20) — IP deferred. Open tasks below will not be executed.
4
+
3
5
  ## Phase 1: Foundation (types + runtime + per-route OpenAPI middleware)
4
6
 
5
7
  - [ ] **Task 1.1**: Add `zod ^4.3.6` as a **peerDependency** of `@terreno/api` (also pin `^4.3.6` in `devDependencies` so the package compiles/tests on its own) and `@asteasolutions/zod-to-openapi ^8.5.0` as a regular `dependency` (it bundles its own usage). Use Bun catalog for Zod if a catalog version exists.