Commit f08bfef
feat(item): add
New narrow read verb that surfaces `Item.description { id, blocks:
[DocumentBlock] }` via raw GraphQL at API 2026-01. Mirrors v0.9-M52's
`board views <bid>` carve-out from `board describe`: heavy/nested
content lives behind an opt-in verb rather than bloating
ITEM_FIELDS_FRAGMENT's ~16 universal consumers (`item get` / `list` /
`find` / `search` / `subitems` / `history` + every mutation result).
Closes R-v0.9-NEW-8 (filed at v0.9-M52 close-docs; user-directed at
the v0.11 candidate-selection 2026-05-22). Per R-v0.9-NEW-2 this is a
pure-additive new verb with no deferred wire leg — the verb's wire
leg IS the runtime payload at pre-flight, no stub literal needed
(3rd structurally distinct instance of the rule after M50 deletion
and M53 pure refactor).
Empirical probe ran 2026-05-23 against API 2026-01 (the CLI pin) —
confirms Item.description is OBJECT-typed and NOT SDK-gated. Same
SDK-drift class as `hierarchy_type` / `views`
(`@mondaydotcomorg/api` 14.0.0 doesn't expose `ItemDescription`),
so the v0.9-M52-graduated two-layer wire selection-pin guard
applies: cassette `match_query: /description \{/` (with brace —
bare `description` rejects without selection-set) plus
RUN_LIVE_TESTS `toHaveProperty('description')` against the
production document.
Decisions closed at pre-flight kickoff:
D1 — Shape: narrow verb (vs extending ITEM_FIELDS_FRAGMENT
universally vs both). User AskUserQuestion 2026-05-23 single
round-trip in favour of the narrow verb per workflow.md
"Read-side field-add" — heavy/nested fields carve out;
lightweight/universal extend. Item.description is heavy
(LIST<DocumentBlock> with JSON-scalar `content` payloads) and
most items have no description; universal projection would
bloat `item list` N-row responses without commensurate value.
D3 — Wire-null normalisation: literal `description: null` on
items with no description set (probed) normalises to the
sentinel `{id: null, blocks: []}` at the parseItemDescription
boundary. Keeps the single-resource envelope's `data` slot an
iterable object so the table renderer's Object.keys iteration
doesn't crash; agents distinguish absent (`data.id === null`)
from present (`data.id !== null`).
D4 — DocumentBlock projection: narrow 4-field (`id` / `type` /
`content` / `position`) out of 9 wire fields. Dropped the 5
metadata-side fields (parent_block_id / doc_id / created_at /
created_by / updated_at) — `doc get`'s DocumentBlock
projection covers those for agents needing doc-block lineage.
D5 — ERROR_CODES delta: zero. Registry stays at 29; new verb
routes through existing not_found / usage_error / unauthorized
/ internal_error (with details.issues + details.reason
discriminator for `malformed_item_row` shape regressions).
Codex pre-flight review R1 CONVERGED (0 P1; 1 P2 + 1 P3 both
applied inline at this commit). P2-1 added a `!isPlainObject(first)`
guard before plucking `.description` so a malformed Monday row
(e.g., `items: [42]`) surfaces as `internal_error` with
`details.reason: 'malformed_item_row'` instead of collapsing to the
"no description" sentinel. P3-1 tightened the unit-test
selection-pin regex to scope the 4-field assertion INSIDE the
`blocks { ... }` selection — a refactor dropping any of the named
subfields now fails before reaching CI.
Net stats: +1 command (118 → 119); 29 ERROR_CODES unchanged; 0
fixture ripples; 0 existing call sites touched; 4270 → 4293 tests
pass (+23: 13 unit + 7 integration + 1 malformed-row guard + 1
new RUN_LIVE_TESTS-gated skip + the existing snapshot delta);
branches 95.84% (≥ 95.45 floor); npm audit 0 vulns.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>monday item get-description — read Item.description (v0.11-M54-G pre-flight)1 parent 5d5eca1 commit f08bfef
11 files changed
Lines changed: 1585 additions & 20 deletions
File tree
- docs
- src
- api
- commands
- item
- tests
- e2e
- integration
- __snapshots__
- commands
- unit/api
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
188 | 188 | | |
189 | 189 | | |
190 | 190 | | |
191 | | - | |
192 | | - | |
193 | | - | |
194 | | - | |
195 | | - | |
196 | | - | |
197 | | - | |
198 | | - | |
199 | | - | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
200 | 224 | | |
201 | 225 | | |
202 | 226 | | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
203 | 245 | | |
204 | 246 | | |
205 | 247 | | |
| |||
584 | 626 | | |
585 | 627 | | |
586 | 628 | | |
587 | | - | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
588 | 650 | | |
589 | 651 | | |
590 | 652 | | |
| |||
605 | 667 | | |
606 | 668 | | |
607 | 669 | | |
608 | | - | |
| 670 | + | |
609 | 671 | | |
610 | 672 | | |
611 | 673 | | |
| |||
645 | 707 | | |
646 | 708 | | |
647 | 709 | | |
648 | | - | |
| 710 | + | |
649 | 711 | | |
650 | 712 | | |
651 | 713 | | |
652 | 714 | | |
653 | 715 | | |
654 | 716 | | |
655 | | - | |
| 717 | + | |
656 | 718 | | |
657 | 719 | | |
658 | 720 | | |
| |||
664 | 726 | | |
665 | 727 | | |
666 | 728 | | |
667 | | - | |
| 729 | + | |
668 | 730 | | |
669 | 731 | | |
670 | | - | |
| 732 | + | |
671 | 733 | | |
672 | | - | |
| 734 | + | |
673 | 735 | | |
674 | | - | |
| 736 | + | |
675 | 737 | | |
676 | | - | |
| 738 | + | |
677 | 739 | | |
678 | | - | |
| 740 | + | |
679 | 741 | | |
680 | 742 | | |
681 | 743 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1797 | 1797 | | |
1798 | 1798 | | |
1799 | 1799 | | |
| 1800 | + | |
| 1801 | + | |
| 1802 | + | |
| 1803 | + | |
| 1804 | + | |
| 1805 | + | |
| 1806 | + | |
| 1807 | + | |
| 1808 | + | |
| 1809 | + | |
| 1810 | + | |
| 1811 | + | |
| 1812 | + | |
| 1813 | + | |
| 1814 | + | |
| 1815 | + | |
| 1816 | + | |
| 1817 | + | |
| 1818 | + | |
| 1819 | + | |
| 1820 | + | |
| 1821 | + | |
| 1822 | + | |
| 1823 | + | |
| 1824 | + | |
| 1825 | + | |
| 1826 | + | |
1800 | 1827 | | |
1801 | 1828 | | |
1802 | 1829 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1809 | 1809 | | |
1810 | 1810 | | |
1811 | 1811 | | |
| 1812 | + | |
| 1813 | + | |
| 1814 | + | |
| 1815 | + | |
| 1816 | + | |
| 1817 | + | |
| 1818 | + | |
| 1819 | + | |
| 1820 | + | |
| 1821 | + | |
| 1822 | + | |
| 1823 | + | |
| 1824 | + | |
| 1825 | + | |
| 1826 | + | |
| 1827 | + | |
| 1828 | + | |
| 1829 | + | |
| 1830 | + | |
| 1831 | + | |
| 1832 | + | |
| 1833 | + | |
| 1834 | + | |
| 1835 | + | |
| 1836 | + | |
| 1837 | + | |
| 1838 | + | |
| 1839 | + | |
| 1840 | + | |
| 1841 | + | |
| 1842 | + | |
| 1843 | + | |
| 1844 | + | |
| 1845 | + | |
| 1846 | + | |
| 1847 | + | |
| 1848 | + | |
| 1849 | + | |
| 1850 | + | |
| 1851 | + | |
1812 | 1852 | | |
1813 | 1853 | | |
1814 | 1854 | | |
| |||
0 commit comments