El contexto de Jira ahora es un caché, y la trazabilidad tiene evidencia
Este release resuelve el problema de raíz del árbol PBI (un espejo de Jira commiteado en
git), ratifica la escalera completa de artefactos de testing con un integrante nuevo, y
corrige el modelo de coverage con verificación en vivo contra Xray. Todo lo de abajo ya
está en main.
El PBI era una base de datos duplicada dentro de git
.context/PBI/ espejaba las Stories, Bugs y Tests de Jira y se commiteaba.
Dos sesiones que re-sincronizaban en momentos distintos producían commits en conflicto
del mismo texto generado, y un merge de 3 vías sobre un archivo regenerado no significa
nada. Jira ya ES la copia versionada y compartida.
| Tier | Fuente de verdad | ¿En git? | Se recupera con |
|---|---|---|---|
| [SYNC] — espejo de Jira | Jira | No (gitignorado) | bun run context:hydrate |
[COMMIT] — README, templates, test-specs/ |
El repo | Sí | git checkout |
| [LOCAL] — notas y evidencia de sesión | Nada durable | No | No se recupera: efímero por diseño |
Un solo árbol: Test → Story → Epic
Cada Test vive bajo la Story que lo cubre. Los Tests sin camino de trazabilidad caen
en epics/_orphans/tests/: una lista de trabajo visible, no una carpeta
más.
Epics de proceso QA separados
Los epics de artefactos QA llevan el label QA-Artifact y se filtran a
qa-artifacts/: nunca más un bucket de proceso disfrazado de módulo del
producto.
Cuatro altitudes de planificación, cada una con dueño real
La escalera quedó ratificada y ejecutable: cada artefacto tiene quién lo crea y cuándo. Y la familia de aceptación se completa con un integrante nuevo: el ATS.
| Artefacto | Altitud | Título | Quién lo produce |
|---|---|---|---|
| MTP — Master Test Plan | Producto | Epic QA Master Test Plan + archivo local |
/master-test-plan |
| FTP — Feature Test Plan | Feature | FTP: {EPIC}: {feature} |
/sprint-testing al cargar el contexto del Epic |
| STP — Sprint Test Plan | Sprint | STP: Sprint#{N}: {objetivo} |
/sprint-testing al abrir el sprint (planificador vivo) |
| STR — Sprint Test Results | Sprint | STR: Sprint#{N}: Regression Testing |
Cierre de sprint (sprint-testing o regression, el primero que llega) |
| ATP — Acceptance Test Plan | Story | ATP: {US_ID}: {título} |
Pre-sprint en el custom field (shift-left) → item en Stage 1 |
| ATS — Acceptance Test Set · nuevo | Story | ATS: {US_ID}: {título} |
Stage 1, obligatorio: agrupa TODOS los TCs de la Story |
| ATR — Acceptance Test Results | Story | ATR: {US_ID}: Story Testing |
Stage 1 (siempre con Test Environment) |
| TS — Test Set de feature | Feature | TS: {EPIC|módulo}: Validate {feature} |
Opcional: suites smoke / regression |
FTR y el prefijo PRC se recortaron: el FTR duplicaba al STR, y la Precondition existe como entidad de Xray sin necesidad de acrónimo de escalera.
El panel de coverage ignora al ATP: lo probamos en vivo
Verificación read-only contra una instancia Xray real, con tres Stories como experimento controlado. El resultado invalidó el modelo que la doctrina enseñaba:
| Story | Links «is tested by» | Coverage según Xray |
|---|---|---|
| BK-202 | Test Plan (16 tests) + Test Execution (16) | UNCOVERED · 0 tests |
| BK-337 | Plan + Exec + Test Set (22 tests) | OK · exactamente los 22 del Set |
| BK-18 | Plan + Exec + 12 Tests directos | OK · exactamente esos 12 |
Conclusión: los links del ATP y el ATR son trazabilidad administrativa. Lo que llena el panel es el link del ATS (o los links directos Test↔Story). Por eso el ATS es ahora obligatorio, y por eso el shift-left dejó de crear el Test Plan temprano: no compraba cobertura.
Cómo se resuelve dónde vive cada Test
TC → ATS → Story primaria: membership + link ATS→Story (llena el coverage panel) TC → ATP → Story placement en el árbol local; el panel NO lo cuenta TC → Story directo last resort válido (deja de ser anti-patrón) (nada) → epics/_orphans/tests/ · lista de trabajo de trazabilidad
Dos capas, nunca confundidas
-
Links de Jira: contenedor→Story (
is tested by), visibles al REST. - Asociaciones de Xray: membership TC ∈ ATS/ATP/ATR, solo GraphQL.
- En jira-native no hay capa Xray: la membership se expresa como links TC→ATS.
Set-first en Stage 1
- ① ATP item creado desde el field del shift-left
- ② ATS con todos los TCs + link a la Story
- ③ listas de Plan y Exec derivadas de la membership del ATS
- ④ ATR siempre con Test Environment (
active_env)
Shift-left más liviano, sprint más completo
Pre-sprint (shift-left)
- ACs refinados + preguntas para producto
- El ATP nace en el custom field (cero artefactos gastados en Stories que mueren en backlog)
-
Subtask
[QA] Shift-Left Review: el board ve el trabajo pre-sprint, y las anotaciones largas viven ahí
In-sprint
- STP vivo desde el primer ticket: su descripción lleva el plan del sprint (un solo escritor, read-first) y sus comentarios el progreso append-only, uno por issue cerrado. Es el estado de sprint que ve el equipo — si el log y el ATR de una Story se contradicen, manda el ATR
- Bug retest (xray): 1 Test de repro creado y ejecutado en-sprint
- STR al cierre como recap del sprint
El CLI y el sync ahora hablan el mismo modelo
CLI de Xray
-
link create: el write-path de links que faltaba (coverage incluida) -
plan add-set/exec add-set: cascade desde la membership del ATS -
set sync+plan get+ preconditions +test update-step exec createavisa si falta--environmentbun xray test enrich: trae al caché lo que el REST no ve
Sync y descubrimiento
- El pull distingue altitudes (un STP linkeado ya no se archiva como ATP de la Story)
- Cascade de placement integrada con la enrichment GraphQL
-
Un
pullsin filtros barre además los cuatro epics de proceso QA: FTP / STP / STR, Test Sets y Preconditions bajan atest-plans/ytest-executions/con el acrónimo del título en el nombre de archivo (ADR-0001) bun run tests:map: mapa HTML de cobertura, gaps primero-
/jira-components: components = módulos reales de la app, plan aprobado por humano
Tres tandas de trabajo, todo verificado
Cada decisión quedó registrada con su porqué en los commits de main. Las
presentaciones por skill (en español) están en /decks/.