Skip to content

v0.7.0 — Bulk + create-time file --set carve-out folds (M42 + M43)

Choose a tag to compare

@Firer Firer released this 20 May 15:52
· 135 commits to main since this release

The "friendly file --set reaches every callShape" milestone — v0.6-M38's single-item friendly file-column writer gains the two carve-outs deferred at M38: bulk monday item update --where ... --set <file-col>=<path> per-item multipart fan-out (M42, closes D5) and create-time monday item create --set <file-col>=<path> two-leg dispatch under the §5.8 orphan-warn atomicity envelope (M43, closes D6). The friendly file---set form now reaches every CLI callShape (item set / item update <iid> / item update --where / item create). No breaking changes vs 0.6.0 — every v0.7 surface is additive. Built incrementally across M42 + M43.

Pivot 2026-05-20: the originally-planned API 2026-04 pin bump (M39) + monday item set-description (M40) + monday doc block-create-bulk (M41) cluster DEFERRED to a future release pending @mondaydotcomorg/api SDK 15.x publishing with CURRENT_VERSION = '2026-04' natively + a paid-tier sandbox for the M40 wire probe (M40's empirical probe revealed paid-tier gating + opaque INTERNAL_SERVER_ERROR { service: 'docs-api' } on free-tier accounts). Re-attempt expected at v0.8 if Monday's SDK cadence holds.

Breaking changes vs 0.6.0

None. Every command, error code, envelope key, and warning shape shipped in v0.6.0 is preserved byte-for-byte. v0.7 only adds.

Surface

117 commands shipped (unchanged from v0.6). M42 + M43 extend two existing verbs (monday item update bulk dispatch leg + monday item create action body) with new file-column dispatch branches rather than introducing new noun namespaces or verbs.

M42 — monday item update --where ... --set <file-col>=<path>

Per-item multipart fan-out across the --where-resolved item-id set, dispatched through the existing v0.4-M30 dispatchParallel over a shared MultipartTransport. --concurrency 1..32 (default 1) opts into bounded parallel dispatch per the v0.4-M30 range; --continue-on-error partitions per-item wire failures into the M25 partial-success envelope while leaving whole-call-abort semantics for the upfront local file pre-check (per cli-design §5.8). New aggregate data.summary slots (column_id / filename / file_size_bytes) echo the dispatched file. New data.operation: 'item_update_bulk_file_set' discriminator. Reuses M31's multipart wire verbatim + v0.6-M38's executeFileColumnSet runtime body — no new wire op.

M43 — monday item create --set <file-col>=<path>

Two-leg dispatch via the new runItemCreateFileDispatch helper: leg-1 create_item bundles the non-file column_values atomically into the wire call; leg-2 add_file_to_column attaches the file to the newly-created item. Pair is non-atomic by construction — leg-2 failure surfaces internal_error with details.reason: 'create_then_file_upload_partial_failure' + details.created_item_id (the orphaned leg-1 item ID) + details.column_id + details.cause (M31 wire-failure projection) + details.hint directing agents to retry leg-2 alone (monday item set <iid> <file-col>=<path>) OR rollback (monday item delete <iid> --yes). --dry-run emits two planned_changes entries (create_item + add_file_to_column); leg-2 carries no item_id slot because the item doesn't exist at dry-run time.

Universal mutex rules at v0.7 (across all 4 callShapes)

  • Exactly ONE file --set <file-col>=<path> per call across every callShape. 2+ file entries reject with usage_error.details.reason: 'multi_file_set_unsupported'.
  • Mixing a file --set with any value --set / --set-raw / --name rejects with usage_error.details.reason: 'mixed_file_and_value_sets' on 'item_set' / 'item_update_single' / 'item_update_bulk'. SUPPRESSED on 'item_create' per the D6 asymmetry — create_item bundles non-file column_values atomically into leg-1, so the mix is legitimate at create time.

--set-raw <file-col>=<json> STAYS REJECTED at v0.7 (unchanged from v0.6-M38 D3 — PERMANENT)

Monday's wire has no JSON shape for change_column_value on file columns. The rejection hint names BOTH the friendly --set form (now universal across callShapes) AND the v0.4-M31 verb-shaped monday item upload.

Upgrade notes

  • unsupported_column_type deferred_to: "v0.6" DROPPED for the files-shaped category on bulk + create paths. v0.7-M42 picks up the bulk path; v0.7-M43 picks up the create-time path. The pre-v0.7 literals 'file_set_on_bulk_unsupported' and 'file_set_on_create_unsupported' stay RESERVED in docstrings + regression-guarded; the runtime path no longer surfaces them.
  • --set-raw <file-col>=<json> stays REJECTED (PERMANENT — no deferred_to slot).
  • Multi-level subitem creation slips from "v0.7" → "v0.8" (4th consecutive slip; v0.7 pivoted away from API 2026-04 at 2026-05-20 so the data-model probe gate moves to v0.8's planned 2026-07 pin).
  • Cross-board item move value-overrides + cross-board resumable cursor slip "v0.7" → "v0.8" (Monday's ColumnMappingInput still carries no value slot).
  • Stable error-code registry stays at 29. One new details.reason discriminator: 'create_then_file_upload_partial_failure' (M43 orphan-warn envelope) — graduates R-v0.6-NEW-2's discriminated-union per-status-detail pattern at the 5-consumer threshold.

Tests + quality gates

  • 4124 unit/integration + E2E tests at v0.7.0 (+1 skipped; was 4100 + 1 at v0.6.0; +24 net for M42 + M43).
  • Coverage at 98.79 / 95.65 / 99.16 / 99.08 (statements / branches / functions / lines) against the floor 95 / 95.45 / 95 / 95. Branches margin 0.20pp at v0.7.0 (was 1.01pp at v0.6.0; the 0.81pp drop reflects new conditional-spread arms across M42 + M43 IMPL paths, c8-ignored per testing.md preferred form).
  • Audit-fix folded into release-prep (2nd-consecutive consumer per the v0.6 precedent). npm audit flagged transitive brace-expansion@5.0.2 (moderate severity — GHSA-jxxr-4gwj-5jf2); npm audit fix cleanly resolved to 5.0.5+. npm audit reports 0 vulnerabilities post-fix.

Full release notes in CHANGELOG.md.