Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/known-limitations.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Medido el 2026-09-20 con `@beyondnet/evolith-cli@1.3.2` en un contenedor limpio:

## El Tracker le envió un repositorio al Core, y el Core respondió 500

Medido el 2026-09-20 contra la imagen del Core construida desde `main@142b8324`, la que corre el entorno UAT: la llamada de conformidad del repositorio del Tracker (`POST /products/{id}/evaluate-architecture` → Core `POST /api/v1/evaluate` con el repositorio inline, 150 ficheros, ~1 MB) volvió como `500 INTERNAL_ERROR "An unexpected error occurred"`, sin una sola línea de log en el Core. Reproducido en local sobre la misma imagen: 14 ficheros (99,8 KB) → `200`, 15 ficheros (101,6 KB) → `500`. El techo de 100 KB por omisión de Express para JSON, nunca subido, nunca nombrado. Arreglado como GT-715 —un techo configurable (`EVOLITH_MAX_BODY_BYTES`, 2 MiB por defecto), un `413 PAYLOAD_TOO_LARGE` que dice los dos tamaños y una línea de log por cada 5xx enmascarado—, pero la imagen que corre el UAT es anterior al arreglo hasta que `main` se promueva y se redespliegue. La captura del Tracker en la portada es, por eso, la compuerta de fase alrededor de una iniciativa, que nunca pasa por este camino; no es el veredicto sobre el repositorio.
Medido el 2026-09-20 contra la imagen del Core construida desde `main@142b8324`, la que corre el entorno UAT: la llamada de conformidad del repositorio del Tracker (`POST /products/{id}/evaluate-architecture` → Core `POST /api/v1/evaluate` con el repositorio inline, 150 ficheros, ~1 MB) volvió como `500 INTERNAL_ERROR "An unexpected error occurred"`, sin una sola línea de log en el Core. Reproducido en local sobre la misma imagen: 14 ficheros (99,8 KB) → `200`, 15 ficheros (101,6 KB) → `500`. El techo de 100 KB por omisión de Express para JSON, nunca subido, nunca nombrado. Arreglado como GT-715 —un techo configurable (`EVOLITH_MAX_BODY_BYTES`, 2 MiB por defecto), un `413 PAYLOAD_TOO_LARGE` que dice los dos tamaños y una línea de log por cada 5xx enmascarado—, y promovido el mismo día: Promovido en #778 (`9c5deedf`) y redesplegado por el job `Deploy UAT (Coolify)` de la corrida 35490911533 el 2026-09-20; medido justo después: la misma llamada `evaluate-architecture` responde `200`, `provenance: core`, `status: COMPLETED`, `resultDecision: FAILED` — un veredicto real sobre 150 ficheros (gates f1–f5 fallidos por artefactos de fase ausentes), 174 ms en el Core. La captura del Tracker en la portada es la compuerta de fase alrededor de una iniciativa —tomada antes del redespliegue, y conservada porque enseña lo que la CLI no tiene—, no el veredicto sobre el repositorio, que es la medición de arriba.

## Lo que no está construido

Expand Down
2 changes: 1 addition & 1 deletion docs/known-limitations.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Measured on 2026-09-20 with `@beyondnet/evolith-cli@1.3.2` in a clean container:

## The Tracker sent the Core a repository, and the Core answered 500

Measured on 2026-09-20 against the Core image built from `main@142b8324`, the one the UAT environment runs: the Tracker's repository-conformance call (`POST /products/{id}/evaluate-architecture` → Core `POST /api/v1/evaluate` with the repository inline, 150 files, ~1 MB) came back `500 INTERNAL_ERROR "An unexpected error occurred"`, with no log line on the Core. Reproduced locally on the same image: 14 files (99.8 KB) → `200`, 15 files (101.6 KB) → `500`. Express's default 100 KB JSON ceiling, never raised, never named. Fixed as GT-715 — a configurable ceiling (`EVOLITH_MAX_BODY_BYTES`, 2 MiB by default), a `413 PAYLOAD_TOO_LARGE` that states both sizes, and a log line for every masked 5xx — but the image the UAT runs predates the fix until `main` is promoted and redeployed. The Tracker screenshot on the front page is therefore the phase gate around an initiative, which never touches this path; it is not the repository verdict.
Measured on 2026-09-20 against the Core image built from `main@142b8324`, the one the UAT environment runs: the Tracker's repository-conformance call (`POST /products/{id}/evaluate-architecture` → Core `POST /api/v1/evaluate` with the repository inline, 150 files, ~1 MB) came back `500 INTERNAL_ERROR "An unexpected error occurred"`, with no log line on the Core. Reproduced locally on the same image: 14 files (99.8 KB) → `200`, 15 files (101.6 KB) → `500`. Express's default 100 KB JSON ceiling, never raised, never named. Fixed as GT-715 — a configurable ceiling (`EVOLITH_MAX_BODY_BYTES`, 2 MiB by default), a `413 PAYLOAD_TOO_LARGE` that states both sizes, and a log line for every masked 5xx — and promoted the same day: Promoted in #778 (`9c5deedf`) and redeployed by the `Deploy UAT (Coolify)` job of run 35490911533 on 2026-09-20; measured right after: the same `evaluate-architecture` call answers `200`, `provenance: core`, `status: COMPLETED`, `resultDecision: FAILED` — a real verdict on 150 files (gates f1–f5 failed for missing phase artifacts), 174 ms in the Core. The Tracker screenshot on the front page is the phase gate around an initiative — taken before the redeploy, and kept because it shows what the CLI does not have — not the repository verdict, which is the measurement above.

## What is not built

Expand Down
2 changes: 1 addition & 1 deletion product/products/evolith-tracker/README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
**Suite Padre:** [Evolith Product Suite](../../suite/README.es.md)
**Core Gobernante:** [Evolith Core](../../../reference/core/README.es.md)

> **Estado de implementación (2026-09-20).** El Tracker existe y corre: iniciativas a través de las cinco fases, criterios de gate derivados del tipo, cadenas de aprobación del product owner, evaluación de compuerta de fase con veredicto del Core, evidencia, auditoría — la [portada](../../../README.es.md#la-compuerta-de-fase-en-la-cli-y-en-el-tracker) lleva una captura de su entorno UAT gobernando este mismo repositorio. Lo que **no** es cierto todavía: un lanzamiento, un repositorio público y una llamada de conformidad del repositorio que pase en UAT (el techo de 100 KB del cuerpo del Core la rechazó — GT-715, arreglado en el Core, a la espera de la siguiente promoción). El [Diseño de Interfaces Técnicas de Tracker](./sdlc-tracker-technical-interfaces.es.md) de abajo es anterior a la implementación y sigue marcado como *Diseño Propuesto*; no describe el producto entregado.
> **Estado de implementación (2026-09-20).** El Tracker existe y corre: iniciativas a través de las cinco fases, criterios de gate derivados del tipo, cadenas de aprobación del product owner, evaluación de compuerta de fase con veredicto del Core, evidencia, auditoría — la [portada](../../../README.es.md#la-compuerta-de-fase-en-la-cli-y-en-el-tracker) lleva una captura de su entorno UAT gobernando este mismo repositorio. Lo que **no** es cierto todavía: un lanzamiento y un repositorio público. La llamada de conformidad del repositorio en UAT la rechazó el techo de 100 KB del cuerpo del Core al primer intento (GT-715); arreglado, promovido y redesplegado el mismo día, hoy devuelve un veredicto real sobre este repositorio. El [Diseño de Interfaces Técnicas de Tracker](./sdlc-tracker-technical-interfaces.es.md) de abajo es anterior a la implementación y sigue marcado como *Diseño Propuesto*; no describe el producto entregado.

---

Expand Down
2 changes: 1 addition & 1 deletion product/products/evolith-tracker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
**Parent Suite:** [Evolith Product Suite](../../suite/README.md)
**Governing Core:** [Evolith Core](../../../reference/core/README.md)

> **Implementation status (2026-09-20).** The Tracker exists and runs: initiatives through the five phases, type-derived gate criteria, product-owner approval chains, phase-gate evaluation with a Core verdict, evidence, audit — the [front page](../../../README.md#the-phase-gate-in-the-cli-and-in-the-tracker) carries a capture of its UAT environment governing this very repository. What is **not** true yet: a launch, a public repository, and a passing repository-conformance call in UAT (the Core's 100 KB body ceiling rejected it — GT-715, fixed in the Core, awaiting the next promotion). The [Tracker Technical Interface Design](./sdlc-tracker-technical-interfaces.md) below predates the implementation and is still marked *Proposed Design*; it is not a description of the shipped product.
> **Implementation status (2026-09-20).** The Tracker exists and runs: initiatives through the five phases, type-derived gate criteria, product-owner approval chains, phase-gate evaluation with a Core verdict, evidence, audit — the [front page](../../../README.md#the-phase-gate-in-the-cli-and-in-the-tracker) carries a capture of its UAT environment governing this very repository. What is **not** true yet: a launch and a public repository. The repository-conformance call in UAT was rejected by the Core's 100 KB body ceiling on the first try (GT-715); fixed, promoted and redeployed the same day, it now returns a real verdict on this repository. The [Tracker Technical Interface Design](./sdlc-tracker-technical-interfaces.md) below predates the implementation and is still marked *Proposed Design*; it is not a description of the shipped product.

---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10899,7 +10899,7 @@
"END TO END ON THE BUILT core-api (npm run build in src/apps/core-api; NODE_ENV=production PORT=3011 EVOLITH_API_KEY=… CORE_PATH=<checkout> node dist/main.js): the identical 150-file / 1,118,034-byte payload -> 200 with overallVerdict FAIL and gate-f1's six missing artifacts; a 3,146,294-byte body -> 413 PAYLOAD_TOO_LARGE 'Request body too large: 3146294 bytes received, the limit is 2097152 bytes (EVOLITH_MAX_BODY_BYTES).' with X-Problem-Format rfc9457.",
"grep -n 'EVOLITH_MAX_BODY_BYTES' src/apps/core-api/src/infrastructure/config/env.validation.ts src/apps/core-api/src/main.ts src/apps/core-api/README.md",
"EXPECTED OF THE PREVIOUS COMMAND: the variable declared once with a 2 MiB default, read once at bootstrap into useBodyParser('json') and useBodyParser('urlencoded'), and documented in the README's variable table",
"NOT CLAIMED: the UAT Tracker's evaluate-architecture returning a real verdict — the deployed image predates this commit until main is promoted and Coolify redeploys (the deploy job is off); the front page therefore shows the Tracker's phase gate, which never touches this path."
"MEASURED IN UAT AFTER THE PROMOTION, 2026-09-20 05:23 UTC (main 9c5deedf, run 35490911533, job 'Deploy UAT (Coolify)' green): POST https://tracker.beyondnet.cloud/api/v1/products/10c8006a-d2dc-43bf-9edd-18aec2c93391/evaluate-architecture -> HTTP 200, evaluation.status COMPLETED, resultDecision FAILED, provenance core, coreEndpoint /api/v1/evaluate, durationMs 174, fileCount 150 (branch main, 35 binaries and 1 oversize file skipped by the Tracker's own caps), responseResult.gates f1..f5 all 'failed'. The same call was HTTP 502 with provenance synthetic six hours earlier. The 'CD is off' half of the original row was wrong: VPS_DEPLOY_ENABLED has been true since 2026-08-22."
]
}
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10285,7 +10285,7 @@ Los dos se arreglaron de forma estructural y no como correcciones: el rethrow no
| un cuerpo de 6 ficheros (10 KB) | `200`, gate `gate-f1` `FAIL` con los seis artefactos ausentes — el camino inline en sí funciona |

- **Lo que lo cierra, en `3b276c9a`:** `EVOLITH_MAX_BODY_BYTES` (2 MiB por defecto, validado en `env.validation.ts`) registra los parsers `json` y `urlencoded` explícitamente con `bodyParser: false`; el filtro reconoce los errores del body parser por su `type`/`status` antes de los matchers por mensaje y conserva el estado que eligió el parser (413, 400, 415…), el 413 dice los bytes recibidos, el techo y la variable; y todo 5xx se registra con su traza antes de enmascararse. Rojo primero: 4 de las 5 specs nuevas fallan contra el filtro anterior. Después: el mismo cuerpo de 1,1 MB → `200` con el veredicto de `gate-f1`; un cuerpo de 3 MB → `413 PAYLOAD_TOO_LARGE "Request body too large: 3146294 bytes received, the limit is 2097152 bytes (EVOLITH_MAX_BODY_BYTES)."`
- **Lo que esto no cierra:** la imagen del UAT es anterior al arreglo hasta que `main` se promueva y Coolify redespliegue (el job `deploy` sigue apagado, ver el compose de UAT); y el Tracker registra un veredicto `synthetic BLOCKED` ante un error HTTP, que es una cuestión de honestidad propia del Tracker y vive en su repositorio.
- **Lo que esto no cierra:** el Tracker registra un veredicto `synthetic BLOCKED` ante un error HTTP, que es una cuestión de honestidad propia del Tracker y vive en su repositorio. (Se registró como «la imagen del UAT es anterior al arreglo, CD apagado» — la segunda mitad era falsa: `VPS_DEPLOY_ENABLED` está en `true` desde el 2026-08-22 y cada promoción a `main` redespliega. Promovido en #778 (`9c5deedf`) y redesplegado por el job `Deploy UAT (Coolify)` de la corrida 35490911533 el 2026-09-20; medido justo después: la misma llamada `evaluate-architecture` responde `200`, `provenance: core`, `status: COMPLETED`, `resultDecision: FAILED` — un veredicto real sobre 150 ficheros (gates f1–f5 fallidos por artefactos de fase ausentes), 174 ms en el Core.)
- **Casos de uso:**
- Un tenant enlaza un producto a su repositorio y pide el veredicto de arquitectura; el Core evalúa el repositorio que recibió en vez de fallar por su tamaño.
- Un cuerpo que sí supera el techo recibe un 413 que nombra el techo, así que el operador sube `EVOLITH_MAX_BODY_BYTES` en vez de leer un 500.
Expand All @@ -10301,5 +10301,5 @@ Los dos se arreglaron de forma estructural y no como correcciones: el rethrow no
- [x] El techo es configurable y está documentado. **CUMPLIDO** — `EVOLITH_MAX_BODY_BYTES` en `env.validation.ts` y en la tabla de variables del README de core-api.
- [x] Un 5xx enmascarado se registra con su traza; un 4xx no. **CUMPLIDO** — dos specs, `Logger.prototype.error` observado una vez y cero veces.
- [x] **FALSABILIDAD:** las specs están en rojo contra el filtro anterior. **CUMPLIDO** — 4 fallidas / 3 pasadas con `git show HEAD:…filter.ts` puesto, 7 pasadas después.
- [~] **NO RECLAMADO:** que el `evaluate-architecture` del Tracker UAT devuelva un veredicto real. Eso necesita la imagen promovida y redesplegada; queda escrito aquí para que la portada no lo diga, y no es de lo que trata esta fila — la fila es el techo del Core y su silencio, ambos medidos cerrados.
- [x] El `evaluate-architecture` del Tracker UAT devuelve un veredicto real. **CUMPLIDO tras la promoción** — Promovido en #778 (`9c5deedf`) y redesplegado por el job `Deploy UAT (Coolify)` de la corrida 35490911533 el 2026-09-20; medido justo después: la misma llamada `evaluate-architecture` responde `200`, `provenance: core`, `status: COMPLETED`, `resultDecision: FAILED` — un veredicto real sobre 150 ficheros (gates f1–f5 fallidos por artefactos de fase ausentes), 174 ms en el Core. La portada conserva la captura de la compuerta de fase; este veredicto queda registrado aquí y en `known-limitations`.
- **Estado:** `COMPLETADO`
4 changes: 2 additions & 2 deletions reference/core/control-center/gaps/gap-reference-catalog.md
Original file line number Diff line number Diff line change
Expand Up @@ -10378,7 +10378,7 @@ Both were fixed structurally rather than corrected: the rethrow now names BOTH f
| a body of 6 files (10 KB) | `200`, gate `gate-f1` `FAIL` with the six missing artifacts — the inline path itself works |

- **What closes it, in `3b276c9a`:** `EVOLITH_MAX_BODY_BYTES` (default 2 MiB, validated in `env.validation.ts`) registers the `json` and `urlencoded` parsers explicitly with `bodyParser: false`; the filter recognises body-parser errors by their `type`/`status` before the message matchers and keeps the parser's status (413, 400, 415…), the 413 states the bytes received, the ceiling and the variable; and every 5xx is logged with its stack before it is masked. Red first: 4 of the 5 new specs fail against the previous filter. After: the same 1.1 MB payload → `200` with the `gate-f1` verdict; a 3 MB body → `413 PAYLOAD_TOO_LARGE "Request body too large: 3146294 bytes received, the limit is 2097152 bytes (EVOLITH_MAX_BODY_BYTES)."`
- **What this does not close:** the UAT image predates the fix until `main` is promoted and Coolify redeploys (the `deploy` job is still off, see the UAT compose); and the Tracker records a `synthetic BLOCKED` verdict on an HTTP error, which is the Tracker's own honesty question and lives in its repository.
- **What this does not close:** the Tracker records a `synthetic BLOCKED` verdict on an HTTP error, which is the Tracker's own honesty question and lives in its repository. (Registered as "the UAT image predates the fix, CD off" — the second half was wrong: `VPS_DEPLOY_ENABLED` has been `true` since 2026-08-22 and every promotion to `main` redeploys. Promoted in #778 (`9c5deedf`) and redeployed by the `Deploy UAT (Coolify)` job of run 35490911533 on 2026-09-20; measured right after: the same `evaluate-architecture` call answers `200`, `provenance: core`, `status: COMPLETED`, `resultDecision: FAILED` — a real verdict on 150 files (gates f1–f5 failed for missing phase artifacts), 174 ms in the Core.)
- **Use cases:**
- A tenant links a product to its repository and asks for the architecture verdict; the Core evaluates the repository it received instead of failing on its size.
- A body that does exceed the ceiling gets a 413 that names the ceiling, so the operator raises `EVOLITH_MAX_BODY_BYTES` instead of reading a 500.
Expand All @@ -10394,5 +10394,5 @@ Both were fixed structurally rather than corrected: the rethrow now names BOTH f
- [x] The ceiling is configurable and documented. **MET** — `EVOLITH_MAX_BODY_BYTES` in `env.validation.ts` and the core-api README's variable table.
- [x] A masked 5xx is logged with its stack; a 4xx is not. **MET** — two specs, `Logger.prototype.error` observed once and zero times.
- [x] **FALSIFIABILITY:** the specs are red against the previous filter. **MET** — 4 failed / 3 passed with `git show HEAD:…filter.ts` in place, 7 passed after.
- [~] **NOT CLAIMED:** the UAT Tracker's `evaluate-architecture` returning a real verdict. That needs the promoted image redeployed; recorded here so the front page does not say it, and it is not what this row is about — the row is the Core's ceiling and its silence, both measured closed.
- [x] The UAT Tracker's `evaluate-architecture` returns a real verdict. **MET after the promotion** — Promoted in #778 (`9c5deedf`) and redeployed by the `Deploy UAT (Coolify)` job of run 35490911533 on 2026-09-20; measured right after: the same `evaluate-architecture` call answers `200`, `provenance: core`, `status: COMPLETED`, `resultDecision: FAILED` — a real verdict on 150 files (gates f1–f5 failed for missing phase artifacts), 174 ms in the Core. The front page keeps the phase-gate capture; this verdict is recorded here and in `known-limitations`.
- **Status:** `DONE`
Loading
Loading