Metricas del equipo
Issues Activos
24
Sprint 17
+6 nuevos hoy
Completados
17
este sprint
71% tasa
Pendientes Rollover
3
→ Sprint 18
migrados auto
Bugs Urgentes
2
P1 abiertos
asignados via webhook
Velocidad Media
21
story points/sprint
+14% vs S12
Velocidad por Sprint — Equipo CULTIVA (ultimos 6)
GraphQL query
Scope total
Completados
GraphQL:
cycles(filter:{team:{key:{eq:"CULTIVA"}},isCompleted:{eq:true}},last:6)
→ completedScopeCount, scopeCount
Burndown — Sprint 17
4 dias restantes
Real
Ideal
Proyectado
Issues creados — Plataforma v2.0
6 issues via linear.issueCreate()
Sprint 18 — Lanzamiento Plataforma v2.0
2026-06-23 → 2026-07-06 | 34 story points
CULTIVA-101
Backend
API de facturacion automatica (Stripe Billing)
8 pts
SR
CULTIVA-102
Backend
Integracion Stripe webhooks — pago, reembolso, disputa
5 pts
SR
CULTIVA-103
Infra
Pipeline CI/CD multi-entorno (staging / produccion)
8 pts
IM
CULTIVA-104
Frontend
Rediseno dashboard de clientes — nuevas metricas v2
5 pts
ML
CULTIVA-105
Frontend
Onboarding flow paso a paso — wizard 5 pasos
3 pts
ML
CULTIVA-106
QA
Suite de tests e2e con Playwright — flujos criticos
5 pts
AC
Sprint Rollover S17 → S18
3 issues migrados
Ciclo activo finaliza: 2026-06-20 |
Siguiente: Sprint 18
CULTIVA-089
Refactor auth service JWT
→ S18
CULTIVA-092
Migracion PostgreSQL 16
→ S18
CULTIVA-095
Docs API v2 con OpenAPI 3.1
→ S18
Script:
for issue of unfinished: issue.update({cycleId: next.id})
Webhook Auto-triage
Activo
✓
Webhook registrado — Team CULTIVA
resources: Issue, Comment, Project
09:42:03
CULTIVA-101 creado — asignado SR (P1+backend)
09:42:05
CULTIVA-102 creado — asignado SR (P1+backend)
09:42:07
Bug urgente CULTIVA-098 → S18 (auto-triage P1)
09:42:11
CULTIVA-089 estado: In Progress (webhook update)
09:42:15
Bug CULTIVA-100 → asignado SR, ciclo activo
Equipo — Carga actual
| Miembro | Issues | Carga |
|---|---|---|
|
SR
Santiago R.
|
5 |
|
|
ML
Marta L.
|
4 |
|
|
IM
Ivan M.
|
3 |
|
|
AC
Ana C.
|
2 |
|
Script de automatizacion generado
TypeScript + @linear/sdk
automation.ts
TypeScript
// CULTIVA IA — Linear API Automation Script // Sprint rollover + issue bulk-create + webhook auto-triage import { LinearClient } from "@linear/sdk"; import crypto from "crypto"; const linear = new LinearClient({ apiKey: process.env.LINEAR_API_KEY! }); const TEAM_KEY = "CULTIVA"; // 1. Obtener team ID const teams = await linear.teams(); const team = teams.nodes.find(t => t.key === TEAM_KEY)!; // 2. Sprint rollover S17 → S18 const activeCycle = (await linear.cycles({ filter: { team: { key: { eq: TEAM_KEY } }, isActive: { eq: true } } })).nodes[0]; const nextCycle = (await linear.cycles({ filter: { team: { key: { eq: TEAM_KEY } }, startsAt: { gt: activeCycle.endsAt } }, first: 1 })).nodes[0]; const unfinished = await linear.issues({ filter: { cycle: { id: { eq: activeCycle.id } }, state: { type: { in: ["unstarted", "started"] } } } }); for (const issue of unfinished.nodes) { await issue.update({ cycleId: nextCycle.id }); } console.log(`Migrados ${unfinished.nodes.length} issues → Sprint 18`); // 3. Crear issues Plataforma v2.0 const newIssues = [ { title: "API de facturacion automatica (Stripe Billing)", priority: 1, estimate: 8, tag: "backend" }, { title: "Integracion Stripe webhooks", priority: 1, estimate: 5, tag: "backend" }, { title: "Pipeline CI/CD multi-entorno", priority: 2, estimate: 8, tag: "infra" }, { title: "Rediseno dashboard de clientes", priority: 2, estimate: 5, tag: "frontend" }, { title: "Onboarding flow paso a paso", priority: 2, estimate: 3, tag: "frontend" }, { title: "Suite de tests e2e con Playwright", priority: 3, estimate: 5, tag: "qa" }, ]; for (const i of newIssues) { await linear.issueCreate({ teamId: team.id, title: i.title, priority: i.priority, estimate: i.estimate, cycleId: nextCycle.id, }); } // 4. Webhook auto-triage: bugs P1 → tech lead + ciclo activo app.post("/linear/webhook", (req, res) => { const sig = req.headers["linear-signature"] as string; if (!verifySignature(JSON.stringify(req.body), sig)) return res.sendStatus(401); const { action, type, data } = req.body; if (type === "Issue" && action === "create" && data.priority <= 1) { linear.issueUpdate(data.id, { assigneeId: "usr_sr001", cycleId: activeCycle.id }); } res.sendStatus(200); });
Log de ejecucion
$ npx ts-node automation.ts
ⓘ Conectando a Linear API... Autenticado como Santiago Reyes (sr@cultivaia.com)
ⓘ Team encontrado: CULTIVA (id: team_c8f3a1b2)
ⓘ Ciclo activo: Sprint 17 (2026-06-09 → 2026-06-20, id: cyc_s17)
ⓘ Siguiente ciclo: Sprint 18 (2026-06-23 → 2026-07-06, id: cyc_s18)
✓ 3 issues no finalizados migrados a Sprint 18 [CULTIVA-089, CULTIVA-092, CULTIVA-095]
✓ Issue creado: CULTIVA-101 — API de facturacion automatica (8pts, P1)
✓ Issue creado: CULTIVA-102 — Integracion Stripe webhooks (5pts, P1)
✓ Issue creado: CULTIVA-103 — Pipeline CI/CD multi-entorno (8pts, P2)
✓ Issue creado: CULTIVA-104 — Rediseno dashboard de clientes (5pts, P2)
✓ Issue creado: CULTIVA-105 — Onboarding flow paso a paso (3pts, P2)
✓ Issue creado: CULTIVA-106 — Suite de tests e2e con Playwright (5pts, P3)
ⓘ Registrando webhook en Linear...
✓ Webhook creado (id: wh_abc123) — url: https://api.cultivaia.com/linear/webhook
✓ Resources: Issue, Comment, Project — Team: CULTIVA
⚠ Rate limit: 1200/1400 req restantes (plan Pro). Agrega delays si superas 50 issues/min.
✓ Automatizacion completada en 1.84s — 6 issues creados, 3 migrados, 1 webhook activo