Changelog
[Unreleased]
- group: tirador-designado-rename-complete
priority: high
commit: 9d8d043
changes:
- refactor(tags/rango): rename francotirador.yaml → tirador_designado.yaml; update slug, nombre
- refactor(tags/rol/oficio): rename francotirador.yaml → tirador_designado.yaml; update slug, nombre
- refactor(docs): propagate francotirador → tirador_designado across cost table (docs/escuadra-modelo.md §2.2), examples (docs/tag-modelo-ejemplos.yaml), user stories (docs/user-stories.md)
- refactor(gddr): update rank references in gddr/01 §1.1 (rango sorteo pesos) and gddr/02 §2 (rango combinations)
- refactor(api): update API.md rank enum and examples
- refactor(scripts): update rank validation in scripts/validar_escuadras.py
- revert(agents): restore "Francotirador/francotirador" illustrative case-collision example in AGENTS.md (policy: internal pedagogical content distinct from catalog references)
- revert(changelog): restore "francotirador" in historical CHANGELOG.md entry (policy: changelog entries immutable; git log falsification rejected)
- group: escuadras-schema-motor-gddr02
priority: high
commit: 0267178
changes:
- feat(docs): add escuadra-modelo.{md,yaml} — SSOT for squad schema (fields, derivados, invariantes)
- feat(docs/gddr/02): introduce battle engine motor-batalla for squad-vs-squad combat (resolves TBD-04)
- feat(mock/escuadras): materialize 2 squad fixtures — confederacion (cazadores_de_ricardo) and ejercito_rojo (columna_mansilla)
- feat(catalog/tags/escuadra): migrate squad tags to new catalog structure
- feat(scripts): add generar_grafo_obsidian.py and validar_escuadras.py utility scripts
- refactor(mocks): align 22 personajes to updated escuadra schema
- docs(cross-doc): propagate escuadra references across MODEL/PRD/AGENTS/user-stories/hoja-modelo/tag-modelo/gddr-01
- chore(gitignore): add .agents/ .obsidian/ skills-lock.json (harness ignore); advances TBD-20
- group: tbd-14-faccion-subfaccion-asymmetry
priority: high
commit: bc27a29
changes:
- docs(model/§4.1): document deliberate asymmetry — faccion as first-class entity (closed-curated, schema-level FK, /meta/factions endpoint) vs subfaccion as tag_catalogo category (open-emergent, no schema FK, membership via subfaccion.faccion_padre in catalog)
- docs(tag-modelo.md/§3): align asymmetry notation and examples to MODEL definition
- docs(cross-doc): update references across codebase; mocks already consistent — no changes required
- group: tbd-10-fields-dot-paths
priority: normal
commit: 0e62c99
changes:
- docs(api): clarify fields= parameter accepts CSV of dot-path notation for internal tag representation (distinct from sub-category slash notation)
- group: tbd-batch-05-02-03-escuadras
priority: high
commit: 5935a7a
changes:
- fix(api.md): add clarification that sub-categories use slash notation (
/meta/equipo/arma) not dot notation; dot notation is reserved for internal tag representation
- fix(mock/personajes/confederacion/01_aguirre.yaml): rename fixture from "Walter Aguirre" to "Héctor Aguirre" (collision avoidance with canon vault character); slug WA3K9F2H retained; updates name, sobrenombre, historia, and aliado reference
- feat(api.md): add section Escuadras with new endpoints
GET /escuadras, GET /escuadras/{slug}, POST /escuadras, POST /escuadras/{slug}/miembro, DELETE /escuadras/{slug}/miembro/{char_slug} mapping UCs 24–27
- group: open-questions-notion-migration
priority: high
commit: 436e3a3
changes:
- feat(docs): migrar 29 entradas de open-questions.md (T-01..T-10, OQ-01..OQ-14 sin OQ-12, N-01..N-04) a sub-página Notion del proyecto syv-character-kit
- chore: eliminar docs/open-questions.md del repositorio
- docs(AGENTS.md): actualizar referencias a open-questions.md por 'página Notion del proyecto' (línea 14)
- docs(PRD.md): reemplazar tabla de artefactos fila open-questions.md con enlace a página Notion; actualizar citas T-01/T-05/OQ-06 a texto plano
- docs(MODEL.md): actualizar referencias T-04/N-01/OQ-06 a texto plano (sin link)
- docs(tag-modelo.md): actualizar citas T-02/T-07/OQ-01/T-04 en header §8 a formato texto plano
- chore(obsidian): inicializar .obsidian/ con configuración de vault local (14 archivos; community plugins y workspace)
- feat(skills): agregar skills/manejo_tags_proyecto.md como referencia interna de manejo de tags
- group: oq12-patentes-opacas-fixtures
priority: high
commit: 613d8b4
changes:
- feat(mocks): migrar identidad.slug de 22 fixtures (mock/personajes/{confederacion,ejercito_rojo}/) desde forma legible (apellido_nombre) a patente opaca ^[A-Z0-9]{8}$ conforme docs/hoja-modelo.md §1.1
- feat(mocks/npc): materializar 2 NPCs sintéticos previamente referenciados sin fixture propio en mock/personajes/npc/: RS0P2M7N (Ricardo Sargento postmortem) y MM4B9L1X (mentor metalúrgico Bahía Blanca)
- feat(scripts): añadir scripts/migrate_slug_to_patente.py — tabla de mapeo 24 entradas, idempotente
- chore: propagar 105 reemplazos a campos ref en aliados[].ref, nemesis[].ref, historial[].metadata.ref, historial[].metadata.lider_caido
- group: gitignore-harness-cleanup
priority: low
commit: df29030
changes:
- chore(gitignore): añadir .antigravitycli/ al ignore
- chore: deshace leak de scratch del harness en el commit previo
- group: audit-trait-slugs-quiroga-fix
priority: normal
commit: e24acdd
changes:
- fix(tags/trait): rename discreta.yaml → discreto.yaml; normalize slug, nombre, descripcion to masculine generic form (Castilian neutro convention)
- fix(tags/trait): rename determinada.yaml → determinado.yaml; normalize slug, nombre to masculine generic form
- fix(mock/personajes): update 7 confederacion/ejercito_rojo fixtures using trait.discreta → trait.discreto (04_funes, 05_rodriguez, 08_pereyra, 10_lugones, 06_paine, 09_bordon, 11_bordagaray)
- fix(mock/personajes): update 2 confederacion/ejercito_rojo fixtures using trait.determinada → trait.determinado (08_pereyra, 11_bordagaray)
- fix(mock/personajes/confederacion/03_quiroga.yaml): correct historial ascenso typo rango_anterior apuntador → fusilero (canonical promotion path from fusilero to cabo especialista)
- chore: grep trait.(discreta|determinada) confirms zero remaining refs
- group: gddr-01-ssot-atributos-canonicos
priority: high
commit: e016ddf
changes:
- docs(gddr/01 §3): declare SSOT rank-to-attributes mapping deterministic table — zero randomness; topes absolutos fis 5 / tac 6 / men 7; creación máximo N-1 por rango; mutación solo vía hito triple_cero|mejora_atributo
- docs(gddr/01 §1.1): adjust rank sorteo pesos — recluta 30% / fusilero 20% / apuntador 10% / artillero 10% / francotirador 2% / segundo_al_mando 7% / lider_de_escuadra 3% / militante 18%
- docs(hoja-modelo.md §2): propagate tope absoluto semantics to fis; add symmetric annotation matching tac/men (tope N; creación máx N-1; vía hito hasta tope)
- docs(hoja-modelo.yaml): synchronize attribute table header (fis/tac/men ranges normalized; ceiling notation consistent)
- docs(atributos-y-efectos.md §1): update attribute documentation to reflect absolute ceilings and hito-based growth beyond creation limits
- fix(mock): align 22 fixtures {confederacion,ejercito_rojo} atributos to GDDR-01 §3 canon — 14 files touched; líderes (men 7→6), segundos (tac 5→4 / men 6→5), apuntadores (tac 5→4 / men 5→4), artilleros (fis 3→4)
- docs(model): update attribute ranges in hoja-modelo field spec to match GDDR-01 ceiling declarations
- docs(api): align attribute parameter bounds to GDDR-01 absolute ceilings (fis max 5 / tac max 6 / men max 7)
- group: model-api-campos-derivados-en-response
priority: normal
commit: bdb376e
changes:
- docs(model §1): declarar explícitamente que los campos derivados (
filiacion, fatiga_max, moral_max, fza_aportada) aparecen en la response de GET /character y GET /character/{slug} y se recomputan en cada lectura
- docs(api §GET /character/{slug}): cross-reference a
MODEL.md §1 para campos derivados — resuelve TBD-08 de la auditoría MODEL+API
- group: model-tipar-slug-nullable
priority: normal
commit: 3e3f567
changes:
- fix(model): tipar
identidad.slug como str | null con mutabilidad "set una vez" (paralelo a metadatos.canonizado_en) — resuelve TBD-06 de la auditoría MODEL+API
- group: canon-independencia-kit
priority: high
commit: 69d43fd
changes:
- docs(prd/§10): consolidate lore references to single source /Dev/SyV/syv/src/content/docs/ (github.com/kodexArg/syv); remove refs to syv-battle-game-system, syv-obsidian, syv-game-system
- docs(prd/§5): remove "(ver reglamento canon)" citation; FZA derivation now self-contained in rol.combate.* of kit
- docs(agents): narrowed "Lore canon" rule to /Dev/SyV/syv/src/content/docs/ structure (0_proyecto..6_media); list other SyV directories as non-canonical for this kit
- group: mock-audit-subfaccion-lealtad
priority: high
commit: 114a85c
changes:
- fix(mock/personajes): add missing subfaccion.* tags to 8 confederacion fixtures (02..11) and 4 ejercito_rojo fixtures (03,04,06,10) per GDDR-01 §1.3
- fix(mock/personajes): add lealtad.subfaccion.pelicanos to all 11 confederacion fixtures and lealtad.subfaccion.ejercito_revolucionario_del_pueblo to all 11 ejercito_rojo fixtures
- group: tags-huerfanos
priority: normal
commit: 21b3af4
changes:
- feat(tags/rasgo): materialize barba_canosa, manos_grandes, piel_curtida (minimal, without effect)
- feat(tags/trait): materialize lealtad_obrera (+2 MORAL / -1 INICIATIVA), mirada_larga (+1 TACTICO / +1 INICIATIVA), taciturno (+1 MENTAL / -1 INICIATIVA), recluta_novato (-1 TACTICO / -1 ESTRESS / -1 INICIATIVA), templado_bajo_fuego (+1 MENTAL / +1 MORAL / +1 ESTRESS)
- feat(tags/trait): materialize panico_en_abierto with trigger bajo_fuego/sin_cobertura → efecto.panico
- chore(tag-modelo-ejemplos): all 18 tag refs now resolve to extant files in tags/
- group: docs-audit-canon-alignment
priority: high
commit: 25e8a99
changes:
- docs(hoja-modelo.md §0): include aliados[] and nemesis[] in structure documentation
- fix(hoja-modelo.md): remove §9 changelog section (rolling release violation)
- fix(hoja-modelo.yaml): correct tac range 2..5 → 2..6
- fix(gddr/01 §1.3): separate subfacción and escuadra into distinct phases
- fix(gddr/01 §3): remove reference to nonexistent GDDR-03
- fix(tag-modelo.md): consolidate OQ-tag-2 (resolved), update OQ-tag-3 to reference aliados[]/nemesis[] instead of stale lealtad.pj.* and nemesis.pj.* patterns
- fix(prd/§1.1): add universe context (year 2178, Zanja de Alsina, Confederación Argentina/Ciudad Dársena, Ejército Rojo/Bahía Blanca, Camarada Puntero, Anatema Mecánico)
- fix(prd/§5): rename mocks column to fixture_id; clarify FZA total = 15 derivation; update Confederación → Confederación Argentina
- docs(agents): refine randomness rule (probabilities in %, modifiers as delta integers, % for rates per docs/atributos-y-efectos.md); generalize docs/ policy to all files
- chore: cross-reference corrections (API.md PRD §7.2 → gddr/01 §3; MODEL.md PRD §4 → PRD §8; resources/nombres/README.md §1.3 → §2.3; tag-modelo.md ref T-02/T-07 in open-questions.md)
- group: refactor-prd-docs
priority: high
commit: 47d3872
changes:
- refactor(prd): reduce from 623 to 211 lines — product is documentation, not application; clarify five deliverables (protocol, procedural generator, API contract, 22 mocks in two squads, battle rules)
- feat(docs): new file MODEL.md with persistence contract (sub-product of API.md)
- feat(docs): new file user-stories.md with UCs 01-23 and bidirectional endpoint mapping
- feat(docs): new file open-questions.md consolidating tensions (T-01..T-10), open questions (OQ-01..OQ-14), architecture notes (N-01..N-04)
- fix(api.md): add ?tag= parameter with AND-by-repetition; map UCs 19/20/22 without breaking existing contract
- fix(agents.md): one-line sync (PRD §14 → docs/open-questions.md)
- group: docs-reconciliacion-slugs-ejemplo
priority: normal
commit: aea151b
changes:
- docs(tag-modelo-ejemplos.yaml): reconcile 8 example slug references to curated MVP catalog — resistencia_al_dolor→tenaz, lectura_de_terreno→terreno, conocimiento_de_meseta→meseta, lectura_de_mapas→cartografia, punteria_fria→cobertura, recarga_rapida→recarga, cobertura_instintiva removed (duplicate with cobertura), tiro_de_precision→precision
- docs(tag-modelo.md): update slug format example from tirador_preciso to precision (line 46)
- docs(tag-modelo.yaml): update slug format example from tirador_preciso to precision (line 16)
- docs(hoja-modelo.md): update slug format example from tirador_preciso to precision (line 138)
- group: homologacion-mocks-catálogo-mvp
priority: high
commit: fb4a6a2
changes:
- refactor(tags/perk): prune catalog from 14 to 4 MVP perks — consolidate brazo_derecho_funcional, cobertura_instintiva→cobertura, disparo_de_oportunidad, escudo_humano, olfato_del_terreno, punteria_fria, recarga_rapida→recarga, resistencia_al_dolor→estoico, sangre_fria, sucesor_de_ricardo, tirador_preciso, veterano, veterano_de_flanqueo (trailing removed, merged into 4 core perks)
- refactor(tags/skill): prune catalog from 11 to 8 MVP skills — consolidate analisis_tactico, carga_rapida, conocimiento_de_meseta→meseta, fuego_sostenido, lectura_de_mapas→cartografia, lectura_de_terreno→terreno, lectura_del_viento, manejo_de_ametralladora→ametralladora, movimiento_sigiloso→sigilo, operacion_de_radio→radio, tiro_de_precision→precision + add sigilo (new curated)
- refactor(tags/trait): prune obsolete traits — arma_pesada_sin_dotacion, eco_del_penasco removed; fatigado_cronico→fatigado; 15 trait mappings applied (voz_grave→rasgo.voz_grave, sangre_fria→imperturbable, obstinado→terco, paciente→imperturbable, parco→discreta, metodico→confiable, pragmatico→confiable, reservada→discreta, sombra_del_lider→confiable, objetivo_prioritario→vanguardia, panico_en_abierto→cobarde, recluta_novato→cobarde, vacio_de_mando→cobarde, voluntarioso→determinada, intelectual→discreta)
- refactor(mock/personajes): homologate all 22 YAMLs to curated tag catalog — replace all invalid trait/perk/skill slugs via explicit mapping; verify all 111 tag refs resolve to extant files
- refactor(mock/personajes/ejercito_rojo/paine): lealtad.faccion.comunidad_mapuche→lealtad.faccion.ejercito_rojo + add rasgo.rasgos_mapuche (identity preservation across faction alignment)
- feat(mock/personajes): enrich 3 patagónicos confederados (aguirre, pereyra, lugones) with subfaccion.pelicanos; enrich 7 red army rojos with subfaccion.ejercito_revolucionario_del_pueblo (mansilla, iturra, carcamo, soriano, belenchini, bordon, bordagaray)
- feat(mock/personajes): add 1 coherent perk to leaders/snipers without prior perk (estoico for líderes, cobertura for apuntadores); maintain recruits perk-free by heuristic
- chore: 22 YAMLs parse OK; 111 unique tag refs all resolve; no schema breaks; bloque identidad/atributos/historia/historial/aliados/nemesis/metadatos/extras untouched
- group: prd-reconciliacion-catálogo-mvp
priority: normal
commit: 88b5b5e
changes:
- docs(prd/§7.5): apuntador skill reference
tiro_de_precision → precision (aligned to curated catalog)
- docs(prd/§8.5): milestone example slugs updated (
Lectura de columna→terreno, Cobertura instintiva→cobertura, rifle militar→rifle_militar, Miope→cobarde/confiable); example narrative modified to reflect trait coherence
- docs(prd/§13.6): trait polarity examples updated from obsolete names (
Sangre fría/Voz grave/Obstinado/Miope/Objetivo prioritario) to curated catalog (imperturbable/veloz/impredecible/cobarde/fatigado); design argument unchanged
- docs(prd/§13.9): "catálogo canon de 70 tags semilla (sección 9.1)" → "catálogo curado MVP"; removed dangling reference to non-existent section 9.1
- docs(prd/§11 Dentro de v1): "Pools canon ... metadato
rangos_naturales" → "Pools curados de skill/trait/perk en tags/" (metadato not declared, only catalog structure mentioned)
- group: peso-field-equipo
priority: high
commit: dd0a45f
changes:
- feat(schema): add
peso as conditional obligatory field (+) for categoria=equipo in tag-modelo.md §4.2; type int (0..50) kilograms; documented with hint that peso differs from peso_narrativo (sorter hint 1..5)
- feat(docs/tag-modelo.yaml): add
peso: 1 example to tag template skeleton
- feat(mock/tags/equipo): apply realistic WWII-era
peso values to all 24 equipo tags (pistol 1kg, SMG 4kg, rifle 5kg, ametralladora 11kg, mapa/cuaderno 0kg, radio 5kg, vestiduras 2kg, etc.)
- group: tag-requeridos-soft-protocol
priority: high
commit: 2ea3b9d
changes:
- feat(docs): new file
tag-requeridos-por-categoria.md — soft-protocol index of all conditional obligatory fields (+) by categoria and subcategoria; cross-references tag-modelo.md §4.2; maintained by orchestrator on each new rule
- group: tag-system-redesign
priority: high
commit: 245cf4a
changes:
- refactor(docs/tag-modelo): restructure from closed canon to universal mechanics + curated examples; move prosa explaining tag universality to §1; declare agnosis principle for renderers
- feat(docs/tag-modelo): new system
requires with require_all and require_any sub-blocks; NOT modifier as literal "no:" prefix in strings (no nested objects); complete example with perk.tirador_preciso
- feat(docs/tag-modelo): document derived containers
aliados and nemesis in §5 as computed views from lealtad.pj.* and nemesis.pj.*; no band restriction for nemesis (traición intra-bando allowed); start empty, populate at serve time
- feat(docs/tag-modelo): formalize four obligatory catálogo fields
slug, nombre (new — human-readable label for renderers), categoria, descripcion; all else optional
- feat(docs/tag-modelo): new optional fields
excluye, tags_relacionados, peso_narrativo; category-specific blocks for perk, aspecto, skill, equipo.arma, equipo.vestidura
- refactor(docs/tag-modelo.yaml): rewrite as demonstrative template; four mandatory fields at top; all other blocks marked OPCIONAL with comments; no templates for future tag types (montura, vicio, mascota)
- feat(prd): new bullet "Agnosis al renderer" in §4 Principios de diseño; §6.3 documents
aliados and nemesis as derivados; new subsection §6.7 "Coherencia declarativa: el bloque requires" cross-referencing tag-modelo.md §4.3
- docs(prd/oq): close OQ-tag-2 (slug is now explicit obligatory field); open OQ-tag-4 ("does
excluye add value over no: in require_all? consolidate?")
- group: prd-roadmap-agnosis
priority: high
commit: 612c23c
changes:
- feat(prd): §16 Roadmap y naturaleza del entregable — canonical phase gate (Hito 1 ACTIVE, Hito 2–3 BLOCKED)
- feat(prd): §16.1 naturaleza agnóstica — PRD devoid of lang/framework/stack, only schema + algo + tests
- feat(prd): §16.2–16.4 three milestones with explicit blocking comment on Hito 2 (Docker) and Hito 3 (squad system)
- feat(prd): §16.5 scope exclusion — no HTTP, no DB, no auth, no UI while Hito 2–3 blocked
- refactor(changelog): references in v0.3.0 and v0.4.0 "sección 16" updated to point §17 (Aspectos renumbered)
- group: hoja-modelo-refactor-prd-canonize
priority: high
commit: c01b6aa
changes:
- refactor(docs): split hoja-modelo into yml template (89L programmatic) and md narrative reference (111L)
- feat(prd): §7.2.1 tabla estado_vital by range; §9.5 cambio_estado_vital in canonical milestones; §15 OQs #17-20 (fatigue/moral thresholds, triple_cero recalibration, estado_vital canonization)
- chore(docs): reduce combined hoja-modelo footprint 52% (200 vs 421 lines); mocks intact
- group: estado-vital-block
priority: high
commit: 823b5a3
changes:
- feat(schema): introduce ESTADO_VITAL block with fatiga/moral tracking in hoja-modelo
[0.4.1] - 2026-05-24
Changed
- Todos los tags del sistema reducidos a forma mínima (1-2 palabras, sin prosa interna, sin paréntesis, sin guiones largos, sin comas). Principio rector: el tag es identificador; el contexto narrativo vive en
historia, en el catálogo /meta/*, o en una futura entidad notas.
- Aplicado en los 22 mocks YAML más ejemplos Aguirre y Mansilla del PRD más hoja ASCII canónica del Comandante Miguel. Total 638 tags mantenidos (igual count); valores únicos consolidados de 190 a 159 por eliminación de sinónimos:
Oratoria de muelle + Oratoria sindical → Oratoria; Manejo de FAP Confederado M2A + Manejo de FAP Modelo 45 + Carga del FAP → Manejo de ametralladora; cargador 7.62 + cargador 9mm + cargador 7.65 Mauser + cargador 7.92 Mauser → cargador; entre otros.
- Información contextual incrustada en tags eliminada (
brújula de oficial — regalo del instructor de Stroeder, cuaderno de campaña — anotaciones de terreno, firma con la inicial R en el margen, calibres de cargador, modelos específicos de armas). Lo documentado en prosa de historia se preserva; lo solo incrustado en tag y no en prosa se acepta como pérdida funcional — costo del minimalismo.
Added
- Tensión 13.11 al PRD: trade-off entre tag mínimo y riqueza contextual.
- OQ #16 nueva: futura entidad
notas: array<{tag_ref, texto}> como capa enriquecida opcional para tags que ameriten contexto persistido.
- OQ #13 (cargadores genéricos) marcada resuelta: genericidad a
cargador implícitamente cierra la pregunta de simetría con armas.
Notes
- Commits:
a1d5e66 y merge d385875 (2026-05-24).
- PRD bumped a v0.4.1 (parche, refinamiento). PRD ahora 1550 líneas. Total tags semilla canon: 80 (sin cambios).
- Validación con script Python: cero tags con paréntesis, guiones largos, comas; máximo 4 palabras solo en nombres propios canon (Brazo derecho funcional, Arma pesada sin dotación, Veterano de flanqueo). 22 mocks parseables.
[0.4.0] - 2026-05-24
Added
- Categoría
aspecto promovida de "reservada" (v0.3.0 sección 16) a implementación efectiva. Pool semilla de 10 aspectos canon: 3 dados por el cliente (cabrón, ojo-de-halcón, muy-fuerte) más 7 curados (cobarde, carismático, terco, veloz, veterano-cicatrizado, devoto, impredecible). Cada aspecto es un tag corto kebab-case con efecto mecánico embebido como mini-frase (probabilístico, condicional, bonus, o activa otros tags).
- Nuevo bloque ASPECTOS en la hoja ASCII canónica del Comandante Miguel (
[cabrón]). Ejemplo Aguirre con aspecto ojo-de-halcón (coherente con su skill "Lectura de terreno boscoso"). Ejemplo Mansilla con aspecto carismático (coherente con su skill "Oratoria sindical").
- Endpoint
/meta/aspectos con los 10 aspectos canon, formato {valor, efecto, activa_tag?}. Campo activa_tag opcional estructurado para los aspectos que disparan tags transitorios (berserker, pánico); el resto deja el efecto como string libre.
- Tipos de hito
agregar_aspecto y quitar_aspecto con metadata: {valor, motivo} en sección 9.5. Aspectos son mutables como skills/traits/perks.
- Patrón implícito de tags activables (
berserker, pánico) reconocido como sub-categoría conceptual estado_temporal. No canonizado con valores fijos; el motor downstream los identifica por nombre.
Changed
- Sección 16 promovida de "Próximas olas — preview de aspectos" a "Aspectos — capa narrativa-mecánica". Contexto histórico preservado. Apuntada como próxima ola especulativa: aspectos largos al estilo H.I.T.O.S./Cultos Innombrables clásico (frases narrativas de 10-25 palabras), distintos de los aspectos cortos canon de v0.4.0.
Notes
- Commits:
1cb98ab y merge 02acc20 (2026-05-24).
- PRD bumped a v0.4.0 (mayor — feature nueva). PRD ahora 1525 líneas. Total tags semilla: 80 (70 + 10 aspectos).
- Los 22 mocks en
mock/personajes/ NO fueron tocados — aspectos solo se materializan en los 2 ejemplos del PRD y en la hoja ASCII de Miguel. Ola separada (futura) puede agregar aspectos al corpus de 22.
- Tensión 13.10 nueva sobre efecto en texto libre (motor debe interpretar mini-frase, igual que customs de perks). OQ #14 nueva sobre polaridad explícita de aspectos. OQ #15 nueva sobre versionado del catálogo
/meta/aspectos.
- Diferencia formal documentada:
aspecto (tag con efecto mecánico) vs trait (sin efecto mecánico) vs perk (pool fijo del reglamento).
[0.3.2] - 2026-05-24
Fixed
- Header de la hoja ASCII canónica de Miguel sincronizado a schema v0.3.1 (decía v0.2.5 porque el worker de v0.3.0/v0.3.1 no bumpeó esa referencia interna).
Removed
- OQs #4 (restricción de perks por rol — cerrada por subordinación) y #14 (futuro de
armor — cerrada con resolución eliminación) eliminadas de la sección Open Questions. OQs restantes renumeradas (15 → 13 vivas).
- Bullet duplicado de
fza_aportada (la regla de derivación estaba documentada dos veces).
Changed
- Tabla 7.11 "Pool curado rango × facción" actualizada con los 6 valores genéricos del catálogo
equipo.arma v0.3.1. Columnas de "alcance" eliminadas donde el valor genérico las hacía redundantes.
- Referencias a OQ #14 en texto activo actualizadas; menciones en changelog histórico conservadas como registro válido.
Notes
- PRD pasó de 1417 a 1421 líneas. El delta positivo viene del propio bloque de changelog v0.3.2; el cuerpo del PRD se redujo unas 4 líneas netas.
- Preservadas: referencias intencionales a "Artillero FAP" como nombre cultural del rol (no tag de arma) y "Manejo de FAP" como nombre de skill canon (no tag de arma).
- Sin cambios al sistema de tags ni al catálogo
/meta/*. Sin tocar los 22 mocks.
[0.3.1] - 2026-05-24
Changed
- Catálogo
equipo.arma rectificado de 10 valores específicos (Fusil FAL, FAP, Subfusil Halcón, Mauser 1909, etc.) a 6 genéricos: pistola, revolver, rifle, rifle militar, SMG, ametralladora. Coherente con la rectificación previa de vestidura. Detalle específico (calibre, modelo, óptica) se difumina; la diferenciación mecánica de tipos pesados (artilleros) se preserva con ametralladora como sexto tag.
- 22 YAMLs normalizados con el nuevo catálogo. Distribución resultante: 30
rifle militar, 12 SMG, 4 pistola, 4 ametralladora, 0 rifle, 0 revolver. rifle y revolver quedan en catálogo sin uso actual (disponibles para personajes futuros).
- "Cuchillo de campo" (Funes) y "Cuchillo de trabajo" (Calfucurá) movidos de
equipo.arma a equipo.utilitario — no son armas de fuego, no encajan en el catálogo nuevo, pero son equipamiento narrativo legítimo.
Removed
- Del catálogo de armas — bayoneta y granada de mano (implícitas en rifle militar / pueden aparecer como tags emergentes si la prosa lo justifica).
Added
- OQ #15 — "¿Cargadores por calibre (7.62, 9mm, 7.65) deberían también generizarse a
munición rifle / munición pistola / munición SMG? La rectificación de armas abre la pregunta de simetría. Sin decidir."
Notes
- PRD bumped a v0.3.1. PRD ahora 1417 líneas. Total tags semilla: 70 (74 − 4 por armas: de 10 a 6).
[0.3.0] - 2026-05-24
Removed
- Concepto
armor eliminado del sistema entero. Sin armaduras estructurales, sin defensa numérica. Cerrada OQ #14 con resolución (a). Si en el futuro hace falta defensa, vuelve como tag trait: blindado o derivado de skill defensiva.
Changed
- "Fusil de cerrojo Springfield 1903 con mira" reemplazado por "Fusil Mauser 1909 con mira" en ficha de Antinao (Springfield no era canon del lore SyV). Cargadores 30-06 → 7.65 Mauser (calibre canon del Mauser argentino 1909). Reemplazos en
mock/ejercito_rojo/03_antinao.yaml.
Added
- Catálogo canon
/meta/* materializado con 74 tags semilla (10 por categoría × 7 categorías abiertas + 4 vestiduras fijadas). Endpoints /meta/rasgos, /meta/roles, /meta/skills, /meta/traits, /meta/perks, /meta/equipo/armas, /meta/equipo/utilitarios, /meta/equipo/vestiduras documentados. Vestidura cerrada (4 valores); resto como semilla abierta — usuarios futuros agregan customs.
- Sección 16 nueva — preview arquitectónica de la próxima ola "Aspectos como frases (H.I.T.O.S. / Cultos Innombrables)". Reserva la categoría
aspecto para v0.4.0 como capa narrativa de alto nivel (frases largas distintas de los traits cortos). Sin implementar todavía.
- Tensión 13.9 nueva — "Catálogo
/meta/* como semilla, no como autoridad". Formaliza el principio del cliente sobre customs.
Notes
- PRD bumped a v0.3.0 (mayor — cierre de fase). PRD ahora 1402 líneas.
[0.2.6] - 2026-05-24
Changed
- Sub-categoría de tag
equipo.armadura renombrada a equipo.vestidura. Cambio conceptual: la vestidura es identidad visual del combatiente, no protección estructural. Catálogo canon reducido a 4 valores genéricos: ropa de civil, uniforme rojo, uniforme confederado, camuflaje básico. Aplicado en PRD.md y en los 22 mocks: 11 confederados con uniforme confederado, 8 rojos con uniforme rojo, 3 rojos con ropa de civil (Paine por identidad mapuche con contradicción; Bordón universitario voluntario reciente; Maturana captado sin convicción ideológica). camuflaje básico queda disponible en catálogo sin uso en el corpus actual.
Removed
- Accesorios identitarios menores eliminados como tags. 5 ocurrencias de
brazalete rojo del Pueblo removidas de equipo.utilitario en los mocks rojos. El criterio "nada de brazaletes, botas, accesorios menores" se documenta en el PRD: la identidad de facción se expresa por la vestidura completa, no por piezas sueltas.
Added
- OQ #14 abierta: tras el cambio conceptual de armadura a vestidura, el campo derivado
armor queda huérfano (ya no se deriva de algo coherente). Opciones documentadas: eliminar el concepto, volverlo escalar independiente, o derivarlo de otra fuente (rol_id, etc.). Pendiente decisión del cliente.
Notes
- Valores históricos "chaleco antifragmentos reglamentario" y "chaleco antifragmentos rústico" introducidos en v0.2.4 quedan obsoletos. Las menciones residuales a
equipo.armadura en el changelog del PRD y en OQs explicativas se preservan intencionalmente como referencias históricas, no como categorías activas.
[0.3.0] - 2026-05-24
Added
- Materialización de los 22 personajes mock (11 Confederación + 11 Ejército Rojo) como archivos YAML en
mock/personajes/{faccion}/{nn}_{apellido}.yaml
- Conformidad total al schema v0.2.0/v0.2.1
- Transcripción fiel desde
/Dev/syv-battle-game-system/personajes/ enriquecida con campos nuevos
- Campos incluidos: edad, género, origen geográfico, apariencia estructurada, lealtades, vínculos intra-escuadra, historial retrospectivo, equipo táctico minimal
- Distribución de género: 3 mujeres + 1 no-binario en Confederación, 2 mujeres en Ejército Rojo
- 32 vínculos intra-escuadra documentados
- Vínculo asimétrico canon Mansilla→Aguirre como
rival
- Total: 2215 líneas YAML
[0.2.5] - 2026-05-24
Changed
- Delta v0.2.3 — Rango ≠ Rol:
rol_id removido del payload público (pasa a interno del motor); mando migrado de enum {titular|suplente|no_apto} a bool (capacidad), con la titularidad actual derivada de (mando=true AND mayor rango en la escuadra); estado_salud valor activo renombrado a saludable para no chocar con el nuevo campo estado.
- Delta v0.2.4 — Aspectos disueltos en tags: bloque
aspectos eliminado entero. Sus contenidos migran a tres nuevas categorías canon de tags: skill (habilidades), trait (rasgos sin polaridad fija — incluye lo que antes eran complicaciones), perk (ventajas activables). equipo reformulado: armas/utilitarios/armaduras se expresan como tags con categoría jerárquica equipo.arma, equipo.utilitario, equipo.armadura. fza_aportada y equipo.armor pasan a regla derivada (no persistidos).
- Delta v0.2.5 — Escuadra y filiación:
peloton renombrado a escuadra; nombre_de_campo renombrado a sobrenombre; nueva entidad implícita escuadra con id+nombre+cuerpo+facción; nuevo campo derivado filiacion (provisorio) que compone "{rango} de la {escuadra.nombre} del {escuadra.cuerpo}". Orden definitivo de cabecera: nombre → sobrenombre → filiacion → facción → datos biológicos → rol → estado → rango → escuadra → mando.
Added
- Sección nueva "Hoja ASCII de referencia" con el ejemplo del Comandante Miguel Quilodrán (Líder Revolucionario, Escuadra Mardones del ERP) aprobado por el cliente como representación visual canónica.
- Píldora de arquitectura nueva sobre tags como inverted index, afinidad NoSQL/document-store.
- Tensión nueva sobre traits sin polaridad explícita.
- 4 open questions nuevas (nombre final de
filiacion, polaridad de traits, derivación de armor total, endpoint /meta/escuadras).
Removed
- Campos
rol_id, origen_geografico, fza_aportada (como persistido), especialidad, nombre_de_campo, equipo.armor (escalar).
- Bloque entero
aspectos.
- Enum
mando: {titular|suplente|no_apto}, valor activo de estado_salud.
Notes
- Los 22 mocks materializados (v0.3.0) siguen al schema v0.2.0/v0.2.1 y requieren regeneración al schema v0.2.5 en iteración separada.
[0.2.2] - 2026-05-24
Changed
- Reforma estructural completa del schema de personaje
- Identidad nominal desdoblada:
nombre (identidad real) separado de nombre_de_campo (cómo se conoce a la unidad), más especialidad para Ejército Rojo que define el título de campo
- Sistema de mando desacoplado de
rol_id: nuevo enum mando: {titular | suplente | no_apto} permite múltiples unidades del mismo rol_id en la escuadra con una sola titular vigente
- Sistema híbrido unificado: bloques
apariencia, equipo.armas[] y equipo.equipo_tactico[] eliminados; unificación bajo tags: array<{categoria, valor}> repetibles y agrupables por categoría
- Categorías canon de tags:
rasgo, equipo, rol; abiertas a nuevas categorías
tags_iniciales redefinido como snapshot completo de tags[] al momento de creación
equipo.armor queda como único campo escalar residual
Added
- Nuevo rol canon
lider_revolucionario para Ejército Rojo
- Sección "Píldoras de arquitectura" con nota sobre afinidad NoSQL/document-store
- Open question #5 sobre versionado y curación de categorías canon de tags
Removed
- Bloque
apariencia (breaking change)
equipo.armas[] (breaking change)
equipo.equipo_tactico[] (breaking change)
- Campo
tag_rol (breaking change)
Notes
- Los 22 mocks materializados (v0.3.0) quedan al schema v0.2.0/v0.2.1 y requieren regeneración en iteración separada
[0.2.1] - 2026-05-24
Changed
- Cierre taxativo de 4 open questions del PRD v0.2.0
- Edad es
integer simple sin mecánica de envejecimiento; tipos de hito cumpleaños y paso_del_tiempo eliminados
- Historial sin límite, inline completo (no fragmentado)
- Cambios de
rol_id post-creación realinean tag_rol y fza_aportada sin tocar atributos (los atributos son propiedad del personaje, no del rol)
POST /canonize es idempotente por la tripleta (seed, faccion, rol_id)
Fixed
- Resolución de ambigüedades sobre mutabilidad de edad y evolución temporal
- Clarificación de invariantes post-cambio-de-rol
Opened
- 4 open questions pendientes: gobernanza de
POST /event, mutabilidad fina de apariencia, interpretación de customs por motor, endpoint GET /character/{id}/original
[0.2.0] - 2026-05-24
Changed
- Reescritura completa del PRD introduciendo el concepto de "memoria viva con experiencia"
- Los personajes canonizados evolucionan, acumulan hitos, suben atributos, mutan vínculos y equipamiento
- Identidad expandida: edad, género, origen, apariencia, lealtades estructuradas
- Historial de hitos con metadata libre
- Vínculos a otros personajes
- Equipo táctico
- Bloque extras para extensibilidad
Fixed
- Cierre de 4 open questions del v0.1.0:
- Canonización solo en DB
- Historia LLM se congela
- Sin versionado de payload por SOLID/open-close
- Restricción de perks por rol soft 80/20
Added
- 5 tensiones explícitas documentadas
- Múltiples bloques nuevos para soporte de evolución de personajes
Removed
version_canon (breaking change)
armas[].nota (breaking change)
[0.1.0] - 2026-05-23
Added
- PRD inicial de syv-character-kit MVP
- Schema base de personaje con 6 roles canon
- Tabla de 22 mocks: 11 Confederación + 11 Ejército Rojo
- Reglas de generación dinámica con seed reproducible
- Endpoints de alto nivel
- 8 open questions documentadas