Bootstrap
cawplan skill check
Background
Tickets have ux values NOT_REQUIRED, PENDING, and READY; only PENDING needs UX follow-up.
Use cawplan tickets search, not tickets poll, because poll does not return ux.
Every workflow passes --excluded_status_categories COMPLETE,CANCELED: UX can remain PENDING after a ticket closes. Use category filters, not product-line-specific status keys.
UX queries need the full window:
--start_date 2000-01-01 --end_date <today>
Pagination: increment page_num while page_num * page_size < total; use total as the completion signal.
Entry Routing
| Input | Flow |
|---|---|
| A specific product + version ("ticket that this version needs UX follow-up on") | A — Version scope |
| A specific product, no version given, not framed by priority or team | A — Version scope, but ask the user whether they mean a specific version or all versions of the product — "all versions" runs Workflow A step 2 with --product_ids and no --version_ids, no priority filter added (that's Workflow B's filter, not applicable here just because the version was dropped) |
| High-priority + no specific version, or explicitly cross-version | B — Priority scope |
| A Team / product line ("a list of UX not yet provided by a certain team") | C — Team scope |
| A product's UX members' design completion ("summarize the UX completion status of the CawCut Cloud UX Team this week") | D — Product UX completion |
Workflow A — Version scope
-
Resolve product + version (same pattern as
cawplan-plan-tracksteps 1-2):cawplan products list --search "<product name>" cawplan versions list <product_id>The supplied product must be an exact accessible-name match (case-insensitive after trimming whitespace), a unique short-form/token-prefix match, or a candidate the user explicitly confirms. If no unique match exists, show the candidates and ask which product they mean before listing versions or querying tickets; never use the closest product name.
-
Fetch:
cawplan tickets search --version_ids <version_id> --ux PENDING --excluded_status_categories COMPLETE,CANCELED --start_date 2000-01-01 --end_date <today> --page_size 100 --page_num 1Page through fully (see Pagination above).
For "all versions of this product" (per Entry Routing), drop
--version_idsand use--product_ids <product_id>instead — everything else in this step is unchanged, and no priority filter is added just because there's no version.
Workflow B — Priority scope
- If the user gave a product/version, resolve it the same way as Workflow A and add
--product_ids/--version_ids. If they didn't, ask whether to scope to a product or search across everything they have access to — don't silently assume "everything." - Fetch:
Page through fully (see Pagination above), then sortcawplan tickets search --priority CRITICAL,HIGH --ux PENDING --excluded_status_categories COMPLETE,CANCELED --start_date 2000-01-01 --end_date <today> --page_size 100 --page_num 1 [--product_ids <id>] [--version_ids <id>]CRITICAL→HIGH.
Workflow C — Team scope
- Resolve the Team name to a
product_line_id— same pattern ascawplan-product-report's Team workflow:cawplan product-lines list --page_size 100, match by name client-side. Require an exact name match (case-insensitive after trimming whitespace), a unique short-form/token-prefix match, or explicit user confirmation of a candidate. Ask to disambiguate on multiple matches; if no unique name match exists, list candidates and ask which Team the user means rather than guessing the closest one. - Fetch:
Page through fully (see Pagination above), then sortcawplan tickets search --product_line_ids <product_line_id> --ux PENDING --excluded_status_categories COMPLETE,CANCELED --start_date 2000-01-01 --end_date <today> --page_size 100 --page_num 1CRITICAL→HIGH→MEDIUM→LOW.
Workflow D — Product UX completion
UX Team here means the product's configured members.designers roster, not a CawPlan product
line. If the product is omitted, ask which product's UX members should be reported.
- Resolve the product and complete the product-access gate used by Workflow A:
Read the matched product'scawplan products list --search "<product name or product_id>"members.designers[]roster and collect itsuser_idvalues and display names. If it has no Designers, report that the product has no configured UX roster and stop. Membership is product-scoped; use this returned roster, not a workspace-wide keyword search. Default the date window to the current week only when the user does not provide one. - Fetch candidates that currently need or have completed UX. Exclude
NOT_REQUIREDtickets with--ux PENDING,READY;NOT_REQUIREDis the default state and does not represent UX work. Do not add terminal-status exclusions: a Ticket may have been markedREADYin the requested window and later edited, closed, or moved back toPENDING.
Page through fully (see Pagination above).cawplan tickets search --product_ids <product_id> --ux PENDING,READY --start_date 2000-01-01 --end_date <today> --updated_start_date <window_start> --updated_end_date <today> --page_size 100 --page_num 1updated_atonly produces candidates; it is not UX completion evidence. - For every candidate, fetch
cawplan tickets history <product_id> <version_id> <ticket_id>. Keep only anUPDATEDhistory entry whosechanged_fields.uxchanges toREADY, whosecreated_atis inside the requested window, and whose history-entryuser_idis in the product'smembers.designersroster. The field can be the stringREADYor an object with anewvalue; support both. Do not count a Ticket because its currentuxisREADY, because it is assigned to a Designer, or because a non-Designer changed its UX field. - Deduplicate by Ticket, retaining its latest in-window UX-Ready event. Group the retained
Tickets by that history entry's actor (
user_id/user_display_name): this actor is the product roster's Designer who completed the UX work. Never group, count, or infer the Designer from the Ticket's reporter or ordinary assignees.
Output
- One row per matching ticket: display ID, title, type, priority, product/version, assignee.
- Workflow B/C: sorted by priority descending, as above.
- State the search window and that terminal categories are excluded.
- If nothing matches, say so plainly — don't return an empty table with no comment.
- For Workflow D, show each configured Designer's UX-Ready ticket count and the Ticket list
(display ID, title, product/version, UX-Ready timestamp). State the requested window, the
product used for the UX roster, and that counts are based on history-verified
ux → READYevents.
References
references/CAWPLAN_OPEN_API.md