mirror of
https://github.com/Earth-Genesis-Games/Ajedrez_Purgatorio.git
synced 2026-09-11 09:47:35 +00:00
docs: artifacts de /architecture-review (145 TRs, matriz de trazabilidad, veredicto CONCERNS)
This commit is contained in:
@@ -38,7 +38,7 @@ editarse sin recompilar. Se usan `PieceIdentity`, `AIPositionTables`, `BalanceCo
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| **Depends On** | ADR-0000 (Accepted) — estancia 3: SO de estado runtime como fuente de verdad; ADR-0004 (Proposed) |
|
||||
| **Depends On** | ADR-0000 (Accepted) — estancia 3: SO de estado runtime como fuente de verdad; ADR-0004 (Accepted) |
|
||||
| **Enables** | Data-driven sin recompilar; editor tools de balance |
|
||||
| **Blocks** | None |
|
||||
| **Ordering Note** | La serialización de `CampaignState` requiere capa JSON propia (limitación `JsonUtility` con objetos anidados) |
|
||||
|
||||
@@ -37,7 +37,7 @@ de escenas separadas, requiriendo pausar/resumir el gameplay (ADR-0007).
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| **Depends On** | ADR-0000 (Accepted); ADR-0007 (Proposed) — pausa con `Time.timeScale` |
|
||||
| **Depends On** | ADR-0000 (Accepted); ADR-0007 (Accepted) — pausa con `Time.timeScale` |
|
||||
| **Enables** | Flujo de dados sin perder contexto del tablero; UX del VS |
|
||||
| **Blocks** | None |
|
||||
| **Ordering Note** | Requiere pausar/resumir gameplay (ADR-0007) |
|
||||
|
||||
@@ -37,7 +37,7 @@ Zobrist hashing. El hash se genera desde el estado del tablero y la repetición
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| **Depends On** | ADR-0000 (Accepted); ADR-0001 (Proposed) — `DrawDetector` como servicio POCO |
|
||||
| **Depends On** | ADR-0000 (Accepted); ADR-0001 (Accepted) — `DrawDetector` como servicio POCO |
|
||||
| **Enables** | Detección de tablas por triple repetición (sistema 8) |
|
||||
| **Blocks** | None |
|
||||
| **Ordering Note** | None |
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
# Architecture Review Report
|
||||
|
||||
Date: 2026-08-16
|
||||
Engine: Unity 6.3 LTS (6000.3.13f1)
|
||||
GDDs Reviewed: 9 (`systems-index`, `ai-system`, `dice-system`, `campaign-system`,
|
||||
`dialogue-system`, `piece-identity`, `dead-kings`, `game-concept`, `game-pillars`)
|
||||
ADRs Reviewed: 10 (ADR-0000 … ADR-0009, all **Accepted**)
|
||||
|
||||
---
|
||||
|
||||
## Traceability Summary
|
||||
|
||||
Total requirements: 145
|
||||
- ✅ Covered: 51 (35%)
|
||||
- ⚠️ Partial: 27 (19%)
|
||||
- ❌ Gaps: 67 (46%)
|
||||
|
||||
Full matrix: `docs/architecture/traceability-index.md`
|
||||
Registry: `docs/architecture/tr-registry.yaml` (version 2, 145 TRs active)
|
||||
|
||||
### Coverage Gaps (no ADR exists)
|
||||
|
||||
Concentrated in Feature-layer systems with no dedicated ADR. Top gaps by system:
|
||||
|
||||
| System | Gaps | Suggested ADR | Domain | Engine Risk |
|
||||
|--------|-----:|---------------|--------|-------------|
|
||||
| dice | 15 | ADR-0011 — Dice/Purgatorio (reglas, estado, persistencia) | Gameplay Logic | LOW |
|
||||
| piece-identity | 10 | ADR-0010 — Piece Identity (máquina de estados) | Gameplay Logic | LOW |
|
||||
| dialogue | 13 | ADR-0012 — Dialogue (nodos, branching, presentación) | Gameplay Logic/UI | LOW |
|
||||
| dead-kings | 13 | ADR-0013 — Dead Kings (input, pool, spawn) | Gameplay Logic/Persistence | LOW |
|
||||
| sfx/music | 2 | ADR-0014 — Audio/SFX (buses y gestión) | Audio | MEDIUM |
|
||||
| cloud-sync | 1 | (Full Vision, fuera de MVP) | Networking | MEDIUM |
|
||||
| vs / game-pillars / others | 8 | Alcance VS, backend pool (P3) | — | LOW |
|
||||
|
||||
Notable coverage strengths: Foundation/Core layer is fully covered — Board
|
||||
(ADR-0001), Scene Management (ADR-0009), Game State (ADR-0003/0009), Save/Load
|
||||
(ADR-0004), HUD (ADR-0000), Draw Detection (ADR-0008), AI strategies
|
||||
(ADR-0002/0001), Campaign data (ADR-0005), Dice UI overlay (ADR-0006/0007).
|
||||
|
||||
## Cross-ADR Conflicts
|
||||
|
||||
No real conflicts detected. Two minor documentation issues (not conflicts):
|
||||
|
||||
1. **Stale status references** — three ADRs reference dependencies as
|
||||
`(Proposed)` even though those ADRs are now Accepted:
|
||||
- ADR-0005 (line 41): `Depends On` ADR-0004 "(Proposed)"
|
||||
- ADR-0006 (line 40): `Depends On` ADR-0007 "(Proposed)"
|
||||
- ADR-0008 (line 40): `Depends On` ADR-0001 "(Proposed)"
|
||||
→ Cosmetic; fix the labels to `(Accepted)`. No impact on implementation order.
|
||||
|
||||
2. **ADR-0009 duplicate reference** — ADR-0009 (consolidación SceneTransitionManager)
|
||||
is a special case: it is the *resolution* of the duplicate-manager anti-pattern
|
||||
from ADR-0000 (estancia 5) rather than a new pattern. No contradiction.
|
||||
|
||||
## ADR Dependency Order
|
||||
|
||||
Topologically sorted implementation order (all 10 Accepted):
|
||||
|
||||
```
|
||||
Foundation (no dependencies):
|
||||
1. ADR-0000 — Patrones de Infraestructura Global
|
||||
Depends on Foundation:
|
||||
2. ADR-0001 — Service Layer POCO (requiere ADR-0000)
|
||||
3. ADR-0003 — Event-Driven Communication (requiere ADR-0000)
|
||||
4. ADR-0004 — Singleton Dual (requiere ADR-0000)
|
||||
5. ADR-0007 — Timescale y Pausas (requiere ADR-0000)
|
||||
Depends on the above:
|
||||
6. ADR-0002 — Strategy Pattern IA (requiere ADR-0001, ADR-0004)
|
||||
7. ADR-0005 — ScriptableObject Data Container (requiere ADR-0004)
|
||||
8. ADR-0006 — Overlay UI (requiere ADR-0007)
|
||||
9. ADR-0008 — Position Hashing / FEN-like (requiere ADR-0001)
|
||||
Resolution ADR:
|
||||
10. ADR-0009 — Consolidación SceneTransitionManager (requiere ADR-0000, ADR-0004)
|
||||
```
|
||||
|
||||
Unresolved dependencies: none. Cycles: none. The three `(Proposed)` labels in
|
||||
ADR-0005/0006/0008 are already satisfied — their dependencies are Accepted.
|
||||
|
||||
## GDD Revision Flags
|
||||
|
||||
No GDD revision flags — all GDD assumptions are consistent with verified engine
|
||||
behaviour (Unity 6.3 LTS, no post-cutoff APIs, deprecated APIs accepted as debt).
|
||||
|
||||
## Engine Compatibility Issues
|
||||
|
||||
```
|
||||
### Engine Audit Results
|
||||
Engine: Unity 6.3 LTS (6000.3.13f1)
|
||||
ADRs with Engine Compatibility section: 10 / 10
|
||||
|
||||
Deprecated API References:
|
||||
- ADR-0000: legacy `Input` + `Resources.Load` — documented as accepted debt
|
||||
(verificado contra deprecated-apis.md)
|
||||
|
||||
Stale Version References:
|
||||
- None — all 10 ADRs pinned to Unity 6.3 LTS
|
||||
|
||||
Post-Cutoff API Conflicts:
|
||||
- None — all ADRs report Post-Cutoff APIs Used: "None"
|
||||
```
|
||||
|
||||
Note: `unity-specialist` subagent not available in this environment. Not
|
||||
blocking — no ADR uses post-cutoff APIs, so there is nothing for a specialist to
|
||||
verify beyond the audit, which passed.
|
||||
|
||||
## Architecture Document Coverage
|
||||
|
||||
- All systems from `systems-index.md` appear in the architecture layers
|
||||
(Foundation → Core → Feature → Presentation → Polish).
|
||||
- Data flow covers cross-system communication (events from ADR-0003).
|
||||
- No orphaned architecture (no systems in the doc without a GDD).
|
||||
- `architecture.md` was updated in-session: STM consolidation (ADR-0009) and
|
||||
`AIController` (ADR-0002) reflected; problem #1 (manager duplicado) resolved.
|
||||
|
||||
---
|
||||
|
||||
### Verdict: CONCERNS
|
||||
|
||||
No blocking conflicts and a fully covered Foundation/Core layer, but the
|
||||
signature Feature-layer systems (Dice/Purgatorio, Piece Identity, Dialogue,
|
||||
Dead Kings) and Audio have no dedicated ADRs. They can be implemented against
|
||||
existing ADRs, but the risk of un-architected decisions (state ownership,
|
||||
data schemas, cross-system contracts) grows the longer they go un-ADR'd.
|
||||
|
||||
### Blocking Issues
|
||||
|
||||
None.
|
||||
|
||||
### Required ADRs
|
||||
|
||||
Prioritised (most foundational first):
|
||||
|
||||
1. **ADR-0010 — Piece Identity (máquina de estados)** — covers 10 gaps; other
|
||||
systems depend on piece state (tooltip, purgatorio eligibility).
|
||||
2. **ADR-0011 — Dice/Purgatorio (reglas, estado, persistencia)** — the
|
||||
signature mechanic; 15 gaps; defines dice state machine and outcome contract
|
||||
with Campaign.
|
||||
3. **ADR-0012 — Dialogue (nodos, branching y presentación)** — 13 gaps; defines
|
||||
DialogueNode schema and Game State handoff contract.
|
||||
4. **ADR-0013 — Dead Kings (input, pool y spawn)** — 13 gaps; defines pool
|
||||
persistence contract and spawn probability.
|
||||
5. **ADR-0014 — Audio/SFX (buses y gestión)** — 2 gaps; Polish layer, lowest
|
||||
priority before pre-production.
|
||||
|
||||
Re-run `/architecture-review` after each new ADR is written to verify coverage
|
||||
improves.
|
||||
+1189
-30
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,226 @@
|
||||
# Architecture Traceability Index
|
||||
|
||||
Last Updated: 2026-08-16
|
||||
Engine: Unity 6.3 LTS (6000.3.13f1)
|
||||
Generated by: /architecture-review (full)
|
||||
|
||||
## Coverage Summary
|
||||
|
||||
- Total requirements: 145
|
||||
- ✅ Covered: 51 (35%)
|
||||
- ⚠️ Partial: 27 (19%)
|
||||
- ❌ Gaps: 67 (46%)
|
||||
|
||||
Coverage by layer concentration: Foundation/Core layer systems (Board, Scene
|
||||
Management, Game State, Save/Load, HUD, Draw Detection, AI, Campaign, Dice UI)
|
||||
are covered. The gaps concentrate in **Feature-layer** systems that have no
|
||||
dedicated ADR: Dice/Purgatorio rules (15), Piece Identity (10), Dialogue (13),
|
||||
Dead Kings (13), plus audio (SFX/Music), cloud-sync, VS scope, and a few
|
||||
game-concept/pillar requirements.
|
||||
|
||||
## Full Matrix
|
||||
|
||||
| TR-ID | GDD | System | Requirement | ADR Coverage | Status |
|
||||
|-------|-----|--------|-------------|--------------|--------|
|
||||
| TR-board-001 | systems-index.md | board | Tablero 8x8 con casillas clickeables | ADR-0001 | ✅ |
|
||||
| TR-board-002 | systems-index.md | board | Board System es la base sin dependencias (Foundation Layer) | ADR-0001 | ✅ |
|
||||
| TR-scene-mgmt-001 | systems-index.md | scene-mgmt | Transiciones entre escenas vía SceneTransitionManager (Sprint 1) | ADR-0009 | ✅ |
|
||||
| TR-scene-mgmt-002 | systems-index.md | scene-mgmt | Soporta transiciones entre menú, tablero, diálogo y purgatorio | ADR-0009 | ✅ |
|
||||
| TR-game-state-001 | systems-index.md | game-state | Estados: menú, partida, diálogo, purgatorio y game over | ADR-0003, ADR-0009 | ✅ |
|
||||
| TR-game-state-002 | systems-index.md | game-state | Depende de Scene Management | ADR-0009 | ✅ |
|
||||
| TR-save-load-001 | systems-index.md | save-load | Estado de campaña persiste como CampaignState SO (parcial) | ADR-0004 | ✅ |
|
||||
| TR-save-load-002 | systems-index.md | save-load | Depende de Game State Manager | ADR-0004 | ✅ |
|
||||
| TR-hud-001 | systems-index.md | hud | HUD parcial implementado con PieceTooltip | ADR-0000 | ✅ |
|
||||
| TR-hud-002 | systems-index.md | hud | Depende de Piece Identity y Turn System | ADR-0003 | ⚠️ |
|
||||
| TR-draw-detection-001 | systems-index.md | draw-detection | Detecta stalemate, material insuficiente, threefold y 50 movimientos | ADR-0001, ADR-0008 | ✅ |
|
||||
| TR-ai-001 | systems-index.md | ai | Strategy pattern y 3 dificultades | ADR-0002 | ✅ |
|
||||
| TR-ai-002 | systems-index.md | ai | Depende de Piece Movement | ADR-0001 | ✅ |
|
||||
| TR-ai-003 | ai-system.md | ai | La IA siempre controla las piezas negras | ADR-0002 | ⚠️ |
|
||||
| TR-ai-004 | ai-system.md | ai | Dificultad configurada desde CampaignSystem vía ai_config | ADR-0002 | ✅ |
|
||||
| TR-ai-005 | ai-system.md | ai | think_time_ms por dificultad: Easy 300-600, Medium 500-900, Hard 800-1500 | ADR-0002 | ✅ |
|
||||
| TR-ai-006 | ai-system.md | ai | Todos los movimientos de la IA legales | ADR-0001 | ✅ |
|
||||
| TR-ai-007 | ai-system.md | ai | Easy random con preferencia de capturas | ADR-0002 | ✅ |
|
||||
| TR-ai-008 | ai-system.md | ai | Medium evalúa a 1 ply con score material+centro+seguridad | ADR-0002 | ✅ |
|
||||
| TR-ai-009 | ai-system.md | ai | Hard minimax con alpha-beta 2-3 ply | ADR-0002 | ✅ |
|
||||
| TR-ai-010 | ai-system.md | ai | Valores materiales de piezas | ADR-0002 | ✅ |
|
||||
| TR-ai-011 | ai-system.md | ai | Tablas posicionales cargadas desde datos configurables | ADR-0002 | ✅ |
|
||||
| TR-ai-012 | ai-system.md | ai | Eval completa (Hard): material + positional + mobility + seguridad + estructura | ADR-0002 | ✅ |
|
||||
| TR-ai-013 | ai-system.md | ai | Sin movimientos legales → tablas | ADR-0001 | ✅ |
|
||||
| TR-ai-014 | ai-system.md | ai | Corte de búsqueda a 5s con mejor movimiento encontrado (hard) | ADR-0002 | ✅ |
|
||||
| TR-ai-015 | ai-system.md | ai | Reducción de profundidad 3→2 si la búsqueda excede 200ms | ADR-0002 | ✅ |
|
||||
| TR-ai-016 | ai-system.md | ai | Empate de scores → elección aleatoria | ADR-0002 | ⚠️ |
|
||||
| TR-ai-017 | ai-system.md | ai | Estados Waiting, Thinking, Moving, Done; devuelve control al Turn System | ADR-0002 | ✅ |
|
||||
| TR-ai-018 | ai-system.md | ai | Indicador 'pensando' y deslizamiento suave de la pieza | — | ❌ |
|
||||
| TR-ai-019 | ai-system.md | ai | minimax_time_limit_ms = 5000 (rango 2000-10000) | ADR-0002 | ✅ |
|
||||
| TR-ai-020 | ai-system.md | ai | La IA ejecuta su movimiento llamando GameManager.MovePiece | ADR-0001, ADR-0003 | ✅ |
|
||||
| TR-dice-001 | systems-index.md | dice | Depende de Piece Identity y Turn System | ADR-0003 | ⚠️ |
|
||||
| TR-dice-002 | dice-system.md | dice | Purgatorio se activa opcionalmente al capturar pieza del jugador | ADR-0003 | ✅ |
|
||||
| TR-dice-003 | dice-system.md | dice | 2d6 vs 2d6; empate gana la Muerte; sin re-rolls | — | ❌ |
|
||||
| TR-dice-004 | dice-system.md | dice | player_roll = 2d6 + piece_bonus + desperation - penalty; death_roll = 2d6 | — | ❌ |
|
||||
| TR-dice-005 | dice-system.md | dice | piece_bonus por valor: Reina +2, Torre/Alfil/Caballo +1, Peón 0 | — | ❌ |
|
||||
| TR-dice-006 | dice-system.md | dice | purgatory_penalty = -1 acumulativo (rango 0-3) | — | ❌ |
|
||||
| TR-dice-007 | dice-system.md | dice | desperation_bonus = +1 si ≤4 piezas | — | ❌ |
|
||||
| TR-dice-008 | dice-system.md | dice | Victoria → recovered y regresa en el siguiente tablero | ADR-0005 | ⚠️ |
|
||||
| TR-dice-009 | dice-system.md | dice | Derrota → dead_permanent, nunca regresa | — | ❌ |
|
||||
| TR-dice-010 | dice-system.md | dice | Máximo 3 visitas por tablero; luego captura = muerte directa | — | ❌ |
|
||||
| TR-dice-011 | dice-system.md | dice | El Rey NUNCA activa el Purgatorio | — | ❌ |
|
||||
| TR-dice-012 | dice-system.md | dice | Resultado negativo clamp a mínimo 2 | — | ❌ |
|
||||
| TR-dice-013 | dice-system.md | dice | Capturas en secuencia → solo la última ofrece Purgatorio | — | ❌ |
|
||||
| TR-dice-014 | dice-system.md | dice | Cerrar durante el Purgatorio = 'No' (anti-exploit) | — | ❌ |
|
||||
| TR-dice-015 | dice-system.md | dice | Turn System se pausa durante el Purgatorio | ADR-0007 | ✅ |
|
||||
| TR-dice-016 | dice-system.md | dice | dice_animation_duration_ms = 2000 (rango 1000-4000) | — | ❌ |
|
||||
| TR-dice-017 | dice-system.md | dice | Impact moments configurables (silence/landing/reveal/flash) | — | ❌ |
|
||||
| TR-dice-018 | dice-system.md | dice | Probabilidades de victoria ~42% base, Reina ~58%, peón 3ª ~28% | — | ❌ |
|
||||
| TR-dice-019 | dice-system.md | dice | Dados animados con física simulada ('sobre piedra') | — | ❌ |
|
||||
| TR-dice-020 | dice-system.md | dice | Estados: Inactive, Offer, Rolling, Player Wins, Death Wins, Closed | ADR-0006 | ✅ |
|
||||
| TR-dice-021 | dice-system.md | dice | Resultado notificado a Campaign System para persistencia | ADR-0003 | ✅ |
|
||||
| TR-campaign-001 | systems-index.md | campaign | Implementado con CampaignState ScriptableObject | ADR-0005 | ✅ |
|
||||
| TR-campaign-002 | systems-index.md | campaign | Depende de Board System y Game State Manager | ADR-0001 | ✅ |
|
||||
| TR-campaign-003 | campaign-system.md | campaign | Secuencia lineal de capítulos sin selección de nivel | ADR-0005 | ⚠️ |
|
||||
| TR-campaign-004 | campaign-system.md | campaign | Cada capítulo: id, name, theme, diálogos, ai_difficulty, enemy_config, special_rules | ADR-0005 | ✅ |
|
||||
| TR-campaign-005 | campaign-system.md | campaign | Datos de capítulo desde JSON, incl. ai_config | ADR-0005 | ✅ |
|
||||
| TR-campaign-006 | campaign-system.md | campaign | Entre tableros: diálogo outro → memorial → diálogo intro | ADR-0005 | ⚠️ |
|
||||
| TR-campaign-007 | campaign-system.md | campaign | Ejército recalculado entre capítulos (alive/recovered vs dead_permanent) | ADR-0005 | ⚠️ |
|
||||
| TR-campaign-008 | campaign-system.md | campaign | Victoria = jaque mate enemigo o condición especial; derrota → Dead Kings | ADR-0003, ADR-0004 | ✅ |
|
||||
| TR-campaign-009 | campaign-system.md | campaign | effective_difficulty = base + (chapter_index * 0.5) | — | ❌ |
|
||||
| TR-campaign-010 | campaign-system.md | campaign | Progreso guardado al inicio de cada capítulo; no save mid-partida | ADR-0004 | ✅ |
|
||||
| TR-campaign-011 | campaign-system.md | campaign | Cierre a mitad de capítulo → reanuda al inicio del capítulo | ADR-0004 | ✅ |
|
||||
| TR-campaign-012 | campaign-system.md | campaign | Pieza recuperada NO disponible en el mismo tablero | ADR-0005 | ✅ |
|
||||
| TR-campaign-013 | campaign-system.md | campaign | Estados: Not Started, Dialogue, Board Active, Purgatory, Board Result, Memorial, etc. | — | ❌ |
|
||||
| TR-campaign-014 | campaign-system.md | campaign | memorial_duration_ms = 5000 (rango 2000-10000) | — | ❌ |
|
||||
| TR-campaign-015 | campaign-system.md | campaign | Scene Management realiza las transiciones entre escenas | ADR-0009 | ✅ |
|
||||
| TR-campaign-016 | campaign-system.md | campaign | Perder todas las piezas excepto el Rey → la partida continúa | ADR-0001 | ⚠️ |
|
||||
| TR-campaign-017 | campaign-system.md | campaign | Dificultad de IA escala entre capítulos | ADR-0002 | ✅ |
|
||||
| TR-campaign-018 | campaign-system.md | campaign | Un capítulo se desbloquea al completar el anterior | ADR-0005 | ⚠️ |
|
||||
| TR-dialogue-001 | systems-index.md | dialogue | GDD diseñado; depende de Campaign System | ADR-0005 | ⚠️ |
|
||||
| TR-dialogue-002 | dialogue-system.md | dialogue | Diálogos desde JSON/ScriptableObject, no hardcodeados | ADR-0005 | ⚠️ |
|
||||
| TR-dialogue-003 | dialogue-system.md | dialogue | Cada diálogo es una secuencia de nodos (DialogueNode) | — | ❌ |
|
||||
| TR-dialogue-004 | dialogue-system.md | dialogue | Cada nodo: speaker, portrait, text, next_node_id, conditions | — | ❌ |
|
||||
| TR-dialogue-005 | dialogue-system.md | dialogue | Avance con click/tecla; sin selección de respuestas en el VS | — | ❌ |
|
||||
| TR-dialogue-006 | dialogue-system.md | dialogue | Branching con condiciones (piece_alive, chapter_complete, pieces_lost) | — | ❌ |
|
||||
| TR-dialogue-007 | dialogue-system.md | dialogue | Quotes in-game de 1 nodo como overlay 1-2s sin pausar | ADR-0006 | ⚠️ |
|
||||
| TR-dialogue-008 | dialogue-system.md | dialogue | char_display_interval_ms = base_speed / multiplier | — | ❌ |
|
||||
| TR-dialogue-009 | dialogue-system.md | dialogue | Primer click texto completo, segundo avanza (anti-skip) | — | ❌ |
|
||||
| TR-dialogue-010 | dialogue-system.md | dialogue | Condición con pieza inexistente → false, nodo default | — | ❌ |
|
||||
| TR-dialogue-011 | dialogue-system.md | dialogue | Sin portrait → texto sin portrait (graceful) | — | ❌ |
|
||||
| TR-dialogue-012 | dialogue-system.md | dialogue | Sin default y todas false → salta al siguiente nodo | — | ❌ |
|
||||
| TR-dialogue-013 | dialogue-system.md | dialogue | capture_quote_duration_ms = 1500 (rango 500-3000) | — | ❌ |
|
||||
| TR-dialogue-014 | dialogue-system.md | dialogue | Estados: Inactive, Displaying, Waiting Input, Branching, Complete | — | ❌ |
|
||||
| TR-dialogue-015 | dialogue-system.md | dialogue | Notifica a Game State al terminar el diálogo | ADR-0003 | ⚠️ |
|
||||
| TR-dialogue-016 | dialogue-system.md | dialogue | Dice System dispara líneas contextuales de la Muerte | ADR-0003 | ⚠️ |
|
||||
| TR-dialogue-017 | dialogue-system.md | dialogue | typewriter_effect (true) texto gradual | — | ❌ |
|
||||
| TR-dialogue-018 | dialogue-system.md | dialogue | allow_skip (true); base_text_speed_ms = 30 (rango 15-60) | — | ❌ |
|
||||
| TR-piece-identity-001 | piece-identity.md | piece-identity | 16 piezas blancas asignan identidades del pool narrativo al iniciar campaña | ADR-0005 | ⚠️ |
|
||||
| TR-piece-identity-002 | piece-identity.md | piece-identity | Cada pieza: name, role, relationship, quotes[], isAlive | ADR-0005 | ✅ |
|
||||
| TR-piece-identity-003 | piece-identity.md | piece-identity | Identidades asignadas por tipo de pieza | ADR-0005 | ⚠️ |
|
||||
| TR-piece-identity-004 | piece-identity.md | piece-identity | Captura → nombre+quote, Purgatorio, isAlive = false si pierde | ADR-0003 | ⚠️ |
|
||||
| TR-piece-identity-005 | piece-identity.md | piece-identity | Muertos permanentes visibles en memorial entre partidas | — | ❌ |
|
||||
| TR-piece-identity-006 | piece-identity.md | piece-identity | Tipo extinto no se repone en tableros siguientes | — | ❌ |
|
||||
| TR-piece-identity-007 | piece-identity.md | piece-identity | Estados: Alive, Captured, In Purgatory, Recovered, Dead (Permanent) | — | ❌ |
|
||||
| TR-piece-identity-008 | piece-identity.md | piece-identity | Board consulta identidad para nombre/tooltip | ADR-0005 | ⚠️ |
|
||||
| TR-piece-identity-009 | piece-identity.md | piece-identity | Al morir la campaña, perfil del Rey alimenta Dead Kings | — | ❌ |
|
||||
| TR-piece-identity-010 | piece-identity.md | piece-identity | Reina muerta en el 1er tablero → seguir sin reina | — | ❌ |
|
||||
| TR-piece-identity-011 | piece-identity.md | piece-identity | Todos los peones muertos → tableros sin peones | — | ❌ |
|
||||
| TR-piece-identity-012 | piece-identity.md | piece-identity | Recuperada que cae puede ir al Purgatorio otra vez | — | ❌ |
|
||||
| TR-piece-identity-013 | piece-identity.md | piece-identity | Rey nunca al Purgatorio; mate → Dead Kings | — | ❌ |
|
||||
| TR-piece-identity-014 | piece-identity.md | piece-identity | Peón muerto permanente no se puede promover | — | ❌ |
|
||||
| TR-piece-identity-015 | piece-identity.md | piece-identity | Delay captura 1500ms, quotes 3 (2-5), memorial true | — | ❌ |
|
||||
| TR-piece-identity-016 | piece-identity.md | piece-identity | Sistema basado en datos, no en cálculos | ADR-0005 | ✅ |
|
||||
| TR-dead-kings-001 | systems-index.md | dead-kings | Depende de Campaign System y Persistencia | ADR-0004 | ⚠️ |
|
||||
| TR-dead-kings-002 | dead-kings.md | dead-kings | Trigger: jaque mate al Rey del jugador | ADR-0003 | ✅ |
|
||||
| TR-dead-kings-003 | dead-kings.md | dead-kings | Nombre máx 20, mensaje máx 100, filtrado de contenido | — | ❌ |
|
||||
| TR-dead-kings-004 | dead-kings.md | dead-kings | Datos: player_name, message, chapter_reached, pieces_lost, date, stats | ADR-0004 | ⚠️ |
|
||||
| TR-dead-kings-005 | dead-kings.md | dead-kings | Pool local JSON en persistentDataPath; futuro cloud | ADR-0004 | ✅ |
|
||||
| TR-dead-kings-006 | dead-kings.md | dead-kings | Máximo 100 Reyes; FIFO (remover antes de insertar) | — | ❌ |
|
||||
| TR-dead-kings-007 | dead-kings.md | dead-kings | Probabilidad Rey Muerto: 20% ch1, 40% ch2, 60% ch3 | — | ❌ |
|
||||
| TR-dead-kings-008 | dead-kings.md | dead-kings | spawn_chance = base + chapter*multiplier; solo si pool.count > 0 | — | ❌ |
|
||||
| TR-dead-kings-009 | dead-kings.md | dead-kings | Pool vacío → rey estándar predefinido | — | ❌ |
|
||||
| TR-dead-kings-010 | dead-kings.md | dead-kings | Capturar Rey Muerto → mostrar nombre/mensaje original | — | ❌ |
|
||||
| TR-dead-kings-011 | dead-kings.md | dead-kings | Visual distinto (corona rota, aura roja, nombre flotante) | — | ❌ |
|
||||
| TR-dead-kings-012 | dead-kings.md | dead-kings | Nombre vacío → 'Anónimo' | — | ❌ |
|
||||
| TR-dead-kings-013 | dead-kings.md | dead-kings | Contenido ofensivo → '***' sin bloquear envío | — | ❌ |
|
||||
| TR-dead-kings-014 | dead-kings.md | dead-kings | Pool corrupto → pool nuevo vacío + rey estándar | — | ❌ |
|
||||
| TR-dead-kings-015 | dead-kings.md | dead-kings | Enfrentar tu propio Rey Muerto (feature, no bug) | — | ❌ |
|
||||
| TR-dead-kings-016 | dead-kings.md | dead-kings | Debounce 500ms en botón de enviar | — | ❌ |
|
||||
| TR-dead-kings-017 | dead-kings.md | dead-kings | Estados: Inactive, Input Screen, Saving, Spawned, Revealed | — | ❌ |
|
||||
| TR-dead-kings-018 | dead-kings.md | dead-kings | Save/Load lee y escribe el pool de Dead Kings | ADR-0004 | ✅ |
|
||||
| TR-dice-ui-001 | systems-index.md | dice-ui | 3 pantallas UI: Offer, Roll y Result | ADR-0006 | ✅ |
|
||||
| TR-sfx-001 | systems-index.md | sfx | Bus de audio para efectos | — | ❌ |
|
||||
| TR-music-001 | systems-index.md | music | Depende de Scene Management | — | ❌ |
|
||||
| TR-cloud-sync-001 | systems-index.md | cloud-sync | Persistencia de Reyes Muertos en la nube (Full Vision) | — | ❌ |
|
||||
| TR-timeline-ii-001 | systems-index.md | timeline-ii | Reutiliza infraestructura existente en vez de duplicarla | ADR-0004 | ⚠️ |
|
||||
| TR-deps-001 | systems-index.md | deps | Capas Foundation → Core → Feature → Presentation → Polish | ADR-0000 | ⚠️ |
|
||||
| TR-vs-001 | systems-index.md | vs | Completar los 3 tableros del VS en 30-60 minutos | — | ❌ |
|
||||
| TR-vs-002 | systems-index.md | vs | El VS requiere ver al menos un Rey Muerto de otro jugador | — | ❌ |
|
||||
| TR-game-concept-001 | game-concept.md | game-concept | Plataforma PC, expandible a móvil | — | ❌ |
|
||||
| TR-game-concept-002 | game-concept.md | game-concept | Single-player asíncrono global; sin PvP directo | ADR-0004 | ⚠️ |
|
||||
| TR-game-concept-003 | game-concept.md | game-concept | Sesiones 15-30 min; campaña 1-2 horas | — | ❌ |
|
||||
| TR-game-concept-004 | game-concept.md | game-concept | Core loop: diálogo → partida → Purgatorio → diálogo → siguiente | ADR-0005, ADR-0009, ADR-0006 | ⚠️ |
|
||||
| TR-game-concept-005 | game-concept.md | game-concept | Derrota → escribir nombre+mensaje → pool global | ADR-0004 | ⚠️ |
|
||||
| TR-game-concept-006 | game-concept.md | game-concept | La Muerte aparece con dados al caer una pieza | ADR-0006 | ⚠️ |
|
||||
| TR-game-concept-007 | game-concept.md | game-concept | Dificultad creciente fuerza sacrificios tácticos | — | ❌ |
|
||||
| TR-game-pillars-001 | game-pillars.md | game-pillars | Identidad de piezas con estado persistente por campaña (P1) | ADR-0005 | ✅ |
|
||||
| TR-game-pillars-002 | game-pillars.md | game-pillars | Dados con estado propio, animación e integración con el tablero (P2) | ADR-0006, ADR-0003, ADR-0007 | ✅ |
|
||||
| TR-game-pillars-003 | game-pillars.md | game-pillars | El Purgatorio es opcional — el jugador elige (P2) | ADR-0006 | ✅ |
|
||||
| TR-game-pillars-004 | game-pillars.md | game-pillars | Backend de Reyes Muertos: pool JSON o cloud (P3) | — | ❌ |
|
||||
| TR-game-pillars-005 | game-pillars.md | game-pillars | Sin multijugador en tiempo real (P3) | — | ❌ |
|
||||
| TR-game-pillars-006 | game-pillars.md | game-pillars | Pool no infinito; Reyes antiguos se desvanecen (P3) | — | ❌ |
|
||||
| TR-game-pillars-007 | game-pillars.md | game-pillars | Campaña con progresión, configuración por tablero e IA (P4) | ADR-0005, ADR-0002 | ✅ |
|
||||
| TR-game-pillars-008 | game-pillars.md | game-pillars | Reglas especiales o condiciones de victoria únicas por tablero (P4) | — | ❌ |
|
||||
|
||||
## Known Gaps
|
||||
|
||||
Requirements without ADR coverage, grouped by system, priority order:
|
||||
Foundation/Core first, then Feature. Suggested ADR titles reference
|
||||
`/architecture-decision [title]`.
|
||||
|
||||
### Feature layer — Dice / Purgatorio (15 gaps)
|
||||
The dice confrontation rules, modifiers and persistence semantics have no ADR.
|
||||
These are the highest-value gaps: the Purgatorio is the game's signature mechanic.
|
||||
|
||||
- ❌ TR-dice-003, TR-dice-004, TR-dice-005, TR-dice-006, TR-dice-007 — fórmulas del enfrentamiento (2d6 vs 2d6, bonuses, penalties)
|
||||
- ❌ TR-dice-009, TR-dice-010, TR-dice-011, TR-dice-012, TR-dice-013 — semántica de resultado (dead_permanent, límite 3 visitas, Rey excluido, clamp, secuencia)
|
||||
- ❌ TR-dice-014 — anti-exploit (cerrar = 'No')
|
||||
- ❌ TR-dice-016, TR-dice-017, TR-dice-018, TR-dice-019 — configuración de animación, impacto y probabilidades
|
||||
|
||||
→ Suggested ADR: **ADR-0011 — Dice/Purgatorio (reglas, estado y persistencia)**
|
||||
Domain: Gameplay Logic · Engine Risk: LOW
|
||||
|
||||
### Feature layer — Piece Identity (10 gaps)
|
||||
- ❌ TR-piece-identity-005 (memorial), 006 (tipo extinto), 007 (estados), 009 (perfil → Dead Kings), 010/011 (pérdidas orgánicas), 012 (re-entrada), 013 (Rey excluido), 014 (promoción condicionada), 015 (config)
|
||||
|
||||
→ Suggested ADR: **ADR-0010 — Piece Identity (máquina de estados)**
|
||||
Domain: Gameplay Logic · Engine Risk: LOW
|
||||
|
||||
### Feature layer — Dialogue (13 gaps)
|
||||
- ❌ TR-dialogue-003/004 (esquema de nodos), 005 (avance), 006 (branching), 008-013 (typewriter, anti-skip, fail-safes), 014 (estados), 017/018 (config)
|
||||
|
||||
→ Suggested ADR: **ADR-0012 — Dialogue (nodos, branching y presentación)**
|
||||
Domain: Gameplay Logic / UI · Engine Risk: LOW
|
||||
|
||||
### Feature layer — Dead Kings (13 gaps)
|
||||
- ❌ TR-dead-kings-003 (validación input), 006 (FIFO 100), 007/008 (spawn probabilístico), 009-016 (fallbacks, reveal, sanitización, debounce), 017 (estados)
|
||||
|
||||
→ Suggested ADR: **ADR-0013 — Dead Kings (input, pool y spawn)**
|
||||
Domain: Gameplay Logic / Persistence · Engine Risk: LOW
|
||||
|
||||
### Polish layer — Audio (2 gaps)
|
||||
- ❌ TR-sfx-001 (bus de audio), TR-music-001 (música por escena)
|
||||
|
||||
→ Suggested ADR: **ADR-0014 — Audio/SFX (buses y gestión)**
|
||||
Domain: Audio · Engine Risk: MEDIUM
|
||||
|
||||
### Feature layer — otros (5 gaps)
|
||||
- ❌ TR-cloud-sync-001 — persistencia cloud de Reyes Muertos (Full Vision, no MVP)
|
||||
- ❌ TR-vs-001, TR-vs-002 — alcance del VS (30-60 min, ver un Rey Muerto ajeno)
|
||||
- ❌ TR-game-pillars-004, TR-game-pillars-006 — backend y desvanecimiento del pool (P3)
|
||||
|
||||
### Core layer — menor (5 gaps)
|
||||
- ❌ TR-ai-018 — feedback visual de la IA (indicador 'pensando', deslizamiento) — Polish
|
||||
- ❌ TR-campaign-009, TR-campaign-013, TR-campaign-014 — fórmula de dificultad efectiva, estados de campaña y duración del memorial
|
||||
- ❌ TR-game-concept-003, TR-game-concept-007 — duración de sesión y dificultad creciente (medibles, no arquitectura)
|
||||
|
||||
## Superseded Requirements
|
||||
|
||||
None — first review run (2026-08-16). All 145 registered requirements are `active`.
|
||||
Registry: `docs/architecture/tr-registry.yaml` (version 2).
|
||||
@@ -0,0 +1,9 @@
|
||||
# Session State
|
||||
|
||||
## Session Extract — /architecture-review 2026-08-16
|
||||
- Verdict: CONCERNS
|
||||
- Requirements: 145 total — 51 covered, 27 partial, 67 gaps
|
||||
- New TR-IDs registered: 145 (first run; all `active`)
|
||||
- GDD revision flags: None
|
||||
- Top ADR gaps: ADR-0010 Piece Identity (estados), ADR-0011 Dice/Purgatorio (reglas/estado), ADR-0012 Dialogue (nodos/branching)
|
||||
- Report: docs/architecture/architecture-review-2026-08-16.md
|
||||
Reference in New Issue
Block a user