[meta] Clarify future of project file import/export, admin token requirement, and Congregate ADO migrations
## Summary
The purpose of this issue is to move an ongoing Slack discussion into a single, trackable place and involve Product in clarifying:
- The **future of project file-based export/import** in the context of **Offline Transfer (OT)** and **Direct Transfer (DT)**.
- Whether the **instance admin token requirement** for project file imports is still appropriate, given newer mechanisms like **placeholder user mapping / UCM** and **Enterprise Users**.
- How this impacts **Congregate ADO → GitLab** migrations that currently depend on file-based export/import.
[Original Slack thread](https://gitlab.slack.com/archives/C04RDL3MEH5/p1772535449281139) (expires 2026-06-05).
- Participants in the original discussion (non-exhaustive):
- **Fabian Koh** – PS perspective and customer/partner use cases. @fabiankoh
- **Petar Prokić** – Congregate and ADO migration flows. @pprokic
- **Sam Word** – DRI for Offline Transfer, import team perspective. @SamWord
- **Rodrigo Tomonari** – feasibility and effort for UCM in file imports, short-term workarounds. @rodrigo.tomonari
- **Michael Leopard** – Congregate implementation details and scalability of workarounds. @leopardm
- **Thiago Figueiro** – Import group EM, prioritization and alignment with group strategy. @thiagocsf
## Background
Key points from the Slack thread:
- **Current situation**:
- Project file-based export/import APIs require an **instance admin token** to ensure correct mapping of user contributions.
- This applies to both **GitLab.com** and **self-managed** instances.
- This requirement is a blocker/complication for some **SaaS migrations**, which must currently be run by GitLab internal PS due to security.
- **Newer approaches**:
- **Direct Transfer (DT)** and other importers (e.g., Bitbucket/GitHub importers) use **placeholder users** and **user consent mapping (UCM)**, allowing:
- Group/instance Owners (not just admins) to perform user mappings.
- Mapping to real users on SaaS while preserving security through a consent flow.
- **Enterprise Users** and verified domains further constrain mappings in a safe way.
- **Strategic direction**:
- File-based project export/import is **not on the strategic roadmap** and is expected to be **deprecated**.
- The Import team is focusing on **Offline Transfer (OT)** (built on DT’s architecture) as the long‑term “file-based” solution.
- There is limited capacity to:
- Make OT **backward compatible** with the current project export format.
- Implement UCM and related flows in the **legacy file-based import/export** path.
- **Congregate and ADO**:
- **Congregate’s ADO → GitLab migrations** currently:
- Produce **custom project exports** in the GitLab project export format, and
- Use the **file-based import/export APIs** as the execution mechanism.
- Partners see increasing demand for ADO take-outs to GitLab SaaS, but:
- The **admin token requirement on GitLab.com** is a major friction point.
- If OT deprecates file-based import/export and is **not backward compatible**, Congregate will need to **refactor ADO code** to target OT/DT schemas instead of the legacy export format.
## Problem
1. **Admin token requirement for project file import**
- For GitLab.com, it is **not feasible** for customers/partners to obtain an instance admin token.
- This limits who can run large-scale migrations, forcing more work through GitLab PS.
- At the same time, DT and other importers already allow **non-admin** owners to perform user mappings using placeholder users and UCM, which appears to relax the original security motivation for the admin-only constraint.
2. **Congregate dependency on legacy file-based import/export**
- Congregate’s ADO migrations rely on current **project export/import** behavior.
- Planned **deprecation** of file-based import/export and potential **schema differences** in OT/DT would require Congregate and similar tooling to pivot to new schemas and APIs.
- There’s an open question about how much **backward compatibility tooling** (if any) the Import team should provide versus leaving this entirely to external orchestrators like Congregate.
3. **Short-term vs long-term trade-offs**
- Implementing **UCM in project file imports** (and/or relaxing admin requirements) could unblock important customer scenarios in the short term, but:
- This appears to be **non-trivial work**, closer in effort to OT-scale changes.
- It may **compete directly** with OT roadmap capacity.
- Alternatively, asking PS/partners to:
- Continue using workarounds (e.g., modifying `project_members.ndjson` at scale via Congregate scripts), or
- Wait for OT and then refactor everything to new schemas, could leave a gap for **current ADO → GitLab.com migrations**.
## Options discussed so far
From Slack, roughly grouped:
1. **Stay the course: focus on OT/DT, minimal changes to legacy file-based**
- Treat file-based export/import as effectively **legacy**, with no substantial new development.
- Invest all available capacity into OT (and DT), making them the primary path for:
- Self-managed → GitLab.com
- Self-managed → self-managed
- Expect Congregate (and other tools) to:
- **Pivot to OT/DT schemas** in the future, and
- Use legacy file-based flows **as-is** in the interim.
2. **OT backward compatibility tool or behavior**
- Support **import of existing project export archives** via OT, so tools like Congregate can simply:
- Generate existing project exports, and
- Ask OT to import them.
- Current view from engineering:
- Making OT backward compatible in this way is **unlikely in the near term**, due to capacity.
- OT was intentionally **decoupled from Congregate** and not designed around an external orchestrator.
3. **Relax admin requirement / introduce UCM in project file imports**
- Revisit whether an instance **admin token** is still strictly required for project file imports, given:
- DT, BB, GH importers use **placeholder user mapping and UCM** without an admin token.
- Enterprise Users + verified domains further mitigate mapping risks.
- Possible variants:
- Implement **UCM for project file imports**, making user-mapping behavior consistent with DT.
- Add special handling for **GitLab.com** (where admin tokens are impossible and `public_email` may not be set) to:
- Allow mapping via Enterprise Users API and verified domains.
- This is considered a **high-effort change**, closer in scope to OT itself.
4. **Tooling/workaround via Congregate**
- Continue to treat legacy file-based export/import as-is, but:
- Enhance Congregate (or similar tools) to **mass-edit project archives**, e.g.:
- Add missing emails to `project_members.ndjson` before import, when public emails are not available on the source.
- This is known to **work technically**, but is:
- Operationally messy, especially at scale (hundreds of exports),
- Another layer of “glue” that PS/partners must maintain.
## Questions for Product
To move forward, we need Product input on the following:
1. **Admin requirement and security model**
- Given the current **placeholder user + UCM + Enterprise Users** model in DT and other importers:
- Do we still consider the **instance admin token requirement** for project file imports on GitLab.com/self-managed to be necessary for security?
- If not, what level of change (e.g., introducing UCM to file imports, relaxing admin only for certain flows, GitLab.com exceptions) would be acceptable on the roadmap?
2. **Role of project file import/export vs OT/DT**
- Do we see project file-based import/export as:
- Strictly **legacy and to-be-deprecated**, with no new investment, or
- A candidate for **targeted improvements** (e.g., UCM, reduced admin requirement) to support interim use cases?
- How strongly do we want to steer customers and partners toward **DT/OT-only flows** in the near to mid term?
3. **OT backward compatibility and external orchestrators**
- Should the Import team:
- Consider any **backward compatibility tooling** (scripts or features) to help with existing export archives, or
- Explicitly consider this **out of scope**, leaving it entirely to PS/partners (e.g., Congregate) to adapt?
- Is there a **business justification** (e.g., size of ADO → GitLab.com opportunity, PS revenue, strategic migrations) that would warrant:
- Either investing in OT backward compatibility, or
- Investing in UCM/relaxed admin requirements for legacy file imports?
4. **Short-term guidance for ADO → GitLab.com migrations**
- For the next **6–12 months**, what should we recommend to:
- Partners and PS teams doing **ADO → GitLab.com** take-outs?
- Specifically:
- Should they continue to rely on **file-based export/import + workaround tooling** (e.g., editing `project_members.ndjson` at scale)?
- Should we encourage **early adoption of DT/OT** as they become available for these flows, and plan Congregate refactors accordingly?
- Are there any **“must-have” changes** (e.g., loosening admin requirements) that we should prioritize to unblock these migrations?
## Proposed next steps
- **1. Confirm product DRI and label the issue**
- Tag the Product Manager responsible for **Import/Offline Transfer** to own the decision and follow-up.
- @derekferguson @sranasinghe
- **2. Product decision(s)**
- Decide on:
- Whether to **pursue any change** to admin requirements / UCM in file imports.
- Whether to **invest in OT backward compatibility tooling**.
- What **short- to mid-term guidance** we officially provide for ADO → GitLab.com migrations using Congregate.
- **3. Follow-up implementation issues**
- Depending on the outcome, write issues for:
- Any Import team engineering work (OT, DT, or file import changes).
- Any required updates to Congregate / migration tooling.
- **Documentation updates**:
- Project export/import docs
https://docs.gitlab.com/api/project_import_export/
https://docs.gitlab.com/user/project/settings/import_export/#when-migrating-from-gitlab-self-managed-to-gitlabcom
- Import mapping and Enterprise Users docs
https://docs.gitlab.com/user/import/mapping/
https://docs.gitlab.com/user/enterprise_user/
- OT/DT/version support docs
https://docs.gitlab.com/user/group/import/direct_transfer_migrations/#versions
## References
- Slack thread: https://gitlab.slack.com/archives/C04RDL3MEH5/p1772535449281139
- Congregate ADO migration implementation and prior discussion:
- https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/issues/1329#note_3127387498
- https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/tree/master/congregate/migration/ado?ref_type=heads
- Offline Transfer / Congregate decoupling note:
- https://gitlab.com/gitlab-com/content-sites/handbook/-/merge_requests/12056#note_2417309386
issue