@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
|
@@ -14,37 +14,37 @@ See: [`docs/implementationPlans/oss-governance-baseline.md`](../implementationPl
|
|
|
14
14
|
|
|
15
15
|
## Phase 1: Legal baseline
|
|
16
16
|
|
|
17
|
-
- [
|
|
17
|
+
- [x] **Task 1.1**: Add root `LICENSE` and `NOTICE`
|
|
18
18
|
- Description: Copy the MIT License text to a new root `LICENSE` (use the standard MIT template; `mcp-server` already ships MIT). Create `NOTICE` containing the project name, the copyright line `Copyright 2026 Flourish Health, Inc.`, and a one-line statement that the project is licensed under MIT. Include acknowledgement of vendored `api/src/vendor/wesleytodd-openapi/` with a pointer to its own `LICENSE`.
|
|
19
19
|
- Files: `LICENSE` (new), `NOTICE` (new)
|
|
20
20
|
- Depends on: none
|
|
21
21
|
- Acceptance: `LICENSE` exists at repo root with standard MIT text; `NOTICE` mentions the vendored openapi code. Do not compare against `api/LICENSE` or `ui/LICENSE` — those remain Apache-2.0 until Task 1.4.
|
|
22
22
|
|
|
23
|
-
- [
|
|
23
|
+
- [x] **Task 1.2**: Audit license coverage across published packages
|
|
24
24
|
- Description: Read `.github/workflows/publish-on-tag.yml` and list every package it publishes. For each one, record in a scratch table: whether a `LICENSE` file exists, whether `package.json` has a `files` array, whether `LICENSE` is included in that array, and the `license` field value. Write the findings as a markdown table in the PR description. Do not fix anything in this task.
|
|
25
25
|
- Files: none (findings go in the PR body)
|
|
26
26
|
- Depends on: none
|
|
27
27
|
- Acceptance: PR body contains a table with one row per published package and the four columns above; the table is derived from the actual repo, not copied from the IP.
|
|
28
28
|
|
|
29
|
-
- [
|
|
29
|
+
- [x] **Task 1.3**: Add `LICENSE` to every published package
|
|
30
30
|
- Description: For each package identified in Task 1.2 that lacks a `LICENSE`, create one by copying the root `LICENSE`. Packages to cover: `rtk`, `ai`, `admin-backend`, `admin-frontend`, `admin-spa`, `api-health`, `feature-flags`, `mcp-server`, `test`. Do not create `LICENSE` files in non-published directories (`demo`, `example-frontend`, `example-backend`, `website`, `terraform`).
|
|
31
31
|
- Files: `rtk/LICENSE`, `ai/LICENSE`, `admin-backend/LICENSE`, `admin-frontend/LICENSE`, `admin-spa/LICENSE`, `api-health/LICENSE`, `feature-flags/LICENSE`, `mcp-server/LICENSE`, `test/LICENSE` (all new)
|
|
32
32
|
- Depends on: Task 1.1, Task 1.2
|
|
33
33
|
- Acceptance: every published package directory contains a `LICENSE` identical to the root `LICENSE`.
|
|
34
34
|
|
|
35
|
-
- [
|
|
35
|
+
- [x] **Task 1.4**: Align `license` fields and `files` arrays
|
|
36
36
|
- Description: Set `"license": "MIT"` in the root `package.json` and in every published package's `package.json` (relicense `api`/`ui` from Apache-2.0). For every package that has an explicit `files` array, add `"LICENSE"` to it (`ui`, `rtk`, `admin-frontend`, `admin-spa`, `mcp-server` at minimum — confirm against Task 1.2 findings). Do not otherwise reorder or reformat `package.json`.
|
|
37
37
|
- Files: `package.json`, `ui/package.json`, `rtk/package.json`, `admin-frontend/package.json`, `admin-spa/package.json`, `mcp-server/package.json`, plus any others found in Task 1.2
|
|
38
38
|
- Depends on: Task 1.3
|
|
39
39
|
- Acceptance: `bun pm pack --dry-run` run inside each published package lists `LICENSE` among the packed files; no `package.json` declares a license other than `MIT`.
|
|
40
40
|
|
|
41
|
-
- [
|
|
41
|
+
- [x] **Task 1.5**: Verify relicensing consent for `api` and `ui`
|
|
42
42
|
- Description: Run `git log --format='%an <%ae>' -- api/ ui/ | sort -u` and list every distinct author. Report the list in the PR body, flagging any address that is not a `@flourish.health` address or a known bot. Do **not** proceed to merge the Apache-2.0 → MIT change for `api`/`ui` if a non-Flourish human contributor appears; instead leave a `TODO` note in the PR body requesting sign-off. (`mcp-server` is already MIT.)
|
|
43
43
|
- Files: none (findings go in the PR body)
|
|
44
44
|
- Depends on: Task 1.4
|
|
45
45
|
- Acceptance: PR body lists all `api`/`ui` authors and explicitly states either "all Flourish/bot — safe to relicense" or names the contributors needing sign-off.
|
|
46
46
|
|
|
47
|
-
- [
|
|
47
|
+
- [x] **Task 1.6**: Add a license-coverage CI check
|
|
48
48
|
- Description: Create `scripts/check-license-coverage.ts` (Bun, TypeScript, `const` arrow functions, explicit return types). It should: read the list of published packages from `.github/workflows/publish-on-tag.yml` (parse job names or a hardcoded list with a comment pointing at the workflow), then for each assert (a) `LICENSE` exists, (b) `package.json` `license` equals the root `package.json` `license`, (c) if a `files` array exists it contains `LICENSE`. Print one line per failure and `process.exit(1)` when any check fails. Add a `check:licenses` script to the root `package.json` and a job to `.github/workflows/repo-policies.yml` that runs it.
|
|
49
49
|
- Files: `scripts/check-license-coverage.ts` (new), `package.json`, `.github/workflows/repo-policies.yml`
|
|
50
50
|
- Depends on: Task 1.4
|
|
@@ -52,25 +52,25 @@ See: [`docs/implementationPlans/oss-governance-baseline.md`](../implementationPl
|
|
|
52
52
|
|
|
53
53
|
## Phase 2: Contribution process
|
|
54
54
|
|
|
55
|
-
- [
|
|
55
|
+
- [x] **Task 2.1**: Write `CONTRIBUTING.md`
|
|
56
56
|
- Description: Create `CONTRIBUTING.md` covering, in this order: (1) Code of Conduct link; (2) ways to contribute (issue, discussion, docs fix, code); (3) development setup — `bun run bootstrap`, Bun version requirement, MongoDB replica-set requirement for `example-backend` (single-node replset is enough, change streams need it), the seeded users `test@example.com` / `superuser@example.com` with password `testpassword123`; (4) per-package commands table pulled from the root `package.json` scripts (`bun run api:test`, `bun run ui:test`, `bun run lint`, `bun run compile`); (5) code style pointers — link `AGENTS.md`, call out the no-barrel-imports rule and `bun run check:no-barrel-imports`, the Luxon requirement, and the logging conventions; (6) test expectations — new features ship with tests, coverage must not drop; (7) the IP process — link `docs/implementationPlans/README.md` and `IP_TEMPLATE.md`, explain when an IP is required (new package, new public API, cross-package change) versus not (bug fix, docs); (8) DCO sign-off instructions (`git commit -s`); (9) PR expectations — draft by default, CI green, screenshots for UI changes.
|
|
57
57
|
- Files: `CONTRIBUTING.md` (new)
|
|
58
58
|
- Depends on: none
|
|
59
59
|
- Acceptance: every command shown in `CONTRIBUTING.md` exists in a `package.json` `scripts` block; the seeded credentials match `example-backend/src/scripts/`; no reference to `.claude/` or other agent-private paths.
|
|
60
60
|
|
|
61
|
-
- [
|
|
61
|
+
- [x] **Task 2.2**: Add `CODE_OF_CONDUCT.md`
|
|
62
62
|
- Description: Add Contributor Covenant 2.1 verbatim, with the enforcement contact set to `conduct@terreno.app`. Do not modify the covenant text other than the contact line and the project name.
|
|
63
63
|
- Files: `CODE_OF_CONDUCT.md` (new)
|
|
64
64
|
- Depends on: none
|
|
65
65
|
- Acceptance: file states "Contributor Covenant" and version 2.1; contact address is present and is not a placeholder.
|
|
66
66
|
|
|
67
|
-
- [
|
|
67
|
+
- [x] **Task 2.3**: Add `SECURITY.md`
|
|
68
68
|
- Description: Create `SECURITY.md` with: a supported-versions table (current minor supported; previous minor receives security fixes only), reporting instructions naming GitHub private vulnerability reporting as the primary channel and `security@terreno.app` as fallback, a 5-business-day acknowledgement commitment, a statement that reporters should not open public issues for vulnerabilities, and a note that CodeQL runs on the repo (`.github/workflows/codeql-analysis.yml`).
|
|
69
69
|
- Files: `SECURITY.md` (new)
|
|
70
70
|
- Depends on: none
|
|
71
71
|
- Acceptance: file exists at repo root so GitHub surfaces it under Security → Policy; both reporting channels are named.
|
|
72
72
|
|
|
73
|
-
- [
|
|
73
|
+
- [x] **Task 2.4**: Add a DCO check for external PRs
|
|
74
74
|
- Description: Add a workflow job (either in `repo-policies.yml` or a new `.github/workflows/dco.yml`) that, for pull requests whose head repository differs from the base repository, verifies every commit message contains a `Signed-off-by:` line matching the commit author. Skip the check for PRs from the same repo and for bot authors (`dependabot[bot]`, `cursor[bot]`). Follow the repo's existing convention of validating required inputs before use.
|
|
75
75
|
- Files: `.github/workflows/dco.yml` (new) or `.github/workflows/repo-policies.yml`
|
|
76
76
|
- Depends on: Task 2.1
|
|
@@ -78,19 +78,19 @@ See: [`docs/implementationPlans/oss-governance-baseline.md`](../implementationPl
|
|
|
78
78
|
|
|
79
79
|
## Phase 3: Changelog
|
|
80
80
|
|
|
81
|
-
- [
|
|
81
|
+
- [x] **Task 3.1**: Create the root `CHANGELOG.md` and backfill releases
|
|
82
82
|
- Description: Create `CHANGELOG.md` in Keep-a-Changelog format with an `## [Unreleased]` section at the top, then one section per released version, newest first. Source the content from `gh release list --limit 40` and `gh release view <tag>` for each release from 0.20.0 to the current version. Group each entry under `Added` / `Changed` / `Fixed` / `Deprecated` / `Removed`. Include a header note that all `@terreno/*` packages are versioned in lockstep and a link to `docs/implementationPlans/oss-launch-program.md` is **not** needed here. Do not invent entries — if a release has no notes, write `- No published release notes.` under that version.
|
|
83
83
|
- Files: `CHANGELOG.md` (new)
|
|
84
84
|
- Depends on: none
|
|
85
85
|
- Acceptance: every version tag returned by `gh release list` between 0.20.0 and current has a section; no section is empty; the file states the lockstep versioning rule.
|
|
86
86
|
|
|
87
|
-
- [
|
|
87
|
+
- [x] **Task 3.2**: Reduce `api/CHANGELOG.md` to a pointer
|
|
88
88
|
- Description: Replace the contents of `api/CHANGELOG.md` with a short note that the changelog moved to the repo root, linking `../CHANGELOG.md`. Preserve the historical entries by moving them into the corresponding root `CHANGELOG.md` sections first if they contain detail the GitHub releases lack.
|
|
89
89
|
- Files: `api/CHANGELOG.md`, `CHANGELOG.md`
|
|
90
90
|
- Depends on: Task 3.1
|
|
91
91
|
- Acceptance: `api/CHANGELOG.md` is under 10 lines and links to the root changelog; no historical detail was lost.
|
|
92
92
|
|
|
93
|
-
- [
|
|
93
|
+
- [x] **Task 3.3**: Make changelog updates part of the release process
|
|
94
94
|
- Description: Edit `.rulesync/skills/release/SKILL.md` to add a required step: before tagging, move `## [Unreleased]` content into a new version section in the root `CHANGELOG.md` with today's date (via Luxon-formatted ISO date), and confirm the section is non-empty. Then run `bun run rules` to regenerate the mirrored skill files under `.cursor/`, `.claude/`, `.devin/`, `.github/`, and `.agents/`.
|
|
95
95
|
- Files: `.rulesync/skills/release/SKILL.md`, plus generated mirrors
|
|
96
96
|
- Depends on: Task 3.1
|
|
@@ -98,31 +98,31 @@ See: [`docs/implementationPlans/oss-governance-baseline.md`](../implementationPl
|
|
|
98
98
|
|
|
99
99
|
## Phase 4: GitHub templates
|
|
100
100
|
|
|
101
|
-
- [
|
|
101
|
+
- [x] **Task 4.1**: Add issue forms
|
|
102
102
|
- Description: Create three GitHub issue forms. `bug_report.yml`: fields for affected package (dropdown listing all published `@terreno/*` packages plus `docs`, `examples`, `mcp`), version, platform (dropdown: iOS / Android / Web / Backend / N/A), reproduction steps (required textarea), expected vs actual, and a checkbox confirming the reporter searched existing issues. `feature_request.yml`: problem statement (required), proposed solution, alternatives considered, and a checkbox asking whether the requester is willing to open a PR. `docs_issue.yml`: page URL, what is wrong or missing, and suggested fix. Add `config.yml` with `blank_issues_enabled: false` and contact links to Discussions (Q&A and Ideas categories) and `SECURITY.md`.
|
|
103
103
|
- Files: `.github/ISSUE_TEMPLATE/bug_report.yml`, `.github/ISSUE_TEMPLATE/feature_request.yml`, `.github/ISSUE_TEMPLATE/docs_issue.yml`, `.github/ISSUE_TEMPLATE/config.yml` (all new)
|
|
104
104
|
- Depends on: Task 2.3
|
|
105
105
|
- Acceptance: all four files parse as valid YAML; the package dropdown in `bug_report.yml` matches the packages published by `publish-on-tag.yml`; `config.yml` disables blank issues.
|
|
106
106
|
|
|
107
|
-
- [
|
|
107
|
+
- [x] **Task 4.2**: Add a PR template
|
|
108
108
|
- Description: Create `.github/PULL_REQUEST_TEMPLATE.md` with sections: Summary; Related IP or issue; Type of change (checkboxes); Testing performed (with a reminder that frontend changes require screenshots or video per `AGENTS.md`); Checklist (tests added, `bun run lint` passes, `bun run compile` passes, docs updated, changelog `Unreleased` entry added for user-facing changes, DCO signed off). Keep it short enough that contributors actually fill it in — under 40 lines.
|
|
109
109
|
- Files: `.github/PULL_REQUEST_TEMPLATE.md` (new)
|
|
110
110
|
- Depends on: Task 2.1, Task 3.1
|
|
111
111
|
- Acceptance: template is under 40 lines; references the changelog and the frontend-verification requirement.
|
|
112
112
|
|
|
113
|
-
- [
|
|
113
|
+
- [x] **Task 4.3**: Add `CODEOWNERS`
|
|
114
114
|
- Description: Create `.github/CODEOWNERS` mapping each package directory to its owning team or maintainer, plus a catch-all root owner. Use GitHub team handles if they exist; otherwise use individual maintainer usernames. Include entries for `docs/`, `.github/`, `.rulesync/`, and `terraform/`.
|
|
115
115
|
- Files: `.github/CODEOWNERS` (new)
|
|
116
116
|
- Depends on: none
|
|
117
117
|
- Acceptance: every top-level package directory has an owner; the file has a catch-all `*` line; GitHub's CODEOWNERS validation (visible in repo settings) reports no errors.
|
|
118
118
|
|
|
119
|
-
- [
|
|
119
|
+
- [x] **Task 4.4**: Document required repository settings
|
|
120
120
|
- Description: Add a short section to `CONTRIBUTING.md` (or a new `docs/explanation/repository-settings.md` if it exceeds 30 lines) listing the GitHub settings a maintainer must enable manually because they cannot be committed: Discussions enabled with the categories from [`public-roadmap-github.md`](../implementationPlans/public-roadmap-github.md), private vulnerability reporting enabled, branch protection on `master` requiring the CI checks, "Allow squash merging" only, and auto-delete of merged branches.
|
|
121
121
|
- Files: `CONTRIBUTING.md` or `docs/explanation/repository-settings.md`
|
|
122
122
|
- Depends on: Task 2.1
|
|
123
123
|
- Acceptance: the list names each setting and where to find it in the GitHub UI; no setting is described as already enabled unless verified.
|
|
124
124
|
|
|
125
|
-
- [
|
|
125
|
+
- [x] **Task 4.5**: Append the governance section to `README.md`
|
|
126
126
|
- Description: Add a `## License` section and a `## Contributing` section near the end of `README.md`, plus a license badge next to the existing npm badges. Link `LICENSE`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, and `SECURITY.md`. Do not modify any other README content — positioning changes belong to a different IP.
|
|
127
127
|
- Files: `README.md`
|
|
128
128
|
- Depends on: Task 1.1, Task 2.1, Task 2.2, Task 2.3
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Tasks: Password reset and email verification
|
|
2
|
+
|
|
3
|
+
IP: [password-reset-and-email-verification](../implementationPlans/password-reset-and-email-verification.md)
|
|
4
|
+
|
|
5
|
+
## Phase 1 — Token infrastructure
|
|
6
|
+
|
|
7
|
+
- [ ] **Task 1.1**: `AuthToken` model + issue/consume statics
|
|
8
|
+
- Description: hashed single-use tokens with TTL expiry per IP
|
|
9
|
+
- Files: `api/src/authTokens.ts`, type files
|
|
10
|
+
- Depends on: none
|
|
11
|
+
- Acceptance: atomic single-use test (parallel consumes → one winner); expiry test
|
|
12
|
+
- [ ] **Task 1.2**: `emailVerificationPlugin`
|
|
13
|
+
- Description: `emailVerified` field plugin for user schemas
|
|
14
|
+
- Files: `api/src/plugins.ts`
|
|
15
|
+
- Depends on: none
|
|
16
|
+
- Acceptance: plugin test; example User adopts it
|
|
17
|
+
|
|
18
|
+
## Phase 2 — JWT routes + mail
|
|
19
|
+
|
|
20
|
+
- [ ] **Task 2.1**: forgot/reset routes
|
|
21
|
+
- Description: 202-always forgot; reset validates+consumes token, `setPassword`, invalidates refresh tokens; RTK client path/shape contract verified
|
|
22
|
+
- Files: `api/src/authRecovery.ts`, `api/src/auth.ts`
|
|
23
|
+
- Depends on: 1.1, comms-abstraction
|
|
24
|
+
- Acceptance: enumeration-safety + happy-path supertest; RTK-shape test
|
|
25
|
+
- [ ] **Task 2.2**: verification routes + `requireEmailVerification` option
|
|
26
|
+
- Description: sendVerification/verifyEmail; 403 `email-not-verified` gating on login when enabled
|
|
27
|
+
- Files: `api/src/authRecovery.ts`, `api/src/auth.ts`
|
|
28
|
+
- Depends on: 1.2, 2.1
|
|
29
|
+
- Acceptance: gating on/off supertest
|
|
30
|
+
- [ ] **Task 2.3**: Mail templates
|
|
31
|
+
- Description: `resetPassword` + `verifyEmail` templates with app-override hook and `publicAppUrl` links
|
|
32
|
+
- Files: `comms/src/templates.ts`
|
|
33
|
+
- Depends on: comms-abstraction Phase 1
|
|
34
|
+
- Acceptance: rendered output snapshot tests
|
|
35
|
+
|
|
36
|
+
## Phase 3 — Better Auth parity
|
|
37
|
+
|
|
38
|
+
- [ ] **Task 3.1**: Better Auth hooks
|
|
39
|
+
- Description: `sendResetPassword`/`sendVerificationEmail` wired to the same templates
|
|
40
|
+
- Files: `api/src/betterAuthSetup.ts`
|
|
41
|
+
- Depends on: 2.3
|
|
42
|
+
- Acceptance: parity test asserting identical template usage
|
|
43
|
+
|
|
44
|
+
## Phase 4 — Client + docs
|
|
45
|
+
|
|
46
|
+
- [ ] **Task 4.1**: example-frontend reset screen + verify banner
|
|
47
|
+
- Description: `/resetPassword` route + profile banner with re-send; SDK regen
|
|
48
|
+
- Files: `example-frontend/app/resetPassword.tsx`, `app/(tabs)/profile.tsx`, `store/openApiSdk.ts`
|
|
49
|
+
- Depends on: Phase 2
|
|
50
|
+
- Acceptance: end-to-end flow with console adapter; UI verification evidence per verify-ui-changes
|
|
51
|
+
- [ ] **Task 4.2**: `LoginScreen` forgot-password link prop
|
|
52
|
+
- Description: optional `onForgotPassword` on `@terreno/ui` LoginScreen
|
|
53
|
+
- Files: `ui/src/login/LoginScreen.tsx` + tests + demo story
|
|
54
|
+
- Depends on: none
|
|
55
|
+
- Acceptance: renders only when provided; story added
|
|
56
|
+
- [ ] **Task 4.3**: Docs
|
|
57
|
+
- Description: how-to + env reference + rulesync
|
|
58
|
+
- Files: `docs/how-to/password-reset.md`, `docs/reference/environment-variables.md`, `.rulesync/**`
|
|
59
|
+
- Depends on: Phase 2
|
|
60
|
+
- Acceptance: `bun run rules:check` passes
|
|
@@ -13,19 +13,19 @@ See: [`docs/implementationPlans/positioning-django-rails-universal.md`](../imple
|
|
|
13
13
|
|
|
14
14
|
## Phase 1: Canonical copy
|
|
15
15
|
|
|
16
|
-
- [
|
|
16
|
+
- [x] **Task 1.1**: Write `docs/explanation/positioning.md`
|
|
17
17
|
- Description: New explainer containing five clearly-labeled copy blocks in fenced code blocks (so they can be copied verbatim without markdown rendering surprises): `tagline` (one line), `elevator` (2–3 sentences), `pillars` (three bullets, in the order batteries-included / universal-by-default / AI-native), `aiPillar` (2–3 sentences naming both AI layers per IP question PO7 — the MCP tool layer and the `/terreno-*` SDLC pipeline process layer), and `pitch` (~150 words). Then a "Why the Django/Rails analogy" section, then the honest comparison table from the IP. Then a "Language rules" section restating the four rules from the program doc (lead with the analogy, say "universal app", never claim unshipped features, keep superlatives off reference pages) plus a fifth: never describe one AI layer without the other.
|
|
18
18
|
- Files: `docs/explanation/positioning.md` (new)
|
|
19
19
|
- Depends on: none
|
|
20
20
|
- Acceptance: five fenced copy blocks present and labeled; the `aiPillar` block names both the MCP tools and the `/terreno-*` pipeline; comparison table has at least eight rows including at least three honest gaps with IP links; language rules section has all five rules.
|
|
21
21
|
|
|
22
|
-
- [
|
|
22
|
+
- [x] **Task 1.2**: Verify every claim in the comparison table
|
|
23
23
|
- Description: For each row of the comparison table, confirm the Terreno side exists by finding it in source: `modelRouter` in `api/src/api.ts`, admin packages, `Permissions` in `api/src/permissions.ts`, Better Auth in `api/src/betterAuth*.ts`, MCP tools in `mcp-server/src/tools.ts`, and the SDLC pipeline in `plugins/terreno-planning/skills/`. For each "not shipped" row (background jobs, SSR, RBAC), confirm it is genuinely absent and link the IP or roadmap item tracking it. Correct any row that turns out to be wrong.
|
|
24
24
|
- Files: `docs/explanation/positioning.md`
|
|
25
25
|
- Depends on: Task 1.1
|
|
26
26
|
- Acceptance: every "shipped" row cites a source path; the generator row cites both `mcp-server/src/tools.ts` and `plugins/terreno-planning/`; every "not shipped" row links an IP file that exists in `docs/implementationPlans/`.
|
|
27
27
|
|
|
28
|
-
- [
|
|
28
|
+
- [x] **Task 1.3**: Gate the pipeline claim on its portability work
|
|
29
29
|
- Description: The `/terreno-*` pipeline currently only runs inside this monorepo (see [`agentic-sdlc-plugin`](../implementationPlans/agentic-sdlc-plugin.md), "It only works here"). Do not publish positioning copy that implies consumers can use it until that IP's Phase 2 is complete. Check the state of `agentic-sdlc-plugin` Task 2.5 before writing the `aiPillar` block; if portability is not done, write the block describing the tool layer only and add a `TODO` in the IP to revisit, rather than making a claim that fails on first use.
|
|
30
30
|
- Files: `docs/explanation/positioning.md`
|
|
31
31
|
- Depends on: Task 1.1
|
|
@@ -87,7 +87,7 @@ See: [`docs/implementationPlans/positioning-django-rails-universal.md`](../imple
|
|
|
87
87
|
- Depends on: Task 1.1
|
|
88
88
|
- Acceptance: every published package has a `description` matching the pattern, plus `repository`, `homepage`, and `bugs` fields; `bun install` still resolves cleanly.
|
|
89
89
|
|
|
90
|
-
- [
|
|
90
|
+
- [x] **Task 5.2**: Document the GitHub repository metadata
|
|
91
91
|
- Description: The repo description and topics cannot be set from a commit. Add a "Repository metadata" subsection to `docs/explanation/positioning.md` giving the exact description string (the short tagline variant from PO1 option C) and the exact topic list to set: `typescript`, `react-native`, `expo`, `express`, `mongoose`, `framework`, `mcp`, `ai`, `universal-apps`, `full-stack`. Mark it as a maintainer action.
|
|
92
92
|
- Files: `docs/explanation/positioning.md`
|
|
93
93
|
- Depends on: Task 1.1
|
|
@@ -13,19 +13,19 @@ See: [`docs/implementationPlans/public-roadmap-github.md`](../implementationPlan
|
|
|
13
13
|
|
|
14
14
|
## Phase 1: Discussions
|
|
15
15
|
|
|
16
|
-
- [
|
|
16
|
+
- [x] **Task 1.1**: Document Discussion category setup
|
|
17
17
|
- Description: Create `docs/explanation/roadmap-process.md`. Start with a "Maintainer setup" section listing the seven Discussion categories from the IP with their exact names, formats (Announcement / Question-Answer / Open-ended), descriptions, and display order. For each, include the description text to paste into the GitHub UI (one to two sentences, written for outside users). Note that Discussions must first be enabled in Settings → General → Features.
|
|
18
18
|
- Files: `docs/explanation/roadmap-process.md` (new)
|
|
19
19
|
- Depends on: none
|
|
20
20
|
- Acceptance: all seven categories are listed with name, format, description, and order; the Announcements category is marked maintainers-only.
|
|
21
21
|
|
|
22
|
-
- [
|
|
22
|
+
- [x] **Task 1.2**: Write the pinned intro posts
|
|
23
23
|
- Description: In `docs/explanation/roadmap-process.md`, add a "Pinned posts" section containing the full markdown body for one pinned post per category. Each should say what belongs there, what does not, and where to go instead. The Ideas post must explain that ideas are the intake funnel and that maintainers promote them to issues. The Agents & AI post must point at the MCP setup docs and the skills directory. The Q&A post must link `docs/how-to/` and note that recurring questions become how-to guides.
|
|
24
24
|
- Files: `docs/explanation/roadmap-process.md`
|
|
25
25
|
- Depends on: Task 1.1
|
|
26
26
|
- Acceptance: seven post bodies exist, each under 200 words, each naming an alternative destination for off-topic content.
|
|
27
27
|
|
|
28
|
-
- [
|
|
28
|
+
- [x] **Task 1.3**: Add Discussion templates
|
|
29
29
|
- Description: Create `.github/DISCUSSION_TEMPLATE/rfc.yml` with fields: title guidance, Summary (required), Motivation (required), Detailed design (required), Alternatives considered (required), Drawbacks, Unresolved questions, and a checkbox acknowledging that accepted RFCs become IPs in `docs/implementationPlans/`. Create `.github/DISCUSSION_TEMPLATE/ideas.yml` with: Problem you are hitting (required), What you tried, Rough idea for a solution, and Would you be willing to help implement. Both must set the correct `labels:` and target the right category via the filename convention.
|
|
30
30
|
- Files: `.github/DISCUSSION_TEMPLATE/rfc.yml` (new), `.github/DISCUSSION_TEMPLATE/ideas.yml` (new)
|
|
31
31
|
- Depends on: Task 1.1
|
|
@@ -33,13 +33,13 @@ See: [`docs/implementationPlans/public-roadmap-github.md`](../implementationPlan
|
|
|
33
33
|
|
|
34
34
|
## Phase 2: Project board
|
|
35
35
|
|
|
36
|
-
- [
|
|
36
|
+
- [x] **Task 2.1**: Document Project board setup
|
|
37
37
|
- Description: Add a "Project board" section to `docs/explanation/roadmap-process.md` specifying: the Project name (`Terreno Roadmap`), whether it is repo- or org-level, the six fields with their exact types and option values from the IP, and the four views with their layout, grouping, and filters. Include the `gh project` commands a maintainer can run for the parts the CLI supports, and mark the rest as UI-only.
|
|
38
38
|
- Files: `docs/explanation/roadmap-process.md`
|
|
39
39
|
- Depends on: Task 1.1
|
|
40
40
|
- Acceptance: all six fields and four views are specified precisely enough to recreate without further decisions; option values match the IP tables exactly.
|
|
41
41
|
|
|
42
|
-
- [
|
|
42
|
+
- [x] **Task 2.2**: Write the tracking-issue bodies for this program's IPs
|
|
43
43
|
- Description: Create `docs/explanation/roadmap-seed-issues.md` containing one ready-to-paste issue body per IP listed in `docs/implementationPlans/oss-launch-program.md`. Each body must include: a one-paragraph summary written for an outside reader (not internal shorthand), a link to the IP file, a link to the task file, the RTK deprecation flag, the dependencies, and the labels and Project field values to set (`Area`, `Target`, `Impact`, `IP`). Read each IP file to write its summary — do not paraphrase from the program index alone.
|
|
44
44
|
- Files: `docs/explanation/roadmap-seed-issues.md` (new)
|
|
45
45
|
- Depends on: Task 2.1
|
|
@@ -47,19 +47,19 @@ See: [`docs/implementationPlans/public-roadmap-github.md`](../implementationPlan
|
|
|
47
47
|
|
|
48
48
|
## Phase 3: Labels and triage
|
|
49
49
|
|
|
50
|
-
- [
|
|
50
|
+
- [x] **Task 3.1**: Define the label set as data
|
|
51
51
|
- Description: Create `.github/labels.yml` listing every label from the IP taxonomy with `name`, `color`, and `description`. Use a consistent color family per prefix (for example one hue for `area:`, another for `type:`, another for `status:`, and distinct colors for the bare labels). Add a "Labels" section to `docs/explanation/roadmap-process.md` explaining that `.github/labels.yml` is the source of truth and how to apply it (`gh label create` loop or a label-sync action), plus which GitHub default labels to delete.
|
|
52
52
|
- Files: `.github/labels.yml` (new), `docs/explanation/roadmap-process.md`
|
|
53
53
|
- Depends on: Task 1.1
|
|
54
54
|
- Acceptance: `.github/labels.yml` parses as valid YAML and contains every label in the IP taxonomy table with no duplicates; colors are valid six-digit hex without `#`.
|
|
55
55
|
|
|
56
|
-
- [
|
|
56
|
+
- [x] **Task 3.2**: Add the triage workflow
|
|
57
57
|
- Description: Create `.github/workflows/triage.yml`. On `issues: [opened]`, add the `status:needs-triage` label. Then read the issue body for the package dropdown value rendered by the issue forms and map it to the matching `area:*` label (for example `@terreno/api` → `area:api`, `docs` → `area:docs`). Implement the mapping in an inline `actions/github-script` step with an explicit lookup object; if no match is found, add no area label and leave a comment asking the reporter to specify. Validate required inputs before use per the repo convention.
|
|
58
58
|
- Files: `.github/workflows/triage.yml` (new)
|
|
59
59
|
- Depends on: Task 3.1
|
|
60
60
|
- Acceptance: workflow parses as valid YAML; the mapping object covers every option in `bug_report.yml`'s package dropdown; the no-match path does not throw.
|
|
61
61
|
|
|
62
|
-
- [
|
|
62
|
+
- [x] **Task 3.3**: Document the backfill triage pass
|
|
63
63
|
- Description: Add a "One-time backfill" section to `docs/explanation/roadmap-process.md` describing how to triage existing open issues and PRs onto the new taxonomy: run `gh issue list --state open --limit 200 --json number,title,labels`, assign one `area:` and one `type:` label each, add anything still relevant to the board with `Status = Inbox`, and close or label `status:wontfix` anything stale beyond six months. Include the read-only `gh` commands for producing the working list.
|
|
64
64
|
- Files: `docs/explanation/roadmap-process.md`
|
|
65
65
|
- Depends on: Task 3.1
|
|
@@ -67,25 +67,25 @@ See: [`docs/implementationPlans/public-roadmap-github.md`](../implementationPlan
|
|
|
67
67
|
|
|
68
68
|
## Phase 4: Roadmap generation
|
|
69
69
|
|
|
70
|
-
- [
|
|
70
|
+
- [x] **Task 4.1**: Write the roadmap generator
|
|
71
71
|
- Description: Create `scripts/generate-roadmap.ts` (Bun, TypeScript, `const` arrow functions with explicit return types, no new dependencies). It queries the GitHub GraphQL API for the `Terreno Roadmap` ProjectV2 items and their field values, then writes `ROADMAP.md`: a header explaining that the board is the source of truth and that no dates are promised, then sections grouped by `Target` (current release first, then `Next`, then `Future`), and within each, subsections by `Area`. Each item renders as a bullet with its title, issue link, `Impact`, and an IP link when the `IP` field is set. Exclude items with `Status` of `Declined`. Read the token from `GITHUB_TOKEN` and the project number from `TERRENO_PROJECT_NUMBER`; fail with a clear message listing missing variables when either is absent. Use Luxon for the generated-at timestamp.
|
|
72
72
|
- Files: `scripts/generate-roadmap.ts` (new), `package.json` (add a `roadmap:generate` script)
|
|
73
73
|
- Depends on: Task 2.1
|
|
74
74
|
- Acceptance: running with both env vars unset prints an error naming both and exits non-zero; with a valid token it writes a `ROADMAP.md` matching the described structure; `bun run lint` passes.
|
|
75
75
|
|
|
76
|
-
- [
|
|
76
|
+
- [x] **Task 4.2**: Add the roadmap workflow
|
|
77
77
|
- Description: Create `.github/workflows/roadmap-generate.yml` running on `schedule` (daily) and `workflow_dispatch`. Validate `GITHUB_TOKEN`/PAT and `TERRENO_PROJECT_NUMBER` at job start with the repo's fail-fast pattern. Run `bun run roadmap:generate`, then commit and push `ROADMAP.md` only if `git diff --quiet` reports changes. Use a bot identity for the commit.
|
|
78
78
|
- Files: `.github/workflows/roadmap-generate.yml` (new)
|
|
79
79
|
- Depends on: Task 4.1
|
|
80
80
|
- Acceptance: workflow parses as valid YAML; the secret-validation step lists every required variable; the commit step is conditional on a real diff.
|
|
81
81
|
|
|
82
|
-
- [
|
|
82
|
+
- [x] **Task 4.3**: Seed `ROADMAP.md` and link it
|
|
83
83
|
- Description: Commit an initial hand-written `ROADMAP.md` (the generator will overwrite it later) built from the IPs in `docs/implementationPlans/oss-launch-program.md` plus the active plans in `PLAN_INDEX.md`. Add a note at the top that it is generated from the Project board. Link it from `README.md` and add it to the docs site sidebar in `website/docusaurus.config.ts` (or the sidebars file if navigation is defined there — check both).
|
|
84
84
|
- Files: `ROADMAP.md` (new), `README.md`, `website/docusaurus.config.ts` or `website/sidebars.ts`
|
|
85
85
|
- Depends on: Task 4.1
|
|
86
86
|
- Acceptance: `ROADMAP.md` lists every IP in the program with a `Target`; the docs site builds (`bun run website:build`) with the new nav entry; the README links it.
|
|
87
87
|
|
|
88
|
-
- [
|
|
88
|
+
- [x] **Task 4.4**: Add the docs feedback footer link
|
|
89
89
|
- Description: In `website/docusaurus.config.ts`, add a footer link (or theme config item) pointing at the Docs feedback Discussions category. If Docusaurus's `editUrl` mechanism is the better fit for per-page feedback, add the discussion link alongside the existing `editUrl` rather than replacing it.
|
|
90
90
|
- Files: `website/docusaurus.config.ts`
|
|
91
91
|
- Depends on: Task 1.1
|
|
@@ -93,19 +93,19 @@ See: [`docs/implementationPlans/public-roadmap-github.md`](../implementationPlan
|
|
|
93
93
|
|
|
94
94
|
## Phase 5: Linear bridge
|
|
95
95
|
|
|
96
|
-
- [
|
|
96
|
+
- [x] **Task 5.1**: Document the Linear bridge rules
|
|
97
97
|
- Description: Add a "Linear bridge" section to `docs/explanation/roadmap-process.md` covering: which artifacts live where (GitHub = public discussion, issues, roadmap state; Linear = sprint execution; `docs/implementationPlans/` = design), the one-way GitHub → Linear intake triggered by the `tracked` label, the rule that Linear status is not synced back and that GitHub state changes via `Fixes #NNN` on merge, how internally-originated public work gets a manual GitHub issue, and an explicit statement that internal-only Linear work is never mirrored. Explain *why* status is not two-way synced.
|
|
98
98
|
- Files: `docs/explanation/roadmap-process.md`
|
|
99
99
|
- Depends on: Task 3.1
|
|
100
100
|
- Acceptance: the section states the direction of every sync, names the trigger label, and gives the reason two-way status sync was rejected.
|
|
101
101
|
|
|
102
|
-
- [
|
|
102
|
+
- [x] **Task 5.2**: Document the intake flow in `CONTRIBUTING.md`
|
|
103
103
|
- Description: Add a "How work gets planned" section to `CONTRIBUTING.md`, under 30 lines: file an Ideas discussion → maintainer promotes to an issue → issue is triaged onto the roadmap board → substantial work gets an IP → implementation. Add the RFC path for public API changes and new packages. Link `ROADMAP.md`, the Discussions categories, and `docs/implementationPlans/README.md`.
|
|
104
104
|
- Files: `CONTRIBUTING.md`
|
|
105
105
|
- Depends on: Task 5.1
|
|
106
106
|
- Acceptance: the section is under 30 lines, links all three destinations, and matches the flow diagram in the IP.
|
|
107
107
|
|
|
108
|
-
- [
|
|
108
|
+
- [x] **Task 5.3**: Add the release announcement step
|
|
109
109
|
- Description: Edit `.rulesync/skills/release/SKILL.md` to add a step: after publishing a release that includes breaking changes or deprecations, post a discussion in the Announcements category summarizing the change, linking the changelog section and the relevant upgrade note in `mcp-server/src/docs/upgrades/`. Regenerate mirrors with `bun run rules`.
|
|
110
110
|
- Files: `.rulesync/skills/release/SKILL.md` plus generated mirrors
|
|
111
111
|
- Depends on: Task 1.1
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@terreno/mcp",
|
|
3
|
-
"version": "56.0.0-beta.
|
|
3
|
+
"version": "56.0.0-beta.2",
|
|
4
4
|
"description": "MCP server for Terreno - provides documentation, tools, and prompts for building full-stack apps",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@modelcontextprotocol/sdk": "^1.27.0",
|
|
29
29
|
"@sentry/bun": "^10.39.0",
|
|
30
|
-
"@terreno/api": "56.0.0-beta.
|
|
30
|
+
"@terreno/api": "56.0.0-beta.2",
|
|
31
31
|
"minisearch": "^7.2.0",
|
|
32
|
-
"mongoose": "
|
|
32
|
+
"mongoose": "9.7.4"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@biomejs/biome": "^2.3.6",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"typescript": "~6.0.3"
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
|
+
"LICENSE",
|
|
41
42
|
"dist",
|
|
42
43
|
"src/docs"
|
|
43
44
|
],
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
/// <reference types="passport-local-mongoose" />
|
|
2
1
|
import type {APIErrorConstructor} from "@terreno/api";
|
|
3
2
|
import type mongoose from "mongoose";
|
|
4
|
-
import type {Document,
|
|
3
|
+
import type {Document, Model} from "mongoose";
|
|
4
|
+
|
|
5
|
+
type ModelQuery<T> = Partial<Record<keyof T, unknown>> & Record<string, unknown>;
|
|
5
6
|
|
|
6
7
|
export interface DefaultStatics<T> {
|
|
7
8
|
findOneOrNone(
|
|
8
|
-
query:
|
|
9
|
+
query: ModelQuery<T>,
|
|
9
10
|
errorArgs?: Partial<APIErrorConstructor>
|
|
10
11
|
): Promise<(Document & T) | null>;
|
|
11
12
|
|
|
12
13
|
findExactlyOne(
|
|
13
|
-
query:
|
|
14
|
+
query: ModelQuery<T>,
|
|
14
15
|
errorArgs?: Partial<APIErrorConstructor>
|
|
15
16
|
): Promise<Document & T>;
|
|
16
17
|
}
|
|
@@ -5,9 +5,11 @@ interface {{Name}}Document extends mongoose.Document {
|
|
|
5
5
|
{{interfaceFields}}
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
type ModelQuery<T> = Partial<Record<keyof T, unknown>> & Record<string, unknown>;
|
|
9
|
+
|
|
8
10
|
interface {{Name}}Model extends mongoose.Model<{{Name}}Document> {
|
|
9
|
-
findOneOrNone(query:
|
|
10
|
-
findExactlyOne(query:
|
|
11
|
+
findOneOrNone(query: ModelQuery<{{Name}}Document>): Promise<{{Name}}Document | null>;
|
|
12
|
+
findExactlyOne(query: ModelQuery<{{Name}}Document>): Promise<{{Name}}Document>;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
const {{lowerName}}Schema = new mongoose.Schema<{{Name}}Document, {{Name}}Model>(
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 0.31.0
|
|
2
|
+
|
|
3
|
+
Terreno packages move in lockstep. Nothing in this release removes or renames a public
|
|
4
|
+
export, so most apps upgrade by bumping the `@terreno/*` versions and running:
|
|
5
|
+
|
|
6
|
+
- `bun run compile` and `bun run lint` at the repo root
|
|
7
|
+
- `cd <your frontend> && bun run sdk` after any `@terreno/api` route or model surface change
|
|
8
|
+
|
|
9
|
+
## Mongoose 9 is now supported (Mongoose 8 still works)
|
|
10
|
+
|
|
11
|
+
Every published package that talks to Mongoose (`api`, `test`, `admin-backend`, `ai`,
|
|
12
|
+
`feature-flags`) widened its peer dependency to `^8.0.0 || ^9.0.0`. Terreno itself
|
|
13
|
+
develops against Mongoose 9.7.4.
|
|
14
|
+
|
|
15
|
+
You can stay on Mongoose 8 with no changes. If you upgrade your app to Mongoose 9, the
|
|
16
|
+
changes that mattered inside Terreno will most likely matter in your code too:
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
// Before (Mongoose 8)
|
|
20
|
+
await Model.findOneAndUpdate(filter, update, {new: true});
|
|
21
|
+
|
|
22
|
+
// After (Mongoose 9)
|
|
23
|
+
await Model.findOneAndUpdate(filter, update, {returnDocument: "after"});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- Aggregation-pipeline updates must pass `updatePipeline: true` to `updateMany`.
|
|
27
|
+
- Query middleware no longer takes the legacy `next()` callback — use the async form.
|
|
28
|
+
- Array schema paths expose `getEmbeddedSchemaType()`; the private `caster` property is gone.
|
|
29
|
+
- Mongoose 9 ships its own types, so `@types/mongodb` and
|
|
30
|
+
`@types/passport-local-mongoose` should be removed from your dev dependencies.
|
|
31
|
+
- Pin `bson` to `7.2.0` if your lockfile resolves an older copy alongside Mongoose 9.
|
|
32
|
+
|
|
33
|
+
Mongoose 9 requires Node >= 20.19.0. Terreno's root `package.json` now declares that
|
|
34
|
+
engine range for local development.
|
|
35
|
+
|
|
36
|
+
## `@terreno/api` type changes
|
|
37
|
+
|
|
38
|
+
Both changes widen or relax types; they are source-compatible for normal usage, but
|
|
39
|
+
explicit annotations may need updating:
|
|
40
|
+
|
|
41
|
+
- `modelRouter` now accepts `Model<T, any, any, any, any, any>` instead of `Model<T>`,
|
|
42
|
+
so models with custom query helpers, methods, or virtuals no longer need a cast.
|
|
43
|
+
- `findOneOrNoneFor(model, query)` takes `ModelQuery<T>` (a partial record keyed by the
|
|
44
|
+
document fields) instead of Mongoose's `FilterQuery<T>`. If you were building a
|
|
45
|
+
`FilterQuery<T>` value to pass in, it still works; if you were annotating the variable
|
|
46
|
+
as `FilterQuery<T>` and relying on operator typing, switch to `ModelQuery<T>`.
|
|
47
|
+
|
|
48
|
+
## `@terreno/admin-backend` array field metadata
|
|
49
|
+
|
|
50
|
+
`GET /admin/config` derives array item metadata (`itemType`, `itemRef`, `itemEnum`) from
|
|
51
|
+
Mongoose's public `getEmbeddedSchemaType()` when available, falling back to the Mongoose 8
|
|
52
|
+
`caster` shape. `itemEnum` is only emitted when the embedded enum is an array, so an enum
|
|
53
|
+
declared as an object map no longer produces a malformed `itemEnum`. Admin clients that
|
|
54
|
+
read `itemEnum` should treat it as optional.
|
|
55
|
+
|
|
56
|
+
## License changed from Apache-2.0 to MIT
|
|
57
|
+
|
|
58
|
+
All published `@terreno/*` packages are now MIT licensed and ship a `LICENSE` file in the
|
|
59
|
+
package tarball. No code change is required; update any license inventory or attribution
|
|
60
|
+
list that pinned Terreno as Apache-2.0.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# 56.0.0-beta.2
|
|
2
|
+
|
|
3
|
+
Second beta of the Expo SDK 56 line. Packages publish under the npm `beta` dist-tag;
|
|
4
|
+
`npm install @terreno/ui` (no tag) still resolves to the stable `0.x` release.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
bun add @terreno/ui@beta @terreno/api@beta @terreno/rtk@beta
|
|
8
|
+
# optional local-first data layer
|
|
9
|
+
bun add @terreno/syncdb@beta
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Upgrade Expo before Terreno
|
|
13
|
+
|
|
14
|
+
This line targets Expo SDK 56. Upgrade the app first, then install Terreno betas:
|
|
15
|
+
|
|
16
|
+
| Package | Version |
|
|
17
|
+
|---------|---------|
|
|
18
|
+
| `expo` | `~56.0.12` |
|
|
19
|
+
| `react-native` | `0.85.3` |
|
|
20
|
+
| `react` | `19.2.3` |
|
|
21
|
+
| `typescript` | `~6.0.3` |
|
|
22
|
+
|
|
23
|
+
Follow Expo's SDK 56 upgrade guide, then bump `@terreno/*` to `56.0.0-beta.2` (or `@beta`).
|
|
24
|
+
Run `bun run compile` / `bun run lint` at the app root and regenerate the OpenAPI SDK after
|
|
25
|
+
any `@terreno/api` surface change (`bun run sdk` in the frontend).
|
|
26
|
+
|
|
27
|
+
Terreno's version major now tracks the Expo SDK major. Stay on the latest `0.x` packages
|
|
28
|
+
until you are ready to move the app to Expo 56.
|
|
29
|
+
|
|
30
|
+
## New package: `@terreno/syncdb`
|
|
31
|
+
|
|
32
|
+
Optional local-first layer (TinyBase MergeableStore, durable outbox, websocket delta sync,
|
|
33
|
+
encrypted web persistence). Install as `@terreno/syncdb@beta` (or the exact version). See:
|
|
34
|
+
|
|
35
|
+
- [`docs/how-to/migrate-rtk-to-syncdb.md`](https://github.com/FlourishHealth/terreno/blob/master/docs/how-to/migrate-rtk-to-syncdb.md)
|
|
36
|
+
- [`docs/reference/syncdb.md`](https://github.com/FlourishHealth/terreno/blob/master/docs/reference/syncdb.md)
|
|
37
|
+
|
|
38
|
+
`@terreno/syncdb` does not replace the generated OpenAPI SDK, Better Auth wiring, or
|
|
39
|
+
feature flags — only collection sync/CRUD offline paths.
|
|
40
|
+
|
|
41
|
+
## `excludeArchivedPlugin` now filters `findOne`
|
|
42
|
+
|
|
43
|
+
`excludeArchivedPlugin` applies the same archived filter to `findOne` that it already
|
|
44
|
+
applied to `find`, matching `isDeletedPlugin`. Code that relied on `findOne` returning
|
|
45
|
+
archived documents must query with an explicit archived override or a different plugin
|
|
46
|
+
configuration.
|
|
47
|
+
|
|
48
|
+
## Sync / REST error codes
|
|
49
|
+
|
|
50
|
+
Sync and REST CRUD executors preserve kebab-case error `code` values
|
|
51
|
+
(`create-not-allowed`, `update-not-allowed`, `delete-not-allowed`, `invalid-request-body`)
|
|
52
|
+
and status-specific error names on hook-rejection paths. Clients that matched on older
|
|
53
|
+
code strings should update.
|
|
54
|
+
|
|
55
|
+
## From `56.0.0-beta.0`
|
|
56
|
+
|
|
57
|
+
`beta.0` was cut from `release-56.0.0`. This beta is cut from `master` after that branch
|
|
58
|
+
merged (`#976`), and also includes `@terreno/comms` plus the sync/Mongoose 9 fixes listed
|
|
59
|
+
in `CHANGELOG.md` for this version.
|
|
@@ -21,6 +21,7 @@ Documentation for the Terreno monorepo: shared packages for full-stack applicati
|
|
|
21
21
|
| [@terreno/admin-backend](reference/admin-backend.md) | Admin panel backend plugin |
|
|
22
22
|
| [@terreno/admin-frontend](reference/admin-frontend.md) | Admin panel frontend screens |
|
|
23
23
|
| [@terreno/api-health](reference/api-health.md) | Health check endpoint plugin |
|
|
24
|
+
| [@terreno/comms](reference/comms.md) | Pluggable communications providers and delivery logging |
|
|
24
25
|
| [@terreno/mcp](reference/mcp-server.md) | AI coding assistant integration (MCP) |
|
|
25
26
|
|
|
26
27
|
## Quick links
|
|
@@ -2,13 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Understanding-oriented documentation: concepts, architecture, and context.
|
|
4
4
|
|
|
5
|
+
## Deployment
|
|
6
|
+
|
|
7
|
+
- [Deployment baseline](deployment-baseline.md) — seven requirements for production Terreno apps
|
|
8
|
+
- [GCP deployment architecture](deployment-architecture-gcp.md) — Cloud Run + GCS/CDN topology and tradeoffs
|
|
9
|
+
- [GCP hosting architecture](gcp-hosting-architecture.md) — static site hosting with GCS and Cloud CDN (legacy detail)
|
|
10
|
+
|
|
5
11
|
## Contents
|
|
6
12
|
|
|
7
13
|
- [AI-powered workflows](ai-workflows.md) — Autonomous documentation, testing, and maintenance workflows
|
|
8
14
|
- [Authentication architecture](authentication.md) — How JWT, OAuth, and token refresh work
|
|
9
15
|
- [Configuration system](configuration-system.md) — Runtime configuration with database persistence
|
|
10
16
|
- [Dependency management](dependency-management.md) — Dependabot, auto-merge, and security practices
|
|
11
|
-
- [GCP hosting architecture](gcp-hosting-architecture.md) — Static site hosting with GCS and Cloud CDN
|
|
12
17
|
- [Modular API design](modular-api-design.md) — 🚧 Why TerrenoApp replaces setupServer
|
|
13
18
|
- [modelRouter actions](model-router-actions.md) — Named collection and instance operations on modelRouter
|
|
14
19
|
- [No barrel imports](no-barrel-imports.md) — Import concrete modules, not `index` re-export barrels
|
|
20
|
+
- [Positioning](positioning.md) — Canonical copy blocks and the honest Django/Rails comparison
|