Skip to content

registry.test.ts guarda 16 campos del adapter cuando el contrato tiene 17: capabilities no está medido #28

Description

@A-PachecoT

Contexto

src/components/chat-sim/adapters/__tests__/registry.test.ts:20-34 se titula "the two adapters implement all 16 fields with no optionals" y afirma expect(FIELDS).toHaveLength(16).

El contrato tiene 17. capabilities entró como 17º campo en T-029 (517bd2f) y no está en la lista FIELDS:

$ awk '/^export interface ChannelAdapter/,/^}/' src/components/chat-sim/core/types.ts | grep -oE "^  (readonly )?[a-zA-Z]+" | awk '{print $NF}' | sort
album avatarSide bubbleTransport capabilities counter deliveryStates e2eNotice groupKey
keyboard quote reactionConstraint reactions receipt senderKinds tail timestamp wallpaper   # 17

El toHaveLength(16) pasa — porque el número coincide con la lista escrita a mano, no con el contrato. La guarda quedó anclada a su propio texto.

Por qué no se notó: exports.test.ts cubre los 17 por separado, así que la suite está verde y el campo sí está probado. Pero esta guarda específica — la que existe para gritar cuando alguien agrega un campo al adapter y se olvida de implementarlo en un canal — no vería el 18º tampoco. Es la misma clase que las "sondas que no medían" que este ciclo ya catalogó: verde que no significa lo que su nombre promete.

Fix propuesto

Derivar FIELDS del tipo, no de una lista a mano — así agregar un campo rompe la guarda por construcción en vez de por memoria. Si eso no es viable, como mínimo agregar 'capabilities' y cambiar el toHaveLength a 17 y el título del describe.

Criterios de aceptación

  • La guarda cubre los 17 campos actuales
  • Agregar un 18º campo a ChannelAdapter rompe este test sin que nadie edite el test

Verificación (runnable)

npx vitest run src/components/chat-sim/adapters; echo "exit=$?"   # espera 0

Gemelo obligatorio — es el punto entero del issue: agregá un campo foo: string a ChannelAdapter en core/types.ts sin implementarlo en whatsapp.ts, y confirmá que este test se pone rojo. Hoy no lo hace. Revertí.

Guardrails

  • No arreglarlo subiendo el número a 17 y nada más: eso repite el bug en el siguiente campo
  • No tocar exports.test.ts, que sí cubre los 17

Scope

src/components/chat-sim/adapters/__tests__/registry.test.ts. Refs: T-029 (517bd2f), .cofoundy/specs/adapter-interface-draft.md.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions