ado-sync 0.1.3 → 0.1.5

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Bidirectional sync between local test specs and Azure DevOps Test Cases.
4
4
 
5
- Supports **Cucumber / Gherkin** `.feature` files and **prose Markdown** `.md` spec files.
5
+ Supports **Cucumber / Gherkin** `.feature` files and **prose Markdown** `.md` spec files (including Playwright test-plan markdown generated by the Playwright MCP agent).
6
6
  Inspired by [SpecSync](https://docs.specsolutions.eu/specsync/).
7
7
 
8
8
  ---
@@ -11,9 +11,9 @@ Inspired by [SpecSync](https://docs.specsolutions.eu/specsync/).
11
11
 
12
12
  ```
13
13
  Local files ado-sync Azure DevOps
14
- ────────────── ─────────────── ────────────────
15
- .feature files ── push ──► create / update ──────────► Test Cases
16
- .md spec files ◄── pull ── apply changes ◄────────── (Work Items)
14
+ ────────────── ───────────────── ────────────────
15
+ .feature files ── push ──► create / update ──► Test Cases
16
+ .md spec files ◄── pull ── apply changes ◄── (Work Items)
17
17
  write ID back
18
18
  @tc:12345 / <!-- tc: 12345 -->
19
19
  ```
@@ -26,7 +26,7 @@ On the **first push** of a scenario, a new Test Case is created in Azure DevOps
26
26
 
27
27
  ```bash
28
28
  npm install -g ado-sync
29
- # or use locally
29
+ # or use locally without installing
30
30
  npx ado-sync --help
31
31
  ```
32
32
 
@@ -37,11 +37,10 @@ npx ado-sync --help
37
37
  ### 1. Generate a config file
38
38
 
39
39
  ```bash
40
- ado-sync init
40
+ ado-sync init # creates ado-sync.json
41
+ ado-sync init ado-sync.yml # creates ado-sync.yml (YAML format)
41
42
  ```
42
43
 
43
- This creates `ado-sync.json` in the current directory.
44
-
45
44
  ### 2. Edit the config
46
45
 
47
46
  ```json
@@ -93,21 +92,22 @@ Options:
93
92
  -h, --help Show help
94
93
 
95
94
  Commands:
96
- init [options] Generate a starter config file
95
+ init [output] Generate a starter config file
97
96
  push [options] Push local specs to Azure DevOps
98
97
  pull [options] Pull updates from Azure DevOps into local files
99
- status Show what would change without making any modifications
98
+ status [options] Show what would change without making any modifications
100
99
  help [command] Help for a specific command
101
100
  ```
102
101
 
103
102
  ### `init`
104
103
 
105
104
  ```bash
106
- ado-sync init
107
- ado-sync init --output path/to/my-config.json
105
+ ado-sync init # creates ado-sync.json
106
+ ado-sync init ado-sync.yml # creates ado-sync.yml
107
+ ado-sync init path/to/config.json
108
108
  ```
109
109
 
110
- Creates a starter `ado-sync.json`. Safe — will not overwrite an existing file.
110
+ Creates a starter config file in JSON or YAML format depending on the file extension. Safe — will not overwrite an existing file.
111
111
 
112
112
  ---
113
113
 
@@ -118,6 +118,7 @@ ado-sync push
118
118
  ado-sync push --dry-run
119
119
  ado-sync push --tags "@smoke"
120
120
  ado-sync push --tags "@smoke and not @wip"
121
+ ado-sync push --config-override testPlan.id=9999
121
122
  ado-sync -c other-config.json push
122
123
  ```
123
124
 
@@ -126,8 +127,9 @@ For every scenario / heading in your local spec files:
126
127
  | Scenario state | Action |
127
128
  |----------------|--------|
128
129
  | No ID tag yet | Creates a new Test Case, writes ID back to file |
129
- | Has ID tag, no changes | Skipped |
130
+ | Has ID tag, no changes | Skipped (uses local cache for speed) |
130
131
  | Has ID tag, title or steps changed | Updates the existing Test Case |
132
+ | Deleted locally, still in Azure suite | Tagged `ado-sync:removed` in Azure |
131
133
  | Has ID tag but Test Case deleted in Azure | Reported as error |
132
134
 
133
135
  `--dry-run` prints what would happen without modifying anything.
@@ -140,13 +142,14 @@ For every scenario / heading in your local spec files:
140
142
  ado-sync pull
141
143
  ado-sync pull --dry-run
142
144
  ado-sync pull --tags "@smoke"
145
+ ado-sync pull --config-override sync.conflictAction=skip
143
146
  ```
144
147
 
145
148
  For every locally-linked scenario (has an ID tag):
146
149
 
147
150
  | Remote state | Action |
148
151
  |--------------|--------|
149
- | Title or steps changed in Azure | Updates the local file |
152
+ | Title, steps, or description changed in Azure | Updates the local file |
150
153
  | No changes | Skipped |
151
154
  | Test Case not found | Reported as error |
152
155
 
@@ -159,52 +162,91 @@ For every locally-linked scenario (has an ID tag):
159
162
  ```bash
160
163
  ado-sync status
161
164
  ado-sync status --tags "@smoke"
165
+ ado-sync status --config-override testPlan.id=9999
162
166
  ```
163
167
 
164
- Compares local specs against Azure DevOps and prints a diff — no changes made. Equivalent to `push --dry-run`.
168
+ Compares local specs against Azure DevOps and prints a diff — no changes made.
169
+
170
+ ---
171
+
172
+ ### `--config-override`
173
+
174
+ All commands accept one or more `--config-override path=value` options to set config values from the command line without editing the file. Useful in CI pipelines.
175
+
176
+ ```bash
177
+ # Override test plan ID
178
+ ado-sync push --config-override testPlan.id=9999
179
+
180
+ # Override tag prefix
181
+ ado-sync push --config-override sync.tagPrefix=azure
182
+
183
+ # Multiple overrides (repeat the flag)
184
+ ado-sync push \
185
+ --config-override testPlan.id=9999 \
186
+ --config-override sync.disableLocalChanges=true
187
+ ```
188
+
189
+ Dot-path notation is used for nested fields. Numbers and booleans are coerced automatically.
165
190
 
166
191
  ---
167
192
 
168
193
  ## Config file reference
169
194
 
170
- Config files can be JSON (`.json`) or YAML (`.yml` / `.yaml`).
195
+ Config files can be JSON (`.json`) or YAML (`.yml` / `.yaml`). Run `ado-sync init` to generate a template.
196
+
197
+ ### Full example (JSON)
171
198
 
172
199
  ```json
173
200
  {
174
- "orgUrl": "https://dev.azure.com/YOUR_ORG",
175
- "project": "YOUR_PROJECT",
201
+ "orgUrl": "https://dev.azure.com/YOUR_ORG",
202
+ "project": "YOUR_PROJECT",
176
203
 
177
204
  "auth": {
178
- "type": "pat",
179
- "token": "$AZURE_DEVOPS_TOKEN",
180
- "applicationIdURI": ""
205
+ "type": "pat",
206
+ "token": "$AZURE_DEVOPS_TOKEN"
181
207
  },
182
208
 
183
209
  "testPlan": {
184
- "id": 1234,
185
- "suiteId": 5678
210
+ "id": 1234,
211
+ "suiteId": 5678,
212
+ "suiteMapping": "flat"
186
213
  },
187
214
 
188
215
  "local": {
189
- "type": "gherkin",
216
+ "type": "gherkin",
190
217
  "include": "specs/**/*.feature",
191
218
  "exclude": []
192
219
  },
193
220
 
194
221
  "sync": {
195
- "tagPrefix": "tc",
196
- "areaPath": "MyProject\\Team A",
197
- "iterationPath": "MyProject\\Sprint 1"
222
+ "tagPrefix": "tc",
223
+ "titleField": "System.Title",
224
+ "areaPath": "MyProject\\Team A",
225
+ "iterationPath": "MyProject\\Sprint 1",
226
+ "disableLocalChanges": false,
227
+ "conflictAction": "overwrite",
228
+ "links": [
229
+ { "prefix": "story", "relationship": "System.LinkTypes.Related" },
230
+ { "prefix": "bug", "relationship": "System.LinkTypes.Related" }
231
+ ]
198
232
  }
199
233
  }
200
234
  ```
201
235
 
236
+ ---
237
+
202
238
  ### `orgUrl`
239
+
203
240
  Azure DevOps organisation URL. Format: `https://dev.azure.com/YOUR_ORG`.
204
241
 
242
+ ---
243
+
205
244
  ### `project`
245
+
206
246
  Azure DevOps project name.
207
247
 
248
+ ---
249
+
208
250
  ### `auth`
209
251
 
210
252
  | Field | Description |
@@ -215,28 +257,71 @@ Azure DevOps project name.
215
257
 
216
258
  **PAT permissions required:** Test Management (Read & Write), Work Items (Read & Write).
217
259
 
260
+ ---
261
+
218
262
  ### `testPlan`
219
263
 
264
+ | Field | Default | Description |
265
+ |-------|---------|-------------|
266
+ | `id` | *(required)* | ID of the Azure DevOps Test Plan. |
267
+ | `suiteId` | plan root | ID of the Test Suite within the plan. Defaults to the plan's root suite. |
268
+ | `suiteMapping` | `"flat"` | `"flat"` — all Test Cases go into one suite. `"byFolder"` — folder structure is mirrored as nested child suites (e.g. `specs/login/` → suite named `login`). |
269
+
270
+ ---
271
+
272
+ ### `testPlans` (multi-plan)
273
+
274
+ To sync the same repository against multiple Test Plans, use the `testPlans` array instead of (or in addition to) `testPlan`. Each entry overrides `testPlan` and can specify its own file globs.
275
+
276
+ ```json
277
+ {
278
+ "testPlans": [
279
+ {
280
+ "id": 1001,
281
+ "suiteId": 2001,
282
+ "include": "specs/smoke/**/*.feature"
283
+ },
284
+ {
285
+ "id": 1002,
286
+ "suiteId": 2002,
287
+ "include": "specs/regression/**/*.feature",
288
+ "suiteMapping": "byFolder"
289
+ }
290
+ ]
291
+ }
292
+ ```
293
+
220
294
  | Field | Description |
221
295
  |-------|-------------|
222
- | `id` | ID of the Azure DevOps Test Plan new test cases are added to. |
223
- | `suiteId` | *(Optional)* ID of the Test Suite within the plan. Defaults to the plan's root suite. |
296
+ | `id` | Test Plan ID |
297
+ | `suiteId` | *(Optional)* Target suite ID |
298
+ | `suiteMapping` | *(Optional)* `"flat"` or `"byFolder"` |
299
+ | `include` | *(Optional)* Override `local.include` for this plan |
300
+ | `exclude` | *(Optional)* Override `local.exclude` for this plan |
301
+
302
+ ---
224
303
 
225
304
  ### `local`
226
305
 
227
306
  | Field | Description |
228
307
  |-------|-------------|
229
- | `type` | `"gherkin"` for `.feature` files · `"markdown"` for prose `.md` specs. |
308
+ | `type` | `"gherkin"` for `.feature` files · `"markdown"` for prose `.md` specs |
230
309
  | `include` | Glob pattern(s) relative to the config file. String or array. |
231
310
  | `exclude` | *(Optional)* Glob pattern(s) to exclude. String or array. |
232
311
 
312
+ ---
313
+
233
314
  ### `sync`
234
315
 
235
316
  | Field | Default | Description |
236
317
  |-------|---------|-------------|
237
- | `tagPrefix` | `"tc"` | Prefix used in ID tags. See [ID tags](#id-tags) below. |
318
+ | `tagPrefix` | `"tc"` | Prefix used in ID tags. See [ID tags](#id-tags). |
319
+ | `titleField` | `"System.Title"` | Azure DevOps field used as the test case title. |
238
320
  | `areaPath` | *(none)* | Area path for newly created Test Cases. |
239
321
  | `iterationPath` | *(none)* | Iteration path for newly created Test Cases. |
322
+ | `disableLocalChanges` | `false` | When `true`, no local files are modified — no ID writeback, no pull apply. Use in CI pipelines that should not commit file changes. |
323
+ | `conflictAction` | `"overwrite"` | How to handle conflicts (remote changed since last sync AND local also differs). `"overwrite"` — push local version. `"skip"` — emit a conflict result, leave both sides unchanged. `"fail"` — throw an error listing all conflicts. |
324
+ | `links` | `[]` | Work item link configurations. See [Work item linking](#work-item-linking). |
240
325
 
241
326
  ---
242
327
 
@@ -246,7 +331,7 @@ After a scenario is pushed for the first time, ado-sync writes the Azure Test Ca
246
331
 
247
332
  ### Gherkin
248
333
 
249
- The ID tag is inserted on its own line immediately above the `Scenario:` keyword, using the `@{tagPrefix}:{id}` convention:
334
+ The ID tag is inserted on its own line immediately above the `Scenario:` or `Scenario Outline:` keyword:
250
335
 
251
336
  ```gherkin
252
337
  Feature: Login
@@ -258,11 +343,23 @@ Feature: Login
258
343
  Then I am redirected to the inventory page
259
344
  ```
260
345
 
261
- Tags from the feature or scenario are preserved. The ID tag is always kept as the first tag on the line or alongside existing tags.
346
+ For `Scenario Outline`, a **single** parametrized Test Case is created in Azure with a data table one `@tc:ID` tag for the whole outline, not one per example row.
347
+
348
+ ```gherkin
349
+ @tc:1043
350
+ Scenario Outline: Login with different roles
351
+ Given I am logged in as "<role>"
352
+ Then I can see "<dashboard>"
353
+
354
+ Examples:
355
+ | role | dashboard |
356
+ | admin | Admin view |
357
+ | tester | Test view |
358
+ ```
262
359
 
263
360
  ### Markdown
264
361
 
265
- The ID comment is inserted on the line immediately after the `### heading`, using `<!-- {tagPrefix}: {id} -->`:
362
+ The ID comment is inserted on the line immediately after the `### heading`:
266
363
 
267
364
  ```markdown
268
365
  ### 1. Login (happy path)
@@ -317,9 +414,11 @@ ado-sync pull --tags "@regression or @critical"
317
414
  ```
318
415
 
319
416
  Tags are evaluated against all tags on a scenario, including:
320
- - Tags inherited from the Feature block
417
+
418
+ - Tags inherited from the Feature block (Gherkin)
321
419
  - Tags on the Scenario / Scenario Outline block
322
420
  - Tags on individual Examples tables
421
+ - Inline `<!-- tags: -->` comments in Markdown (see below)
323
422
  - **Path-based auto-tags** — directory segments prefixed with `@` are automatically applied as tags to all scenarios in that directory:
324
423
 
325
424
  ```
@@ -331,12 +430,31 @@ Tags are evaluated against all tags on a scenario, including:
331
430
  checkout.feature ← all scenarios get tags 'regression' and 'slow'
332
431
  ```
333
432
 
334
- This lets you filter by folder without adding tags to every scenario manually:
335
433
  ```bash
336
434
  ado-sync push --tags "@smoke" # only push specs/@smoke/** scenarios
337
435
  ```
338
436
 
339
- > Path-based auto-tagging applies to Gherkin files only. Markdown specs do not have a tag system, so `--tags` has no effect on them.
437
+ ### Tags in Markdown
438
+
439
+ Add a `<!-- tags: -->` HTML comment anywhere inside a scenario block to assign tags:
440
+
441
+ ```markdown
442
+ ### Login with valid credentials
443
+ <!-- tc: 1042 -->
444
+ <!-- tags: @smoke, @regression -->
445
+
446
+ Steps:
447
+ 1. Navigate to the login page
448
+ 2. Enter valid credentials
449
+ 3. Click Login
450
+
451
+ Expected results:
452
+ - Dashboard is shown
453
+
454
+ ---
455
+ ```
456
+
457
+ Path-based auto-tagging also works for Markdown files — placing them inside an `@smoke/` folder automatically adds the `smoke` tag.
340
458
 
341
459
  ---
342
460
 
@@ -348,7 +466,7 @@ Standard Gherkin syntax is supported, including:
348
466
  - `Feature` / `Scenario` / `Scenario Outline`
349
467
  - `Given` / `When` / `Then` / `And` / `But`
350
468
  - Feature-level and scenario-level tags
351
- - `Examples` tables — each row becomes a separate Azure Test Case
469
+ - `Scenario Outline` with `Examples` tables — creates a **single** parametrized Test Case in Azure (data table included), not one TC per row
352
470
 
353
471
  ```gherkin
354
472
  Feature: Checkout
@@ -366,8 +484,8 @@ Feature: Checkout
366
484
  Then the result is "<result>"
367
485
 
368
486
  Examples:
369
- | user | result |
370
- | standard_user | success |
487
+ | user | result |
488
+ | standard_user | success |
371
489
  | performance_glitch_user | success |
372
490
  ```
373
491
 
@@ -381,6 +499,9 @@ Each `### heading` is treated as one test case. The file can contain any number
381
499
  ## Test scenarios
382
500
 
383
501
  ### Login with valid credentials
502
+ <!-- tags: @smoke -->
503
+
504
+ Assumption: Fresh browser session.
384
505
 
385
506
  Steps:
386
507
  1. Navigate to https://example.com/login
@@ -407,8 +528,130 @@ Expected results:
407
528
  ---
408
529
  ```
409
530
 
410
- Headings can optionally have a number prefix (`### 1. Title` or `### Title` both work).
411
- Sections recognised: `Steps:`, `Expected results:` (case-insensitive). All other prose is captured as the test case description.
531
+ Sections recognised: `Steps:`, `Expected results:` (case-insensitive). All other prose is captured as the test case description. Heading number prefixes (`### 1. Title` or `### Title`) are both supported.
532
+
533
+ #### Playwright test-plan markdown
534
+
535
+ Markdown `.md` files generated by the [Playwright MCP agent](https://playwright.dev/docs/test-agents) are fully supported as a local spec source. Set `local.type: "markdown"` and point `local.include` at the generated files to sync them into Azure DevOps as Test Cases.
536
+
537
+ ---
538
+
539
+ ## Work item linking
540
+
541
+ Tags matching a configured `links` prefix are turned into Azure DevOps work item relations on the Test Case.
542
+
543
+ ### Config
544
+
545
+ ```json
546
+ {
547
+ "sync": {
548
+ "links": [
549
+ { "prefix": "story", "relationship": "System.LinkTypes.Related" },
550
+ { "prefix": "bug", "relationship": "System.LinkTypes.Related" },
551
+ { "prefix": "req", "relationship": "Microsoft.VSTS.Common.TestedBy-Reverse" }
552
+ ]
553
+ }
554
+ }
555
+ ```
556
+
557
+ ### Usage in Gherkin
558
+
559
+ ```gherkin
560
+ @tc:1042 @story:555 @bug:789
561
+ Scenario: User can add items to cart
562
+ ...
563
+ ```
564
+
565
+ ### Usage in Markdown
566
+
567
+ ```markdown
568
+ ### User can add items to cart
569
+ <!-- tc: 1042 -->
570
+ <!-- tags: @story:555, @bug:789 -->
571
+ ```
572
+
573
+ On each `push`, relations are synced: new links are added and stale links (whose tag was removed) are deleted. The `relationship` value is the ADO relation type; `"System.LinkTypes.Related"` is the default if omitted.
574
+
575
+ ---
576
+
577
+ ## Suite hierarchy
578
+
579
+ By default, all Test Cases are created in a single flat suite (`suiteMapping: "flat"`). Setting `suiteMapping: "byFolder"` mirrors the folder structure of your spec files as nested child suites in Azure.
580
+
581
+ ```json
582
+ {
583
+ "testPlan": {
584
+ "id": 1234,
585
+ "suiteId": 5678,
586
+ "suiteMapping": "byFolder"
587
+ }
588
+ }
589
+ ```
590
+
591
+ ```
592
+ specs/
593
+ login/
594
+ basic.feature → suite "login" → TC "Successful login"
595
+ checkout/
596
+ happy.feature → suite "checkout" → TC "Add item and checkout"
597
+ ```
598
+
599
+ Child suites are created automatically if they do not exist. The suite hierarchy is re-used across runs.
600
+
601
+ ---
602
+
603
+ ## Conflict detection
604
+
605
+ ado-sync uses a local state cache (`.ado-sync-state.json`) to detect conflicts — cases where **both** the local file and the Azure Test Case were changed since the last sync.
606
+
607
+ The `sync.conflictAction` setting controls what happens:
608
+
609
+ | Value | Behaviour |
610
+ |-------|-----------|
611
+ | `"overwrite"` *(default)* | Push the local version to Azure, overwriting the remote change. |
612
+ | `"skip"` | Emit a `!` conflict result for the scenario and leave both sides unchanged. |
613
+ | `"fail"` | Throw an error listing all conflicting scenarios and abort the sync. |
614
+
615
+ ```json
616
+ { "sync": { "conflictAction": "skip" } }
617
+ ```
618
+
619
+ ---
620
+
621
+ ## Local state cache
622
+
623
+ ado-sync writes a `.ado-sync-state.json` file in the same directory as your config file. This cache stores SHA-256 hashes of the last-synced title, steps, and description for each Test Case, plus the Azure `changedDate` timestamp.
624
+
625
+ **Commit this file to version control** so all team members and CI share the same last-synced state, enabling accurate conflict detection across machines.
626
+
627
+ The cache also speeds up `push` — if neither the local file nor the Azure `changedDate` has changed since the last sync, the Azure API call is skipped entirely and the scenario is marked `skipped`.
628
+
629
+ ---
630
+
631
+ ## Build server / CI mode
632
+
633
+ Set `sync.disableLocalChanges: true` to prevent ado-sync from writing back to local files. In this mode:
634
+
635
+ - `push` — creates and updates Test Cases in Azure, but does **not** write ID tags back to local files.
636
+ - `pull` — computes what would change but does **not** modify local files (behaves like `--dry-run`).
637
+
638
+ ```json
639
+ { "sync": { "disableLocalChanges": true } }
640
+ ```
641
+
642
+ Or use `--config-override` per run:
643
+
644
+ ```bash
645
+ ado-sync push --config-override sync.disableLocalChanges=true
646
+ ```
647
+
648
+ ---
649
+
650
+ ## Removed scenario detection
651
+
652
+ When a scenario is deleted from a local spec file but its Test Case still exists in the Azure suite, ado-sync detects this on the next `push` and appends the tag `ado-sync:removed` to the Azure Test Case (without deleting it). A `−` removed line is printed in the output.
653
+
654
+ To completely remove the Test Case from Azure, delete it manually in Test Plans after reviewing.
412
655
 
413
656
  ---
414
657
 
@@ -425,17 +668,22 @@ auth:
425
668
  testPlan:
426
669
  id: 1234
427
670
  suiteId: 5678
671
+ suiteMapping: byFolder
428
672
 
429
673
  local:
430
- type: markdown
431
- include:
432
- - specs/**/*.md
674
+ type: gherkin
675
+ include: specs/**/*.feature
433
676
  exclude:
434
677
  - specs/archive/**
435
678
 
436
679
  sync:
437
680
  tagPrefix: tc
438
681
  areaPath: "MyProject\\QA Team"
682
+ conflictAction: skip
683
+ disableLocalChanges: false
684
+ links:
685
+ - prefix: story
686
+ relationship: System.LinkTypes.Related
439
687
  ```
440
688
 
441
689
  ---
@@ -458,7 +706,8 @@ You can also use a `.env` file in the working directory. It is loaded automatica
458
706
  ~ updated — existing Test Case updated
459
707
  ↓ pulled — local file updated from Azure DevOps
460
708
  = skipped — no changes detected
461
- ! conflict — both sides changed (manual resolution needed)
709
+ ! conflict — both sides changed (see conflictAction)
710
+ − removed — local scenario deleted; Test Case tagged ado-sync:removed in Azure
462
711
  ✗ error — something went wrong (see detail message)
463
712
  ```
464
713
 
@@ -504,6 +753,26 @@ ado-sync pull
504
753
  ado-sync status
505
754
  ```
506
755
 
756
+ ### CI pipeline (no file writeback)
757
+
758
+ ```yaml
759
+ # GitHub Actions example
760
+ - name: Sync test cases to Azure DevOps
761
+ run: ado-sync push --config-override sync.disableLocalChanges=true
762
+ env:
763
+ AZURE_DEVOPS_TOKEN: ${{ secrets.AZURE_DEVOPS_TOKEN }}
764
+ ```
765
+
766
+ ### Override plan per environment
767
+
768
+ ```bash
769
+ # Push to staging plan
770
+ ado-sync push --config-override testPlan.id=2001
771
+
772
+ # Push to production plan
773
+ ado-sync push --config-override testPlan.id=3001
774
+ ```
775
+
507
776
  ---
508
777
 
509
778
  ## Troubleshooting
@@ -515,7 +784,7 @@ Run `ado-sync init` or pass `-c path/to/config.json`.
515
784
  Your config references `$X` in `auth.token` but the variable is not exported. Run `export X=...` or add it to a `.env` file.
516
785
 
517
786
  **Test Case created but ID not written back**
518
- Check that the local file is writable. On the next `push` it will try again.
787
+ Check that the local file is writable, or set `sync.disableLocalChanges: false`. On the next `push` it will try again.
519
788
 
520
789
  **`Test case #N not found in Azure DevOps`**
521
790
  The test case was deleted in Azure. Remove the ID tag from the local file to recreate it, or restore the test case in Azure.
@@ -524,4 +793,10 @@ The test case was deleted in Azure. Remove the ID tag from the local file to rec
524
793
  Gherkin syntax error in a `.feature` file. Run `npx cucumber-js --dry-run` to identify the problem line.
525
794
 
526
795
  **Changes not detected on push**
527
- The comparison is title + step text. Changing only description or area path requires a manual update via `ado-sync push` after touching a step.
796
+ The comparison uses title + steps + description. If only `areaPath` or `iterationPath` changed, touch any step to trigger an update, or use `--config-override` to set those fields and rely on the next sync.
797
+
798
+ **Conflict detected unexpectedly**
799
+ Delete `.ado-sync-state.json` to reset the cache. The next push will re-populate it by fetching current state from Azure.
800
+
801
+ **`init` generated JSON instead of YAML**
802
+ Pass the filename as a positional argument: `ado-sync init ado-sync.yml` (not `--output`).
package/dist/cli.js CHANGED
@@ -58,16 +58,18 @@ function collect(value, previous) {
58
58
  }
59
59
  // ─── init ─────────────────────────────────────────────────────────────────────
60
60
  program
61
- .command('init')
62
- .description('Generate a starter ado-sync.json config file')
63
- .option('-o, --output <path>', 'Output path', 'ado-sync.json')
64
- .action((opts) => {
65
- const outPath = path.resolve(opts.output);
61
+ .command('init [output]')
62
+ .description('Generate a starter config file (default: ado-sync.json). Pass ado-sync.yml for YAML.')
63
+ .action((output) => {
64
+ const outFile = output ?? 'ado-sync.json';
65
+ const outPath = path.resolve(outFile);
66
66
  if (fs.existsSync(outPath)) {
67
67
  console.error(chalk_1.default.red(`File already exists: ${outPath}`));
68
68
  process.exit(1);
69
69
  }
70
- fs.writeFileSync(outPath, config_1.CONFIG_TEMPLATE_JSON, 'utf8');
70
+ const ext = path.extname(outFile).toLowerCase();
71
+ const isYaml = ext === '.yml' || ext === '.yaml';
72
+ fs.writeFileSync(outPath, isYaml ? config_1.CONFIG_TEMPLATE_YAML : config_1.CONFIG_TEMPLATE_JSON, 'utf8');
71
73
  console.log(chalk_1.default.green(`Created ${outPath}`));
72
74
  console.log(chalk_1.default.dim('Edit the file with your Azure DevOps details, then run:'));
73
75
  console.log(chalk_1.default.dim(' ado-sync push (to create test cases from local specs)'));
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -8,3 +8,4 @@ export declare function loadConfig(configPath: string): SyncConfig;
8
8
  */
9
9
  export declare function applyOverrides(cfg: SyncConfig, overrides: string[]): void;
10
10
  export declare const CONFIG_TEMPLATE_JSON: string;
11
+ export declare const CONFIG_TEMPLATE_YAML: string;
package/dist/config.js CHANGED
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.CONFIG_TEMPLATE_JSON = void 0;
36
+ exports.CONFIG_TEMPLATE_YAML = exports.CONFIG_TEMPLATE_JSON = void 0;
37
37
  exports.resolveConfigPath = resolveConfigPath;
38
38
  exports.loadConfig = loadConfig;
39
39
  exports.applyOverrides = applyOverrides;
@@ -147,7 +147,7 @@ function applyOverrides(cfg, overrides) {
147
147
  }
148
148
  }
149
149
  }
150
- exports.CONFIG_TEMPLATE_JSON = JSON.stringify({
150
+ const CONFIG_TEMPLATE_OBJECT = {
151
151
  orgUrl: 'https://dev.azure.com/YOUR_ORG',
152
152
  project: 'YOUR_PROJECT',
153
153
  auth: {
@@ -173,5 +173,7 @@ exports.CONFIG_TEMPLATE_JSON = JSON.stringify({
173
173
  conflictAction: 'overwrite',
174
174
  links: [],
175
175
  },
176
- }, null, 2);
176
+ };
177
+ exports.CONFIG_TEMPLATE_JSON = JSON.stringify(CONFIG_TEMPLATE_OBJECT, null, 2);
178
+ exports.CONFIG_TEMPLATE_YAML = yaml.dump(CONFIG_TEMPLATE_OBJECT, { indent: 2, lineWidth: 120 });
177
179
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ado-sync",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Bidirectional sync between local test specs (Cucumber/Markdown) and Azure DevOps Test Cases",
5
5
  "bin": {
6
6
  "ado-sync": "./dist/cli.js"
@@ -40,7 +40,7 @@
40
40
  "commander": "^12.1.0",
41
41
  "dotenv": "^16.4.5",
42
42
  "fast-xml-parser": "^4.4.1",
43
- "glob": "^11.0.0",
43
+ "glob": "^13.0.6",
44
44
  "js-yaml": "^4.1.0"
45
45
  },
46
46
  "devDependencies": {
@@ -0,0 +1,27 @@
1
+ {
2
+ "orgUrl": "https://dev.azure.com/YOUR_ORG",
3
+ "project": "YOUR_PROJECT",
4
+ "auth": {
5
+ "type": "pat",
6
+ "token": "$AZURE_DEVOPS_TOKEN"
7
+ },
8
+ "testPlan": {
9
+ "id": 0,
10
+ "suiteId": 0,
11
+ "suiteMapping": "flat"
12
+ },
13
+ "local": {
14
+ "type": "gherkin",
15
+ "include": "specs/**/*.feature",
16
+ "exclude": []
17
+ },
18
+ "sync": {
19
+ "tagPrefix": "tc",
20
+ "titleField": "System.Title",
21
+ "areaPath": "",
22
+ "iterationPath": "",
23
+ "disableLocalChanges": false,
24
+ "conflictAction": "overwrite",
25
+ "links": []
26
+ }
27
+ }