Importar desde Linear
Traé un team de Linear a Orkestra como proyecto, preservando issues, cycles (como sprints), workflow states, labels, prioridades y comentarios. Los sub-issues se importan como issues independientes con un puntero al padre via custom field.
Qué formato espera Orkestra
Un JSON con el shape de la GraphQL API de Linear:
{
"teams": [{ "id", "key", "name" }],
"workflowStates": [{ "id", "name", "type", "team": { "id" } }],
"users": [{ "id", "email", "name" }],
"cycles": [{ "id", "number", "name", "startsAt", "endsAt" }],
"projects": [{ "id", "name" }],
"issues": [{ "id", "identifier", "title", "state", "assignee", "comments", "labels", "attachments", ... }]
}
Las conexiones GraphQL pueden venir como array plano o como { nodes: [...] }.
Orkestra las desempaca automáticamente.
Cómo generar el export
Linear no tiene un botón "exportar a JSON" nativo. Los dos caminos probados:
1) GraphQL API (recomendado)
- Generá un API key desde Settings → API en Linear.
- Usá Apollo Sandbox o un cliente GraphQL (Postman, Insomnia) apuntando a
https://api.linear.app/graphql. - Corré queries separadas por entidad (
teams,workflowStates,users,cycles,projects,issues). Para issues, paginá con cursor. - Combiná los resultados en un JSON único con las claves esperadas.
2) Linear CLI + script
Linear mantiene un SDK de TypeScript. Un script de ~50 líneas recorre el team, issues, cycles y escupe el JSON directamente. Escribinos si querés que te compartamos nuestro script base.
Qué se importa
- Teams → el primer team del array se convierte en un Project de Orkestra. Los demás se ignoran con warning.
- Issues → Tasks. La prioridad de Linear (0-4) mapea a URGENT/HIGH/MEDIUM/LOW (0 = sin prioridad → MEDIUM).
- Identifier (ej.
ORK-123) → custom fieldlinear_id. - WorkflowStates → WorkflowStates. Los de tipo
completedquedan marcados como finales. - Cycles → Sprints. Estado inferido por fechas:
endsAt < hoy→ COMPLETED, en curso → ACTIVE, futuro → PLANNED. - Linear Projects → custom field
linear_project_idpor issue (Orkestra no tiene "proyectos dentro de proyectos"). - Labels → labels en la task.
- Assignee → usuario de la org matcheado por email.
- Sub-issues → se importan como issues independientes, con custom field
linear_parent_idapuntando al ID del padre en Linear. Orkestra no arma la jerarquía padre-hijo nativa porque el modelo de Task no tieneparentTaskId. - Comments → Comments. Si el autor no está en la org, se prefija
[Imported from Linear — originally by X]. - Attachments → ExternalLink (título + URL). No descargamos binarios.
Mapeo de usuarios
Igual que Jira: match por email, missing users en la preview con toggle de invitar. Ver la guía general para el detalle del flujo.
Qué queda fuera de scope
- Múltiples teams en el mismo JSON — solo se importa el primero.
- Jerarquía padre-hijo de sub-issues — el puntero queda en
linear_parent_id, pero no se crea una relación nativa ni una subtask completed/incompleted. - Relaciones entre issues — "blocks", "blocked by", "relates to", "duplicates" no se importan.
- Cycle goals y milestones — fuera de scope.
- Custom fields de Linear (estimate, custom views, etc.) — más allá de los 3 de trazabilidad, se ignoran.
- Custom emojis — no se importan. Si un comentario los usaba, quedan como texto
:emoji:. - Attachments binarios — solo título y URL.
- Workflow automations / triggers — fuera de scope.
- Integrations de Linear (Slack, GitHub sync bidireccional, Figma) — no se migran; hay que reconfigurarlas en Orkestra.
Warnings vs ignores silenciosos
La preview avisa por: múltiples teams, usuarios faltantes, archivo grande. Todo lo demás de la lista anterior se ignora en silencio.
Pasos en Orkestra
- Ir a Ajustes → Importar → Linear.
- Subir el JSON. Esperá la preview.
- Revisar: conteos, estados detectados, missing users, warnings.
- (Opcional) Override del mapeo de estados (renombrar, marcar como completado).
- (Opcional) Activar invitaciones.
- Ejecutar.