@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.
- package/LICENSE +21 -0
- package/dist/bootstrap.js +7 -7
- package/dist/bootstrap.js.map +1 -1
- package/dist/docs/templates/bootstrap/backend/types/models/userTypes.template.md +5 -4
- package/dist/docs/templates/tools/model.template.md +4 -2
- package/dist/docs/upgrades/0.31.0.md +60 -0
- package/dist/docs/upgrades/56.0.0-beta.2.md +59 -0
- package/dist/docs/versioned/next/README.md +1 -0
- package/dist/docs/versioned/next/explanation/README.md +7 -1
- package/dist/docs/versioned/next/explanation/deployment-architecture-gcp.md +65 -0
- package/dist/docs/versioned/next/explanation/deployment-baseline.md +78 -0
- package/dist/docs/versioned/next/explanation/positioning.md +164 -0
- package/dist/docs/versioned/next/explanation/repository-settings.md +44 -0
- package/dist/docs/versioned/next/explanation/roadmap-process.md +330 -0
- package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +887 -0
- package/dist/docs/versioned/next/how-to/README.md +8 -0
- package/dist/docs/versioned/next/how-to/build-for-web.md +69 -0
- package/dist/docs/versioned/next/how-to/deploy-backend-to-cloud-run.md +115 -0
- package/dist/docs/versioned/next/how-to/deploy-to-gcp.md +20 -228
- package/dist/docs/versioned/next/how-to/deploy-web-to-gcs-cdn.md +183 -0
- package/dist/docs/versioned/next/implementationPlans/PLAN_INDEX.md +31 -0
- package/dist/docs/versioned/next/implementationPlans/README.md +56 -30
- package/dist/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/ai-dev-loop-boost.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/b2b-platform-program.md +115 -0
- package/dist/docs/versioned/next/implementationPlans/billing-stripe.md +158 -0
- package/dist/docs/versioned/next/implementationPlans/build-terreno-app-validation.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/comms-abstraction.md +323 -0
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +107 -0
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-sendgrid.md +157 -0
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +155 -0
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-verify.md +99 -0
- package/dist/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +180 -0
- package/dist/docs/versioned/next/implementationPlans/deploy-to-gcp.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/deploy-to-vercel.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/deployment-foundation.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/docs-tutorials-ai-first.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/infra-mcp-research.md +188 -0
- package/dist/docs/versioned/next/implementationPlans/infra-mcp.md +269 -0
- package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci-research.md +126 -0
- package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +269 -0
- package/dist/docs/versioned/next/implementationPlans/native-module-baseline.md +105 -0
- package/dist/docs/versioned/next/implementationPlans/orgs-and-teams.md +158 -0
- package/dist/docs/versioned/next/implementationPlans/oss-governance-baseline.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +147 -0
- package/dist/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/public-roadmap-github.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/web-ssr-and-admin-spa.md +1 -0
- package/dist/docs/versioned/next/reference/README.md +5 -0
- package/dist/docs/versioned/next/reference/admin-spa.md +130 -0
- package/dist/docs/versioned/next/reference/ai.md +519 -0
- package/dist/docs/versioned/next/reference/comms.md +132 -0
- package/dist/docs/versioned/next/reference/environment-variables.md +229 -382
- package/dist/docs/versioned/next/reference/test.md +108 -0
- package/dist/docs/versioned/next/roadmap.md +9 -0
- package/dist/docs/versioned/next/tasks/README.md +42 -0
- package/dist/docs/versioned/next/tasks/agentic-sdlc-plugin.md +5 -5
- package/dist/docs/versioned/next/tasks/billing-stripe.md +75 -0
- package/dist/docs/versioned/next/tasks/comms-abstraction.md +90 -0
- package/dist/docs/versioned/next/tasks/comms-adapter-expo-push.md +29 -0
- package/dist/docs/versioned/next/tasks/comms-adapter-sendgrid.md +39 -0
- package/dist/docs/versioned/next/tasks/comms-adapter-twilio-sms.md +39 -0
- package/dist/docs/versioned/next/tasks/comms-adapter-twilio-verify.md +19 -0
- package/dist/docs/versioned/next/tasks/comms-admin-dashboard.md +52 -0
- package/dist/docs/versioned/next/tasks/deploy-to-gcp.md +11 -11
- package/dist/docs/versioned/next/tasks/deployment-foundation.md +12 -12
- package/dist/docs/versioned/next/tasks/docs-reference-coverage.md +4 -4
- package/dist/docs/versioned/next/tasks/infra-mcp.md +43 -0
- package/dist/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +215 -0
- package/dist/docs/versioned/next/tasks/native-module-baseline.md +42 -0
- package/dist/docs/versioned/next/tasks/orgs-and-teams.md +70 -0
- package/dist/docs/versioned/next/tasks/oss-governance-baseline.md +18 -18
- package/dist/docs/versioned/next/tasks/password-reset-and-email-verification.md +60 -0
- package/dist/docs/versioned/next/tasks/positioning-django-rails-universal.md +4 -4
- package/dist/docs/versioned/next/tasks/public-roadmap-github.md +15 -15
- package/package.json +4 -3
- package/src/docs/templates/bootstrap/backend/types/models/userTypes.template.md +5 -4
- package/src/docs/templates/tools/model.template.md +4 -2
- package/src/docs/upgrades/0.31.0.md +60 -0
- package/src/docs/upgrades/56.0.0-beta.2.md +59 -0
- package/src/docs/versioned/next/README.md +1 -0
- package/src/docs/versioned/next/explanation/README.md +7 -1
- package/src/docs/versioned/next/explanation/deployment-architecture-gcp.md +65 -0
- package/src/docs/versioned/next/explanation/deployment-baseline.md +78 -0
- package/src/docs/versioned/next/explanation/positioning.md +164 -0
- package/src/docs/versioned/next/explanation/repository-settings.md +44 -0
- package/src/docs/versioned/next/explanation/roadmap-process.md +330 -0
- package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +887 -0
- package/src/docs/versioned/next/how-to/README.md +8 -0
- package/src/docs/versioned/next/how-to/build-for-web.md +69 -0
- package/src/docs/versioned/next/how-to/deploy-backend-to-cloud-run.md +115 -0
- package/src/docs/versioned/next/how-to/deploy-to-gcp.md +20 -228
- package/src/docs/versioned/next/how-to/deploy-web-to-gcs-cdn.md +183 -0
- package/src/docs/versioned/next/implementationPlans/PLAN_INDEX.md +31 -0
- package/src/docs/versioned/next/implementationPlans/README.md +56 -30
- package/src/docs/versioned/next/implementationPlans/agentic-sdlc-plugin.md +2 -1
- package/src/docs/versioned/next/implementationPlans/ai-dev-loop-boost.md +1 -0
- package/src/docs/versioned/next/implementationPlans/b2b-platform-program.md +115 -0
- package/src/docs/versioned/next/implementationPlans/billing-stripe.md +158 -0
- package/src/docs/versioned/next/implementationPlans/build-terreno-app-validation.md +1 -0
- package/src/docs/versioned/next/implementationPlans/comms-abstraction.md +323 -0
- package/src/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +107 -0
- package/src/docs/versioned/next/implementationPlans/comms-adapter-sendgrid.md +157 -0
- package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +155 -0
- package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-verify.md +99 -0
- package/src/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +180 -0
- package/src/docs/versioned/next/implementationPlans/deploy-to-gcp.md +1 -0
- package/src/docs/versioned/next/implementationPlans/deploy-to-vercel.md +1 -0
- package/src/docs/versioned/next/implementationPlans/deployment-foundation.md +1 -0
- package/src/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -0
- package/src/docs/versioned/next/implementationPlans/docs-tutorials-ai-first.md +1 -0
- package/src/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -0
- package/src/docs/versioned/next/implementationPlans/infra-mcp-research.md +188 -0
- package/src/docs/versioned/next/implementationPlans/infra-mcp.md +269 -0
- package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci-research.md +126 -0
- package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +269 -0
- package/src/docs/versioned/next/implementationPlans/native-module-baseline.md +105 -0
- package/src/docs/versioned/next/implementationPlans/orgs-and-teams.md +158 -0
- package/src/docs/versioned/next/implementationPlans/oss-governance-baseline.md +1 -0
- package/src/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +147 -0
- package/src/docs/versioned/next/implementationPlans/positioning-django-rails-universal.md +1 -0
- package/src/docs/versioned/next/implementationPlans/public-roadmap-github.md +1 -0
- package/src/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -0
- package/src/docs/versioned/next/implementationPlans/web-ssr-and-admin-spa.md +1 -0
- package/src/docs/versioned/next/reference/README.md +5 -0
- package/src/docs/versioned/next/reference/admin-spa.md +130 -0
- package/src/docs/versioned/next/reference/ai.md +519 -0
- package/src/docs/versioned/next/reference/comms.md +132 -0
- package/src/docs/versioned/next/reference/environment-variables.md +229 -382
- package/src/docs/versioned/next/reference/test.md +108 -0
- package/src/docs/versioned/next/roadmap.md +9 -0
- package/src/docs/versioned/next/tasks/README.md +42 -0
- package/src/docs/versioned/next/tasks/agentic-sdlc-plugin.md +5 -5
- package/src/docs/versioned/next/tasks/billing-stripe.md +75 -0
- package/src/docs/versioned/next/tasks/comms-abstraction.md +90 -0
- package/src/docs/versioned/next/tasks/comms-adapter-expo-push.md +29 -0
- package/src/docs/versioned/next/tasks/comms-adapter-sendgrid.md +39 -0
- package/src/docs/versioned/next/tasks/comms-adapter-twilio-sms.md +39 -0
- package/src/docs/versioned/next/tasks/comms-adapter-twilio-verify.md +19 -0
- package/src/docs/versioned/next/tasks/comms-admin-dashboard.md +52 -0
- package/src/docs/versioned/next/tasks/deploy-to-gcp.md +11 -11
- package/src/docs/versioned/next/tasks/deployment-foundation.md +12 -12
- package/src/docs/versioned/next/tasks/docs-reference-coverage.md +4 -4
- package/src/docs/versioned/next/tasks/infra-mcp.md +43 -0
- package/src/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +215 -0
- package/src/docs/versioned/next/tasks/native-module-baseline.md +42 -0
- package/src/docs/versioned/next/tasks/orgs-and-teams.md +70 -0
- package/src/docs/versioned/next/tasks/oss-governance-baseline.md +18 -18
- package/src/docs/versioned/next/tasks/password-reset-and-email-verification.md +60 -0
- package/src/docs/versioned/next/tasks/positioning-django-rails-universal.md +4 -4
- 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`.
|