Skip to content

Commit 52808fd

Browse files
committed
chore(proposals): reconcile lifecycle folders and slice scope
1 parent 8173400 commit 52808fd

7 files changed

Lines changed: 839 additions & 4 deletions

docs/delendai/proposals/INDEX.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ any change will be detected by `bun run lint:proposals` and rejected.
77

88
| id | kind | path |
99
| --- | --- | --- |
10+
| `f00018` | `feat` | [`ready/feats/f00018-sqlite-durable-state-contratos-runtime-neutral-snapshots-inmutables-migraciones-shadow-mode-y-activacion-cas.md`](ready/feats/f00018-sqlite-durable-state-contratos-runtime-neutral-snapshots-inmutables-migraciones-shadow-mode-y-activacion-cas.md) |
1011

1112
## Bloqueadas
1213

Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
---
2+
id: x00045
3+
kind: refactor
4+
title: "x00045: terminar x00041 — quitar Delendai de la CI principal y de los scripts del producto"
5+
status: done
6+
priority: P0
7+
globalGate: type
8+
shippedIn:
9+
- 4776c2d
10+
why: |
11+
x00041 cerró prematuramente: el plugin SÍ se movió de
12+
`packages/plugins/delendai_tanit/` a `integrations/delendai/`
13+
(S1 ✅), y existe el workflow opcional `integration-delendai.yml`
14+
(S4 ✅). Pero la CI principal (`validate.yml`) y el `package.json`
15+
raíz siguen tratando al plugin como si fuera parte del producto:
16+
17+
1. `validate.yml` aún tiene `env.DELENDAI_SHA`, los pasos
18+
`Materialize delendai sibling`, `Build delendai core` y
19+
`Link jsonc-parser into the file: package store`. Si Delendai
20+
rompe, Tanit se rompe — exactamente el bug que x00041 quería
21+
cerrar.
22+
2. `validate.yml` exporta `TANIT_SKIP_MULTI_SERVICE_ISOLATION=1`
23+
para tapar el fallo del E2E de x00028 S4 — el E2E existe
24+
precisamente porque las regresiones multi-servicio no se
25+
cazarían sólo con tests unitarios. Dejarlo skip permanente
26+
en CI es una bomba.
27+
3. `packages/contracts/constants/core/delendai-sha.constant.ts`
28+
sigue exportando un SHA de Delendai como constante del core
29+
de Tanit — el core de Tanit no tiene nada que decir sobre
30+
qué commit de Delendai existe.
31+
4. `package.json#scripts.typecheck:plugin` apunta a
32+
`packages/plugins/delendai_tanit`, una ruta que NO existe
33+
desde x00041 S1. Si alguien lo corre, falla con ENOENT.
34+
`test:plugin` parece tener el mismo problema.
35+
5. `docs/delendai/AGENT-BOOTSTRAP.md §3.7` aún describe la
36+
antigua ruta `packages/plugins/delendai_tanit/` en algunos
37+
ejemplos internos (los puntos de migración quedaron a medias).
38+
39+
Resultado: la "frontera" que x00041 quería levantar entre Tanit y
40+
Delendai está físicamente movida (carpeta) pero lógicamente
41+
perforada (CI y scripts siguen acoplados).
42+
nonGoals:
43+
- Tocar el código del plugin (sigue siendo un cliente válido de
44+
`@delendai/core/public`; ningún tool cambia).
45+
- Cambiar `integration-delendai.yml` — ya está bien.
46+
- Reescribir el contrato de `@delendai/core` (es responsabilidad
47+
de Delendai).
48+
- Migrar al publicado npm (eso es p00007; sigue `done` con la
49+
forma actual).
50+
globalGate: type
51+
acceptance:
52+
- `validate.yml` empieza con `actions/checkout` + `setup-bun` +
53+
`bun install --frozen-lockfile`. Sin pasos de Delendai.
54+
- `validate.yml` no exporta `DELENDAI_SHA` ni `TANIT_SKIP_MULTI_SERVICE_ISOLATION`.
55+
- `packages/contracts/constants/core/delendai-sha.constant.ts` borrado.
56+
- Si algún código del core referenciaba el SHA, ese código se ha
57+
actualizado para no depender de él — `bun run lint:contracts`
58+
verde.
59+
- `package.json` raíz ya no tiene `typecheck:plugin` ni `test:plugin`.
60+
- `package.json#files` no menciona `packages/plugins/` ni
61+
`integrations/` (la integración es opcional y se valida aparte).
62+
- `AGENT-BOOTSTRAP.md §3.7` describe la nueva frontera:
63+
"el plugin vive en integrations/delendai/, no es parte del
64+
producto" y da los paths canónicos.
65+
- `bun run validate` verde localmente.
66+
- El workflow `integration-delendai.yml` sigue siendo válido y
67+
autocontenido — la separación se demuestra por reducción, no por
68+
añadido.
69+
slices:
70+
- sliceId: S1
71+
title: "refactor(ci): validate.yml sin Delendai — quitar DELENDAI_SHA, Materialize, Build, Link, TANIT_SKIP"
72+
files:
73+
- .github/workflows/validate.yml
74+
gate: type
75+
dependsOn: []
76+
acceptance:
77+
- Workflow empieza con `actions/checkout@v7` + `setup-bun@v2` + `bun install --frozen-lockfile`.
78+
- `env.DELENDAI_SHA` borrado.
79+
- Pasos `Materialize delendai sibling`, `Build delendai core`,
80+
`Link jsonc-parser` borrados.
81+
- Step `Validate` ya no exporta `TANIT_SKIP_MULTI_SERVICE_ISOLATION`.
82+
- Comentario breve que explica por qué Tanit NO depende de
83+
Delendai en CI.
84+
- sliceId: S2
85+
title: "refactor(core): eliminar delendai-sha.constant.ts y limpiar imports huérfanos"
86+
files:
87+
- packages/contracts/constants/core/delendai-sha.constant.ts
88+
- packages/contracts/constants/integrations/delendai-report-version.constant.ts
89+
gate: type
90+
dependsOn: [S1]
91+
acceptance:
92+
- Fichero borrado.
93+
- `bun run lint:contracts` verde.
94+
- Si algún código del core lo importaba (comprobado con grep),
95+
ese import se elimina y, si la dependencia era importante, se
96+
reescribe sin el SHA (con referencia a `integration-delendai.yml`
97+
o a la documentación).
98+
- sliceId: S3
99+
title: "refactor(root): quitar scripts obsoletos typecheck:plugin y test:plugin"
100+
files:
101+
- package.json
102+
gate: type
103+
dependsOn: [S1]
104+
acceptance:
105+
- `typecheck:plugin` borrado.
106+
- `test:plugin` borrado.
107+
- `bun run lint:command-coverage` sigue verde (la cobertura de
108+
comandos del producto no depende de esos scripts).
109+
- sliceId: S4
110+
title: "refactor(pkg): package.json#files no menciona packages/plugins/ ni integrations/"
111+
files:
112+
- package.json
113+
gate: type
114+
dependsOn: [S3]
115+
acceptance:
116+
- `files` lista sólo rutas del producto (`bin/`, `packages/`,
117+
`scripts/`, `docs/...`, configs raíz, README, LICENSE).
118+
- `bun run validate:package` verde.
119+
- sliceId: S5
120+
title: "docs: AGENT-BOOTSTRAP §3.7 refleja integrations/delendai/ como integración externa"
121+
files:
122+
- docs/delendai/AGENT-BOOTSTRAP.md
123+
gate: type
124+
dependsOn: [S1, S2, S3, S4]
125+
acceptance:
126+
- §3.7 declara explícitamente "el plugin vive en
127+
integrations/delendai/, no es parte del producto".
128+
- Paths canónicos actualizados.
129+
- El "qué NO cambia" sigue siendo válido (file: delendai,
130+
mientras no haya release).
131+
---
132+
133+
# x00045 — Terminar x00041
134+
135+
## Contexto
136+
137+
x00041 (status: done) hizo la mitad del trabajo: movió la carpeta
138+
del plugin y creó el workflow opcional de integración. Pero el
139+
contrato de la propuesta era **cinco** puntos de acoplamiento a
140+
eliminar, y los pasos S2 y S3 quedaron a medias:
141+
142+
| Punto | x00041 esperado | Estado real |
143+
|-------|------------------|-------------|
144+
| `workspaces` raíz | sin plugin |`workspaces: []` |
145+
| `files` del tarball | sin plugin | ❓ por verificar (S4) |
146+
| `bun run typecheck` | sin sección plugin |`typecheck:plugin` sigue ahí |
147+
| CI principal | sin clone/build de Delendai | ❌ sigue clonando, compilando y enlazando |
148+
| `delendai-sha.constant.ts` | borrado | ❌ sigue existiendo |
149+
150+
## Decisión
151+
152+
No reabro x00041 (el frontmatter `shippedIn:` documenta los SHAs
153+
de S1/S4 y su cierre sigue siendo verdadero en lo que cubría).
154+
Lo que falta es **una propuesta nueva, x00045**, que recoge las
155+
4 acciones restantes como sus propios slices. Esto mantiene
156+
el contrato de x00032 (lint:proposals garantiza que "done"
157+
significa "todo cerrado") sin reescribir el archivo que ya está
158+
en `done/`.
159+
160+
## Diseño de los slices
161+
162+
### S1 — `validate.yml` sin Delendai
163+
164+
El cambio es **mecánico pero verificado**:
165+
166+
````yaml
167+
on:
168+
push:
169+
branches: [main, develop]
170+
pull_request:
171+
branches: [main, develop]
172+
173+
jobs:
174+
validate:
175+
runs-on: ubuntu-latest
176+
steps:
177+
- uses: actions/checkout@v7
178+
with:
179+
fetch-depth: 0
180+
- uses: oven-sh/setup-bun@v2
181+
with:
182+
bun-version: 1.3.14
183+
- run: bun install --frozen-lockfile
184+
- run: bun run validate
185+
- run: bun run security:audit
186+
- run: bun run validate:package
187+
````
188+
189+
El `fetch-depth: 0` se mantiene: x00032 S1 lo necesita para
190+
verificar `shippedIn:` reales. Sin los pasos de Delendai,
191+
`bun install --frozen-lockfile` resuelve sólo el producto
192+
porque `workspaces: []` y `bun.lock` no contienen `@delendai/core`.
193+
194+
El comentario explicativo pasa a ser UNA sola línea al inicio del
195+
job: "Tanit valida su propio producto. La integración opcional con
196+
Delendai vive en integration-delendai.yml."
197+
198+
### S2 — Borrar `delendai-sha.constant.ts`
199+
200+
El grep de hoy (`grep -rln 'delendai-sha\|DELENDAI_SHA' packages/`)
201+
sólo encuentra la declaración. No hay imports del core que la
202+
usen — el SHA sólo se leía desde `validate.yml` y desde el
203+
comentario del propio fichero. Borrar el fichero es seguro.
204+
205+
`delendai-report-version.constant.ts` (en `integrations/`) NO se
206+
toca: es del namespace de integraciones, no del core, y describe
207+
el formato del report que produce el plugin.
208+
209+
### S3 — Quitar `typecheck:plugin` y `test:plugin`
210+
211+
`typecheck:plugin` apunta a `packages/plugins/delendai_tanit`,
212+
ruta que no existe desde x00041 S1. Si alguien lo ejecuta, falla
213+
con ENOENT. `test:plugin` apunta a `bunx vitest run --project plugin`,
214+
que tampoco tiene proyecto en el `vitest.config.ts` raíz (el plugin
215+
tiene su propio `vitest.config.ts`).
216+
217+
La forma correcta es: el plugin tiene su propio `package.json#scripts.validate`
218+
(`typecheck && test`), y `integration-delendai.yml` ya lo invoca. El
219+
producto Tanit no necesita un atajo raíz para esa integración.
220+
221+
Si en algún momento alguien quiere un atajo en raíz, el nombre
222+
correcto sería `validate:integration:delendai`, no `typecheck:plugin`.
223+
224+
### S4 — `files` limpio
225+
226+
Verificar `package.json#files`. Hoy declara `bin/`, `packages/`,
227+
`scripts/`, docs, configs raíz. No menciona `integrations/` ni
228+
`packages/plugins/` (este último ni siquiera existe). El slice
229+
S4 sólo verifica que el campo no necesite retoques; si los
230+
necesita, los aplica.
231+
232+
### S5 — AGENT-BOOTSTRAP §3.7
233+
234+
§3.7 ya está actualizado al path `../delendai/...` y a la forma
235+
local `bun run host-server.script.ts`. Lo que falta es la
236+
declaración explícita "el plugin vive en `integrations/delendai/`,
237+
no es parte del producto". Es una nota corta, no un reescrito.
238+
239+
## Lo que NO cambia
240+
241+
- `integration-delendai.yml` — sigue válido.
242+
- `delendai.config.json#plugins.tanit.path` apunta a
243+
`integrations/delendai/src/index.ts` (o lo hará tras verificar).
244+
- `@delendai/core` sigue siendo dependencia `file:` del plugin.
245+
- El producto no se reorganiza; sólo se elimina el acoplamiento
246+
con Delendai de su CI y de sus scripts.
247+
248+
## Por qué esto va antes que el resto de P1
249+
250+
El `validate.yml` está verde en local y rojo en CI por el `bun install`
251+
del runner. Eso bloquea merges y pide una pasada de integración
252+
verifier tras cada push a develop. Cualquier propuesta nueva que
253+
toque `validate.yml` o `package.json` colisiona con este estado
254+
rojo hasta que se cierre. Terminar x00041 (es decir, ejecutar
255+
x00045) deja el camino crítico verde y desbloquea todo lo demás.

0 commit comments

Comments
 (0)