You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit c755cd1
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: .ai/skills/release/SKILL.md
+10-4Lines changed: 10 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,12 +17,18 @@ description: Checklist for releasing packages from this monorepo (code PR -> Ver
17
17
2. Run `corepack yarn verify:full` locally once before pushing.
18
18
- This catches wrapper sync drift early and still runs the deeper repo checks.
19
19
3. If `verify` / `verify:full` fails with transloadit wrapper drift, run `node scripts/prepare-transloadit.ts`, commit the tracked `packages/transloadit` updates, and re-run `corepack yarn verify:full`.
20
-
4. If you add a changeset for `@transloadit/node`, also add a similar changeset for `@transloadit/mcp-server` if it could affect its workings. The chances are, they are, since the latter is mostly a thin wrapper around the former.
20
+
4. Classify changes using [the versioning policy](../../../CONTRIBUTING.md#versioning-policy).
21
+
- API2 contract type/schema changes ship in minors, with a `Contract:` summary and a
22
+
`Type-breaking:` line per type break. Description-only syncs are patches; pre-1.0 package
23
+
exceptions follow the policy.
24
+
- Every major changeset must contain a nonempty `SDK-breaking:` line naming the SDK surface
25
+
it breaks. `yarn lint:changesets` enforces this for each file.
26
+
5. If you add a changeset for `@transloadit/node`, also add a similar changeset for `@transloadit/mcp-server` if it could affect its workings. The chances are, they are, since the latter is mostly a thin wrapper around the former.
21
27
- This repo enforces a one-way coupling: node releases should also publish a new mcp-server version (but mcp-server releases do not require node releases).
22
28
-`yarn check`/`yarn verify` will fail fast if you forget.
23
-
5. Commit + push branch
24
-
6. Open PR, wait for CI green
25
-
7. Squash-merge the PR
29
+
6. Commit + push branch
30
+
7. Open PR, wait for CI green
31
+
8. Squash-merge the PR
26
32
27
33
Notes:
28
34
1. When creating PRs with `gh pr create` from a shell, avoid unescaped backticks in the `--body` string.
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+100Lines changed: 100 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -110,6 +110,106 @@ The `packages/transloadit` folder is a generated legacy wrapper. Tracked files u
110
110
yarn pack
111
111
```
112
112
113
+
## Versioning policy
114
+
115
+
These packages mirror a live API. When API2 changes a Robot parameter, every customer gets that
116
+
change at once, whatever SDK version they installed. A major for each such change would give us
117
+
dozens of majors a year and teach users to ignore them. So we version two surfaces differently:
118
+
the **SDK surface** follows strict SemVer, and the **API contract** follows the API.
119
+
120
+
### SDK surface: strict SemVer
121
+
122
+
A breaking change to any of these requires a major:
123
+
124
+
- Package names, `exports` entry points and subpaths, module format and the supported Node.js
125
+
range. We support TypeScript releases from the last two years, like DefinitelyTyped; dropping an
126
+
older one is not breaking.
127
+
- Names of exported symbols, generated ones included. When API2 renames something, add the new
128
+
name, keep the old one as a `@deprecated` alias, and remove it in the next major.
129
+
- The `Transloadit` client: constructor options, method names and parameters, return wrappers,
130
+
error classes and their documented fields, and retry, polling and upload behavior.
131
+
- Hand-written helpers and types, such as `prepareInputFiles`, the signing helpers and
132
+
`StoredImageReceipt`, and everything in `@transloadit/utils`.
133
+
- CLI command names, hand-written flags, exit codes, credential resolution order and `--json`
134
+
output.
135
+
- The helper functions and supported Zod versions of `@transloadit/zod`.
136
+
- What the SDK, CLI and MCP server send, accept or reject at runtime for unchanged caller code,
137
+
apart from explicit API-contract schema parsing and lint validation described below.
138
+
139
+
### API contract: follows API2
140
+
141
+
Types and schemas synced from alphalib describe what the Transloadit API accepts and returns today:
142
+
Robot parameters (names, optionality, nullability, defaults, enums, limits and refinements),
143
+
Assembly Instructions, Assembly status and other response types, error-code lists, Robot
144
+
metadata, model lists, descriptions and examples, lint rules that mirror API validation, and CLI
145
+
intent flags generated from Robot parameters. Their shapes, and Zod internals such as wrapper
146
+
classes, `.shape` and parse-time defaults, follow the API rather than SemVer.
147
+
148
+
### Bump rules
149
+
150
+
| Change | Bump |
151
+
| --- | --- |
152
+
| SDK bug fix, documentation, or a contract sync that only changes descriptions or examples | patch |
153
+
| New SDK feature or export, or an additive contract sync: new Robot, optional parameter, enum value or response field | minor |
154
+
| Type-breaking contract sync: an input type accepts less, or an output type returns more (`null`, `undefined`, a wider union, a removed parse-time default) | minor, with a `Type-breaking:` line |
155
+
| Breaking change to the SDK surface | major |
156
+
| Contract sync that changes SDK runtime behavior for unchanged code, for example the CLI rejecting instructions the API still accepts | major, or a warning in a minor first |
157
+
158
+
- Stable-package patch releases never contain contract type or validation changes, or type-breaking
159
+
changes, so a `~` range only brings fixes. We do not backport fixes to older minors.
160
+
- A contract sync may still justify a major if it also breaks the SDK surface and the README quick
161
+
start or `examples/` need edits to compile. Name that SDK break in the changeset; a contract-only
162
+
type break still ships in a minor.
163
+
- SDK majors are batched: deprecate in a minor, collect removals in one tracking issue, and remove
164
+
them together in the next major.
165
+
- Pre-1.0 packages (`@transloadit/mcp-server`, `@transloadit/notify-url-relay` and the alpha
166
+
`@transloadit/viewer`) use a minor for breaking changes and a patch for everything else. Contract
167
+
syncs are patches there unless their tools, CLI or exports change.
168
+
169
+
### Writing contract changesets
170
+
171
+
- Bump `@transloadit/node`, `transloadit`, `@transloadit/types` and `@transloadit/zod` by `minor`,
172
+
or by `patch` for description-only syncs. Add `@transloadit/mcp-server` as described under
173
+
Releasing.
174
+
- Start the summary with `Contract:` and link the API2 pull requests being synced.
175
+
- Add one `Type-breaking:` bullet per type-breaking change: what changed, who is affected (authors
176
+
of Assembly Instructions, or readers of parsed output and API responses) and how to adapt.
177
+
- A contract-only sync is never `major`. Every `major` changeset contains an `SDK-breaking:` line
178
+
that names the SDK surface it breaks.
179
+
180
+
```md
181
+
---
182
+
'@transloadit/node': minor
183
+
'transloadit': minor
184
+
'@transloadit/types': minor
185
+
'@transloadit/zod': minor
186
+
'@transloadit/mcp-server': patch
187
+
---
188
+
189
+
Contract: sync Robot schemas from API2 (transloadit/api2#9897, transloadit/api2#9938).
190
+
191
+
- Type-breaking: `/video/subtitle` no longer fills in `font`, `font_size` and `bold` while
`schema.parse()`) can be `undefined`; the API still applies Arial, 16 and `false`, or the
194
+
`social` style’s defaults. Instruction input types are unchanged.
195
+
- Type-breaking: `/video/thumbs` accepts `null` for `offsets`, `width` and `height`, so parsed
196
+
values can be `null`. Treat `null` like an omitted value.
197
+
```
198
+
199
+
### What we tell consumers
200
+
201
+
Repeat this in the package READMEs:
202
+
203
+
- Commit your lockfile and type-check dependency update PRs. Type-breaking contract changes show
204
+
up there, not in production.
205
+
- For the stable SDK packages, use `~` ranges for stable types: patch releases never change contract
206
+
types. Use `^` to follow the API as it evolves. Pre-1.0 packages follow the exceptions above.
207
+
- Type the instructions you write with the input types, for example
208
+
`const params = { steps } satisfies CreateAssemblyParams`. API changes usually widen these.
209
+
- Narrow fields from responses and parsed output before using them (`null`, `undefined`, unknown
210
+
strings).
211
+
- Do not depend on Zod internals such as wrapper classes, `.shape` or parse-time defaults.
212
+
113
213
## Releasing
114
214
115
215
Only maintainers can make releases. Releases to [npm](https://www.npmjs.com) are automated using GitHub Actions and Changesets (including the legacy `transloadit` package).
0 commit comments