|
| 1 | +# Scenario 3: Document deprecated and retired APIs |
| 2 | + |
| 3 | +> **Before proceeding:** Read the shared standards and processes in [`common.md`](.github/prompts/author-api-docs/common.md). Use the `fetch` tool to open this file. It contains all shared setup steps, common processes (changelog, What's New, TOC, validation), reference standards, documentation standards, and the base quality checklist that apply to this scenario. |
| 4 | +
|
| 5 | +--- |
| 6 | + |
| 7 | +## Example interaction |
| 8 | + |
| 9 | +> **Author:** We need to deprecate the `outlookTask` resource and its methods. Blog post: https://devblogs.microsoft.com/... Deadline: August 20, 2025. Alternative: To Do API. |
| 10 | +> |
| 11 | +> **AI:** _[Reads common file, verifies branch]_ |
| 12 | +> I'll process these deprecation changes: |
| 13 | +> |
| 14 | +> 1. Update `outlookTask` resource: add "(deprecated)" to H1, add CAUTION banner, add `toc.title` and `ROBOTS: NOINDEX` |
| 15 | +> 2. Mark all child methods as deprecated (6 method files) |
| 16 | +> 3. Update references in parent resources |
| 17 | +> 4. Update changelog and What's New |
| 18 | +> |
| 19 | +> Proceeding now. |
| 20 | +
|
| 21 | +--- |
| 22 | + |
| 23 | +## Prerequisites |
| 24 | + |
| 25 | +**See [temp-docstubs Folder](common.md#temp-docstubs-folder)** for instructions on setting up the temp-docstubs folder. |
| 26 | + |
| 27 | +For this scenario, the author should add these files to `temp-docstubs`: |
| 28 | +- Documentation Plan documenting what is being deprecated |
| 29 | +- Autogenerated changelog file (changelog_*.json) if applicable |
| 30 | +- Any supporting documentation about the deprecation (blog post URLs, alternative APIs, migration guidance) |
| 31 | + |
| 32 | +## Understanding API deprecation |
| 33 | + |
| 34 | +A feature that is no longer in active development is _deprecated_. Deprecations are announced via blog posts and corresponding documentation updates. The deprecation announcement includes: |
| 35 | +- A timeline (deprecation period) after which the feature is removed from the service or the service is retired |
| 36 | +- Alternative features or workarounds for existing apps |
| 37 | +- Migration guidance and timelines |
| 38 | + |
| 39 | +**Important:** Deprecation is not always a standalone process. An API can be deprecated in the same set of changes that add new APIs. For example: |
| 40 | +- Deprecating one property while adding a replacement property |
| 41 | +- Deprecating a method while adding a new method |
| 42 | +- Deprecating a resource while adding an alternative resource |
| 43 | +- Combining deprecation with other API additions or updates |
| 44 | + |
| 45 | +The Documentation Plan may contain a mix of deprecation and new API documentation tasks. |
| 46 | + |
| 47 | +**API artifacts that can be deprecated:** |
| 48 | +- Resources (Entity Types and Complex Types) |
| 49 | +- Methods (CRUD operations, actions, functions) |
| 50 | +- Properties |
| 51 | +- Relationships (Navigation Properties) |
| 52 | +- Parameters (path, function, or query parameters) |
| 53 | +- Enumerations (entire enum or specific enum members) |
| 54 | +- Actions |
| 55 | +- Functions |
| 56 | + |
| 57 | +## Inputs |
| 58 | + |
| 59 | +### Required inputs |
| 60 | + |
| 61 | +Ask the author to provide these in the `temp-docstubs` folder: |
| 62 | + |
| 63 | +**Documentation Plan (required):** |
| 64 | +- Detailed description of what is being deprecated, which files to change, alternatives/workarounds, milestone dates, and blog post links |
| 65 | +- May include both deprecation and non-deprecation changes (mixed scenarios) |
| 66 | +- **Location:** `temp-docstubs` folder |
| 67 | + |
| 68 | +**Autogenerated changelog (optional):** |
| 69 | +- JSON file if provided |
| 70 | +- **Location:** `temp-docstubs` folder |
| 71 | + |
| 72 | +### When the author provides context directly in their prompt |
| 73 | + |
| 74 | +If the author has already described the deprecation in sufficient detail (e.g., named specific resources, methods, or properties to deprecate, provided the alternative and deadline), you can work directly from their prompt instead of requesting formal inputs. In this case: |
| 75 | + |
| 76 | +| Instead of... | Use... | |
| 77 | +|---------------|--------| |
| 78 | +| Documentation Plan | The author's prompt — extract what is being deprecated, the alternative/workaround, milestone date, and blog post link | |
| 79 | +| Autogenerated changelog | Ask the author if a changelog and What's New update are needed. If yes, use the [manual changelog authoring](common.md#manually-authoring-changelog-entries) process | |
| 80 | + |
| 81 | +**What you still need from the author** (ask if not provided): |
| 82 | +- What specifically is being deprecated (resource, method, property, enum, etc.) |
| 83 | +- The alternative API or workaround |
| 84 | +- The milestone/sunset date |
| 85 | +- Blog post URL (if available) |
| 86 | +- Which version(s): beta, v1.0, or both |
| 87 | +- WorkloadArea and SubArea for the changelog (if one is needed) |
| 88 | + |
| 89 | +## Key principles |
| 90 | + |
| 91 | +- **Customer clarity:** Clearly indicate what is deprecated and provide alternatives/workarounds |
| 92 | +- **Implicit deprecation:** Deprecating a resource implies all its properties, methods, and relationships are deprecated (no need to mark each individually) |
| 93 | +- **Type definitions:** Deprecating a resource does NOT deprecate child type definitions unless explicitly stated |
| 94 | + |
| 95 | +## Common deprecation patterns |
| 96 | + |
| 97 | +**Deprecation banner (applies to resources, methods, enumerations with own topics):** |
| 98 | +- Place immediately after namespace declaration (before beta disclaimer if beta) |
| 99 | +- Format as CAUTION alert |
| 100 | +- Include: what's deprecated, milestone date, alternative/workaround, blog post link |
| 101 | +- Use include files stored in `api-reference/includes/` for consistency across topics |
| 102 | + |
| 103 | +**Example:** |
| 104 | +```markdown |
| 105 | +> [!CAUTION] |
| 106 | +> The Outlook tasks API is deprecated and will stop returning data on August 20, 2022. Use the [To Do API](https://learn.microsoft.com/graph/api/resources/todo-overview?view=graph-rest-1.0) instead. |
| 107 | +``` |
| 108 | + |
| 109 | +**Table updates (applies to properties, relationships, parameters, enum members):** |
| 110 | +- Add "(deprecated)" to the name in the first column |
| 111 | +- Update description with alternative/workaround |
| 112 | +- Move to end of table, grouped alphabetically with other deprecated items |
| 113 | +- Do NOT add "(deprecated)" to JSON representation sections (causes validation errors) |
| 114 | + |
| 115 | +**TOC updates:** |
| 116 | +- Add `toc.title` attribute in YAML front matter with "(deprecated)" OR |
| 117 | +- Include "(deprecated)" inside link text in Methods tables |
| 118 | + |
| 119 | +--- |
| 120 | + |
| 121 | +## Deprecation guides |
| 122 | + |
| 123 | +### To deprecate a resource |
| 124 | + |
| 125 | +1. **Update resource topic:** |
| 126 | + - Add "(deprecated)" to H1 title: `# user resource type (deprecated)` |
| 127 | + - Add deprecation banner (see common pattern above) |
| 128 | + - Add `toc.title` with "(deprecated)" to YAML front matter |
| 129 | + - Add `ROBOTS: NOINDEX` to YAML front matter |
| 130 | + |
| 131 | +2. **Mark child methods:** |
| 132 | + - Add "(deprecated)" to H1 title in each method topic |
| 133 | + - Add deprecation banner to each method topic |
| 134 | + - Add `ROBOTS: NOINDEX` to YAML front matter |
| 135 | + |
| 136 | +3. **Update references in other resources:** |
| 137 | + - Add "(deprecated)" to properties/relationships/methods that reference the deprecated resource type |
| 138 | + |
| 139 | +4. **Do NOT mark child type definitions as deprecated** (only if explicitly stated in Summary) |
| 140 | + |
| 141 | +--- |
| 142 | + |
| 143 | +### To deprecate a method |
| 144 | + |
| 145 | +1. **Update method topic:** |
| 146 | + - Add "(deprecated)" to H1 title: `# Delete user (deprecated)` |
| 147 | + - Add deprecation banner with alternative/workaround |
| 148 | + |
| 149 | +2. **Update parent resource Methods table:** |
| 150 | + - Add "(deprecated)" inside link text: `[Delete (deprecated)](user-delete.md)` |
| 151 | + - Move to end of table (grouped alphabetically with other deprecated methods) |
| 152 | + - Include alternative in description column |
| 153 | + |
| 154 | +--- |
| 155 | + |
| 156 | +### To deprecate a property |
| 157 | + |
| 158 | +1. **Update resource Properties table:** |
| 159 | + - Add "(deprecated)" to property name, update description with alternative, move to end (see common pattern) |
| 160 | + |
| 161 | +2. **Update API method topics:** |
| 162 | + - Add "(deprecated)" in Request body tables (POST, PATCH, PUT) if property is used |
| 163 | + - Update Response examples: remove property if no longer returned, keep if still returned |
| 164 | + |
| 165 | +--- |
| 166 | + |
| 167 | +### To deprecate a relationship |
| 168 | + |
| 169 | +1. **Update resource Relationships table:** |
| 170 | + - Add "(deprecated)" to relationship name, update description, move to end (see common pattern) |
| 171 | + |
| 172 | +2. **Deprecate corresponding methods:** |
| 173 | + - Methods including the navigation property as a segment are also deprecated |
| 174 | + - Follow method deprecation workflow for each affected method |
| 175 | + |
| 176 | +--- |
| 177 | + |
| 178 | +### To deprecate a parameter |
| 179 | + |
| 180 | +**Update parameter table in method topic:** |
| 181 | +- Add "(deprecated)" to parameter name, specify whether to ignore or use alternative, move to end (see common pattern) |
| 182 | + |
| 183 | +--- |
| 184 | + |
| 185 | +### To deprecate an enumeration |
| 186 | + |
| 187 | +1. **Update enumeration definition:** |
| 188 | + - **In enums.md or parent resource:** Add "(deprecated)" to section title: `### emailType values (deprecated)` |
| 189 | + - **In own topic (rare):** Add "(deprecated)" to H1 title and add deprecation banner |
| 190 | + |
| 191 | +2. **Update properties using the enum:** |
| 192 | + - Update type, description, possible values with alternative/workaround |
| 193 | + |
| 194 | +--- |
| 195 | + |
| 196 | +### To deprecate enumeration members |
| 197 | + |
| 198 | +1. **Update member table:** |
| 199 | + - Add "(deprecated)" to member name, specify alternative, move to end (see common pattern) |
| 200 | + |
| 201 | +2. **Update property descriptions:** |
| 202 | + - Note which values are deprecated and provide guidance |
| 203 | + |
| 204 | +--- |
| 205 | + |
| 206 | +## Supporting updates |
| 207 | + |
| 208 | +**Changelog:** Change type: "Deprecation". Include API set/entities, link to topics and blog post. See [Updating the Changelog](common.md#updating-the-changelog). |
| 209 | + |
| 210 | +**What's New:** Describe deprecation, link to deprecated API and alternative, link to blog post. See [Updating What's New](common.md#updating-whats-new). |
| 211 | + |
| 212 | +--- |
| 213 | + |
| 214 | +## Mixed scenarios |
| 215 | + |
| 216 | +When combining deprecation with new APIs/promotions: |
| 217 | +1. Categorize changes (deprecation, new, promotion, updates) |
| 218 | +2. Process non-deprecation tasks first (ensures alternatives are documented) |
| 219 | +3. Process deprecation tasks, referencing newly created alternatives |
| 220 | +4. Update changelog with both deprecation and addition/change entries |
| 221 | + |
| 222 | +--- |
| 223 | + |
| 224 | +## Version-specific notes |
| 225 | + |
| 226 | +- **Beta:** Banner after namespace, before beta disclaimer; keep beta disclaimer; use `?view=graph-rest-beta&preserve-view=true` |
| 227 | +- **v1.0:** Banner after namespace; no query strings in links |
| 228 | +- **Both:** Apply to both versions; may have different milestone dates/alternatives |
| 229 | + |
| 230 | +--- |
| 231 | + |
| 232 | +## Quality checklist |
| 233 | + |
| 234 | +In addition to the [base quality checklist](common.md#base-quality-checklist), verify: |
| 235 | +- [ ] "(deprecated)" added to H1 titles or table entries as appropriate |
| 236 | +- [ ] Deprecation banners added (resources, methods, enums with own topics): CAUTION alert after namespace, includes milestone/alternative/blog link |
| 237 | +- [ ] Include files used for banner text (best practice) |
| 238 | +- [ ] TOC updated: `toc.title` in YAML or "(deprecated)" in link text |
| 239 | +- [ ] Alternatives/workarounds provided and linked |
| 240 | +- [ ] "(deprecated)" NOT added to JSON representation sections |
| 241 | + |
| 242 | +**Table entries (properties, relationships, parameters, enum members):** |
| 243 | +- [ ] "(deprecated)" added to name in first column |
| 244 | +- [ ] Description updated with alternative |
| 245 | +- [ ] Moved to end of table (grouped alphabetically with other deprecated items) |
| 246 | + |
| 247 | +**Resources:** |
| 248 | +- [ ] All child methods marked deprecated with banners |
| 249 | +- [ ] References in other resources marked "(deprecated)" |
| 250 | +- [ ] Child type definitions NOT marked deprecated (unless explicitly stated) |
| 251 | + |
| 252 | +**Relationships:** |
| 253 | +- [ ] Corresponding methods with navigation property as segment also deprecated |
| 254 | + |
| 255 | +**Properties:** |
| 256 | +- [ ] "(deprecated)" added in Request body tables (POST/PATCH/PUT) if applicable |
| 257 | +- [ ] Response examples updated (removed if no longer returned, kept if still returned) |
| 258 | +- [ ] Description accuracy reviewed (e.g., "required" removed) |
| 259 | + |
| 260 | +**Enumerations:** |
| 261 | +- [ ] Section title or H1 title updated |
| 262 | +- [ ] Properties using enum updated with alternatives |
| 263 | + |
| 264 | +**Supporting updates:** |
| 265 | +- [ ] Changelog: Change type "Deprecation", links to topics/blog |
| 266 | +- [ ] What's New: describes deprecation, links to API/alternative/blog |
| 267 | + |
| 268 | +**Mixed scenarios:** |
| 269 | +- [ ] Non-deprecation tasks processed first |
| 270 | +- [ ] Deprecation references newly created alternatives |
| 271 | +- [ ] Changelog includes both deprecation and addition entries |
| 272 | + |
| 273 | +**Version-specific:** |
| 274 | +- [ ] Beta: Banner before beta disclaimer; beta disclaimer retained; links include `?view=graph-rest-beta&preserve-view=true` |
| 275 | +- [ ] V1.0: No query strings in links |
| 276 | +- [ ] Both versions: Applied to both with version-specific formatting |
| 277 | + |
| 278 | +**Final — Scenario 3 specific:** |
| 279 | +- [ ] All deprecation items from Documentation Plan addressed |
0 commit comments