Synchronizing key requirements between on-prem and cloud Jir

We run a hybrid setup where requirements are authored in Jira Data Center and then selectively pushed to Jira Cloud for external stakeholders. The challenge was maintaining stable requirement IDs while syncing only core fields-summary, description, priority, and custom requirement type. Tests and defects stay local in DC, but we expose aggregated status (pass/fail counts, open defect tallies) to the cloud side.

Built a scheduled job that queries DC requirements with a “Sync to Cloud” flag, maps them to cloud issues via a stable external ID custom field, and updates or creates issues using the REST API. The sync preserves traceability links by storing DC requirement keys in cloud and vice versa. Status rollups are computed in DC and pushed as read-only custom fields to cloud.

This approach keeps our internal test execution and defect workflows private while giving external teams visibility into requirement health. Curious if others have tackled similar hybrid synchronization scenarios and how you handle conflict resolution when both sides change the same requirement.

Currently we push snapshot counts-total tests, passed, failed, blocked, open defects. Cloud side has custom number fields that update with each sync. For trends, we log each sync event to a separate audit table in DC and expose a REST endpoint that cloud dashboards query directly. That way historical data stays in DC but is accessible on demand without bloating cloud storage.

Good question. We made the external ID field required and indexed in cloud, and the sync job does a lookup before creating new issues. If a match exists, it updates; if not, it creates with the DC key as the external ID. The field is also read-only via workflow property so users can’t edit it manually. This prevents duplicates and keeps the mapping stable.

Interesting setup. We considered a similar pattern but worried about ID collisions if someone manually creates an issue in cloud with the same key. How do you ensure the external ID field stays unique on the cloud side? Did you set up a custom validator or rely on API-level checks during sync?