docs / decisiones / 0003decisions / 0003
ADR 0003. Lista marcada con sufijo *#
- Estado: aceptada
- Fecha: 2026-09-01 (SPEC 1.0); registro retrospectivo del 2026-09-16
- Especificación: SPEC.md §6 (tipo
mlist), §7 y §11 («Marker as suffix»)
Contexto y problema#
Muchos dominios cerrados eligen uno o varios elementos de una lista: la alternativa correcta de un ítem de evaluación, las etiquetas aplicables, la opción seleccionada. La representación habitual es una lista y un campo aparte con el índice o el contenido seleccionado, lo que obliga al modelo a mantener alineados dos campos distantes.
Alternativas consideradas#
- Campo de índice separado (
options+correct: 2). - Repetir el contenido seleccionado en un campo aparte.
- Sufijo de un carácter en el elemento seleccionado (
a,b*,c), con una regla de marcador declarada en el contrato.
Decisión#
Se adopta la alternativa 3. El tipo mlist marca los elementos seleccionados con un
* final no escapado. El contrato declara la regla (exactly_one, at_least_one,
at_most_one, any) y su incumplimiento es E08. El objeto canónico expande la lista
en dos claves hermanas: los elementos y el índice (o la lista ascendente de índices)
seleccionado.
Consecuencias#
- La selección viaja pegada a su contenido y se verifica en la misma línea.
*adquiere significado estructural solo como último carácter de un elemento; un asterisco literal final se escribe\*(ADR 0002).- El objeto canónico conserva la forma habitual (lista + índice), por lo que los consumidores no dependen de la notación.
Evidencia#
- No existe en el repositorio un experimento que compare el sufijo
*con un campo de índice separado (coste en tokens o errores de alineación); la decisión se apoya en el razonamiento de diseño de SPEC.md §11. - generative/results/e3_samples.csv: los parsers
escritos por modelos a partir del bloque de especificación rechazan los fixtures
negativos, incluido
bad_marker.mini, en todas las filas (p. ej.opus,a,1,…,4/4). - generative/results/e1_summary.csv: la familia
a(con lista marcadaoptions) obtuvo 100,0 % de ida y vuelta con los tres modelos. - Casos de conformidad: categoría
mlisten conformance/cases/mlist.json.
Decision records are written in Spanish.
ADR 0003. Lista marcada con sufijo *#
- Estado: aceptada
- Fecha: 2026-09-01 (SPEC 1.0); registro retrospectivo del 2026-09-16
- Especificación: SPEC.md §6 (tipo
mlist), §7 y §11 («Marker as suffix»)
Contexto y problema#
Muchos dominios cerrados eligen uno o varios elementos de una lista: la alternativa correcta de un ítem de evaluación, las etiquetas aplicables, la opción seleccionada. La representación habitual es una lista y un campo aparte con el índice o el contenido seleccionado, lo que obliga al modelo a mantener alineados dos campos distantes.
Alternativas consideradas#
- Campo de índice separado (
options+correct: 2). - Repetir el contenido seleccionado en un campo aparte.
- Sufijo de un carácter en el elemento seleccionado (
a,b*,c), con una regla de marcador declarada en el contrato.
Decisión#
Se adopta la alternativa 3. El tipo mlist marca los elementos seleccionados con un
* final no escapado. El contrato declara la regla (exactly_one, at_least_one,
at_most_one, any) y su incumplimiento es E08. El objeto canónico expande la lista
en dos claves hermanas: los elementos y el índice (o la lista ascendente de índices)
seleccionado.
Consecuencias#
- La selección viaja pegada a su contenido y se verifica en la misma línea.
*adquiere significado estructural solo como último carácter de un elemento; un asterisco literal final se escribe\*(ADR 0002).- El objeto canónico conserva la forma habitual (lista + índice), por lo que los consumidores no dependen de la notación.
Evidencia#
- No existe en el repositorio un experimento que compare el sufijo
*con un campo de índice separado (coste en tokens o errores de alineación); la decisión se apoya en el razonamiento de diseño de SPEC.md §11. - generative/results/e3_samples.csv: los parsers
escritos por modelos a partir del bloque de especificación rechazan los fixtures
negativos, incluido
bad_marker.mini, en todas las filas (p. ej.opus,a,1,…,4/4). - generative/results/e1_summary.csv: la familia
a(con lista marcadaoptions) obtuvo 100,0 % de ida y vuelta con los tres modelos. - Casos de conformidad: categoría
mlisten conformance/cases/mlist.json.