monday-cli 0.6.0 → 0.7.1
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.
- package/CHANGELOG.md +438 -0
- package/README.md +165 -52
- package/dist/api/board-metadata.d.ts +7 -4
- package/dist/api/board-metadata.d.ts.map +1 -1
- package/dist/api/board-metadata.js +21 -6
- package/dist/api/board-metadata.js.map +1 -1
- package/dist/api/column-types.d.ts +61 -28
- package/dist/api/column-types.d.ts.map +1 -1
- package/dist/api/column-types.js +32 -13
- package/dist/api/column-types.js.map +1 -1
- package/dist/api/column-values.d.ts +22 -17
- package/dist/api/column-values.d.ts.map +1 -1
- package/dist/api/column-values.js +50 -34
- package/dist/api/column-values.js.map +1 -1
- package/dist/api/file-column-set.d.ts +164 -58
- package/dist/api/file-column-set.d.ts.map +1 -1
- package/dist/api/file-column-set.js +168 -110
- package/dist/api/file-column-set.js.map +1 -1
- package/dist/api/raw-write.d.ts +29 -18
- package/dist/api/raw-write.d.ts.map +1 -1
- package/dist/api/raw-write.js +48 -26
- package/dist/api/raw-write.js.map +1 -1
- package/dist/commands/board/column-create.d.ts +11 -6
- package/dist/commands/board/column-create.d.ts.map +1 -1
- package/dist/commands/board/column-create.js +23 -12
- package/dist/commands/board/column-create.js.map +1 -1
- package/dist/commands/board/describe.d.ts +5 -3
- package/dist/commands/board/describe.d.ts.map +1 -1
- package/dist/commands/board/describe.js +12 -4
- package/dist/commands/board/describe.js.map +1 -1
- package/dist/commands/emit.d.ts.map +1 -1
- package/dist/commands/emit.js +19 -16
- package/dist/commands/emit.js.map +1 -1
- package/dist/commands/item/create.d.ts +24 -8
- package/dist/commands/item/create.d.ts.map +1 -1
- package/dist/commands/item/create.js +494 -35
- package/dist/commands/item/create.js.map +1 -1
- package/dist/commands/item/update.d.ts +175 -6
- package/dist/commands/item/update.d.ts.map +1 -1
- package/dist/commands/item/update.js +697 -29
- package/dist/commands/item/update.js.map +1 -1
- package/dist/utils/output/select.d.ts +22 -0
- package/dist/utils/output/select.d.ts.map +1 -1
- package/dist/utils/output/select.js +30 -0
- package/dist/utils/output/select.js.map +1 -1
- package/dist/utils/output/table.d.ts +9 -0
- package/dist/utils/output/table.d.ts.map +1 -1
- package/dist/utils/output/table.js +13 -3
- package/dist/utils/output/table.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/update/body-source.d.ts +0 -38
- package/dist/commands/update/body-source.d.ts.map +0 -1
- package/dist/commands/update/body-source.js +0 -80
- package/dist/commands/update/body-source.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,444 @@ 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-20 — Live-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.
|
|
59
|
+
|
|
60
|
+
## [0.7.0] - 2026-05-20 — Bulk + create-time file `--set` carve-out folds (M42 + M43)
|
|
61
|
+
|
|
62
|
+
The "friendly file `--set` reaches every callShape" milestone —
|
|
63
|
+
v0.6-M38's single-item friendly file-column writer gains the two
|
|
64
|
+
carve-outs deferred at M38: bulk `monday item update --where ...
|
|
65
|
+
--set <file-col>=<path>` per-item multipart fan-out (M42, closes
|
|
66
|
+
D5) and create-time `monday item create --set <file-col>=<path>`
|
|
67
|
+
two-leg dispatch under the §5.8 orphan-warn atomicity envelope
|
|
68
|
+
(M43, closes D6). The friendly file-`--set` form now reaches
|
|
69
|
+
every CLI callShape (`item set` / `item update <iid>` / `item
|
|
70
|
+
update --where` / `item create`). **No breaking changes vs
|
|
71
|
+
`0.6.0` — every v0.7 surface is additive.** Built incrementally
|
|
72
|
+
across M42 + M43.
|
|
73
|
+
|
|
74
|
+
**Pivot note 2026-05-20.** The originally-planned API `2026-04`
|
|
75
|
+
pin (M39) + `monday item set-description` (M40) + `monday doc
|
|
76
|
+
block-create-bulk <did>` (M41) cluster was **DEFERRED** to a
|
|
77
|
+
future release pending `@mondaydotcomorg/api` SDK 15.x publishing
|
|
78
|
+
with `CURRENT_VERSION = '2026-04'` natively. M39's string-literal
|
|
79
|
+
override path was explored then abandoned after M40's empirical
|
|
80
|
+
probe revealed paid-tier feature gating + opaque
|
|
81
|
+
`INTERNAL_SERVER_ERROR { service: 'docs-api' }` on free-tier
|
|
82
|
+
accounts at every payload size — not worth the override-
|
|
83
|
+
maintenance overhead for a single user-blocked verb. Re-attempt
|
|
84
|
+
expected at v0.8 if Monday's SDK cadence holds (≈2 months between
|
|
85
|
+
major SDK bumps per the 13.0.0 / 14.0.0 / 15.0.0 trajectory) AND
|
|
86
|
+
a paid-tier sandbox is available for the M40 wire probe.
|
|
87
|
+
|
|
88
|
+
### Breaking changes vs `0.6.0`
|
|
89
|
+
|
|
90
|
+
**None.** Every command, error code, envelope key, and warning
|
|
91
|
+
shape shipped in v0.6.0 is preserved byte-for-byte. v0.7 only adds.
|
|
92
|
+
|
|
93
|
+
### Surface
|
|
94
|
+
|
|
95
|
+
**117 commands shipped (unchanged from v0.6).** M42 + M43 extend
|
|
96
|
+
two existing verbs (`monday item update` bulk dispatch leg +
|
|
97
|
+
`monday item create` action body) with new file-column dispatch
|
|
98
|
+
branches rather than introducing new noun namespaces or verbs.
|
|
99
|
+
The friendly translator (`translateColumnValueAsync`) stays
|
|
100
|
+
JSON-output-shaped for the 13 existing writable types; file-
|
|
101
|
+
column dispatch routes through v0.6-M38's
|
|
102
|
+
`executeFileColumnSet` sibling module (the new bulk + create-
|
|
103
|
+
time paths consume the M38 helper rather than duplicating it).
|
|
104
|
+
|
|
105
|
+
**Bulk file `--set` (M42) — `monday item update --where ...
|
|
106
|
+
--set <file-col>=<path>`.** Per-item multipart fan-out across
|
|
107
|
+
the `--where`-resolved item-id set, dispatched through the
|
|
108
|
+
existing v0.4-M30 `dispatchParallel` over a shared
|
|
109
|
+
`MultipartTransport` (per D1 closure — no new transport seam;
|
|
110
|
+
the parallel-multipart cross-product of M30's bulk-concurrency
|
|
111
|
+
+ M31's multipart wire was already pinned). New helper
|
|
112
|
+
`runItemUpdateBulkFileDispatch` (in `src/commands/item/
|
|
113
|
+
update.ts`) mirrors M25's partial-success shape with `asset`
|
|
114
|
+
slot replacing `item` slot (per D2 closure):
|
|
115
|
+
`data.results[i].asset: { id, name, ... }` on success;
|
|
116
|
+
`data.results[i].error: { code, message }` under
|
|
117
|
+
`--continue-on-error`. Aggregate `data.summary` extends M25's
|
|
118
|
+
`partialSuccessBulkUpdateDataSchema` with three new slots
|
|
119
|
+
(`column_id` / `filename` / `file_size_bytes`) echoing the
|
|
120
|
+
dispatched file alongside `matched_count` / `applied_count` /
|
|
121
|
+
`failed_count` / `board_id`. New `data.operation:
|
|
122
|
+
'item_update_bulk_file_set'` literal discriminator (distinct
|
|
123
|
+
from M25's `'item_update'`) so agents branch uniformly on
|
|
124
|
+
`data.operation`. `--concurrency 1..32` (default 1) opts into
|
|
125
|
+
bounded parallel dispatch per the v0.4-M30 range; `--continue-
|
|
126
|
+
on-error` partitions per-item wire failures into the partial-
|
|
127
|
+
success envelope while leaving whole-call-abort semantics for
|
|
128
|
+
the upfront local file pre-check (per D3 closure —
|
|
129
|
+
`precheckLocalFile` fires ONCE upfront per cli-design §5.8 "pre-
|
|
130
|
+
checks MUST fire BEFORE any wire round-trip" before the dispatch
|
|
131
|
+
loop, since the bulk shape has ONE file path shared across N
|
|
132
|
+
matched items).
|
|
133
|
+
|
|
134
|
+
**Create-time file `--set` (M43) — `monday item create --set
|
|
135
|
+
<file-col>=<path>`.** Two-leg dispatch routes through the new
|
|
136
|
+
`runItemCreateFileDispatch` helper (in `src/commands/item/
|
|
137
|
+
create.ts`): leg-1 `create_item` bundles the non-file
|
|
138
|
+
`column_values` atomically into the wire call; leg-2
|
|
139
|
+
`add_file_to_column` attaches the file to the newly-created
|
|
140
|
+
item. Pair is non-atomic by construction (Monday has no single-
|
|
141
|
+
wire create-item-with-file mutation at API `2026-01`). The atomicity
|
|
142
|
+
envelope shape closed at D1 to **(b) orphan-warn** rather than
|
|
143
|
+
(a) automatic rollback — the pre-flight rollback-viability probe
|
|
144
|
+
could not run empirically (the token lacked `create_item`
|
|
145
|
+
permission in token-created sandbox workspaces + existing-board
|
|
146
|
+
attempts were correctly blocked by harness modify-shared-state
|
|
147
|
+
guards), so defaulting to orphan-warn preserves the agent's
|
|
148
|
+
recovery handle without introducing a destructive `delete_item`
|
|
149
|
+
cleanup leg whose own failure mode is unaccounted for. Leg-2
|
|
150
|
+
failure surfaces `internal_error` with `details.reason:
|
|
151
|
+
'create_then_file_upload_partial_failure'` + `details.
|
|
152
|
+
created_item_id` echoing leg-1's orphan + `details.column_id`
|
|
153
|
+
(the resolved file-column ID) + `details.cause` (the M31 wire-
|
|
154
|
+
failure JSON projection) + `details.hint` directing agents to
|
|
155
|
+
retry leg-2 alone (`monday item set <iid> <file-col>=<path>`)
|
|
156
|
+
OR rollback (`monday item delete <iid> --yes`). `--dry-run`
|
|
157
|
+
emits two `planned_changes` entries per D2 closure
|
|
158
|
+
(`operation: 'create_item'` / `'create_subitem'` with bundled
|
|
159
|
+
non-file `column_values`, then `operation:
|
|
160
|
+
'add_file_to_column'` with the file pre-check echo); the leg-2
|
|
161
|
+
entry carries no `item_id` slot because the item doesn't exist
|
|
162
|
+
at dry-run time. **D6 mixed-set mutex SUPPRESSED on
|
|
163
|
+
`'item_create'`** per the asymmetry closure — `create_item`
|
|
164
|
+
natively bundles non-file `column_values` atomically into leg-
|
|
165
|
+
1, so a multi-`--set` mix of file + non-file entries is
|
|
166
|
+
legitimate at create time (unlike single-item / bulk
|
|
167
|
+
callShapes where Monday's `change_multiple_column_values`
|
|
168
|
+
doesn't accept files). The universal multi-file mutex still
|
|
169
|
+
applies — 2+ file entries reject with `usage_error.details.
|
|
170
|
+
reason: 'multi_file_set_unsupported'`.
|
|
171
|
+
|
|
172
|
+
**Mutex rules at v0.7 (universal across all four callShapes
|
|
173
|
+
post-M42 + M43).**
|
|
174
|
+
|
|
175
|
+
- **Exactly ONE file `--set <file-col>=<path>` per call** across
|
|
176
|
+
every callShape (`'item_set'` / `'item_update_single'` /
|
|
177
|
+
`'item_update_bulk'` / `'item_create'`). 2+ file entries
|
|
178
|
+
reject with `usage_error.details.reason:
|
|
179
|
+
'multi_file_set_unsupported'`.
|
|
180
|
+
- **Mixing a file `--set` with any value `--set` / `--set-raw`
|
|
181
|
+
/ `--name`** rejects with `usage_error.details.reason:
|
|
182
|
+
'mixed_file_and_value_sets'` on `'item_set'` /
|
|
183
|
+
`'item_update_single'` / `'item_update_bulk'`. **SUPPRESSED**
|
|
184
|
+
on `'item_create'` per D6 asymmetry — `create_item` bundles
|
|
185
|
+
non-file `column_values` atomically into leg-1, so the mix
|
|
186
|
+
is legitimate at create time.
|
|
187
|
+
|
|
188
|
+
Enforcement fires at the column-resolution boundary (parse-time
|
|
189
|
+
can't know — the column type only resolves after board metadata
|
|
190
|
+
loads); rejection happens BEFORE any multipart bytes get
|
|
191
|
+
constructed.
|
|
192
|
+
|
|
193
|
+
**`--set-raw <file-col>=<json>` STAYS REJECTED at v0.7
|
|
194
|
+
(unchanged from v0.6-M38 D3 — PERMANENT, not deferred).**
|
|
195
|
+
Monday's wire has no JSON shape for `change_column_value` on
|
|
196
|
+
file columns; the rejection at `src/api/raw-write.ts:
|
|
197
|
+
translateRawColumnValue` carries `details.hint` pointing at
|
|
198
|
+
the friendly `--set` form (now universal across callShapes per
|
|
199
|
+
M42 + M43) AND the v0.4-M31 verb-shaped `monday item upload`.
|
|
200
|
+
|
|
201
|
+
### Output contract additions
|
|
202
|
+
|
|
203
|
+
**No new stable error codes — registry stays at 29.** Per D3
|
|
204
|
+
closure on M42 + D3 closure on M43, every v0.7 rejection routes
|
|
205
|
+
through existing codes (`usage_error` / `unsupported_column_
|
|
206
|
+
type` / `not_found` / `validation_failed` / `internal_error`)
|
|
207
|
+
with `details.reason` literal-string discriminators. **One new
|
|
208
|
+
discriminator literal lands at v0.7:** M43's
|
|
209
|
+
`'create_then_file_upload_partial_failure'` (M43 leg-2 partial-
|
|
210
|
+
failure orphan-warn envelope) joins the existing M38-era
|
|
211
|
+
discriminators (`mixed_file_and_value_sets` /
|
|
212
|
+
`multi_file_set_unsupported` / `file_set_on_bulk_unsupported` /
|
|
213
|
+
`file_set_on_create_unsupported`) under the R-v0.6-NEW-2
|
|
214
|
+
discriminated-union per-status-detail pattern.
|
|
215
|
+
|
|
216
|
+
**R-v0.6-NEW-2 graduates at the 5-consumer threshold post-M43.**
|
|
217
|
+
The discriminator pattern (4 supporting instances at v0.6 close)
|
|
218
|
+
crossed the threshold with M43's new discriminator literal as
|
|
219
|
+
the 5th. Graduation lifts the pattern from "watch-item" to
|
|
220
|
+
"ratified design idiom" — future milestones touching the
|
|
221
|
+
`details.reason` per-status-detail surface inherit the pattern
|
|
222
|
+
without further filing.
|
|
223
|
+
|
|
224
|
+
**New aggregate envelope slots for M42 bulk file dispatch.**
|
|
225
|
+
`data.summary.{column_id, filename, file_size_bytes}` extend
|
|
226
|
+
M25's `partialSuccessBulkUpdateDataSchema` with file-dispatch
|
|
227
|
+
echo slots so agents reading the success envelope see which
|
|
228
|
+
file was dispatched + where. `column_id` echoes the resolved
|
|
229
|
+
file-column ID; `filename` echoes the basename; `file_size_
|
|
230
|
+
bytes` echoes the `fs.stat()` size in bytes (no file bytes are
|
|
231
|
+
loaded into memory at envelope-time — the size is captured
|
|
232
|
+
pre-dispatch in the `precheckLocalFile` step).
|
|
233
|
+
|
|
234
|
+
**New M43 orphan-warn envelope on `data.operation:
|
|
235
|
+
'item_create'` leg-2 failure.** Beyond the existing M38-era
|
|
236
|
+
`add_file_to_column` failure envelope, M43 leg-2 failure
|
|
237
|
+
surfaces a 5-slot details bag: `reason` (literal
|
|
238
|
+
`'create_then_file_upload_partial_failure'`) + `created_item_
|
|
239
|
+
id` (the orphaned leg-1 item ID) + `column_id` (the resolved
|
|
240
|
+
file-column ID) + `cause` (the M31 wire-failure JSON
|
|
241
|
+
projection) + `hint` (the recovery-path English string).
|
|
242
|
+
|
|
243
|
+
**No new envelope keys, no new warning shapes** outside the M42
|
|
244
|
+
`data.summary` extension above. M42 + M43 reuse the M31
|
|
245
|
+
multipart wire's success envelope shape + the post-success
|
|
246
|
+
eager-invalidation contract (`invalidateBoard(boardId)` fires
|
|
247
|
+
single-leg on multipart success across all 4 callShapes).
|
|
248
|
+
|
|
249
|
+
### Upgrade notes
|
|
250
|
+
|
|
251
|
+
- **`unsupported_column_type` `deferred_to: "v0.6"` for the
|
|
252
|
+
files-shaped category on bulk + create paths is DROPPED.**
|
|
253
|
+
v0.7-M42 picks up the bulk path (per-item multipart fan-out
|
|
254
|
+
under `--concurrency` / `--continue-on-error`); v0.7-M43
|
|
255
|
+
picks up the create-time path (two-leg dispatch under §5.8
|
|
256
|
+
orphan-warn). The rejection row at `src/api/column-values.ts`
|
|
257
|
+
(the files-shaped row of the friendly translator) no longer
|
|
258
|
+
fires on `item create` or `item update --where` — those paths
|
|
259
|
+
now dispatch to the appropriate helper BEFORE the translator
|
|
260
|
+
row fires. The v0.6-M38 literals `'file_set_on_bulk_
|
|
261
|
+
unsupported'` and `'file_set_on_create_unsupported'` STAY
|
|
262
|
+
RESERVED in docstrings + regression-guarded by integration
|
|
263
|
+
tests; the runtime path no longer surfaces them. Agents that
|
|
264
|
+
branched on either literal will instead receive the success
|
|
265
|
+
envelopes documented above OR a leg-2 failure under M43's
|
|
266
|
+
orphan-warn shape.
|
|
267
|
+
- **`--set-raw <file-col>=<json>` STAYS REJECTED (unchanged
|
|
268
|
+
from v0.6-M38 D3, PERMANENT).** Monday's wire has no JSON
|
|
269
|
+
shape for files-shaped `change_column_value`. The rejection
|
|
270
|
+
hint at `src/api/raw-write.ts` names BOTH the friendly `--set`
|
|
271
|
+
form (now universal across callShapes) AND the v0.4-M31
|
|
272
|
+
`monday item upload` verb.
|
|
273
|
+
- **Multi-level subitem creation slips from `"v0.7"` →
|
|
274
|
+
`"v0.8"`.** Originally slipped from v0.3 → v0.4 → v0.5 → v0.6
|
|
275
|
+
→ v0.7 across four prior release-preps. v0.7 didn't pick it
|
|
276
|
+
up (v0.7 pivoted away from API `2026-04` at 2026-05-20 so
|
|
277
|
+
the data-model probe gate moves to v0.8's planned `2026-07`
|
|
278
|
+
pin; Monday's `sub_items_board` still carries no `subtasks`
|
|
279
|
+
column at API `2026-01`). The `error.code: "usage_error"` +
|
|
280
|
+
`details.hierarchy_type: "multi_level"` keys are unchanged;
|
|
281
|
+
only the `deferred_to` literal flipped.
|
|
282
|
+
- **Cross-board `item move` value-overrides slips from `"v0.7"`
|
|
283
|
+
→ `"v0.8"`.** Slipped across v0.3-M11 → v0.4 → v0.5 → v0.6
|
|
284
|
+
→ v0.7 → v0.8 release-preps. Monday's `ColumnMappingInput`
|
|
285
|
+
still carries no value slot; the cross-leg partial-failure
|
|
286
|
+
envelope question stays open.
|
|
287
|
+
- **Cross-board resumable cursor slips from `"v0.7"` →
|
|
288
|
+
`"v0.8"`.** Slot remains for the per-board cursor-lifetime
|
|
289
|
+
under-aggregation design issue. The `cross_board_truncated`
|
|
290
|
+
warning's `details.hint` continues to recommend narrowing via
|
|
291
|
+
`--workspace` / `--favorites` / `--max-boards`.
|
|
292
|
+
- **Multi-file `--set` per call (v0.6-M38 D2) and file-`--set`
|
|
293
|
+
stdin support (v0.6-M38 D7) remain v0.7.x / future
|
|
294
|
+
candidates.** M42 pinned the per-item file-dispatch envelope;
|
|
295
|
+
multi-file would now revisit with M42's shape as the per-
|
|
296
|
+
item baseline.
|
|
297
|
+
- **`monday auth login` placeholder-guard unchanged.** The verb
|
|
298
|
+
is still registered and still surfaces `usage_error.details.
|
|
299
|
+
reason: oauth_unregistered` pointing at `MONDAY_API_TOKEN`
|
|
300
|
+
(unchanged from v0.6.0). The OAuth deferral revisits in
|
|
301
|
+
v0.7.x / v0.8 contingent on user demand.
|
|
302
|
+
- **Stable error-code registry stays at 29.** Existing codes'
|
|
303
|
+
shapes are unchanged across v0.6 → v0.7.
|
|
304
|
+
|
|
305
|
+
### Internals worth highlighting
|
|
306
|
+
|
|
307
|
+
- **R-v0.6-NEW-1 graduates at the 5-consumer threshold post-
|
|
308
|
+
M43.** The `file-source.ts` two-export module (`precheck
|
|
309
|
+
LocalFile` + `buildBlobFromPath`) added at v0.6-M38 IMPL
|
|
310
|
+
kickoff (`3c2a9b0`, ahead-of-feat 3-consumer lift) scaled to
|
|
311
|
+
5 consumers post-v0.7: M31 `item upload` + M31 `update
|
|
312
|
+
upload` + M38 single-item `executeFileColumnSet` + M42 bulk
|
|
313
|
+
`runItemUpdateBulkFileDispatch` + M43 create-time
|
|
314
|
+
`runItemCreateFileDispatch`. Helper internal shape unchanged
|
|
315
|
+
across all 5 consumers — graduation earned.
|
|
316
|
+
- **R-v0.6-NEW-2 graduates at the 5-consumer threshold post-
|
|
317
|
+
M43.** The `details.reason` discriminated-union per-status-
|
|
318
|
+
detail pattern (4 supporting instances at v0.6 close —
|
|
319
|
+
`mixed_file_and_value_sets` / `multi_file_set_unsupported` /
|
|
320
|
+
`file_set_on_create_unsupported` / `file_set_on_bulk_
|
|
321
|
+
unsupported`) crossed the threshold with M43's new
|
|
322
|
+
`create_then_file_upload_partial_failure` literal as the 5th.
|
|
323
|
+
- **R-NEW-82 graduated at the 5th-consecutive consumer.** The
|
|
324
|
+
release-prep cross-doc grep for stale `deferred_to:
|
|
325
|
+
"v<currently-releasing-version>"` slots fired and caught
|
|
326
|
+
one stale site (multi-level subitem `--parent` rejection —
|
|
327
|
+
slipped to `"v0.8"`) plus one ToC drift (v0.7-M42 + v0.7-M43
|
|
328
|
+
friendly file `--set` annotations missing from `docs/output-
|
|
329
|
+
shapes.md`'s `item (mutations)` row). Mirrors v0.3-M28 (1st)
|
|
330
|
+
/ v0.4 (2nd) / v0.5 (3rd) / v0.6 (4th) / v0.7 (5th) release-
|
|
331
|
+
prep ratifications.
|
|
332
|
+
- **R-NEW-84 graduated discipline applied.** The v0.7 release-
|
|
333
|
+
prep cluster ships zero production `src/**/*.ts` semantic
|
|
334
|
+
changes (only the literal `'v0.7'` → `'v0.8'` flip in the
|
|
335
|
+
multi-level subitem rejection slot); gates carry verification
|
|
336
|
+
per the R-NEW-84 carve-out (skip Codex review on mechanical /
|
|
337
|
+
process-only clusters).
|
|
338
|
+
- **R-v0.7-NEW-4 (Pre-IMPL contract-term checklist) graduated
|
|
339
|
+
at v0.7-M42 IMPL R7 + refined at R8.** The discipline lives
|
|
340
|
+
in `.claude/rules/workflow.md` as a permanent rule. v0.7-M43
|
|
341
|
+
IMPL inherited the checklist + extended it with a "round-
|
|
342
|
+
agnostic framing" sub-rule at R3, and converged in 4 fix-up
|
|
343
|
+
rounds vs M42's 8 — graduation earned its keep.
|
|
344
|
+
- **R-NEW-76 graduated** from "stub-anchored ordering invariant"
|
|
345
|
+
to "wire-dispatch-anchored ordering invariant" at v0.7-M43
|
|
346
|
+
IMPL — post-IMPL the c8 boundary is gone but the `parseArgv`-
|
|
347
|
+
BEFORE-dispatch ordering itself stays load-bearing (argv-
|
|
348
|
+
level failures surface as `usage_error`, not
|
|
349
|
+
`internal_error`).
|
|
350
|
+
- **M42 IMPL converged in 8 fix-up rounds.** R1 closed the
|
|
351
|
+
behavioral surface (`foldAndRemap` + `SourceAggregator` +
|
|
352
|
+
fail-fast partial-success invalidate); R2-R8 were W9-prose-
|
|
353
|
+
only (no behavioral findings, asymptotic prose convergence
|
|
354
|
+
pattern that motivated the R-v0.7-NEW-4 graduation).
|
|
355
|
+
- **M43 IMPL converged in 4 fix-up rounds.** R1 closed the
|
|
356
|
+
behavioral surface; R2-R3 trailing W9 prose drift; R4
|
|
357
|
+
CONVERGED with zero findings. M43 inherited R-v0.7-NEW-4
|
|
358
|
+
from M42's graduation, short-circuiting the W9 cycle from
|
|
359
|
+
M42's 8 rounds down to 4.
|
|
360
|
+
- **Audit-fix folded into version-bump per security.md "high
|
|
361
|
+
= merge blocker" interpretation.** v0.6 release-prep
|
|
362
|
+
established the inline audit-fix precedent at version-bump;
|
|
363
|
+
v0.7 release-prep applied it: `npm audit` flagged
|
|
364
|
+
`brace-expansion@5.0.2` (moderate severity —
|
|
365
|
+
GHSA-jxxr-4gwj-5jf2 large-numeric-range DoS-protection
|
|
366
|
+
defeat); `npm audit fix` cleanly resolved via the lockfile
|
|
367
|
+
to `5.0.5+` (non-breaking transitive through eslint's
|
|
368
|
+
minimatch chain). `npm audit` reports `0 vulnerabilities`
|
|
369
|
+
post-fix.
|
|
370
|
+
- **Two-AI review** ran for v0.7-M42 pre-flight + IMPL, v0.7-
|
|
371
|
+
M43 pre-flight + IMPL. M42 IMPL converged in 8 fix-up rounds
|
|
372
|
+
(1 behavioral + 7 W9 prose); M43 IMPL converged in 4 (1
|
|
373
|
+
behavioral + 2 W9 + 1 zero-finding CONVERGED). The v0.7
|
|
374
|
+
release-prep cluster skipped Codex per R-NEW-84. Cumulative
|
|
375
|
+
Codex breakdowns live in the per-milestone post-mortems in
|
|
376
|
+
[`docs/v0.7-plan.md`](./docs/v0.7-plan.md) §3.
|
|
377
|
+
|
|
378
|
+
### Tests + quality gates
|
|
379
|
+
|
|
380
|
+
- **4124 unit/integration + E2E tests** at v0.7.0 (+1 skipped;
|
|
381
|
+
was 4100 + 1 at v0.6.0; +24 net for M42 + M43 — ~15 new tests
|
|
382
|
+
for M42 covering bulk fan-out + `--concurrency` interaction +
|
|
383
|
+
partial-success projection + `data.summary` echo, ~9 net for
|
|
384
|
+
M43 covering two-leg happy path top-level + subitem + D6
|
|
385
|
+
mixed-set asymmetry + dry-run two-`planned_changes` + D1
|
|
386
|
+
orphan-warn envelope + leg-1 failure with/without remap +
|
|
387
|
+
translation reject + atomicity-before-wire ENOENT +
|
|
388
|
+
regression-guards across all 4 emit surfaces). All green on
|
|
389
|
+
Node 22 + 24.
|
|
390
|
+
- **Coverage at 98.79 / 95.65 / 99.16 / 99.08** (statements /
|
|
391
|
+
branches / functions / lines) against the floor 95 / 95.45 /
|
|
392
|
+
95 / 95. Branches margin **0.20pp** at v0.7.0 (was 1.01pp at
|
|
393
|
+
v0.6.0; the 0.81pp drop reflects new conditional-spread arms
|
|
394
|
+
across M42 + M43's leg-1 / leg-2 catch arms — defensive non-
|
|
395
|
+
CliError re-throws + cause-details / metaSource unreachable
|
|
396
|
+
arms c8-ignored per testing.md preferred form). Floor unchanged
|
|
397
|
+
across v0.6.0 → v0.7.0.
|
|
398
|
+
- **Envelope-snapshot suite** — refresh probe ran clean at v0.7
|
|
399
|
+
release-prep (zero diff vs M43 IMPL close); per-milestone
|
|
400
|
+
close-docs sweeps refreshed snapshots in lockstep at M42 IMPL
|
|
401
|
+
close + M43 IMPL close.
|
|
402
|
+
- **Five test layers held**: unit, integration (in-process
|
|
403
|
+
`FixtureTransport` + `MultipartFixtureTransport`), E2E
|
|
404
|
+
(subprocess against fixture server), envelope-shape snapshot
|
|
405
|
+
suite, published-tarball E2E.
|
|
406
|
+
- **Audit-fix folded into release-prep.** `npm audit` flagged a
|
|
407
|
+
transitive `brace-expansion@5.0.2` (moderate severity); `npm
|
|
408
|
+
audit fix` cleanly resolved to `5.0.5+`. `npm audit` reports
|
|
409
|
+
`0 vulnerabilities` post-fix.
|
|
410
|
+
|
|
411
|
+
### Documentation
|
|
412
|
+
|
|
413
|
+
- **[`docs/v0.7-plan.md`](./docs/v0.7-plan.md)** new — the v0.7
|
|
414
|
+
active plan with M42 + M43 milestones, decisions log (per-
|
|
415
|
+
milestone D1-D6), R-class register (R-v0.7-NEW-1 through
|
|
416
|
+
R-v0.7-NEW-5), per-milestone post-mortems (§3), 2026-05-20
|
|
417
|
+
pivot note pinning M39 / M40 / M41 as DEFERRED.
|
|
418
|
+
- **[`docs/cli-design.md`](./docs/cli-design.md)** §4.3
|
|
419
|
+
`monday item update` + `monday item create` rows annotated
|
|
420
|
+
with the M42 bulk + M43 create-time file-column dispatch
|
|
421
|
+
shapes; §5.3 "File-column dispatch leg" subsection extended
|
|
422
|
+
with the bulk fan-out (M42) + two-leg orphan-warn (M43)
|
|
423
|
+
branches; §5.8 atomicity discipline extended with the M43
|
|
424
|
+
two-leg orphan-warn envelope shape.
|
|
425
|
+
- **[`docs/output-shapes.md`](./docs/output-shapes.md)** —
|
|
426
|
+
`item update --where ... --set <file-col>=<path>` section at
|
|
427
|
+
line 2399 (M42 bulk file dispatch); `item create --set <file-
|
|
428
|
+
col>=<path>` integrated into the existing `item create`
|
|
429
|
+
section at line 2524 (M43 two-leg dispatch + orphan-warn
|
|
430
|
+
envelope); ToC row for `item (mutations)` updated to
|
|
431
|
+
enumerate the friendly file `--set v0.6-M38 single + v0.7-M42
|
|
432
|
+
bulk` annotation on `update` + `(friendly file --set v0.7-M43)`
|
|
433
|
+
annotation on `create` (caught at v0.7 release-prep ToC audit
|
|
434
|
+
as a v0.7-M42 + v0.7-M43 close-docs gap — 5th consecutive
|
|
435
|
+
R-NEW-82 graduated-discipline ratification).
|
|
436
|
+
- **README.md** quickstart expanded with v0.7 examples (step 13
|
|
437
|
+
extended to demonstrate M42 bulk file dispatch under
|
|
438
|
+
`--concurrency` / `--continue-on-error` + M43 create-time
|
|
439
|
+
file `--set` with mixed-set asymmetry). Scope section reshaped
|
|
440
|
+
around v0.7.0 / v0.6.0 / v0.5.0 / v0.4.0 / v0.3.0 / v0.2.0 /
|
|
441
|
+
v0.1.0 per-version layout. New "What v0.7 added (M42 + M43)"
|
|
442
|
+
per-milestone bullet block. v0.8 (next) block enumerates
|
|
443
|
+
carry-forward backlog + the v0.7-deferred M39 / M40 / M41
|
|
444
|
+
cluster pending SDK 15.x native `2026-04`.
|
|
445
|
+
|
|
446
|
+
[0.7.0]: https://github.com/Firer/monday-cli/releases/tag/v0.7.0
|
|
447
|
+
|
|
10
448
|
## [0.6.0] - 2026-05-18 — Files-shaped friendly `--set` writes (M38)
|
|
11
449
|
|
|
12
450
|
The "agents can write to files-shaped columns inline" milestone —
|