monday-cli 0.7.1 → 0.8.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 (122) hide show
  1. package/CHANGELOG.md +249 -49
  2. package/README.md +87 -45
  3. package/dist/api/assets.d.ts +3 -3
  4. package/dist/api/column-types.d.ts +14 -7
  5. package/dist/api/column-types.d.ts.map +1 -1
  6. package/dist/api/column-types.js +14 -7
  7. package/dist/api/column-types.js.map +1 -1
  8. package/dist/api/error-decoration.d.ts +124 -0
  9. package/dist/api/error-decoration.d.ts.map +1 -0
  10. package/dist/api/error-decoration.js +161 -0
  11. package/dist/api/error-decoration.js.map +1 -0
  12. package/dist/api/fetch-transport-helpers.d.ts +97 -0
  13. package/dist/api/fetch-transport-helpers.d.ts.map +1 -0
  14. package/dist/api/fetch-transport-helpers.js +175 -0
  15. package/dist/api/fetch-transport-helpers.js.map +1 -0
  16. package/dist/api/file-column-set.d.ts +388 -82
  17. package/dist/api/file-column-set.d.ts.map +1 -1
  18. package/dist/api/file-column-set.js +466 -88
  19. package/dist/api/file-column-set.js.map +1 -1
  20. package/dist/api/multipart-transport.d.ts +95 -60
  21. package/dist/api/multipart-transport.d.ts.map +1 -1
  22. package/dist/api/multipart-transport.js +102 -120
  23. package/dist/api/multipart-transport.js.map +1 -1
  24. package/dist/api/transport.d.ts.map +1 -1
  25. package/dist/api/transport.js +2 -99
  26. package/dist/api/transport.js.map +1 -1
  27. package/dist/cli/program.js +1 -1
  28. package/dist/cli/program.js.map +1 -1
  29. package/dist/commands/auth/login.js +1 -1
  30. package/dist/commands/auth/login.js.map +1 -1
  31. package/dist/commands/auth/logout.js +1 -1
  32. package/dist/commands/auth/logout.js.map +1 -1
  33. package/dist/commands/board/column-create.d.ts +20 -2
  34. package/dist/commands/board/column-create.d.ts.map +1 -1
  35. package/dist/commands/board/column-create.js +191 -20
  36. package/dist/commands/board/column-create.js.map +1 -1
  37. package/dist/commands/completion.js +1 -1
  38. package/dist/commands/completion.js.map +1 -1
  39. package/dist/commands/dev/configure.js +1 -1
  40. package/dist/commands/dev/configure.js.map +1 -1
  41. package/dist/commands/dev/discover.js +1 -1
  42. package/dist/commands/dev/discover.js.map +1 -1
  43. package/dist/commands/dev/doctor.js +1 -1
  44. package/dist/commands/dev/doctor.js.map +1 -1
  45. package/dist/commands/dev/epic/items.js +2 -2
  46. package/dist/commands/dev/epic/items.js.map +1 -1
  47. package/dist/commands/dev/epic/list.js +2 -2
  48. package/dist/commands/dev/epic/list.js.map +1 -1
  49. package/dist/commands/dev/release/list.js +2 -2
  50. package/dist/commands/dev/release/list.js.map +1 -1
  51. package/dist/commands/dev/sprint/current.js +2 -2
  52. package/dist/commands/dev/sprint/current.js.map +1 -1
  53. package/dist/commands/dev/sprint/items.js +2 -2
  54. package/dist/commands/dev/sprint/items.js.map +1 -1
  55. package/dist/commands/dev/sprint/list.js +2 -2
  56. package/dist/commands/dev/sprint/list.js.map +1 -1
  57. package/dist/commands/dev/task/block.js +2 -2
  58. package/dist/commands/dev/task/block.js.map +1 -1
  59. package/dist/commands/dev/task/done.js +2 -2
  60. package/dist/commands/dev/task/done.js.map +1 -1
  61. package/dist/commands/dev/task/list.js +2 -2
  62. package/dist/commands/dev/task/list.js.map +1 -1
  63. package/dist/commands/dev/task/start.js +2 -2
  64. package/dist/commands/dev/task/start.js.map +1 -1
  65. package/dist/commands/doc/get.js +1 -1
  66. package/dist/commands/doc/get.js.map +1 -1
  67. package/dist/commands/doc/list.js +1 -1
  68. package/dist/commands/doc/list.js.map +1 -1
  69. package/dist/commands/item/clear.d.ts.map +1 -1
  70. package/dist/commands/item/clear.js +15 -41
  71. package/dist/commands/item/clear.js.map +1 -1
  72. package/dist/commands/item/create.d.ts +93 -1
  73. package/dist/commands/item/create.d.ts.map +1 -1
  74. package/dist/commands/item/create.js +474 -53
  75. package/dist/commands/item/create.js.map +1 -1
  76. package/dist/commands/item/search.js +7 -7
  77. package/dist/commands/item/search.js.map +1 -1
  78. package/dist/commands/item/set.d.ts +1 -0
  79. package/dist/commands/item/set.d.ts.map +1 -1
  80. package/dist/commands/item/set.js +94 -1
  81. package/dist/commands/item/set.js.map +1 -1
  82. package/dist/commands/item/time-track/start.js +2 -2
  83. package/dist/commands/item/time-track/start.js.map +1 -1
  84. package/dist/commands/item/time-track/stop.js +2 -2
  85. package/dist/commands/item/time-track/stop.js.map +1 -1
  86. package/dist/commands/item/update.d.ts +128 -11
  87. package/dist/commands/item/update.d.ts.map +1 -1
  88. package/dist/commands/item/update.js +784 -82
  89. package/dist/commands/item/update.js.map +1 -1
  90. package/dist/commands/item/upload.js +5 -5
  91. package/dist/commands/item/upload.js.map +1 -1
  92. package/dist/commands/item/watch.js +2 -2
  93. package/dist/commands/item/watch.js.map +1 -1
  94. package/dist/commands/notification/send.js +1 -1
  95. package/dist/commands/notification/send.js.map +1 -1
  96. package/dist/commands/update/body-source.d.ts +38 -0
  97. package/dist/commands/update/body-source.d.ts.map +1 -0
  98. package/dist/commands/update/body-source.js +80 -0
  99. package/dist/commands/update/body-source.js.map +1 -0
  100. package/dist/commands/update/upload.js +3 -3
  101. package/dist/commands/update/upload.js.map +1 -1
  102. package/dist/commands/user/team-add-members.js +1 -1
  103. package/dist/commands/user/team-add-members.js.map +1 -1
  104. package/dist/commands/user/team-create.js +1 -1
  105. package/dist/commands/user/team-create.js.map +1 -1
  106. package/dist/commands/user/team-remove-members.js +1 -1
  107. package/dist/commands/user/team-remove-members.js.map +1 -1
  108. package/dist/commands/webhook/create.js +1 -1
  109. package/dist/commands/webhook/create.js.map +1 -1
  110. package/dist/commands/webhook/delete.js +1 -1
  111. package/dist/commands/webhook/delete.js.map +1 -1
  112. package/dist/commands/webhook/list.js +1 -1
  113. package/dist/commands/webhook/list.js.map +1 -1
  114. package/dist/utils/file-source.d.ts +109 -0
  115. package/dist/utils/file-source.d.ts.map +1 -1
  116. package/dist/utils/file-source.js +123 -0
  117. package/dist/utils/file-source.js.map +1 -1
  118. package/dist/utils/output/table.d.ts +7 -6
  119. package/dist/utils/output/table.d.ts.map +1 -1
  120. package/dist/utils/output/table.js +32 -5
  121. package/dist/utils/output/table.js.map +1 -1
  122. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -7,55 +7,255 @@ output envelope (`{ ok, data, meta, ... }`) and 29 stable error
7
7
  codes are part of the public contract — the SemVer rules in
8
8
  [`docs/cli-design.md`](./docs/cli-design.md) §6 govern bumps.
9
9
 
10
- ## [0.7.1] - 2026-05-20Live-API hotfix: `is_leaf` schema drift + non-TTY table colour
11
-
12
- Emergency patch. `0.7.0` shipped two defects that only surface
13
- against the **live** Monday API (the test suite mocks the network
14
- boundary, so all 4124 tests stayed green). No new commands, no
15
- contract changes strictly bug fixes. **No breaking changes vs
16
- `0.7.0`.**
17
-
18
- ### Fixed
19
-
20
- - **`is_leaf` field removed from the board-metadata query (critical).**
21
- Monday removed `is_leaf` from the `Board` type at API `2026-01`
22
- (confirmed by introspection `hierarchy_type` is still valid).
23
- The shared `BOARD_METADATA_QUERY` still selected it, so Monday
24
- rejected the whole query with `validation_failed` ("Cannot query
25
- field \"is_leaf\" on type \"Board\""). Because that query backs
26
- `loadBoardMetadata` → the column-name resolver, this broke **every
27
- board-metadata path**: `board describe` / `columns` / `groups` /
28
- `doctor`, `item list` / `search`, and **all `--set` / `--set-raw`
29
- column writes** on `item create` / `update` / `set` (the column-
30
- value path prequeries board metadata). Against live `2026-01` the
31
- CLI was effectively read-by-ID + bare-create only. The query no
32
- longer selects `is_leaf`; the `board describe` output **preserves
33
- the `is_leaf` key as `null`** (non-breaking per §6.1 — removing the
34
- key is deferred to the next major).
35
- - **Table output no longer leaks ANSI colour into pipes.** `cli-table3`
36
- colours its borders grey unconditionally, so `--output table`
37
- forced through a pipe emitted `^[[90m`/`^[[39m` around every box
38
- character. Colour is now gated on stdout TTY-ness and honours
39
- `NO_COLOR` / `FORCE_COLOR` / `--no-color` (`cli.md` "Respect
40
- NO_COLOR"). The non-TTY default was already JSON, so this only
41
- affected explicitly-forced piped tables.
42
-
43
- ### Internal
44
-
45
- - Added a `RUN_LIVE_TESTS`-gated e2e smoke test
46
- (`tests/e2e/live-schema-drift.test.ts`) that runs the exact
47
- production `BOARD_METADATA_QUERY` against the live API and asserts
48
- no GraphQL errors — catches the `is_leaf` class of field drift
49
- before release. Skipped in normal CI; run via
50
- `RUN_LIVE_TESTS=1 MONDAY_API_TOKEN=... npm run test:e2e`.
51
-
52
- ### Known limitations (unchanged, not regressions)
53
-
54
- - `monday board column-create --type board_relation --settings` still
55
- rejects `boardIds` / `boardId` / `allowMultipleItems` — a deliberate
56
- M19 limitation (Monday has no documented `create_column.defaults`
57
- shape for linked boards), not a regression. Adding writable
58
- Connect-Boards settings is a v0.8 feature pending a wire probe.
10
+ ## [0.8.0] - 2026-05-22File-upload P1 fix + multi-file / stdin file `--set` + writable board_relation/dependency settings (M49 + M46 + M47 + M48)
11
+
12
+ The release whose headline is a **fix**, not a feature: **M49 repairs
13
+ the file-upload wire format**. Published `0.7.0` (and every release
14
+ back to v0.4-M31) shipped the Apollo GraphQL multipart-request spec
15
+ (`operations` / `map` / numbered parts), which **live Monday rejects**
16
+ — so `monday item upload`, `monday update upload`, and every friendly
17
+ file `--set` was broken against the real API for five milestones
18
+ (M31 / M38 / M42 / M43 / M46) while the test suite stayed green
19
+ against a fixture that asserted the *wrong* wire shape. `0.8.0` emits
20
+ Monday's native multipart shape (`query` + a sibling `variables`
21
+ field + a string-encoded `map` + a named file part, POSTed to
22
+ `/v2/file`) and is **the first release where file uploads actually
23
+ work against live Monday** live-verified via a `RUN_LIVE_TESTS`-
24
+ gated upload smoke test that drives the real transport. **If you use
25
+ any file upload, upgrade from `0.7.0`.**
26
+
27
+ On top of the fix, three feature folds close long-standing deferrals:
28
+ multi-file `--set` per call (M46, closes v0.6-M38 D2), stdin file
29
+ `--set <file-col>=-` (M47, closes v0.6-M38 D7), and writable create-
30
+ time `board_relation` / `dependency` column settings (M48). Plus an
31
+ internal `src/api/` error-decoration refactor cluster. **No breaking
32
+ changes vs `0.7.0` every v0.8 surface is additive; the output
33
+ envelope and 29 stable error codes are unchanged.** Built
34
+ incrementally as M49 + the refactor cluster + M46 + M47 + M48.
35
+
36
+ **Re-scope note 2026-05-21.** v0.8 re-scoped from its original
37
+ SKELETON (Monday API `2026-07` pin + user-entity migration M44 +
38
+ `user activity` M45) to **stay on API `2026-01`** and ship the
39
+ v0.6 / v0.7 carve-out folds above — mirroring the v0.7 pivot verbatim.
40
+ `@mondaydotcomorg/api` is still pinned at 14.0.0 (baking `2026-01`);
41
+ no SDK 15.x (`2026-04`) or 16.x (`2026-07`) had published at the
42
+ candidate-selection commit, so M44 / M45 + the v0.7-deferred M39 /
43
+ M40 / M41 cluster stay deferred to a future release (re-open when the
44
+ SDK publishes natively AND a paid-tier sandbox is available for the
45
+ M40 wire probe).
46
+
47
+ ### Breaking changes vs `0.7.0`
48
+
49
+ **None.** Every command, error code, envelope key, and warning shape
50
+ shipped in `0.7.0` is preserved. v0.8 only adds (and fixes the
51
+ upload wire shape — a fix that makes previously-broken uploads work,
52
+ not a contract change: the dry-run echo + read-side `settings_str`
53
+ shapes are byte-stable).
54
+
55
+ ### Surface
56
+
57
+ **117 commands shipped (unchanged from v0.7).** M46 / M47 / M48
58
+ extend existing verbs rather than adding noun namespaces M46 + M47
59
+ add file-source dispatch shapes to `item set` / `item update` /
60
+ `item create`; M48 adds the `--settings` flag's reach to
61
+ `board column-create` for two more column types. The friendly
62
+ translator stays JSON-output-shaped for the existing writable types.
63
+
64
+ **🚨 File-upload wire-format fix (M49) — `src/api/multipart-transport.ts`.**
65
+ The transport now POSTs Monday's native multipart shape to `/v2/file`:
66
+ a `query` field carrying the mutation, a sibling `variables` field, a
67
+ string-encoded `map` (not the Apollo nested-object form), and the file
68
+ under a named part matching the map. The bug never surfaced in tests
69
+ because the mocked multipart fixture validated `operationName` +
70
+ `match_filename` + `match_variables` but **never the form structure**
71
+ — so it accepted a request the live wire would 4xx. The fix backs the
72
+ corrected fixture assertion with a `RUN_LIVE_TESTS`-gated live smoke
73
+ test (one of the three skipped tests by default). No command surface,
74
+ flag, or envelope changes — the same `item upload` / `update upload` /
75
+ file `--set` calls now succeed live instead of failing.
76
+
77
+ **Multi-file `--set` per call (M46) — `monday item update` (single +
78
+ bulk) + `monday item create`.** Lifts v0.6-M38's single-file gate:
79
+ multiple `--set <file-col>=<path>` entries per call fire N sequential
80
+ `add_file_to_column` legs per item, with a per-leg partial-failure
81
+ accumulator. Three reachable callShapes (single-item update / bulk
82
+ update / create) each emit an `operation`-discriminated envelope
83
+ (`add_files_to_columns` / `item_update_bulk_file_set_multi` /
84
+ `item_create_with_files`). The inner sequential N-leg loop +
85
+ accumulator lifted to `dispatchFileLegsSequentially`
86
+ (`src/api/file-column-set.ts`, 3 consumers — R-v0.8-NEW-1 LIFT).
87
+
88
+ **Stdin file `--set <file-col>=-` (M47) — `monday item set` /
89
+ `item update <iid>` / `item create`.** A bare `-` file `--set` value
90
+ sources the upload from stdin. **Single-file, single-target only**
91
+ (stdin is one non-replayable stream — not available on bulk
92
+ `--where`). `--filename <name>` names the multipart part (default
93
+ `blob`, with the MIME type sniffed from the filename). An empty pipe
94
+ rejects `usage_error` with `details.reason: "stdin_file_empty"`
95
+ before any wire call. `monday item create` reads stdin **before**
96
+ leg-1 `create_item`, so an empty pipe never orphans a created item.
97
+
98
+ **Writable `board_relation` / `dependency` create-time settings
99
+ (M48) — `monday board column-create --type <t> --settings <json>`.**
100
+ The existing `--settings <json>` flag now accepts per-type settings
101
+ for two more column types: `board_relation` takes
102
+ `{"boardIds":[123,456]}` (ints, coerced from JSON ints or numeric
103
+ strings with a `Number.isSafeInteger` guard); `dependency` is
104
+ same-board only and takes `{"allowMultipleItems"?:bool}` (a
105
+ `boardIds` / `boardId` key on `dependency` rejects with
106
+ `usage_error.details.rejected_keys`). On the wire these two types
107
+ wrap their settings under `defaults: {settings: {…}}` (the M48
108
+ single dispatch-site ternary); the other settings-accepting types
109
+ (`status` / `dropdown` / `numbers`) pass `defaults: settings`
110
+ unwrapped. The wrap is **wire-only** — the dry-run echo and the
111
+ read-side `Column.settings_str` stay unwrapped (agent shape). Monday
112
+ validates board existence (a non-existent `boardIds` target →
113
+ `not_found`).
114
+
115
+ ### Output contract additions
116
+
117
+ **No new stable error codes — registry stays at 29.** Every v0.8
118
+ rejection routes through existing codes with `details.reason` /
119
+ `details.rejected_keys` discriminators: M47's `"stdin_file_empty"`
120
+ (`usage_error`) joins the existing file-dispatch discriminator family
121
+ under the R-v0.6-NEW-2 per-status-detail pattern (graduated at v0.7);
122
+ M48's `dependency` board-target rejection is an existing `usage_error`
123
+ with `details.rejected_keys`.
124
+
125
+ **New `operation`-discriminated emit shapes (M46).** Three new
126
+ multi-file envelopes — `add_files_to_columns` (single-item update),
127
+ `item_update_bulk_file_set_multi` (bulk), `item_create_with_files`
128
+ (create) — each pinned by its own schema and emitted via
129
+ `emitMutation`. Per the R-v0.8-NEW-8 audit-point + the M42 union-
130
+ exclusion precedent, single-resource shapes advertise in the command
131
+ registry's `outputSchema`; bulk per-item-results shapes document
132
+ their exclusion.
133
+
134
+ **Stdin source echo (M47).** On a `<file-col>=-` dispatch the envelope
135
+ carries `file_size_bytes` = the buffered stdin byte length (not an
136
+ `fs.stat`), and the dry-run `planned_changes` file descriptor reads
137
+ `(stdin)` rather than a path. The field is additive per §6.4.
138
+
139
+ **No new envelope keys, no new warning shapes** beyond the M46
140
+ multi-file `operation` discriminators + the M47 stdin echo above.
141
+ M46 / M47 reuse the M31 multipart wire's success-envelope shape; M48
142
+ reuses the M16 `create_column` JSON envelope (its wire change is
143
+ input-side only — `defaults` wrap — so the returned `Column`
144
+ projection is unchanged).
145
+
146
+ ### Upgrade notes
147
+
148
+ - **File uploads now work live.** No code or flag change is needed —
149
+ `monday item upload` / `monday update upload` / file `--set` calls
150
+ that silently failed (or 4xx'd) against `0.7.0` succeed on `0.8.0`.
151
+ This is the single most important reason to upgrade.
152
+ - **`multi_file_set_unsupported` (v0.6-M38 D2) is DROPPED.** v0.8-M46
153
+ picks up multiple file `--set` entries per call on update (single +
154
+ bulk) + create. The rejection no longer fires on those paths.
155
+ - **The v0.6-M38 D7 stdin file-`--set` deferral is CLOSED.** v0.8-M47
156
+ picks up stdin file `--set <file-col>=-` on set / update-single /
157
+ create. Bulk `--where` still rejects stdin with
158
+ `usage_error.details.reason: "stdin_file_set_on_bulk_unsupported"`
159
+ (one non-replayable stream can't fan out across N matched items).
160
+ - **`board column-create --type board_relation|dependency --settings`
161
+ now succeeds** where it previously had no documented shape (M19's
162
+ "no documented shape" was REFUTED by the M48 probe). `dependency`
163
+ is same-board only — an explicit board target coerces to the host
164
+ board.
165
+ - **Multi-level subitem `--parent` rejection slipped `v0.8` → `v0.9`.**
166
+ Monday's `sub_items_board` still carries no `subtasks` column at API
167
+ `2026-01`; the `details.deferred_to` value moves forward one release
168
+ (5th consecutive slip).
169
+
170
+ ### Internals worth highlighting
171
+
172
+ - **R-v0.8-NEW-9 (mocked transport must mirror the real wire)
173
+ RESOLVED at M49 — and graduated into `.claude/rules/testing.md`.**
174
+ The five-milestone P1 was caused by a mock that validated a
175
+ multipart shape the live wire would reject. The fix corrected the
176
+ fixture assertion to the native form AND added a `RUN_LIVE_TESTS`-
177
+ gated live smoke test for the seam; the "mock at the boundary, but
178
+ the mock must reject what the wire would reject" rule now lives in
179
+ testing.md with this incident as the worked example.
180
+ - **v0.8 refactor cluster SHIPPED** (`refactor(api): lift
181
+ reThrowDecorated + projectCauseForEnvelope`). R-v0.7-NEW-5
182
+ (`reThrowDecorated` fail-fast scaffold, 4 consumers) + R-v0.8-NEW-6
183
+ (`projectCauseForEnvelope` builder, 3 consumers) lifted to
184
+ `src/api/error-decoration.ts`; 7 sites delegate. Branch coverage
185
+ 95.47% → 95.88%; `item/update.ts` 79.42% → 87.27%. Codex IMPL
186
+ CONVERGED R4.
187
+ - **R-v0.6-NEW-1 reached its 6th consumer** at M46 (multi-file
188
+ dispatch) — already graduated at 5 post-v0.7, scaled cleanly with
189
+ no internal-shape change. **R-v0.8-NEW-1** (`dispatchFileLegs
190
+ Sequentially`) lifted at M46 with 3 consumers.
191
+ - **R-NEW-82 graduated discipline applied at its 6th-consecutive
192
+ consumer.** The release-prep cross-doc grep caught one stale
193
+ `deferred_to: "v0.8"` slot (multi-level subitem, slipped to
194
+ `"v0.9"`) + one ToC drift (M46 / M47 / M48 annotations missing from
195
+ `docs/output-shapes.md`'s `item (mutations)` + `board` rows).
196
+ - **R-NEW-84 graduated discipline applied.** The v0.8 release-prep
197
+ cluster ships zero production semantic changes modulo the
198
+ `'v0.8'` → `'v0.9'` literal flip in the multi-level subitem
199
+ rejection slot; gates carry verification (Codex review skipped).
200
+ - **R-v0.8-NEW-4 (M42/M43 schema parse-test backfill) stays
201
+ deferred.** Its trigger was "act if the release-prep envelope-
202
+ snapshot probe surfaces a schema-shape inconsistency"; the probe
203
+ ran clean (zero diff), so the backfill remains a low-priority
204
+ belt-and-suspenders candidate.
205
+ - **R-v0.8-NEW-7 (commit-subject-line refs over bare SHAs) adopted**
206
+ at the v0.8 close-docs — NEW plan-doc / CHANGELOG prose prefers
207
+ milestone-relative commit references, with rebase-volatile SHA
208
+ ranges riding alongside as a convenience.
209
+ - **Two-AI review** ran for each v0.8 feature milestone's pre-flight
210
+ + IMPL (M49 CONVERGED R1; refactor cluster R4; M46 R3; M47 R1;
211
+ M48 R2). The release-prep cluster skipped Codex per R-NEW-84.
212
+ Per-milestone Codex breakdowns live in the post-mortems in
213
+ [`docs/v0.8-plan.md`](./docs/v0.8-plan.md) §3.
214
+
215
+ ### Tests + quality gates
216
+
217
+ - **4254 tests pass + 3 skipped** (was 4124 + 1 at `0.7.0`). The 3
218
+ skips: the 2 pre-existing + the new `RUN_LIVE_TESTS`-gated
219
+ multipart-upload live smoke test (M49). All green on Node 22 + 24.
220
+ - **Coverage at branches 95.91% / functions 98.97%** against the
221
+ floor 95 / 95.45 / 95 / 95 — comfortably above the branch floor
222
+ (the refactor cluster lifted it 95.47% → 95.88%, and the M46/M48
223
+ dispatch arms are fully covered). Floor unchanged across
224
+ `0.7.0` → `0.8.0`.
225
+ - **Envelope-snapshot suite** — refresh probe ran clean at v0.8
226
+ release-prep (zero diff vs M48 IMPL close, 162 snapshots); folded
227
+ into close-docs prose per the v0.5 / v0.6 / v0.7 precedent (a
228
+ zero-diff probe doesn't warrant its own commit).
229
+ - **Five test layers held**: unit, integration (`FixtureTransport` +
230
+ `MultipartFixtureTransport`), E2E (subprocess against fixture
231
+ server), envelope-shape snapshot suite, published-tarball E2E —
232
+ plus the new `RUN_LIVE_TESTS`-gated live-wire smoke tests.
233
+ - **`npm audit` reports `0 vulnerabilities`** — no audit-fix folded
234
+ in this cycle (unlike the v0.7 release-prep bump).
235
+
236
+ ### Documentation
237
+
238
+ - **[`docs/v0.8-plan.md`](./docs/v0.8-plan.md)** — the v0.8 plan
239
+ carries the M49 + refactor-cluster + M46 + M47 + M48 milestone
240
+ closes (§3), per-milestone decision logs, the R-class register
241
+ (§22, incl. R-v0.8-NEW-9's RESOLVED narrative), and the §7 release
242
+ exit checklist.
243
+ - **[`.claude/rules/testing.md`](./.claude/rules/testing.md)** — new
244
+ "the mock must reject what the real wire rejects" rule, with the
245
+ M49 five-milestone P1 as the worked example + the
246
+ `RUN_LIVE_TESTS`-gated live-smoke pattern.
247
+ - **[`docs/output-shapes.md`](./docs/output-shapes.md)** — M46
248
+ multi-file, M47 stdin, and M48 board_relation/dependency settings
249
+ body sections; ToC rows for `item (mutations)` + `board` updated to
250
+ enumerate the v0.8 milestone annotations (caught at the v0.8
251
+ release-prep ToC audit — 6th consecutive R-NEW-82 ratification).
252
+ - **README.md** — quickstart step 13 extended to the full v0.6 → v0.8
253
+ file-`--set` family (M46 multi-file + M47 stdin) with the M49 P1-fix
254
+ warning; Scope section gains a "v0.8.0 (current)" entry + re-scope
255
+ note; prior-release labels cascade; the "next" block reframes to
256
+ v0.9.
257
+
258
+ [0.8.0]: https://github.com/Firer/monday-cli/releases/tag/v0.8.0
59
259
 
60
260
  ## [0.7.0] - 2026-05-20 — Bulk + create-time file `--set` carve-out folds (M42 + M43)
61
261
 
package/README.md CHANGED
@@ -49,7 +49,7 @@ Requires **Node.js ≥ 22**.
49
49
  # Get one at https://<your-org>.monday.com/admin/integrations/api
50
50
  #
51
51
  # OAuth login (`monday auth login`) is registered but deferred in
52
- # v0.7.0 — the verb surfaces a clear `usage_error.details.reason:
52
+ # v0.8.0 — the verb surfaces a clear `usage_error.details.reason:
53
53
  # oauth_unregistered` pointing here. Authenticate via the env var.
54
54
  export MONDAY_API_TOKEN="<your-token>"
55
55
 
@@ -117,8 +117,8 @@ monday user team-list --json
117
117
  monday user team-create --name "Platform" --users 7,9 --json
118
118
  monday user team-add-members <tid> --users 11,13 --json
119
119
 
120
- # 13. Files-shaped friendly `--set` writes — the v0.6 → v0.7 carve-out
121
- # set, all four CLI shapes reaching Monday's `add_file_to_column`
120
+ # 13. Files-shaped friendly `--set` writes — the v0.6 → v0.8 carve-out
121
+ # set, every CLI shape reaching Monday's `add_file_to_column`
122
122
  # multipart wire:
123
123
  # - v0.6-M38 ships single-item friendly `--set <file-col>=<path>`
124
124
  # on `monday item set` + `monday item update <iid>` (sibling-
@@ -130,9 +130,21 @@ monday user team-add-members <tid> --users 11,13 --json
130
130
  # --set <file-col>=<path>` as a two-leg `create_item` +
131
131
  # `add_file_to_column` dispatch under the §5.8 orphan-warn
132
132
  # atomicity envelope.
133
- # The v0.4-M31 verb-shaped `monday item upload` path remains as
134
- # the alternative. `--dry-run` emits `planned_changes` on every
135
- # shape without the multipart round-trip.
133
+ # - v0.8-M46 lifts the single-file gate: multiple `--set
134
+ # <file-col>=<path>` entries per call across update (single +
135
+ # bulk) + create, each firing a sequential `add_file_to_column`
136
+ # leg with a per-leg partial-failure accumulator.
137
+ # - v0.8-M47 sources an upload from stdin with a bare `-`
138
+ # (`<file-col>=-`, single-file / single-target; `--filename`
139
+ # names the part, default `blob`; empty pipe rejects
140
+ # `usage_error.details.reason: stdin_file_empty`).
141
+ # ⚠ v0.8-M49 P1 FIX: published v0.7.0 shipped the Apollo multipart
142
+ # spec, which live Monday REJECTS — so every real upload was broken
143
+ # in 0.7.0. v0.8.0 emits Monday's native multipart shape and is the
144
+ # first release where these uploads actually work against live
145
+ # Monday (live-verified). The v0.4-M31 verb-shaped `monday item
146
+ # upload` path remains as the alternative. `--dry-run` emits
147
+ # `planned_changes` on every shape without the multipart round-trip.
136
148
  monday item set 67890 'Attachments'=./screenshot.png --json
137
149
  monday item update 67890 --set 'Attachments'=./diagram.png --json
138
150
  monday item update 67890 --set 'Attachments'=./report.pdf --dry-run --json
@@ -140,8 +152,10 @@ monday item update --board 12345 --where status=Backlog \
140
152
  --set 'Attachments'=./report.pdf --yes --continue-on-error \
141
153
  --concurrency 4 --json # v0.7-M42 bulk file dispatch
142
154
  monday item create --board 12345 --name "Field report" \
143
- --set 'Attachments'=./report.pdf --set status='Working on it' \
144
- --json # v0.7-M43 create-time file --set
155
+ --set 'Attachments'=./report.pdf --set 'Spec'=./spec.pdf \
156
+ --set status='Working on it' --json # v0.8-M46 multi-file create-time
157
+ cat report.pdf | monday item set 67890 'Attachments'=- \
158
+ --filename report.pdf --json # v0.8-M47 stdin file --set
145
159
 
146
160
  # 14. Find-or-create with idempotent matching (v0.2)
147
161
  # Re-running with the same args is safe — 0/1/2+ matches route to
@@ -228,7 +242,7 @@ Every JSON response uses the same universal envelope:
228
242
  "meta": {
229
243
  "schema_version": "1",
230
244
  "api_version": "2026-01",
231
- "cli_version": "0.7.0",
245
+ "cli_version": "0.8.0",
232
246
  "request_id": "0e6f1a7b-...",
233
247
  "source": "live",
234
248
  "cache_age_seconds": null,
@@ -328,7 +342,38 @@ See [`.env.example`](./.env.example) for all supported variables
328
342
 
329
343
  ## Scope
330
344
 
331
- **v0.7.0 (current — `monday-cli@0.7.0` on npm):**
345
+ **v0.8.0 (current — `monday-cli@0.8.0` on npm):**
346
+ the v0.7 surface PLUS — most importantly — the 🚨 P1 file-upload
347
+ wire-format **FIX** (M49). Published v0.7.0 shipped the Apollo
348
+ multipart spec, which live Monday rejects, so `monday item upload` /
349
+ `monday update upload` / every friendly file `--set` was broken
350
+ against live Monday for five milestones (M31/M38/M42/M43/M46).
351
+ v0.8.0 emits Monday's native multipart shape (`query` + sibling
352
+ `variables` + string-`map` + named part, POSTed to `/v2/file`) and
353
+ is the **first release where file uploads actually work live**
354
+ (live-verified via a `RUN_LIVE_TESTS`-gated smoke test). On top of
355
+ the fix, three feature folds: multi-file `--set` per call across
356
+ update (single + bulk) + create (M46, lifting the single-file gate);
357
+ stdin file `--set <file-col>=-` with `--filename` (M47); and writable
358
+ create-time `board_relation` / `dependency` column settings via
359
+ `monday board column-create --type board_relation --settings
360
+ '{"boardIds":[…]}'` (M48). Plus an internal `src/api/` error-
361
+ decoration refactor cluster. **No breaking changes vs v0.7.0** — the
362
+ v0.8 surface is additive (the output envelope + 29 stable error codes
363
+ are unchanged); M49 is a fix that ships in the same minor. Built
364
+ incrementally as M49 + the refactor cluster + M46 + M47 + M48.
365
+
366
+ **Re-scope note 2026-05-21.** v0.8 re-scoped from its original
367
+ SKELETON (Monday API `2026-07` pin + user-entity migration M44 +
368
+ `user activity` M45) to **stay on API `2026-01`** and ship the
369
+ v0.6/v0.7 carve-out folds above — mirroring the v0.7 pivot verbatim.
370
+ `@mondaydotcomorg/api` is still pinned at 14.0.0 (baking `2026-01`);
371
+ no SDK 15.x (`2026-04`) or 16.x (`2026-07`) has published, so M44 /
372
+ M45 + the v0.7-deferred M39 / M40 / M41 cluster stay deferred to a
373
+ future release. See [CHANGELOG.md](./CHANGELOG.md) for the full
374
+ per-milestone release notes.
375
+
376
+ **v0.7.0 (the previous release):**
332
377
  the v0.6 surface PLUS the two file-`--set` carve-outs deferred at
333
378
  v0.6-M38 — bulk `monday item update --where ... --set <file-col>=
334
379
  <path>` (M42, per-item multipart fan-out under `--concurrency` /
@@ -336,26 +381,23 @@ v0.6-M38 — bulk `monday item update --where ... --set <file-col>=
336
381
  <file-col>=<path>` (M43, two-leg `create_item` + `add_file_to_
337
382
  column` dispatch under the §5.8 orphan-warn atomicity envelope).
338
383
  **No breaking changes vs v0.6.0** — the v0.7 surface is additive
339
- (M42 + M43 only). Built incrementally as two milestones (M42 +
340
- M43); both close v0.6-M38 D5 / D6 deferrals so the friendly file-
341
- `--set` form now reaches every callShape (single-item / bulk /
342
- create-time). The originally-planned Monday API `2026-04` pin
343
- bump (M39) + `monday item set-description` (M40) + `monday doc
344
- block-create-bulk` (M41) DEFERRED at 2026-05-20 pending
345
- `@mondaydotcomorg/api` SDK 15.x publishing with
346
- `CURRENT_VERSION = '2026-04'` natively — see the per-milestone
347
- breakdown below. See [CHANGELOG.md](./CHANGELOG.md) for the full
348
- per-milestone release notes.
349
-
350
- **OAuth deferral (unchanged from v0.6.0).** `monday auth login` is
384
+ (M42 + M43 only). Both close v0.6-M38 D5 / D6 deferrals so the
385
+ friendly file-`--set` form reaches every callShape (single-item /
386
+ bulk / create-time). **NOTE:** file uploads in published v0.7.0 are
387
+ live-broken (the M49 P1 above) upgrade to v0.8.0 for working
388
+ uploads. The originally-planned Monday API `2026-04` pin bump (M39)
389
+ + `monday item set-description` (M40) + `monday doc block-create-bulk`
390
+ (M41) DEFERRED at 2026-05-20 pending `@mondaydotcomorg/api` SDK 15.x.
391
+
392
+ **OAuth deferral (unchanged from v0.7.0).** `monday auth login` is
351
393
  registered but the canonical Monday OAuth app is not registered in
352
- v0.7.0; the verb surfaces a clear `usage_error.details.reason:
394
+ v0.8.0; the verb surfaces a clear `usage_error.details.reason:
353
395
  oauth_unregistered` pointing at `MONDAY_API_TOKEN`. Multi-profile
354
396
  config + per-profile credentials cache work fully against API
355
- tokens; OAuth registration revisits in v0.7.x / v0.8 contingent on
397
+ tokens; OAuth registration revisits in v0.8.x / v0.9 contingent on
356
398
  user demand.
357
399
 
358
- **v0.6.0 (the previous release):**
400
+ **v0.6.0 (the prior release):**
359
401
  the v0.5 surface PLUS files-shaped friendly `--set <file-col>=<path>`
360
402
  writes on `monday item set` + `monday item update` (single-item
361
403
  paths), closing the v0.4 → v0.5 → v0.6 carry-over of the inline
@@ -367,7 +409,7 @@ v0.6 surface is additive (M38 only). Built as a single milestone
367
409
  (M38). The bulk + create-time carve-outs deferred at v0.6-M38
368
410
  (D5 / D6) carry forward to v0.7 (above).
369
411
 
370
- **v0.5.0 (the prior release):**
412
+ **v0.5.0 (the earlier release):**
371
413
  the v0.4 surface PLUS the full team-writer surface
372
414
  (`monday user team-list/get/create/delete/add-members/remove-members`),
373
415
  the full Monday workdocs CRUD mutation surface — doc-level
@@ -377,7 +419,7 @@ and doc-content import (`monday doc import-html/append-markdown`) —
377
419
  closing the v0.4-M32 workdocs-mutation deferral. **16 new CLI
378
420
  verbs across 9 wire mutations.** Built incrementally across M34–M37.
379
421
 
380
- **v0.4.0 (the earlier release):**
422
+ **v0.4.0 (an even-earlier release):**
381
423
  the v0.3 surface PLUS long-poll item activity streaming
382
424
  (`monday item watch <iid>` — NDJSON), parallel bulk dispatch
383
425
  (`monday item update --where ... --concurrency <N>`), asset uploads
@@ -387,7 +429,7 @@ workdocs CRUD mutation surface deferred to v0.5; shipped at v0.5),
387
429
  and shell completion (`monday completion bash|zsh|fish`). Built
388
430
  incrementally across M29–M33.
389
431
 
390
- **v0.3.0 (an even-earlier release):**
432
+ **v0.3.0 (a yet-earlier release):**
391
433
  the v0.2 mutating core PLUS the Monday Dev convention layer
392
434
  (`monday dev` namespace — sprint / epic / release / task workflow
393
435
  shortcuts on top of standard board CRUD), multi-profile auth
@@ -780,16 +822,23 @@ row `tags`, `board_relation`, `dependency`.
780
822
  `unsupported_column_type` / `not_found` / `validation_failed`
781
823
  codes with `details.reason` discrimination).
782
824
 
783
- **v0.8 (next):** **Carry-forward backlog** (unpicked
825
+ **v0.9 (next):** **Carry-forward backlog** (unpicked
784
826
  candidates remain in cli-design.md §13 slipped-candidates list
785
- pending future candidate-selection sessions): multi-level
786
- subitems remain conditional on Monday's data model surfacing
787
- them (slipped from v0.4 v0.5 v0.6 v0.7 → v0.8 across
788
- four consecutive release-preps Monday's `sub_items_board`
789
- still carries no `subtasks` column at API `2026-01`, and v0.7
790
- pivoted away from API `2026-04` at 2026-05-20 so the data-
791
- model probe gate moves to v0.8's planned `2026-07` pin);
792
- cross-board `item move` value-overrides (Monday's
827
+ pending future candidate-selection sessions). The v0.6-M38 D2
828
+ multi-file `--set` + D7 stdin file-`--set` deferrals **SHIPPED**
829
+ at v0.8-M46 / v0.8-M47, so they leave the backlog. Still
830
+ deferred: the original v0.8 SKELETON's user-entity migration
831
+ (M44) + `user activity` (M45) + the Monday API `2026-07` pin
832
+ defer pending `@mondaydotcomorg/api` SDK 16.x; the v0.7-deferred
833
+ M39 (API `2026-04` pin) + M40 (`item set-description`) + M41
834
+ (`doc block-create-bulk`) re-open when SDK 15.x ships `2026-04`
835
+ natively AND a paid-tier sandbox is available for the M40 wire
836
+ probe (v0.8 stayed on `2026-01` — SDK still 14.0.0, no 15.x/16.x
837
+ published). Multi-level subitems remain conditional on Monday's
838
+ data model surfacing them (slipped from v0.4 → v0.5 → v0.6 →
839
+ v0.7 → v0.8 → v0.9 across five consecutive release-preps —
840
+ Monday's `sub_items_board` still carries no `subtasks` column at
841
+ API `2026-01`); cross-board `item move` value-overrides (Monday's
793
842
  `ColumnMappingInput` still carries no value slot — slipped four
794
843
  times for the same reason); resumable cross-board cursor
795
844
  pagination (per-board cursor-lifetime under aggregation needs
@@ -799,14 +848,7 @@ cli/config.toml` with a `[profiles.<name>.defaults]` table
799
848
  carrying scoping args; requires a prerequisite §13 carve-out
800
849
  Decision at pre-flight distinguishing aliases-as-stored-
801
850
  command-strings (still non-goal) from defaults-as-stored-flag-
802
- values (carve-out)). Multi-file `--set` per call (v0.6-M38 D2
803
- deferral) and file-`--set` stdin support (v0.6-M38 D7 deferral)
804
- remain v0.7.x / future candidates. **v0.7-deferred milestones**:
805
- M39 (API pin `2026-04`) + M40 (`item set-description`) + M41
806
- (`doc block-create-bulk`) re-open when `@mondaydotcomorg/api`
807
- SDK 15.x ships natively — earliest target is v0.8 if Monday's
808
- SDK cadence holds (≈2 months between major SDK bumps per the
809
- 13.0.0 / 14.0.0 / 15.0.0 trajectory).
851
+ values (carve-out)).
810
852
 
811
853
  See [`docs/cli-design.md`](./docs/cli-design.md) §13 for the
812
854
  full roadmap, [`docs/v0.6-plan.md`](./docs/v0.6-plan.md) for the
@@ -239,9 +239,9 @@ export interface AddFileToColumnInputs {
239
239
  * explicitly — `MondayClient.signal` is private + multipart
240
240
  * dispatch bypasses `MondayClient.raw`, so no implicit fallback
241
241
  * exists. Abort propagation follows the standard
242
- * `--timeout` / SIGINT plumbing (`src/api/transport.ts`'s
243
- * `combineSignals` mirrors the multipart-transport's own
244
- * combined-signal logic at IMPL).
242
+ * `--timeout` / SIGINT plumbing (the shared `combineSignals` in
243
+ * `src/api/fetch-transport-helpers.ts`, used by both the JSON +
244
+ * multipart transports R-v0.8-NEW-11 lift).
245
245
  *
246
246
  * **Retry semantics pinned (cli-design §2.5).** Asset upload
247
247
  * honors the global `--retry <n>` contract: the IMPL session
@@ -151,13 +151,20 @@ export declare const isReadOnlyForeverType: (type: string) => type is ReadOnlyFo
151
151
  * under the §5.8 orphan-warn atomicity envelope (D1 closure).
152
152
  *
153
153
  * Mutex rules at the resolution boundary (D2 closures + folded
154
- * D5/D6): multi-file `--set` rejects universally
155
- * (`multi_file_set_unsupported`); mixed file + value `--set` /
156
- * `--set-raw` / `--name` rejects on `'item_set'` /
157
- * `'item_update_single'` / `'item_update_bulk'` callShapes
158
- * (`mixed_file_and_value_sets`), SUPPRESSED on `'item_create'`
159
- * per v0.7-M43 asymmetry (`create_item` natively bundles
160
- * non-file `column_values` atomically into leg-1).
154
+ * D5/D6/D2-multi): multi-file `--set` carved out at v0.8-M46 for
155
+ * the 3 reachable callShapes routes through new `'file_multi'`
156
+ * / `'file_bulk_multi'` / `'file_create_multi'` enforcement kinds
157
+ * for per-item multi-leg fan-out (sequential within an item ×
158
+ * parallel across items for bulk per M42's `dispatchParallel`).
159
+ * The `'multi_file_set_unsupported'` literal stays RESERVED post-
160
+ * fold; the throw remains for the `'item_set'` callShape as a
161
+ * defensive type-system ceiling (argv-unreachable on the single-
162
+ * positional verb). Mixed file + value `--set` / `--set-raw` /
163
+ * `--name` rejects on `'item_set'` / `'item_update_single'` /
164
+ * `'item_update_bulk'` callShapes (`mixed_file_and_value_sets`),
165
+ * SUPPRESSED on `'item_create'` per v0.7-M43 asymmetry
166
+ * (`create_item` natively bundles non-file `column_values`
167
+ * atomically into leg-1).
161
168
  *
162
169
  * The `--set-raw <file-col>=<json>` form STAYS REJECTED per D3
163
170
  * closure — Monday's wire has no JSON-shape for
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,mBAAmB,GACnB,cAAc,CAAC;AAEnB,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;IAClD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,gCAAgC,GAC3C,MAAM,MAAM,KACX,6BAA6B,GAAG,IAgBlC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,MAAM,8BAA8B,GACtC,cAAc,GACd,mBAAmB,GACnB,cAAc,CAAC;AAEnB,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;IAClD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,gCAAgC,GAC3C,MAAM,MAAM,KACX,6BAA6B,GAAG,IAgBlC,CAAC"}
@@ -213,13 +213,20 @@ export const isReadOnlyForeverType = (type) => READ_ONLY_FOREVER_SET.has(type);
213
213
  * under the §5.8 orphan-warn atomicity envelope (D1 closure).
214
214
  *
215
215
  * Mutex rules at the resolution boundary (D2 closures + folded
216
- * D5/D6): multi-file `--set` rejects universally
217
- * (`multi_file_set_unsupported`); mixed file + value `--set` /
218
- * `--set-raw` / `--name` rejects on `'item_set'` /
219
- * `'item_update_single'` / `'item_update_bulk'` callShapes
220
- * (`mixed_file_and_value_sets`), SUPPRESSED on `'item_create'`
221
- * per v0.7-M43 asymmetry (`create_item` natively bundles
222
- * non-file `column_values` atomically into leg-1).
216
+ * D5/D6/D2-multi): multi-file `--set` carved out at v0.8-M46 for
217
+ * the 3 reachable callShapes routes through new `'file_multi'`
218
+ * / `'file_bulk_multi'` / `'file_create_multi'` enforcement kinds
219
+ * for per-item multi-leg fan-out (sequential within an item ×
220
+ * parallel across items for bulk per M42's `dispatchParallel`).
221
+ * The `'multi_file_set_unsupported'` literal stays RESERVED post-
222
+ * fold; the throw remains for the `'item_set'` callShape as a
223
+ * defensive type-system ceiling (argv-unreachable on the single-
224
+ * positional verb). Mixed file + value `--set` / `--set-raw` /
225
+ * `--name` rejects on `'item_set'` / `'item_update_single'` /
226
+ * `'item_update_bulk'` callShapes (`mixed_file_and_value_sets`),
227
+ * SUPPRESSED on `'item_create'` per v0.7-M43 asymmetry
228
+ * (`create_item` natively bundles non-file `column_values`
229
+ * atomically into leg-1).
223
230
  *
224
231
  * The `--set-raw <file-col>=<json>` form STAYS REJECTED per D3
225
232
  * closure — Monday's wire has no JSON-shape for
@@ -1 +1 @@
1
- {"version":3,"file":"column-types.js","sourceRoot":"","sources":["../../src/api/column-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM;IACN,WAAW;IACX,SAAS;IACT,QAAQ;IACR,UAAU;IACV,MAAM;IACN,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,gEAAgE;IAChE,gEAAgE;IAChE,mEAAmE;IACnE,wBAAwB;IACxB,MAAM;IACN,iDAAiD;IACjD,4DAA4D;IAC5D,mDAAmD;IACnD,4BAA4B;IAC5B,gBAAgB;IAChB,qDAAqD;IACrD,8DAA8D;IAC9D,qDAAqD;IACrD,8DAA8D;IAC9D,4DAA4D;IAC5D,wCAAwC;IACxC,YAAY;CACJ,CAAC;AAIX,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAS,qBAAqB,CAAC,CAAC;AAEtF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAA8B,EAAE,CAC/E,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE9B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAkB,EAAW,EAAE;IACjE,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;AACzC,0DAA0D;AAC1D,iEAAiE;AACjE,8DAA8D;AAC9D,yDAAyD;AACzD,0DAA0D;AAC1D,+DAA+D;AAC/D,2DAA2D;AAC3D,6DAA6D;AAC7D,wDAAwD;CAChD,CAAC;AAKX,MAAM,yBAAyB,GAAwB,IAAI,GAAG,CAC5D,2BAA2B,CAC5B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,IAAY,EACqB,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,QAAQ;IACR,SAAS;IACT,aAAa;IACb,cAAc;IACd,cAAc;IACd,SAAS;IACT,qEAAqE;IACrE,kEAAkE;IAClE,oEAAoE;IACpE,+DAA+D;IAC/D,kEAAkE;IAClE,gEAAgE;IAChE,qDAAqD;IACrD,gBAAgB;CACR,CAAC;AAIX,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CACxD,uBAAuB,CACxB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAA+B,EAAE,CACjF,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,CAAU,CAAC;AAIpD,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CACnD,kBAAkB,CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAA2B,EAAE,CACzE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AA0C7B,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,IAAY,EACW,EAAE;IACzB,IAAI,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,uBAAuB,CAAC;IACxE,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,mBAAmB,CAAC;IAChE,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAsFF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,IAAY,EAC0B,EAAE;IACxC,IAAI,oBAAoB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,QAAQ,EAAE,cAAc;YACxB,kBAAkB,EAChB,6ZAA6Z;SACha,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,cAAc;QACxB,kBAAkB,EAAE,wBAAwB;KAC7C,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"column-types.js","sourceRoot":"","sources":["../../src/api/column-types.ts"],"names":[],"mappings":"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"}