Problem
Sub-item operations use two different patterns inconsistently across domains:
| Pattern |
Example |
UX |
| Subcommand (nested) |
docs comments add, gmail labels create |
resource sub-resource action |
| Hyphenated (flat) |
sheets add-tab, forms add-question |
resource action-subresource |
Both patterns exist, sometimes within the same domain doing the same kind of CRUD on sub-resources.
Audit
Mixed-pattern domains (the problem)
| Domain |
Hyphenated sub-items |
Nested sub-items |
| forms |
questions (add-question, delete-question, move-question) |
responses (responses list/get), watches (watch create/list/delete/renew) |
| docs |
tabs (list-tabs) |
comments (comments list/get/add/reply/resolve/delete) |
| gmail |
mark-read |
labels, messages, threads, drafts — all nested |
Forms is the worst offender — questions and responses are both sub-resources of a form with multiple CRUD ops, yet they use opposite patterns.
Internally consistent domains (for reference)
| Domain |
Pattern |
Sub-items |
| sheets |
all hyphenated |
tabs (add-tab, rename-tab, delete-tab), notes (update-note) |
| slides |
all hyphenated |
slides (add-slide, list-slides, delete-slide, read-slide, update-notes, replace-slide) |
| chat |
all nested |
spaces, messages, threads, dm |
| classroom |
all nested |
courses, students, teachers, coursework, submissions, ... |
| calendar |
all hyphenated |
special actions only (focus-time, out-of-office, working-location) — arguably fine since these aren't sub-resource CRUD |
Proposed rule
- Subcommand when the sub-item is a distinct noun with CRUD operations →
resource sub-resource action
- Hyphenated only for special one-off actions that aren't CRUD on a sub-resource (e.g.
calendar focus-time, docs find-replace, gmail mark-read)
Scope
This is likely a large refactor in terms of lines touched — every renamed command needs its struct, aliases, help text, and tests updated. Probably best to tackle after clearing some of the open PRs, and in the meantime use this as a guideline for new commands: new sub-resource CRUD should use the subcommand pattern.
Problem
Sub-item operations use two different patterns inconsistently across domains:
docs comments add,gmail labels createresource sub-resource actionsheets add-tab,forms add-questionresource action-subresourceBoth patterns exist, sometimes within the same domain doing the same kind of CRUD on sub-resources.
Audit
Mixed-pattern domains (the problem)
add-question,delete-question,move-question)responses list/get), watches (watch create/list/delete/renew)list-tabs)comments list/get/add/reply/resolve/delete)mark-readForms is the worst offender — questions and responses are both sub-resources of a form with multiple CRUD ops, yet they use opposite patterns.
Internally consistent domains (for reference)
add-tab,rename-tab,delete-tab), notes (update-note)add-slide,list-slides,delete-slide,read-slide,update-notes,replace-slide)focus-time,out-of-office,working-location) — arguably fine since these aren't sub-resource CRUDProposed rule
resource sub-resource actioncalendar focus-time,docs find-replace,gmail mark-read)Scope
This is likely a large refactor in terms of lines touched — every renamed command needs its struct, aliases, help text, and tests updated. Probably best to tackle after clearing some of the open PRs, and in the meantime use this as a guideline for new commands: new sub-resource CRUD should use the subcommand pattern.