release: promocionar develop a main (c5caded0) - #754
Merged
Merged
Conversation
…sde input.name Última js/path-injection abierta tras #737 (análisis 19d736d): el scaffolder .NET volvía a leer `input.name` como propiedad al escribir `${projectDir}/${input.name}.csproj`. Es la misma cadena que el use case validó, pero CodeQL solo ve el sanitizador sobre la variable local, no sobre una segunda lectura de la propiedad. `path.basename(projectDir)` es exactamente ese valor (`projectDir` se construye como `${cwd}/${name}`) y ya está saneado para el motor. Test: `Billing.Api` produce `Billing.Api.csproj`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…fore it closes La ventana de 30 días de `09-reconcile-maturity.mjs` es el diseño: la evidencia que caduca se re-observa, no se estira. Lo que no era diseño es CÓMO se enteraba alguien: dos veces (2026-08-18 y 2026-09-19) por el check requerido `Validate documentation` en rojo sobre un PR ajeno a la evidencia, el mismo día en que empezaba a bloquear merges. - `assessEvidenceFreshness` calcula por check el primer día en que `validateRuntimeEvidence` lo rechazará (misma aritmética, constante compartida `EVIDENCE_MAX_AGE_DAYS`), y lo clasifica fresh / expiring / stale / future. La banda de aviso es `EVIDENCE_WARN_DAYS = 7`. - Todo run del reconciliador (`--check` incluido) avisa con la fecha cuando un check entra en la banda; no bloquea, la ventana no se mueve. - `--freshness [--now=YYYY-MM-DD]` imprime el informe y sale 1 dentro de la banda o pasada la ventana; `--now` permite observar el camino rojo bajo demanda en vez de esperarlo. - Workflow diario `maturity-evidence-freshness.yml` (06:45 UTC, tras el canary) que lee `develop` y abre/actualiza UNA issue `maturity-evidence` con la fecha y el procedimiento; se cierra sola al re-observar. - 3 casos nuevos en el self-test (24): el incidente real reproducido (observado 08-18 → stale desde 09-18), los cuatro bordes de banda y el formato del informe. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…o una relectura de la petición Última alerta CodeQL abierta sobre main (#226, js/path-injection en node-filesystem.provider.ts:50). El flujo del SARIF: POST /projects/initialize → body.name → InitializeProjectUseCase → ProjectScaffolderService:188 (`${projectDir}/${input.name}.csproj`) → writeFile. La guarda de #725/#737 sanea el alias local `name` (regex + `includes('..')` + `isAbsolute`), pero el scaffolder vuelve a leer `input.name` del objeto de la petición, y CodeQL rastrea el campo del objeto aparte del alias. Ahora el caso de uso reconstruye la entrada con el valor validado (`safeInput`) y es eso lo que llega al scaffolder; las etiquetas de `artifacts` también usan `name`. Ninguna otra lectura de `input.name` queda aguas abajo. No es solo la forma que CodeQL modela: un objeto cuya `name` responda una cosa a la guarda y otra al scaffolder (getter, proxy) es un TOCTOU real, y el test nuevo lo ejercita: el segundo read devuelve `../escape` y aun así lo escrito es `/tmp/honest/honest.csproj`, sin `..` en ninguna ruta ni artefacto. Verificado: spec 18/18 (17 previos + 1 nuevo), tsc sin errores en el fichero. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…dow is announced, not discovered Fila GT-711 (DONE) en los dos boards, entrada en los dos catálogos, registro de cierre apuntando a 3006507, fecha del tablero → 2026-09-19 con su cascada regenerada en orden (asOf → maturity-reconciliation.json → executive-summary EN/ES: 709 gaps, 679 cerrados, 661 registros). Lo que NO se reclama queda escrito como tal: la issue programada es observable por primera vez el 2026-10-13, primer día dentro de la banda para la evidencia observada el 2026-09-19. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…project-dir fix(security): nombrar el .csproj desde el directorio validado, no desde input.name
…tion-scaffolder-name fix(security): el scaffolder recibe el nombre validado, no una relectura de la petición (CodeQL #226)
…xpiry-warning GT-711: announce the maturity-evidence window a week before it closes
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Contributor
📊 Bilingual Coverage ImpactPR Changes
Repository Coverage
✅ Good: All EN changes have ES counterparts. Generated by GitHub Actions |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promoción
develop→main, fijada ac5caded0para que lo que se revisa sea lo que se mergea. Sigue a #739; suben cuatro PR.Qué sube
Security — CodeQL #226 (path-injection), cerrada dos veces — #748 y #750
.csprojdesde el directorio validado, no desdeinput.name.input.nameaguas abajo de la guarda.GT-711 — #751
Sync — #749
Después del merge
gh workflow run sdk-cli-ci.yml --ref mainpara queCodeQL SASTanalicemainpor push (el trigger por paths no cubre core-domain) y cierre #226; Scorecard re-puntúa el martes o porworkflow_dispatch.🤖 Generated with Claude Code