@tailor-platform/sdk 2.14.2 → 2.16.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.
Files changed (129) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/bin/tailor.mjs +2 -2
  3. package/dist/application-Dw3t9p2f.mjs +1 -0
  4. package/dist/{application-BAqZFMWP.mjs → application-wYQ-ivDg.mjs} +27 -27
  5. package/dist/application-wYQ-ivDg.mjs.map +1 -0
  6. package/dist/cli/commands/deploy/app-id-lock.d.mts +97 -0
  7. package/dist/cli/commands/executor/jobs.d.mts +1 -0
  8. package/dist/cli/commands/generate/seed/bundler.d.mts +18 -0
  9. package/dist/cli/commands/tailordb/migrate/config.d.mts +1 -0
  10. package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +15 -1
  11. package/dist/cli/commands/tailordb/migrate/generate.d.mts +5 -2
  12. package/dist/cli/commands/tailordb/migrate/rename-detection.d.mts +13 -0
  13. package/dist/cli/commands/tailordb/migrate/snapshot-comparison.d.mts +7 -1
  14. package/dist/cli/commands/workflow/executions.d.mts +2 -0
  15. package/dist/cli/commands/workflow/waiter.d.mts +1 -0
  16. package/dist/cli/commands/workspace/create.d.mts +16 -1
  17. package/dist/cli/commands/workspace/expiry.d.mts +5 -0
  18. package/dist/cli/commands/workspace/get.d.mts +6 -1
  19. package/dist/cli/commands/workspace/list.d.mts +1 -0
  20. package/dist/cli/lib.d.mts +6 -3
  21. package/dist/cli/lib.mjs +1 -1
  22. package/dist/cli/lib.mjs.map +1 -1
  23. package/dist/cli/main.d.mts +8 -8
  24. package/dist/cli/main.mjs +56 -60
  25. package/dist/cli/main.mjs.map +1 -1
  26. package/dist/cli/shared/command.d.mts +1 -1
  27. package/dist/cli/shared/error-json.d.mts +2 -1
  28. package/dist/cli/shared/errors.d.mts +1 -0
  29. package/dist/cli/shared/function-execution.d.mts +14 -0
  30. package/dist/cli/shared/github-actions.d.mts +13 -0
  31. package/dist/completion/zsh-worker.zsh +98 -5
  32. package/dist/configure/config/types.d.mts +23 -6
  33. package/dist/configure/index.mjs +1 -1
  34. package/dist/configure/index.mjs.map +1 -1
  35. package/dist/configure/services/executor/trigger/event.d.mts +5 -2
  36. package/dist/crashreport-DF8YMIE5.mjs +1 -0
  37. package/dist/{crashreport-BN28xp5B.mjs → crashreport-Doz2Kuuq.mjs} +2 -2
  38. package/dist/{crashreport-BN28xp5B.mjs.map → crashreport-Doz2Kuuq.mjs.map} +1 -1
  39. package/dist/date-CGBZbMW5.mjs +2 -0
  40. package/dist/date-CGBZbMW5.mjs.map +1 -0
  41. package/dist/errors-BtTxkzgy.mjs +7 -0
  42. package/dist/errors-BtTxkzgy.mjs.map +1 -0
  43. package/dist/file-DKBOj5q4.mjs +2 -0
  44. package/dist/file-DKBOj5q4.mjs.map +1 -0
  45. package/dist/guards-ForsrxnH.mjs +2 -0
  46. package/dist/guards-ForsrxnH.mjs.map +1 -0
  47. package/dist/{logger-CCjs1DuH.mjs → logger-CEAxByN5.mjs} +3 -3
  48. package/dist/{logger-CCjs1DuH.mjs.map → logger-CEAxByN5.mjs.map} +1 -1
  49. package/dist/manager-E3ffRcCt.mjs +2 -0
  50. package/dist/manager-E3ffRcCt.mjs.map +1 -0
  51. package/dist/node-builtins-DYfhPBnz.mjs +2 -0
  52. package/dist/node-builtins-DYfhPBnz.mjs.map +1 -0
  53. package/dist/plugin/builtin/file-utils/index.mjs +27 -1
  54. package/dist/plugin/builtin/file-utils/index.mjs.map +1 -1
  55. package/dist/plugin/builtin/seed/index.mjs +1 -1
  56. package/dist/plugin/builtin/seed/seed-type-processor.d.mts +17 -0
  57. package/dist/plugin/get-generated-table.d.mts +13 -0
  58. package/dist/plugin/index.d.mts +2 -2
  59. package/dist/plugin/index.mjs +1 -1
  60. package/dist/plugin/index.mjs.map +1 -1
  61. package/dist/register-ts-hook-DrHS-J1k.mjs +878 -0
  62. package/dist/register-ts-hook-DrHS-J1k.mjs.map +1 -0
  63. package/dist/runtime/file.d.mts +46 -2
  64. package/dist/runtime/file.mjs +1 -1
  65. package/dist/runtime/index.mjs +1 -1
  66. package/dist/{schema-DMlLMsWA.mjs → schema-BTioi2dP.mjs} +2 -2
  67. package/dist/{schema-DMlLMsWA.mjs.map → schema-BTioi2dP.mjs.map} +1 -1
  68. package/dist/{seed-CCc9Xk66.mjs → seed-C3P_T_Eh.mjs} +28 -9
  69. package/dist/seed-C3P_T_Eh.mjs.map +1 -0
  70. package/dist/service-Cw7hb5HK.mjs +2 -0
  71. package/dist/service-Cw7hb5HK.mjs.map +1 -0
  72. package/dist/service-DaoW0kzo.mjs +7 -0
  73. package/dist/service-DaoW0kzo.mjs.map +1 -0
  74. package/dist/service-dn9jxC8c.mjs +1 -0
  75. package/dist/service_pb-DKrsO1_u.mjs +1 -0
  76. package/dist/service_pb-DprmLNsq.mjs +2 -0
  77. package/dist/{service_pb-BdzjiHfC.mjs.map → service_pb-DprmLNsq.mjs.map} +1 -1
  78. package/dist/types/auth.generated.d.mts +1 -19
  79. package/dist/types/executor.generated.d.mts +5 -3
  80. package/dist/types/field.generated.d.mts +40 -0
  81. package/dist/types/helpers.d.mts +9 -1
  82. package/dist/types/resolver.generated.d.mts +5 -40
  83. package/dist/utils/test/index.d.mts +7 -5
  84. package/dist/utils/test/index.mjs +1 -1
  85. package/dist/utils/test/index.mjs.map +1 -1
  86. package/dist/vitest/index.d.mts +2 -3
  87. package/dist/vitest/index.mjs +1 -1
  88. package/dist/vitest/index.mjs.map +1 -1
  89. package/dist/vitest/mocks/file.d.mts +2 -2
  90. package/dist/vitest/setup.d.mts +0 -37
  91. package/dist/vitest/setup.mjs +1 -1
  92. package/dist/vitest/setup.mjs.map +1 -1
  93. package/dist/{workspace_resource_pb-C4EY-Gns.mjs → workspace_resource_pb-BOoRts_z.mjs} +2 -2
  94. package/dist/{workspace_resource_pb-C4EY-Gns.mjs.map → workspace_resource_pb-BOoRts_z.mjs.map} +1 -1
  95. package/docs/cli/application.md +1 -1
  96. package/docs/cli/function.md +19 -6
  97. package/docs/cli/tailordb.md +11 -11
  98. package/docs/cli/workspace.md +133 -20
  99. package/docs/cli-reference.md +94 -25
  100. package/docs/configuration.md +20 -3
  101. package/docs/github-actions.md +45 -13
  102. package/docs/migration/v3.md +38 -0
  103. package/docs/plugin/custom.md +36 -4
  104. package/docs/runtime.md +39 -0
  105. package/docs/services/resolver.md +3 -1
  106. package/docs/services/tailordb-migration.md +31 -9
  107. package/docs/testing.md +3 -7
  108. package/package.json +10 -10
  109. package/dist/application-BAqZFMWP.mjs.map +0 -1
  110. package/dist/application-BKlOiD1x.mjs +0 -1
  111. package/dist/crashreport-By23O2k-.mjs +0 -1
  112. package/dist/date-DrUO8rOJ.mjs +0 -2
  113. package/dist/date-DrUO8rOJ.mjs.map +0 -1
  114. package/dist/errors-BlX4gUw5.mjs +0 -4
  115. package/dist/errors-BlX4gUw5.mjs.map +0 -1
  116. package/dist/file-COPYfju_.mjs +0 -2
  117. package/dist/file-COPYfju_.mjs.map +0 -1
  118. package/dist/node-builtins-TQHhwNzG.mjs +0 -2
  119. package/dist/node-builtins-TQHhwNzG.mjs.map +0 -1
  120. package/dist/register-ts-hook-Cphn4r8s.mjs +0 -642
  121. package/dist/register-ts-hook-Cphn4r8s.mjs.map +0 -1
  122. package/dist/seed-CCc9Xk66.mjs.map +0 -1
  123. package/dist/service-7SCy2bhm.mjs +0 -7
  124. package/dist/service-7SCy2bhm.mjs.map +0 -1
  125. package/dist/service-CWFQ8EVo.mjs +0 -1
  126. package/dist/service-CqbQXFDp.mjs +0 -2
  127. package/dist/service-CqbQXFDp.mjs.map +0 -1
  128. package/dist/service_pb-BdzjiHfC.mjs +0 -2
  129. package/dist/service_pb-p68oLtp9.mjs +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,113 @@
1
1
  # @tailor-platform/sdk
2
2
 
3
+ ## 2.16.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#2345](https://github.com/tailor-platform/sdk/pull/2345) [`ceca2f4`](https://github.com/tailor-platform/sdk/commit/ceca2f44d1b9924bead28bd09289b02a99e3a463) Thanks [@dqn](https://github.com/dqn)! - Surface command failures as GitHub Actions annotations. When `GITHUB_ACTIONS=true`, a failing `tailor` command writes one `::error::` workflow command carrying the error code, details, suggestion, and next action, so the failure shows on the run instead of only in the scrolled log. Set `TAILOR_GITHUB_ACTIONS_ANNOTATIONS=false` to turn it off; `--json` suppresses it.
8
+
9
+ - [#2334](https://github.com/tailor-platform/sdk/pull/2334) [`94b4286`](https://github.com/tailor-platform/sdk/commit/94b42863d21ba39ee34f87d678a1c56edff0f862) Thanks [@dqn](https://github.com/dqn)! - Convert a single-value field into an array with `tailordb migration generate --expand-contract`. When only the array-ness changes, the generated migration pair stores each existing value as a one-element array and needs no edits; array-to-single-value changes remain manual.
10
+
11
+ - [#2261](https://github.com/tailor-platform/sdk/pull/2261) [`a340cbf`](https://github.com/tailor-platform/sdk/commit/a340cbf51d6dcd8e38067e155f75e2f570480988) Thanks [@tailor-bobbin](https://github.com/apps/tailor-bobbin)! - Add `tailor seed dump`, which writes the rows currently in TailorDB out as JSONL seed data. The output is the format `tailor seed apply` reads, so a dump taken before a change is what restores the tables after it: `tailor seed apply --truncate` puts the dumped rows back. Dump every table, one namespace with `--namespace`, or the tables you name; `--out` writes the files somewhere other than the seed data directory, and existing files are only overwritten with `--force`. IdP `_User` records are not dumped.
12
+
13
+ - [#2327](https://github.com/tailor-platform/sdk/pull/2327) [`964c86e`](https://github.com/tailor-platform/sdk/commit/964c86e013b39d4dbfd97a7ad6e7956b0972acae) Thanks [@dqn](https://github.com/dqn)! - Make `tailor seed validate` reject a seed row that carries a field the table does not declare, at the top level or inside a nested object, instead of passing it through to fail later as a database error in `tailor seed apply`. The issue names the field and how to fix the row.
14
+
15
+ Fields a plugin adds to a table are validated like the table's own. The seed schema generated for a table with plugins attached loads the table through the new `getExtendedTable()` helper from `@tailor-platform/sdk/plugin`, which returns the table with every plugin-added field applied, as `tailor generate` sees it. Run `tailor generate` after upgrading so the seed schema files are regenerated.
16
+
17
+ - [#2284](https://github.com/tailor-platform/sdk/pull/2284) [`347b5a1`](https://github.com/tailor-platform/sdk/commit/347b5a1f50d1ed597d64f4907b6bab0330a1c9ba) Thanks [@dqn](https://github.com/dqn)! - Add `tailor workspace prune` to delete stale temporary workspaces, such as the ones left behind by CI runs, preview deployments, or interrupted local e2e runs.
18
+
19
+ In name-and-age mode, a workspace is deleted only when its whole name matches a `--name` regular expression and it was created at least `--older-than` ago. Use `--organization-root <id>` for workspaces directly under an organization, `--folder-id <id>` for workspaces in a folder, or `--personal` for workspaces belonging to no organization and no folder. Organization roots and folders can be repeated, and all locations combine as a union. Locations are read only from the command line; without a location, this mode considers every visible workspace.
20
+
21
+ Use `--exclude` to keep named workspaces. Delete-protected workspaces are always kept, the command aborts without deleting anything when more workspaces match than `--limit` allows or when a location option resolves to an empty value, and `--dry-run` lists the candidates first. `--older-than 0s` requires an explicit location.
22
+
23
+ ```bash
24
+ tailor workspace prune --name 'e2e-ws-.*' --older-than 24h --dry-run
25
+ tailor workspace prune --name 'e2e-ws-.*' --older-than 24h --yes
26
+ ```
27
+
28
+ - [#2306](https://github.com/tailor-platform/sdk/pull/2306) [`503f88c`](https://github.com/tailor-platform/sdk/commit/503f88cb4bb7da9fb5a954aa2181991daa23e71e) Thanks [@dqn](https://github.com/dqn)! - Let a workspace carry its own expiry, so pruning it needs no name or age filter.
29
+
30
+ `tailor workspace create --ttl 24h` records on the workspace when it becomes prunable, and `tailor workspace prune --expired --folder-id <id>` deletes the workspaces in that location whose recorded expiry has passed. A workspace that records no expiry is never deleted this way, and neither is one whose recorded expiry cannot be read.
31
+
32
+ `tailor workspace ttl set` and `tailor workspace ttl clear` change that expiry afterwards, and `workspace get` / `workspace list` report it. `create --ttl` exits non-zero when it cannot confirm the expiry was recorded, naming the `ttl set` command that finishes the job — the workspace itself is still created and reported.
33
+
34
+ Because the expiry is recorded on the workspace rather than derived from its name, anything able to write the workspace's metadata can bring its deletion forward — and on the Platform, writing a workspace's metadata is a lesser permission than deleting it. `--expired` therefore requires at least one location, and `--name` still applies on top.
35
+
36
+ `workspace prune` now names locations instead of filtering by organization: `--organization-root <id>` selects the workspaces directly under an organization and none inside its folders, `--folder-id <id>` selects the workspaces in one folder, and `--personal` selects the workspaces belonging to no organization and no folder. Each can be repeated and they combine as a union. `--organization-id` is gone, and the location options no longer read `TAILOR_PLATFORM_ORGANIZATION_ID` or `TAILOR_PLATFORM_FOLDER_ID`, so a `--name` / `--older-than` sweep that names no location now considers every visible workspace instead of being narrowed by those variables.
37
+
38
+ Restoring a workspace does not clear its recorded expiry, so restore it and then run `workspace ttl set` or `workspace ttl clear` before the next `--expired` run — or keep it out of that run with `--exclude`.
39
+
40
+ ```bash
41
+ tailor workspace create --name e2e-ws-1 --region us-west --folder-id <id> --ttl 24h
42
+ tailor workspace ttl set --workspace-id <id> --ttl 7d
43
+ tailor workspace prune --expired --folder-id <id> --dry-run
44
+ tailor workspace prune --expired --folder-id <id> --personal --yes
45
+ ```
46
+
47
+ ### Patch Changes
48
+
49
+ - [#2326](https://github.com/tailor-platform/sdk/pull/2326) [`a9e8b8b`](https://github.com/tailor-platform/sdk/commit/a9e8b8b01a9d4b363b4f84c5b0089179647f70eb) Thanks [@dqn](https://github.com/dqn)! - Preserve actionable authentication, permission, and connection diagnostics, including both causes when deployment and metadata recovery fail.
50
+
51
+ - [#2340](https://github.com/tailor-platform/sdk/pull/2340) [`2003497`](https://github.com/tailor-platform/sdk/commit/20034971cc0754407e2b7f387fcfe2e12529a5e2) Thanks [@dqn](https://github.com/dqn)! - Report a stable `error.code` with recovery guidance for user-actionable CLI command failures (invalid options, missing resources, invalid configuration, unmet preconditions): `--json` output no longer falls back to `UNEXPECTED_ERROR` for them, and human-readable output prints the code with its suggestion and next command.
52
+
53
+ - [#2327](https://github.com/tailor-platform/sdk/pull/2327) [`2beebd0`](https://github.com/tailor-platform/sdk/commit/2beebd0273f37e839127a0f2c53361e44a8202de) Thanks [@dqn](https://github.com/dqn)! - Keep a table's `hooks()` and `validate()` when a plugin adds fields to it. The extended table lost both, so they were missing from the deployed table.
54
+
55
+ - [#2315](https://github.com/tailor-platform/sdk/pull/2315) [`f5f82f8`](https://github.com/tailor-platform/sdk/commit/f5f82f8351b3aaf278262b3827c369d89b20f810) Thanks [@toiroakr](https://github.com/toiroakr)! - Allow the CLI to use readable keyring credentials without requiring a test write. Explain that credentials may be inaccessible in a sandbox and provide recovery instructions when keyring credentials cannot be found or read.
56
+
57
+ - [#2347](https://github.com/tailor-platform/sdk/pull/2347) [`ddcecce`](https://github.com/tailor-platform/sdk/commit/ddceccebe40751f074dd9f5c3a0d875c91e9f1fe) Thanks [@toiroakr](https://github.com/toiroakr)! - Fix GitHub Actions annotation titles to fall back to `CLI_ERROR` when a `CLIError`'s `code` is an empty string, not only when it is missing entirely.
58
+
59
+ - [#2344](https://github.com/tailor-platform/sdk/pull/2344) [`e010f8b`](https://github.com/tailor-platform/sdk/commit/e010f8bcdccc3cbecf12ef8062a51d5a95c41026) Thanks [@dqn](https://github.com/dqn)! - Propagate failures from the default subcommand a parent CLI command runs, so shortcuts like `tailor workspace`, `tailor workflow`, `tailor secret vault`, and `tailor executor webhook` exit non-zero and print the same error as their explicit `list` form instead of exiting 0 with no output. Scripts and CI steps that relied on the exit code of a parent shortcut now see authentication and other failures.
60
+
61
+ - [#2325](https://github.com/tailor-platform/sdk/pull/2325) [`882ff68`](https://github.com/tailor-platform/sdk/commit/882ff68a1c8df95f76c23bd053dbf168a957119a) Thanks [@dqn](https://github.com/dqn)! - Move individual file loading and generation logs to verbose output while keeping progress and failures visible. Preserve failing plugin IDs, generation hooks, and causes in human-readable and JSON errors.
62
+
63
+ - [#2336](https://github.com/tailor-platform/sdk/pull/2336) [`8c4e4a2`](https://github.com/tailor-platform/sdk/commit/8c4e4a27dc928f784eae82353eb8c7811e86d635) Thanks [@dqn](https://github.com/dqn)! - Keep the run's `--profile` and `--workspace-id` on the follow-up commands the CLI suggests, so copying a suggested command after `tailor workspace create --profile dev --ttl 24h`, `tailor auth status --profile dev`, `tailor authconnection authorize --profile dev`, `tailor executor list --profile dev`, or `tailor executor webhook list --profile dev` targets the same Platform and workspace as the run that printed it. `auth status` now reports a missing login as a `NOT_AUTHENTICATED` error whose suggested next command is `tailor login` with the same profile.
64
+
65
+ - [#2323](https://github.com/tailor-platform/sdk/pull/2323) [`61fb8f9`](https://github.com/tailor-platform/sdk/commit/61fb8f9713c2118a896e6952b9fdeb63cce96a87) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update @connectrpc to v2.2.0
66
+
67
+ - [#2329](https://github.com/tailor-platform/sdk/pull/2329) [`cadee3a`](https://github.com/tailor-platform/sdk/commit/cadee3ab7955f741fc89208ff8a64f281e9539d2) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency @toiroakr/lines-db to v0.12.7
68
+
69
+ - [#2072](https://github.com/tailor-platform/sdk/pull/2072) [`fd3595f`](https://github.com/tailor-platform/sdk/commit/fd3595f07ccb31ec280c948be481f19849a98a7f) Thanks [@toiroakr](https://github.com/toiroakr)! - Narrow the parsed TailorDB field type to the eleven field types the schema actually accepts (`uuid`, `string`, `boolean`, `integer`, `float`, `decimal`, `enum`, `date`, `datetime`, `time`, `nested`) instead of a bare string. Behavior is unchanged; the internal types now match what validation already enforced.
70
+
71
+ - [#2322](https://github.com/tailor-platform/sdk/pull/2322) [`71f6134`](https://github.com/tailor-platform/sdk/commit/71f6134a34082c442f0d3bb202d9134441da0ccd) Thanks [@dqn](https://github.com/dqn)! - Enable verbose CLI diagnostics when GitHub Actions sets `RUNNER_DEBUG=1`, and include error stack traces consistently when `DEBUG=true` is set.
72
+
73
+ ## 2.15.0
74
+
75
+ ### Minor Changes
76
+
77
+ - [#2283](https://github.com/tailor-platform/sdk/pull/2283) [`c3c028d`](https://github.com/tailor-platform/sdk/commit/c3c028de654a4a6dbf9153404c083a79f89d2391) Thanks [@dqn](https://github.com/dqn)! - Record the app id in `.github/tailor.lock` instead of `tailor.config.ts` for projects that use `tailor setup`. `deploy` and `remove` read the id from the lock's new `appIds` section, keyed by the config file path, so renaming the app or copying a config inside the repo no longer risks claiming another app's resources. A local `tailor deploy` moves an existing config `id` into the lock and removes it from `tailor.config.ts`; in CI a config without a recorded id fails at plan time with instructions. Projects without the lock keep the current behavior.
78
+
79
+ - [#2282](https://github.com/tailor-platform/sdk/pull/2282) [`9b23234`](https://github.com/tailor-platform/sdk/commit/9b23234315b1bd6a42bb5e816bfcda255daefbeb) Thanks [@dqn](https://github.com/dqn)! - Add `metadata` to `defineConfig()` for writing extra labels to the deployed application's metadata
80
+
81
+ - [#2274](https://github.com/tailor-platform/sdk/pull/2274) [`5168d35`](https://github.com/tailor-platform/sdk/commit/5168d35b49e9e3d691c0f2f79041b333f327ce43) Thanks [@toiroakr](https://github.com/toiroakr)! - Add explicit `utf8` and `base64` encoding options to `file.upload` and generated `uploadFile` helpers. String uploads without encoding retain their existing text behavior but are deprecated ahead of v3; byte uploads remain unchanged and are not deprecated. Include migration guidance for existing string uploads.
82
+
83
+ - [#2285](https://github.com/tailor-platform/sdk/pull/2285) [`6f7282d`](https://github.com/tailor-platform/sdk/commit/6f7282d46f717547b769c46a0b43c027db9b52e6) Thanks [@dqn](https://github.com/dqn)! - Show structured log entries (message, severity, timestamp) in `tailor function logs <execution-id>` and in the per-job details of `tailor workflow start/wait/executions/resume --logs`. Entries are available while an execution is still running. Add `tailor function logs <execution-id> --follow` to stream new log entries until the execution completes, with an optional `--timeout`.
84
+
85
+ - [#2265](https://github.com/tailor-platform/sdk/pull/2265) [`e174343`](https://github.com/tailor-platform/sdk/commit/e1743434890d3ebb6ddf10f4972d0a86a584d1b1) Thanks [@dqn](https://github.com/dqn)! - Detect renames of members inside nested fields in `tailordb migration generate`: a removed member with a compatible added sibling is confirmed interactively or with `--rename "Table.field.oldMember:newMember"` (`--drop "Table.field.member"` confirms a removal), recorded as a breaking `memberRenames` entry on the field's change, and given a generated copy script; the pre-migration phase keeps the old member readable and adds the new member as optional. Non-interactive runs (`--yes`, CI) now fail while such a candidate is unresolved, as they already do for top-level fields. Migration files now use format version 6, which older SDK versions refuse to read.
86
+
87
+ ### Patch Changes
88
+
89
+ - Clarify the errors thrown when a resolver returns a value that cannot be serialized for `t.date({ as: "date" })`: the type-mismatch error now describes the actual value received, and the invalid-date error now states the reason (e.g. an out-of-range year) inline instead of only in the error's `cause`.
90
+
91
+ - [#2287](https://github.com/tailor-platform/sdk/pull/2287) [`7ad456b`](https://github.com/tailor-platform/sdk/commit/7ad456b0be1e0681f5e05aaea24b63ff5f25724d) Thanks [@toiroakr](https://github.com/toiroakr)! - Harden `deploy`'s TailorDB migration restore step so it always sends complete GraphQL operation restriction settings for a table when restoring them.
92
+
93
+ - [#2293](https://github.com/tailor-platform/sdk/pull/2293) [`41b72f2`](https://github.com/tailor-platform/sdk/commit/41b72f2ec9cf59fe5c5c3ae7f54ac56a31e55b4f) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency confbox to v0.3.1
94
+
95
+ - [#2294](https://github.com/tailor-platform/sdk/pull/2294) [`809307c`](https://github.com/tailor-platform/sdk/commit/809307cc38f47d4733c0f25fe2d93271a43a0a99) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency globals to v17.12.0
96
+
97
+ - [#2295](https://github.com/tailor-platform/sdk/pull/2295) [`e9ca76d`](https://github.com/tailor-platform/sdk/commit/e9ca76d8e18670ae71d1203cb930cf14f8c6e816) Thanks [@renovate](https://github.com/apps/renovate)! - Depend on `@politty/zod` directly instead of the `politty` wrapper package. `politty` re-exported everything from `@politty/zod` unchanged, so this is an internal dependency swap with no effect on CLI behavior.
98
+
99
+ - [#2303](https://github.com/tailor-platform/sdk/pull/2303) [`c986c33`](https://github.com/tailor-platform/sdk/commit/c986c33ee854198da6fb4de30276a146f14d8ddb) Thanks [@dqn](https://github.com/dqn)! - Fix `resolverExecutedTrigger` typing date fields as `Date`. The executor receives the event as JSON, so a `t.date({ as: "date" })` field arrives as its `YYYY-MM-DD` string and `t.datetime()` as an ISO string; `result` now reports both as `string` instead of allowing `Date` methods that threw at runtime.
100
+
101
+ - [#2301](https://github.com/tailor-platform/sdk/pull/2301) [`0abc437`](https://github.com/tailor-platform/sdk/commit/0abc4373c2171bca15816e96eb6fee6d178ef659) Thanks [@toiroakr](https://github.com/toiroakr)! - Retry `deploy` requests that fail with a raw transport-level disconnect (`ERR_STREAM_PREMATURE_CLOSE`, `ECONNRESET`, `ETIMEDOUT`, `EPIPE`) for no-side-effect/idempotent operations, matching the existing retry behavior for equivalent server-side errors. Previously such disconnects surfaced immediately as a fatal `deploy` failure with no retry.
102
+
103
+ - [#2302](https://github.com/tailor-platform/sdk/pull/2302) [`5a06755`](https://github.com/tailor-platform/sdk/commit/5a067550c27fc9b4bcaeac49dd70ca794085f395) Thanks [@toiroakr](https://github.com/toiroakr)! - Spread `deploy`'s function/script/static website uploads (client-streaming RPCs) across a small pool of HTTP/2 connections instead of multiplexing them all on one, queueing uploads beyond the pool's capacity rather than sharing a connection. Since Node 24.2.0 (backported to the 22.x LTS line as of Node 22.23.0), nghttp2 dropped its legacy priority-tree stream scheduler. In our measurements this changed how Node's http2 client schedules concurrent outbound DATA streams: uploads sharing one connection can finish 12x+ apart in wall-clock time even though aggregate throughput is unchanged, making individual uploads more likely to exceed the platform's per-upload timeout, and there is currently no request header or API that opts a stream into different client-side scheduling. Tested directly across Node versions: this behavior is confirmed independent of server implementation. The pool size is a conservative internal constant, not derived from `TAILOR_APPLY_CONCURRENCY` (which bounds unrelated RPC concurrency and is user-configurable to arbitrary values) or from production connection-limit data.
104
+
105
+ - [#2310](https://github.com/tailor-platform/sdk/pull/2310) [`6aecb59`](https://github.com/tailor-platform/sdk/commit/6aecb59f6bab9dead327792ef7ea8bd93e463ea8) Thanks [@toiroakr](https://github.com/toiroakr)! - Honor cancellation and requested timeouts while uploads wait for an available connection.
106
+
107
+ - [#2275](https://github.com/tailor-platform/sdk/pull/2275) [`c2c0d93`](https://github.com/tailor-platform/sdk/commit/c2c0d932d52759d9b7a3db3cfa3679b7ff44df80) Thanks [@dqn](https://github.com/dqn)! - Support Vitest 5 in `@tailor-platform/sdk/vitest` and scaffold new projects with Vitest 5. `tailorRuntime({ config })` now seeds each project's secrets from that project's own root, so a run combining projects with different roots no longer loads one project's config for all of them. Projects keep resolving the same environment they did on Vitest 4: a project that omits `extends` inherits the root `tailor-runtime` environment only on Vitest 5, where that is Vitest's own default. The `tailor-runtime` environment no longer removes the `performance` global during tests: Vitest 5's module loader reads it while resolving `import()` calls, and the deploy-time free-variable check already treats `performance` as a runtime global.
108
+
109
+ - [#2308](https://github.com/tailor-platform/sdk/pull/2308) [`ceca9f1`](https://github.com/tailor-platform/sdk/commit/ceca9f15c79d2e19ae205543703009db4ae80236) Thanks [@renovate](https://github.com/apps/renovate)! - Upgraded the internal `zinfer` tool used to generate this package's TypeScript types from Zod schemas, fixing a case where a type reached only through another file's generated declaration (e.g. `Resolver.output`, `Resolver.input`) collapsed to `any` in the generated output instead of resolving to the real type (e.g. `TailorField`). Structurally identical `*Input` types are now aliased to their base type instead of duplicating the same fields, with no change to runtime behavior.
110
+
3
111
  ## 2.14.2
4
112
 
5
113
  ### Patch Changes
package/bin/tailor.mjs CHANGED
@@ -5,10 +5,10 @@
5
5
  // CLI module graph is compiled, so warm starts skip recompilation
6
6
  // (Node >= 22.8.0; silent no-op otherwise).
7
7
  try {
8
- const { enableCompileCache } = await import("politty/compile-cache");
8
+ const { enableCompileCache } = await import("@politty/zod/compile-cache");
9
9
  enableCompileCache("tailor");
10
10
  } catch {
11
- // politty/compile-cache is not resolvable from here (e.g. a fully
11
+ // @politty/zod/compile-cache is not resolvable from here (e.g. a fully
12
12
  // bundled CLI) — start without the compile cache rather than failing
13
13
  // the CLI.
14
14
  }
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./application-wYQ-ivDg.mjs";export{t as defineApplication,e as generatePluginFilesIfNeeded};