@cakemail-org/cakemail-cli 1.7.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +12 -0
- package/.env.example +40 -0
- package/.env.test.example +45 -0
- package/CHANGELOG.md +1031 -0
- package/README.md +41 -37
- package/audit-formats.js +128 -0
- package/cakemail.rb +20 -0
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/account.js +1 -1
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/attributes.js +1 -1
- package/dist/commands/attributes.js.map +1 -1
- package/dist/commands/campaigns.js +1 -1
- package/dist/commands/campaigns.js.map +1 -1
- package/dist/commands/contacts.js +1 -1
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/emails.js +1 -1
- package/dist/commands/emails.js.map +1 -1
- package/dist/commands/interests.js +1 -1
- package/dist/commands/interests.js.map +1 -1
- package/dist/commands/lists.js +1 -1
- package/dist/commands/lists.js.map +1 -1
- package/dist/commands/logs.js +1 -1
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/reports.js +1 -1
- package/dist/commands/reports.js.map +1 -1
- package/dist/commands/segments.js +1 -1
- package/dist/commands/segments.js.map +1 -1
- package/dist/commands/senders.js +1 -1
- package/dist/commands/senders.js.map +1 -1
- package/dist/commands/suppressed.js +1 -1
- package/dist/commands/suppressed.js.map +1 -1
- package/dist/commands/tags.js +1 -1
- package/dist/commands/tags.js.map +1 -1
- package/dist/commands/templates.js +1 -1
- package/dist/commands/templates.js.map +1 -1
- package/dist/commands/transactional-templates.js +1 -1
- package/dist/commands/transactional-templates.js.map +1 -1
- package/dist/commands/webhooks.js +1 -1
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/utils/config.js +2 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/errors.js +1 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/progress.d.ts.map +1 -1
- package/dist/utils/progress.js +32 -4
- package/dist/utils/progress.js.map +1 -1
- package/dist/utils/spinner.d.ts +17 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +43 -0
- package/dist/utils/spinner.js.map +1 -0
- package/docs/DOCUMENTATION-STANDARD.md +1068 -0
- package/docs/README.md +161 -0
- package/docs/developer/ARCHITECTURE.md +516 -0
- package/docs/developer/AUTH.md +204 -0
- package/docs/developer/CONTRIBUTING.md +227 -0
- package/docs/developer/DOCUMENTATION_SUMMARY.md +346 -0
- package/docs/developer/PROJECT_INDEX.md +365 -0
- package/docs/planning/API_COVERAGE.md +1045 -0
- package/docs/planning/BACKLOG.md +1159 -0
- package/docs/planning/PROFILE_SYSTEM_TASKS.md +287 -0
- package/docs/planning/UX_IMPLEMENTATION_PLAN.md +691 -0
- package/docs/planning/archive/RELEASE_CHECKLIST_v1.3.0.md +332 -0
- package/docs/planning/archive/RELEASE_v1.3.0.md +428 -0
- package/docs/planning/archive/cakemail-cli-ux-improvements.md +438 -0
- package/docs/planning/cakemail-profile-system-plan.md +1121 -0
- package/docs/testing/AI_USER_SIMULATION_DESIGN.md +1342 -0
- package/docs/testing/KENOGAMI_BIDIRECTIONAL_FLOW.md +1517 -0
- package/docs/testing/KENOGAMI_TRUTH_RECONCILIATION_SYSTEM.md +1369 -0
- package/docs/user-manual/.obsidian/app.json +1 -0
- package/docs/user-manual/.obsidian/appearance.json +1 -0
- package/docs/user-manual/.obsidian/core-plugins.json +33 -0
- package/docs/user-manual/.obsidian/workspace.json +167 -0
- package/docs/user-manual/01-getting-started/01-installation.md +214 -0
- package/docs/user-manual/01-getting-started/02-quick-start.md +432 -0
- package/docs/user-manual/01-getting-started/03-authentication.md +448 -0
- package/docs/user-manual/01-getting-started/04-configuration.md +430 -0
- package/docs/user-manual/01-getting-started/05-output-formats.md +447 -0
- package/docs/user-manual/02-core-concepts/01-accounts.md +514 -0
- package/docs/user-manual/02-core-concepts/02-profile-system.md +771 -0
- package/docs/user-manual/02-core-concepts/03-smart-defaults.md +485 -0
- package/docs/user-manual/02-core-concepts/04-authentication-methods.md +435 -0
- package/docs/user-manual/02-core-concepts/05-pagination-filtering.md +600 -0
- package/docs/user-manual/02-core-concepts/06-error-handling.md +718 -0
- package/docs/user-manual/02-core-concepts/07-api-coverage.md +483 -0
- package/docs/user-manual/03-email-operations/01-senders.md +490 -0
- package/docs/user-manual/03-email-operations/02-templates.md +444 -0
- package/docs/user-manual/03-email-operations/03-transactional-emails.md +706 -0
- package/docs/user-manual/03-email-operations/04-email-tracking.md +407 -0
- package/docs/user-manual/04-campaign-management/01-campaigns-basics.md +394 -0
- package/docs/user-manual/04-campaign-management/02-campaign-scheduling.md +630 -0
- package/docs/user-manual/04-campaign-management/03-campaign-testing.md +997 -0
- package/docs/user-manual/04-campaign-management/04-campaign-lifecycle.md +709 -0
- package/docs/user-manual/04-campaign-management/05-campaign-links.md +934 -0
- package/docs/user-manual/05-contact-management/01-lists.md +836 -0
- package/docs/user-manual/05-contact-management/02-contacts.md +1035 -0
- package/docs/user-manual/05-contact-management/03-custom-attributes.md +788 -0
- package/docs/user-manual/05-contact-management/04-segments.md +1028 -0
- package/docs/user-manual/05-contact-management/05-contact-import-export.md +1031 -0
- package/docs/user-manual/06-analytics-reporting/01-campaign-analytics.md +867 -0
- package/docs/user-manual/06-analytics-reporting/02-account-reports.md +227 -0
- package/docs/user-manual/07-integrations/01-webhooks-integration.md +259 -0
- package/docs/user-manual/07-integrations/02-automation.md +326 -0
- package/docs/user-manual/08-advanced-usage/01-scripting-patterns.md +672 -0
- package/docs/user-manual/08-advanced-usage/02-bulk-operations.md +932 -0
- package/docs/user-manual/08-advanced-usage/03-ci-cd-integration.md +892 -0
- package/docs/user-manual/08-advanced-usage/04-performance-optimization.md +766 -0
- package/docs/user-manual/09-command-reference/01-config.md +776 -0
- package/docs/user-manual/09-command-reference/02-account.md +652 -0
- package/docs/user-manual/09-command-reference/03-lists.md +958 -0
- package/docs/user-manual/09-command-reference/04-contacts.md +1408 -0
- package/docs/user-manual/09-command-reference/05-attributes.md +617 -0
- package/docs/user-manual/09-command-reference/06-segments.md +894 -0
- package/docs/user-manual/09-command-reference/07-senders.md +803 -0
- package/docs/user-manual/09-command-reference/08-templates.md +818 -0
- package/docs/user-manual/09-command-reference/09-campaigns.md +1250 -0
- package/docs/user-manual/09-command-reference/10-emails.md +807 -0
- package/docs/user-manual/09-command-reference/11-reports.md +1135 -0
- package/docs/user-manual/09-command-reference/12-webhooks.md +773 -0
- package/docs/user-manual/09-command-reference/13-suppressed.md +797 -0
- package/docs/user-manual/09-command-reference/14-interests.md +630 -0
- package/docs/user-manual/09-command-reference/15-tags.md +584 -0
- package/docs/user-manual/09-command-reference/16-logs.md +656 -0
- package/docs/user-manual/09-command-reference/17-transactional-templates.md +850 -0
- package/docs/user-manual/10-troubleshooting/01-common-errors.md +457 -0
- package/docs/user-manual/10-troubleshooting/02-authentication-issues.md +558 -0
- package/docs/user-manual/10-troubleshooting/03-connection-problems.md +634 -0
- package/docs/user-manual/10-troubleshooting/04-debugging.md +725 -0
- package/docs/user-manual/11-appendix/04-faq.md +484 -0
- package/docs/user-manual/11-appendix/05-glossary.md +250 -0
- package/docs/user-manual/README.md +0 -0
- package/package.json +13 -61
- package/src/cli.ts +125 -0
- package/src/client.ts +16 -0
- package/src/commands/account.ts +267 -0
- package/src/commands/accounts.ts +78 -0
- package/src/commands/actions.ts +249 -0
- package/src/commands/attributes.ts +139 -0
- package/src/commands/campaign-blueprints.ts +106 -0
- package/src/commands/campaigns.ts +469 -0
- package/src/commands/config.ts +77 -0
- package/src/commands/contacts.ts +612 -0
- package/src/commands/custom-attributes.ts +127 -0
- package/src/commands/dkims.ts +117 -0
- package/src/commands/domains.ts +82 -0
- package/src/commands/email-apis.ts +569 -0
- package/src/commands/emails.ts +197 -0
- package/src/commands/forms.ts +283 -0
- package/src/commands/interests.ts +155 -0
- package/src/commands/links.ts +38 -0
- package/src/commands/lists.ts +406 -0
- package/src/commands/logos.ts +71 -0
- package/src/commands/logs.ts +386 -0
- package/src/commands/reports.ts +306 -0
- package/src/commands/segments.ts +158 -0
- package/src/commands/senders.ts +204 -0
- package/src/commands/sub-accounts.ts +271 -0
- package/src/commands/suppressed-emails.ts +234 -0
- package/src/commands/suppressed.ts +198 -0
- package/src/commands/system-emails.ts +85 -0
- package/src/commands/tags.ts +146 -0
- package/src/commands/tasks.ts +116 -0
- package/src/commands/templates.ts +189 -0
- package/src/commands/tokens.ts +83 -0
- package/src/commands/transactional-emails.ts +374 -0
- package/src/commands/transactional-templates.ts +385 -0
- package/src/commands/users.ts +506 -0
- package/src/commands/webhooks.ts +172 -0
- package/src/commands/workflow-blueprints.ts +123 -0
- package/src/commands/workflows.ts +265 -0
- package/src/types/profile.ts +93 -0
- package/src/utils/auth.ts +272 -0
- package/src/utils/config-file.ts +96 -0
- package/src/utils/config.ts +134 -0
- package/src/utils/confirm.ts +32 -0
- package/src/utils/defaults.ts +99 -0
- package/src/utils/errors.ts +116 -0
- package/src/utils/interactive.ts +91 -0
- package/src/utils/list-defaults.ts +74 -0
- package/src/utils/output.ts +190 -0
- package/src/utils/progress.ts +320 -0
- package/src/utils/spinner.ts +22 -0
- package/tests/IMPLEMENTATION_STATUS.md +258 -0
- package/tests/PTY_SETUP.md +118 -0
- package/tests/PTY_TESTING_GUIDE.md +507 -0
- package/tests/README.md +244 -0
- package/tests/fixtures/api-responses/campaigns.json +34 -0
- package/tests/fixtures/test-config.json +13 -0
- package/tests/helpers/cli-runner.ts +128 -0
- package/tests/helpers/mock-server.ts +301 -0
- package/tests/helpers/pty-runner.ts +181 -0
- package/tests/integration/campaigns-real-api.test.ts +196 -0
- package/tests/integration/setup-integration.ts +50 -0
- package/tests/pty/campaigns.test.ts +241 -0
- package/tests/setup.ts +34 -0
- package/tsconfig.json +15 -0
- package/vitest.config.ts +28 -0
|
@@ -0,0 +1,1068 @@
|
|
|
1
|
+
# Cakemail CLI Documentation Standard
|
|
2
|
+
|
|
3
|
+
ABOUTME: Documentation standard defining structure, style, and conventions for the Cakemail CLI user manual.
|
|
4
|
+
ABOUTME: Based on exhaustive analysis of GitHub CLI manual as reference model.
|
|
5
|
+
|
|
6
|
+
## Table of Contents
|
|
7
|
+
|
|
8
|
+
1. [Information Architecture](#information-architecture)
|
|
9
|
+
2. [Command Reference Structure](#command-reference-structure)
|
|
10
|
+
3. [Writing Style & Tone](#writing-style--tone)
|
|
11
|
+
4. [Formatting Conventions](#formatting-conventions)
|
|
12
|
+
5. [Section Standards](#section-standards)
|
|
13
|
+
6. [Examples & Code Blocks](#examples--code-blocks)
|
|
14
|
+
7. [What NOT to Do](#what-not-to-do)
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Information Architecture
|
|
19
|
+
|
|
20
|
+
### Manual Organization (Top Level)
|
|
21
|
+
|
|
22
|
+
The manual follows a progressive disclosure pattern from beginner to advanced:
|
|
23
|
+
|
|
24
|
+
1. **Getting Started** - Installation, authentication, first steps
|
|
25
|
+
2. **Core Concepts** - Fundamental understanding required for effective use
|
|
26
|
+
3. **Feature Sections** (3-8) - Organized by user workflow/domain (Email, Campaigns, Contacts, etc.)
|
|
27
|
+
4. **Advanced Usage** - Power user techniques, scripting, automation
|
|
28
|
+
5. **Command Reference** - Complete technical reference
|
|
29
|
+
6. **Troubleshooting** - Problem resolution
|
|
30
|
+
7. **Appendix** - Supporting materials (changelog, glossary, etc.)
|
|
31
|
+
|
|
32
|
+
### Navigation Hierarchy
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Manual Root (README.md)
|
|
36
|
+
├── Section Folders (numbered 01-11)
|
|
37
|
+
│ ├── Section README.md (overview + links)
|
|
38
|
+
│ └── Topic Articles (individual .md files)
|
|
39
|
+
└── Command Reference
|
|
40
|
+
├── Command Reference README.md (index)
|
|
41
|
+
└── Command Group Files (e.g., campaigns.md, contacts.md)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Organization Principles
|
|
45
|
+
|
|
46
|
+
- **Workflow-Centric**: Group by what users want to accomplish, not by API structure
|
|
47
|
+
- **Progressive Complexity**: Simple → Intermediate → Advanced → Reference
|
|
48
|
+
- **Clear Hierarchy**: Maximum 3 levels deep (Section → Topic → Subsection)
|
|
49
|
+
- **Consistent Numbering**: Use 01-11 prefix for sections to enforce ordering
|
|
50
|
+
- **Single Responsibility**: Each article covers ONE concept or command group
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Command Reference Structure
|
|
55
|
+
|
|
56
|
+
### Command Group Article Template
|
|
57
|
+
|
|
58
|
+
Every command group article (e.g., `campaigns.md`, `interests.md`) MUST follow this exact structure:
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
# [Resource] Commands
|
|
62
|
+
|
|
63
|
+
[One-line description of what this resource does] (version if applicable).
|
|
64
|
+
|
|
65
|
+
## Overview
|
|
66
|
+
|
|
67
|
+
[2-3 paragraph explanation of the resource and why it exists]
|
|
68
|
+
|
|
69
|
+
**Available Commands:**
|
|
70
|
+
- [`resource command`](#resource-command) - Brief description
|
|
71
|
+
- [`resource command2`](#resource-command2) - Brief description
|
|
72
|
+
|
|
73
|
+
**Key Features:**
|
|
74
|
+
- Feature 1
|
|
75
|
+
- Feature 2
|
|
76
|
+
- Feature 3
|
|
77
|
+
|
|
78
|
+
**Use Cases:**
|
|
79
|
+
- Use case 1
|
|
80
|
+
- Use case 2
|
|
81
|
+
- Use case 3
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## resource command
|
|
86
|
+
|
|
87
|
+
[One-line description of what this command does]
|
|
88
|
+
|
|
89
|
+
### Usage
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
cakemail resource command [arguments] [options]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Arguments
|
|
96
|
+
|
|
97
|
+
- `<required-arg>` - Description (required)
|
|
98
|
+
- `[optional-arg]` - Description (optional - explain default behavior)
|
|
99
|
+
|
|
100
|
+
### Options
|
|
101
|
+
|
|
102
|
+
- `-s, --short <value>` - Description
|
|
103
|
+
- `-f, --flag` - Boolean flag description
|
|
104
|
+
|
|
105
|
+
### Examples
|
|
106
|
+
|
|
107
|
+
**[Descriptive scenario name]:**
|
|
108
|
+
```bash
|
|
109
|
+
$ cakemail resource command args
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Output:**
|
|
113
|
+
```
|
|
114
|
+
[Show actual terminal output]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**[Another scenario]:**
|
|
118
|
+
```bash
|
|
119
|
+
$ cakemail resource command --flag
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Notes
|
|
123
|
+
|
|
124
|
+
- Important detail about behavior
|
|
125
|
+
- Edge case or limitation
|
|
126
|
+
- Related considerations
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
[Repeat for each command]
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Common Workflows
|
|
135
|
+
|
|
136
|
+
### Workflow 1: [Descriptive Name]
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# Step 1 comment
|
|
140
|
+
cakemail command1
|
|
141
|
+
|
|
142
|
+
# Step 2 comment
|
|
143
|
+
cakemail command2
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## [Additional Sections as Needed]
|
|
149
|
+
|
|
150
|
+
### Best Practices
|
|
151
|
+
### Troubleshooting
|
|
152
|
+
### Integration with Other Commands
|
|
153
|
+
### Comparison with Related Features
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Required Sections (All Commands)
|
|
158
|
+
|
|
159
|
+
Every command documentation MUST include:
|
|
160
|
+
|
|
161
|
+
1. **Title** - Command name as H1
|
|
162
|
+
2. **One-line description** - Imperative form, starts with verb
|
|
163
|
+
3. **Usage** - Exact syntax with square brackets for optional args
|
|
164
|
+
4. **Arguments** - Required vs optional explicitly marked
|
|
165
|
+
5. **Options** - All flags with short and long forms
|
|
166
|
+
6. **Examples** - Minimum 2, showing different scenarios with actual output
|
|
167
|
+
|
|
168
|
+
### Optional Sections (Use When Relevant)
|
|
169
|
+
|
|
170
|
+
- **Notes** - Important behavioral details, edge cases
|
|
171
|
+
- **See Also** - Links to related commands
|
|
172
|
+
- **Aliases** - If command has aliases
|
|
173
|
+
- **Environment Variables** - If command respects env vars
|
|
174
|
+
- **Configuration** - If command uses config values
|
|
175
|
+
|
|
176
|
+
### Mandatory for Complex Commands
|
|
177
|
+
|
|
178
|
+
If command has ANY of these characteristics, include these sections:
|
|
179
|
+
|
|
180
|
+
- **Interactive flow** → Document each prompt/choice
|
|
181
|
+
- **Multiple modes** → Show each mode separately with examples
|
|
182
|
+
- **Security implications** → Add warnings and best practices
|
|
183
|
+
- **Destructive operations** → Add clear warnings, show confirmation prompts
|
|
184
|
+
- **Profile-specific behavior** → Show output for different profiles
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Writing Style & Tone
|
|
189
|
+
|
|
190
|
+
### Voice Guidelines
|
|
191
|
+
|
|
192
|
+
**DO:**
|
|
193
|
+
- Use imperative mood for instructions: "Create a campaign", "List contacts"
|
|
194
|
+
- Use declarative for descriptions: "This command lists all campaigns"
|
|
195
|
+
- Use active voice: "The CLI validates input" not "Input is validated by the CLI"
|
|
196
|
+
- Address the user as "you" when explaining behavior
|
|
197
|
+
- Write in present tense: "The command returns..." not "The command will return..."
|
|
198
|
+
|
|
199
|
+
**DON'T:**
|
|
200
|
+
- Use passive voice unnecessarily
|
|
201
|
+
- Use future tense ("will list") when present works ("lists")
|
|
202
|
+
- Use overly formal language ("utilize" → "use", "in order to" → "to")
|
|
203
|
+
- Use conversational filler ("basically", "just", "simply")
|
|
204
|
+
|
|
205
|
+
### Sentence Structure
|
|
206
|
+
|
|
207
|
+
- **Keep it short**: Aim for 15-20 words per sentence
|
|
208
|
+
- **One idea per sentence**: Don't chain multiple concepts
|
|
209
|
+
- **Front-load important information**: Start with the main point
|
|
210
|
+
- **Use parallel structure**: "Create, update, and delete" not "Create, updating, and delete"
|
|
211
|
+
|
|
212
|
+
### Technical Terminology
|
|
213
|
+
|
|
214
|
+
- **Be consistent**: Pick one term and stick with it throughout all docs
|
|
215
|
+
- **Define on first use**: Explain technical terms when first mentioned in a section
|
|
216
|
+
- **Use standard terms**: Prefer industry-standard terminology (e.g., "pagination" not "paging")
|
|
217
|
+
- **Format consistently**:
|
|
218
|
+
- Commands: `cakemail command`
|
|
219
|
+
- Options/flags: `--flag` or `-f`
|
|
220
|
+
- Arguments: `<required>` or `[optional]`
|
|
221
|
+
- API endpoints: `/api/v1/resource`
|
|
222
|
+
- Variables: `variable_name`
|
|
223
|
+
|
|
224
|
+
### Tone Characteristics
|
|
225
|
+
|
|
226
|
+
From GitHub CLI manual analysis:
|
|
227
|
+
|
|
228
|
+
- **Professional but Approachable**: Technical but not intimidating
|
|
229
|
+
- **Concise**: Every word earns its place
|
|
230
|
+
- **Practical**: Focus on what users need to accomplish
|
|
231
|
+
- **Clear**: Eliminate ambiguity
|
|
232
|
+
- **Instructional**: Direct guidance over explanation
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Formatting Conventions
|
|
237
|
+
|
|
238
|
+
### Headers
|
|
239
|
+
|
|
240
|
+
```markdown
|
|
241
|
+
# H1 - Article Title Only (once per file)
|
|
242
|
+
## H2 - Major Sections
|
|
243
|
+
### H3 - Subsections
|
|
244
|
+
#### H4 - Rarely Used (avoid if possible)
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Rules:**
|
|
248
|
+
- Only ONE H1 per file (the article title)
|
|
249
|
+
- Use H2 for major sections (commands, workflows)
|
|
250
|
+
- Use H3 for subsections within commands (Usage, Arguments, Examples)
|
|
251
|
+
- Avoid H4+ (restructure if needed)
|
|
252
|
+
- Use sentence case: "Command reference" not "Command Reference"
|
|
253
|
+
|
|
254
|
+
### Lists
|
|
255
|
+
|
|
256
|
+
**Unordered Lists:**
|
|
257
|
+
```markdown
|
|
258
|
+
- Item 1
|
|
259
|
+
- Item 2
|
|
260
|
+
- Nested item (use 2 spaces)
|
|
261
|
+
- Item 3
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Ordered Lists:**
|
|
265
|
+
```markdown
|
|
266
|
+
1. First step
|
|
267
|
+
2. Second step
|
|
268
|
+
3. Third step
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
**Rules:**
|
|
272
|
+
- Use hyphens `-` for unordered lists (not asterisks or plus)
|
|
273
|
+
- Use consistent indentation (2 spaces for nesting)
|
|
274
|
+
- Keep list items parallel in structure
|
|
275
|
+
- Don't mix ordered and unordered at same level
|
|
276
|
+
|
|
277
|
+
### Code Formatting
|
|
278
|
+
|
|
279
|
+
**Inline Code:**
|
|
280
|
+
- Commands: `cakemail campaigns list`
|
|
281
|
+
- Flags: `--format json`
|
|
282
|
+
- Values: `table`, `json`, `compact`
|
|
283
|
+
- File paths: `/path/to/file`
|
|
284
|
+
- Variables: `account_id`
|
|
285
|
+
|
|
286
|
+
**Code Blocks:**
|
|
287
|
+
```markdown
|
|
288
|
+
```bash
|
|
289
|
+
cakemail command --flag value
|
|
290
|
+
```
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Rules:**
|
|
294
|
+
- Always specify language for syntax highlighting
|
|
295
|
+
- Use `bash` for command examples
|
|
296
|
+
- Use `json` for JSON output
|
|
297
|
+
- Use `text` or no language for plain terminal output
|
|
298
|
+
- Show prompts with `$` for user commands
|
|
299
|
+
|
|
300
|
+
### Tables
|
|
301
|
+
|
|
302
|
+
```markdown
|
|
303
|
+
| Column 1 | Column 2 | Column 3 |
|
|
304
|
+
|----------|----------|----------|
|
|
305
|
+
| Value 1 | Value 2 | Value 3 |
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
**When to Use Tables:**
|
|
309
|
+
- Comparing multiple items (commands, options, features)
|
|
310
|
+
- Quick reference information
|
|
311
|
+
- Showing output format
|
|
312
|
+
|
|
313
|
+
**When NOT to Use Tables:**
|
|
314
|
+
- Long descriptions (use lists instead)
|
|
315
|
+
- Complex nested data (use examples instead)
|
|
316
|
+
- Anything that wraps awkwardly
|
|
317
|
+
|
|
318
|
+
### Emphasis
|
|
319
|
+
|
|
320
|
+
- **Bold** for UI elements, important terms, warnings
|
|
321
|
+
- *Italics* for emphasis (use sparingly)
|
|
322
|
+
- `Code formatting` for technical terms, commands, values
|
|
323
|
+
|
|
324
|
+
**DON'T:**
|
|
325
|
+
- Use ALL CAPS for emphasis (except in warnings: `WARNING:`)
|
|
326
|
+
- Mix multiple emphasis styles (`**_bold italic_**` is excessive)
|
|
327
|
+
- Overuse bold (loses impact)
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Section Standards
|
|
332
|
+
|
|
333
|
+
### Overview Section (Command Group Articles)
|
|
334
|
+
|
|
335
|
+
**Purpose**: Orient readers to what the command group does and why it exists.
|
|
336
|
+
|
|
337
|
+
**Structure:**
|
|
338
|
+
1. What the resource is (1-2 sentences)
|
|
339
|
+
2. Why it matters / common use cases (1 paragraph)
|
|
340
|
+
3. Available Commands list with anchors
|
|
341
|
+
4. Key Features (3-5 bullet points)
|
|
342
|
+
5. Use Cases (3-5 realistic scenarios)
|
|
343
|
+
|
|
344
|
+
**Example:**
|
|
345
|
+
```markdown
|
|
346
|
+
## Overview
|
|
347
|
+
|
|
348
|
+
Interests are list-specific preferences that contacts can subscribe to. Unlike tags which are global, interests are specific to each list and are commonly used for newsletter preferences, topic subscriptions, and opt-in categories.
|
|
349
|
+
|
|
350
|
+
**Available Commands:**
|
|
351
|
+
- [`interests list`](#interests-list) - List all interests in a list
|
|
352
|
+
- [`interests create`](#interests-create) - Create a new interest
|
|
353
|
+
|
|
354
|
+
**Key Features:**
|
|
355
|
+
- List-specific (not global like tags)
|
|
356
|
+
- Support auto-detection when only one list exists
|
|
357
|
+
- Optional URL-friendly aliases
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Usage Section
|
|
361
|
+
|
|
362
|
+
**Always include:**
|
|
363
|
+
- Exact command syntax
|
|
364
|
+
- Square brackets `[optional]` for optional arguments
|
|
365
|
+
- Angle brackets `<required>` for required arguments
|
|
366
|
+
- `[options]` placeholder for flags
|
|
367
|
+
|
|
368
|
+
**Example:**
|
|
369
|
+
```markdown
|
|
370
|
+
### Usage
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
cakemail interests create [list-id] --name <name> [options]
|
|
374
|
+
```
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Arguments Section
|
|
378
|
+
|
|
379
|
+
**Format:**
|
|
380
|
+
```markdown
|
|
381
|
+
### Arguments
|
|
382
|
+
|
|
383
|
+
- `<arg-name>` - Description (required)
|
|
384
|
+
- `[arg-name]` - Description (optional - default: value)
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**Rules:**
|
|
388
|
+
- List in the order they appear in usage
|
|
389
|
+
- Mark required vs optional explicitly
|
|
390
|
+
- Explain default behavior for optional args
|
|
391
|
+
- Include data type if not obvious (e.g., "List ID (number)")
|
|
392
|
+
|
|
393
|
+
### Options Section
|
|
394
|
+
|
|
395
|
+
**Format:**
|
|
396
|
+
```markdown
|
|
397
|
+
### Options
|
|
398
|
+
|
|
399
|
+
- `-s, --short <value>` - Description
|
|
400
|
+
- `-f, --flag` - Boolean flag description
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Rules:**
|
|
404
|
+
- List short form first, then long form
|
|
405
|
+
- Show `<value>` if option takes an argument
|
|
406
|
+
- Omit `<value>` for boolean flags
|
|
407
|
+
- Alphabetize for long lists
|
|
408
|
+
- Group related options together
|
|
409
|
+
|
|
410
|
+
### Examples Section
|
|
411
|
+
|
|
412
|
+
**CRITICAL**: This is the most important section. Users learn by example.
|
|
413
|
+
|
|
414
|
+
**Structure for Each Example:**
|
|
415
|
+
|
|
416
|
+
```markdown
|
|
417
|
+
**[Descriptive scenario label]:**
|
|
418
|
+
```bash
|
|
419
|
+
$ cakemail command args
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
**Output:**
|
|
423
|
+
```
|
|
424
|
+
Actual terminal output here
|
|
425
|
+
```
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
**Rules:**
|
|
429
|
+
- Always start with a bold descriptive label
|
|
430
|
+
- Show the command with `$` prompt
|
|
431
|
+
- Show realistic output (not `<output>` placeholder)
|
|
432
|
+
- Progress from simple to complex
|
|
433
|
+
- Include minimum 2 examples, ideally 3-5
|
|
434
|
+
- Show different use cases, not just flag variations
|
|
435
|
+
|
|
436
|
+
**Example Types to Include:**
|
|
437
|
+
1. **Basic usage** - Simplest form
|
|
438
|
+
2. **Common scenario** - Real-world use case
|
|
439
|
+
3. **With options** - Show useful flags
|
|
440
|
+
4. **JSON output** - For Developer profile
|
|
441
|
+
5. **Error handling** - What happens when it fails
|
|
442
|
+
|
|
443
|
+
### Notes Section
|
|
444
|
+
|
|
445
|
+
**When to include:**
|
|
446
|
+
- Important behavioral details not obvious from usage
|
|
447
|
+
- Edge cases or limitations
|
|
448
|
+
- Performance considerations
|
|
449
|
+
- Related concepts users should know
|
|
450
|
+
|
|
451
|
+
**Format:**
|
|
452
|
+
```markdown
|
|
453
|
+
### Notes
|
|
454
|
+
|
|
455
|
+
- First important note
|
|
456
|
+
- Second consideration
|
|
457
|
+
- Related detail
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### Workflow Sections
|
|
461
|
+
|
|
462
|
+
**Purpose**: Show how multiple commands work together.
|
|
463
|
+
|
|
464
|
+
**Structure:**
|
|
465
|
+
```markdown
|
|
466
|
+
## Common Workflows
|
|
467
|
+
|
|
468
|
+
### Workflow 1: [Descriptive Name]
|
|
469
|
+
|
|
470
|
+
```bash
|
|
471
|
+
# Step 1: Brief explanation
|
|
472
|
+
cakemail command1
|
|
473
|
+
|
|
474
|
+
# Step 2: What this does
|
|
475
|
+
cakemail command2 | cakemail command3
|
|
476
|
+
```
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
**Include:**
|
|
480
|
+
- Comments explaining each step
|
|
481
|
+
- Realistic multi-step scenarios
|
|
482
|
+
- Piping and composition examples
|
|
483
|
+
- Error handling considerations
|
|
484
|
+
|
|
485
|
+
---
|
|
486
|
+
|
|
487
|
+
## Examples & Code Blocks
|
|
488
|
+
|
|
489
|
+
### Command Examples
|
|
490
|
+
|
|
491
|
+
**Show Real Terminal Interaction:**
|
|
492
|
+
|
|
493
|
+
```markdown
|
|
494
|
+
**Create with confirmation:**
|
|
495
|
+
```bash
|
|
496
|
+
$ cakemail campaigns delete 123
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
**Output:**
|
|
500
|
+
```
|
|
501
|
+
⚠ Delete campaign 'Summer Sale'?
|
|
502
|
+
This action cannot be undone
|
|
503
|
+
|
|
504
|
+
Delete campaign? (y/N): y
|
|
505
|
+
|
|
506
|
+
✓ Campaign deleted successfully
|
|
507
|
+
```
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
**Rules:**
|
|
511
|
+
- Include `$` prompt for user commands
|
|
512
|
+
- Show multi-line output as it appears
|
|
513
|
+
- Include prompts and confirmation dialogs
|
|
514
|
+
- Show success/error symbols (✓, ✗, ⚠)
|
|
515
|
+
- Use realistic IDs and names, not placeholders
|
|
516
|
+
|
|
517
|
+
### JSON Output Examples
|
|
518
|
+
|
|
519
|
+
```markdown
|
|
520
|
+
**Developer profile:**
|
|
521
|
+
```bash
|
|
522
|
+
$ cakemail --profile developer interests list
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
**Output:**
|
|
526
|
+
```json
|
|
527
|
+
{
|
|
528
|
+
"data": [
|
|
529
|
+
{"id": 1, "name": "Product Updates", "alias": "updates"}
|
|
530
|
+
]
|
|
531
|
+
}
|
|
532
|
+
```
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
**Rules:**
|
|
536
|
+
- Show actual valid JSON (not pseudo-JSON)
|
|
537
|
+
- Format with proper indentation (2 spaces)
|
|
538
|
+
- Include relevant fields only (don't show everything)
|
|
539
|
+
- Use realistic values
|
|
540
|
+
|
|
541
|
+
### Multi-Step Examples
|
|
542
|
+
|
|
543
|
+
```markdown
|
|
544
|
+
**Complete workflow:**
|
|
545
|
+
```bash
|
|
546
|
+
# Create the campaign
|
|
547
|
+
$ cakemail campaigns create \
|
|
548
|
+
--name "Newsletter" \
|
|
549
|
+
--list-id 123
|
|
550
|
+
|
|
551
|
+
✓ Campaign created: ID 456
|
|
552
|
+
|
|
553
|
+
# Schedule it
|
|
554
|
+
$ cakemail campaigns schedule 456 \
|
|
555
|
+
--date "2025-10-15 09:00"
|
|
556
|
+
|
|
557
|
+
✓ Campaign scheduled for Oct 15, 2025 at 9:00 AM
|
|
558
|
+
```
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
**Rules:**
|
|
562
|
+
- Use line continuation `\` for long commands
|
|
563
|
+
- Show output after each command
|
|
564
|
+
- Include comments explaining the flow
|
|
565
|
+
- Number steps if order matters
|
|
566
|
+
|
|
567
|
+
---
|
|
568
|
+
|
|
569
|
+
## What NOT to Do
|
|
570
|
+
|
|
571
|
+
### ❌ Anti-Patterns in Structure
|
|
572
|
+
|
|
573
|
+
**DON'T duplicate information across sections:**
|
|
574
|
+
|
|
575
|
+
```markdown
|
|
576
|
+
❌ BAD:
|
|
577
|
+
## campaigns list
|
|
578
|
+
|
|
579
|
+
List all campaigns.
|
|
580
|
+
|
|
581
|
+
### Description
|
|
582
|
+
This command lists all campaigns.
|
|
583
|
+
|
|
584
|
+
### Usage
|
|
585
|
+
Use this command to list campaigns:
|
|
586
|
+
```bash
|
|
587
|
+
cakemail campaigns list
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
✅ GOOD:
|
|
591
|
+
## campaigns list
|
|
592
|
+
|
|
593
|
+
List all campaigns for the current account.
|
|
594
|
+
|
|
595
|
+
### Usage
|
|
596
|
+
```bash
|
|
597
|
+
cakemail campaigns list [options]
|
|
598
|
+
```
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
**DON'T create deeply nested sections:**
|
|
602
|
+
|
|
603
|
+
```markdown
|
|
604
|
+
❌ BAD:
|
|
605
|
+
# Campaigns
|
|
606
|
+
## Campaign Management
|
|
607
|
+
### Managing Campaigns
|
|
608
|
+
#### List Campaigns
|
|
609
|
+
##### campaigns list command
|
|
610
|
+
|
|
611
|
+
✅ GOOD:
|
|
612
|
+
# Campaign Commands
|
|
613
|
+
## campaigns list
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
**DON'T split related information awkwardly:**
|
|
617
|
+
|
|
618
|
+
```markdown
|
|
619
|
+
❌ BAD:
|
|
620
|
+
## campaigns create
|
|
621
|
+
|
|
622
|
+
Create a campaign.
|
|
623
|
+
|
|
624
|
+
[15 pages of other content]
|
|
625
|
+
|
|
626
|
+
## campaigns create options
|
|
627
|
+
[Options documented far from the command]
|
|
628
|
+
|
|
629
|
+
✅ GOOD:
|
|
630
|
+
## campaigns create
|
|
631
|
+
|
|
632
|
+
Create a campaign.
|
|
633
|
+
|
|
634
|
+
### Usage
|
|
635
|
+
### Arguments
|
|
636
|
+
### Options
|
|
637
|
+
[Everything together]
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
### ❌ Anti-Patterns in Writing
|
|
641
|
+
|
|
642
|
+
**DON'T use vague placeholders:**
|
|
643
|
+
|
|
644
|
+
```markdown
|
|
645
|
+
❌ BAD:
|
|
646
|
+
```bash
|
|
647
|
+
cakemail campaigns create --name <name>
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
Output: <output will be shown here>
|
|
651
|
+
|
|
652
|
+
✅ GOOD:
|
|
653
|
+
```bash
|
|
654
|
+
$ cakemail campaigns create --name "Summer Sale"
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
**Output:**
|
|
658
|
+
```
|
|
659
|
+
✓ Campaign created successfully
|
|
660
|
+
ID: 456
|
|
661
|
+
Name: Summer Sale
|
|
662
|
+
```
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
**DON'T explain what users can already see:**
|
|
666
|
+
|
|
667
|
+
```markdown
|
|
668
|
+
❌ BAD:
|
|
669
|
+
The above command creates a campaign with the name option set to the value you specified and outputs the result showing the campaign was created.
|
|
670
|
+
|
|
671
|
+
✅ GOOD:
|
|
672
|
+
[Let the example speak for itself, or add meaningful context]
|
|
673
|
+
This creates a draft campaign ready for content and scheduling.
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
**DON'T use uncertain language:**
|
|
677
|
+
|
|
678
|
+
```markdown
|
|
679
|
+
❌ BAD:
|
|
680
|
+
This might return a list of campaigns, possibly in table format.
|
|
681
|
+
You should probably use the --force flag.
|
|
682
|
+
|
|
683
|
+
✅ GOOD:
|
|
684
|
+
Returns all campaigns in table format (default).
|
|
685
|
+
Use `--force` to skip the confirmation prompt.
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
**DON'T use conversational filler:**
|
|
689
|
+
|
|
690
|
+
```markdown
|
|
691
|
+
❌ BAD:
|
|
692
|
+
So basically, you just simply need to run the command, and it will go ahead and create the campaign for you.
|
|
693
|
+
|
|
694
|
+
✅ GOOD:
|
|
695
|
+
Run the command to create a campaign.
|
|
696
|
+
```
|
|
697
|
+
|
|
698
|
+
### ❌ Anti-Patterns in Examples
|
|
699
|
+
|
|
700
|
+
**DON'T show incomplete output:**
|
|
701
|
+
|
|
702
|
+
```markdown
|
|
703
|
+
❌ BAD:
|
|
704
|
+
```bash
|
|
705
|
+
$ cakemail campaigns list
|
|
706
|
+
```
|
|
707
|
+
[output truncated]
|
|
708
|
+
...
|
|
709
|
+
|
|
710
|
+
✅ GOOD:
|
|
711
|
+
```bash
|
|
712
|
+
$ cakemail campaigns list
|
|
713
|
+
```
|
|
714
|
+
|
|
715
|
+
**Output:**
|
|
716
|
+
```
|
|
717
|
+
┌────┬──────────────┬──────────┐
|
|
718
|
+
│ ID │ Name │ Status │
|
|
719
|
+
├────┼──────────────┼──────────┤
|
|
720
|
+
│ 1 │ Summer Sale │ draft │
|
|
721
|
+
│ 2 │ Welcome │ sent │
|
|
722
|
+
└────┴──────────────┴──────────┘
|
|
723
|
+
```
|
|
724
|
+
```
|
|
725
|
+
|
|
726
|
+
**DON'T show only the happy path:**
|
|
727
|
+
|
|
728
|
+
```markdown
|
|
729
|
+
❌ BAD:
|
|
730
|
+
Only showing successful examples with no errors or edge cases
|
|
731
|
+
|
|
732
|
+
✅ GOOD:
|
|
733
|
+
Include examples of:
|
|
734
|
+
- Success cases
|
|
735
|
+
- Common errors
|
|
736
|
+
- Edge cases (empty lists, missing args)
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
**DON'T use fake data poorly:**
|
|
740
|
+
|
|
741
|
+
```markdown
|
|
742
|
+
❌ BAD:
|
|
743
|
+
```bash
|
|
744
|
+
$ cakemail campaigns get 999999
|
|
745
|
+
Campaign: asdfasdf
|
|
746
|
+
Status: foo
|
|
747
|
+
```
|
|
748
|
+
|
|
749
|
+
✅ GOOD:
|
|
750
|
+
```bash
|
|
751
|
+
$ cakemail campaigns get 456
|
|
752
|
+
Campaign: Summer Sale 2025
|
|
753
|
+
Status: draft
|
|
754
|
+
```
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
### ❌ Anti-Patterns in Formatting
|
|
758
|
+
|
|
759
|
+
**DON'T mix code formatting styles:**
|
|
760
|
+
|
|
761
|
+
```markdown
|
|
762
|
+
❌ BAD:
|
|
763
|
+
Run `cakemail campaigns list` or **cakemail campaigns list** or cakemail campaigns list
|
|
764
|
+
|
|
765
|
+
✅ GOOD:
|
|
766
|
+
Run `cakemail campaigns list`
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
**DON'T overuse emphasis:**
|
|
770
|
+
|
|
771
|
+
```markdown
|
|
772
|
+
❌ BAD:
|
|
773
|
+
**This is _VERY_ `important`!!!** You **MUST** use the **`--force`** **flag**!
|
|
774
|
+
|
|
775
|
+
✅ GOOD:
|
|
776
|
+
Use the `--force` flag to skip confirmation.
|
|
777
|
+
|
|
778
|
+
**Warning:** This action cannot be undone.
|
|
779
|
+
```
|
|
780
|
+
|
|
781
|
+
**DON'T use inconsistent header capitalization:**
|
|
782
|
+
|
|
783
|
+
```markdown
|
|
784
|
+
❌ BAD:
|
|
785
|
+
## Usage Instructions
|
|
786
|
+
### how to use this
|
|
787
|
+
## IMPORTANT NOTES
|
|
788
|
+
|
|
789
|
+
✅ GOOD:
|
|
790
|
+
## Usage
|
|
791
|
+
### Arguments
|
|
792
|
+
## Important notes
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
### ❌ Anti-Patterns in Organization
|
|
796
|
+
|
|
797
|
+
**DON'T organize by technical implementation:**
|
|
798
|
+
|
|
799
|
+
```markdown
|
|
800
|
+
❌ BAD:
|
|
801
|
+
- API v1 Commands
|
|
802
|
+
- API v2 Commands
|
|
803
|
+
- Database Operations
|
|
804
|
+
- HTTP Endpoints
|
|
805
|
+
|
|
806
|
+
✅ GOOD:
|
|
807
|
+
- Campaign Management
|
|
808
|
+
- Contact Management
|
|
809
|
+
- Email Operations
|
|
810
|
+
```
|
|
811
|
+
|
|
812
|
+
**DON'T create orphan pages:**
|
|
813
|
+
|
|
814
|
+
```markdown
|
|
815
|
+
❌ BAD:
|
|
816
|
+
File exists but isn't linked from parent README or any other page
|
|
817
|
+
|
|
818
|
+
✅ GOOD:
|
|
819
|
+
Every page is discoverable through the navigation hierarchy
|
|
820
|
+
```
|
|
821
|
+
|
|
822
|
+
**DON'T create redundant READMEs:**
|
|
823
|
+
|
|
824
|
+
```markdown
|
|
825
|
+
❌ BAD:
|
|
826
|
+
docs/user-manual/README.md (lists everything)
|
|
827
|
+
docs/user-manual/09-command-reference/README.md (lists same commands)
|
|
828
|
+
docs/user-manual/09-command-reference/campaigns.md (lists campaign commands again)
|
|
829
|
+
|
|
830
|
+
✅ GOOD:
|
|
831
|
+
docs/user-manual/README.md (high-level TOC)
|
|
832
|
+
docs/user-manual/09-command-reference/README.md (command index with brief descriptions)
|
|
833
|
+
docs/user-manual/09-command-reference/campaigns.md (full documentation)
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
---
|
|
837
|
+
|
|
838
|
+
## Quality Checklist
|
|
839
|
+
|
|
840
|
+
Before publishing any documentation, verify:
|
|
841
|
+
|
|
842
|
+
### Structure
|
|
843
|
+
- [ ] File follows the standard template for its type
|
|
844
|
+
- [ ] All required sections are present
|
|
845
|
+
- [ ] Sections appear in the standard order
|
|
846
|
+
- [ ] Headers use consistent capitalization
|
|
847
|
+
- [ ] Navigation links are correct and working
|
|
848
|
+
|
|
849
|
+
### Content
|
|
850
|
+
- [ ] One-line description is clear and starts with a verb
|
|
851
|
+
- [ ] Usage syntax is exact and unambiguous
|
|
852
|
+
- [ ] All arguments and options are documented
|
|
853
|
+
- [ ] At least 2 realistic examples with actual output
|
|
854
|
+
- [ ] Examples progress from simple to complex
|
|
855
|
+
|
|
856
|
+
### Writing
|
|
857
|
+
- [ ] Active voice used throughout
|
|
858
|
+
- [ ] Imperative mood for instructions
|
|
859
|
+
- [ ] Present tense for descriptions
|
|
860
|
+
- [ ] No conversational filler
|
|
861
|
+
- [ ] Technical terms defined on first use
|
|
862
|
+
- [ ] Consistent terminology
|
|
863
|
+
|
|
864
|
+
### Formatting
|
|
865
|
+
- [ ] Commands formatted as `inline code`
|
|
866
|
+
- [ ] Code blocks specify language
|
|
867
|
+
- [ ] Examples show `$` prompt
|
|
868
|
+
- [ ] JSON properly formatted
|
|
869
|
+
- [ ] Tables align properly
|
|
870
|
+
- [ ] Emphasis used sparingly and consistently
|
|
871
|
+
|
|
872
|
+
### Examples
|
|
873
|
+
- [ ] Show realistic data (not placeholders)
|
|
874
|
+
- [ ] Include actual terminal output
|
|
875
|
+
- [ ] Show both success and error cases
|
|
876
|
+
- [ ] Demonstrate real-world scenarios
|
|
877
|
+
- [ ] Include profile-specific variations where relevant
|
|
878
|
+
|
|
879
|
+
### Cross-References
|
|
880
|
+
- [ ] All links use production URL format
|
|
881
|
+
- [ ] All links tested and working
|
|
882
|
+
- [ ] Link destinations exist
|
|
883
|
+
- [ ] No "Next Steps" or "Related" navigation sections (removed for external publication)
|
|
884
|
+
|
|
885
|
+
---
|
|
886
|
+
|
|
887
|
+
## Link Format Standard
|
|
888
|
+
|
|
889
|
+
### Production URL Format
|
|
890
|
+
|
|
891
|
+
All internal links in the documentation MUST use the production URL format:
|
|
892
|
+
|
|
893
|
+
```markdown
|
|
894
|
+
[Link Text](/en/cli/[category]/[article]/)
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
### URL Construction Rules
|
|
898
|
+
|
|
899
|
+
1. **Base Path**: All URLs start with `/en/cli/`
|
|
900
|
+
|
|
901
|
+
2. **Category**: Directory name without number prefix
|
|
902
|
+
- File: `01-getting-started/` → URL: `/en/cli/getting-started/`
|
|
903
|
+
- File: `09-command-reference/` → URL: `/en/cli/command-reference/`
|
|
904
|
+
|
|
905
|
+
3. **Article**: Filename without number prefix and without `.md` extension
|
|
906
|
+
- File: `02-authentication.md` → URL: `authentication/`
|
|
907
|
+
- File: `15-tags.md` → URL: `tags/`
|
|
908
|
+
|
|
909
|
+
4. **Trailing Slash**: Always include trailing `/` for URLs without anchors
|
|
910
|
+
- ✅ `/en/cli/getting-started/authentication/`
|
|
911
|
+
- ❌ `/en/cli/getting-started/authentication`
|
|
912
|
+
|
|
913
|
+
5. **Anchors**: When linking to specific sections, omit trailing slash before anchor
|
|
914
|
+
- ✅ `/en/cli/command-reference/contacts#contacts-list`
|
|
915
|
+
- ❌ `/en/cli/command-reference/contacts/#contacts-list`
|
|
916
|
+
|
|
917
|
+
### Examples
|
|
918
|
+
|
|
919
|
+
**File Structure → Production URL:**
|
|
920
|
+
|
|
921
|
+
```
|
|
922
|
+
docs/user-manual/
|
|
923
|
+
├── 01-getting-started/
|
|
924
|
+
│ ├── 02-authentication.md → /en/cli/getting-started/authentication/
|
|
925
|
+
│ └── 04-configuration.md → /en/cli/getting-started/configuration/
|
|
926
|
+
├── 02-core-concepts/
|
|
927
|
+
│ ├── 02-profile-system.md → /en/cli/core-concepts/profile-system/
|
|
928
|
+
│ └── 03-smart-defaults.md → /en/cli/core-concepts/smart-defaults/
|
|
929
|
+
└── 09-command-reference/
|
|
930
|
+
├── 03-lists.md → /en/cli/command-reference/lists/
|
|
931
|
+
├── 04-contacts.md → /en/cli/command-reference/contacts/
|
|
932
|
+
└── 15-tags.md → /en/cli/command-reference/tags/
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
**Link Examples:**
|
|
936
|
+
|
|
937
|
+
```markdown
|
|
938
|
+
# Good - Production format
|
|
939
|
+
[Authentication](/en/cli/getting-started/authentication/)
|
|
940
|
+
[Profile System](/en/cli/core-concepts/profile-system/)
|
|
941
|
+
[Lists Commands](/en/cli/command-reference/lists/)
|
|
942
|
+
[contacts list](/en/cli/command-reference/contacts#contacts-list)
|
|
943
|
+
|
|
944
|
+
# Bad - Relative paths (do not use)
|
|
945
|
+
[Authentication](../01-getting-started/02-authentication.md)
|
|
946
|
+
[Profile System](./02-profile-system.md)
|
|
947
|
+
```
|
|
948
|
+
|
|
949
|
+
### Special Cases
|
|
950
|
+
|
|
951
|
+
**README Files**: README.md files map to the category root
|
|
952
|
+
|
|
953
|
+
```
|
|
954
|
+
docs/user-manual/
|
|
955
|
+
├── README.md → /en/cli/
|
|
956
|
+
└── 01-getting-started/
|
|
957
|
+
└── README.md → /en/cli/getting-started/
|
|
958
|
+
```
|
|
959
|
+
|
|
960
|
+
**Command Reference Links**: Command group articles are always under `/command-reference/`
|
|
961
|
+
|
|
962
|
+
```markdown
|
|
963
|
+
# All command groups
|
|
964
|
+
[Config Commands](/en/cli/command-reference/config/)
|
|
965
|
+
[Contacts Commands](/en/cli/command-reference/contacts/)
|
|
966
|
+
[Tags Commands](/en/cli/command-reference/tags/)
|
|
967
|
+
```
|
|
968
|
+
|
|
969
|
+
### Validation
|
|
970
|
+
|
|
971
|
+
All internal links should be validated to ensure:
|
|
972
|
+
1. **Destination file exists**: The target file is present in the documentation
|
|
973
|
+
2. **URL format is correct**: Follows the production URL pattern
|
|
974
|
+
3. **No relative paths**: All links use absolute `/en/cli/` format
|
|
975
|
+
|
|
976
|
+
**Note**: Anchor validation is not required during pre-publication as markdown platforms auto-generate anchors from headers. As long as the destination file exists and contains the referenced header, the anchor will work.
|
|
977
|
+
|
|
978
|
+
---
|
|
979
|
+
|
|
980
|
+
## Maintenance Guidelines
|
|
981
|
+
|
|
982
|
+
### Pre-Release Documentation Standards
|
|
983
|
+
|
|
984
|
+
For documentation intended for external publication (before official release):
|
|
985
|
+
|
|
986
|
+
**DO NOT INCLUDE:**
|
|
987
|
+
- ❌ Version numbers (v1.4.0, v1.5.0, etc.) - Remove all version annotations
|
|
988
|
+
- ❌ "Next Steps" sections - Navigation sections are removed for external platforms
|
|
989
|
+
- ❌ "Related Topics" sections - Cross-linking handled by documentation platform
|
|
990
|
+
- ❌ "Related Sections" sections - Platform provides navigation
|
|
991
|
+
- ❌ Changelog files - Not relevant pre-release
|
|
992
|
+
- ❌ Migration guides - No previous versions to migrate from
|
|
993
|
+
- ❌ Section README.md files - Only keep main README.md
|
|
994
|
+
|
|
995
|
+
**RATIONALE:**
|
|
996
|
+
- Documentation will be published on a platform that provides its own navigation
|
|
997
|
+
- Version references are not meaningful pre-release
|
|
998
|
+
- Cleaner, more focused content without redundant navigation
|
|
999
|
+
|
|
1000
|
+
### Version Changes (Post-Release)
|
|
1001
|
+
|
|
1002
|
+
When adding new features after release:
|
|
1003
|
+
1. Add version indicator: `(v1.6.0+)` in first mention
|
|
1004
|
+
2. Update command reference README
|
|
1005
|
+
3. Update parent section README if adding new capabilities
|
|
1006
|
+
4. Add to changelog
|
|
1007
|
+
|
|
1008
|
+
### Deprecations
|
|
1009
|
+
|
|
1010
|
+
When deprecating features:
|
|
1011
|
+
1. Mark as deprecated with version: `(deprecated in v1.7.0)`
|
|
1012
|
+
2. Explain what to use instead
|
|
1013
|
+
3. Keep documentation for 2 major versions
|
|
1014
|
+
4. Add to migration guide
|
|
1015
|
+
|
|
1016
|
+
### Updates
|
|
1017
|
+
|
|
1018
|
+
When updating existing docs:
|
|
1019
|
+
1. Verify all examples still work
|
|
1020
|
+
2. Update version numbers if behavior changed (post-release only)
|
|
1021
|
+
3. Check all links still valid
|
|
1022
|
+
4. Update "Last updated" if file has one
|
|
1023
|
+
|
|
1024
|
+
---
|
|
1025
|
+
|
|
1026
|
+
## Reference Models
|
|
1027
|
+
|
|
1028
|
+
### GitHub CLI Manual Strengths (Apply These)
|
|
1029
|
+
|
|
1030
|
+
✅ **Clear hierarchy**: Commands → Subcommands → Examples
|
|
1031
|
+
✅ **Consistent structure**: Every command page follows same pattern
|
|
1032
|
+
✅ **Minimal verbosity**: Direct and to the point
|
|
1033
|
+
✅ **Practical examples**: Show real usage, not abstract syntax
|
|
1034
|
+
✅ **Progressive disclosure**: Simple → Advanced
|
|
1035
|
+
✅ **Scannable format**: Easy to find specific information
|
|
1036
|
+
|
|
1037
|
+
### GitHub CLI Manual Differences (Cakemail Adaptations)
|
|
1038
|
+
|
|
1039
|
+
**GitHub CLI**: Minimal workflow documentation
|
|
1040
|
+
**Cakemail CLI**: Extensive workflow sections showing multi-command scenarios
|
|
1041
|
+
|
|
1042
|
+
**GitHub CLI**: No profile system
|
|
1043
|
+
**Cakemail CLI**: Show profile-specific behavior prominently
|
|
1044
|
+
|
|
1045
|
+
**GitHub CLI**: Simple confirmation patterns
|
|
1046
|
+
**Cakemail CLI**: Detailed confirmation and interactive flow documentation
|
|
1047
|
+
|
|
1048
|
+
**GitHub CLI**: Limited troubleshooting
|
|
1049
|
+
**Cakemail CLI**: Comprehensive troubleshooting sections
|
|
1050
|
+
|
|
1051
|
+
---
|
|
1052
|
+
|
|
1053
|
+
## Conclusion
|
|
1054
|
+
|
|
1055
|
+
This standard ensures:
|
|
1056
|
+
- **Consistency**: All documentation follows same patterns
|
|
1057
|
+
- **Usability**: Users can quickly find what they need
|
|
1058
|
+
- **Clarity**: Information is unambiguous and actionable
|
|
1059
|
+
- **Completeness**: All necessary information is present
|
|
1060
|
+
- **Maintainability**: Easy to update and extend
|
|
1061
|
+
|
|
1062
|
+
When in doubt, ask:
|
|
1063
|
+
1. "Is this how GitHub CLI would document it?"
|
|
1064
|
+
2. "Can a user accomplish their task with just this information?"
|
|
1065
|
+
3. "Is every word necessary?"
|
|
1066
|
+
4. "Would I understand this if I were new to the CLI?"
|
|
1067
|
+
|
|
1068
|
+
If the answer to any is "no", revise.
|