fix(cli): resolve QA findings + conversation participant limit (CORE-2259)#60
Merged
Conversation
Fix three CLI bugs and add one feature found during MEMBER-role QA:
- CORE-2260: agent message list crash — API returns a paginated envelope
{count, results} but get_agent_messages() iterated the raw dict keys.
Now extracts results from the envelope; display hardened for non-dict items.
- CORE-2261: form transition rejects labels — users had to pass the machine
key (e.g. "done") instead of the label ("Done"). Added _resolve_workflow_state()
that fetches the form's states and resolves labels to keys case-insensitively.
- CORE-2262: status --json flag was documented but missing. Added it.
- CORE-2264: checkin create help text said "admins/managers only" — relaxed
to "role-gated server-side" since Members should be allowed.
- Dockerfile: bump CLI floor to >=3.2.2.
8 new tests added (868 total passing). Two API-side issues (CORE-2263,
CORE-2264) require server changes — handoff prompt in the DWP plan.
Co-authored-by: Cursor <cursoragent@cursor.com>
Now that the API validates search queries >256 chars with a 400 search_query_too_long response, add matching client-side validation so users get instant feedback without a round-trip: - query_options.py: build_query_params rejects (ValueError) instead of silently truncating search queries exceeding 256 chars. - api_client.py: _merge_list_query raises APIError as defense-in-depth for callers that bypass build_query_params. - Verified checkin create works as Member (API CORE-2264 fix deployed). - 4 new tests, 872 total passing. Co-authored-by: Cursor <cursoragent@cursor.com>
Slack group DMs (MPIMs) support at most 8 total members. Since the Dailybot bot always occupies one slot, `conversation open` now rejects more than 7 user participants client-side before hitting the API. - Add MAX_CONVERSATION_PARTICIPANTS constant (7) - Pre-check identifier count and post-dedup UUID count - Handle `conversation_too_many_participants` API error code - Document the limit in the vendored agent skill Co-authored-by: Cursor <cursoragent@cursor.com>
5 tasks
…commands_test Co-authored-by: Cursor <cursoragent@cursor.com>
- Widen print_agent_messages parameter type to list[Any] so the isinstance guard is not flagged as unreachable by mypy. - Fix test_printers_still_emit_their_own_styling: Rich's capture() does not emit ANSI codes regardless of force_terminal; assert on content instead. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
agent message listcrash by extractingresultsfrom the paginated API envelope--jsonflag todailybot statusfor machine-readable outputcheckin createhelp text to reflect that members can now create check-insconversation openwith client-side pre-check andconversation_too_many_participantserror code handlingTest plan
agent message listreturns messages without crashingform transition --state "Done"resolves label to keystatus --jsonemits valid JSONcheckin create --helpno longer says "admins/managers"conversation openwith 8+ participants is rejected client-sideconversation openwith ≤7 participants passes validationconversation_too_many_participantsAPI error handled gracefullypytestpasses (565/566 — 1 pre-existing unrelated failure)