monday-cli 0.5.0 → 0.7.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.
- package/CHANGELOG.md +665 -0
- package/README.md +209 -35
- package/dist/api/column-types.d.ts +81 -19
- package/dist/api/column-types.d.ts.map +1 -1
- package/dist/api/column-types.js +44 -11
- package/dist/api/column-types.js.map +1 -1
- package/dist/api/column-values.d.ts +22 -10
- package/dist/api/column-values.d.ts.map +1 -1
- package/dist/api/column-values.js +50 -20
- package/dist/api/column-values.js.map +1 -1
- package/dist/api/file-column-set.d.ts +613 -0
- package/dist/api/file-column-set.d.ts.map +1 -0
- package/dist/api/file-column-set.js +568 -0
- package/dist/api/file-column-set.js.map +1 -0
- package/dist/api/raw-write.d.ts +38 -17
- package/dist/api/raw-write.d.ts.map +1 -1
- package/dist/api/raw-write.js +62 -25
- package/dist/api/raw-write.js.map +1 -1
- package/dist/api/resolver-error-fold.d.ts +25 -0
- package/dist/api/resolver-error-fold.d.ts.map +1 -1
- package/dist/api/resolver-error-fold.js +56 -0
- package/dist/api/resolver-error-fold.js.map +1 -1
- package/dist/commands/board/column-create.d.ts +13 -3
- package/dist/commands/board/column-create.d.ts.map +1 -1
- package/dist/commands/board/column-create.js +27 -8
- package/dist/commands/board/column-create.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 +601 -44
- package/dist/commands/item/create.js.map +1 -1
- package/dist/commands/item/set.d.ts +33 -3
- package/dist/commands/item/set.d.ts.map +1 -1
- package/dist/commands/item/set.js +193 -15
- package/dist/commands/item/set.js.map +1 -1
- package/dist/commands/item/update.d.ts +203 -3
- package/dist/commands/item/update.d.ts.map +1 -1
- package/dist/commands/item/update.js +1015 -68
- package/dist/commands/item/update.js.map +1 -1
- package/dist/commands/item/upload.d.ts.map +1 -1
- package/dist/commands/item/upload.js +16 -69
- package/dist/commands/item/upload.js.map +1 -1
- package/dist/commands/update/upload.d.ts.map +1 -1
- package/dist/commands/update/upload.js +9 -59
- package/dist/commands/update/upload.js.map +1 -1
- package/dist/utils/file-source.d.ts +93 -0
- package/dist/utils/file-source.d.ts.map +1 -0
- package/dist/utils/file-source.js +140 -0
- package/dist/utils/file-source.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,671 @@ 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.0] - 2026-05-20 — Bulk + create-time file `--set` carve-out folds (M42 + M43)
|
|
11
|
+
|
|
12
|
+
The "friendly file `--set` reaches every callShape" milestone —
|
|
13
|
+
v0.6-M38's single-item friendly file-column writer gains the two
|
|
14
|
+
carve-outs deferred at M38: bulk `monday item update --where ...
|
|
15
|
+
--set <file-col>=<path>` per-item multipart fan-out (M42, closes
|
|
16
|
+
D5) and create-time `monday item create --set <file-col>=<path>`
|
|
17
|
+
two-leg dispatch under the §5.8 orphan-warn atomicity envelope
|
|
18
|
+
(M43, closes D6). The friendly file-`--set` form now reaches
|
|
19
|
+
every CLI callShape (`item set` / `item update <iid>` / `item
|
|
20
|
+
update --where` / `item create`). **No breaking changes vs
|
|
21
|
+
`0.6.0` — every v0.7 surface is additive.** Built incrementally
|
|
22
|
+
across M42 + M43.
|
|
23
|
+
|
|
24
|
+
**Pivot note 2026-05-20.** The originally-planned API `2026-04`
|
|
25
|
+
pin (M39) + `monday item set-description` (M40) + `monday doc
|
|
26
|
+
block-create-bulk <did>` (M41) cluster was **DEFERRED** to a
|
|
27
|
+
future release pending `@mondaydotcomorg/api` SDK 15.x publishing
|
|
28
|
+
with `CURRENT_VERSION = '2026-04'` natively. M39's string-literal
|
|
29
|
+
override path was explored then abandoned after M40's empirical
|
|
30
|
+
probe revealed paid-tier feature gating + opaque
|
|
31
|
+
`INTERNAL_SERVER_ERROR { service: 'docs-api' }` on free-tier
|
|
32
|
+
accounts at every payload size — not worth the override-
|
|
33
|
+
maintenance overhead for a single user-blocked verb. Re-attempt
|
|
34
|
+
expected at v0.8 if Monday's SDK cadence holds (≈2 months between
|
|
35
|
+
major SDK bumps per the 13.0.0 / 14.0.0 / 15.0.0 trajectory) AND
|
|
36
|
+
a paid-tier sandbox is available for the M40 wire probe.
|
|
37
|
+
|
|
38
|
+
### Breaking changes vs `0.6.0`
|
|
39
|
+
|
|
40
|
+
**None.** Every command, error code, envelope key, and warning
|
|
41
|
+
shape shipped in v0.6.0 is preserved byte-for-byte. v0.7 only adds.
|
|
42
|
+
|
|
43
|
+
### Surface
|
|
44
|
+
|
|
45
|
+
**117 commands shipped (unchanged from v0.6).** M42 + M43 extend
|
|
46
|
+
two existing verbs (`monday item update` bulk dispatch leg +
|
|
47
|
+
`monday item create` action body) with new file-column dispatch
|
|
48
|
+
branches rather than introducing new noun namespaces or verbs.
|
|
49
|
+
The friendly translator (`translateColumnValueAsync`) stays
|
|
50
|
+
JSON-output-shaped for the 13 existing writable types; file-
|
|
51
|
+
column dispatch routes through v0.6-M38's
|
|
52
|
+
`executeFileColumnSet` sibling module (the new bulk + create-
|
|
53
|
+
time paths consume the M38 helper rather than duplicating it).
|
|
54
|
+
|
|
55
|
+
**Bulk file `--set` (M42) — `monday item update --where ...
|
|
56
|
+
--set <file-col>=<path>`.** Per-item multipart fan-out across
|
|
57
|
+
the `--where`-resolved item-id set, dispatched through the
|
|
58
|
+
existing v0.4-M30 `dispatchParallel` over a shared
|
|
59
|
+
`MultipartTransport` (per D1 closure — no new transport seam;
|
|
60
|
+
the parallel-multipart cross-product of M30's bulk-concurrency
|
|
61
|
+
+ M31's multipart wire was already pinned). New helper
|
|
62
|
+
`runItemUpdateBulkFileDispatch` (in `src/commands/item/
|
|
63
|
+
update.ts`) mirrors M25's partial-success shape with `asset`
|
|
64
|
+
slot replacing `item` slot (per D2 closure):
|
|
65
|
+
`data.results[i].asset: { id, name, ... }` on success;
|
|
66
|
+
`data.results[i].error: { code, message }` under
|
|
67
|
+
`--continue-on-error`. Aggregate `data.summary` extends M25's
|
|
68
|
+
`partialSuccessBulkUpdateDataSchema` with three new slots
|
|
69
|
+
(`column_id` / `filename` / `file_size_bytes`) echoing the
|
|
70
|
+
dispatched file alongside `matched_count` / `applied_count` /
|
|
71
|
+
`failed_count` / `board_id`. New `data.operation:
|
|
72
|
+
'item_update_bulk_file_set'` literal discriminator (distinct
|
|
73
|
+
from M25's `'item_update'`) so agents branch uniformly on
|
|
74
|
+
`data.operation`. `--concurrency 1..32` (default 1) opts into
|
|
75
|
+
bounded parallel dispatch per the v0.4-M30 range; `--continue-
|
|
76
|
+
on-error` partitions per-item wire failures into the partial-
|
|
77
|
+
success envelope while leaving whole-call-abort semantics for
|
|
78
|
+
the upfront local file pre-check (per D3 closure —
|
|
79
|
+
`precheckLocalFile` fires ONCE upfront per cli-design §5.8 "pre-
|
|
80
|
+
checks MUST fire BEFORE any wire round-trip" before the dispatch
|
|
81
|
+
loop, since the bulk shape has ONE file path shared across N
|
|
82
|
+
matched items).
|
|
83
|
+
|
|
84
|
+
**Create-time file `--set` (M43) — `monday item create --set
|
|
85
|
+
<file-col>=<path>`.** Two-leg dispatch routes through the new
|
|
86
|
+
`runItemCreateFileDispatch` helper (in `src/commands/item/
|
|
87
|
+
create.ts`): leg-1 `create_item` bundles the non-file
|
|
88
|
+
`column_values` atomically into the wire call; leg-2
|
|
89
|
+
`add_file_to_column` attaches the file to the newly-created
|
|
90
|
+
item. Pair is non-atomic by construction (Monday has no single-
|
|
91
|
+
wire create-item-with-file mutation at API `2026-01`). The atomicity
|
|
92
|
+
envelope shape closed at D1 to **(b) orphan-warn** rather than
|
|
93
|
+
(a) automatic rollback — the pre-flight rollback-viability probe
|
|
94
|
+
could not run empirically (the token lacked `create_item`
|
|
95
|
+
permission in token-created sandbox workspaces + existing-board
|
|
96
|
+
attempts were correctly blocked by harness modify-shared-state
|
|
97
|
+
guards), so defaulting to orphan-warn preserves the agent's
|
|
98
|
+
recovery handle without introducing a destructive `delete_item`
|
|
99
|
+
cleanup leg whose own failure mode is unaccounted for. Leg-2
|
|
100
|
+
failure surfaces `internal_error` with `details.reason:
|
|
101
|
+
'create_then_file_upload_partial_failure'` + `details.
|
|
102
|
+
created_item_id` echoing leg-1's orphan + `details.column_id`
|
|
103
|
+
(the resolved file-column ID) + `details.cause` (the M31 wire-
|
|
104
|
+
failure JSON projection) + `details.hint` directing agents to
|
|
105
|
+
retry leg-2 alone (`monday item set <iid> <file-col>=<path>`)
|
|
106
|
+
OR rollback (`monday item delete <iid> --yes`). `--dry-run`
|
|
107
|
+
emits two `planned_changes` entries per D2 closure
|
|
108
|
+
(`operation: 'create_item'` / `'create_subitem'` with bundled
|
|
109
|
+
non-file `column_values`, then `operation:
|
|
110
|
+
'add_file_to_column'` with the file pre-check echo); the leg-2
|
|
111
|
+
entry carries no `item_id` slot because the item doesn't exist
|
|
112
|
+
at dry-run time. **D6 mixed-set mutex SUPPRESSED on
|
|
113
|
+
`'item_create'`** per the asymmetry closure — `create_item`
|
|
114
|
+
natively bundles non-file `column_values` atomically into leg-
|
|
115
|
+
1, so a multi-`--set` mix of file + non-file entries is
|
|
116
|
+
legitimate at create time (unlike single-item / bulk
|
|
117
|
+
callShapes where Monday's `change_multiple_column_values`
|
|
118
|
+
doesn't accept files). The universal multi-file mutex still
|
|
119
|
+
applies — 2+ file entries reject with `usage_error.details.
|
|
120
|
+
reason: 'multi_file_set_unsupported'`.
|
|
121
|
+
|
|
122
|
+
**Mutex rules at v0.7 (universal across all four callShapes
|
|
123
|
+
post-M42 + M43).**
|
|
124
|
+
|
|
125
|
+
- **Exactly ONE file `--set <file-col>=<path>` per call** across
|
|
126
|
+
every callShape (`'item_set'` / `'item_update_single'` /
|
|
127
|
+
`'item_update_bulk'` / `'item_create'`). 2+ file entries
|
|
128
|
+
reject with `usage_error.details.reason:
|
|
129
|
+
'multi_file_set_unsupported'`.
|
|
130
|
+
- **Mixing a file `--set` with any value `--set` / `--set-raw`
|
|
131
|
+
/ `--name`** rejects with `usage_error.details.reason:
|
|
132
|
+
'mixed_file_and_value_sets'` on `'item_set'` /
|
|
133
|
+
`'item_update_single'` / `'item_update_bulk'`. **SUPPRESSED**
|
|
134
|
+
on `'item_create'` per D6 asymmetry — `create_item` bundles
|
|
135
|
+
non-file `column_values` atomically into leg-1, so the mix
|
|
136
|
+
is legitimate at create time.
|
|
137
|
+
|
|
138
|
+
Enforcement fires at the column-resolution boundary (parse-time
|
|
139
|
+
can't know — the column type only resolves after board metadata
|
|
140
|
+
loads); rejection happens BEFORE any multipart bytes get
|
|
141
|
+
constructed.
|
|
142
|
+
|
|
143
|
+
**`--set-raw <file-col>=<json>` STAYS REJECTED at v0.7
|
|
144
|
+
(unchanged from v0.6-M38 D3 — PERMANENT, not deferred).**
|
|
145
|
+
Monday's wire has no JSON shape for `change_column_value` on
|
|
146
|
+
file columns; the rejection at `src/api/raw-write.ts:
|
|
147
|
+
translateRawColumnValue` carries `details.hint` pointing at
|
|
148
|
+
the friendly `--set` form (now universal across callShapes per
|
|
149
|
+
M42 + M43) AND the v0.4-M31 verb-shaped `monday item upload`.
|
|
150
|
+
|
|
151
|
+
### Output contract additions
|
|
152
|
+
|
|
153
|
+
**No new stable error codes — registry stays at 29.** Per D3
|
|
154
|
+
closure on M42 + D3 closure on M43, every v0.7 rejection routes
|
|
155
|
+
through existing codes (`usage_error` / `unsupported_column_
|
|
156
|
+
type` / `not_found` / `validation_failed` / `internal_error`)
|
|
157
|
+
with `details.reason` literal-string discriminators. **One new
|
|
158
|
+
discriminator literal lands at v0.7:** M43's
|
|
159
|
+
`'create_then_file_upload_partial_failure'` (M43 leg-2 partial-
|
|
160
|
+
failure orphan-warn envelope) joins the existing M38-era
|
|
161
|
+
discriminators (`mixed_file_and_value_sets` /
|
|
162
|
+
`multi_file_set_unsupported` / `file_set_on_bulk_unsupported` /
|
|
163
|
+
`file_set_on_create_unsupported`) under the R-v0.6-NEW-2
|
|
164
|
+
discriminated-union per-status-detail pattern.
|
|
165
|
+
|
|
166
|
+
**R-v0.6-NEW-2 graduates at the 5-consumer threshold post-M43.**
|
|
167
|
+
The discriminator pattern (4 supporting instances at v0.6 close)
|
|
168
|
+
crossed the threshold with M43's new discriminator literal as
|
|
169
|
+
the 5th. Graduation lifts the pattern from "watch-item" to
|
|
170
|
+
"ratified design idiom" — future milestones touching the
|
|
171
|
+
`details.reason` per-status-detail surface inherit the pattern
|
|
172
|
+
without further filing.
|
|
173
|
+
|
|
174
|
+
**New aggregate envelope slots for M42 bulk file dispatch.**
|
|
175
|
+
`data.summary.{column_id, filename, file_size_bytes}` extend
|
|
176
|
+
M25's `partialSuccessBulkUpdateDataSchema` with file-dispatch
|
|
177
|
+
echo slots so agents reading the success envelope see which
|
|
178
|
+
file was dispatched + where. `column_id` echoes the resolved
|
|
179
|
+
file-column ID; `filename` echoes the basename; `file_size_
|
|
180
|
+
bytes` echoes the `fs.stat()` size in bytes (no file bytes are
|
|
181
|
+
loaded into memory at envelope-time — the size is captured
|
|
182
|
+
pre-dispatch in the `precheckLocalFile` step).
|
|
183
|
+
|
|
184
|
+
**New M43 orphan-warn envelope on `data.operation:
|
|
185
|
+
'item_create'` leg-2 failure.** Beyond the existing M38-era
|
|
186
|
+
`add_file_to_column` failure envelope, M43 leg-2 failure
|
|
187
|
+
surfaces a 5-slot details bag: `reason` (literal
|
|
188
|
+
`'create_then_file_upload_partial_failure'`) + `created_item_
|
|
189
|
+
id` (the orphaned leg-1 item ID) + `column_id` (the resolved
|
|
190
|
+
file-column ID) + `cause` (the M31 wire-failure JSON
|
|
191
|
+
projection) + `hint` (the recovery-path English string).
|
|
192
|
+
|
|
193
|
+
**No new envelope keys, no new warning shapes** outside the M42
|
|
194
|
+
`data.summary` extension above. M42 + M43 reuse the M31
|
|
195
|
+
multipart wire's success envelope shape + the post-success
|
|
196
|
+
eager-invalidation contract (`invalidateBoard(boardId)` fires
|
|
197
|
+
single-leg on multipart success across all 4 callShapes).
|
|
198
|
+
|
|
199
|
+
### Upgrade notes
|
|
200
|
+
|
|
201
|
+
- **`unsupported_column_type` `deferred_to: "v0.6"` for the
|
|
202
|
+
files-shaped category on bulk + create paths is DROPPED.**
|
|
203
|
+
v0.7-M42 picks up the bulk path (per-item multipart fan-out
|
|
204
|
+
under `--concurrency` / `--continue-on-error`); v0.7-M43
|
|
205
|
+
picks up the create-time path (two-leg dispatch under §5.8
|
|
206
|
+
orphan-warn). The rejection row at `src/api/column-values.ts`
|
|
207
|
+
(the files-shaped row of the friendly translator) no longer
|
|
208
|
+
fires on `item create` or `item update --where` — those paths
|
|
209
|
+
now dispatch to the appropriate helper BEFORE the translator
|
|
210
|
+
row fires. The v0.6-M38 literals `'file_set_on_bulk_
|
|
211
|
+
unsupported'` and `'file_set_on_create_unsupported'` STAY
|
|
212
|
+
RESERVED in docstrings + regression-guarded by integration
|
|
213
|
+
tests; the runtime path no longer surfaces them. Agents that
|
|
214
|
+
branched on either literal will instead receive the success
|
|
215
|
+
envelopes documented above OR a leg-2 failure under M43's
|
|
216
|
+
orphan-warn shape.
|
|
217
|
+
- **`--set-raw <file-col>=<json>` STAYS REJECTED (unchanged
|
|
218
|
+
from v0.6-M38 D3, PERMANENT).** Monday's wire has no JSON
|
|
219
|
+
shape for files-shaped `change_column_value`. The rejection
|
|
220
|
+
hint at `src/api/raw-write.ts` names BOTH the friendly `--set`
|
|
221
|
+
form (now universal across callShapes) AND the v0.4-M31
|
|
222
|
+
`monday item upload` verb.
|
|
223
|
+
- **Multi-level subitem creation slips from `"v0.7"` →
|
|
224
|
+
`"v0.8"`.** Originally slipped from v0.3 → v0.4 → v0.5 → v0.6
|
|
225
|
+
→ v0.7 across four prior release-preps. v0.7 didn't pick it
|
|
226
|
+
up (v0.7 pivoted away from API `2026-04` at 2026-05-20 so
|
|
227
|
+
the data-model probe gate moves to v0.8's planned `2026-07`
|
|
228
|
+
pin; Monday's `sub_items_board` still carries no `subtasks`
|
|
229
|
+
column at API `2026-01`). The `error.code: "usage_error"` +
|
|
230
|
+
`details.hierarchy_type: "multi_level"` keys are unchanged;
|
|
231
|
+
only the `deferred_to` literal flipped.
|
|
232
|
+
- **Cross-board `item move` value-overrides slips from `"v0.7"`
|
|
233
|
+
→ `"v0.8"`.** Slipped across v0.3-M11 → v0.4 → v0.5 → v0.6
|
|
234
|
+
→ v0.7 → v0.8 release-preps. Monday's `ColumnMappingInput`
|
|
235
|
+
still carries no value slot; the cross-leg partial-failure
|
|
236
|
+
envelope question stays open.
|
|
237
|
+
- **Cross-board resumable cursor slips from `"v0.7"` →
|
|
238
|
+
`"v0.8"`.** Slot remains for the per-board cursor-lifetime
|
|
239
|
+
under-aggregation design issue. The `cross_board_truncated`
|
|
240
|
+
warning's `details.hint` continues to recommend narrowing via
|
|
241
|
+
`--workspace` / `--favorites` / `--max-boards`.
|
|
242
|
+
- **Multi-file `--set` per call (v0.6-M38 D2) and file-`--set`
|
|
243
|
+
stdin support (v0.6-M38 D7) remain v0.7.x / future
|
|
244
|
+
candidates.** M42 pinned the per-item file-dispatch envelope;
|
|
245
|
+
multi-file would now revisit with M42's shape as the per-
|
|
246
|
+
item baseline.
|
|
247
|
+
- **`monday auth login` placeholder-guard unchanged.** The verb
|
|
248
|
+
is still registered and still surfaces `usage_error.details.
|
|
249
|
+
reason: oauth_unregistered` pointing at `MONDAY_API_TOKEN`
|
|
250
|
+
(unchanged from v0.6.0). The OAuth deferral revisits in
|
|
251
|
+
v0.7.x / v0.8 contingent on user demand.
|
|
252
|
+
- **Stable error-code registry stays at 29.** Existing codes'
|
|
253
|
+
shapes are unchanged across v0.6 → v0.7.
|
|
254
|
+
|
|
255
|
+
### Internals worth highlighting
|
|
256
|
+
|
|
257
|
+
- **R-v0.6-NEW-1 graduates at the 5-consumer threshold post-
|
|
258
|
+
M43.** The `file-source.ts` two-export module (`precheck
|
|
259
|
+
LocalFile` + `buildBlobFromPath`) added at v0.6-M38 IMPL
|
|
260
|
+
kickoff (`3c2a9b0`, ahead-of-feat 3-consumer lift) scaled to
|
|
261
|
+
5 consumers post-v0.7: M31 `item upload` + M31 `update
|
|
262
|
+
upload` + M38 single-item `executeFileColumnSet` + M42 bulk
|
|
263
|
+
`runItemUpdateBulkFileDispatch` + M43 create-time
|
|
264
|
+
`runItemCreateFileDispatch`. Helper internal shape unchanged
|
|
265
|
+
across all 5 consumers — graduation earned.
|
|
266
|
+
- **R-v0.6-NEW-2 graduates at the 5-consumer threshold post-
|
|
267
|
+
M43.** The `details.reason` discriminated-union per-status-
|
|
268
|
+
detail pattern (4 supporting instances at v0.6 close —
|
|
269
|
+
`mixed_file_and_value_sets` / `multi_file_set_unsupported` /
|
|
270
|
+
`file_set_on_create_unsupported` / `file_set_on_bulk_
|
|
271
|
+
unsupported`) crossed the threshold with M43's new
|
|
272
|
+
`create_then_file_upload_partial_failure` literal as the 5th.
|
|
273
|
+
- **R-NEW-82 graduated at the 5th-consecutive consumer.** The
|
|
274
|
+
release-prep cross-doc grep for stale `deferred_to:
|
|
275
|
+
"v<currently-releasing-version>"` slots fired and caught
|
|
276
|
+
one stale site (multi-level subitem `--parent` rejection —
|
|
277
|
+
slipped to `"v0.8"`) plus one ToC drift (v0.7-M42 + v0.7-M43
|
|
278
|
+
friendly file `--set` annotations missing from `docs/output-
|
|
279
|
+
shapes.md`'s `item (mutations)` row). Mirrors v0.3-M28 (1st)
|
|
280
|
+
/ v0.4 (2nd) / v0.5 (3rd) / v0.6 (4th) / v0.7 (5th) release-
|
|
281
|
+
prep ratifications.
|
|
282
|
+
- **R-NEW-84 graduated discipline applied.** The v0.7 release-
|
|
283
|
+
prep cluster ships zero production `src/**/*.ts` semantic
|
|
284
|
+
changes (only the literal `'v0.7'` → `'v0.8'` flip in the
|
|
285
|
+
multi-level subitem rejection slot); gates carry verification
|
|
286
|
+
per the R-NEW-84 carve-out (skip Codex review on mechanical /
|
|
287
|
+
process-only clusters).
|
|
288
|
+
- **R-v0.7-NEW-4 (Pre-IMPL contract-term checklist) graduated
|
|
289
|
+
at v0.7-M42 IMPL R7 + refined at R8.** The discipline lives
|
|
290
|
+
in `.claude/rules/workflow.md` as a permanent rule. v0.7-M43
|
|
291
|
+
IMPL inherited the checklist + extended it with a "round-
|
|
292
|
+
agnostic framing" sub-rule at R3, and converged in 4 fix-up
|
|
293
|
+
rounds vs M42's 8 — graduation earned its keep.
|
|
294
|
+
- **R-NEW-76 graduated** from "stub-anchored ordering invariant"
|
|
295
|
+
to "wire-dispatch-anchored ordering invariant" at v0.7-M43
|
|
296
|
+
IMPL — post-IMPL the c8 boundary is gone but the `parseArgv`-
|
|
297
|
+
BEFORE-dispatch ordering itself stays load-bearing (argv-
|
|
298
|
+
level failures surface as `usage_error`, not
|
|
299
|
+
`internal_error`).
|
|
300
|
+
- **M42 IMPL converged in 8 fix-up rounds.** R1 closed the
|
|
301
|
+
behavioral surface (`foldAndRemap` + `SourceAggregator` +
|
|
302
|
+
fail-fast partial-success invalidate); R2-R8 were W9-prose-
|
|
303
|
+
only (no behavioral findings, asymptotic prose convergence
|
|
304
|
+
pattern that motivated the R-v0.7-NEW-4 graduation).
|
|
305
|
+
- **M43 IMPL converged in 4 fix-up rounds.** R1 closed the
|
|
306
|
+
behavioral surface; R2-R3 trailing W9 prose drift; R4
|
|
307
|
+
CONVERGED with zero findings. M43 inherited R-v0.7-NEW-4
|
|
308
|
+
from M42's graduation, short-circuiting the W9 cycle from
|
|
309
|
+
M42's 8 rounds down to 4.
|
|
310
|
+
- **Audit-fix folded into version-bump per security.md "high
|
|
311
|
+
= merge blocker" interpretation.** v0.6 release-prep
|
|
312
|
+
established the inline audit-fix precedent at version-bump;
|
|
313
|
+
v0.7 release-prep applied it: `npm audit` flagged
|
|
314
|
+
`brace-expansion@5.0.2` (moderate severity —
|
|
315
|
+
GHSA-jxxr-4gwj-5jf2 large-numeric-range DoS-protection
|
|
316
|
+
defeat); `npm audit fix` cleanly resolved via the lockfile
|
|
317
|
+
to `5.0.5+` (non-breaking transitive through eslint's
|
|
318
|
+
minimatch chain). `npm audit` reports `0 vulnerabilities`
|
|
319
|
+
post-fix.
|
|
320
|
+
- **Two-AI review** ran for v0.7-M42 pre-flight + IMPL, v0.7-
|
|
321
|
+
M43 pre-flight + IMPL. M42 IMPL converged in 8 fix-up rounds
|
|
322
|
+
(1 behavioral + 7 W9 prose); M43 IMPL converged in 4 (1
|
|
323
|
+
behavioral + 2 W9 + 1 zero-finding CONVERGED). The v0.7
|
|
324
|
+
release-prep cluster skipped Codex per R-NEW-84. Cumulative
|
|
325
|
+
Codex breakdowns live in the per-milestone post-mortems in
|
|
326
|
+
[`docs/v0.7-plan.md`](./docs/v0.7-plan.md) §3.
|
|
327
|
+
|
|
328
|
+
### Tests + quality gates
|
|
329
|
+
|
|
330
|
+
- **4124 unit/integration + E2E tests** at v0.7.0 (+1 skipped;
|
|
331
|
+
was 4100 + 1 at v0.6.0; +24 net for M42 + M43 — ~15 new tests
|
|
332
|
+
for M42 covering bulk fan-out + `--concurrency` interaction +
|
|
333
|
+
partial-success projection + `data.summary` echo, ~9 net for
|
|
334
|
+
M43 covering two-leg happy path top-level + subitem + D6
|
|
335
|
+
mixed-set asymmetry + dry-run two-`planned_changes` + D1
|
|
336
|
+
orphan-warn envelope + leg-1 failure with/without remap +
|
|
337
|
+
translation reject + atomicity-before-wire ENOENT +
|
|
338
|
+
regression-guards across all 4 emit surfaces). All green on
|
|
339
|
+
Node 22 + 24.
|
|
340
|
+
- **Coverage at 98.79 / 95.65 / 99.16 / 99.08** (statements /
|
|
341
|
+
branches / functions / lines) against the floor 95 / 95.45 /
|
|
342
|
+
95 / 95. Branches margin **0.20pp** at v0.7.0 (was 1.01pp at
|
|
343
|
+
v0.6.0; the 0.81pp drop reflects new conditional-spread arms
|
|
344
|
+
across M42 + M43's leg-1 / leg-2 catch arms — defensive non-
|
|
345
|
+
CliError re-throws + cause-details / metaSource unreachable
|
|
346
|
+
arms c8-ignored per testing.md preferred form). Floor unchanged
|
|
347
|
+
across v0.6.0 → v0.7.0.
|
|
348
|
+
- **Envelope-snapshot suite** — refresh probe ran clean at v0.7
|
|
349
|
+
release-prep (zero diff vs M43 IMPL close); per-milestone
|
|
350
|
+
close-docs sweeps refreshed snapshots in lockstep at M42 IMPL
|
|
351
|
+
close + M43 IMPL close.
|
|
352
|
+
- **Five test layers held**: unit, integration (in-process
|
|
353
|
+
`FixtureTransport` + `MultipartFixtureTransport`), E2E
|
|
354
|
+
(subprocess against fixture server), envelope-shape snapshot
|
|
355
|
+
suite, published-tarball E2E.
|
|
356
|
+
- **Audit-fix folded into release-prep.** `npm audit` flagged a
|
|
357
|
+
transitive `brace-expansion@5.0.2` (moderate severity); `npm
|
|
358
|
+
audit fix` cleanly resolved to `5.0.5+`. `npm audit` reports
|
|
359
|
+
`0 vulnerabilities` post-fix.
|
|
360
|
+
|
|
361
|
+
### Documentation
|
|
362
|
+
|
|
363
|
+
- **[`docs/v0.7-plan.md`](./docs/v0.7-plan.md)** new — the v0.7
|
|
364
|
+
active plan with M42 + M43 milestones, decisions log (per-
|
|
365
|
+
milestone D1-D6), R-class register (R-v0.7-NEW-1 through
|
|
366
|
+
R-v0.7-NEW-5), per-milestone post-mortems (§3), 2026-05-20
|
|
367
|
+
pivot note pinning M39 / M40 / M41 as DEFERRED.
|
|
368
|
+
- **[`docs/cli-design.md`](./docs/cli-design.md)** §4.3
|
|
369
|
+
`monday item update` + `monday item create` rows annotated
|
|
370
|
+
with the M42 bulk + M43 create-time file-column dispatch
|
|
371
|
+
shapes; §5.3 "File-column dispatch leg" subsection extended
|
|
372
|
+
with the bulk fan-out (M42) + two-leg orphan-warn (M43)
|
|
373
|
+
branches; §5.8 atomicity discipline extended with the M43
|
|
374
|
+
two-leg orphan-warn envelope shape.
|
|
375
|
+
- **[`docs/output-shapes.md`](./docs/output-shapes.md)** —
|
|
376
|
+
`item update --where ... --set <file-col>=<path>` section at
|
|
377
|
+
line 2399 (M42 bulk file dispatch); `item create --set <file-
|
|
378
|
+
col>=<path>` integrated into the existing `item create`
|
|
379
|
+
section at line 2524 (M43 two-leg dispatch + orphan-warn
|
|
380
|
+
envelope); ToC row for `item (mutations)` updated to
|
|
381
|
+
enumerate the friendly file `--set v0.6-M38 single + v0.7-M42
|
|
382
|
+
bulk` annotation on `update` + `(friendly file --set v0.7-M43)`
|
|
383
|
+
annotation on `create` (caught at v0.7 release-prep ToC audit
|
|
384
|
+
as a v0.7-M42 + v0.7-M43 close-docs gap — 5th consecutive
|
|
385
|
+
R-NEW-82 graduated-discipline ratification).
|
|
386
|
+
- **README.md** quickstart expanded with v0.7 examples (step 13
|
|
387
|
+
extended to demonstrate M42 bulk file dispatch under
|
|
388
|
+
`--concurrency` / `--continue-on-error` + M43 create-time
|
|
389
|
+
file `--set` with mixed-set asymmetry). Scope section reshaped
|
|
390
|
+
around v0.7.0 / v0.6.0 / v0.5.0 / v0.4.0 / v0.3.0 / v0.2.0 /
|
|
391
|
+
v0.1.0 per-version layout. New "What v0.7 added (M42 + M43)"
|
|
392
|
+
per-milestone bullet block. v0.8 (next) block enumerates
|
|
393
|
+
carry-forward backlog + the v0.7-deferred M39 / M40 / M41
|
|
394
|
+
cluster pending SDK 15.x native `2026-04`.
|
|
395
|
+
|
|
396
|
+
[0.7.0]: https://github.com/Firer/monday-cli/releases/tag/v0.7.0
|
|
397
|
+
|
|
398
|
+
## [0.6.0] - 2026-05-18 — Files-shaped friendly `--set` writes (M38)
|
|
399
|
+
|
|
400
|
+
The "agents can write to files-shaped columns inline" milestone —
|
|
401
|
+
v0.4-M31's `monday item upload` verb-shaped multipart wire surface
|
|
402
|
+
gains the friendly translator-boundary inline form
|
|
403
|
+
(`monday item set <iid> <file-col>=<path>` + `monday item update
|
|
404
|
+
<iid> --set <file-col>=<path>`), closing the v0.4 → v0.5 → v0.6
|
|
405
|
+
carry-over of the inline form across two prior release-preps.
|
|
406
|
+
Single-item paths only at M38; bulk + create + multi-file +
|
|
407
|
+
stdin paths reject with `details.reason` discriminators (defer
|
|
408
|
+
to v0.6.x carve-outs). **No breaking changes vs `0.5.0` — every
|
|
409
|
+
v0.6 surface is additive.** Built as a single feature milestone
|
|
410
|
+
(M38).
|
|
411
|
+
|
|
412
|
+
### Breaking changes vs `0.5.0`
|
|
413
|
+
|
|
414
|
+
**None.** Every command, error code, envelope key, and warning
|
|
415
|
+
shape shipped in v0.5.0 is preserved byte-for-byte. v0.6 only adds.
|
|
416
|
+
|
|
417
|
+
### Surface
|
|
418
|
+
|
|
419
|
+
**117 commands shipped (unchanged from v0.5).** M38 extends two
|
|
420
|
+
existing verbs (`monday item set` + `monday item update`) with a
|
|
421
|
+
new dispatch leg rather than introducing new noun namespaces or
|
|
422
|
+
verbs. The friendly translator stays JSON-output-shaped for the 13
|
|
423
|
+
existing writable types; file-column dispatch routes through a
|
|
424
|
+
new sibling module (`src/api/file-column-set.ts`) that handles the
|
|
425
|
+
multipart leg.
|
|
426
|
+
|
|
427
|
+
**Files-shaped friendly `--set` (M38) — `monday item set <iid>
|
|
428
|
+
<file-col>=<path>` + `monday item update <iid> --set <file-col>=
|
|
429
|
+
<path>`.** Sibling-branch dispatch at the column-resolution
|
|
430
|
+
boundary (per D1 closure): after column metadata loads, if
|
|
431
|
+
`column.type === 'file'` AND single-`--set` AND no other writes,
|
|
432
|
+
route to `executeFileColumnSet` (the new multipart-wire fetcher);
|
|
433
|
+
otherwise route to the standard translator + `executeItemMutation`
|
|
434
|
+
path. The translator (`translateColumnValueAsync`) stays
|
|
435
|
+
JSON-output-shaped for the 13 existing writable types — no
|
|
436
|
+
breaking shape change on any existing dispatch path. Routes
|
|
437
|
+
into v0.4-M31's `add_file_to_column` multipart wire verbatim
|
|
438
|
+
(no new transport surface; `dispatchMultipart` consumer count
|
|
439
|
+
goes 1 → 2; `ResolvedClient.multipart` consumer count goes
|
|
440
|
+
1 → 2).
|
|
441
|
+
|
|
442
|
+
**Mutex rules at M38 (per D2 closure).** Exactly ONE file
|
|
443
|
+
`--set <file-col>=<path>` per call, no other `--set` /
|
|
444
|
+
`--set-raw` / `--name` flags allowed:
|
|
445
|
+
|
|
446
|
+
- File `--set` + ANY value `--set` / `--set-raw` / `--name` →
|
|
447
|
+
`usage_error` carrying `details.reason:
|
|
448
|
+
'mixed_file_and_value_sets'` + a hint pointing agents at
|
|
449
|
+
running the file `--set` alone and applying value writes /
|
|
450
|
+
rename in a separate call.
|
|
451
|
+
- 2+ file `--set` entries → `usage_error` carrying
|
|
452
|
+
`details.reason: 'multi_file_set_unsupported'` (defers to
|
|
453
|
+
v0.6.x; the bulk-file-set milestone will address multi-file
|
|
454
|
+
dispatch).
|
|
455
|
+
|
|
456
|
+
Enforcement fires at the column-resolution boundary (parse-time
|
|
457
|
+
can't know — the column type only resolves after board metadata
|
|
458
|
+
loads); rejection happens BEFORE any multipart bytes get
|
|
459
|
+
constructed.
|
|
460
|
+
|
|
461
|
+
**Bulk + create paths REJECT at M38 (per D5 / D6 closures).**
|
|
462
|
+
The two paths that don't ship friendly file-set dispatch at M38
|
|
463
|
+
surface dedicated rejection reasons:
|
|
464
|
+
|
|
465
|
+
- `monday item update --board <bid> (--where <c>=<v>... |
|
|
466
|
+
--filter-json <json>) --set <file-col>=<path>` →
|
|
467
|
+
`usage_error.details.reason:
|
|
468
|
+
'file_set_on_bulk_unsupported'`. Per-item file dispatch +
|
|
469
|
+
`--continue-on-error` partial-success envelope + `--concurrency`
|
|
470
|
+
shared-transport semantics each carry additional design
|
|
471
|
+
dimensions worth their own milestone; defers to v0.6.x.
|
|
472
|
+
- `monday item create --board <bid> --name <n> --set <file-col>=
|
|
473
|
+
<path>` → `usage_error.details.reason:
|
|
474
|
+
'file_set_on_create_unsupported'`. File upload at create time
|
|
475
|
+
would require non-atomic post-create `add_file_to_column`
|
|
476
|
+
(breaks §5.8 state safety) or a Monday wire mutation accepting
|
|
477
|
+
multipart parts inside `create_item.column_values` (no such
|
|
478
|
+
mutation at API `2026-01`); defers to v0.6.x.
|
|
479
|
+
|
|
480
|
+
**`--set-raw <file-col>=<json>` STAYS REJECTED at M38 (per D3
|
|
481
|
+
closure — PERMANENT, not deferred).** Monday's wire has no JSON
|
|
482
|
+
shape for `change_column_value` on file columns — `add_file_to_
|
|
483
|
+
column` is the only file-write wire surface and it's multipart-
|
|
484
|
+
only. The `--set-raw` escape-hatch contract ("user supplies the
|
|
485
|
+
JSON `change_column_value` accepts") doesn't compose with
|
|
486
|
+
multipart. The existing rejection at `src/api/raw-write.ts:
|
|
487
|
+
translateRawColumnValue` stays unchanged. The rejection now
|
|
488
|
+
carries `details.hint` pointing at BOTH the M38 friendly
|
|
489
|
+
`--set` form AND the M31 verb-shaped `monday item upload` —
|
|
490
|
+
agents have two write paths reaching the same multipart wire
|
|
491
|
+
and key off the hint rather than the (absent) `deferred_to`
|
|
492
|
+
slot.
|
|
493
|
+
|
|
494
|
+
**Dry-run envelope shape (per D4 closure).** Mirrors M31 `item
|
|
495
|
+
upload --dry-run` envelope verbatim:
|
|
496
|
+
`planned_changes: [{operation: 'add_file_to_column', item_id,
|
|
497
|
+
column_id, file_path, filename, file_size_bytes}]` (size from
|
|
498
|
+
`fs.stat()`; no file bytes loaded into memory). `meta.source:
|
|
499
|
+
'none'`. The `file_path` slot echoes the argv-derived path; the
|
|
500
|
+
`column_id` slot echoes the RESOLVED column ID (not the argv
|
|
501
|
+
token).
|
|
502
|
+
|
|
503
|
+
### Output contract additions
|
|
504
|
+
|
|
505
|
+
**No new stable error codes — registry stays at 29.** Per D8
|
|
506
|
+
closure, M38 routes every rejection through existing codes
|
|
507
|
+
(`usage_error` / `unsupported_column_type` / `not_found` /
|
|
508
|
+
`validation_failed`) with `details.reason` literal-string
|
|
509
|
+
discriminators. The four M38-specific reasons
|
|
510
|
+
(`mixed_file_and_value_sets` / `multi_file_set_unsupported` /
|
|
511
|
+
`file_set_on_bulk_unsupported` / `file_set_on_create_unsupported`)
|
|
512
|
+
join the existing R-NEW-31 discriminated-union per-status-detail
|
|
513
|
+
pattern.
|
|
514
|
+
|
|
515
|
+
**No new envelope keys, no new warning shapes.** M38 reuses the
|
|
516
|
+
M31 multipart wire's success envelope shape (single `item` slot
|
|
517
|
+
projecting the post-mutation board snapshot) and the same
|
|
518
|
+
post-success eager-invalidation contract (`invalidateBoard(boardId)`
|
|
519
|
+
fires single-leg on multipart success).
|
|
520
|
+
|
|
521
|
+
### Upgrade notes
|
|
522
|
+
|
|
523
|
+
- **`unsupported_column_type` `deferred_to: "v0.6"` is DROPPED
|
|
524
|
+
for the files-shaped category at the friendly `--set` form.**
|
|
525
|
+
v0.6-M38 picks the inline write path up. The rejection row at
|
|
526
|
+
`src/api/column-values.ts` (the files-shaped row of the
|
|
527
|
+
friendly translator) now fires ONLY on the `item create` +
|
|
528
|
+
`item update --where` bulk paths per D5 / D6 closures — with
|
|
529
|
+
`details.reason: 'file_set_on_create_unsupported'` /
|
|
530
|
+
`'file_set_on_bulk_unsupported'`. The single-item `item set` +
|
|
531
|
+
`item update` paths dispatch to the new sibling module BEFORE
|
|
532
|
+
the translator's files-shaped row fires. No more
|
|
533
|
+
`deferred_to: "v0.6"` slot on the friendly-form path —
|
|
534
|
+
agents see successful single-item uploads end-to-end.
|
|
535
|
+
- **`unsupported_column_type` for `--set-raw <file-col>=<json>`
|
|
536
|
+
STAYS REJECTED.** Permanent rejection per D3 — Monday's
|
|
537
|
+
wire has no JSON shape for files-shaped `change_column_value`.
|
|
538
|
+
The rejection hint at `src/api/raw-write.ts` now names BOTH
|
|
539
|
+
the M38 friendly form AND the M31 verb-shaped `monday item
|
|
540
|
+
upload` as alternative write paths; agents construct retries
|
|
541
|
+
from either entry point.
|
|
542
|
+
- **Multi-level subitem creation slips from `"v0.6"` →
|
|
543
|
+
`"v0.7"`.** Originally slipped from v0.3 → v0.4 → v0.5 → v0.6
|
|
544
|
+
across three prior release-preps. v0.6 didn't pick it up —
|
|
545
|
+
Monday's `sub_items_board` still carries no `subtasks` column
|
|
546
|
+
at API `2026-01`, so depth-2 subitems still have no data-model
|
|
547
|
+
home. Single-level subitems (`item create --parent <iid>`
|
|
548
|
+
against classic boards) continue to work byte-identically.
|
|
549
|
+
The `error.code: "usage_error"` + `details.hierarchy_type:
|
|
550
|
+
"multi_level"` keys are unchanged; only the `deferred_to`
|
|
551
|
+
literal flipped.
|
|
552
|
+
- **Cross-board `item move` value-overrides slip from `"v0.6"`
|
|
553
|
+
→ `"v0.7"`.** Slipped across v0.3-M11 → v0.4 → v0.5 → v0.6
|
|
554
|
+
→ v0.7 release-preps. Monday's `ColumnMappingInput` still
|
|
555
|
+
carries no value slot; the cross-leg partial-failure envelope
|
|
556
|
+
question stays open. Agents needing overrides continue to fire
|
|
557
|
+
`monday item set <iid> <target>=<value>` post-move.
|
|
558
|
+
- **Cross-board resumable cursor slips from `"v0.6"` →
|
|
559
|
+
`"v0.7"`.** The `cross_board_truncated` warning's
|
|
560
|
+
`details.hint` continues to recommend narrowing via
|
|
561
|
+
`--workspace` / `--favorites` / `--max-boards`; v0.7 may pick
|
|
562
|
+
the resumable surface up if per-board cursor-lifetime under
|
|
563
|
+
aggregation gets a clean design.
|
|
564
|
+
- **Stable error-code registry stays at 29.** Existing codes'
|
|
565
|
+
shapes are unchanged across v0.5 → v0.6.
|
|
566
|
+
- **`monday auth login` placeholder-guard unchanged.** The verb
|
|
567
|
+
is still registered and still surfaces `usage_error.details.
|
|
568
|
+
reason: oauth_unregistered` pointing at `MONDAY_API_TOKEN`
|
|
569
|
+
(unchanged from v0.5.0). The OAuth deferral revisits in
|
|
570
|
+
v0.6.x / v0.7 contingent on user demand.
|
|
571
|
+
|
|
572
|
+
### Internals worth highlighting
|
|
573
|
+
|
|
574
|
+
- **R-class refactor shipped during v0.6.** R-v0.6-NEW-1
|
|
575
|
+
(`file-source.ts` two-export module: `precheckLocalFile`
|
|
576
|
+
fs.stat + fs.access(R_OK) + non-empty + size capture +
|
|
577
|
+
`usage_error.details.reason: 'file_not_readable' |
|
|
578
|
+
'file_empty'`; `buildBlobFromPath` readFile + sniffContent
|
|
579
|
+
Type + Blob construction) shipped ahead-of-feat at v0.6-M38
|
|
580
|
+
IMPL kickoff (`3c2a9b0`) — 3 consumers post-lift (M31
|
|
581
|
+
`monday item upload` action body + M31 `monday update upload`
|
|
582
|
+
action body + M38's `executeFileColumnSet` runtime body).
|
|
583
|
+
10 direct unit tests pin the helper's branch matrix. Mirrors
|
|
584
|
+
R-NEW-29's M25 ahead-of-feat cadence + R-NEW-70's M34
|
|
585
|
+
cadence.
|
|
586
|
+
- **R-NEW-82 4th consecutive consumer ratified at v0.6
|
|
587
|
+
release-prep.** The release-prep cross-doc grep for stale
|
|
588
|
+
`deferred_to: "v0.6"` slots fired and caught one stale site
|
|
589
|
+
(multi-level subitem `--parent` rejection — slipped to
|
|
590
|
+
`"v0.7"`) plus one ToC drift (v0.6-M38 friendly file `--set`
|
|
591
|
+
annotation missing from `docs/output-shapes.md`'s `item
|
|
592
|
+
(mutations)` row). Mirrors v0.3-M28 (1st) / v0.4 (2nd) /
|
|
593
|
+
v0.5 (3rd) / v0.6 (4th) release-prep ratifications.
|
|
594
|
+
- **R-NEW-84 graduated discipline applied.** The v0.6
|
|
595
|
+
release-prep cluster ships zero production `src/**/*.ts`
|
|
596
|
+
semantic changes (only the literal `'v0.6'` → `'v0.7'` flip
|
|
597
|
+
in the multi-level subitem rejection slot); gates carry
|
|
598
|
+
verification per the R-NEW-84 carve-out (skip Codex review
|
|
599
|
+
on mechanical / process-only clusters).
|
|
600
|
+
- **`details.reason` discriminator pattern (R-v0.6-NEW-2) at
|
|
601
|
+
4 supporting instances post-M38** (`mixed_file_and_value_sets`
|
|
602
|
+
/ `multi_file_set_unsupported` / `file_set_on_create_
|
|
603
|
+
unsupported` / `file_set_on_bulk_unsupported`). Below the 5th-
|
|
604
|
+
consumer graduation threshold; tracked as a watch-item for the
|
|
605
|
+
first v0.6.x lift that adds a 5th `details.reason` literal-
|
|
606
|
+
string discriminator on the file-set surface (bulk file-set
|
|
607
|
+
carve-out is the natural site).
|
|
608
|
+
- **Two-AI review** (cli-design pre-flight + implementation
|
|
609
|
+
review) ran for M38 pre-flight + IMPL. **M38 IMPL converged
|
|
610
|
+
in 4 fix-up rounds** (0 P1 / 3 P2 / 11 P3 cumulative across
|
|
611
|
+
rounds 1–4 — at the median 3-4 IMPL round count per the
|
|
612
|
+
v0.5 IMPL precedent). The v0.6 release-prep cluster skipped
|
|
613
|
+
Codex per R-NEW-84. Cumulative finding count + per-round
|
|
614
|
+
Codex breakdown lives in the per-milestone post-mortem in
|
|
615
|
+
[`docs/v0.6-plan.md`](./docs/v0.6-plan.md) §11.
|
|
616
|
+
|
|
617
|
+
### Tests + quality gates
|
|
618
|
+
|
|
619
|
+
- **4100 unit/integration + E2E tests** at v0.6.0 (+1 skipped;
|
|
620
|
+
was 4054+1 at v0.5.0; ~46 new tests for M38 — `file-source`
|
|
621
|
+
helper unit branch matrix, `file-column-set` action-body
|
|
622
|
+
branches, integration cassette pins on single-item friendly
|
|
623
|
+
paths + the four `details.reason`-discriminated rejection
|
|
624
|
+
paths, envelope-snapshot pins on the M38 surfaces). All green
|
|
625
|
+
on Node 22 + 24.
|
|
626
|
+
- **Coverage at 99.26 / 96.46 / 99.31 / 99.52** (statements /
|
|
627
|
+
branches / functions / lines) against the floor 95 / 95.45 /
|
|
628
|
+
95 / 95. Branches margin **1.01pp** at v0.6.0 (was 1.00pp at
|
|
629
|
+
v0.5.0; +0.01pp). Floor unchanged across v0.5.0 → v0.6.0.
|
|
630
|
+
- **Envelope-snapshot suite** — refresh probe ran clean at
|
|
631
|
+
v0.6 release-prep (zero diff vs M38 IMPL close); per-
|
|
632
|
+
milestone close-docs sweep refreshed snapshots in lockstep at
|
|
633
|
+
M38 IMPL close.
|
|
634
|
+
- **Five test layers held**: unit, integration (in-process
|
|
635
|
+
`FixtureTransport` + `MultipartFixtureTransport`), E2E
|
|
636
|
+
(subprocess against fixture server), envelope-shape snapshot
|
|
637
|
+
suite, published-tarball E2E.
|
|
638
|
+
- **Audit-fix folded into release-prep.** `npm audit` flagged a
|
|
639
|
+
transitive `fast-uri@3.1.0` (high severity); `npm audit fix`
|
|
640
|
+
cleanly resolved to `3.1.2` (non-breaking — `ajv@8.20.0`'s
|
|
641
|
+
`^3.0.1` constraint satisfies 3.1.x). `npm audit` reports
|
|
642
|
+
`0 vulnerabilities` post-fix.
|
|
643
|
+
|
|
644
|
+
### Documentation
|
|
645
|
+
|
|
646
|
+
- **[`docs/v0.6-plan.md`](./docs/v0.6-plan.md)** new — the v0.6
|
|
647
|
+
active plan with M38 milestone, decisions log (D1-D8),
|
|
648
|
+
R-class register (R-v0.6-NEW-1 through R-v0.6-NEW-11),
|
|
649
|
+
per-milestone post-mortem (§11 + §22).
|
|
650
|
+
- **[`docs/cli-design.md`](./docs/cli-design.md)** §4.3
|
|
651
|
+
`monday item set` + `monday item update` rows annotated with
|
|
652
|
+
the M38 file-column dispatch shape + mutex rules; §5.3
|
|
653
|
+
"File-column dispatch leg" subsection added explaining the
|
|
654
|
+
sibling-branch routing + the four `details.reason`
|
|
655
|
+
discriminators; §13 v0.5 entry's v0.6 deferral list closed
|
|
656
|
+
out + the v0.7 frame pinned (multi-level subitems + cross-
|
|
657
|
+
board move value-overrides + cross-board resumable cursor +
|
|
658
|
+
profile-scoped argument defaults).
|
|
659
|
+
- **[`docs/output-shapes.md`](./docs/output-shapes.md)** —
|
|
660
|
+
`item set` + `item update` sections gained M38 file-column
|
|
661
|
+
dispatch subsections at lines 2100, 2151, 2243; ToC row
|
|
662
|
+
for `item (mutations)` updated to enumerate the friendly
|
|
663
|
+
file `--set v0.6-M38` annotation on `set` + `update`
|
|
664
|
+
(caught at v0.6 release-prep ToC audit as a v0.6-M38
|
|
665
|
+
close-docs gap — 4th consecutive R-NEW-82 graduated-
|
|
666
|
+
discipline ratification).
|
|
667
|
+
- **README.md** quickstart expanded with v0.6 example (step 13
|
|
668
|
+
demonstrating M38 friendly file `--set` on item set + item
|
|
669
|
+
update + dry-run). Scope section reshaped around v0.6.0 /
|
|
670
|
+
v0.5.0 / v0.4.0 / v0.3.0 / v0.2.0 / v0.1.0 per-version
|
|
671
|
+
layout.
|
|
672
|
+
|
|
673
|
+
[0.6.0]: https://github.com/Firer/monday-cli/releases/tag/v0.6.0
|
|
674
|
+
|
|
10
675
|
## [0.5.0] - 2026-05-17 — Team writers + full Monday workdocs CRUD mutation surface
|
|
11
676
|
|
|
12
677
|
The "agents can write to teams + drive the full workdocs surface"
|