monday-cli 0.4.0 → 0.6.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 +645 -0
- package/README.md +173 -34
- package/dist/api/column-types.d.ts +48 -17
- package/dist/api/column-types.d.ts.map +1 -1
- package/dist/api/column-types.js +25 -9
- package/dist/api/column-types.js.map +1 -1
- package/dist/api/column-values.d.ts +17 -9
- package/dist/api/column-values.d.ts.map +1 -1
- package/dist/api/column-values.js +33 -18
- package/dist/api/column-values.js.map +1 -1
- package/dist/api/documents.d.ts +1136 -3
- package/dist/api/documents.d.ts.map +1 -1
- package/dist/api/documents.js +1828 -3
- package/dist/api/documents.js.map +1 -1
- package/dist/api/file-column-set.d.ts +507 -0
- package/dist/api/file-column-set.d.ts.map +1 -0
- package/dist/api/file-column-set.js +510 -0
- package/dist/api/file-column-set.js.map +1 -0
- package/dist/api/raw-write.d.ts +27 -16
- package/dist/api/raw-write.d.ts.map +1 -1
- package/dist/api/raw-write.js +40 -24
- 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/api/teams.d.ts +657 -0
- package/dist/api/teams.d.ts.map +1 -0
- package/dist/api/teams.js +880 -0
- package/dist/api/teams.js.map +1 -0
- package/dist/commands/board/column-create.d.ts +8 -3
- package/dist/commands/board/column-create.d.ts.map +1 -1
- package/dist/commands/board/column-create.js +16 -8
- package/dist/commands/board/column-create.js.map +1 -1
- package/dist/commands/doc/append-markdown.d.ts +117 -0
- package/dist/commands/doc/append-markdown.d.ts.map +1 -0
- package/dist/commands/doc/append-markdown.js +253 -0
- package/dist/commands/doc/append-markdown.js.map +1 -0
- package/dist/commands/doc/block-create.d.ts +114 -0
- package/dist/commands/doc/block-create.d.ts.map +1 -0
- package/dist/commands/doc/block-create.js +206 -0
- package/dist/commands/doc/block-create.js.map +1 -0
- package/dist/commands/doc/block-delete.d.ts +72 -0
- package/dist/commands/doc/block-delete.d.ts.map +1 -0
- package/dist/commands/doc/block-delete.js +161 -0
- package/dist/commands/doc/block-delete.js.map +1 -0
- package/dist/commands/doc/block-update.d.ts +75 -0
- package/dist/commands/doc/block-update.d.ts.map +1 -0
- package/dist/commands/doc/block-update.js +162 -0
- package/dist/commands/doc/block-update.js.map +1 -0
- package/dist/commands/doc/create-in-workspace.d.ts +76 -0
- package/dist/commands/doc/create-in-workspace.d.ts.map +1 -0
- package/dist/commands/doc/create-in-workspace.js +164 -0
- package/dist/commands/doc/create-in-workspace.js.map +1 -0
- package/dist/commands/doc/create-on-column.d.ts +71 -0
- package/dist/commands/doc/create-on-column.d.ts.map +1 -0
- package/dist/commands/doc/create-on-column.js +146 -0
- package/dist/commands/doc/create-on-column.js.map +1 -0
- package/dist/commands/doc/delete.d.ts +68 -0
- package/dist/commands/doc/delete.d.ts.map +1 -0
- package/dist/commands/doc/delete.js +146 -0
- package/dist/commands/doc/delete.js.map +1 -0
- package/dist/commands/doc/duplicate.d.ts +101 -0
- package/dist/commands/doc/duplicate.d.ts.map +1 -0
- package/dist/commands/doc/duplicate.js +191 -0
- package/dist/commands/doc/duplicate.js.map +1 -0
- package/dist/commands/doc/import-html.d.ts +125 -0
- package/dist/commands/doc/import-html.d.ts.map +1 -0
- package/dist/commands/doc/import-html.js +273 -0
- package/dist/commands/doc/import-html.js.map +1 -0
- package/dist/commands/doc/list.d.ts +6 -3
- package/dist/commands/doc/list.d.ts.map +1 -1
- package/dist/commands/doc/list.js +17 -48
- package/dist/commands/doc/list.js.map +1 -1
- package/dist/commands/doc/rename.d.ts +60 -0
- package/dist/commands/doc/rename.d.ts.map +1 -0
- package/dist/commands/doc/rename.js +135 -0
- package/dist/commands/doc/rename.js.map +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +116 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/item/create.d.ts.map +1 -1
- package/dist/commands/item/create.js +131 -33
- 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 +34 -3
- package/dist/commands/item/update.d.ts.map +1 -1
- package/dist/commands/item/update.js +346 -67
- 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/create.d.ts.map +1 -1
- package/dist/commands/update/create.js +6 -4
- package/dist/commands/update/create.js.map +1 -1
- package/dist/commands/update/edit.d.ts +4 -2
- package/dist/commands/update/edit.d.ts.map +1 -1
- package/dist/commands/update/edit.js +10 -6
- package/dist/commands/update/edit.js.map +1 -1
- package/dist/commands/update/reply.d.ts +4 -2
- package/dist/commands/update/reply.d.ts.map +1 -1
- package/dist/commands/update/reply.js +10 -6
- package/dist/commands/update/reply.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/commands/user/_team-membership.d.ts +10 -0
- package/dist/commands/user/_team-membership.d.ts.map +1 -0
- package/dist/commands/user/_team-membership.js +88 -0
- package/dist/commands/user/_team-membership.js.map +1 -0
- package/dist/commands/user/team-add-members.d.ts +81 -0
- package/dist/commands/user/team-add-members.d.ts.map +1 -0
- package/dist/commands/user/team-add-members.js +186 -0
- package/dist/commands/user/team-add-members.js.map +1 -0
- package/dist/commands/user/team-create.d.ts +82 -0
- package/dist/commands/user/team-create.d.ts.map +1 -0
- package/dist/commands/user/team-create.js +206 -0
- package/dist/commands/user/team-create.js.map +1 -0
- package/dist/commands/user/team-delete.d.ts +56 -0
- package/dist/commands/user/team-delete.d.ts.map +1 -0
- package/dist/commands/user/team-delete.js +137 -0
- package/dist/commands/user/team-delete.js.map +1 -0
- package/dist/commands/user/team-get.d.ts +41 -0
- package/dist/commands/user/team-get.d.ts.map +1 -0
- package/dist/commands/user/team-get.js +87 -0
- package/dist/commands/user/team-get.js.map +1 -0
- package/dist/commands/user/team-list.d.ts +39 -0
- package/dist/commands/user/team-list.d.ts.map +1 -0
- package/dist/commands/user/team-list.js +90 -0
- package/dist/commands/user/team-list.js.map +1 -0
- package/dist/commands/user/team-remove-members.d.ts +71 -0
- package/dist/commands/user/team-remove-members.d.ts.map +1 -0
- package/dist/commands/user/team-remove-members.js +176 -0
- package/dist/commands/user/team-remove-members.js.map +1 -0
- package/dist/types/ids.d.ts +6 -0
- package/dist/types/ids.d.ts.map +1 -1
- package/dist/types/ids.js +46 -5
- package/dist/types/ids.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/dist/utils/parse-brand-list.d.ts +95 -0
- package/dist/utils/parse-brand-list.d.ts.map +1 -0
- package/dist/utils/parse-brand-list.js +96 -0
- package/dist/utils/parse-brand-list.js.map +1 -0
- package/dist/utils/source-content.d.ts +93 -0
- package/dist/utils/source-content.d.ts.map +1 -0
- package/dist/utils/source-content.js +120 -0
- package/dist/utils/source-content.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,651 @@ 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.6.0] - 2026-05-18 — Files-shaped friendly `--set` writes (M38)
|
|
11
|
+
|
|
12
|
+
The "agents can write to files-shaped columns inline" milestone —
|
|
13
|
+
v0.4-M31's `monday item upload` verb-shaped multipart wire surface
|
|
14
|
+
gains the friendly translator-boundary inline form
|
|
15
|
+
(`monday item set <iid> <file-col>=<path>` + `monday item update
|
|
16
|
+
<iid> --set <file-col>=<path>`), closing the v0.4 → v0.5 → v0.6
|
|
17
|
+
carry-over of the inline form across two prior release-preps.
|
|
18
|
+
Single-item paths only at M38; bulk + create + multi-file +
|
|
19
|
+
stdin paths reject with `details.reason` discriminators (defer
|
|
20
|
+
to v0.6.x carve-outs). **No breaking changes vs `0.5.0` — every
|
|
21
|
+
v0.6 surface is additive.** Built as a single feature milestone
|
|
22
|
+
(M38).
|
|
23
|
+
|
|
24
|
+
### Breaking changes vs `0.5.0`
|
|
25
|
+
|
|
26
|
+
**None.** Every command, error code, envelope key, and warning
|
|
27
|
+
shape shipped in v0.5.0 is preserved byte-for-byte. v0.6 only adds.
|
|
28
|
+
|
|
29
|
+
### Surface
|
|
30
|
+
|
|
31
|
+
**117 commands shipped (unchanged from v0.5).** M38 extends two
|
|
32
|
+
existing verbs (`monday item set` + `monday item update`) with a
|
|
33
|
+
new dispatch leg rather than introducing new noun namespaces or
|
|
34
|
+
verbs. The friendly translator stays JSON-output-shaped for the 13
|
|
35
|
+
existing writable types; file-column dispatch routes through a
|
|
36
|
+
new sibling module (`src/api/file-column-set.ts`) that handles the
|
|
37
|
+
multipart leg.
|
|
38
|
+
|
|
39
|
+
**Files-shaped friendly `--set` (M38) — `monday item set <iid>
|
|
40
|
+
<file-col>=<path>` + `monday item update <iid> --set <file-col>=
|
|
41
|
+
<path>`.** Sibling-branch dispatch at the column-resolution
|
|
42
|
+
boundary (per D1 closure): after column metadata loads, if
|
|
43
|
+
`column.type === 'file'` AND single-`--set` AND no other writes,
|
|
44
|
+
route to `executeFileColumnSet` (the new multipart-wire fetcher);
|
|
45
|
+
otherwise route to the standard translator + `executeItemMutation`
|
|
46
|
+
path. The translator (`translateColumnValueAsync`) stays
|
|
47
|
+
JSON-output-shaped for the 13 existing writable types — no
|
|
48
|
+
breaking shape change on any existing dispatch path. Routes
|
|
49
|
+
into v0.4-M31's `add_file_to_column` multipart wire verbatim
|
|
50
|
+
(no new transport surface; `dispatchMultipart` consumer count
|
|
51
|
+
goes 1 → 2; `ResolvedClient.multipart` consumer count goes
|
|
52
|
+
1 → 2).
|
|
53
|
+
|
|
54
|
+
**Mutex rules at M38 (per D2 closure).** Exactly ONE file
|
|
55
|
+
`--set <file-col>=<path>` per call, no other `--set` /
|
|
56
|
+
`--set-raw` / `--name` flags allowed:
|
|
57
|
+
|
|
58
|
+
- File `--set` + ANY value `--set` / `--set-raw` / `--name` →
|
|
59
|
+
`usage_error` carrying `details.reason:
|
|
60
|
+
'mixed_file_and_value_sets'` + a hint pointing agents at
|
|
61
|
+
running the file `--set` alone and applying value writes /
|
|
62
|
+
rename in a separate call.
|
|
63
|
+
- 2+ file `--set` entries → `usage_error` carrying
|
|
64
|
+
`details.reason: 'multi_file_set_unsupported'` (defers to
|
|
65
|
+
v0.6.x; the bulk-file-set milestone will address multi-file
|
|
66
|
+
dispatch).
|
|
67
|
+
|
|
68
|
+
Enforcement fires at the column-resolution boundary (parse-time
|
|
69
|
+
can't know — the column type only resolves after board metadata
|
|
70
|
+
loads); rejection happens BEFORE any multipart bytes get
|
|
71
|
+
constructed.
|
|
72
|
+
|
|
73
|
+
**Bulk + create paths REJECT at M38 (per D5 / D6 closures).**
|
|
74
|
+
The two paths that don't ship friendly file-set dispatch at M38
|
|
75
|
+
surface dedicated rejection reasons:
|
|
76
|
+
|
|
77
|
+
- `monday item update --board <bid> (--where <c>=<v>... |
|
|
78
|
+
--filter-json <json>) --set <file-col>=<path>` →
|
|
79
|
+
`usage_error.details.reason:
|
|
80
|
+
'file_set_on_bulk_unsupported'`. Per-item file dispatch +
|
|
81
|
+
`--continue-on-error` partial-success envelope + `--concurrency`
|
|
82
|
+
shared-transport semantics each carry additional design
|
|
83
|
+
dimensions worth their own milestone; defers to v0.6.x.
|
|
84
|
+
- `monday item create --board <bid> --name <n> --set <file-col>=
|
|
85
|
+
<path>` → `usage_error.details.reason:
|
|
86
|
+
'file_set_on_create_unsupported'`. File upload at create time
|
|
87
|
+
would require non-atomic post-create `add_file_to_column`
|
|
88
|
+
(breaks §5.8 state safety) or a Monday wire mutation accepting
|
|
89
|
+
multipart parts inside `create_item.column_values` (no such
|
|
90
|
+
mutation at API `2026-01`); defers to v0.6.x.
|
|
91
|
+
|
|
92
|
+
**`--set-raw <file-col>=<json>` STAYS REJECTED at M38 (per D3
|
|
93
|
+
closure — PERMANENT, not deferred).** Monday's wire has no JSON
|
|
94
|
+
shape for `change_column_value` on file columns — `add_file_to_
|
|
95
|
+
column` is the only file-write wire surface and it's multipart-
|
|
96
|
+
only. The `--set-raw` escape-hatch contract ("user supplies the
|
|
97
|
+
JSON `change_column_value` accepts") doesn't compose with
|
|
98
|
+
multipart. The existing rejection at `src/api/raw-write.ts:
|
|
99
|
+
translateRawColumnValue` stays unchanged. The rejection now
|
|
100
|
+
carries `details.hint` pointing at BOTH the M38 friendly
|
|
101
|
+
`--set` form AND the M31 verb-shaped `monday item upload` —
|
|
102
|
+
agents have two write paths reaching the same multipart wire
|
|
103
|
+
and key off the hint rather than the (absent) `deferred_to`
|
|
104
|
+
slot.
|
|
105
|
+
|
|
106
|
+
**Dry-run envelope shape (per D4 closure).** Mirrors M31 `item
|
|
107
|
+
upload --dry-run` envelope verbatim:
|
|
108
|
+
`planned_changes: [{operation: 'add_file_to_column', item_id,
|
|
109
|
+
column_id, file_path, filename, file_size_bytes}]` (size from
|
|
110
|
+
`fs.stat()`; no file bytes loaded into memory). `meta.source:
|
|
111
|
+
'none'`. The `file_path` slot echoes the argv-derived path; the
|
|
112
|
+
`column_id` slot echoes the RESOLVED column ID (not the argv
|
|
113
|
+
token).
|
|
114
|
+
|
|
115
|
+
### Output contract additions
|
|
116
|
+
|
|
117
|
+
**No new stable error codes — registry stays at 29.** Per D8
|
|
118
|
+
closure, M38 routes every rejection through existing codes
|
|
119
|
+
(`usage_error` / `unsupported_column_type` / `not_found` /
|
|
120
|
+
`validation_failed`) with `details.reason` literal-string
|
|
121
|
+
discriminators. The four M38-specific reasons
|
|
122
|
+
(`mixed_file_and_value_sets` / `multi_file_set_unsupported` /
|
|
123
|
+
`file_set_on_bulk_unsupported` / `file_set_on_create_unsupported`)
|
|
124
|
+
join the existing R-NEW-31 discriminated-union per-status-detail
|
|
125
|
+
pattern.
|
|
126
|
+
|
|
127
|
+
**No new envelope keys, no new warning shapes.** M38 reuses the
|
|
128
|
+
M31 multipart wire's success envelope shape (single `item` slot
|
|
129
|
+
projecting the post-mutation board snapshot) and the same
|
|
130
|
+
post-success eager-invalidation contract (`invalidateBoard(boardId)`
|
|
131
|
+
fires single-leg on multipart success).
|
|
132
|
+
|
|
133
|
+
### Upgrade notes
|
|
134
|
+
|
|
135
|
+
- **`unsupported_column_type` `deferred_to: "v0.6"` is DROPPED
|
|
136
|
+
for the files-shaped category at the friendly `--set` form.**
|
|
137
|
+
v0.6-M38 picks the inline write path up. The rejection row at
|
|
138
|
+
`src/api/column-values.ts` (the files-shaped row of the
|
|
139
|
+
friendly translator) now fires ONLY on the `item create` +
|
|
140
|
+
`item update --where` bulk paths per D5 / D6 closures — with
|
|
141
|
+
`details.reason: 'file_set_on_create_unsupported'` /
|
|
142
|
+
`'file_set_on_bulk_unsupported'`. The single-item `item set` +
|
|
143
|
+
`item update` paths dispatch to the new sibling module BEFORE
|
|
144
|
+
the translator's files-shaped row fires. No more
|
|
145
|
+
`deferred_to: "v0.6"` slot on the friendly-form path —
|
|
146
|
+
agents see successful single-item uploads end-to-end.
|
|
147
|
+
- **`unsupported_column_type` for `--set-raw <file-col>=<json>`
|
|
148
|
+
STAYS REJECTED.** Permanent rejection per D3 — Monday's
|
|
149
|
+
wire has no JSON shape for files-shaped `change_column_value`.
|
|
150
|
+
The rejection hint at `src/api/raw-write.ts` now names BOTH
|
|
151
|
+
the M38 friendly form AND the M31 verb-shaped `monday item
|
|
152
|
+
upload` as alternative write paths; agents construct retries
|
|
153
|
+
from either entry point.
|
|
154
|
+
- **Multi-level subitem creation slips from `"v0.6"` →
|
|
155
|
+
`"v0.7"`.** Originally slipped from v0.3 → v0.4 → v0.5 → v0.6
|
|
156
|
+
across three prior release-preps. v0.6 didn't pick it up —
|
|
157
|
+
Monday's `sub_items_board` still carries no `subtasks` column
|
|
158
|
+
at API `2026-01`, so depth-2 subitems still have no data-model
|
|
159
|
+
home. Single-level subitems (`item create --parent <iid>`
|
|
160
|
+
against classic boards) continue to work byte-identically.
|
|
161
|
+
The `error.code: "usage_error"` + `details.hierarchy_type:
|
|
162
|
+
"multi_level"` keys are unchanged; only the `deferred_to`
|
|
163
|
+
literal flipped.
|
|
164
|
+
- **Cross-board `item move` value-overrides slip from `"v0.6"`
|
|
165
|
+
→ `"v0.7"`.** Slipped across v0.3-M11 → v0.4 → v0.5 → v0.6
|
|
166
|
+
→ v0.7 release-preps. Monday's `ColumnMappingInput` still
|
|
167
|
+
carries no value slot; the cross-leg partial-failure envelope
|
|
168
|
+
question stays open. Agents needing overrides continue to fire
|
|
169
|
+
`monday item set <iid> <target>=<value>` post-move.
|
|
170
|
+
- **Cross-board resumable cursor slips from `"v0.6"` →
|
|
171
|
+
`"v0.7"`.** The `cross_board_truncated` warning's
|
|
172
|
+
`details.hint` continues to recommend narrowing via
|
|
173
|
+
`--workspace` / `--favorites` / `--max-boards`; v0.7 may pick
|
|
174
|
+
the resumable surface up if per-board cursor-lifetime under
|
|
175
|
+
aggregation gets a clean design.
|
|
176
|
+
- **Stable error-code registry stays at 29.** Existing codes'
|
|
177
|
+
shapes are unchanged across v0.5 → v0.6.
|
|
178
|
+
- **`monday auth login` placeholder-guard unchanged.** The verb
|
|
179
|
+
is still registered and still surfaces `usage_error.details.
|
|
180
|
+
reason: oauth_unregistered` pointing at `MONDAY_API_TOKEN`
|
|
181
|
+
(unchanged from v0.5.0). The OAuth deferral revisits in
|
|
182
|
+
v0.6.x / v0.7 contingent on user demand.
|
|
183
|
+
|
|
184
|
+
### Internals worth highlighting
|
|
185
|
+
|
|
186
|
+
- **R-class refactor shipped during v0.6.** R-v0.6-NEW-1
|
|
187
|
+
(`file-source.ts` two-export module: `precheckLocalFile`
|
|
188
|
+
fs.stat + fs.access(R_OK) + non-empty + size capture +
|
|
189
|
+
`usage_error.details.reason: 'file_not_readable' |
|
|
190
|
+
'file_empty'`; `buildBlobFromPath` readFile + sniffContent
|
|
191
|
+
Type + Blob construction) shipped ahead-of-feat at v0.6-M38
|
|
192
|
+
IMPL kickoff (`3c2a9b0`) — 3 consumers post-lift (M31
|
|
193
|
+
`monday item upload` action body + M31 `monday update upload`
|
|
194
|
+
action body + M38's `executeFileColumnSet` runtime body).
|
|
195
|
+
10 direct unit tests pin the helper's branch matrix. Mirrors
|
|
196
|
+
R-NEW-29's M25 ahead-of-feat cadence + R-NEW-70's M34
|
|
197
|
+
cadence.
|
|
198
|
+
- **R-NEW-82 4th consecutive consumer ratified at v0.6
|
|
199
|
+
release-prep.** The release-prep cross-doc grep for stale
|
|
200
|
+
`deferred_to: "v0.6"` slots fired and caught one stale site
|
|
201
|
+
(multi-level subitem `--parent` rejection — slipped to
|
|
202
|
+
`"v0.7"`) plus one ToC drift (v0.6-M38 friendly file `--set`
|
|
203
|
+
annotation missing from `docs/output-shapes.md`'s `item
|
|
204
|
+
(mutations)` row). Mirrors v0.3-M28 (1st) / v0.4 (2nd) /
|
|
205
|
+
v0.5 (3rd) / v0.6 (4th) release-prep ratifications.
|
|
206
|
+
- **R-NEW-84 graduated discipline applied.** The v0.6
|
|
207
|
+
release-prep cluster ships zero production `src/**/*.ts`
|
|
208
|
+
semantic changes (only the literal `'v0.6'` → `'v0.7'` flip
|
|
209
|
+
in the multi-level subitem rejection slot); gates carry
|
|
210
|
+
verification per the R-NEW-84 carve-out (skip Codex review
|
|
211
|
+
on mechanical / process-only clusters).
|
|
212
|
+
- **`details.reason` discriminator pattern (R-v0.6-NEW-2) at
|
|
213
|
+
4 supporting instances post-M38** (`mixed_file_and_value_sets`
|
|
214
|
+
/ `multi_file_set_unsupported` / `file_set_on_create_
|
|
215
|
+
unsupported` / `file_set_on_bulk_unsupported`). Below the 5th-
|
|
216
|
+
consumer graduation threshold; tracked as a watch-item for the
|
|
217
|
+
first v0.6.x lift that adds a 5th `details.reason` literal-
|
|
218
|
+
string discriminator on the file-set surface (bulk file-set
|
|
219
|
+
carve-out is the natural site).
|
|
220
|
+
- **Two-AI review** (cli-design pre-flight + implementation
|
|
221
|
+
review) ran for M38 pre-flight + IMPL. **M38 IMPL converged
|
|
222
|
+
in 4 fix-up rounds** (0 P1 / 3 P2 / 11 P3 cumulative across
|
|
223
|
+
rounds 1–4 — at the median 3-4 IMPL round count per the
|
|
224
|
+
v0.5 IMPL precedent). The v0.6 release-prep cluster skipped
|
|
225
|
+
Codex per R-NEW-84. Cumulative finding count + per-round
|
|
226
|
+
Codex breakdown lives in the per-milestone post-mortem in
|
|
227
|
+
[`docs/v0.6-plan.md`](./docs/v0.6-plan.md) §11.
|
|
228
|
+
|
|
229
|
+
### Tests + quality gates
|
|
230
|
+
|
|
231
|
+
- **4100 unit/integration + E2E tests** at v0.6.0 (+1 skipped;
|
|
232
|
+
was 4054+1 at v0.5.0; ~46 new tests for M38 — `file-source`
|
|
233
|
+
helper unit branch matrix, `file-column-set` action-body
|
|
234
|
+
branches, integration cassette pins on single-item friendly
|
|
235
|
+
paths + the four `details.reason`-discriminated rejection
|
|
236
|
+
paths, envelope-snapshot pins on the M38 surfaces). All green
|
|
237
|
+
on Node 22 + 24.
|
|
238
|
+
- **Coverage at 99.26 / 96.46 / 99.31 / 99.52** (statements /
|
|
239
|
+
branches / functions / lines) against the floor 95 / 95.45 /
|
|
240
|
+
95 / 95. Branches margin **1.01pp** at v0.6.0 (was 1.00pp at
|
|
241
|
+
v0.5.0; +0.01pp). Floor unchanged across v0.5.0 → v0.6.0.
|
|
242
|
+
- **Envelope-snapshot suite** — refresh probe ran clean at
|
|
243
|
+
v0.6 release-prep (zero diff vs M38 IMPL close); per-
|
|
244
|
+
milestone close-docs sweep refreshed snapshots in lockstep at
|
|
245
|
+
M38 IMPL close.
|
|
246
|
+
- **Five test layers held**: unit, integration (in-process
|
|
247
|
+
`FixtureTransport` + `MultipartFixtureTransport`), E2E
|
|
248
|
+
(subprocess against fixture server), envelope-shape snapshot
|
|
249
|
+
suite, published-tarball E2E.
|
|
250
|
+
- **Audit-fix folded into release-prep.** `npm audit` flagged a
|
|
251
|
+
transitive `fast-uri@3.1.0` (high severity); `npm audit fix`
|
|
252
|
+
cleanly resolved to `3.1.2` (non-breaking — `ajv@8.20.0`'s
|
|
253
|
+
`^3.0.1` constraint satisfies 3.1.x). `npm audit` reports
|
|
254
|
+
`0 vulnerabilities` post-fix.
|
|
255
|
+
|
|
256
|
+
### Documentation
|
|
257
|
+
|
|
258
|
+
- **[`docs/v0.6-plan.md`](./docs/v0.6-plan.md)** new — the v0.6
|
|
259
|
+
active plan with M38 milestone, decisions log (D1-D8),
|
|
260
|
+
R-class register (R-v0.6-NEW-1 through R-v0.6-NEW-11),
|
|
261
|
+
per-milestone post-mortem (§11 + §22).
|
|
262
|
+
- **[`docs/cli-design.md`](./docs/cli-design.md)** §4.3
|
|
263
|
+
`monday item set` + `monday item update` rows annotated with
|
|
264
|
+
the M38 file-column dispatch shape + mutex rules; §5.3
|
|
265
|
+
"File-column dispatch leg" subsection added explaining the
|
|
266
|
+
sibling-branch routing + the four `details.reason`
|
|
267
|
+
discriminators; §13 v0.5 entry's v0.6 deferral list closed
|
|
268
|
+
out + the v0.7 frame pinned (multi-level subitems + cross-
|
|
269
|
+
board move value-overrides + cross-board resumable cursor +
|
|
270
|
+
profile-scoped argument defaults).
|
|
271
|
+
- **[`docs/output-shapes.md`](./docs/output-shapes.md)** —
|
|
272
|
+
`item set` + `item update` sections gained M38 file-column
|
|
273
|
+
dispatch subsections at lines 2100, 2151, 2243; ToC row
|
|
274
|
+
for `item (mutations)` updated to enumerate the friendly
|
|
275
|
+
file `--set v0.6-M38` annotation on `set` + `update`
|
|
276
|
+
(caught at v0.6 release-prep ToC audit as a v0.6-M38
|
|
277
|
+
close-docs gap — 4th consecutive R-NEW-82 graduated-
|
|
278
|
+
discipline ratification).
|
|
279
|
+
- **README.md** quickstart expanded with v0.6 example (step 13
|
|
280
|
+
demonstrating M38 friendly file `--set` on item set + item
|
|
281
|
+
update + dry-run). Scope section reshaped around v0.6.0 /
|
|
282
|
+
v0.5.0 / v0.4.0 / v0.3.0 / v0.2.0 / v0.1.0 per-version
|
|
283
|
+
layout.
|
|
284
|
+
|
|
285
|
+
[0.6.0]: https://github.com/Firer/monday-cli/releases/tag/v0.6.0
|
|
286
|
+
|
|
287
|
+
## [0.5.0] - 2026-05-17 — Team writers + full Monday workdocs CRUD mutation surface
|
|
288
|
+
|
|
289
|
+
The "agents can write to teams + drive the full workdocs surface"
|
|
290
|
+
milestone — v0.4's read-only workdocs + asset-upload foundation
|
|
291
|
+
gains the six team-writer verbs deferred at the post-v0.4-M33
|
|
292
|
+
candidate-selection session and the full Monday workdocs CRUD
|
|
293
|
+
mutation surface deferred at v0.4-M32 D8 closure (10 new doc-
|
|
294
|
+
namespace verbs across doc-level + doc-block + doc-content-import
|
|
295
|
+
clusters). **16 new CLI verbs across 9 wire mutations.** **No
|
|
296
|
+
breaking changes vs `0.4.0` — every v0.5 surface is additive.**
|
|
297
|
+
Built incrementally across M34–M37.
|
|
298
|
+
|
|
299
|
+
### Breaking changes vs `0.4.0`
|
|
300
|
+
|
|
301
|
+
**None.** Every command, error code, envelope key, and warning
|
|
302
|
+
shape shipped in v0.4.0 is preserved byte-for-byte. v0.5 only adds.
|
|
303
|
+
|
|
304
|
+
### Surface
|
|
305
|
+
|
|
306
|
+
**~117 commands shipped (was ~101 in v0.4).** 16 new verbs.
|
|
307
|
+
The new noun namespaces are extensions of existing ones — no new
|
|
308
|
+
top-level noun lands at v0.5 (team writers extend `monday user`;
|
|
309
|
+
doc-level + doc-block + doc-content-import extend `monday doc`).
|
|
310
|
+
|
|
311
|
+
**Team writers (M34) — `monday user team-list/get/create/delete/
|
|
312
|
+
add-members/remove-members`.** Six new verbs closing the v0.4-M33
|
|
313
|
+
candidate-selection deferral. The two read verbs (`team-list` /
|
|
314
|
+
`team-get`) project Monday's `Team` shape (`id`, `name`, `picture_url`,
|
|
315
|
+
`users[]`, `owners[]`). The four mutations:
|
|
316
|
+
|
|
317
|
+
- `team-create --name <n> [--users <id>,...] [--guest-team]
|
|
318
|
+
[--allow-empty] [--dry-run]` — backed by `create_team`.
|
|
319
|
+
`--users` resolves to Monday `UserId` list at the parse boundary
|
|
320
|
+
via the new lifted `parseBrandedListArg<T>(raw, brandSchema,
|
|
321
|
+
options)` helper (R-NEW-70 shipped ahead-of-feat at M34
|
|
322
|
+
pre-flight — 4 consumers post-lift).
|
|
323
|
+
- `team-delete <tid> --yes [--dry-run]` — backed by `delete_team`.
|
|
324
|
+
The destructive verb in the cluster; `--yes` gate fires BEFORE
|
|
325
|
+
`resolveClient` per the M10 round-1 P2 invariant.
|
|
326
|
+
- `team-add-members <tid> --users <id>,... [--dry-run]` +
|
|
327
|
+
`team-remove-members <tid> --users <id>,...` — backed by
|
|
328
|
+
`change_team_memberships`. Monday's mutation returns
|
|
329
|
+
`failed_users` + `successful_users` lists (asymmetric — failed
|
|
330
|
+
users carry a User object but no per-user failure reason, so
|
|
331
|
+
the CLI surfaces a generic `membership_failed` message per
|
|
332
|
+
failed record). The new shared `_team-membership.ts:
|
|
333
|
+
projectMembershipResults` helper projects to the universal
|
|
334
|
+
§6.1 `data.results: [{user_id, ok, ...}]` shape with input-
|
|
335
|
+
order preserved + failed-bucket-priority discipline + an
|
|
336
|
+
`internal_error` surface for input users that land in neither
|
|
337
|
+
bucket (wire-shape regression defensive). Lifted at IMPL
|
|
338
|
+
kickoff as a 2-consumer inline lift mirroring M26b's
|
|
339
|
+
`_shared.ts:requireDevBoard` cadence.
|
|
340
|
+
|
|
341
|
+
`team-list` ships flat (Monday's `teams(...)` has no pagination
|
|
342
|
+
on the wire); the two-read-without-pagination shape mirrors
|
|
343
|
+
`monday user list`. The four mutations all surface `--dry-run`
|
|
344
|
+
for planned-change envelopes.
|
|
345
|
+
|
|
346
|
+
**Doc-level CRUD (M35) — `monday doc create-in-workspace/
|
|
347
|
+
create-on-column/rename/delete/duplicate`.** Five verbs, four
|
|
348
|
+
wire mutations (both create variants share `create_doc` per D7's
|
|
349
|
+
mutually-exclusive `board` vs `workspace` split):
|
|
350
|
+
|
|
351
|
+
- `create-in-workspace --workspace <wid> --name <n> [--folder
|
|
352
|
+
<fid>] [--kind public|private|share]` — creates a workspace-
|
|
353
|
+
level doc. Brand: new `DocFolderIdSchema` joins
|
|
354
|
+
`src/types/ids.ts` as the 11th numeric brand.
|
|
355
|
+
- `create-on-column --item <iid> --column <cid>` — creates a
|
|
356
|
+
column-level doc against an existing file-shaped column.
|
|
357
|
+
- `rename <did> --name <n>` — `update_doc_name`.
|
|
358
|
+
- `delete <did> --yes [--dry-run]` — `delete_doc`. Destructive
|
|
359
|
+
gate fires BEFORE `resolveClient` per the M10 invariant.
|
|
360
|
+
- `duplicate <did> [--with-updates] [--dry-run]` — `duplicate_doc`
|
|
361
|
+
(D8 closure dropped `--name <n>` because the wire side has no
|
|
362
|
+
rename slot on duplicate). `--with-updates` copies the source
|
|
363
|
+
doc's comments to the duplicate; new `extractDuplicateDocId`
|
|
364
|
+
helper defensively unwraps the opaque-JSON new-doc-id across
|
|
365
|
+
bare-string / number / record-with-`id` / `doc_id` /
|
|
366
|
+
`new_doc_id` shapes per D9 closure (Monday's `duplicate_doc`
|
|
367
|
+
returns a flat `{ doc_id, success: true }` projection with
|
|
368
|
+
`success` pinned literal-`true` because failure surfaces via
|
|
369
|
+
GraphQL `errors[]` upstream, NOT via a wire-side success flag).
|
|
370
|
+
`--dry-run` previews the planned change envelope without firing
|
|
371
|
+
the wire.
|
|
372
|
+
|
|
373
|
+
D7 / D8 / D9 closures pinned at pre-flight: D7 two CLI verbs over
|
|
374
|
+
one with placement choosers (mirrors v0.4-M31's `monday item
|
|
375
|
+
upload` / `monday update upload` split for the same multipart
|
|
376
|
+
wire path). D8 drops `--name <n>` from duplicate. D9 opaque-JSON
|
|
377
|
+
returns project to flat `{ doc_id, success: true }` per §6.1
|
|
378
|
+
single-record envelope.
|
|
379
|
+
|
|
380
|
+
**Doc-block CRUD (M36) — `monday doc block-create/block-update/
|
|
381
|
+
block-delete`.** Three verbs / three wire mutations. `--type
|
|
382
|
+
<DocBlockContentType>` takes one of 16 enum values (`normal_text`
|
|
383
|
+
/ `large_title` / `medium_title` / `small_title` / `quote` /
|
|
384
|
+
`bulleted_list` / `numbered_list` / `check_list` / `code` /
|
|
385
|
+
`divider` / `image` / `video` / `file` / `table` / `layout` /
|
|
386
|
+
`column`) per D10 closure (unknown values reject at the parse
|
|
387
|
+
boundary with `usage_error.details.issues[]` carrying `{path:
|
|
388
|
+
'type', message}`). `--content <json>` parses via the M27-lifted
|
|
389
|
+
`parseJsonArg` helper (4th + 5th consumers of the helper).
|
|
390
|
+
`block-create` accepts optional `--after <bid>` / `--parent <bid>`
|
|
391
|
+
positioning slots; `block-update` updates the named block's
|
|
392
|
+
content payload; `block-delete --yes` deletes the named block.
|
|
393
|
+
Per-type content payload shapes documented in `docs/output-
|
|
394
|
+
shapes.md` "Per-block content shapes" reference table — 7
|
|
395
|
+
cassette-pinned variants + 9 TBD / inferred variants awaiting
|
|
396
|
+
follow-up cassettes per D11 closure (per-variant payload-shape
|
|
397
|
+
deferral to IMPL cassettes — R-v0.5-NEW-15 watch-item supporting
|
|
398
|
+
instance 2 of 3 ahead of graduation).
|
|
399
|
+
|
|
400
|
+
`DocBlockIdSchema` brand uses `slugIdSchema` (non-empty-string
|
|
401
|
+
base; same shape as `ColumnId` / `GroupId`) because Monday's
|
|
402
|
+
`DocumentBlock.id` is wire `String!`, NOT `ID!` — load-bearing
|
|
403
|
+
distinction from `DocId`'s numeric brand. Snake_case wire arg
|
|
404
|
+
names (`doc_id` / `block_id` / `after_block_id` / `parent_block_id`)
|
|
405
|
+
— Monday's standard cadence, not a new R-NEW-41 supporting site.
|
|
406
|
+
|
|
407
|
+
**Doc-content import (M37) — `monday doc import-html/append-
|
|
408
|
+
markdown`.** Two verbs / two wire mutations. Bulk doc-content
|
|
409
|
+
import in a single wire round-trip (no per-block loop):
|
|
410
|
+
|
|
411
|
+
- `import-html --workspace <wid> (--html <file|-> | --html-string
|
|
412
|
+
<s>) [--folder <fid>] [--kind public|private|share] [--title
|
|
413
|
+
<t>]` — creates a new doc from an HTML payload.
|
|
414
|
+
- `append-markdown <did> (--markdown <file|-> | --markdown-string
|
|
415
|
+
<s>) [--after <bid>]` — appends blocks to an existing doc from
|
|
416
|
+
a markdown payload.
|
|
417
|
+
|
|
418
|
+
Both surface mutex argv sources (file / stdin / inline string)
|
|
419
|
+
backed by the new generic `readSourceContent` helper at
|
|
420
|
+
`src/utils/source-content.ts` (R-v0.5-NEW-18 lifted ahead-of-
|
|
421
|
+
feat at M37 IMPL — widens M13's `readUpdateBody` to parameterise
|
|
422
|
+
on `inlineFlagName` / `fileFlagName` / `verbHint?` / `maxBytes?` /
|
|
423
|
+
`trimTrailingWhitespace?`; 5 consumers post-lift: 3 M13 update
|
|
424
|
+
verbs + 2 M37 doc verbs). 20 unit tests pin the helper's branch
|
|
425
|
+
matrix.
|
|
426
|
+
|
|
427
|
+
D12 closure pins the custom-OBJECT projection (5 branches):
|
|
428
|
+
success → flat envelope; `success: false + populated error` →
|
|
429
|
+
`validation_failed`; `success: false + empty/null error` →
|
|
430
|
+
`internal_error` (wire-regression hint); `success: true +
|
|
431
|
+
missing payload` → `internal_error` (probe descriptions promise
|
|
432
|
+
non-null); EMPTY `block_ids: []` on success → success WITH empty
|
|
433
|
+
array. D13 empirical-probe ran at M37 pre-flight kickoff
|
|
434
|
+
(`scripts/probe/v0.5-m37-size-limits.ts`, 2026-05-17, API
|
|
435
|
+
`2026-01`) + pinned the wire-side rejection threshold between
|
|
436
|
+
250KB-OK and 500KB-rejected on both surfaces — rejection shape
|
|
437
|
+
is generic `INTERNAL_SERVER_ERROR` (NOT the documented
|
|
438
|
+
`{success: false, error}` envelope path), so the CLI pre-empts
|
|
439
|
+
at parse boundary via `MAX_DOC_IMPORT_PAYLOAD_BYTES = 256_000`
|
|
440
|
+
on the `.refine()` for inline `--html-string` / `--markdown-
|
|
441
|
+
string`.
|
|
442
|
+
|
|
443
|
+
### Output contract additions
|
|
444
|
+
|
|
445
|
+
**No new stable error codes — registry stays at 29.** Every v0.5
|
|
446
|
+
milestone closed the new-error-code question NEGATIVE: M34
|
|
447
|
+
team mutations route per-user partial-success failures through
|
|
448
|
+
the generic `membership_failed` message (envelope-level per-record
|
|
449
|
+
discriminator, not a top-level code); M35 / M36 / M37 route
|
|
450
|
+
deletes through the existing `not_found`, validation failures
|
|
451
|
+
through the existing `validation_failed`, wire-shape regressions
|
|
452
|
+
through the existing `internal_error`, and parse-boundary
|
|
453
|
+
rejections through the existing `usage_error`.
|
|
454
|
+
|
|
455
|
+
**New per-record partial-success projection** (M34 —
|
|
456
|
+
`team-add-members` + `team-remove-members`). The
|
|
457
|
+
`change_team_memberships` wire mutation returns asymmetric
|
|
458
|
+
`failed_users` + `successful_users` lists; the shared
|
|
459
|
+
`_team-membership.ts:projectMembershipResults` helper projects
|
|
460
|
+
to the universal §6.1 `data.results: [{user_id, ok, ...}]`
|
|
461
|
+
shape with input-order preserved + failed-bucket-priority
|
|
462
|
+
discipline + an `internal_error` surface for input users that
|
|
463
|
+
land in neither bucket (wire-shape regression defensive).
|
|
464
|
+
Mirrors M13's `update clear-all` partial-success cadence but
|
|
465
|
+
with the wire-side asymmetry pinned in the projection.
|
|
466
|
+
|
|
467
|
+
**New custom-OBJECT 5-branch projection** (M37 — `import-html`
|
|
468
|
+
+ `append-markdown`). Monday's two new mutations return a
|
|
469
|
+
custom `{success: bool, error?: string}` shape (NOT the
|
|
470
|
+
standard OBJECT-with-id pattern). The CLI projects through the
|
|
471
|
+
5-branch dispatch pinned at D12 closure (success → flat
|
|
472
|
+
envelope; `success: false + populated error` →
|
|
473
|
+
`validation_failed`; `success: false + empty error` →
|
|
474
|
+
`internal_error` wire-regression hint; `success: true + missing
|
|
475
|
+
payload` → `internal_error`; EMPTY `block_ids: []` on success →
|
|
476
|
+
success WITH empty array). The projection is per-fetcher (no
|
|
477
|
+
shared helper at 2 consumers; R-v0.5-NEW-17 watch-item tracks
|
|
478
|
+
the OBJECT-shape null-payload guard pattern at 9 consumers
|
|
479
|
+
across M34/M35/M36 mutation fetchers but stays UNFILED today
|
|
480
|
+
per the per-consumer divergence rationale).
|
|
481
|
+
|
|
482
|
+
### Upgrade notes
|
|
483
|
+
|
|
484
|
+
- **`unsupported_column_type` `deferred_to: "v0.5"` slips to
|
|
485
|
+
`"v0.6"`** for the files-shaped category (`file` column type
|
|
486
|
+
via `--set` / `--set-raw`). Originally slipped from v0.4 →
|
|
487
|
+
v0.5 at v0.4 release-prep; v0.5 didn't pick up the friendly /
|
|
488
|
+
raw forms either (the translator boundary still doesn't
|
|
489
|
+
dispatch into the multipart wire). Slipped from v0.5 → v0.6
|
|
490
|
+
at v0.5 release-prep. `monday item upload` (v0.4-M31)
|
|
491
|
+
continues to be the verb-shaped alternative path agents
|
|
492
|
+
should use today; the hint pointing at `monday item upload`
|
|
493
|
+
is unchanged. **The hint is the load-bearing routing surface
|
|
494
|
+
— agents key off the hint, not the `deferred_to` value.**
|
|
495
|
+
- **Multi-level subitem creation slips from `"v0.5"` → `"v0.6"`.**
|
|
496
|
+
Originally slipped from v0.3 → v0.4 → v0.5 across two prior
|
|
497
|
+
release-preps. v0.5 didn't pick it up — Monday's
|
|
498
|
+
`sub_items_board` still carries no `subtasks` column at API
|
|
499
|
+
`2026-01`, so depth-2 subitems still have no data-model home.
|
|
500
|
+
Single-level subitems (`item create --parent <iid>` against
|
|
501
|
+
classic boards) continue to work byte-identically. The
|
|
502
|
+
`error.code: "usage_error"` + `details.hierarchy_type:
|
|
503
|
+
"multi_level"` keys are unchanged.
|
|
504
|
+
- **Cross-board `item move` value-overrides slip from `"v0.5"`
|
|
505
|
+
→ `"v0.6"`.** Originally v0.3-M11-targeted, slipped to v0.4
|
|
506
|
+
at v0.3-M28 audit, slipped to v0.5 at v0.4 release-prep,
|
|
507
|
+
slipped to v0.6 at v0.5 release-prep. Monday's
|
|
508
|
+
`ColumnMappingInput` still carries no value slot; supporting
|
|
509
|
+
it would need a non-atomic post-move `change_multiple_column_
|
|
510
|
+
values` with cross-leg partial-failure envelope shapes that
|
|
511
|
+
have no precedent at v0.5 close. Agents needing overrides
|
|
512
|
+
continue to fire `monday item set <iid> <target>=<value>`
|
|
513
|
+
post-move.
|
|
514
|
+
- **Cross-board resumable cursor slips from `"v0.5"` →
|
|
515
|
+
`"v0.6"`.** The `cross_board_truncated` warning's
|
|
516
|
+
`details.hint` continues to recommend narrowing via
|
|
517
|
+
`--workspace` / `--favorites` / `--max-boards`; v0.6 may pick
|
|
518
|
+
the resumable surface up if per-board cursor-lifetime under
|
|
519
|
+
aggregation gets a clean design.
|
|
520
|
+
- **Stable error-code registry stays at 29.** Existing codes'
|
|
521
|
+
shapes are unchanged across v0.4 → v0.5.
|
|
522
|
+
- **Snake_case wire arg names on M36 doc-block surfaces**
|
|
523
|
+
(`doc_id` / `block_id` / `after_block_id` / `parent_block_id`).
|
|
524
|
+
Monday's standard cadence — NOT a new R-NEW-41 supporting
|
|
525
|
+
site. M37 camelCase wire arg names (`workspaceId` / `folderId`
|
|
526
|
+
/ `docId` / `afterBlockId`) ARE a 5th R-NEW-41 supporting
|
|
527
|
+
site for the wire-vs-CLI semantics asymmetry section in
|
|
528
|
+
`docs/architecture.md`.
|
|
529
|
+
- **`monday auth login` placeholder-guard unchanged.** The verb
|
|
530
|
+
is still registered and still surfaces `usage_error.details.
|
|
531
|
+
reason: oauth_unregistered` pointing at `MONDAY_API_TOKEN`
|
|
532
|
+
(unchanged from v0.4.0). The OAuth deferral revisits in
|
|
533
|
+
v0.5.x / v0.6 contingent on user demand.
|
|
534
|
+
|
|
535
|
+
### Internals worth highlighting
|
|
536
|
+
|
|
537
|
+
- **R-class refactors shipped during v0.5.** R-NEW-70
|
|
538
|
+
(`parseBrandedListArg<T>`) shipped ahead-of-feat at v0.5-M34
|
|
539
|
+
pre-flight close (`17c1a54`) — 4 consumers post-lift (doc/list
|
|
540
|
+
`--workspace` + team-create `--users` + team-add-members
|
|
541
|
+
`--users` + team-remove-members `--users`). 18 unit tests pin
|
|
542
|
+
the helper's branch matrix. R-v0.5-NEW-18 (`readSourceContent`)
|
|
543
|
+
shipped at M37 IMPL kickoff (`c431d96`) — widens M13's
|
|
544
|
+
`readUpdateBody` to parameterise on inline / file flag names +
|
|
545
|
+
optional size cap / trim-whitespace; 5 consumers post-lift
|
|
546
|
+
(3 M13 update verbs + 2 M37 doc verbs).
|
|
547
|
+
- **R-class disciplines graduated during v0.5.** R-v0.5-NEW-11
|
|
548
|
+
(per-fetcher null-payload contract decision discipline derived
|
|
549
|
+
from probe-description return-shape promises) graduated at
|
|
550
|
+
M37 pre-flight close (3rd supporting instance — to a permanent
|
|
551
|
+
Codex pre-flight template W{N} audit-point). R-v0.5-NEW-15
|
|
552
|
+
(pre-flight per-variant payload-shape deferral to IMPL
|
|
553
|
+
cassettes) graduated at M37 pre-flight close (3rd supporting
|
|
554
|
+
instance — to a permanent Codex pre-flight template W{N}
|
|
555
|
+
audit-point). R-v0.5-NEW-19 (post-fix-up cross-doc grep
|
|
556
|
+
extension to `src/commands/index.ts` module-import block prose)
|
|
557
|
+
graduated at M37 IMPL close (2nd supporting instance — folded
|
|
558
|
+
into the CLAUDE.md R-NEW-72 "Workflow rules" entry as the
|
|
559
|
+
fourth search path alongside `src/api/*.ts` + `src/commands/
|
|
560
|
+
**/*.ts` + `docs/*.md`). R-v0.5-NEW-9 (round-N parallel-
|
|
561
|
+
fetcher fix-up test parity discipline) graduated at the
|
|
562
|
+
post-M37-close audit (2nd supporting instance — to a
|
|
563
|
+
permanent IMPL-review / pre-flight template W{N} audit-point).
|
|
564
|
+
- **Noun-stem matching for R-NEW-72 grep patterns** ratified at
|
|
565
|
+
v0.5-M37 IMPL rounds 3-5 — use `\b<noun>\b` regex matching
|
|
566
|
+
rather than literal-substring matching to catch all
|
|
567
|
+
inflections in a single pass. Lesson folded into CLAUDE.md
|
|
568
|
+
R-NEW-72 entry: enumerate sibling-site noun-stems before
|
|
569
|
+
grepping; use regex word-boundary matching to catch all
|
|
570
|
+
inflections (e.g., `cassette` / `cassette pin` / `cassette
|
|
571
|
+
pinned` / `cassette pins` collapse under `\bcassette\b`).
|
|
572
|
+
- **Empirical probes** ratified across the v0.5 surface
|
|
573
|
+
introducing novel wire shapes: M34 `change_team_memberships`
|
|
574
|
+
asymmetric bucket containers (probe round-2 surfaced the
|
|
575
|
+
outer-LIST nullability + the missing per-user failure reason
|
|
576
|
+
pinned at IMPL round-1 P2-1); M35 opaque-JSON `duplicate_doc`
|
|
577
|
+
return-shape variance probe (pinned the defensive 5-shape
|
|
578
|
+
unwrap in `extractDuplicateDocId`); M37 `MAX_DOC_IMPORT_
|
|
579
|
+
PAYLOAD_BYTES` size-limit probe at M37 pre-flight (pinned
|
|
580
|
+
the wire-side rejection threshold between 250KB-OK and
|
|
581
|
+
500KB-rejected on both surfaces). R-NEW-37 W2 (operation-
|
|
582
|
+
name parity) safely-by-construction across all v0.5
|
|
583
|
+
fetchers — verified clean at every Codex IMPL round.
|
|
584
|
+
- **Two-AI review** (cli-design pre-flight + implementation
|
|
585
|
+
review) ran for every v0.5 milestone M34–M37 + skipped on
|
|
586
|
+
the v0.5 release-prep cluster per the **R-NEW-84 carve-out**
|
|
587
|
+
graduated at v0.5-M34 pre-flight (skip Codex review on
|
|
588
|
+
mechanical / process-only / test-side housekeeping clusters
|
|
589
|
+
with zero production `src/**/*.ts` changes). M34 IMPL
|
|
590
|
+
converged in 3 rounds; M35 IMPL converged in 6 rounds (one
|
|
591
|
+
round above the OBJECT-return precedent — driven by the
|
|
592
|
+
opaque-JSON cassette-prose sweep surfacing incrementally as
|
|
593
|
+
the post-fix-up R-NEW-72 grep pattern broadened);
|
|
594
|
+
M36 IMPL converged in 2 rounds (at the LOWER bound of the
|
|
595
|
+
precedent); M37 IMPL converged in 5 rounds (~1 round above
|
|
596
|
+
M36's clean cadence, driven by the custom-OBJECT shape's
|
|
597
|
+
prose surface). The cumulative finding count + per-milestone
|
|
598
|
+
Codex-round breakdown lives in the per-milestone post-
|
|
599
|
+
mortems in [`docs/v0.5-plan.md`](./docs/v0.5-plan.md)
|
|
600
|
+
§11–§14.
|
|
601
|
+
|
|
602
|
+
### Tests + quality gates
|
|
603
|
+
|
|
604
|
+
- **4054 unit/integration + E2E tests** at v0.5.0 (+1 skipped;
|
|
605
|
+
was 3634+1 at v0.4.0; ~420 new tests across M34–M37). All
|
|
606
|
+
green on Node 22 + 24.
|
|
607
|
+
- **Coverage at 99.29 / 96.45 / 99.45 / 99.55** (statements /
|
|
608
|
+
branches / functions / lines) against the floor 95 / 95.45 /
|
|
609
|
+
95 / 95. Branches margin **1.00pp** at v0.5.0 (was 0.88pp at
|
|
610
|
+
v0.4.0; +0.12pp recovery — the v0.5 surface's runtime-body
|
|
611
|
+
branches integration-test-cover the c8-ignored stub drops at
|
|
612
|
+
IMPL close cleanly, first v0.5 IMPL milestone (M37) to cross
|
|
613
|
+
the 1.00pp branches margin threshold; the release-prep
|
|
614
|
+
cluster adds no production branches). Floor unchanged across
|
|
615
|
+
v0.4.0 → v0.5.0.
|
|
616
|
+
- **Envelope-snapshot suite** — no refresh needed at release-
|
|
617
|
+
prep; per-milestone close-docs sweeps refreshed snapshots in
|
|
618
|
+
lockstep at each IMPL close (M34 +12 snapshots, M35 +11,
|
|
619
|
+
M36 +6, M37 +0 net — describe-block widening swap only).
|
|
620
|
+
- **Five test layers held**: unit, integration (in-process
|
|
621
|
+
`FixtureTransport` + `MultipartFixtureTransport`), E2E
|
|
622
|
+
(subprocess against fixture server), envelope-shape snapshot
|
|
623
|
+
suite, published-tarball E2E.
|
|
624
|
+
|
|
625
|
+
### Documentation
|
|
626
|
+
|
|
627
|
+
- **[`docs/v0.5-plan.md`](./docs/v0.5-plan.md)** new — the v0.5
|
|
628
|
+
active plan with M34–M37 milestones, decisions log
|
|
629
|
+
(D1-D13), R-class register (R-v0.5-NEW-1 through
|
|
630
|
+
R-v0.5-NEW-22), per-milestone post-mortems (§11–§14 + §22).
|
|
631
|
+
- **[`docs/cli-design.md`](./docs/cli-design.md)** §4.3 grew
|
|
632
|
+
16 new verb entries (6 USER team-* rows + 10 DOC rows for
|
|
633
|
+
M35/M36/M37); §13 v0.4 entry's v0.5 deferral list closed
|
|
634
|
+
out + the v0.6 frame pinned (files-shaped friendly + multi-
|
|
635
|
+
level subitems + cross-board move value-overrides + cross-
|
|
636
|
+
board resumable cursor).
|
|
637
|
+
- **[`docs/output-shapes.md`](./docs/output-shapes.md)** —
|
|
638
|
+
M35/M36/M37 verb sections snapshot-backed; M34 team-writer
|
|
639
|
+
sections deferred to v0.5.x as a documentation backfill
|
|
640
|
+
(caught at v0.5 release-prep ToC audit as a v0.5-M34
|
|
641
|
+
close-docs gap; ToC row updated to enumerate the team-*
|
|
642
|
+
verbs, a minimal cross-pointer section landed under
|
|
643
|
+
`### user me` pointing agents at `cli-design.md` §4.3 +
|
|
644
|
+
the per-verb integration tests + envelope-snapshot
|
|
645
|
+
regression suite that pin the team-writer contract surface
|
|
646
|
+
today).
|
|
647
|
+
- **README.md** quickstart expanded with v0.5 examples
|
|
648
|
+
(workdocs CRUD steps demonstrating M35/M36/M37 verbs;
|
|
649
|
+
team-writer steps demonstrating M34). Scope section
|
|
650
|
+
reshaped around v0.5.0 / v0.4.0 / v0.3.0 / v0.2.0 / v0.1.0
|
|
651
|
+
per-version layout.
|
|
652
|
+
|
|
653
|
+
[0.5.0]: https://github.com/Firer/monday-cli/releases/tag/v0.5.0
|
|
654
|
+
|
|
10
655
|
## [0.4.0] - 2026-05-14 — Operational features: long-poll watch, parallel bulk, asset upload, workdocs reads, shell completion
|
|
11
656
|
|
|
12
657
|
The "agents can drive long-running workflows + multipart wire +
|