Skip to content

Commit 896f03f

Browse files
committed
feat: add ado backlog adapter
- Add Azure DevOps backlog adapter with bidirectional sync support - Implement lossless content preservation for cross-adapter sync - Add markdown format support for ADO work items - Enhance source tracking with three-level matching for ADO GUIDs - Add comprehensive documentation and examples - Update CLI help text with cross-adapter sync capabilities - Add complete round-trip sync example (GitHub → ADO → GitHub) Closes #112
1 parent bf0c9a7 commit 896f03f

27 files changed

+7332
-1854
lines changed

CHANGELOG.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,104 @@ All notable changes to this project will be documented in this file.
99

1010
---
1111

12+
## [0.25.1] - 2026-01-16
13+
14+
### Added (0.25.1)
15+
16+
- **Azure DevOps Backlog Adapter**: New `--adapter ado` option for `sync bridge` command
17+
- **Purpose**: Bidirectional synchronization between OpenSpec change proposals and Azure DevOps work items
18+
- **Features**:
19+
- **Bidirectional Sync**: Import ADO work items as OpenSpec change proposals AND export proposals as work items
20+
- **Export Mode**: Export OpenSpec change proposals as ADO work items (`--mode export-only`)
21+
- **Import Mode**: Import ADO work items as OpenSpec change proposals (via `--bidirectional`)
22+
- Bidirectional status synchronization (OpenSpec ↔ ADO state) with conflict resolution
23+
- Automatic work item type derivation from process templates (Scrum/Kanban/Agile)
24+
- Code change tracking and progress comments (same as GitHub adapter)
25+
- **Lossless Content Preservation**: Stores raw content (title, body) in `source_tracking.source_metadata` for round-trip syncs
26+
- **Cross-Adapter Sync**: Export stored bundle content to any backlog adapter (GitHub ↔ ADO) with 100% fidelity
27+
- **Markdown Format Support**: Sets `multilineFieldsFormat` to "Markdown" when creating/updating work items (ADO supports Markdown as of July 2025)
28+
- **HTML to Markdown Conversion**: Automatically converts HTML-formatted work items to markdown when importing
29+
- **Three-Level Source Tracking Matching**: Prevents duplicate work items using exact match → org+type match → org-only match (handles ADO URL GUIDs and project name changes)
30+
- **Work Item Body Updates**: Support for `change_proposal_update` artifact key to update work item descriptions
31+
- **Bundle Export**: Export stored backlog items from project bundles to ADO with lossless content preservation
32+
- **Configuration**: `--ado-org`, `--ado-project`, `--ado-base-url`, `--ado-token`, `--ado-work-item-type`
33+
- **Status Mapping**: Maps ADO states (New/Active/Closed/Removed/Rejected) to OpenSpec status (proposed/in-progress/applied/deprecated/discarded)
34+
- **Work Item Types**: Automatically detects from process template (Scrum → Product Backlog Item, Agile → User Story, Kanban → User Story)
35+
- **Examples**:
36+
- `specfact sync bridge --adapter ado --bidirectional --ado-org myorg --ado-project myproject` (bidirectional)
37+
- `specfact sync bridge --adapter ado --mode export-only --ado-org myorg --ado-project myproject` (export-only)
38+
- `specfact sync bridge --adapter ado --mode export-only --bundle main --change-ids <id>` (bundle export)
39+
- **Documentation**:
40+
- `docs/guides/devops-adapter-integration.md#azure-devops-integration` - Complete integration guide
41+
- `docs/guides/devops-adapter-integration.md#cross-adapter-sync-lossless-round-trip-migration` - Cross-adapter sync scenarios
42+
- `docs/adapters/azuredevops.md` - Azure DevOps adapter reference
43+
- `docs/adapters/backlog-adapter-patterns.md` - Backlog adapter patterns
44+
45+
- **Cross-Adapter Sync Capabilities**: Lossless round-trip synchronization between backlog adapters
46+
- **Purpose**: Enable tool migration and multi-tool workflows without losing content
47+
- **Features**:
48+
- **Lossless Content Preservation**: Original raw content (title, body) stored in project bundles for 100% fidelity
49+
- **Cross-Adapter Export**: Export stored bundle content to any backlog adapter (GitHub ↔ ADO ↔ others)
50+
- **Round-Trip Safety**: Content can be synced GitHub → OpenSpec → ADO → OpenSpec → GitHub with no data loss
51+
- **Bundle-Based Workflow**: Use `--bundle` flag to preserve lossless content during cross-adapter syncs
52+
- **Use Cases**:
53+
- Tool migration (GitHub → ADO, ADO → GitHub)
54+
- Multi-tool workflows (public GitHub + internal ADO)
55+
- Cross-team collaboration with different tool preferences
56+
- Feature branch integration across different backlog tools
57+
- **Documentation**: See `docs/guides/devops-adapter-integration.md#cross-adapter-sync-lossless-round-trip-migration`
58+
59+
### Changed (0.25.1)
60+
61+
- **Enhanced Source Tracking Matching**: Improved duplicate prevention logic for backlog adapters
62+
- **Three-Level Matching**: Exact `source_repo` match → org+type match (for ADO) → org-only match (for ADO)
63+
- **ADO GUID Support**: Handles ADO URLs containing GUIDs instead of project names (e.g., `dominikusnold/69b5d0c2-2400-470d-b937-b5205503a679`)
64+
- **Backward Compatibility**: Works with both single dict format and multi-repo list format
65+
- **Duplicate Prevention**: If `source_tracking` entry exists but `source_id` is missing, skip creation and warn user (prevents duplicates from corrupted entries)
66+
- **Project Name Changes**: Updates existing entries instead of creating duplicates when org matches (handles project name changes)
67+
68+
- **Enhanced Lossless Content Preservation**: Improved raw content storage and retrieval
69+
- **Storage**: Both GitHub and ADO adapters now store `raw_title`, `raw_body`, and `raw_format` in `source_tracking.source_metadata`
70+
- **Retrieval**: `_extract_raw_fields()` helper method extracts raw content from proposal data or source_metadata
71+
- **Usage**: Raw content is used when exporting from stored bundles to preserve 100% fidelity across adapters
72+
73+
### Documentation (0.25.1)
74+
75+
- **Azure DevOps Adapter Documentation**: New comprehensive adapter reference
76+
- `docs/adapters/azuredevops.md` - Complete Azure DevOps adapter documentation with examples, troubleshooting, and best practices
77+
- Includes lossless content preservation, cross-adapter sync, markdown support, and source tracking matching details
78+
79+
- **Enhanced DevOps Integration Guide**: Updated with cross-adapter sync scenarios
80+
- Added "Cross-Adapter Sync: Lossless Round-Trip Migration" section with examples and use cases
81+
- Documented GitHub → ADO migration workflow
82+
- Added multi-tool sync workflow examples
83+
- Included best practices for cross-adapter sync
84+
85+
- **Enhanced GitHub Adapter Documentation**: Updated with lossless content preservation
86+
- Added lossless content preservation section
87+
- Documented cross-adapter sync capabilities
88+
- Added cross-reference to Azure DevOps adapter
89+
90+
- **Enhanced Backlog Adapter Patterns**: Updated with lossless content preservation patterns
91+
- Added lossless content preservation implementation guidance
92+
- Documented `_extract_raw_fields()` helper method pattern
93+
- Added examples for storing and retrieving raw content
94+
95+
- **Updated Command Reference**: Enhanced `sync bridge` command documentation
96+
- Added "Cross-Adapter Sync: Lossless Round-Trip Migration" section
97+
- Included GitHub → ADO migration examples
98+
- Added multi-tool sync workflow examples
99+
100+
- **Updated Documentation Navigation**: Added DevOps & Backlog Sync section
101+
- Added "DevOps & Backlog Sync" section to Jekyll sidebar menu (`docs/_layouts/default.html`)
102+
- Added "DevOps & Backlog Sync" section to homepage (`docs/index.md`) with quick start examples
103+
- Added "Integrations Overview" to Reference section
104+
105+
- **Updated Integrations Overview**: Added Azure DevOps adapter reference
106+
- Added cross-reference to Azure DevOps adapter documentation
107+
108+
---
109+
12110
## [0.25.0] - 2026-01-15
13111

14112
### Added (0.25.0)

docs/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ SpecFact isn't just a technical tool—it's designed for **real-world agile/scru
3535
-**Brownfield-first** → Spec-Kit/OpenSpec excel at new features; SpecFact understands existing code
3636
-**Formal verification** → Spec-Kit/OpenSpec use LLM suggestions; SpecFact uses mathematical proof (CrossHair)
3737
-**Team collaboration** → Spec-Kit is single-user focused; SpecFact supports persona-based workflows for agile teams
38-
-**DevOps integration** 🆕 → **Bidirectional backlog sync** - Sync change proposals to GitHub Issues (and future: ADO, Linear, Jira) with automatic progress tracking
38+
-**DevOps integration** 🆕 → **Bidirectional backlog sync** - Sync change proposals to GitHub Issues and Azure DevOps Work Items (and future: Linear, Jira) with automatic progress tracking
3939
-**GitHub Actions integration** → Works seamlessly with your existing GitHub workflows
4040

4141
**Perfect together:**

docs/_layouts/default.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,22 @@ <h2 class="docs-sidebar-title">
150150
<li><a href="{{ '/competitive-analysis/' | relative_url }}">Competitive Analysis</a></li>
151151
</ul>
152152

153+
<p class="docs-nav-section">DevOps & Backlog Sync</p>
154+
<ul>
155+
<li><a href="{{ '/guides/devops-adapter-integration/' | relative_url }}">DevOps Integration Guide</a></li>
156+
<li><a href="{{ '/adapters/github/' | relative_url }}">GitHub Adapter</a></li>
157+
<li><a href="{{ '/adapters/azuredevops/' | relative_url }}">Azure DevOps Adapter</a></li>
158+
<li><a href="{{ '/adapters/backlog-adapter-patterns/' | relative_url }}">Backlog Adapter Patterns</a></li>
159+
</ul>
160+
153161
<p class="docs-nav-section">Reference</p>
154162
<ul>
155163
<li><a href="{{ '/reference/' | relative_url }}">Reference Documentation</a></li>
156164
<li><a href="{{ '/reference/commands/' | relative_url }}">Command Reference</a></li>
157165
<li><a href="{{ '/architecture/' | relative_url }}">Architecture</a></li>
158166
<li><a href="{{ '/modes/' | relative_url }}">Operational Modes</a></li>
159167
<li><a href="{{ '/directory-structure/' | relative_url }}">Directory Structure</a></li>
168+
<li><a href="{{ '/guides/integrations-overview/' | relative_url }}">Integrations Overview</a></li>
160169
</ul>
161170

162171
<p class="docs-nav-section">Examples</p>

0 commit comments

Comments
 (0)