@terreno/mcp 57.6.1 → 57.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/resources/ui.md +5 -4
- package/dist/docs/upgrades/57.7.0.md +64 -0
- package/dist/docs/upgrades/57.8.0.md +61 -0
- package/dist/docs/upgrades/58.0.0.md +4 -0
- package/dist/docs/versioned/next/explanation/example-coverage.md +1 -0
- package/dist/docs/versioned/next/explanation/loop-engineering.md +32 -3
- package/dist/docs/versioned/next/explanation/model-router-actions.md +1 -1
- package/dist/docs/versioned/next/explanation/repository-settings.md +12 -5
- package/dist/docs/versioned/next/explanation/roadmap-process.md +41 -19
- package/dist/docs/versioned/next/explanation/roadmap-seed-issues.md +285 -22
- package/dist/docs/versioned/next/explanation/static-analysis.md +3 -2
- package/dist/docs/versioned/next/explanation/test-isolation.md +42 -0
- package/dist/docs/versioned/next/how-to/circleci.md +121 -64
- package/dist/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/dist/docs/versioned/next/how-to/preview-demo.md +19 -0
- package/dist/docs/versioned/next/how-to/product-announcements.md +3 -0
- package/dist/docs/versioned/next/how-to/run-tests-locally.md +23 -2
- package/dist/docs/versioned/next/implementationPlans/IP_TEMPLATE.md +3 -1
- package/dist/docs/versioned/next/implementationPlans/admin-improvements.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/agent-ui-blocks.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/ai-agents-and-failover.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/ai-observability.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/announcements-surfaces.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/announcements.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/app-mcp-server.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/better-auth-strict-oauth-provider.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/can-as-permission-seam.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/collection-registry.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/compile-pipeline-dedup.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/demo-workshop.md +219 -0
- package/dist/docs/versioned/next/implementationPlans/describe-model-schema.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/framework-audit-log.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/inbound-webhooks.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/knip-cleanup.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/mcp-doc-sync-off-compile-path.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/mcp-service-tokens.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +2 -1
- package/dist/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/notification-center.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/org-management-ui.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/rate-limiting.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/support-agent.md +1 -0
- package/dist/docs/versioned/next/implementationPlans/syncdb-codegen.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -1
- package/dist/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -1
- package/dist/docs/versioned/next/reference/ai.md +3 -1
- package/dist/docs/versioned/next/reference/announcement-release-packs.md +146 -0
- package/dist/docs/versioned/next/reference/announcements.md +7 -3
- package/dist/docs/versioned/next/reference/api.md +1 -0
- package/dist/docs/versioned/next/reference/environment-variables.md +1 -0
- package/dist/docs/versioned/next/reference/lifecycle-plugin.md +2 -2
- package/dist/docs/versioned/next/reference/test.md +1 -1
- package/dist/docs/versioned/next/reference/ui.md +79 -8
- package/dist/docs/versioned/next/tasks/can-as-permission-seam.md +4 -4
- package/dist/docs/versioned/next/tasks/collection-registry.md +6 -6
- package/dist/docs/versioned/next/tasks/demo-workshop.md +150 -0
- package/dist/docs/versioned/next/tasks/describe-model-schema.md +5 -5
- package/dist/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +6 -3
- package/package.json +2 -2
- package/src/docs/resources/ui.md +5 -4
- package/src/docs/upgrades/57.7.0.md +64 -0
- package/src/docs/upgrades/57.8.0.md +61 -0
- package/src/docs/upgrades/58.0.0.md +4 -0
- package/src/docs/versioned/next/explanation/example-coverage.md +1 -0
- package/src/docs/versioned/next/explanation/loop-engineering.md +32 -3
- package/src/docs/versioned/next/explanation/model-router-actions.md +1 -1
- package/src/docs/versioned/next/explanation/repository-settings.md +12 -5
- package/src/docs/versioned/next/explanation/roadmap-process.md +41 -19
- package/src/docs/versioned/next/explanation/roadmap-seed-issues.md +285 -22
- package/src/docs/versioned/next/explanation/static-analysis.md +3 -2
- package/src/docs/versioned/next/explanation/test-isolation.md +42 -0
- package/src/docs/versioned/next/how-to/circleci.md +121 -64
- package/src/docs/versioned/next/how-to/github-actions-ci.md +4 -3
- package/src/docs/versioned/next/how-to/preview-demo.md +19 -0
- package/src/docs/versioned/next/how-to/product-announcements.md +3 -0
- package/src/docs/versioned/next/how-to/run-tests-locally.md +23 -2
- package/src/docs/versioned/next/implementationPlans/IP_TEMPLATE.md +3 -1
- package/src/docs/versioned/next/implementationPlans/admin-improvements.md +1 -1
- package/src/docs/versioned/next/implementationPlans/admin-scripts-durable-jobs.md +2 -1
- package/src/docs/versioned/next/implementationPlans/agent-ui-blocks.md +1 -0
- package/src/docs/versioned/next/implementationPlans/ai-agents-and-failover.md +1 -0
- package/src/docs/versioned/next/implementationPlans/ai-observability.md +1 -0
- package/src/docs/versioned/next/implementationPlans/announcements-surfaces.md +1 -1
- package/src/docs/versioned/next/implementationPlans/announcements.md +2 -1
- package/src/docs/versioned/next/implementationPlans/app-mcp-server.md +1 -0
- package/src/docs/versioned/next/implementationPlans/better-auth-strict-oauth-provider.md +2 -1
- package/src/docs/versioned/next/implementationPlans/can-as-permission-seam.md +1 -1
- package/src/docs/versioned/next/implementationPlans/collection-registry.md +1 -1
- package/src/docs/versioned/next/implementationPlans/comms-adapter-expo-push.md +1 -1
- package/src/docs/versioned/next/implementationPlans/comms-adapter-twilio-sms.md +1 -1
- package/src/docs/versioned/next/implementationPlans/comms-admin-dashboard.md +1 -1
- package/src/docs/versioned/next/implementationPlans/compile-pipeline-dedup.md +2 -1
- package/src/docs/versioned/next/implementationPlans/datatable-server-side-filtering.md +1 -1
- package/src/docs/versioned/next/implementationPlans/demo-workshop.md +219 -0
- package/src/docs/versioned/next/implementationPlans/describe-model-schema.md +1 -1
- package/src/docs/versioned/next/implementationPlans/docs-reference-coverage.md +1 -1
- package/src/docs/versioned/next/implementationPlans/docs-site-and-versioning.md +1 -1
- package/src/docs/versioned/next/implementationPlans/examples-demo-coverage.md +1 -1
- package/src/docs/versioned/next/implementationPlans/framework-audit-log.md +1 -1
- package/src/docs/versioned/next/implementationPlans/gpt-chat-mascot.md +1 -0
- package/src/docs/versioned/next/implementationPlans/inbound-webhooks.md +1 -1
- package/src/docs/versioned/next/implementationPlans/knip-cleanup.md +1 -0
- package/src/docs/versioned/next/implementationPlans/mcp-doc-sync-off-compile-path.md +2 -1
- package/src/docs/versioned/next/implementationPlans/mcp-service-tokens.md +2 -1
- package/src/docs/versioned/next/implementationPlans/migrate-admin-to-syncdb.md +2 -1
- package/src/docs/versioned/next/implementationPlans/migrate-cicd-to-circleci.md +1 -1
- package/src/docs/versioned/next/implementationPlans/mongodb-migrations-tooling.md +1 -1
- package/src/docs/versioned/next/implementationPlans/notification-center.md +1 -1
- package/src/docs/versioned/next/implementationPlans/org-management-ui.md +1 -1
- package/src/docs/versioned/next/implementationPlans/password-reset-and-email-verification.md +1 -1
- package/src/docs/versioned/next/implementationPlans/rate-limiting.md +1 -1
- package/src/docs/versioned/next/implementationPlans/remove-legacy-realtime.md +1 -0
- package/src/docs/versioned/next/implementationPlans/support-agent.md +1 -0
- package/src/docs/versioned/next/implementationPlans/syncdb-codegen.md +1 -1
- package/src/docs/versioned/next/implementationPlans/terreno-langfuse-integration.md +1 -1
- package/src/docs/versioned/next/implementationPlans/upgrade-guides-and-skill.md +1 -1
- package/src/docs/versioned/next/reference/ai.md +3 -1
- package/src/docs/versioned/next/reference/announcement-release-packs.md +146 -0
- package/src/docs/versioned/next/reference/announcements.md +7 -3
- package/src/docs/versioned/next/reference/api.md +1 -0
- package/src/docs/versioned/next/reference/environment-variables.md +1 -0
- package/src/docs/versioned/next/reference/lifecycle-plugin.md +2 -2
- package/src/docs/versioned/next/reference/test.md +1 -1
- package/src/docs/versioned/next/reference/ui.md +79 -8
- package/src/docs/versioned/next/tasks/can-as-permission-seam.md +4 -4
- package/src/docs/versioned/next/tasks/collection-registry.md +6 -6
- package/src/docs/versioned/next/tasks/demo-workshop.md +150 -0
- package/src/docs/versioned/next/tasks/describe-model-schema.md +5 -5
- package/src/docs/versioned/next/tasks/migrate-cicd-to-circleci.md +6 -3
- package/dist/docs/ui-types-documentation.json +0 -33
- package/src/docs/ui-types-documentation.json +0 -33
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Upgrading to 57.8.0
|
|
2
|
+
|
|
3
|
+
**Action required:** No
|
|
4
|
+
**Affected packages:** @terreno/ui, @terreno/announcements
|
|
5
|
+
|
|
6
|
+
## Summary
|
|
7
|
+
|
|
8
|
+
Bump every lockstep `@terreno/*` package together to `57.8.0`. `@terreno/ui` adds opt-in `SplitPage` web layouts and `IconButton` `backgroundOpacity`, and deprecates `isMobileDevice` in favor of `isNarrowViewport` (the old function still returns the same result). `@terreno/announcements` can import a Markdown release pack through `POST /announcements/import-release`. `DropdownPanel` anchors to its trigger, and `/gpt/prompt` emits each generated image once. No Expo upgrade is required if you are already on `57.x`.
|
|
9
|
+
|
|
10
|
+
## Breaking changes
|
|
11
|
+
|
|
12
|
+
None
|
|
13
|
+
|
|
14
|
+
## Deprecations
|
|
15
|
+
|
|
16
|
+
### `isMobileDevice`
|
|
17
|
+
|
|
18
|
+
**What changed**
|
|
19
|
+
|
|
20
|
+
`isMobileDevice` is deprecated. `isNarrowViewport` is the supported name. Both stay exported and return the same boolean: true when the window is below the supported desktop floor (web width under 1024, native width under 1024).
|
|
21
|
+
|
|
22
|
+
**Why**
|
|
23
|
+
|
|
24
|
+
`isMobileDevice` described a window-width check. The new name matches that behavior.
|
|
25
|
+
|
|
26
|
+
**Migration**
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
// Before
|
|
30
|
+
import {isMobileDevice} from "@terreno/ui";
|
|
31
|
+
|
|
32
|
+
if (isMobileDevice()) {
|
|
33
|
+
// narrow layout
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// After
|
|
37
|
+
import {isNarrowViewport} from "@terreno/ui";
|
|
38
|
+
|
|
39
|
+
if (isNarrowViewport()) {
|
|
40
|
+
// narrow layout
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## New capabilities
|
|
45
|
+
|
|
46
|
+
`SplitPage` web props are opt-in. Existing callers keep the previous layout.
|
|
47
|
+
|
|
48
|
+
- `desktopChildrenMinWidth` keeps one or two desktop children at least that many pixels wide and scrolls the row when it is tighter. More than two children keeps the segmented control.
|
|
49
|
+
- `narrowViewportChildLabels`, `narrowViewportSelectionActive`, `narrowViewportSelectionKey`, and `narrowViewportListButtonLabel` replace the dotted narrow swiper with a labeled pager.
|
|
50
|
+
- `narrowBelowWidth` uses the narrow layout when the window width is less than or equal to that pixel value. Omit it to follow `isNarrowViewport()`.
|
|
51
|
+
- Native `SplitPage` ignores these props.
|
|
52
|
+
- `IconButton` `backgroundOpacity` tints only that button's background.
|
|
53
|
+
|
|
54
|
+
`@terreno/announcements` accepts a `terreno.announcement-pack/v1` directory (`pack.yaml` plus one Markdown file per announcement) at `POST /announcements/import-release`. Imports are idempotent by product, release version, channel, and slug, default to drafts, and publish immediately when `publish: true`. Admin auth or bearer `ANNOUNCEMENTS_UPLOAD_TOKEN` can call the route. The token is optional.
|
|
55
|
+
|
|
56
|
+
## Verification
|
|
57
|
+
|
|
58
|
+
- `bun add` every lockstep `@terreno/*` dependency to `57.8.0`, then `bun run compile` at the app root
|
|
59
|
+
- Replace `isMobileDevice` imports with `isNarrowViewport` before a future major removes the alias
|
|
60
|
+
- Open a `DropdownPanel` whose trigger is not at the start of its row and confirm the panel opens on the trigger
|
|
61
|
+
- Import a draft announcement pack with `POST /announcements/import-release` and confirm a second import updates the same slug instead of inserting a duplicate
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
This file is a placeholder until Terreno 58 is cut. When that release ships, expand this page into a full upgrade note.
|
|
4
4
|
|
|
5
|
+
## `Filter` and `FilterProps` are removed
|
|
6
|
+
|
|
7
|
+
`@terreno/ui` removes the `Filter` and `FilterProps` aliases added as deprecations in 57.7.0. Import `DropdownPanel` and `DropdownPanelProps`. `FilterSelectMenu`, `FilterBoolean`, `FilterAccordion`, and `FilterChangesBadge` keep their names. See [57.7.0](57.7.0.md).
|
|
8
|
+
|
|
5
9
|
## HTTP rate limiting defaults on
|
|
6
10
|
|
|
7
11
|
`TerrenoApp` will enable HTTP rate limiting by default (memory store unless you pass `store`). Apps that must stay unlimited must pass an explicit off once 58 defines that API.
|
|
@@ -20,6 +20,7 @@ that file (and its imports) to a working example. Gaps stay explicit.
|
|
|
20
20
|
| Feature flags + live updates | yes — `FeatureFlagsApp` in `example-backend/src/server.ts`, seed `example-backend/src/scripts/seed-feature-flags.ts` | yes — `useTerrenoFeatureFlags` in `example-frontend/app/_layout.tsx` | Socket-backed live updates share the realtime connection. |
|
|
21
21
|
| Websockets / realtime | yes — `RealtimeApp` in `example-backend/src/server.ts`, `example-backend/src/websockets.ts` | yes — `useSocketConnection` in `example-frontend/app/_layout.tsx` | Sync deltas also use the socket (`SyncApp` + `@terreno/syncdb`). |
|
|
22
22
|
| Consent forms | yes — `example-backend/src/consentDefinitions.ts`, seed scripts | yes — `example-frontend/app/(tabs)/consents.tsx`, admin `example-frontend/app/admin/consent-forms/` | First-login flow is covered by e2e (`example-frontend/e2e/consents.spec.ts`). |
|
|
23
|
+
| Product announcements | yes — `AnnouncementsApp` in `example-backend/src/server.ts`, release upload token via `ANNOUNCEMENTS_UPLOAD_TOKEN`, seed `example-backend/src/scripts/seed-announcements.ts`, sample release pack `example-backend/announcements/releases/1.14.0/` with `bun run announcements:pack` | yes — `AnnouncementNavigator` in `example-frontend/app/_layout.tsx` and admin announcement routes | Release packs support multiple Markdown surfaces and idempotent draft or explicit live API import. |
|
|
23
24
|
| File upload / GCS | yes — `example-backend/src/api/settings.ts`, AI file routes in `example-backend/src/api/ai.ts` | yes — `example-frontend/app/(tabs)/files.tsx`, `example-frontend/app/gcs-settings.tsx` | |
|
|
24
25
|
| Better Auth | yes — `example-backend/src/utils/betterAuthConfig.ts`, `BetterAuthApp` in `example-backend/src/server.ts` | yes — `example-frontend/app/login.tsx`, `example-frontend/lib/betterAuth.ts` | Default `AUTH_PROVIDER` is `better-auth`. |
|
|
25
26
|
| syncdb local-first | yes — `SyncApp` in `example-backend/src/server.ts` | yes — `example-frontend/store/syncdb.ts`, `example-frontend/app/(tabs)/index.tsx` | PR #869 closed without merge; `@terreno/syncdb` shipped on the launch line and is the example todos path. |
|
|
@@ -49,7 +49,7 @@ the inner loop until the approved task list is done. Roast never invokes Pick. B
|
|
|
49
49
|
Taste additionally wait while async review bots are running, preferring provider CLI
|
|
50
50
|
watch hooks or harness event subscriptions over timer polling. Taste also waits in a
|
|
51
51
|
loop for product CI with `gh` or `circleci` until jobs are terminal or the wait times
|
|
52
|
-
out. Before any push it
|
|
52
|
+
out. Before any push it fetches latest `master` (merging it only when needed), then records last-run failed tests
|
|
53
53
|
and re-verifies them locally, then runs the repository's root
|
|
54
54
|
`prepush` package script in a no-context subagent when present (falling back to affected
|
|
55
55
|
package lint, typecheck, and tests), then pushes and watches CI.
|
|
@@ -82,8 +82,8 @@ acceptance criteria. Taste is one reactive iteration, not an unbounded fix-until
|
|
|
82
82
|
daemon. It waits until async review bots (Bugbot, CodeQL, and similar) on the current
|
|
83
83
|
head have reported, then waits in a loop for product CI using GitHub CLI
|
|
84
84
|
(`gh pr checks --watch`, `gh run watch`) or CircleCI CLI (`circleci run watch`) until
|
|
85
|
-
jobs are terminal or the wait times out. Before any push it
|
|
86
|
-
`master
|
|
85
|
+
jobs are terminal or the wait times out. Before any push it fetches latest
|
|
86
|
+
`master` (merging it only when needed), records last-run failed tests and re-verifies them locally, then runs root
|
|
87
87
|
`prepush` when present in a fresh subagent with no parent
|
|
88
88
|
conversation. If absent, it proves affected-package lint, typecheck, and tests instead.
|
|
89
89
|
It then pushes and watches CI, emits `PASS`, `FAIL`, `BLOCKED`, or `PENDING`, and exits.
|
|
@@ -139,6 +139,35 @@ or transports it and Brew excludes it from commits unless repository policy says
|
|
|
139
139
|
otherwise. Stage results follow the plugin's JSON-schema-backed YAML contract and never
|
|
140
140
|
contain chain-of-thought or transcripts.
|
|
141
141
|
|
|
142
|
+
## Commits and pushes
|
|
143
|
+
|
|
144
|
+
Every pushed commit starts a full CI run. Harnesses such as Cursor cloud agents push
|
|
145
|
+
every commit automatically, so commit count turns directly into CI runs. Before these
|
|
146
|
+
rules, one 30-commit dashboard PR had ten "mark slice roasted" commits and ten "harden"
|
|
147
|
+
follow-ups, and `ui-ci` stayed red on every commit after the first.
|
|
148
|
+
|
|
149
|
+
- One behavior-scoped commit per task, after Roast `PASS`: code, tests, docs, and the
|
|
150
|
+
task-file mark together. Roast-driven fixes fold into that commit.
|
|
151
|
+
- Progress lives in execution state, not in standalone task-file commits.
|
|
152
|
+
- Pick and Roast never push. Brew pushes once. Taste pushes at most once per reaction.
|
|
153
|
+
- Pick does not continue on a head whose product CI shows a branch-caused failure.
|
|
154
|
+
- Pick lists a behavior's edge cases before coding, so Roast proves them instead of
|
|
155
|
+
discovering them.
|
|
156
|
+
- Roast runs the gate CI will run (root `prepush`, which mirrors the triggered CI jobs),
|
|
157
|
+
not only the task's test file.
|
|
158
|
+
- Taste fetches `master` before every push but merges it only when the PR conflicts, a
|
|
159
|
+
failure traces to base drift, or the branch is otherwise merge-ready.
|
|
160
|
+
|
|
161
|
+
## Direct invocation
|
|
162
|
+
|
|
163
|
+
Outer loops (`terreno-planning-loop`, `terreno-taste-sweep`) consume Taste `PENDING`
|
|
164
|
+
and invoke Taste again. When a human invokes Taste directly, no loop is waiting, so a
|
|
165
|
+
`PENDING` would only tell them to come back later. In that case Taste uses
|
|
166
|
+
**standalone entry**: it waits in-process with native watches and reacts again. It
|
|
167
|
+
stops on `PASS`, `BLOCKED`, or `FAIL`, or after 3 fix pushes or 3 hours of waiting,
|
|
168
|
+
which ends as `BLOCKED` with one concrete human action. A directly invoked Brew
|
|
169
|
+
starts Taste as its next stage instead of exiting.
|
|
170
|
+
|
|
142
171
|
## Retry and stop rules
|
|
143
172
|
|
|
144
173
|
- Pick implements one task, Roast proves it, then Pick takes the next unblocked task.
|
|
@@ -101,7 +101,7 @@ HTTP method and scope map to a CRUD permission check:
|
|
|
101
101
|
**403** — denied after the instance document is loaded (e.g. `IsOwner` with a document that fails the check).
|
|
102
102
|
**401** — unauthenticated when a permission requires auth (from existing auth middleware).
|
|
103
103
|
|
|
104
|
-
`authenticateMiddleware` honors the router’s `allowAnonymous` option, same as CRUD.
|
|
104
|
+
`authenticateMiddleware` honors the router’s `allowAnonymous` option, same as CRUD. An action may set `allowAnonymous: true` to accept unauthenticated requests without making the router's CRUD routes or other actions anonymous. Keep a non-empty permission such as `Permissions.IsAny` and authenticate any service token in the handler.
|
|
105
105
|
|
|
106
106
|
## Validation
|
|
107
107
|
|
|
@@ -51,11 +51,18 @@ as GitHub App checks; they are not CircleCI jobs.
|
|
|
51
51
|
|
|
52
52
|
**Path:** Settings → Environments
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
**
|
|
58
|
-
|
|
54
|
+
`cd.yml` is disabled; CircleCI `gcp-cd-preview` performs GCP previews and
|
|
55
|
+
halts on fork PRs. While the GitHub WIF provider still exists, keep the
|
|
56
|
+
`gcp-cd-preview` environment restricted with a **deployment branch policy** or
|
|
57
|
+
**required reviewers** so a fork that re-enables `cd.yml` cannot mint a prod
|
|
58
|
+
WIF token.
|
|
59
|
+
|
|
60
|
+
### Actions secrets for CircleCI hooks
|
|
61
|
+
|
|
62
|
+
`preview-cleanup.yml` (PR close) and `publish-on-tag.yml` (manual publish demo
|
|
63
|
+
redeploy) start CircleCI pipelines. Set the secret `CIRCLECI_TOKEN` and the
|
|
64
|
+
variable `CIRCLECI_PIPELINE_DEFINITION_ID` under Settings → Secrets and
|
|
65
|
+
variables → Actions.
|
|
59
66
|
|
|
60
67
|
## Merge settings
|
|
61
68
|
|
|
@@ -88,11 +88,10 @@ half applies:
|
|
|
88
88
|
| 1 | Announcements | Announcement | Maintainers only | Official release notes, breaking changes, deprecations, and launch updates from the Terreno team. |
|
|
89
89
|
| 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/`. |
|
|
90
90
|
| 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. |
|
|
91
|
-
| 4 |
|
|
92
|
-
| 5 |
|
|
93
|
-
| 6 |
|
|
94
|
-
| 7 |
|
|
95
|
-
| 8 | Docs feedback | Open-ended | Anyone | Report missing or confusing documentation. Link the page URL; recurring feedback becomes docs PRs. |
|
|
91
|
+
| 4 | Agents & AI | Open-ended | Anyone | MCP setup, Cursor/Claude skills, agent workflows, and prompt patterns for building with Terreno. |
|
|
92
|
+
| 5 | RFCs | Open-ended | Anyone | Substantial proposals that change public API or add packages. Use the RFC discussion template; accepted RFCs become IPs. |
|
|
93
|
+
| 6 | Show and tell | Open-ended | Anyone | Apps and experiments built with Terreno. Share what you shipped and what friction you hit. |
|
|
94
|
+
| 7 | Docs feedback | Open-ended | Anyone | Report missing or confusing documentation. Link the page URL; recurring feedback becomes docs PRs. |
|
|
96
95
|
|
|
97
96
|
### Pinned posts
|
|
98
97
|
|
|
@@ -127,24 +126,29 @@ When an answer repeats, maintainers turn it into a how-to doc via PR.
|
|
|
127
126
|
- Do **not** open a feature issue directly — maintainers promote accepted ideas to tracked issues on the [Terreno Roadmap](https://github.com/TerrenoLabs/terreno/projects) board.
|
|
128
127
|
- For API/package-level design, use the **RFCs** category instead.
|
|
129
128
|
- Bugs → [Bug report](https://github.com/TerrenoLabs/terreno/issues/new?template=bug_report.yml).
|
|
129
|
+
- **Hacktoberfest pitches live here too.** Tick the Hacktoberfest box on the form; maintainers apply the [`hacktoberfest`](https://github.com/TerrenoLabs/terreno/discussions?discussions_q=label%3Ahacktoberfest) label. 👍 the pitches you want built.
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
-
#### Hacktoberfest
|
|
132
|
+
#### Hacktoberfest (inside Ideas)
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
1. [Start a Hacktoberfest discussion](https://github.com/TerrenoLabs/terreno/discussions/new?category=hacktoberfest) — the form asks for the idea, area, rough size, and what "done" looks like.
|
|
138
|
-
2. Upvote and comment on other pitches. Upvotes are how maintainers rank them.
|
|
139
|
-
3. Maintainers turn popular, well-scoped ideas into issues labeled [`hacktoberfest`](https://github.com/TerrenoLabs/terreno/issues?q=is%3Aissue+is%3Aopen+label%3Ahacktoberfest) and link them back here. Pick one up by commenting on the issue.
|
|
134
|
+
Hacktoberfest does not get its own category. Pitches are Ideas discussions carrying the
|
|
135
|
+
`hacktoberfest` label, so upvotes, promotion, and search all use the same path as any other
|
|
136
|
+
idea.
|
|
140
137
|
|
|
141
|
-
|
|
142
|
-
|
|
138
|
+
1. [Start an Ideas discussion](https://github.com/TerrenoLabs/terreno/discussions/new?category=ideas)
|
|
139
|
+
and tick **This is a Hacktoberfest pitch**. Give the area, rough size, and what "done" looks
|
|
140
|
+
like.
|
|
141
|
+
2. A maintainer applies the [`hacktoberfest`](https://github.com/TerrenoLabs/terreno/discussions?discussions_q=label%3Ahacktoberfest)
|
|
142
|
+
label and the matching `area:*` label. Upvotes are how maintainers rank pitches.
|
|
143
|
+
3. Popular, well-scoped pitches become issues labeled
|
|
144
|
+
[`hacktoberfest`](https://github.com/TerrenoLabs/terreno/issues?q=is%3Aissue+is%3Aopen+label%3Ahacktoberfest),
|
|
145
|
+
linked back to the discussion. Pick one up by commenting on the issue.
|
|
143
146
|
|
|
144
|
-
Promotion follows the Ideas path, with one change: a Hacktoberfest
|
|
147
|
+
Promotion follows the Ideas path, with one change: a Hacktoberfest pitch small enough to finish
|
|
145
148
|
in a weekend becomes a `hacktoberfest` + `good first issue` work item directly (see
|
|
146
149
|
[GitHub issue lifecycle](../how-to/github-issue-lifecycle.md)) instead of a `Shaping` roadmap
|
|
147
|
-
item. Larger ones go through `roadmap-promote` like any
|
|
150
|
+
item. Larger ones get `hacktoberfest` + `help wanted` and go through `roadmap-promote` like any
|
|
151
|
+
other idea.
|
|
148
152
|
|
|
149
153
|
#### Agents & AI
|
|
150
154
|
|
|
@@ -397,10 +401,10 @@ do not claim completion until done.
|
|
|
397
401
|
|
|
398
402
|
| Workflow | Trigger | Purpose |
|
|
399
403
|
| -------- | ------- | ------- |
|
|
400
|
-
| [`.github/workflows/triage.yml`](https://github.com/TerrenoLabs/terreno/blob/master/.github/workflows/triage.yml) | Issue opened | `status:needs-triage` + `area:*` from package dropdown + `type:*` from Kind when present |
|
|
404
|
+
| [`.github/workflows/triage.yml`](https://github.com/TerrenoLabs/terreno/blob/master/.github/workflows/triage.yml) | Issue opened | `status:needs-triage` + `area:*` from package dropdown + `type:*` from Kind when present; `area:*` / `type:*` labels the issue was opened with win, so `roadmap:sync` issues are not asked for an area |
|
|
401
405
|
| [`.github/workflows/roadmap-generate.yml`](https://github.com/TerrenoLabs/terreno/blob/master/.github/workflows/roadmap-generate.yml) | Daily + manual | `roadmap:sync --check` for board drift, then regenerate `ROADMAP.md` from the board and open a pull request when it changes |
|
|
402
406
|
| [`.github/workflows/roadmap-sync.yml`](https://github.com/TerrenoLabs/terreno/blob/master/.github/workflows/roadmap-sync.yml) | Taxonomy files change on `master` + manual | Apply labels and reconcile the board's fields and items |
|
|
403
|
-
| [`.github/workflows/roadmap-reconcile.yml`](https://github.com/TerrenoLabs/terreno/blob/master/.github/workflows/roadmap-reconcile.yml) | IP or task files change on `master` + manual | Advance status from IP headers, push to the board, regenerate `ROADMAP.md` |
|
|
407
|
+
| [`.github/workflows/roadmap-reconcile.yml`](https://github.com/TerrenoLabs/terreno/blob/master/.github/workflows/roadmap-reconcile.yml) | IP or task files change on `master` + manual | Advance status from IP headers, add an entry for every new IP, open its tracking issue, push to the board, regenerate `ROADMAP.md` |
|
|
404
408
|
All three share the `roadmap` concurrency group. They write the same board, and interleaving
|
|
405
409
|
them produces confusing partial states. After the group lock is acquired, each job refreshes
|
|
406
410
|
to the latest branch HEAD so a queued `roadmap-sync` cannot overwrite statuses that
|
|
@@ -413,7 +417,7 @@ The full loop, each arrow with exactly one writer:
|
|
|
413
417
|
|
|
414
418
|
```
|
|
415
419
|
docs/implementationPlans/*.md ──roadmap:reconcile──▶ roadmap-seed-issues.md
|
|
416
|
-
docs/tasks/*.md
|
|
420
|
+
docs/tasks/*.md (Status + new entries) │
|
|
417
421
|
roadmap:sync
|
|
418
422
|
▼
|
|
419
423
|
Project board
|
|
@@ -439,6 +443,24 @@ reported by `--check` and is never overwritten. Cards that are not in
|
|
|
439
443
|
[`roadmap-seed-issues.md`](roadmap-seed-issues.md) are also `--check` failures; apply does
|
|
440
444
|
not delete them. Maintainers own the board's *state* and `Community interest`.
|
|
441
445
|
|
|
446
|
+
**New IPs reach the roadmap on merge.** When a merged plan has no entry,
|
|
447
|
+
`roadmap:reconcile --fix` scaffolds one: the title from the IP's H1, the summary from the first
|
|
448
|
+
paragraph of `## Goal`, and links to the IP and its task list (when `docs/tasks/<slug>.md`
|
|
449
|
+
exists). Area, Target, and Impact come from an optional IP header:
|
|
450
|
+
|
|
451
|
+
```markdown
|
|
452
|
+
**Roadmap:** Area=`api`, Target=`Next`, Impact=`Feature`
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
Without that header they are inferred: Area from the packages named in the header block
|
|
456
|
+
(default `dx`); Target `Released` for shipped work, `Future` for drafts, `58` when a
|
|
457
|
+
`**Target:**` line names 58, otherwise `Next`; Impact `Breaking` when the `**Target:**` line
|
|
458
|
+
says so, otherwise `Feature`. Edit the scaffolded section afterward if a guess is wrong. The
|
|
459
|
+
workflow then runs `roadmap:sync --create-missing-ip-issues`, which opens a tracking issue
|
|
460
|
+
only for entries backed by an IP. Drafts land as `Shaping`. Moving an entry to `Shipped` also
|
|
461
|
+
moves its Target to `Released`. `ROADMAP.md` links each entry's IP and, when one exists, its
|
|
462
|
+
task list.
|
|
463
|
+
|
|
442
464
|
**Status automation is monotonic.** `roadmap:reconcile --fix` advances status and applies
|
|
443
465
|
supersessions, but never walks a status backwards and never revives declined work. IP headers
|
|
444
466
|
go stale far more often than boards do — several plans still read `Draft` for work that
|