Skip to content

Commit dba5eb5

Browse files
committed
update operation signature change pattern
1 parent 0a456b9 commit dba5eb5

1 file changed

Lines changed: 29 additions & 20 deletions

File tree

eng/common/knowledge/sdk-breaking-patterns.md

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ enum FooStatusEnum
3737

3838
---
3939

40-
### 4. Model Renamed
40+
### 2. Model Renamed
4141

4242
**Detection:** TypeSpec diff shows a model definition's name changed while its structure remains the same or similar. This is distinct from Pattern 5 (Model Removed) — a rename has a clear old→new mapping, while a removal has no replacement.
4343

@@ -73,7 +73,7 @@ model NewModelName {
7373

7474
---
7575

76-
### 5. Model Removed
76+
### 3. Model Removed
7777

7878
**Detection:** TypeSpec diff shows model definition deleted with no replacement. If a replacement model with similar properties exists, this is a rename — see Pattern 4 (Model Renamed) instead.
7979

@@ -92,7 +92,7 @@ model DeprecatedModel {
9292

9393
---
9494

95-
### 6. Property Type Changed
95+
### 4. Property Type Changed
9696

9797
**Detection:** TypeSpec diff shows property type changed (e.g., `int32``duration`, `string` → custom model).
9898

@@ -122,7 +122,7 @@ model DeprecatedModel {
122122

123123
---
124124

125-
### 7. Property Renamed
125+
### 5. Property Renamed
126126

127127
**Detection:** TypeSpec diff shows property name changed, or changelog shows renamed getter/setter.
128128

@@ -147,11 +147,11 @@ model DeprecatedModel {
147147

148148
---
149149

150-
### 8. Operation Renamed
150+
### 6. Operation Renamed
151151

152152
**Detection:** TypeSpec diff shows operation name changed, or changelog shows paired method removal + addition. This is distinct from Pattern 10 (Operation Removed) — a rename has a clear old→new mapping, while a removal has no replacement.
153153

154-
**How to distinguish from Pattern 10:** If a method disappears from the changelog AND a new method with similar parameters/return type appears, this is a rename (Pattern 8). If a method disappears with no replacement, that's a removal (Pattern 10).
154+
**How to distinguish from Pattern 8:** If a method disappears from the changelog AND a new method with similar parameters/return type appears, this is a rename (Pattern 6). If a method disappears with no replacement, that's a removal (Pattern 8).
155155

156156
**Per-Language Changelog Pattern:**
157157
- **Python:** `Removed operation StorageTaskAssignmentOperations.list` / `Added operation StorageTaskAssignmentOperations.storage_task_assignment_list`
@@ -165,12 +165,12 @@ model DeprecatedModel {
165165
```typespec
166166
// In client.tsp — restore the original operation name
167167
@@clientName(MyService.StorageTaskAssignment.storageTaskAssignmentList, "list", "python");
168-
@@clientName(MyService.MyInterface.newOpName, "oldOpName", "go");
168+
@@clientName(MyService.MyInterface.B, "A", "go");
169169
```
170170

171171
---
172172

173-
### 9. Operation Signature Changed (Parameters Added/Removed/Reordered)
173+
### 7. Operation Signature Changed (Parameters Added/Removed/Reordered)
174174

175175
**Detection:** TypeSpec diff shows operation parameters added/removed/retyped, or changelog shows parameter changes.
176176

@@ -183,35 +183,44 @@ model DeprecatedModel {
183183
- **All languages:** ❌ Breaking — method signatures change in generated clients
184184
- **Go:** Required parameter additions, optional-to-required changes, and parameter deletions cannot be resolved through client customizations
185185

186-
**Mitigation (Python — parameter reorder):**
186+
**Mitigation:**
187+
188+
- **All languages**: Required parameter additions, optional-to-required changes, and Required parameter deletions cannot be resolved through client customizations
189+
190+
**Mitigation (parameter reorder):**
191+
187192
```typespec
188193
// In client.tsp — use @@override to control parameter order
189194
op MyCustomOp(
190-
@path provider: "Microsoft.ThisWillBeReplaced",
191195
@path provisioningServiceName: string,
192196
...Azure.ResourceManager.CommonTypes.ResourceGroupNameParameter,
193197
): ProvisioningServiceDescription;
194198
195199
@@override(ProvisioningServiceDescriptions.get, MyCustomOp, "python");
196200
```
197201

198-
**Mitigation (general — rename/hide):**
202+
**Mitigation (parameter add optional parameter):**
203+
199204
```typespec
200-
@@clientName(MyService.MyInterface.newOpName, "oldOpName");
201-
@@access(MyService.MyInterface.internalOp, Access.internal, "python");
202-
```
205+
// In client.tsp — use @@override to control parameter order
206+
op MyCustomOp(
207+
@path provisioningServiceName: string,
208+
...Azure.ResourceManager.CommonTypes.ResourceGroupNameParameter,
209+
@query provider?: string //put the added optional paramerter at the last
210+
): ProvisioningServiceDescription;
203211
204-
---
212+
@@override(ProvisioningServiceDescriptions.get, MyCustomOp);
213+
```
205214

206-
### 10. Operation Removed or Hidden
215+
### 8. Operation Removed or Hidden
207216

208-
**Detection:** TypeSpec diff shows operation deleted or `@removed` decorator added, with no replacement operation. If a replacement operation with similar parameters exists, this is a rename — see Pattern 8 (Operation Renamed) instead.
217+
**Detection:** TypeSpec diff shows operation deleted or `@removed` decorator added, with no replacement operation. If a replacement operation with similar parameters exists, this is a rename — see Pattern 6 (Operation Renamed) instead.
209218

210219
**Per-Language Impact:**
211220
- **All languages:** ❌ Breaking — method no longer exists in client
212221
- **Go:** Cannot be resolved through client customizations
213222

214-
**Mitigation:**
223+
**typespec pattern:**
215224
```typespec
216225
// In main.tsp — use version gating instead of deletion
217226
@removed(Versions.v2026_07_01)
@@ -220,7 +229,7 @@ op oldOperation(): void;
220229

221230
---
222231

223-
### 11. Combine multiple model properties into one
232+
### 9. Combine multiple model properties into one
224233

225234
**Detection:** TypeSpec diff shows that one or more properties in a model are combined into a new model, and a new property of that model is added.
226235

@@ -233,7 +242,7 @@ op oldOperation(): void;
233242

234243
---
235244

236-
### 12. Interface Renamed (DataPlane only)
245+
### 10. Interface Renamed (DataPlane only)
237246

238247
**Detection:** TypeSpec diff shows interface name changed.
239248

0 commit comments

Comments
 (0)