External tracker synchronization¶
ExternalTrackerSync.cs demonstrates a simple reconciliation strategy for mirroring an external issue into Okatana.
The integration puts a stable marker such as [external:GH-1842] in the title, searches for that marker, creates only when no match exists, and otherwise updates the existing ticket. This is safer than using blind create retries after timeouts.
For a production synchronizer, store the mapping between the external object ID and Okatana ULID in your integration database as soon as creation succeeds. On startup, reconcile missing mappings by searching marker text. Define which system owns each field to avoid update loops. For example, the external tracker might own title/description while Okatana owns board position and assignees.
Use independent retry logic for reads and explicit conflict handling for writes. A 422 relation failure is not a reason to repeat the same request unchanged.