Novedades
Lo que cambió en TDC y usted puede ver — un comando o una bandera nueva, una comprobación nueva, algo que ahora funciona distinto —, lo más reciente primero, y cada punto con un enlace a donde la documentación lo explica ahora. Los cambios dentro del motor que no alteran nada de lo que usted escribe o lee quedan fuera; todos los cambios están en el registro de cambios.
25 de octubre de 2026 — versión 0.3.6
<line each="Pool">imprime un pool registro por registro. Una línea por registro, cada campo leído como${{Pool.field}}, así que una tabla de consulta sale de la misma configuración que las filas que apuntan a ella. Las posicionesPool._first,Pool._lastyPool._itemcuentan las líneas impresas de verdad, que es lo que pone una coma entre objetos JSON y no después del último. → Un pool entero, registro por registro<group>mantiene juntas varias líneas.<group each="Depts">imprime sus líneas una vez por departamento, y un grupo dentro de él imprime los médicos de ese departamento: un documento JSON anidado desde una sola configuración. Sineach, suif=conserva o quita todas sus líneas a la vez. → Varias líneas por elemento- El filtro
json.${{Name | json}}escribe una cadena JSON con el escape hecho, onullsi el valor está vacío;${{Tags | json:;}}escribe una lista como un array JSON. Una lista impresa sin su separador recibe una advertencia,TDC312. →json plus=lee la distancia de una columna.<gen type="date" of="Start" plus="Length m">termina cada cita su propia duración después de empezar. → Una distancia leída de otra columna- El
if=de una línea coneachdecide elemento por elemento.<line each="Orders" if="Orders > 5000">imprime solo los pedidos grandes; antes conservaba o quitaba la línea entera. → Lo que se ve dentro de una línea coneach - Las líneas de los fixtures se comprueban, y su
if=se lee. Un${{Name}}mal escrito en<before>es un error enchecken lugar de llegar al archivo tal cual. → Fixtures - Identificadores de salud con dígitos de control reales: el NPI de EE. UU., el KVNR y el LANR de Alemania, el RPPS y el FINESS de Francia, el CNS de Brasil. → Números fiscales y de documentos por país
- Los teléfonos de EE. UU. y Canadá usan cualquier código de área en servicio, con los
números 555-0100 a 555-0199, reservados para la ficción. Antes cada número de EE. UU. empezaba
por
+1 202 555. → Números de teléfono - El registro de paquetes tiene 294 conjuntos. Ya se pueden descargar el chino
tradicional, el uzbeko, el montenegrino, el bretón, el sindhi, cuatro idiomas más y 46 países,
y
tdcv2 pack listnombra los países como nombres: United States, no "Usa". →pack list - Rust y C#: un paquete cuya comprobación
<valid>rechaza un valor ahora lo vuelve a sacar como lo hacen los otros tres. Once paquetes incluidos, entre ellos el código de contenedor ISO 6346 y los códigos postales de Eslovenia, daban allí valores distintos. →<valid> - Agentes de IA. Claude Code, Codex, Cursor, VS Code y Gemini CLI pueden escribir y ejecutar configuraciones de TDC por usted, mediante un skill y un servidor MCP. → Agentes de IA
17 de octubre de 2026 — versión 0.3.5
checkdice qué motor ejecutará la configuración y por qué. Una segunda línea después de «is valid», comoruns on engine 1 (in memory): uniq="true" on "Code": de eso depende cuánta memoria gasta.--briefla omite. →tdcv2 check--engine 3avisa cuando la configuración la ejecuta el motor 1. Con un total acumulado, una estadística o una columnauniq="true"siempre pasaba la ejecución al motor en memoria; ahora imprime una nota, y una medición de memoria ya no es en silencio una del motor 1. → Qué motor corre su configuración- Corregido: una búsqueda o una fórmula que leía un miembro de
<uniq>veía el valor de antes de reordenar el grupo — el día impreso y el día buscado no coincidían en casi ninguna fila. →<uniq>— entre secuencias separadas - Corregido:
<assert>eif=leen un campo a dos o más pools de profundidad, comoD.room.dept.dep_id. → Hasta qué profundidad llega - Corregido: un filtro dentro de un pool lee los campos de al lado.
filter="dept_no == want", conwantcampo del mismo pool, se rechazaba como un filtro que nunca coincide. → Qué significa un nombre dentro defilter - Corregido: cada elemento de un
repeat=es una extracción propia. Un e-mail repetido ya no repite un solo dominio, y una distribución cuyo parámetro nombra otra columna lee el valor de su propia fila. → Varios valores en una celda - Corregido: el 29 de febrero sigue siendo 29 de febrero. En el paquete npm una fecha acotada por 2024-02-29 o medida desde ella salía como 1 de marzo. → Una fecha aleatoria dentro de un rango
- Python, Rust, Java y C#: un
<switch>sobre un campo de un registro de pool, una fecha medida desde uno yrepeat=dentro de una rama de<switch>o un caso de<mix>funcionan como en el paquete npm. → Dos nombres y un punto
16 de octubre de 2026 — versión 0.3.4
-
initpuede omitir los ejemplos.tdcv2 init --yes --no-examplesescribe la configuración y la carpeta de paquetes, y nada más: para un script o un agente de IA que prepara un proyecto en nombre de otra persona. →--no-examples -
checkadvierte de tres errores que antes pasaban en silencio. Cada uno se ejecutaba sin decir nada y daba datos equivocados:- un
<env>sinseed=: cada ejecución da un archivo distinto →seed mmen un formato de fecha son minutos, así queYYYY-mm-DDimprimía el mes00; el mes esMM→ Formato de la salida"u otra entidad XML en<data>se imprime tal como está escrita →<data>— texto crudo
Son advertencias:
checksigue terminando con 0. Una ejecución con--seedno tiene nada que advertir, y una sin ella imprime en su lugar la semilla que sacó. →tdcv2 check, códigosTDC309–TDC311en la referencia de diagnósticos - un
-
Una fecha medida desde otra fecha ahora tiene su formato revisado.
format="YYY"en una fecha conof=/plus=imprimía25Yen cada fila; ahorachecklo rechaza, como en cualquier otra fecha. → Una fecha medida desde otra fecha -
Paquete npm:
init --localesin valor se rechaza. Antes escribía en silencio una configuración conen; las otras cuatro implementaciones ya lo rechazaban. →--locale