monday-cli 0.3.0 → 0.5.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 (198) hide show
  1. package/CHANGELOG.md +719 -0
  2. package/README.md +208 -36
  3. package/dist/api/assets.d.ts +326 -0
  4. package/dist/api/assets.d.ts.map +1 -0
  5. package/dist/api/assets.js +519 -0
  6. package/dist/api/assets.js.map +1 -0
  7. package/dist/api/column-types.d.ts +13 -7
  8. package/dist/api/column-types.d.ts.map +1 -1
  9. package/dist/api/column-types.js +7 -3
  10. package/dist/api/column-types.js.map +1 -1
  11. package/dist/api/column-values.d.ts +8 -1
  12. package/dist/api/column-values.d.ts.map +1 -1
  13. package/dist/api/column-values.js +16 -6
  14. package/dist/api/column-values.js.map +1 -1
  15. package/dist/api/documents.d.ts +1652 -0
  16. package/dist/api/documents.d.ts.map +1 -0
  17. package/dist/api/documents.js +2411 -0
  18. package/dist/api/documents.js.map +1 -0
  19. package/dist/api/item-watch.d.ts +263 -0
  20. package/dist/api/item-watch.d.ts.map +1 -0
  21. package/dist/api/item-watch.js +709 -0
  22. package/dist/api/item-watch.js.map +1 -0
  23. package/dist/api/multipart-transport.d.ts +223 -0
  24. package/dist/api/multipart-transport.d.ts.map +1 -0
  25. package/dist/api/multipart-transport.js +274 -0
  26. package/dist/api/multipart-transport.js.map +1 -0
  27. package/dist/api/parallel-dispatch.d.ts +155 -0
  28. package/dist/api/parallel-dispatch.d.ts.map +1 -0
  29. package/dist/api/parallel-dispatch.js +243 -0
  30. package/dist/api/parallel-dispatch.js.map +1 -0
  31. package/dist/api/partial-success-bulk.d.ts +118 -60
  32. package/dist/api/partial-success-bulk.d.ts.map +1 -1
  33. package/dist/api/partial-success-bulk.js +137 -79
  34. package/dist/api/partial-success-bulk.js.map +1 -1
  35. package/dist/api/partial-success-mutation.d.ts +13 -1
  36. package/dist/api/partial-success-mutation.d.ts.map +1 -1
  37. package/dist/api/partial-success-mutation.js +5 -1
  38. package/dist/api/partial-success-mutation.js.map +1 -1
  39. package/dist/api/raw-write.d.ts +13 -4
  40. package/dist/api/raw-write.d.ts.map +1 -1
  41. package/dist/api/raw-write.js +22 -11
  42. package/dist/api/raw-write.js.map +1 -1
  43. package/dist/api/resolve-client.d.ts +11 -0
  44. package/dist/api/resolve-client.d.ts.map +1 -1
  45. package/dist/api/resolve-client.js +9 -1
  46. package/dist/api/resolve-client.js.map +1 -1
  47. package/dist/api/teams.d.ts +657 -0
  48. package/dist/api/teams.d.ts.map +1 -0
  49. package/dist/api/teams.js +880 -0
  50. package/dist/api/teams.js.map +1 -0
  51. package/dist/cli/run.d.ts +20 -0
  52. package/dist/cli/run.d.ts.map +1 -1
  53. package/dist/cli/run.js +1 -0
  54. package/dist/cli/run.js.map +1 -1
  55. package/dist/commands/board/column-create.d.ts +6 -5
  56. package/dist/commands/board/column-create.d.ts.map +1 -1
  57. package/dist/commands/board/column-create.js +9 -6
  58. package/dist/commands/board/column-create.js.map +1 -1
  59. package/dist/commands/completion.d.ts +188 -0
  60. package/dist/commands/completion.d.ts.map +1 -0
  61. package/dist/commands/completion.js +418 -0
  62. package/dist/commands/completion.js.map +1 -0
  63. package/dist/commands/doc/append-markdown.d.ts +117 -0
  64. package/dist/commands/doc/append-markdown.d.ts.map +1 -0
  65. package/dist/commands/doc/append-markdown.js +253 -0
  66. package/dist/commands/doc/append-markdown.js.map +1 -0
  67. package/dist/commands/doc/block-create.d.ts +114 -0
  68. package/dist/commands/doc/block-create.d.ts.map +1 -0
  69. package/dist/commands/doc/block-create.js +206 -0
  70. package/dist/commands/doc/block-create.js.map +1 -0
  71. package/dist/commands/doc/block-delete.d.ts +72 -0
  72. package/dist/commands/doc/block-delete.d.ts.map +1 -0
  73. package/dist/commands/doc/block-delete.js +161 -0
  74. package/dist/commands/doc/block-delete.js.map +1 -0
  75. package/dist/commands/doc/block-update.d.ts +75 -0
  76. package/dist/commands/doc/block-update.d.ts.map +1 -0
  77. package/dist/commands/doc/block-update.js +162 -0
  78. package/dist/commands/doc/block-update.js.map +1 -0
  79. package/dist/commands/doc/create-in-workspace.d.ts +76 -0
  80. package/dist/commands/doc/create-in-workspace.d.ts.map +1 -0
  81. package/dist/commands/doc/create-in-workspace.js +164 -0
  82. package/dist/commands/doc/create-in-workspace.js.map +1 -0
  83. package/dist/commands/doc/create-on-column.d.ts +71 -0
  84. package/dist/commands/doc/create-on-column.d.ts.map +1 -0
  85. package/dist/commands/doc/create-on-column.js +146 -0
  86. package/dist/commands/doc/create-on-column.js.map +1 -0
  87. package/dist/commands/doc/delete.d.ts +68 -0
  88. package/dist/commands/doc/delete.d.ts.map +1 -0
  89. package/dist/commands/doc/delete.js +146 -0
  90. package/dist/commands/doc/delete.js.map +1 -0
  91. package/dist/commands/doc/duplicate.d.ts +101 -0
  92. package/dist/commands/doc/duplicate.d.ts.map +1 -0
  93. package/dist/commands/doc/duplicate.js +191 -0
  94. package/dist/commands/doc/duplicate.js.map +1 -0
  95. package/dist/commands/doc/get.d.ts +46 -0
  96. package/dist/commands/doc/get.d.ts.map +1 -0
  97. package/dist/commands/doc/get.js +95 -0
  98. package/dist/commands/doc/get.js.map +1 -0
  99. package/dist/commands/doc/import-html.d.ts +125 -0
  100. package/dist/commands/doc/import-html.d.ts.map +1 -0
  101. package/dist/commands/doc/import-html.js +273 -0
  102. package/dist/commands/doc/import-html.js.map +1 -0
  103. package/dist/commands/doc/list.d.ts +86 -0
  104. package/dist/commands/doc/list.d.ts.map +1 -0
  105. package/dist/commands/doc/list.js +217 -0
  106. package/dist/commands/doc/list.js.map +1 -0
  107. package/dist/commands/doc/rename.d.ts +60 -0
  108. package/dist/commands/doc/rename.d.ts.map +1 -0
  109. package/dist/commands/doc/rename.js +135 -0
  110. package/dist/commands/doc/rename.js.map +1 -0
  111. package/dist/commands/index.d.ts.map +1 -1
  112. package/dist/commands/index.js +162 -0
  113. package/dist/commands/index.js.map +1 -1
  114. package/dist/commands/item/create.js +2 -2
  115. package/dist/commands/item/update.d.ts +1 -0
  116. package/dist/commands/item/update.d.ts.map +1 -1
  117. package/dist/commands/item/update.js +61 -0
  118. package/dist/commands/item/update.js.map +1 -1
  119. package/dist/commands/item/upload.d.ts +108 -0
  120. package/dist/commands/item/upload.d.ts.map +1 -0
  121. package/dist/commands/item/upload.js +370 -0
  122. package/dist/commands/item/upload.js.map +1 -0
  123. package/dist/commands/item/watch.d.ts +90 -0
  124. package/dist/commands/item/watch.d.ts.map +1 -0
  125. package/dist/commands/item/watch.js +342 -0
  126. package/dist/commands/item/watch.js.map +1 -0
  127. package/dist/commands/update/create.d.ts.map +1 -1
  128. package/dist/commands/update/create.js +6 -4
  129. package/dist/commands/update/create.js.map +1 -1
  130. package/dist/commands/update/edit.d.ts +4 -2
  131. package/dist/commands/update/edit.d.ts.map +1 -1
  132. package/dist/commands/update/edit.js +10 -6
  133. package/dist/commands/update/edit.js.map +1 -1
  134. package/dist/commands/update/reply.d.ts +4 -2
  135. package/dist/commands/update/reply.d.ts.map +1 -1
  136. package/dist/commands/update/reply.js +10 -6
  137. package/dist/commands/update/reply.js.map +1 -1
  138. package/dist/commands/update/upload.d.ts +69 -0
  139. package/dist/commands/update/upload.d.ts.map +1 -0
  140. package/dist/commands/update/upload.js +235 -0
  141. package/dist/commands/update/upload.js.map +1 -0
  142. package/dist/commands/user/_team-membership.d.ts +10 -0
  143. package/dist/commands/user/_team-membership.d.ts.map +1 -0
  144. package/dist/commands/user/_team-membership.js +88 -0
  145. package/dist/commands/user/_team-membership.js.map +1 -0
  146. package/dist/commands/user/team-add-members.d.ts +81 -0
  147. package/dist/commands/user/team-add-members.d.ts.map +1 -0
  148. package/dist/commands/user/team-add-members.js +186 -0
  149. package/dist/commands/user/team-add-members.js.map +1 -0
  150. package/dist/commands/user/team-create.d.ts +82 -0
  151. package/dist/commands/user/team-create.d.ts.map +1 -0
  152. package/dist/commands/user/team-create.js +206 -0
  153. package/dist/commands/user/team-create.js.map +1 -0
  154. package/dist/commands/user/team-delete.d.ts +56 -0
  155. package/dist/commands/user/team-delete.d.ts.map +1 -0
  156. package/dist/commands/user/team-delete.js +137 -0
  157. package/dist/commands/user/team-delete.js.map +1 -0
  158. package/dist/commands/user/team-get.d.ts +41 -0
  159. package/dist/commands/user/team-get.d.ts.map +1 -0
  160. package/dist/commands/user/team-get.js +87 -0
  161. package/dist/commands/user/team-get.js.map +1 -0
  162. package/dist/commands/user/team-list.d.ts +39 -0
  163. package/dist/commands/user/team-list.d.ts.map +1 -0
  164. package/dist/commands/user/team-list.js +90 -0
  165. package/dist/commands/user/team-list.js.map +1 -0
  166. package/dist/commands/user/team-remove-members.d.ts +71 -0
  167. package/dist/commands/user/team-remove-members.d.ts.map +1 -0
  168. package/dist/commands/user/team-remove-members.js +176 -0
  169. package/dist/commands/user/team-remove-members.js.map +1 -0
  170. package/dist/types/ids.d.ts +8 -0
  171. package/dist/types/ids.d.ts.map +1 -1
  172. package/dist/types/ids.js +53 -5
  173. package/dist/types/ids.js.map +1 -1
  174. package/dist/utils/mime.d.ts +24 -0
  175. package/dist/utils/mime.d.ts.map +1 -0
  176. package/dist/utils/mime.js +64 -0
  177. package/dist/utils/mime.js.map +1 -0
  178. package/dist/utils/output/envelope.d.ts +30 -0
  179. package/dist/utils/output/envelope.d.ts.map +1 -1
  180. package/dist/utils/output/envelope.js +26 -0
  181. package/dist/utils/output/envelope.js.map +1 -1
  182. package/dist/utils/output/ndjson.d.ts +25 -0
  183. package/dist/utils/output/ndjson.d.ts.map +1 -1
  184. package/dist/utils/output/ndjson.js +12 -0
  185. package/dist/utils/output/ndjson.js.map +1 -1
  186. package/dist/utils/parse-brand-list.d.ts +95 -0
  187. package/dist/utils/parse-brand-list.d.ts.map +1 -0
  188. package/dist/utils/parse-brand-list.js +96 -0
  189. package/dist/utils/parse-brand-list.js.map +1 -0
  190. package/dist/utils/signal.d.ts +42 -0
  191. package/dist/utils/signal.d.ts.map +1 -0
  192. package/dist/utils/signal.js +45 -0
  193. package/dist/utils/signal.js.map +1 -0
  194. package/dist/utils/source-content.d.ts +93 -0
  195. package/dist/utils/source-content.d.ts.map +1 -0
  196. package/dist/utils/source-content.js +120 -0
  197. package/dist/utils/source-content.js.map +1 -0
  198. package/package.json +1 -1
@@ -0,0 +1,519 @@
1
+ /**
2
+ * Asset upload surface for the v0.4-M31 `monday item upload` +
3
+ * `monday update upload` verbs (`cli-design.md` §2.2 + §4.3 + §6.4
4
+ * + §13 v0.4 entry; `v0.4-plan.md` §3 M31).
5
+ *
6
+ * **Wire surface (empirical probe 2026-05-13, API `2026-01`).** Two
7
+ * Monday GraphQL multipart mutations land here:
8
+ *
9
+ * - `Mutation.add_file_to_column(column_id: String!, file: File!,
10
+ * item_id: ID!) → Asset` — attaches a file to a `file`-typed
11
+ * column on a specific item. Note **`column_id` is `String!`
12
+ * not `ID!`** (the SDK's column-id surface is consistently
13
+ * `String!` because column IDs are user-defined-looking tokens
14
+ * like `'files'` / `'attachments_3'` rather than numeric).
15
+ * - `Mutation.add_file_to_update(file: File!, update_id: ID!) →
16
+ * Asset` — attaches a file to an Update (comment) record. Item
17
+ * ID is implicit (the update's parent item).
18
+ *
19
+ * Both mutations cross the wire via `multipart/form-data` per the
20
+ * standard GraphQL multipart-request specification (jaydenseric).
21
+ * The `File` scalar is Monday's own (NOT the spec-standard `Upload`);
22
+ * the multipart envelope is otherwise spec-compliant — `operations`
23
+ * + `map` JSON parts + the file part keyed by index `0`.
24
+ *
25
+ * **Asset object — 10 fields.** `id` (ID, non-null), `name` (String,
26
+ * non-null — the multipart `filename` parameter), `url` (String,
27
+ * non-null — direct download), `public_url` (String, non-null —
28
+ * sharable), `file_extension` (String, non-null), `file_size` (Int,
29
+ * non-null — bytes), `created_at` (Date, nullable), `uploaded_by`
30
+ * (User, non-null — the token's owner; projected to the slim
31
+ * `{id, name}` shape for envelope compactness), `original_geometry`
32
+ * (String, nullable — image dimensions like `'1920x1080'`),
33
+ * `url_thumbnail` (String, nullable — image thumbnails only).
34
+ *
35
+ * **R-NEW-41 3rd consumer fires here.** Asset upload is the third
36
+ * site (after M27 `Webhook.config` JSON/String asymmetry + M27
37
+ * `NotificationTargetType` collapse) where the wire-vs-CLI semantics
38
+ * carry a documented asymmetry. This module's transport choice
39
+ * (sibling multipart module, NOT extension of `transport.ts`) is
40
+ * itself the load-bearing asymmetry shape — the JSON envelope's
41
+ * `body: JSON.stringify(...)` invariant doesn't compose with
42
+ * multipart/form-data's `FormData`-driven boundary parameter, so
43
+ * the two transports live in sibling modules with parallel
44
+ * interfaces. See `docs/architecture.md` "Wire-vs-CLI semantics
45
+ * documentation conventions" for the canonical writeup.
46
+ *
47
+ * **No new ERROR_CODES (29 stays).** Asset-upload failures route
48
+ * through the existing codes:
49
+ *
50
+ * - `usage_error` — file path doesn't exist / not readable
51
+ * (`details.reason: 'file_not_readable'`); file is empty
52
+ * (`details.reason: 'file_empty'`); upload exceeded Monday's
53
+ * per-file size limit (Monday surfaces this server-side;
54
+ * `details.reason: 'file_too_large'` rewrap).
55
+ * - `unsupported_column_type` — `--column <col>` resolves to a
56
+ * non-`file` column type. Hint points back at the §5.3 writer
57
+ * surface (Monday writes files via `add_file_to_column` for
58
+ * `file` columns only; other column types route via
59
+ * `change_column_value`).
60
+ * - `not_found` — item / update / column doesn't exist or isn't
61
+ * visible to the token.
62
+ * - `validation_failed` — Monday-side rejection of the upload
63
+ * payload (malformed filename, server-side virus scan flag,
64
+ * etc.).
65
+ * - `forbidden` / `unauthorized` — token lacks asset-write scope.
66
+ *
67
+ * Monday's per-file size cap is plan-tier-dependent and NOT exposed
68
+ * via the schema (verified at M31 pre-flight probe — `Plan` +
69
+ * `Account` carry no file-quota fields). The CLI does NOT pre-check
70
+ * file size against a hardcoded ceiling; Monday's runtime rejection
71
+ * (typically `FILE_SIZE_LIMIT_EXCEEDED` or a generic 413) is rewrapped
72
+ * as `usage_error` with `details.reason: 'file_too_large'` +
73
+ * `details.file_size_bytes` (the local `fs.stat()` measurement
74
+ * captured at upload time — Monday's wire rejection may not surface
75
+ * a size field, but the CLI already has the local size from the
76
+ * read leg and threads it for a stable agent-keyed envelope).
77
+ *
78
+ * **Idempotency: NO.** Each successful upload mints a new Asset
79
+ * with a new ID — re-running `item upload` with the same args
80
+ * uploads the file a second time. Agents needing register-once
81
+ * semantics dedupe on the CLI side (e.g., read `Item.assets` first
82
+ * and skip the upload if a matching `Asset.name` exists).
83
+ *
84
+ * **Status: runtime body shipped at v0.4-M31 IMPL.** Both fetchers
85
+ * dispatch via `inputs.multipart.request(...)` wrapped in
86
+ * `withRetry(...)` per cli-design §2.5; the response-parse boundary
87
+ * uses `mapResponse` (mirroring `MondayClient.raw`'s discipline) +
88
+ * `assertResponseFieldPresent` for the schema-drift / null-payload
89
+ * distinction + `assetSchema.safeParse(...)` via `unwrapOrThrow`
90
+ * for the per-field shape. Server-side size-cap rewrap fires at
91
+ * the error-mapping layer below.
92
+ */
93
+ import { z } from 'zod';
94
+ import { ApiError, MondayCliError } from '../utils/errors.js';
95
+ import { unwrapOrThrow } from '../utils/parse-boundary.js';
96
+ import { parseComplexity } from './complexity.js';
97
+ import { mapResponse, wrapTransportError } from './errors.js';
98
+ import { withRetry } from './retry.js';
99
+ import { assertResponseFieldPresent } from './response-root.js';
100
+ /**
101
+ * Slim projection of Monday's `User` for the `Asset.uploaded_by`
102
+ * slot. Monday's full User type is ~30 fields; the envelope echoes
103
+ * only `id` + `name` (matching the M19 `User`-projection cadence
104
+ * elsewhere in the CLI — `account_tags`, `board describe`'s
105
+ * subscribers, etc.). Future verbs that need wider User detail
106
+ * (`user get <uid>`) read against the full type.
107
+ */
108
+ export const uploadedBySchema = z
109
+ .object({
110
+ id: z.string().min(1),
111
+ name: z.string().min(1),
112
+ })
113
+ .strict();
114
+ /**
115
+ * Asset read-projection shape — surfaces Monday's full 10-field
116
+ * `Asset` object (per `scripts/probe/m31-asset-upload.ts` 2026-05-13,
117
+ * API `2026-01`). The output envelope echoes this verbatim so an
118
+ * agent reading the upload result has every field a follow-up
119
+ * `Query.assets(ids:)` read would surface, plus the inputs the CLI
120
+ * sent (echoed by the caller, not this module).
121
+ *
122
+ * `original_geometry` + `url_thumbnail` are image-only; nullable
123
+ * for non-image uploads. `created_at` is nullable in Monday's
124
+ * schema even though every successful upload sets it (the
125
+ * nullability is preserved for fidelity against the introspected
126
+ * type).
127
+ */
128
+ export const assetSchema = z
129
+ .object({
130
+ id: z.string().min(1),
131
+ name: z.string().min(1),
132
+ url: z.string().min(1),
133
+ public_url: z.string().min(1),
134
+ file_extension: z.string(),
135
+ file_size: z.number().int().nonnegative(),
136
+ created_at: z.string().nullable(),
137
+ uploaded_by: uploadedBySchema,
138
+ original_geometry: z.string().nullable(),
139
+ url_thumbnail: z.string().nullable(),
140
+ })
141
+ .strict();
142
+ /**
143
+ * Output shape for `monday item upload <iid> --column <col> <file>`.
144
+ * Echoes the wire `Asset` record plus the agent-supplied inputs
145
+ * (`item_id`, `column_id`, `filename`, `file_size_bytes`) so one
146
+ * envelope read carries the full upload context.
147
+ *
148
+ * `file_size_bytes` is the CLI-measured size at upload time (from
149
+ * the local file's `fs.stat()`); `asset.file_size` is Monday's
150
+ * server-stored size (usually identical to `file_size_bytes` but
151
+ * preserved separately for asymmetric-storage-encoding fidelity).
152
+ *
153
+ * `asset` is the canonical wire record; future field additions
154
+ * land additively per the §6.1 envelope evolution rules.
155
+ */
156
+ export const itemUploadOutputSchema = z
157
+ .object({
158
+ operation: z.literal('add_file_to_column'),
159
+ item_id: z.string().min(1),
160
+ column_id: z.string().min(1),
161
+ filename: z.string().min(1),
162
+ file_size_bytes: z.number().int().nonnegative(),
163
+ asset: assetSchema,
164
+ })
165
+ .strict();
166
+ /**
167
+ * Output shape for `monday update upload <uid> <file>`. Same general
168
+ * shape as `itemUploadOutputSchema` but carries `update_id` instead
169
+ * of `item_id` + `column_id` (an Update record is the target;
170
+ * Monday's `Update.assets` collection grows by one on success).
171
+ */
172
+ export const updateUploadOutputSchema = z
173
+ .object({
174
+ operation: z.literal('add_file_to_update'),
175
+ update_id: z.string().min(1),
176
+ filename: z.string().min(1),
177
+ file_size_bytes: z.number().int().nonnegative(),
178
+ asset: assetSchema,
179
+ })
180
+ .strict();
181
+ /**
182
+ * Mutation document for `add_file_to_column`. Operation name is
183
+ * pinned literally to `AddFileToColumn` and matches the wire
184
+ * `operationName` payload (R-NEW-37 W2 audit-point — caller-
185
+ * overridable operationName slots were closed at M27 IMPL round-1
186
+ * P2-1).
187
+ *
188
+ * `$file: File!` — Monday's own scalar (NOT the spec-standard
189
+ * `Upload!`); the multipart wire dispatcher (`assets.ts`'s caller
190
+ * via `MultipartTransport`) populates this slot via the spec-
191
+ * compliant `map` JSON pointing the file part at `variables.file`.
192
+ *
193
+ * Returns the full 10-field `Asset` selection so the output
194
+ * envelope captures Monday's complete view of the upload in one
195
+ * round-trip (no follow-up `Query.assets(ids:)` re-read needed).
196
+ */
197
+ export const ADD_FILE_TO_COLUMN_MUTATION = `
198
+ mutation AddFileToColumn(
199
+ $itemId: ID!,
200
+ $columnId: String!,
201
+ $file: File!
202
+ ) {
203
+ add_file_to_column(
204
+ item_id: $itemId,
205
+ column_id: $columnId,
206
+ file: $file
207
+ ) {
208
+ id
209
+ name
210
+ url
211
+ public_url
212
+ file_extension
213
+ file_size
214
+ created_at
215
+ uploaded_by { id name }
216
+ original_geometry
217
+ url_thumbnail
218
+ }
219
+ }
220
+ `;
221
+ /**
222
+ * Mutation document for `add_file_to_update`. Operation name pinned
223
+ * to `AddFileToUpdate` (R-NEW-37 W2). No `column_id` — Updates
224
+ * carry attachments directly via `Update.assets`.
225
+ */
226
+ export const ADD_FILE_TO_UPDATE_MUTATION = `
227
+ mutation AddFileToUpdate(
228
+ $updateId: ID!,
229
+ $file: File!
230
+ ) {
231
+ add_file_to_update(
232
+ update_id: $updateId,
233
+ file: $file
234
+ ) {
235
+ id
236
+ name
237
+ url
238
+ public_url
239
+ file_extension
240
+ file_size
241
+ created_at
242
+ uploaded_by { id name }
243
+ original_geometry
244
+ url_thumbnail
245
+ }
246
+ }
247
+ `;
248
+ /**
249
+ * Re-wraps Monday's server-side file-size rejection as the
250
+ * agent-stable `usage_error` shape (D3 closure). Monday surfaces the
251
+ * cap a couple of ways depending on the error path — common signals:
252
+ *
253
+ * - `extensions.code: 'FILE_SIZE_LIMIT_EXCEEDED'` on a 200 GraphQL
254
+ * errors[] payload (the most common shape — Monday's GraphQL
255
+ * server stays on 200 even for input-validation rejections).
256
+ * - `extensions.error_code: 'FILE_SIZE_LIMIT_EXCEEDED'` (older API
257
+ * shape preserved across versions).
258
+ * - HTTP 413 with no GraphQL body (rare; intermediated by an LB
259
+ * between us and Monday's server).
260
+ * - The bare error message contains "file size" / "file too large"
261
+ * / "exceeds the limit" (string-fallback for proxy-mediated paths
262
+ * that strip extensions).
263
+ *
264
+ * The matcher reads `mapResponse`'s typed error rather than the raw
265
+ * body — `mapResponse` already extracted the GraphQL extensions +
266
+ * Monday code into the `validation_failed` ApiError; we then check
267
+ * the same signals here to upgrade the rewrap. `details.file_size_
268
+ * bytes` is the local `fs.stat()` measurement the caller threaded
269
+ * (D3 — Monday's wire rejection may not surface a size, but the CLI
270
+ * has the local size from the read leg and threads a stable
271
+ * envelope).
272
+ */
273
+ const isFileTooLargeRejection = (err) => {
274
+ if (err.httpStatus === 413)
275
+ return true;
276
+ const monday = err.mondayCode?.toUpperCase() ?? '';
277
+ if (monday === 'FILE_SIZE_LIMIT_EXCEEDED')
278
+ return true;
279
+ // Fallback to the message vocabulary — Monday occasionally returns
280
+ // a generic `validation_failed` with the size language inline.
281
+ // Match the broader `'file size'` substring (covers "file size
282
+ // limit exceeded" + "file size exceeds maximum" + similar
283
+ // proxy-rephrased variants), plus `'file too large'` and
284
+ // `'exceeds the limit'` for vocabulary that doesn't include
285
+ // "size" explicitly.
286
+ const msg = err.message.toLowerCase();
287
+ if (msg.includes('file size') ||
288
+ msg.includes('file too large') ||
289
+ msg.includes('exceeds the limit')) {
290
+ return true;
291
+ }
292
+ return false;
293
+ };
294
+ const rewrapAsFileTooLarge = ({ err, fileSizeBytes, filename, }) => new ApiError('usage_error', `Monday rejected the upload — file ${JSON.stringify(filename)} ` +
295
+ `exceeds the per-file size limit (uploaded ${String(fileSizeBytes)} bytes).`, {
296
+ cause: err,
297
+ details: {
298
+ reason: 'file_too_large',
299
+ file_size_bytes: fileSizeBytes,
300
+ filename,
301
+ hint: "Monday's per-file cap is plan-tier-dependent (typically 500 MB at " +
302
+ 'standard tiers, larger at enterprise); contact Monday support to ' +
303
+ "confirm your account's exact ceiling.",
304
+ },
305
+ });
306
+ /**
307
+ * Single multipart round-trip with the standard parse-boundary
308
+ * (mirrors `MondayClient.raw`'s shape but for the multipart seam):
309
+ *
310
+ * 1. `multipart.request(...)` → raw transport response.
311
+ * 2. `mapResponse<unknown>` → tagged `MapResult` ({ok, data} or
312
+ * {ok, error}); non-ok throws the typed ApiError directly so
313
+ * `withRetry` can inspect `error.retryable` + `retry_after_
314
+ * seconds` upstream.
315
+ * 3. `parseComplexity` projects any `complexity` block Monday
316
+ * surfaces (asset-upload mutations don't return one today, but
317
+ * keeping the same shape as `MondayClient.raw` means future
318
+ * Monday API revisions surface complexity uniformly).
319
+ *
320
+ * Wrapped with `wrapTransportError` so a non-ApiError throw (a bug
321
+ * in the fixture transport, a future SDK shim) becomes
322
+ * `internal_error` rather than escaping unmapped.
323
+ */
324
+ const dispatchMultipartOnce = async (inputs) => {
325
+ try {
326
+ const response = await inputs.multipart.request({
327
+ query: inputs.query,
328
+ variables: inputs.variables,
329
+ operationName: inputs.operationName,
330
+ fileVariableName: inputs.fileVariableName,
331
+ file: inputs.file,
332
+ filename: inputs.filename,
333
+ signal: inputs.signal,
334
+ });
335
+ const mapped = mapResponse({
336
+ status: response.status,
337
+ headers: response.headers,
338
+ body: response.body,
339
+ });
340
+ if (!mapped.ok) {
341
+ throw mapped.error;
342
+ }
343
+ const complexity = parseComplexity(response.body);
344
+ return { data: mapped.data, complexity };
345
+ }
346
+ catch (err) {
347
+ throw wrapTransportError(err);
348
+ }
349
+ };
350
+ /**
351
+ * Fires Monday's `add_file_to_column` mutation via the multipart
352
+ * transport (operationName `AddFileToColumn`, pinned literally per
353
+ * R-NEW-37 W2 — NOT caller-overridable). Builds the operations
354
+ * payload with the `file: null` placeholder per the GraphQL
355
+ * multipart-request spec, dispatches through `inputs.multipart` +
356
+ * `withRetry(...)`, parses the response — null `add_file_to_column`
357
+ * → `not_found` with `details.{item_id, column_id}`; non-Asset
358
+ * shape → `internal_error` via `assetSchema.safeParse + unwrapOr
359
+ * Throw`. Server-side size rejections rewrap as `usage_error` with
360
+ * `details.reason: 'file_too_large'` + `details.file_size_bytes`
361
+ * from the caller-supplied local `fs.stat()` measurement (D3).
362
+ *
363
+ * Not idempotent — re-running mints a new `Asset` ID.
364
+ */
365
+ export const addFileToColumn = async (inputs) => {
366
+ // Spec-compliant operations payload: the file variable's value is
367
+ // `null` (mandatory placeholder); the multipart `map` JSON in the
368
+ // transport pins the file part at `variables.file`.
369
+ const variables = {
370
+ itemId: inputs.itemId,
371
+ columnId: inputs.columnId,
372
+ file: null,
373
+ };
374
+ // Rewrap server-side size rejections INSIDE the retry thunk so the
375
+ // resulting `usage_error` (non-retryable per CODE_RETRYABLE_DEFAULT)
376
+ // short-circuits `withRetry` immediately. If the rewrap lived on
377
+ // the outer `await withRetry(...)` catch instead, a non-JSON HTTP
378
+ // 413 (proxy-served HTML body) would surface as `network_error`
379
+ // (retryable) and the loop would re-upload the same oversized file
380
+ // up to `--retry` times before the rewrap finally fired (round-1
381
+ // P2-1 fix).
382
+ const result = await withRetry(async () => {
383
+ try {
384
+ return await dispatchMultipartOnce({
385
+ multipart: inputs.multipart,
386
+ query: ADD_FILE_TO_COLUMN_MUTATION,
387
+ variables,
388
+ operationName: 'AddFileToColumn',
389
+ fileVariableName: 'file',
390
+ file: inputs.file,
391
+ filename: inputs.filename,
392
+ signal: inputs.signal,
393
+ });
394
+ }
395
+ catch (err) {
396
+ if (err instanceof MondayCliError && isFileTooLargeRejection(err)) {
397
+ throw rewrapAsFileTooLarge({
398
+ err,
399
+ fileSizeBytes: inputs.file.size,
400
+ filename: inputs.filename,
401
+ });
402
+ }
403
+ throw err;
404
+ }
405
+ }, {
406
+ retries: inputs.retries,
407
+ signal: inputs.signal,
408
+ });
409
+ // Reference `inputs.client` so future complexity-passthrough work
410
+ // can inspect verbose mode without changing the call signature.
411
+ // Today the multipart wire bypasses the JSON client entirely; the
412
+ // slot stays for symmetry with the JSON fetchers' shape.
413
+ void inputs.client;
414
+ const wireData = result.value.data;
415
+ assertResponseFieldPresent({
416
+ data: wireData,
417
+ key: 'add_file_to_column',
418
+ operationLabel: 'AddFileToColumn',
419
+ details: { item_id: inputs.itemId, column_id: inputs.columnId },
420
+ nullHandling: 'caller_handles',
421
+ });
422
+ // After `assertResponseFieldPresent`, `wireData` is structurally a
423
+ // record with the `add_file_to_column` key present (might be null).
424
+ const root = wireData.add_file_to_column;
425
+ if (root === null || root === undefined) {
426
+ throw new ApiError('not_found', `Item ${inputs.itemId} or column ${JSON.stringify(inputs.columnId)} ` +
427
+ `does not exist on a board the token has write access to.`, {
428
+ details: {
429
+ item_id: inputs.itemId,
430
+ column_id: inputs.columnId,
431
+ },
432
+ });
433
+ }
434
+ const asset = unwrapOrThrow(assetSchema.safeParse(root), {
435
+ context: 'Monday returned a malformed Asset shape from add_file_to_column',
436
+ details: {
437
+ item_id: inputs.itemId,
438
+ column_id: inputs.columnId,
439
+ filename: inputs.filename,
440
+ },
441
+ });
442
+ return {
443
+ asset,
444
+ source: 'live',
445
+ cacheAgeSeconds: null,
446
+ complexity: result.value.complexity,
447
+ };
448
+ };
449
+ /**
450
+ * Fires Monday's `add_file_to_update` mutation via the multipart
451
+ * transport (operationName `AddFileToUpdate`, pinned literally per
452
+ * R-NEW-37 W2). Mirrors {@link addFileToColumn}'s shape minus the
453
+ * `column_id` slot — Updates carry attachments via `Update.assets`
454
+ * directly. Same response-parse boundary, same `file_too_large`
455
+ * rewrap, same idempotency caveat (re-running mints a new Asset).
456
+ */
457
+ export const addFileToUpdate = async (inputs) => {
458
+ const variables = {
459
+ updateId: inputs.updateId,
460
+ file: null,
461
+ };
462
+ // Same rewrap-inside-retry-thunk shape as addFileToColumn — see
463
+ // its inline rationale (round-1 P2-1 fix).
464
+ const result = await withRetry(async () => {
465
+ try {
466
+ return await dispatchMultipartOnce({
467
+ multipart: inputs.multipart,
468
+ query: ADD_FILE_TO_UPDATE_MUTATION,
469
+ variables,
470
+ operationName: 'AddFileToUpdate',
471
+ fileVariableName: 'file',
472
+ file: inputs.file,
473
+ filename: inputs.filename,
474
+ signal: inputs.signal,
475
+ });
476
+ }
477
+ catch (err) {
478
+ if (err instanceof MondayCliError && isFileTooLargeRejection(err)) {
479
+ throw rewrapAsFileTooLarge({
480
+ err,
481
+ fileSizeBytes: inputs.file.size,
482
+ filename: inputs.filename,
483
+ });
484
+ }
485
+ throw err;
486
+ }
487
+ }, {
488
+ retries: inputs.retries,
489
+ signal: inputs.signal,
490
+ });
491
+ void inputs.client;
492
+ const wireData = result.value.data;
493
+ assertResponseFieldPresent({
494
+ data: wireData,
495
+ key: 'add_file_to_update',
496
+ operationLabel: 'AddFileToUpdate',
497
+ details: { update_id: inputs.updateId },
498
+ nullHandling: 'caller_handles',
499
+ });
500
+ const root = wireData.add_file_to_update;
501
+ if (root === null || root === undefined) {
502
+ throw new ApiError('not_found', `Update ${inputs.updateId} does not exist or the token has no write ` +
503
+ `access.`, { details: { update_id: inputs.updateId } });
504
+ }
505
+ const asset = unwrapOrThrow(assetSchema.safeParse(root), {
506
+ context: 'Monday returned a malformed Asset shape from add_file_to_update',
507
+ details: {
508
+ update_id: inputs.updateId,
509
+ filename: inputs.filename,
510
+ },
511
+ });
512
+ return {
513
+ asset,
514
+ source: 'live',
515
+ cacheAgeSeconds: null,
516
+ complexity: result.value.complexity,
517
+ };
518
+ };
519
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/api/assets.ts"],"names":[],"mappings":"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"}
@@ -128,8 +128,12 @@ export declare const isReadOnlyForeverType: (type: string) => type is ReadOnlyFo
128
128
  * `change_column_value` / `change_multiple_column_values`, so a
129
129
  * `--set-raw` raw payload cannot reach the right wire surface for
130
130
  * these types — `--set-raw` rejects them with `unsupported_column_
131
- * type` carrying `deferred_to: "v0.4"` (asset upload pinned to v0.4
132
- * per cli-design §13).
131
+ * type` carrying `deferred_to: "v0.6"`. v0.4-M31 shipped the verb-
132
+ * shaped path (`monday item upload`); the `--set-raw <file-col>=
133
+ * <json>` form remains deferred because it would need a separate
134
+ * dispatch from the escape-hatch boundary into the multipart wire.
135
+ * Slot slipped from v0.5 to v0.6 at v0.5 release-prep — v0.5 didn't
136
+ * pick up the dispatch either.
133
137
  *
134
138
  * Currently one entry (`file`); the slot is plural because Monday may
135
139
  * surface other multipart-upload-shaped types in future API versions
@@ -207,8 +211,10 @@ export declare const getColumnRoadmapCategory: (type: string) => ColumnRoadmapCa
207
211
  * path` is `null` (agents can't write at all; the column
208
212
  * exists for read-side display / mirror sources only).
209
213
  * - `'files_shaped'`: Monday writes the type via `add_file_to_
210
- * column` (multipart upload), pinned to v0.4 (asset upload).
211
- * Currently `file` only.
214
+ * column` (multipart upload). `monday item upload <iid> --column
215
+ * <col> <file>` shipped at v0.4-M31 as the agent-facing verb;
216
+ * `suggested_write_path` carries that pointer. Currently
217
+ * `file` only.
212
218
  *
213
219
  * Returns `null` for canonical types (membership in `WRITABLE_COLUMN_
214
220
  * TYPES`) — `column-create` skips emitting the warning when the type
@@ -224,9 +230,9 @@ export interface NoncanonicalColumnTypeDetails {
224
230
  /**
225
231
  * The path agents should use to write to the column post-creation,
226
232
  * matching cli-design §5.3 escape-hatch contract — `--set-raw
227
- * <col>=<json>` for raw-writable types, `add_file_to_column
228
- * (deferred to v0.4)` for files-shaped types, `null` for read-
229
- * only-forever types (no write path exists).
233
+ * <col>=<json>` for raw-writable types, `monday item upload`
234
+ * (v0.4-M31, multipart) for files-shaped types, `null` for
235
+ * read-only-forever types (no write path exists).
230
236
  */
231
237
  readonly suggestedWritePath: string | null;
232
238
  }
@@ -1 +1 @@
1
- {"version":3,"file":"column-types.d.ts","sourceRoot":"","sources":["../../src/api/column-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,qBAAqB,qJA4BxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAIxE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,IAAI,IAAI,kBAC/B,CAAC;AAE9B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,GAAG,IAAI,KAAG,OAOxD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,2BAA2B,aAU9B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAM/C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,MAAM,KACX,IAAI,IAAI,uBAA8D,CAAC;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,4GAe1B,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAM3E;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,IAAI,IAAI,mBAC5B,CAAC;AAElC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,kBAAkB,mBAAoB,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAMlE;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,IAAI,IAAI,eAC7B,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,MAAM,qBAAqB,GAC7B,uBAAuB,GACvB,mBAAmB,GACnB,QAAQ,CAAC;AAEb,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,KACX,qBAIF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,mBAAmB,GACnB,cAAc,CAAC;AAEnB,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;IAClD;;;;;;OAMG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,gCAAgC,GAC3C,MAAM,MAAM,KACX,6BAA6B,GAAG,IAelC,CAAC"}
1
+ {"version":3,"file":"column-types.d.ts","sourceRoot":"","sources":["../../src/api/column-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,qBAAqB,qJA4BxB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAIxE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,IAAI,IAAI,kBAC/B,CAAC;AAE9B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,GAAG,IAAI,KAAG,OAOxD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,2BAA2B,aAU9B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAM/C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,MAAM,KACX,IAAI,IAAI,uBAA8D,CAAC;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,4GAe1B,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAM3E;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,IAAI,IAAI,mBAC5B,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,kBAAkB,mBAAoB,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAMlE;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,IAAI,IAAI,eAC7B,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,MAAM,qBAAqB,GAC7B,uBAAuB,GACvB,mBAAmB,GACnB,QAAQ,CAAC;AAEb,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,KACX,qBAIF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,mBAAmB,GACnB,cAAc,CAAC;AAEnB,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;IAClD;;;;;;OAMG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,gCAAgC,GAC3C,MAAM,MAAM,KACX,6BAA6B,GAAG,IAelC,CAAC"}
@@ -190,8 +190,12 @@ export const isReadOnlyForeverType = (type) => READ_ONLY_FOREVER_SET.has(type);
190
190
  * `change_column_value` / `change_multiple_column_values`, so a
191
191
  * `--set-raw` raw payload cannot reach the right wire surface for
192
192
  * these types — `--set-raw` rejects them with `unsupported_column_
193
- * type` carrying `deferred_to: "v0.4"` (asset upload pinned to v0.4
194
- * per cli-design §13).
193
+ * type` carrying `deferred_to: "v0.6"`. v0.4-M31 shipped the verb-
194
+ * shaped path (`monday item upload`); the `--set-raw <file-col>=
195
+ * <json>` form remains deferred because it would need a separate
196
+ * dispatch from the escape-hatch boundary into the multipart wire.
197
+ * Slot slipped from v0.5 to v0.6 at v0.5 release-prep — v0.5 didn't
198
+ * pick up the dispatch either.
195
199
  *
196
200
  * Currently one entry (`file`); the slot is plural because Monday may
197
201
  * surface other multipart-upload-shaped types in future API versions
@@ -223,7 +227,7 @@ export const categorizeNoncanonicalColumnType = (type) => {
223
227
  if (isFilesShapedType(type)) {
224
228
  return {
225
229
  category: 'files_shaped',
226
- suggestedWritePath: 'add_file_to_column (deferred to v0.4)',
230
+ suggestedWritePath: 'monday item upload (v0.4-M31, multipart)',
227
231
  };
228
232
  }
229
233
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"column-types.js","sourceRoot":"","sources":["../../src/api/column-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"column-types.js","sourceRoot":"","sources":["../../src/api/column-types.ts"],"names":[],"mappings":"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"}
@@ -629,7 +629,14 @@ export declare const bundleColumnValues: (translated: readonly TranslatedColumnV
629
629
  * `add_file_to_column` (multipart upload) rather than
630
630
  * `change_column_value`, so neither friendly translator nor
631
631
  * `--set-raw` can reach the wire surface. Carry
632
- * `deferred_to: "v0.4"`; hint flags the multipart-upload nature.
632
+ * `deferred_to: "v0.6"`; hint points at `monday item upload`
633
+ * (shipped v0.4-M31; multipart wire — the alternative path
634
+ * agents should use today). The `deferred_to` slot tracks the
635
+ * friendly `--set <file-col>=<path>` form specifically; v0.4
636
+ * shipped the verb-shaped path (`monday item upload`); v0.5
637
+ * didn't pick up the inline-`--set` translator either (the
638
+ * translator boundary still doesn't dispatch into the multipart
639
+ * wire); slot slipped from v0.5 to v0.6 at v0.5 release-prep.
633
640
  * - **`time_tracking`** — verb-shaped extension (start/stop, not
634
641
  * value writes); v0.3-deferred. Carry `deferred_to: "v0.3"`;
635
642
  * hint points at the upcoming verb surface.