@voltro/cli 0.30.0 → 0.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/dist/{apiBuild-BceikpQf.js → apiBuild-BUS1RfPi.js} +2 -2
  3. package/dist/apiBuild-DMlxvL8h.js +2 -0
  4. package/dist/bin.js +3 -3
  5. package/dist/checkCommand-CARZ36Tr.js +2 -0
  6. package/dist/{checkCommand-BMr-X48w.js → checkCommand-D_wdOFhw.js} +498 -321
  7. package/dist/{commands-D4Y1-Nlu.js → commands-BgGAUcku.js} +2392 -2390
  8. package/dist/{dbCommand-C7hbl5pk.js → dbCommand-CbPRCD1x.js} +56 -19
  9. package/dist/dbCommand-Ht47LrV-.js +2 -0
  10. package/dist/{dev-DmnkH-wr.js → dev-GAOIot9G.js} +2202 -2170
  11. package/dist/{dev-Cr-teYsz.js → dev-tPcOmjPJ.js} +1 -1
  12. package/dist/{frameworkTableAssembly-BzAajuUv.js → frameworkTableAssembly-BwIrO5nv.js} +162 -145
  13. package/dist/frameworkTableAssembly-D-EebUQX.js +2 -0
  14. package/dist/index.js +1 -1
  15. package/dist/{inspectMetrics-BeJdP_3b.js → inspectMetrics-BM1vrsga.js} +316 -314
  16. package/dist/{sdkgen-CqpOq_fy.js → sdkgen-BV4fFucu.js} +1 -1
  17. package/dist/{serveCommand-Ciq_wIY8.js → serveCommand-ClqXCX1y.js} +22 -21
  18. package/dist/serveEntry.js +2 -2
  19. package/dist/{start-ocqB1seX.js → start-CTnNvKlk.js} +370 -368
  20. package/dist/startEntry.js +2 -2
  21. package/package.json +17 -17
  22. package/templates/AGENTS.md +1 -1
  23. package/templates/agent-docs/_index.md +1 -1
  24. package/templates/agent-docs/cli.md +29 -0
  25. package/templates/agent-docs/internationalization.md +25 -3
  26. package/templates/agent-docs/routing.md +14 -0
  27. package/templates/agent-docs/whats-new.md +23 -352
  28. package/templates/agent-docs/workflows.md +2 -0
  29. package/templates/apps/api-ai/package.json +7 -7
  30. package/templates/apps/api-auth/package.json +8 -8
  31. package/templates/apps/api-backend/package.json +7 -7
  32. package/templates/apps/api-backend-deactivation/package.json +7 -7
  33. package/templates/apps/api-backend-mail/package.json +8 -8
  34. package/templates/apps/api-backend-mariadb/package.json +9 -9
  35. package/templates/apps/api-backend-sqlite/package.json +8 -8
  36. package/templates/apps/api-backend-storage/package.json +8 -8
  37. package/templates/apps/api-cms/package.json +10 -10
  38. package/templates/apps/api-collab/package.json +8 -8
  39. package/templates/apps/api-data-advanced/package.json +8 -8
  40. package/templates/apps/api-durable/package.json +8 -8
  41. package/templates/apps/api-feature-flags/package.json +9 -9
  42. package/templates/apps/api-governance/package.json +8 -8
  43. package/templates/apps/api-kv/package.json +8 -8
  44. package/templates/apps/api-moderation/package.json +8 -8
  45. package/templates/apps/api-observability/package.json +8 -8
  46. package/templates/apps/api-ratelimit/package.json +8 -8
  47. package/templates/apps/api-rbac/package.json +8 -8
  48. package/templates/apps/api-rest/package.json +7 -7
  49. package/templates/apps/api-saas/package.json +11 -11
  50. package/templates/apps/api-saas-starter/package.json +10 -10
  51. package/templates/apps/api-search/package.json +8 -8
  52. package/templates/apps/api-status/package.json +8 -8
  53. package/templates/apps/api-versioning/package.json +8 -8
  54. package/templates/apps/api-webhooks/package.json +9 -9
  55. package/templates/apps/changelog/package.json +6 -6
  56. package/templates/apps/edge-functions/package.json +2 -2
  57. package/templates/apps/frontend-admin/package.json +8 -8
  58. package/templates/apps/frontend-app/package.json +8 -8
  59. package/templates/apps/frontend-auth/package.json +8 -8
  60. package/templates/apps/frontend-blank/package.json +7 -7
  61. package/templates/apps/frontend-cms/package.json +9 -9
  62. package/templates/apps/frontend-collab/package.json +9 -9
  63. package/templates/apps/frontend-contact/package.json +7 -7
  64. package/templates/apps/frontend-dashboard/package.json +7 -7
  65. package/templates/apps/frontend-docs/package.json +7 -7
  66. package/templates/apps/frontend-i18n/package.json +6 -6
  67. package/templates/apps/frontend-landing/package.json +7 -7
  68. package/templates/apps/frontend-portal/package.json +8 -8
  69. package/templates/apps/frontend-saas/package.json +8 -8
  70. package/templates/apps/frontend-spa/package.json +7 -7
  71. package/templates/apps/frontend-ssr/package.json +7 -7
  72. package/templates/apps/frontend-ssr-api/package.json +8 -8
  73. package/templates/apps/frontend-static-blog/package.json +6 -6
  74. package/templates/apps/frontend-status/package.json +8 -8
  75. package/templates/apps/mobile-app/package.json +2 -2
  76. package/dist/apiBuild-CxvR1Dwt.js +0 -2
  77. package/dist/checkCommand-BOk9y264.js +0 -2
  78. package/dist/dbCommand-D8nhyppR.js +0 -2
  79. package/dist/frameworkTableAssembly-DU0aOxjL.js +0 -2
@@ -1,3 +1,3 @@
1
- import { et as e } from "./inspectMetrics-BeJdP_3b.js";
2
- import { t } from "./start-ocqB1seX.js";
1
+ import { tt as e } from "./inspectMetrics-BM1vrsga.js";
2
+ import { t } from "./start-CTnNvKlk.js";
3
3
  export { e as loadDotEnv, t as runStartCommand };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voltro/cli",
3
- "version": "0.30.0",
3
+ "version": "0.30.2",
4
4
  "description": "The `voltro` CLI — dev server, codegen, migrations, project scaffolding, agent-docs seeding, and production serve.",
5
5
  "keywords": [
6
6
  "voltro",
@@ -62,22 +62,22 @@
62
62
  "@effect/platform-node": "^0.108.0",
63
63
  "@effect/sql": "^0.52.0",
64
64
  "@effect/workflow": "^0.19.0",
65
- "@voltro/ai": "0.30.0",
66
- "@voltro/cache": "0.30.0",
67
- "@voltro/data-transfer": "0.30.0",
68
- "@voltro/database": "0.30.0",
69
- "@voltro/env": "0.30.0",
70
- "@voltro/kv": "0.30.0",
71
- "@voltro/logger": "0.30.0",
72
- "@voltro/plugin-auth": "0.30.0",
73
- "@voltro/plugin-broadcast": "0.30.0",
74
- "@voltro/plugin-mail": "0.30.0",
75
- "@voltro/plugin-storage": "0.30.0",
76
- "@voltro/plugin-webhooks": "0.30.0",
77
- "@voltro/protocol": "0.30.0",
78
- "@voltro/runtime": "0.30.0",
79
- "@voltro/serverless": "0.30.0",
80
- "@voltro/workflow": "0.30.0",
65
+ "@voltro/ai": "0.30.2",
66
+ "@voltro/cache": "0.30.2",
67
+ "@voltro/data-transfer": "0.30.2",
68
+ "@voltro/database": "0.30.2",
69
+ "@voltro/env": "0.30.2",
70
+ "@voltro/kv": "0.30.2",
71
+ "@voltro/logger": "0.30.2",
72
+ "@voltro/plugin-auth": "0.30.2",
73
+ "@voltro/plugin-broadcast": "0.30.2",
74
+ "@voltro/plugin-mail": "0.30.2",
75
+ "@voltro/plugin-storage": "0.30.2",
76
+ "@voltro/plugin-webhooks": "0.30.2",
77
+ "@voltro/protocol": "0.30.2",
78
+ "@voltro/runtime": "0.30.2",
79
+ "@voltro/serverless": "0.30.2",
80
+ "@voltro/workflow": "0.30.2",
81
81
  "chokidar": "^5.0.0",
82
82
  "ioredis": "^5.11.1",
83
83
  "tinyglobby": "^0.2.17",
@@ -652,7 +652,7 @@ each plugin's own README.
652
652
 
653
653
  | Topic | Open | Summary |
654
654
  |---|---|---|
655
- | **What's new in 0.30.0** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
655
+ | **What's new in 0.30.2** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
656
656
  | AI | `node_modules/@voltro/cli/templates/agent-docs/ai.md` | How Voltro treats AI — agents, tools, streaming, RAG — all primitives over the same WebSocket as the rest of the framework. |
657
657
  | Authentication | `node_modules/@voltro/cli/templates/agent-docs/authentication.md` | How @voltro/plugin-auth wires password + session-cookie auth across api + web, plus the pluggable identity-strategy protocol. |
658
658
  | Caching | `node_modules/@voltro/cli/templates/agent-docs/caching.md` | Voltro's caching layer (@voltro/cache) — an always-on memory default, swappable Redis-compatible backends, a low-level wrap primitive, and automatic query-result invalidation. |
@@ -9,7 +9,7 @@ each plugin's own README.
9
9
 
10
10
  | Topic | Open | Summary |
11
11
  |---|---|---|
12
- | **What's new in 0.30.0** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
12
+ | **What's new in 0.30.2** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
13
13
  | AI | `node_modules/@voltro/cli/templates/agent-docs/ai.md` | How Voltro treats AI — agents, tools, streaming, RAG — all primitives over the same WebSocket as the rest of the framework. |
14
14
  | Authentication | `node_modules/@voltro/cli/templates/agent-docs/authentication.md` | How @voltro/plugin-auth wires password + session-cookie auth across api + web, plus the pluggable identity-strategy protocol. |
15
15
  | Caching | `node_modules/@voltro/cli/templates/agent-docs/caching.md` | Voltro's caching layer (@voltro/cache) — an always-on memory default, swappable Redis-compatible backends, a low-level wrap primitive, and automatic query-result invalidation. |
@@ -1181,6 +1181,35 @@ re-open a hole nor hide one, and it is consulted **last**: an executor that gain
1181
1181
  a real guard is reported as guarded whether or not its line is still there. The
1182
1182
  list can only shrink unless someone adds to it deliberately.
1183
1183
 
1184
+ **Two kinds of line, because "debt" and "reviewed" are different claims.** A bare
1185
+ tag is debt. A tag with `reviewed=<why>` says a human read the executor and found
1186
+ it genuinely open — constrained by something the scanner cannot see:
1187
+
1188
+ ```txt
1189
+ teams.deleteSubTeam
1190
+ inquiries.publicFeed reviewed=public by design; returns only published rows
1191
+ ```
1192
+
1193
+ The reason is required: `reviewed=` with no why is the claim without the
1194
+ evidence, and doctor refuses it. A bare tag is always available and is the honest
1195
+ alternative. The two are counted and printed apart, and
1196
+ `--write-authz-allowlist` is **additive**: it keeps the existing file verbatim —
1197
+ entries, comments, grouping, order — and appends only tags it does not already
1198
+ contain. It cannot remove a line. Removing one is your edit, or it happens on its
1199
+ own when an executor gains a guard and its line stops mattering.
1200
+
1201
+ #### Reading the whole list
1202
+
1203
+ The human view prints the 20 most severe unchecked executors. The complete scan
1204
+ — every finding, the counts, the inferred guard vocabulary, and the debt/reviewed
1205
+ split — is in `voltro doctor --json` under `authz`:
1206
+
1207
+ ```bash
1208
+ voltro doctor --json | jq '.authz.unchecked[] | {tag, why, path}'
1209
+ ```
1210
+
1211
+ Nothing is truncated there. If you are triaging, work from the JSON.
1212
+
1184
1213
  #### Before you hand-roll another check
1185
1214
 
1186
1215
  If your checks are imperative because a scope cannot express "may this subject
@@ -29,8 +29,8 @@ export default {
29
29
  type: 'web' as const,
30
30
  name: 'myApp',
31
31
  port: 5191,
32
- // Codes the app SHIPS catalogs for. Every code listed here MUST
33
- // have a corresponding `src/locales/<code>.ts` file or boot fails.
32
+ // The languages this app serves. Drives `<html lang>`, the resolved
33
+ // locale, and the `locale` your page `meta` receives.
34
34
  locales: ['en', 'de'] as const,
35
35
  // Fallback locale when no cookie / Accept-Language matches a
36
36
  // supported one. MUST be in `locales`. Pick your source-of-truth
@@ -39,7 +39,29 @@ export default {
39
39
  }
40
40
  ```
41
41
 
42
- The framework's generated `.framework/app.tsx` wraps the Router in `<I18nProvider>` automatically. You don't write the provider yourself; you don't import `@voltro/i18n` in your layout. Each code in `locales` must have a matching `src/locales/<code>.ts` catalog file — a missing file fails boot, not silently at runtime.
42
+ The framework's generated `.framework/app.tsx` wraps the Router in `<I18nProvider>` automatically when your app **ships catalogs**. You don't write the provider yourself; you don't import `@voltro/i18n` in your layout.
43
+
44
+ ### Declaring languages is not the same as adopting the catalogs
45
+
46
+ `locales:` states which languages the app serves. Whether `@voltro/i18n` gets
47
+ wired is decided separately, by whether `src/locales/<code>.ts` exists for every
48
+ listed code:
49
+
50
+ | `locales:` | `src/locales/*` | what you get |
51
+ |---|---|---|
52
+ | declared | present | `<I18nProvider>` wired, `useT()` works, plus the language facts |
53
+ | declared | absent | the language facts ONLY — `<html lang>`, the resolved locale, `meta.locale`. Bring your own i18n stack. |
54
+ | absent | — | everything falls back to `'en'` |
55
+
56
+ The second row exists because the two used to be one switch, and that made
57
+ `locales:` unusable for an app with its own i18n: declaring it demanded catalog
58
+ files and failed the boot, so the option got left out — and then `<html lang>`
59
+ was `"en"` and every page's `meta` received `locale: 'en'`, for every visitor, in
60
+ an app that is not English. That is worse than useless: a page that trusted the
61
+ value would have rendered the wrong language.
62
+
63
+ `voltro dev` prints which mode it is in, so a declared-but-unwired app is never a
64
+ silent surprise.
43
65
 
44
66
  ## Locale resolution order
45
67
 
@@ -556,6 +556,20 @@ Use SSR for:
556
556
  - **Personalised content** — recommendations, "your" anything.
557
557
  - **Search result pages** — the query string changes per request.
558
558
 
559
+ ### What the server render sees
560
+
561
+ An SSR render is given the request, not a guess at it: the matched `pathname`
562
+ and `params`, the request's cookies and headers (`useServerRequest()`), and the
563
+ **query string**. `useSearchParams()` is the supported reader and works on both
564
+ sides — on the server it reads the request URL, on the client
565
+ `window.location.search` — so a page keyed off `?tab=…` renders the same markup
566
+ in both places.
567
+
568
+ That last part is worth stating because it is the thing a mismatch is made of.
569
+ Anything the server renders from a value the client computes differently
570
+ hydrates with a warning, even when the DOM happens to agree; reach for the hook
571
+ rather than reading the router context directly.
572
+
559
573
  Cost: every request triggers a fresh render. For very high-traffic pages, prefer ISR.
560
574
 
561
575
  ### Streaming SSR