@terreno/mcp 56.0.0-beta.0 → 56.0.0-beta.2

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 (154) hide show
  1. package/LICENSE +21 -0
  2. package/dist/bootstrap.js +7 -7
  3. package/dist/bootstrap.js.map +1 -1
  4. package/dist/docs/templates/bootstrap/backend/types/models/userTypes.template.md +5 -4
  5. package/dist/docs/templates/tools/model.template.md +4 -2
  6. package/dist/docs/upgrades/0.31.0.md +60 -0
  7. package/dist/docs/upgrades/56.0.0-beta.2.md +59 -0
  8. package/dist/docs/versioned/next/README.md +1 -0
  9. package/dist/docs/versioned/next/explanation/README.md +7 -1
  10. package/dist/docs/versioned/next/explanation/deployment-architecture-gcp.md +65 -0
  11. package/dist/docs/versioned/next/explanation/deployment-baseline.md +78 -0
  12. package/dist/docs/versioned/next/explanation/positioning.md +164 -0
  13. package/dist/docs/versioned/next/explanation/repository-settings.md +44 -0
  14. package/dist/docs/versioned/next/explanation/roadmap-process.md +330 -0
  15. package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +887 -0
  16. package/dist/docs/versioned/next/how-to/README.md +8 -0
  17. package/dist/docs/versioned/next/how-to/build-for-web.md +69 -0
  18. package/dist/docs/versioned/next/how-to/deploy-backend-to-cloud-run.md +115 -0
  19. package/dist/docs/versioned/next/how-to/deploy-to-gcp.md +20 -228
  20. package/dist/docs/versioned/next/how-to/deploy-web-to-gcs-cdn.md +183 -0
  21. package/dist/docs/versioned/next/implementationPlans/PLAN_INDEX.md +31 -0
  22. package/dist/docs/versioned/next/implementationPlans/README.md +56 -30
  23. package/dist/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +2 -1
  24. package/dist/docs/versioned/next/implementationPlans/ai-dev-loop-boost.md +1 -0
  25. package/dist/docs/versioned/next/implementationPlans/b2b-platform-program.md +115 -0
  26. package/dist/docs/versioned/next/implementationPlans/billing-stripe.md +158 -0
  27. package/dist/docs/versioned/next/implementationPlans/build-terreno-app-validation.md +1 -0
  28. package/dist/docs/versioned/next/implementationPlans/comms-abstraction.md +323 -0
  29. package/dist/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +107 -0
  30. package/dist/docs/versioned/next/implementationPlans/comms-adapter-sendgrid.md +157 -0
  31. package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +155 -0
  32. package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-verify.md +99 -0
  33. package/dist/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +180 -0
  34. package/dist/docs/versioned/next/implementationPlans/deploy-to-gcp.md +1 -0
  35. package/dist/docs/versioned/next/implementationPlans/deploy-to-vercel.md +1 -0
  36. package/dist/docs/versioned/next/implementationPlans/deployment-foundation.md +1 -0
  37. package/dist/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -0
  38. package/dist/docs/versioned/next/implementationPlans/docs-tutorials-ai-first.md +1 -0
  39. package/dist/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -0
  40. package/dist/docs/versioned/next/implementationPlans/infra-mcp-research.md +188 -0
  41. package/dist/docs/versioned/next/implementationPlans/infra-mcp.md +269 -0
  42. package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci-research.md +126 -0
  43. package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +269 -0
  44. package/dist/docs/versioned/next/implementationPlans/native-module-baseline.md +105 -0
  45. package/dist/docs/versioned/next/implementationPlans/orgs-and-teams.md +158 -0
  46. package/dist/docs/versioned/next/implementationPlans/oss-governance-baseline.md +1 -0
  47. package/dist/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +147 -0
  48. package/dist/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -0
  49. package/dist/docs/versioned/next/implementationPlans/public-roadmap-github.md +1 -0
  50. package/dist/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -0
  51. package/dist/docs/versioned/next/implementationPlans/web-ssr-and-admin-spa.md +1 -0
  52. package/dist/docs/versioned/next/reference/README.md +5 -0
  53. package/dist/docs/versioned/next/reference/admin-spa.md +130 -0
  54. package/dist/docs/versioned/next/reference/ai.md +519 -0
  55. package/dist/docs/versioned/next/reference/comms.md +132 -0
  56. package/dist/docs/versioned/next/reference/environment-variables.md +229 -382
  57. package/dist/docs/versioned/next/reference/test.md +108 -0
  58. package/dist/docs/versioned/next/roadmap.md +9 -0
  59. package/dist/docs/versioned/next/tasks/README.md +42 -0
  60. package/dist/docs/versioned/next/tasks/agentic-sdlc-plugin.md +5 -5
  61. package/dist/docs/versioned/next/tasks/billing-stripe.md +75 -0
  62. package/dist/docs/versioned/next/tasks/comms-abstraction.md +90 -0
  63. package/dist/docs/versioned/next/tasks/comms-adapter-expo-push.md +29 -0
  64. package/dist/docs/versioned/next/tasks/comms-adapter-sendgrid.md +39 -0
  65. package/dist/docs/versioned/next/tasks/comms-adapter-twilio-sms.md +39 -0
  66. package/dist/docs/versioned/next/tasks/comms-adapter-twilio-verify.md +19 -0
  67. package/dist/docs/versioned/next/tasks/comms-admin-dashboard.md +52 -0
  68. package/dist/docs/versioned/next/tasks/deploy-to-gcp.md +11 -11
  69. package/dist/docs/versioned/next/tasks/deployment-foundation.md +12 -12
  70. package/dist/docs/versioned/next/tasks/docs-reference-coverage.md +4 -4
  71. package/dist/docs/versioned/next/tasks/infra-mcp.md +43 -0
  72. package/dist/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +215 -0
  73. package/dist/docs/versioned/next/tasks/native-module-baseline.md +42 -0
  74. package/dist/docs/versioned/next/tasks/orgs-and-teams.md +70 -0
  75. package/dist/docs/versioned/next/tasks/oss-governance-baseline.md +18 -18
  76. package/dist/docs/versioned/next/tasks/password-reset-and-email-verification.md +60 -0
  77. package/dist/docs/versioned/next/tasks/positioning-django-rails-universal.md +4 -4
  78. package/dist/docs/versioned/next/tasks/public-roadmap-github.md +15 -15
  79. package/package.json +4 -3
  80. package/src/docs/templates/bootstrap/backend/types/models/userTypes.template.md +5 -4
  81. package/src/docs/templates/tools/model.template.md +4 -2
  82. package/src/docs/upgrades/0.31.0.md +60 -0
  83. package/src/docs/upgrades/56.0.0-beta.2.md +59 -0
  84. package/src/docs/versioned/next/README.md +1 -0
  85. package/src/docs/versioned/next/explanation/README.md +7 -1
  86. package/src/docs/versioned/next/explanation/deployment-architecture-gcp.md +65 -0
  87. package/src/docs/versioned/next/explanation/deployment-baseline.md +78 -0
  88. package/src/docs/versioned/next/explanation/positioning.md +164 -0
  89. package/src/docs/versioned/next/explanation/repository-settings.md +44 -0
  90. package/src/docs/versioned/next/explanation/roadmap-process.md +330 -0
  91. package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +887 -0
  92. package/src/docs/versioned/next/how-to/README.md +8 -0
  93. package/src/docs/versioned/next/how-to/build-for-web.md +69 -0
  94. package/src/docs/versioned/next/how-to/deploy-backend-to-cloud-run.md +115 -0
  95. package/src/docs/versioned/next/how-to/deploy-to-gcp.md +20 -228
  96. package/src/docs/versioned/next/how-to/deploy-web-to-gcs-cdn.md +183 -0
  97. package/src/docs/versioned/next/implementationPlans/PLAN_INDEX.md +31 -0
  98. package/src/docs/versioned/next/implementationPlans/README.md +56 -30
  99. package/src/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +2 -1
  100. package/src/docs/versioned/next/implementationPlans/ai-dev-loop-boost.md +1 -0
  101. package/src/docs/versioned/next/implementationPlans/b2b-platform-program.md +115 -0
  102. package/src/docs/versioned/next/implementationPlans/billing-stripe.md +158 -0
  103. package/src/docs/versioned/next/implementationPlans/build-terreno-app-validation.md +1 -0
  104. package/src/docs/versioned/next/implementationPlans/comms-abstraction.md +323 -0
  105. package/src/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +107 -0
  106. package/src/docs/versioned/next/implementationPlans/comms-adapter-sendgrid.md +157 -0
  107. package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +155 -0
  108. package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-verify.md +99 -0
  109. package/src/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +180 -0
  110. package/src/docs/versioned/next/implementationPlans/deploy-to-gcp.md +1 -0
  111. package/src/docs/versioned/next/implementationPlans/deploy-to-vercel.md +1 -0
  112. package/src/docs/versioned/next/implementationPlans/deployment-foundation.md +1 -0
  113. package/src/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -0
  114. package/src/docs/versioned/next/implementationPlans/docs-tutorials-ai-first.md +1 -0
  115. package/src/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -0
  116. package/src/docs/versioned/next/implementationPlans/infra-mcp-research.md +188 -0
  117. package/src/docs/versioned/next/implementationPlans/infra-mcp.md +269 -0
  118. package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci-research.md +126 -0
  119. package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +269 -0
  120. package/src/docs/versioned/next/implementationPlans/native-module-baseline.md +105 -0
  121. package/src/docs/versioned/next/implementationPlans/orgs-and-teams.md +158 -0
  122. package/src/docs/versioned/next/implementationPlans/oss-governance-baseline.md +1 -0
  123. package/src/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +147 -0
  124. package/src/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -0
  125. package/src/docs/versioned/next/implementationPlans/public-roadmap-github.md +1 -0
  126. package/src/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -0
  127. package/src/docs/versioned/next/implementationPlans/web-ssr-and-admin-spa.md +1 -0
  128. package/src/docs/versioned/next/reference/README.md +5 -0
  129. package/src/docs/versioned/next/reference/admin-spa.md +130 -0
  130. package/src/docs/versioned/next/reference/ai.md +519 -0
  131. package/src/docs/versioned/next/reference/comms.md +132 -0
  132. package/src/docs/versioned/next/reference/environment-variables.md +229 -382
  133. package/src/docs/versioned/next/reference/test.md +108 -0
  134. package/src/docs/versioned/next/roadmap.md +9 -0
  135. package/src/docs/versioned/next/tasks/README.md +42 -0
  136. package/src/docs/versioned/next/tasks/agentic-sdlc-plugin.md +5 -5
  137. package/src/docs/versioned/next/tasks/billing-stripe.md +75 -0
  138. package/src/docs/versioned/next/tasks/comms-abstraction.md +90 -0
  139. package/src/docs/versioned/next/tasks/comms-adapter-expo-push.md +29 -0
  140. package/src/docs/versioned/next/tasks/comms-adapter-sendgrid.md +39 -0
  141. package/src/docs/versioned/next/tasks/comms-adapter-twilio-sms.md +39 -0
  142. package/src/docs/versioned/next/tasks/comms-adapter-twilio-verify.md +19 -0
  143. package/src/docs/versioned/next/tasks/comms-admin-dashboard.md +52 -0
  144. package/src/docs/versioned/next/tasks/deploy-to-gcp.md +11 -11
  145. package/src/docs/versioned/next/tasks/deployment-foundation.md +12 -12
  146. package/src/docs/versioned/next/tasks/docs-reference-coverage.md +4 -4
  147. package/src/docs/versioned/next/tasks/infra-mcp.md +43 -0
  148. package/src/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +215 -0
  149. package/src/docs/versioned/next/tasks/native-module-baseline.md +42 -0
  150. package/src/docs/versioned/next/tasks/orgs-and-teams.md +70 -0
  151. package/src/docs/versioned/next/tasks/oss-governance-baseline.md +18 -18
  152. package/src/docs/versioned/next/tasks/password-reset-and-email-verification.md +60 -0
  153. package/src/docs/versioned/next/tasks/positioning-django-rails-universal.md +4 -4
  154. package/src/docs/versioned/next/tasks/public-roadmap-github.md +15 -15
@@ -0,0 +1,164 @@
1
+ # Positioning
2
+
3
+ This is the single source of truth for how Terreno describes itself. The problem
4
+ this page exists to fix is drift: the README, the docs landing page, `AGENTS.md`,
5
+ and the npm package descriptions have historically said different things, so a
6
+ visitor's impression of Terreno depended on which door they walked through.
7
+
8
+ The rule is simple: **write the wording once, here, then reuse it verbatim
9
+ everywhere else.** Do not paraphrase per surface.
10
+
11
+ ## Canonical copy blocks
12
+
13
+ Copy these blocks exactly. They are in fenced code blocks so they can be lifted
14
+ without markdown-rendering surprises.
15
+
16
+ ### `tagline`
17
+
18
+ Used by: README H1 subtitle, docs site `tagline`, npm `description` prefix.
19
+
20
+ ```
21
+ Terreno is Django/Rails for TypeScript — with universal app support.
22
+ ```
23
+
24
+ ### `elevator`
25
+
26
+ Used by: README intro, docs landing intro, package READMEs.
27
+
28
+ ```
29
+ Terreno is Django/Rails for TypeScript — a batteries-included, full-stack
30
+ framework where the undifferentiated 80% of an app is already written. On the
31
+ backend you get Mongoose models, auto-generated REST APIs, permissions, an admin
32
+ panel, authentication, and an AI service. On the frontend you get one universal
33
+ app — a single React Native codebase that ships to iOS, Android, and web. It is
34
+ built to be driven by AI coding agents from the first prompt to a production
35
+ deploy.
36
+ ```
37
+
38
+ ### `pillars`
39
+
40
+ Used by: README, docs landing, `AGENTS.md`. Keep the order.
41
+
42
+ ```
43
+ - Batteries included — auth, CRUD APIs, admin, permissions, AI, realtime,
44
+ feature flags, and consent are already built, so your code is business logic.
45
+ - Universal by default — one React Native codebase ships to iOS, Android, and
46
+ web. Not a web framework with a mobile bolt-on.
47
+ - AI-native — agents are a first-class client of the framework, not an
48
+ afterthought.
49
+ ```
50
+
51
+ ### `aiPillar`
52
+
53
+ Used wherever the AI-native pillar gets more than a bullet. It must always name
54
+ **both** layers (see language rule 5).
55
+
56
+ ```
57
+ Terreno's AI-native story has two layers. The tool layer is a Model Context
58
+ Protocol (MCP) server that gives coding agents codegen, documentation search,
59
+ and component reference for the framework's conventions. The process layer is the
60
+ `/terreno-*` SDLC pipeline — plan, implement test-first, verify in a fresh
61
+ context, submit with evidence, then own the review loop — which today runs inside
62
+ the Terreno repository while its consumer-installable packaging is finished.
63
+ Django gives you `manage.py startapp`; Terreno is building a reviewed path from a
64
+ request to a mergeable pull request.
65
+ ```
66
+
67
+ > **Portability gate (do not remove until cleared).** The `/terreno-*` pipeline
68
+ > is not yet verified to run in a consumer application — that is
69
+ > [`agentic-sdlc-plugin`](../implementationPlans/agentic-sdlc-plugin.md) Task 2.5,
70
+ > which is still open. Until it passes, describe the pipeline as in-progress
71
+ > packaging (as the `aiPillar` block above does) and never imply a consumer can
72
+ > install and run it today. When Task 2.5 passes, update the `aiPillar` block to
73
+ > claim the pipeline as consumer-ready.
74
+
75
+ ### `pitch`
76
+
77
+ Used by: blog post intros, conference abstracts, social. ~150 words.
78
+
79
+ ```
80
+ Every app needs the same foundation: authentication, user management, CRUD APIs,
81
+ an admin panel, permissions, realtime updates, feature flags, and AI. That work
82
+ is weeks of undifferentiated effort, and it is the same in every product.
83
+
84
+ Terreno is Django/Rails for TypeScript. Define a Mongoose model, register it, and
85
+ you have a permissioned REST API with pagination, filtering, and an OpenAPI spec.
86
+ Add the admin package and you have a working admin panel. Your app is left with
87
+ the part that is actually yours: the business logic.
88
+
89
+ The difference from Django or Rails is universal apps — one React Native codebase
90
+ ships to iOS, Android, and web — and being AI-native. Agents are a first-class
91
+ client: an MCP server teaches them the conventions, and a reviewed SDLC pipeline
92
+ takes a request to a mergeable pull request. You build with AI from the first
93
+ prompt to production.
94
+ ```
95
+
96
+ ## Why the Django/Rails analogy
97
+
98
+ Django and Rails won by deciding that the generic parts of a web app — the ORM,
99
+ the router, the admin, auth — belong in the framework, not in every project. They
100
+ are opinionated, batteries-included, and productive because of it. Terreno makes
101
+ the same bet for TypeScript: the generic 80% of an app lives in the framework so
102
+ your codebase is the 20% that is unique to your product.
103
+
104
+ The analogy earns two honest caveats. First, Terreno targets a document store
105
+ (MongoDB via Mongoose), not a relational ORM, and it has no migrations framework.
106
+ Second, it is younger — several Django/Rails staples (background jobs,
107
+ server-side rendering, role-based access control) are not shipped yet. The
108
+ comparison table below is deliberately straight about where the analogy holds and
109
+ where it does not; being honest about the gaps is what makes the analogy credible
110
+ rather than marketing.
111
+
112
+ The two things Django and Rails do not give you, and Terreno does, are **universal
113
+ apps** (one codebase for iOS, Android, and web) and being **AI-native** by design.
114
+
115
+ ## Comparison table
116
+
117
+ Every "shipped" row cites where the feature lives in the source. Every "not
118
+ shipped" row links the implementation plan or roadmap item that tracks it.
119
+
120
+ | Django / Rails concept | Terreno equivalent | Honest caveat |
121
+ |------------------------|--------------------|----------------|
122
+ | Models + ORM | Mongoose schemas + `@terreno/api` plugins (`api/src/plugins.ts`) | Document store, not relational; no migrations framework (see the Migrations row) |
123
+ | `ModelViewSet` / scaffolds | `modelRouter` (`api/src/api.ts`) | REST only; no GraphQL |
124
+ | Django admin | `@terreno/admin-backend` + `@terreno/admin-frontend` / `@terreno/admin-spa` | Younger; the parity gap is tracked in [`admin-ui-v2-django-parity`](../implementationPlans/admin-ui-v2-django-parity.md) |
125
+ | Auth + permissions | Better Auth (`api/src/betterAuthApp.ts`) + `Permissions` (`api/src/permissions.ts`) | Fine-grained RBAC is in progress ([`rbac-permissions`](../implementationPlans/rbac-permissions.md)) |
126
+ | Templates / views | `@terreno/ui` components — one universal codebase for iOS, Android, and web | Server-side rendering for web is not shipped yet ([`web-ssr-and-admin-spa`](../implementationPlans/web-ssr-and-admin-spa.md)) |
127
+ | `manage.py` / generators | MCP server tools — the *tool* layer (`mcp-server/src/tools.ts`) + the `/terreno-*` SDLC pipeline — the *process* layer (`plugins/terreno-planning/skills/`) | Agent-driven rather than CLI-driven; the pipeline is not yet packaged for consumer apps ([`agentic-sdlc-plugin`](../implementationPlans/agentic-sdlc-plugin.md) Task 2.5) |
128
+ | Celery / ActiveJob (background jobs) | Not shipped | On the [roadmap](../../ROADMAP.md) |
129
+ | Migrations | No migrations framework | Schema evolution is convention plus the `mongoose-schema-safety` skill (`.claude/skills/mongoose-schema-safety/`) |
130
+
131
+ ## Language rules
132
+
133
+ Every doc, README, landing page, and agent-facing surface follows these rules.
134
+
135
+ 1. **Lead with the analogy.** Say "Django/Rails for TypeScript" within the first
136
+ two sentences of the README and the docs landing page.
137
+ 2. **Say "universal app,"** not "cross-platform" and not "React Native app," when
138
+ describing the frontend. It is one codebase that ships to iOS, Android, and
139
+ web.
140
+ 3. **Never claim an unshipped feature as available.** If a capability is on the
141
+ roadmap or tracked by an open IP, say so. Grep the package source before
142
+ writing that something ships.
143
+ 4. **Keep superlatives off reference pages.** "The best framework for X" belongs
144
+ on the landing page and the pitch, never in reference documentation.
145
+ 5. **Never describe one AI layer without the other.** The tool layer (MCP server)
146
+ and the process layer (`/terreno-*` pipeline) are always named together, and
147
+ the pipeline is described honestly per the portability gate above.
148
+
149
+ ## Repository metadata (maintainer action)
150
+
151
+ The GitHub repository description and topics cannot be set from a commit. A
152
+ maintainer must set them in **Settings → General** and the **About** panel.
153
+
154
+ **Description** (the short tagline variant):
155
+
156
+ ```
157
+ Django/Rails for TypeScript, with universal iOS/Android/web apps.
158
+ ```
159
+
160
+ **Topics:**
161
+
162
+ ```
163
+ typescript, react-native, expo, express, mongoose, framework, mcp, ai, universal-apps, full-stack
164
+ ```
@@ -0,0 +1,44 @@
1
+ # Repository settings (maintainers)
2
+
3
+ Some GitHub settings cannot be committed to the repo. Enable these manually in
4
+ the [Terreno repository settings](https://github.com/FlourishHealth/terreno/settings).
5
+
6
+ ## Discussions
7
+
8
+ **Path:** Settings → General → Features → Discussions
9
+
10
+ Enable Discussions and create these categories (see
11
+ [public roadmap IP](../implementationPlans/public-roadmap-github.md) for
12
+ descriptions):
13
+
14
+ 1. Announcements (maintainers only)
15
+ 2. Q&A
16
+ 3. Ideas
17
+ 4. Agents & AI
18
+ 5. RFCs
19
+ 6. Show and tell
20
+ 7. Docs feedback
21
+
22
+ ## Security
23
+
24
+ **Path:** Settings → Security → Code security and analysis
25
+
26
+ - Enable **Private vulnerability reporting** (GitHub PVR as the primary channel;
27
+ `security@terreno.app` is the email fallback — see [SECURITY.md](../../SECURITY.md))
28
+
29
+ ## Branch protection (`master`)
30
+
31
+ **Path:** Settings → Branches → Branch protection rules → `master`
32
+
33
+ - Require a pull request before merging
34
+ - Require status checks to pass (include Repository policies, package CI, and
35
+ Rulesync Check jobs relevant to the change)
36
+ - Require branches to be up to date before merging
37
+ - Do not allow bypassing the above settings
38
+
39
+ ## Merge settings
40
+
41
+ **Path:** Settings → General → Pull Requests
42
+
43
+ - Allow **squash merging** only (disable merge commits and rebase merging)
44
+ - Enable **Automatically delete head branches** after merge
@@ -0,0 +1,330 @@
1
+ # Public roadmap process
2
+
3
+ Terreno runs its **public roadmap on GitHub** and keeps **sprint execution in Linear**.
4
+ Implementation plans in `docs/implementationPlans/` remain the design source of truth for
5
+ both.
6
+
7
+ - **GitHub** — discussions, triaged issues, the Terreno Roadmap project board, generated
8
+ [`ROADMAP.md`](https://github.com/FlourishHealth/terreno/blob/master/ROADMAP.md)
9
+ - **Linear** — estimates, assignees, sprint workflow (internal)
10
+ - **IPs** — approved design docs before substantial cross-package work
11
+
12
+ See also [CONTRIBUTING.md](https://github.com/FlourishHealth/terreno/blob/master/CONTRIBUTING.md) for the contributor intake flow.
13
+
14
+ ## How work flows (IP ↔ roadmap)
15
+
16
+ One idea travels through discussion, a tracking issue, a design doc, implementation, and
17
+ release. Each artifact is authoritative for exactly one thing, so nothing is entered twice.
18
+
19
+ ```
20
+ Discussion (Ideas/RFC)
21
+ │ maintainer accepts → roadmap-promote
22
+ ▼
23
+ Issue: Status = Shaping ─────────────────────────────┐
24
+ │ IP approved → roadmap-item
25
+ Blend writes IP + task list ────────────────────────┤ (sets IP field, Shaping → Planned)
26
+ (docs/implementationPlans/ + docs/tasks/) ▼
27
+ Issue: Status = Planned
28
+ │ Roast → Cupping → Pour
29
+ ▼
30
+ PR: Fixes #NNN
31
+ │ merge
32
+ ▼
33
+ Issue closed · board: Shipped
34
+ ```
35
+
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
38
+ writes the IP, and once it is Approved hands off to `roadmap-item`.**
39
+
40
+ | Transition | Who owns it | Authoritative artifact |
41
+ | ---------- | ----------- | ---------------------- |
42
+ | Idea debated and shaped | Community + maintainers | GitHub Discussion |
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` |
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 |
48
+ | Sprint estimates, assignees, internal-only work | Linear | Linear |
49
+ | Public rendered list | CI (`roadmap:generate`) | `ROADMAP.md` |
50
+
51
+ **promote vs item — the one ambiguity worth stating plainly:** `roadmap-promote` opens the
52
+ issue for community-originated work at `Shaping` and never sets the `IP` field or `Planned`.
53
+ `roadmap-item` is the only skill that sets the `IP` field and moves an item to `Planned`,
54
+ and it **updates the promoted issue** rather than opening a second one. Internal-origin work
55
+ with no discussion skips promote and starts at `roadmap-item`.
56
+
57
+ ### Repos without a public roadmap
58
+
59
+ The `terreno-planning` plugin is meant to run in any Terreno repo, including ones with no
60
+ Discussions and no roadmap board (Flourish, most consumer apps). There, only the design-and-build
61
+ half applies:
62
+
63
+ - **Blend** still writes the IP + task list — that dual-file model is the source of truth
64
+ everywhere. It detects the absence of `.github/roadmap-fields.yml` and the `roadmap-item`
65
+ skill and **skips the roadmap handoff** instead of inventing issues or labels.
66
+ - Sprint execution is tracked in Linear and linked from the IP header; it is never copied
67
+ into the plan.
68
+ - The `roadmap-*` skills and everything under [Maintainer setup](#maintainer-setup) only
69
+ apply once a repo adopts the public roadmap.
70
+
71
+ ## Maintainer setup
72
+
73
+ > **Human action required.** Cloud agents cannot mutate GitHub org/repo settings. Run these
74
+ > steps once per environment.
75
+
76
+ ### Enable Discussions
77
+
78
+ 1. GitHub → **Settings** → **General** → **Features** → enable **Discussions**.
79
+ 2. Create the categories below in **Discussions** → **⚙️ Categories** (display order top to
80
+ bottom).
81
+
82
+ | Order | Name | Format | Who can post | Description (paste into GitHub) |
83
+ | ----- | ---- | ------ | ------------ | --------------------------------- |
84
+ | 1 | Announcements | Announcement | Maintainers only | Official release notes, breaking changes, deprecations, and launch updates from the Terreno team. |
85
+ | 2 | Q&A | Question / Answer | Anyone | Ask how to use Terreno. Search existing threads first; accepted answers may become how-to guides in `docs/how-to/`. |
86
+ | 3 | Ideas | Open-ended | Anyone | Feature ideas and improvements before they are shaped. This is the intake funnel — do not open a tracking issue until a maintainer promotes your idea. |
87
+ | 4 | Agents & AI | Open-ended | Anyone | MCP setup, Cursor/Claude skills, agent workflows, and prompt patterns for building with Terreno. |
88
+ | 5 | RFCs | Open-ended | Anyone | Substantial proposals that change public API or add packages. Use the RFC discussion template; accepted RFCs become IPs. |
89
+ | 6 | Show and tell | Open-ended | Anyone | Apps and experiments built with Terreno. Share what you shipped and what friction you hit. |
90
+ | 7 | Docs feedback | Open-ended | Anyone | Report missing or confusing documentation. Link the page URL; recurring feedback becomes docs PRs. |
91
+
92
+ ### Pinned posts
93
+
94
+ Pin one intro post per category after creation. Bodies below are ready to paste.
95
+
96
+ #### Announcements
97
+
98
+ ```markdown
99
+ Release announcements, breaking changes, and deprecation notices land here.
100
+
101
+ - Do **not** file support bugs as announcements — use [Issues](https://github.com/FlourishHealth/terreno/issues/new/choose) or Q&A.
102
+ - Security issues: see [SECURITY.md](https://github.com/FlourishHealth/terreno/blob/master/SECURITY.md) (private report only).
103
+ ```
104
+
105
+ #### Q&A
106
+
107
+ ```markdown
108
+ Ask **how** to use Terreno — setup, APIs, deployment, agents.
109
+
110
+ 1. Search [existing Q&A](https://github.com/FlourishHealth/terreno/discussions/categories/q-a) and the [docs site](https://terreno-docs.netlify.app/).
111
+ 2. For step-by-step guides, start with [`docs/how-to/`](https://github.com/FlourishHealth/terreno/tree/master/docs/how-to).
112
+ 3. Bug reports belong in [Bug report issues](https://github.com/FlourishHealth/terreno/issues/new?template=bug_report.yml), not here.
113
+
114
+ When an answer repeats, maintainers turn it into a how-to doc via PR.
115
+ ```
116
+
117
+ #### Ideas
118
+
119
+ ```markdown
120
+ **Ideas are the intake funnel.** Share problems and rough solutions before they become roadmap items.
121
+
122
+ - Do **not** open a feature issue directly — maintainers promote accepted ideas to tracked issues on the [Terreno Roadmap](https://github.com/FlourishHealth/terreno/projects) board.
123
+ - For API/package-level design, use the **RFCs** category instead.
124
+ - Bugs → [Bug report](https://github.com/FlourishHealth/terreno/issues/new?template=bug_report.yml).
125
+ ```
126
+
127
+ #### Agents & AI
128
+
129
+ ```markdown
130
+ MCP server setup, Cursor/Claude skills, and agent-driven workflows.
131
+
132
+ - MCP package: [`mcp-server/`](https://github.com/FlourishHealth/terreno/tree/master/mcp-server) and hosted `terreno-mcp`.
133
+ - Agent skills: [`.rulesync/skills/`](https://github.com/FlourishHealth/terreno/tree/master/.rulesync/skills) (mirrored to `.cursor/`, `.claude/`, etc.).
134
+ - Terreno planning plugin: [`plugins/terreno-planning/`](https://github.com/FlourishHealth/terreno/tree/master/plugins/terreno-planning).
135
+
136
+ General feature ideas → **Ideas**. Doc typos → **Docs feedback** or a docs PR.
137
+ ```
138
+
139
+ #### RFCs
140
+
141
+ ```markdown
142
+ Propose changes to **public API**, **new published packages**, or **cross-package architecture**.
143
+
144
+ Use the [RFC template](https://github.com/FlourishHealth/terreno/discussions/new?category=rfcs) (Summary, Motivation, Design, Alternatives).
145
+
146
+ Accepted RFCs become implementation plans in `docs/implementationPlans/` before large code changes. Small bugs and docs fixes do not need an RFC.
147
+ ```
148
+
149
+ #### Show and tell
150
+
151
+ ```markdown
152
+ Show what you built with Terreno — screenshots, repos, and lessons learned welcome.
153
+
154
+ Friction you discover may become Ideas, bugs, or docs PRs. This category is for celebration and learning, not support tickets.
155
+ ```
156
+
157
+ #### Docs feedback
158
+
159
+ ```markdown
160
+ Report missing, outdated, or confusing documentation.
161
+
162
+ Include the **page URL** (docs site or `docs/` path). For quick fixes, open a PR instead.
163
+
164
+ Every docs page also has a **Discuss this page** link in the footer.
165
+ ```
166
+
167
+ ### Project board
168
+
169
+ Create one GitHub Project named **Terreno Roadmap** (repo-level is fine; org-level also
170
+ works). Link it to `FlourishHealth/terreno`.
171
+
172
+ **Fields** (single-select unless noted):
173
+
174
+ | Field | Type | Options |
175
+ | ----- | ---- | ------- |
176
+ | Status | Single select | `Inbox`, `Shaping`, `Planned`, `In progress`, `In review`, `Shipped`, `Declined` |
177
+ | Area | Single select | `api`, `ui`, `syncdb`, `auth`, `admin`, `ai`, `mcp`, `docs`, `deploy`, `examples`, `dx` |
178
+ | Target | Single select | `0.28`, `0.29`, `Next`, `Future` (add version labels as releases approach) |
179
+ | IP | Text | Slug e.g. `web-ssr-and-admin-spa` (empty when no IP yet) |
180
+ | Impact | Single select | `Breaking`, `Feature`, `Improvement`, `Fix` |
181
+ | Community interest | Number | 👍 count — refresh manually on triage |
182
+
183
+ **Views**
184
+
185
+ 1. **Roadmap** — Board layout, group by `Status`, filter `Status != Declined` (default public view).
186
+ 2. **By area** — Table, group by `Area`.
187
+ 3. **Next release** — Table, filter `Target = Next` (update filter when cutting a release).
188
+ 4. **Needs shaping** — Table, filter `Status = Shaping`.
189
+
190
+ **CLI (partial support)**
191
+
192
+ ```bash
193
+ gh project list --owner FlourishHealth --limit 20
194
+ gh project link <project-number> --owner FlourishHealth --repo FlourishHealth/terreno
195
+ ```
196
+
197
+ Field and view creation is **UI-only** today — recreate the tables above in the Project
198
+ settings.
199
+
200
+ **Backfill:** paste tracking issues from [`roadmap-seed-issues.md`](roadmap-seed-issues.md)
201
+ when each IP reaches **Approved**.
202
+
203
+ ### Labels
204
+
205
+ [`.github/labels.yml`](https://github.com/FlourishHealth/terreno/blob/master/.github/labels.yml) is the source of truth.
206
+
207
+ Apply or update labels with `gh` authenticated as a maintainer:
208
+
209
+ ```bash
210
+ bun run labels:sync --repo FlourishHealth/terreno --dry-run # preview
211
+ bun run labels:sync --repo FlourishHealth/terreno # apply
212
+ ```
213
+
214
+ [`scripts/sync-labels.ts`](https://github.com/FlourishHealth/terreno/blob/master/scripts/sync-labels.ts)
215
+ parses the YAML and passes each description to `gh` as a single argument, so descriptions
216
+ containing commas or quotes survive intact. It refuses to run on a malformed color,
217
+ a missing description, or a duplicate name.
218
+
219
+ Delete unused GitHub defaults after the new taxonomy is applied (`gh label list`).
220
+
221
+ ### Secrets for roadmap generation
222
+
223
+ | Name | Kind | Purpose |
224
+ | ---- | ---- | ------- |
225
+ | `TERRENO_PROJECT_NUMBER` | Repository variable | GitHub Project number for **Terreno Roadmap** |
226
+ | `ROADMAP_PROJECT_TOKEN` | Repository secret | Classic PAT with `read:project` (plus `repo` for private repos) |
227
+
228
+ The workflow's built-in `GITHUB_TOKEN` **cannot** be used here: it is repository-scoped and
229
+ returns no `projectV2` data for an organization project. GitHub also reserves the name
230
+ `GITHUB_TOKEN`, so a PAT cannot be supplied under that name — hence the separate
231
+ `ROADMAP_PROJECT_TOKEN` secret. Pushing the regenerated `ROADMAP.md` still uses the default
232
+ token via `permissions: contents: write`.
233
+
234
+ Locally, export the PAT as `GITHUB_TOKEN` (for example `GITHUB_TOKEN=$(gh auth token)`), which
235
+ is the variable the generator reads.
236
+
237
+ ## Maintainer skills
238
+
239
+ Four agent skills cover the recurring roadmap work. Each one researches, proposes, and then
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
242
+ `disable-model-invocation`, meaning an agent will not start them on its own initiative;
243
+ you invoke them explicitly.
244
+
245
+ | Skill | Use it when |
246
+ | ----- | ----------- |
247
+ | `roadmap-triage` | An inbound issue or discussion needs `area:*` / `type:*` / `status:*` labels, or a call on whether it belongs on the board |
248
+ | `roadmap-promote` | Maintainers accepted an Ideas or RFC discussion and it needs a tracked issue that links back to the thread |
249
+ | `roadmap-item` | An approved IP needs its public tracking issue, or an existing entry's scope changed |
250
+ | `roadmap-review` | Recurring hygiene: status drift, stale items, untriaged backlog, promotion candidates, then regenerate `ROADMAP.md` |
251
+
252
+ Sources live in `.rulesync/skills/`; run `bun run rules` after editing to regenerate the
253
+ per-agent mirrors.
254
+
255
+ ### Checking an item before you file it
256
+
257
+ The skills do not carry a copy of the taxonomy. They call:
258
+
259
+ ```bash
260
+ bun run roadmap:check --labels "area:api,type:feature" --status Planned --target Next --impact Feature --area api
261
+ ```
262
+
263
+ Run it with no arguments to print every valid label and field option. It enforces exactly one
264
+ `area:*` and one `type:*` label, rejects labels absent from
265
+ [`.github/labels.yml`](https://github.com/FlourishHealth/terreno/blob/master/.github/labels.yml),
266
+ rejects Project values absent from
267
+ [`.github/roadmap-fields.yml`](https://github.com/FlourishHealth/terreno/blob/master/.github/roadmap-fields.yml),
268
+ and catches an `Area` field that disagrees with the issue's `area:` label.
269
+
270
+ Those two files are the single source for the taxonomy: labels in `labels.yml`, Status/Target/
271
+ Impact options in `roadmap-fields.yml`, and Area derived from the `area:*` labels rather than
272
+ listed a second time. The Project field options in the table above must match
273
+ `roadmap-fields.yml`; a test asserts the roadmap generator's own ordering stays in sync with
274
+ both files.
275
+
276
+ ## Linear bridge
277
+
278
+ | Artifact | System of record |
279
+ | -------- | ---------------- |
280
+ | Public discussion, prioritization debate | GitHub Discussions |
281
+ | Triaged work items, roadmap columns | GitHub Issues + Project |
282
+ | Design scope, acceptance criteria | `docs/implementationPlans/*.md` |
283
+ | Sprint estimates, assignees, internal-only work | Linear |
284
+
285
+ **GitHub → Linear (one-way intake)**
286
+
287
+ 1. Maintainer adds the `tracked` label to a GitHub issue.
288
+ 2. Linear's GitHub integration imports the issue into the Terreno Linear team.
289
+ 3. Title and description sync on creation; **status is not synced back**.
290
+
291
+ **Closing the loop:** merging PRs use `Fixes #NNN` so GitHub closes the issue and the board
292
+ item moves to `Shipped`. Closing Linear alone does **not** change GitHub state.
293
+
294
+ **Internal → public:** open a GitHub issue manually and paste the Linear URL. Internal-only
295
+ Linear work is never mirrored.
296
+
297
+ **Why not two-way status sync?** Bidirectional sync produces confusing loops between board
298
+ columns and sprint state. One-way intake plus `Fixes #NNN` keeps public state accurate.
299
+
300
+ Configure Linear: **Settings → Integrations → GitHub** → import issues with label `tracked`.
301
+
302
+ ## One-time backfill
303
+
304
+ ```bash
305
+ gh issue list --state open --limit 200 --json number,title,labels,updatedAt
306
+ ```
307
+
308
+ For each issue: assign `area:*` + `type:*`, add to board as `Inbox` if relevant, or
309
+ `status:wontfix` / close if stale (> 6 months, no longer applies). A human must run this —
310
+ do not claim completion until done.
311
+
312
+ ## Automation in this repo
313
+
314
+ | Workflow | Trigger | Purpose |
315
+ | -------- | ------- | ------- |
316
+ | [`.github/workflows/triage.yml`](https://github.com/FlourishHealth/terreno/blob/master/.github/workflows/triage.yml) | Issue opened | `status:needs-triage` + `area:*` from package dropdown |
317
+ | [`.github/workflows/roadmap-generate.yml`](https://github.com/FlourishHealth/terreno/blob/master/.github/workflows/roadmap-generate.yml) | Daily + manual | Regenerate `ROADMAP.md` from the Project board |
318
+
319
+ Triage resolves the `area:*` label with
320
+ [`scripts/issueAreaLabels.ts`](https://github.com/FlourishHealth/terreno/blob/master/scripts/issueAreaLabels.ts),
321
+ which owns the package-to-area table. Add new packages there, not in the workflow.
322
+
323
+ Run the generator locally against the real board:
324
+
325
+ ```bash
326
+ GITHUB_TOKEN=$(gh auth token) TERRENO_PROJECT_NUMBER=... bun run roadmap:generate
327
+ ```
328
+
329
+ The generator exits non-zero when the project cannot be read, so a bad project number or a
330
+ token without `read:project` fails loudly instead of writing an empty `ROADMAP.md`.