dec-0047

Vista generada de dec-0047: Enum qualityPolicy con 4 valores nombrados (PRESERVE_SOURCE | ADAPT_IF_NEEDED | FAIL_IF_UNSUSTAINABLE | DOWNLOAD_BEFORE_PLAY), default flagship

ImplementadoSin versión del tren todavía· generada desde docs/decisions/dec-0047-enum-qualitypolicy-4-valores-nombrados.md
track/docsdec-0124track/docs:DC10

Vista generada desde docs/decisions/dec-0047-enum-qualitypolicy-4-valores-nombrados.md. No se edita a mano: bun run docs:gen la regenera y bun run docs:check falla si difiere. El estado aquí es el del model: si discrepa con otra página, manda el model.

CampoValor
EstadoLOCKED (migrado de un rNN por gate-3: el fichero no declara estado)
Referencia legadaL2-quality-policy-enum
Ficherodocs/decisions/dec-0047-enum-qualitypolicy-4-valores-nombrados.md

Enmienda a: r32-bitrate-not-a-gate-2026-06-24

Por qué importa (del frontmatter del ADR):

Mismo rule file .claude/rules/codec-agnostic-architecture.md:42 (enum completo citado), roadmap.spec.yml:925 (título del gate r32 menciona explícitamente 'qualityPolicy enum'), ROADMAP.md:287-288, TKT-014-post-adversarial-integration.md:29 ('qualityPolicy enum (ver addendum r32)' como dependencia declarada para el draft r33). Todavía SIN footprint en código/impl-spec (grep de docs/specs/r32-playback-planner-impl-spec.md no encuentra 'qualityPolicy' ni los 4 valores) — es vocabulario forward-declarado, no implementado, pero ya citado como canónico por 3 documentos de gobierno distintos.

Nodos del roadmap que lo citan en refs: ninguno.

Páginas de la documentación que lo citan: ninguna todavía.

Texto del ADR

Leído de docs/decisions/dec-0047-enum-qualitypolicy-4-valores-nombrados.md, el fichero canónico.

Enum qualityPolicy con 4 valores nombrados (PRESERVE_SOURCE | ADAPT_IF_NEEDED | FAIL_IF_UNSUSTAINABLE | DOWNLOAD_BEFORE_PLAY), default flagship

Enum qualityPolicy con 4 valores nombrados (PRESERVE_SOURCE | ADAPT_IF_NEEDED | FAIL_IF_UNSUSTAINABLE | DOWNLOAD_BEFORE_PLAY), default flagship = PRESERVE_SOURCE, declarado aquí como vocabulario que condiciona DIRECT_POLICY_SELECTED aunque el control-loop completo se difiera a r33 (aún draft).

Por qué pasa gate-3

  • Hard-to-reverse: Eliminar o cambiar el enum qualityPolicy requeriría modificar r33 (control loop) que depende de él para decidir cuándo downswitch vs stall/error. Afecta la contract del PlaybackPlan y la UX de calidad adaptativa. Es un cambio estructural en el modelo de política de calidad.
  • Surprising sin contexto: Un ingeniero sin el contexto del addendum podría inferir r32 original (bitrate no veta elegibilidad) pero NO inferiría que existe una capa de 'policy de sesión' que decide entre preserve_source, adapt_if_needed, fail_if_unsustainable, etc. La existencia de este enum como entrada a DIRECT_POLICY_SELECTED no es obvia.
  • Trade-off real: La alternativa era un default único 'preserve_source' sin configuración (axioma universal). El trade-off visible es flexibilidad (4 políticas configurables) vs simplicidad (un solo comportamiento inamovible). El addendum rechaza el axioma universal y opta por flexibilidad controlada.

Procedencia

Split de docs/decisions/r32-addendum-eligibility-sustainability-policy-2026-06-24.md (lock L2-quality-policy-enum) durante PASO 7 (2026-07-16). Ver el fichero padre para el contexto completo del pack original.