Update dependency @tailor-platform/sdk to v2 - #116
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/tailor-platform-sdk-2.x
branch
from
August 29, 2026 07:55
302343f to
d40bef2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.56.0→2.7.0Release Notes
tailor-platform/sdk (@tailor-platform/sdk)
v2.7.0Compare Source
Minor Changes
#2181
8f48d23Thanks @dqn! - Trace each service's apply step and each TailorDB migration phase when OTLP tracing is enabled.deploynow emitsapply.<service>.createUpdatespans underapply.createUpdateServicesandapply.createUpdateDependentServices, plusapply.tailorDB.migration.prePhaseand.postPhaseper pending migration and.scriptfor each migration that carries amigrate.ts, so a slow deploy can be attributed to a service or to a migration script rather than to a whole phase.#2168
aef699bThanks @dqn! - Move thetailor setupcommands into the optional@tailor-platform/sdk-plugin-setupCLI plugin.setupgenerates GitHub repository automation, which not every project uses, but its workflow templates and its@croct/json5-parser/json5dependencies shipped with the SDK for everyone. Splitting it out follows the same CLI plugin mechanism astailor tailordb erd.To keep using
tailor setup <command>, install the plugin next to the SDK:The commands, options, generated files, and the
.github/tailor.lockformat are unchanged.#2167
4c74e1bThanks @dqn! - Run TailorDB migration scripts as workflow jobs so they are no longer bound by the 60-second script execution limit.A data migration that previously failed with
deadline_exceeded— losing its logs along with any record of how far it got — now runs to completion.tailor deploywaits for it and reports its logs as before. This applies to every migration; no flag or migration-file change is required.Patch Changes
#2170
2f79d38Thanks @dqn! - Keep the generated Kysely table types and migration types in agreement on which array columns needArrayColumnType, so a future column type cannot pick up an array form that Kysely can read through in one and not the other.#2145
293a0c3Thanks @dqn! - GenerateDate-based migration types fordatecolumns, matching the values returned by the function runtime and the existing generated table types. Reading adatecolumn inmigrate.tsnow yields aDateinstead of astring, while writes accept either. Migration scripts can also read and writedateanddatetimearray columns. Existing migration scripts that treat selecteddatevalues as strings must be updated.#2163
58bfd7fThanks @toiroakr! - Faildeploywith a clear error when a resolver, executor, or workflow job references a Node-only global (process,Buffer,require, etc.) that the Tailor Platform runtime never defines, instead of deploying successfully and only failing with aReferenceErrorat runtime. UsedefineConfig({ env })and theenvargument passed into the body function to read configuration values.#2156
e36bc5dThanks @dqn! - - Speed up deployments by reducing metadata API calls.#2162
1c1b989Thanks @dqn! - Reduce the chance that deploy metadata writes overwrite labels changed by another client.#2177
dd5bf5aThanks @toiroakr! - Remove unused internal.brand()calls from config schemas. This is invisible to users: the generated public types were already unaffected by these calls.#2152
fa17d16Thanks @renovate! - fix(deps): update dependency rolldown to v1.2.5#2153
07ac5d0Thanks @renovate! - fix(deps): update dependency @inquirer/prompts to v8.6.0#2006
1aca9f2Thanks @renovate! - fix(deps): update oxc#2155
3535006Thanks @renovate! - fix(deps): update dependency @inquirer/core to v12#2165
f9bb880Thanks @renovate! - fix(deps): update dependency @0no-co/graphql.web to v1.3.4#2173
4090591Thanks @renovate! - chore(deps): update dependency @electric-sql/pglite to v0.5.6v2.6.0Compare Source
Minor Changes
#2136
6fba096Thanks @toiroakr! -.relation()'stoward.typeoption is renamed totoward.table, since it names a target table rather than a TypeScript/GraphQL type — matching thedb.type()→db.table()rename. The old spelling keeps working as a deprecated alias until v3;tailor upgradeoffers thev3/relation-toward-tablecodemod to rewritetoward: { type: ... }totoward: { table: ... }across TypeScript/JavaScript sources. The relation's owntype(its cardinality, e.g."n-1") is unchanged.#2144
92db44dThanks @dqn! - Export the CLI foundation (logger,styles,defineAppCommand,createCommonArgs, the shared argument shapes, and thearg/defineCommand/runCommand/runMaincommand toolkit) from@tailor-platform/sdk/cli, and move the CLI plugins onto it. Plugins previously bundled their own copy of the logger, so--jsonand--verboseset by a plugin never reached the SDK code paths it calls; both flags now feed one logger state, and--verbosealso enableslogger.debugoutput.#2157
310b098Thanks @dqn! - Support JSONC and JSON5 Renovate configs in tailor setup deps without changing their comments or formatting. Renovate configs that Renovate itself would reject for duplicate keys are now reported for manual inspection instead of being updated.Patch Changes
#2159
1dc8b53Thanks @dqn! - Internal refactoring: the bundle concurrency limiter now uses thep-limitdependency already used elsewhere in the CLI instead of a hand-rolled worker pool. The concurrency cap, input-order results, and failure handling are unchanged; the only observable difference is that the first bundle now starts a microtask later instead of synchronously.#2142
f576eb4Thanks @dqn! - Internal refactoring: the wait point key rules and the platform runtime globals allowlist each moved to a single definition shared by validation and the test-runtime emulation. Accepted keys, error messages, and the emulated runtime surface are unchanged.#2161
189b993Thanks @dqn! -TAILOR_APPLY_CONCURRENCYandTAILOR_BUNDLE_CONCURRENCYnow fall back to their defaults when set aboveNumber.MAX_SAFE_INTEGER. Such values were previously used as-is, which silently lifted the concurrency cap or applied a rounded number that did not match what was set. Values with leading zeros (0007) are now accepted.#2143
25814afThanks @dqn! - Internal refactoring: TailorDB and IdP permission definitions are now normalized by one shared implementation. Accepted permission formats and their behavior are unchanged.#2140
361afa5Thanks @dqn! - Remove the unused internalDeepWideningtype helper chain, including aTrueFalseToBoolhelper whose implementation never matched its name.#2123
2504afcThanks @renovate! - fix(deps): update dependency get-tsconfig to v4.14.3#2135
5b7b676Thanks @renovate! - fix(deps): update dependency politty to v0.11.9#2006
1aca9f2Thanks @renovate! - chore(deps): lock file maintenancev2.5.0Compare Source
Minor Changes
#2076
d4a23f0Thanks @dqn! - Addtailor function script, which scaffolds a one-off script executed bytailor function runwithout deploying. By default, the skeleton imports the project's generatedgetDB()whenkyselyTypePluginis configured; without the plugin, the command generates a script-scopeddb.tsanddb.snapshot.jsonfrom local table definitions. Pass--remoteto generate those script-scoped files from a deployed or external namespace instead.function runrefuses to execute the script when that snapshot no longer matches the deployed or locally defined table and field structure (override with--allow-schema-drift).#2103
0578df4Thanks @toiroakr! - AddPluginConfigRegistryto@tailor-platform/sdk/plugin, an interface builtin plugins extend via declaration merging to register their config type under their own id.kyselyTypePluginandseedPluginnow register through it.#2088
c9f91d9Thanks @dqn! - The--branchoption oftailor setup branchis renamed to--target, so it no longer collides with the subcommand name. The old spelling keeps working as a deprecated alias until v3 and prints a deprecation warning when used;tailor upgradeoffers thev3/setup-branch-flag-renamecodemod to rewritesetup branch --branchinvocations across package.json scripts, shell and Windows scripts, YAML, Markdown, and JavaScript/TypeScript sources. The--branchoption ofsetup tag,setup preview, andsetup coordinateis unchanged.#2110
fca0ff0Thanks @dqn! - Breaking change (beta): Renametailor setup renovatetotailor setup deps, which selects the dependency update provider with--provider(currentlyrenovate, the default).#2124
e8e8097Thanks @dqn! - Breaking change (beta): Rename the remaining TailorDB identifiers that named adb.table()definition a type:typeName→tableNamePluginRecordTriggerConfig.typeName→tableNameuserProfile.typeName→tableNamemockFile().calls[]entries exposetableNametailordb.fileruntime parameters and their JSDocUpdate custom plugins that build a record trigger config, and test assertions that read
mockFile().calls[].typeName. Executor runtime args keeptypeName, since that is the key the platform sends into a deployed executor; the prototype_namewire field, TRNtypesegments, and the.typeName()field builder are unchanged.#2067
a2e431fThanks @dqn! - Addtailor tailordb migration generate --data-onlyto create a migration with no schema changes that exists to run a data transformation script. Pass--namespaceto pick the target when more than one namespace configures migrations.Patch Changes
#2128
2a97723Thanks @dqn! - Simplify how build-only resolver bundles are merged across config files. No observable behavior change.#2087
e98a03dThanks @toiroakr! - DeprecateexecJobFunctionon theworkflowvalue imported from@tailor-platform/sdk/runtime(/workflow); it is removed in v3. Calling a workflow job by name through it has no working use — the build already rejects a direct call to it from inside a job body — so call the target job's own.start()method instead. The ambienttailor.workflow.execJobFunctionglobal (what.start()itself compiles down to) is unaffected.#2134
46e2b6eThanks @dqn! - Prevent unchanged Executor, pipeline resolver, Auth IdP, user-profile, and tenant-provider resources from appearing as updates when the platform returns omitted fields with their default values.#2110
a588f78Thanks @dqn! - Fix the missing deprecation warning fortailor function test-runwhen a global option precedes the subcommand, such astailor function --json test-run.#2138
870c8cdThanks @dqn! - Stop exporting internal declarations that were only used within their own module.#2102
4f017f2Thanks @dqn! - Report a connection failure while preparing the login or auth-connection authorization URL as a normal command error, instead of treating it as an SDK crash.#2122
f5b5b24Thanks @toiroakr! - Minify the SDK's build output (function names are preserved for readable stack traces), shrinking the CLI bundle by roughly 40%. Pin the script expression generated fordb.fields.timestamps()'s built-inupdatedAthook so it no longer changes across SDK builds, which previously could surface as a spurious "hooks modified" migration diff for every table using it.#2120
e4966ecThanks @toiroakr! - Fixtailor deploywarningCould not validate OAuth2 client "<name>": unresolved attribute. The pre-flight check could not evaluate the rule that rejectsrequireDpop: trueon a browser client, so it skipped it for every OAuth2 client. The rule now runs: a browser client withrequireDpop: truefails pre-flight, and other client types no longer produce the warning.#2129
124db73Thanks @dqn! - Report the real error when the folder lookup intailor organization folder deletefails with something other than "not found" (e.g. network, permission, or authentication errors), instead of always claiming the folder was not found.#2074
13cd666Thanks @dqn! - Prevent TailorDB migration processing from changing object prototypes when snapshots contain special record keys#2006
1aca9f2Thanks @renovate! - fix(deps): update oxc#2030
943b577Thanks @renovate! - chore(deps): update dependency tsx to v4.23.12#2081
80403ceThanks @renovate! - chore(deps): update dependency @electric-sql/pglite to v0.5.5#2083
fa4fc36Thanks @renovate! - fix(deps): update dependency get-tsconfig to v4.14.2#2084
bb85f06Thanks @renovate! - fix(deps): update dependency kysely to v0.29.5#2085
98542d3Thanks @renovate! - fix(deps): update dependency open to v11.0.1#2108
c2a1fb5Thanks @renovate! - fix(deps): update dependency @bufbuild/protobuf to v2.14.0#2109
b48e4e0Thanks @renovate! - fix(deps): update dependency globals to v17.11.0#2117
cedf0f6Thanks @renovate! - fix(deps): update dependency es-toolkit to v1.51.0#2132
bec3a20Thanks @dqn! - Skip reloading resolver files when a namespace's resolvers were already loaded but yielded none, avoiding duplicate imports and log output.#2064
737edfeThanks @dqn! - Fixtailor seed applytiming out withdeadline_exceededwhen seeding 100+ IdP_Userrows._Userrows are now sent in chunks of 25, and when a chunk fails the confirmed created/updated counts are reported so re-running with--upsertis an informed choice.#2126
889bd16Thanks @dqn! - Refactor TailorDB migration snapshot internals into focused modules without changing CLI behavior or persisted formats.#2130
f67de20Thanks @dqn! - Output an empty JSON array fromtailor staticwebsite domain list --jsonwhen no custom domains exist, instead of producing no stdout output.#2127
37e3105Thanks @dqn! - Fix TailorDB hooks and validators sharing one function reference (e.g.hooks: { create: fn, update: fn }) being deployed with the argument shape of only the last role, which made the other role read undefined values at runtime.#2073
f03ea04Thanks @dqn! - Rename the plugin authoring APIs that model TailorDB tables:PluginGeneratedType→PluginGeneratedTableTailorDBTypeForPlugin→TailorDBTableForPluginTypePluginOutput→TablePluginOutputPluginProcessContext→PluginTableProcessContexttypeConfigRequired→tableConfigRequiredonTypeLoaded→onTableLoadedtype/typeConfig→table/tableConfigtypes→tablesTailorDBNamespaceData.types→TailorDBNamespaceData.tablessourceType→sourceTablegetGeneratedType→getGeneratedTablePluginGeneratedTypeSource→PluginGeneratedTableSourceisPluginGeneratedType→isPluginGeneratedTablegeneratedTypeKind→generatedTableKindUpdate custom plugins, generated-table lookups, and CLI source metadata consumers to use the new names. The generated
.tailor/<plugin-id>/typesdirectory and the TailorDB ERD artifact'sgeneratedTypeKindfield are unchanged.#2070
fea7726Thanks @dqn! - The remaining internal comments, JSDoc, and test titles that named adb.table()definition a type now say table (table-level hooks, table-attached plugins, table renames, and so on). Behavior is unchanged; a few internal error messages follow the rename, such asPlugin "..." does not support table-attached processing. Identifiers and persisted formats are untouched.#2089
90948e6Thanks @toiroakr! - Add a targeted hint to theRemote schema drift detectederror when every reported drift is a missing script hash — the pattern left by an environment last deployed with the pre-v2 CLI, which never wrote script hashes. The hint points atmigration sync <N>, which is already listed as one of the general resolution options. The v2 migration guide (docs/migration/v2.md) now also documents that the firsttailor deployagainst such an environment needs amigration syncfirst.#2131
cb83f59Thanks @dqn! - Cancel the internal upload timeout timer intailor staticwebsite deployonce each upload settles, so finished deploys no longer hold the process open for the remaining timeout when the CLI is used programmatically.#2087
9e0ad76Thanks @toiroakr! - Fail the build instead of silently dropping a workflow job. AcreateWorkflowJobwhosename/bodyisn't a static literal (e.g.body: someWrapper(fn)), a job's.start()call factored into a helper function outside any job body (including a helper defined in another file, even one outside the workflow service'sfilespattern), or a job called by callingexecJobFunctiondirectly instead of<job>.start()(on the ambienttailor.workflowglobal or theworkflowvalue imported from@tailor-platform/sdk/runtime) — previously passed typecheck/lint/apply but either threw at runtime ("...is rewritten at build time and is unavailable in the bundle") or silently dropped the target job from the bundle the first time it was invoked. All of these now fail the build with the offending job name and file. A workflow file with a syntax error now fails with a clear parse error instead of the same job-detection error. The runtime stub error also names the job so a leftover case is easier to diagnose.#2133
35b2997Thanks @dqn! - Report the real error when the workspace lookup intailor workspace deletefails for a reason other than the workspace not existing (e.g. network or authentication errors), instead of always claiming the workspace was not found.v2.4.0Compare Source
Minor Changes
#2054
6a753cbThanks @toiroakr! -defineAIGateway()'sauthNamespaceis now optional, defaulting to the application's own Auth service (local or external) — the common case, since an AI Gateway usually authenticates against its own app's auth. To authenticate against a different application's Auth service, reference it viaauth: { name, external: true }and letauthNamespacedefault to it, the same way a localdefineAuth()does. Oncetailor.d.tsis generated,authNamespaceis type-narrowed to your application's own auth namespace name; register additional names viadeclare module "@tailor-platform/sdk" { interface AuthNamespaceNameRegistry { ... } }only if you need to setauthNamespaceexplicitly to a namespace your ownauthdoesn't reference.#2075
bd0e397Thanks @dqn! -tailor function test-runis renamed totailor function run. The old name keeps working as a deprecated alias until v3 and prints a deprecation warning when used;tailor upgradeoffers thev3/function-test-run-renamecodemod to rewritefunction test-runinvocations across package.json scripts, shell and Windows scripts, YAML, Markdown, and JavaScript/TypeScript sources.Patch Changes
#2071
7ae89feThanks @dqn! - Fixtailor deploynever creating TailorDB types that appear in no pending migration diff and define no GraphQL permission — for example baseline tables when a migration history is replayed into a fresh workspace. Such types are now created before any migration script runs.#2050
a124fedThanks @toiroakr! - Stop dumping the request payload in API error messages. Failed requests (includingtailor querytimeouts) previously printed the full request body, which could expose credentials such as machine user access tokens embedded in query arguments to terminal and CI logs. Error messages now carry only allowlisted identifiers (resource names, namespaces, and ids) so a failing resource can still be identified.#1970
2b70c30Thanks @renovate! - fix(deps): update rolldown#2036
d8ec141Thanks @renovate! - chore(deps): update dependency esbuild@>=0.17.0 <0.28.1 to v0.28.2#2047
228e394Thanks @renovate! - fix(deps): update dependency @toiroakr/lines-db to v0.12.1#2065
5a3a0e1Thanks @toiroakr! - Raise the minimum supported Node.js version to 22.18.0 (from 22.15.0).tailor seed validatecrashed on Node 22.15.0–22.17.x withExpected a string, an ArrayBuffer, or a TypedArray to be returned for the "source" from the "load" hook but got null. This is a Node.js bug (nodejs/node#58607): requiring anode:-scheme-only builtin (node:sqlite, used internally by the seed validator) while both a synchronousresolveandloadhook are registered viamodule.registerHooks()crashes the loader on those versions. The SDK always registers both hooks, so any project on Node 22.15.0–22.17.x hit this. Node fixed it upstream in 22.18.0 (nodejs/node#58612); this release raisesengines.nodeto match, since Node 22.15.0–22.17.x never actually supportedtailor seed validate.#2068
80260b3Thanks @dqn! - The remaining CLI output and generated artifacts that named adb.table()definition a type now say table.(table)instead of(type). This also changes the machine-readabledeploy --dry-run --jsonoutput: thechanges[].labelsvalue"type"becomes"table". Update any CI that matches on the old label.A single record in table "Order" ....Duplicate plugin-generated table name "...", and the header of each generated.tailor/<plugin-id>/types/*.tsfile readsAuto-generated table by plugin. Both name the originating table (or(namespace)) under a neutralsource:/Source:key._User.schema.tscomment readsno TailorDB backing table. The nexttailor generaterewrites the file; existing files keep working as-is.#2069
d07a120Thanks @dqn! - The remaining published docs that named adb.table()definition a type now say table: the migration guide's rebaseline description, the testing guide's executor trigger description, and the create-sdktailordbtemplate README's feature list (field-level and table-levelvalidations).#2062
153a780Thanks @dqn! -tailor seednow calls adb.table()definition a table instead of a type, in its help, progress, and errors —Seeding 3 tables via Kysely batch insert. ThefillSeedDatadocumentation and thecreate-sdktemplate hint follow.Messages that list the seed targets say entities rather than tables, because
_Useris an IdP entity rather than a TailorDB table and can appear in the same list.The positional is now named
entities, so--helpshows[entities]instead of[types]. Positionals are matched by argv order, so existing invocations are unaffected.#2063
5d16dc9Thanks @dqn! - The remaining docs and editor tooltips now describe adb.table()definition as a table instead of a type. The TailorDB docs say table-level (matching the sentences around them that already say table), the file-upload runtime API documents itstypeNameparameters as table names, and the create-sdk tailordb template's test titles follow suit.#2060
c880f23Thanks @dqn! -deploy, schema loading, and the config parser now call adb.table()definition a table instead of a type, matching the vocabulary the docs anddb.table()already use. The deploy plan lists aTailorDB tablessection and names a deleted table asTailorDB table "Order", a table missing.permission()is reported asTailorDB table "User" has no .permission() configured, and relation errors readField "userID" on table "Employee".The built-in plugin descriptions say table for the same reason —
kyselyTypePluginnow reads "Generates Kysely type definitions for TailorDB tables", keeping "type definitions" for the TypeScript output it writes.Messages about a field's data type, and the TypeScript types generated into
db.ts, are unchanged.#2055
303e209Thanks @dqn! - TailorDB migration output now calls adb.table()definition a table instead of a type, matching the vocabulary the docs already use. Schema drift details readTable 'User' exists in snapshot but not in remote, a removal warning readsTable removed (all records in this table will be deleted during post-migration cleanup), and the--rename/--drop/--expand-contracthelp and errors describe their arguments as"Table.field"and"OldTable:NewTable".Only the wording changed: those flags accept exactly the values they did before, and the removal warning recorded in
diff.jsonis never read back, so migrations generated earlier keep their wording and stay valid.Messages about a field's data type are unchanged, as is the
DB types:line naming the generateddb.ts.#2061
c2be0d3Thanks @dqn! - The config types now describe adb.table()definition as a table instead of a type, so editor tooltips match the vocabularydb.table()already uses. Hoveringdb.table(...).features({ ... })documentsgqlOperationsandpublishEventsin terms of a table,aggregationandbulkUpsertgain the descriptions they were missing, and an executor's record trigger documentstypeNameas "TailorDB table name to watch for events".tailordb queryreports an unresolvable name asCould not find namespace for tables in query: ….Field-level descriptions still say type where they mean a field's data type, and the key names themselves are unchanged.
#2057
6bee645Thanks @dqn! -tailor tailordb truncatenow calls adb.table()definition a table instead of a type, in its help, prompts, and results. The positional argument is namedtables, andTruncateOptions.typesfrom@tailor-platform/sdk/cliis nowTruncateOptions.tables:Passing table names positionally is unchanged, as in
tailor tailordb truncate User Post. The argument also binds by name, so an invocation spelled--types Usernow has to read--tables User.v2.3.0Compare Source
Minor Changes
#2041
0d2d542Thanks @dqn! - Addtailor setup renovateto generate a Renovate config that extends Tailor's shared preset without overwriting existing or customized configuration.#2043
2524e2fThanks @dqn! - Allow generated GitHub workflows to fail on unsuppressed setup drift when theTAILOR_PLATFORM_FAIL_ON_DRIFTrepository variable is set totrue. Execution and configuration errors in the drift check now fail regardless of this variable. Re-run the relevanttailor setupcommand after upgrading to regenerate the workflow.#2035
a928959Thanks @dqn! - Convert a TailorDB field to a type that cannot be applied in place without writing the migrations by hand.tailor tailordb migration generatenow offers to carry the values through a temporary field and writes both migrations for you; you supply the conversion expression. Non-interactive runs opt in per field with--expand-contract "Type.field", and still fail without it.Writes that land on the field while the conversion runs are dropped rather than converted, so stop writing to it first on a live workspace. Array-cardinality changes, unique fields, and fields named by an index, relationship, permission, or type-level script remain manual.
#2033
d5801fcThanks @dqn! - Support more TailorDB field type changes as single in-place migrations:integernow converts tostringanddecimal,floattostringanddecimal,decimaltofloat, andbooleantostring. Afloatfield that is already unique keeps to the 3-step migration when converting todecimal, because rounding to the target scale can merge distinct values.#1991
dcc66a6Thanks @dqn! - Renaming a TailorDB field no longer silently drops the field's data:tailordb migration generatenow detects rename candidates and records a confirmed rename as a single breakingfield_renamedchange with a scaffolded data-copy script, instead of decomposing it into a removal plus an addition. Note: older SDK versions cannot read adiff.jsonthat contains afield_renamedchange and stop with a validation error.#2026
1346b75Thanks @dqn! - Renaming a TailorDB type no longer silently drops its records:tailordb migration generatenow detects type rename candidates and records a confirmed rename as a single breakingtype_renamedchange with a scaffolded id-preserving data-copy script, instead of decomposing it into a removal plus an addition (confirm interactively, or via--rename "OldType:NewType"/--drop "Type"in non-interactive runs). Note: older SDK versions cannot read adiff.jsonthat contains atype_renamedchange and stop with a validation error.#1933
89b5647Thanks @toiroakr! - Support wait point keys with runtime values. Write$paramNamein a key passed tocreateWaitPoints'defineand the param names become the argument of.with(), which builds the concrete key:This makes it possible for one execution to suspend on the same logical wait point more than once at a time — one approval per order line, one per approver — which previously failed because a suspension with that key was already pending. A parameterized wait point exposes only
.with(), so the unsubstituted key can never be waited on.mockWorkflow().waitPointWith(definition, params)gives typed mocks for one binding.The key has to come before the
Payload/Resulttype arguments, because TypeScript stops inferring it as a literal type once those are given explicitly, and the param names can only be read off a literal.createWaitPointtakes its type arguments first, so it cannot type$params;deployrejects such a key and points atcreateWaitPoints. Its own signature is unchanged.Wait point keys are now checked by
deployinstead of failing when the job creates the suspension. Keys must match[a-z0-9-], be 3 to 63 characters long, and start and end with[a-z0-9]. A key that never worked — a camelCasecreateWaitPointsproperty name, say — was rejected by the platform once the job ran;deploynow reports it before anything is deployed. InsidecreateWaitPoints, pass a valid key todefineto keep the property name you read at the call site:This works for a key without
$paramstoo, which is the way to keep a property name that reads well at the call site while the key stays within the platform grammar.Patch Changes
#2025
2574bddThanks @dqn! - Treatmigrate.test.tsas a migration artifact:tailordb migration rebaselinenow removes a test-only migration directory together with the history it belongs to, and aborts when one is added while its confirmation prompt is open.#2012
8826675Thanks @renovate! - chore(deps): lock file maintenance#2014
3852f3aThanks @renovate! - chore(deps): update dependency tsx to v4.23.10#2018
6d13888Thanks @renovate! - fix(deps): update dependency @toiroakr/lines-db to v0.12.0#2042
6ee6584Thanks @dqn! - Retry machine-user access token requests after transient connection timeouts.#2032
b173a0dThanks @dqn! - Workflows generated bytailor setup previewnow include atailor-drift-checkstep, so preview-only repositories audit their generated workflows in CI like branch, tag, and coordinator workflows already do. The check is warning-only and never fails the job.tailor setup checkreports targets generated with an older template as outdated; re-run the matchingtailor setupsubcommand to regenerate them.#2034
413f6cbThanks @dqn! - Name the serial-column constraint indb.insertInto(...).values({ ... })and.set({ ... })errors, where TypeScript previously truncated the explanation away#2051
a3b980dThanks @toiroakr! - Fixtailordb deploy/migratefailing withtype_hook.create.expr: must be at most 10000 characterson TailorDB types with many field hooks. The generated hook scripts are now optimized to avoid duplication.Since generated hook/validate script text changes for any type with hooks, the first
tailordb migration generateafter upgrading will report a script update for those types even without any code changes on your side — this is expected and required for the fix to take effect.#2049
b3b2aaeThanks @dqn! - TailorDB schema snapshots now keep their tables under atableskey instead oftypes, completing thedb.type()→db.table()rename. Committed migration histories keep replaying: a legacytypeskey inschema.jsonis still read and moved on load, so no migration files need editing. Migration file format version is now 5 and this SDK reads versions 1 through 5.Code that imports
SchemaSnapshotorNormalizedSchemaSnapshotfrom@tailor-platform/sdk/cliand readssnapshot.typesno longer compiles:This also applies to the snapshots returned by
compareSnapshots,createSnapshotFromLocalTypes,reconstructSnapshotFromMigrations, andcompareLocalTypesWithSnapshot.The
typeskey on parsed TailorDB service config is a different thing and is unchanged.#2044
8a5cc3fThanks @dqn! - TailorDB migration diffs now describe table-level changes astable_*instead oftype_*, completing thedb.type()→db.table()rename. Migration histories written by earlier versions keep working:type_*change kinds in committeddiff.jsonfiles are still read and normalized on load, so no migration files need editing. Migration file format version is now 3 and this SDK reads versions 1 through 3. CLI diff output reads[Table]andtable(s) addedwhere it previously read[Type]andtype(s) added.Code that imports
MigrationDiff/DiffChangefrom@tailor-platform/sdk/cliand compareschange.kindagainst a renamed spelling no longer compiles, because the discriminant literal is gone from the union:Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.