Skip to content

El paso 3 del cierre de Charter asume un charters/README.md que el CLI no crea: 21 de 36 charters arrastran un paso inejecutable #425

Description

@montfort

Las tres plantillas de Charter (charter-template.md base, i18n/es, i18n/zh-CN) piden en el paso 3 del cierre:

Move the row in .straymark/charters/README.md to ## Closed and reference the PR.

Ese archivo no lo crea el CLI, ni straymark init ni charter new. En nuestro adoptante (ri-ceiba) nunca ha existido, así que 21 de nuestros 36 charters arrastran un paso de cierre que no se puede ejecutar.

Cómo se detectó

No lo detectó nadie leyendo el procedimiento en dos años de uso. Lo encontró un auditor externo (qwen3-8-max) durante la auditoría del CHARTER-34, comprobando uno por uno los pasos de cierre declarados:

El paso 3 del cierre del Charter referencia .straymark/charters/README.md, que no existe en el repositorio. La instrucción viene de la plantilla y aparece en todos los charters; el índice no existe en este adoptante, así que el paso no es ejecutable tal como está escrito.

En nuestra review consolidada quedó MISATTRIBUTED: la observación es correcta pero pertenece a la plantilla del framework, no al Charter auditado.

Por qué importa más de lo que parece

Un paso inejecutable dentro de un procedimiento se convierte en un paso que se omite en silencio. Y una vez que alguien aprende a saltarse el paso 3 sin consecuencias, deja de distinguirlo de los pasos que sí importan — el drift check post-merge, el closed_at, el no borrar el archivo. El coste no es el índice ausente: es la erosión del hábito de ejecutar el procedimiento entero.

Lo que hicimos localmente

Corregir las tres plantillas para que el paso sea condicional y honesto (nuestro PR #256):

3. **Update the Charter index, if this project keeps one.** The authoritative status lives in the
   Charter's own frontmatter and is queried with `straymark charter list`. A `README.md` index under
   `.straymark/charters/` is **optional and not created by the CLI**: if your project maintains one,
   move the row to `## Closed` and reference the PR. If it doesn't, this step does not apply — say so
   in `## Closing notes` rather than leaving it silently unexecuted.

Decidimos deliberadamente no crear el índice, por dos razones:

  1. straymark charter list ya expone esa información desde el frontmatter, que es la fuente de verdad. Un índice manual la duplicaría.
  2. Un índice de 36 charters mantenido a mano es exactamente el documento que se desactualiza. Nuestro repositorio ya tiene seis casos registrados de documentación que parecía vigente y no lo era; uno de ellos indujo conclusiones falsas en tres auditorías consecutivas.

Lo que proponemos aguas arriba

Tres opciones, en el orden en que las preferiríamos:

  1. Adoptar la redacción condicional en las tres plantillas. Coste cero, resuelve el caso para todos los adoptantes que no mantengan índice.
  2. Que straymark init cree el índice y que charter close lo actualice. Coherente con el paso tal como está escrito hoy, pero añade un artefacto que hay que mantener sincronizado — y el CLI tendría que ser quien lo mantenga, no el operador.
  3. Retirar el paso y apuntar a charter list. Es lo más simple, pero pierde el caso de los adoptantes que sí quieran un índice legible fuera del CLI.

Nos quedamos con la 1 localmente. Si el framework adopta otra, la reaplicamos.

Nota sobre la corrección local

Vive en .straymark/templates/, que entendemos puede sobrescribirse en la próxima update-framework. Si el framework no incorpora el cambio, tendremos que reaplicarlo tras cada actualización — que es el motivo de reportarlo en vez de quedarnos con el parche.


Versión: fw-4.42.0 / cli-3.39.x · Adoptante: ri-ceiba (StrangeDaysTech)
Relacionado: #424 (también salió de la misma cadena de charters)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions