Skip to content

[ONB-4067] Paridad con la API pública - #58

Draft
FranciscaOtero wants to merge 9 commits into
mainfrom
compose/paridad-api-publica-1bb9
Draft

FranciscaOtero wants to merge 9 commits into
mainfrom
compose/paridad-api-publica-1bb9

Conversation

@FranciscaOtero

@FranciscaOtero FranciscaOtero commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Contexto

La CLI solo cubría una parte de la API pública. Este PR la deja al día con los specs OpenAPI (main-api.json de fintoc-rails y core-api.json de pacioli): todas las operaciones públicas de /v1 y /v2 tienen comando, y sus parámetros tienen flag.

Que hay de nuevo?

  • fintoc sube a 1.30.1, que trae la subida de documentos de disputas y los query params de refresh intents.
  • Cobertura completa: verbo update, acciones declaradas en el registry (cancel, pay, void, voucher_url, submit, etc.), recursos anidados (v2 subscription_items, v2 invoice_lines) y subida de archivos con --file. Hoy son 147 comandos.
  • Flags nuevos: --metadata key=value (repetible) en todo lo que acepta metadata, y los parámetros que faltaban según los specs.
  • Experiencia para scripts y agentes:
    • con --json, todos los errores salen como JSON en stderr con type, code estable y param, y no se escribe nada más en stderr
    • fintoc --json commands lista cada comando con sus flags y el parámetro de la API que mandan
    • alias en kebab-case (submit-for-review) y sugerencias ante typos
    • las confirmaciones avisan cuando la llave es live
    • create y las acciones POST (pay, cancel, return, ...) aceptan --idempotency-key
    • list avisa cuando puede haber más resultados que --limit (sin --json, para no ensuciar stderr)
  • Commander hace el parseo y la validación de flags (argParser, makeOptionMandatory, helpGroup). La ayuda muestra primero los parámetros de la API.

Tests

  • Tests del factory para verbos, acciones, archivos, flags tipados, errores en JSON y confirmaciones
  • Tests end to end sobre el CLI compilado para los errores JSON y fintoc commands
  • backward-compat.test.ts compara el registry con la superficie publicada (fixtures/published-surface.json, que parte de v0.4.0). Falla si se quita un comando, flag u opción, cambia un tipo, un flag pasa a ser obligatorio o un comando empieza a pedir confirmación. Regenerarlo solo agrega, así que no puede esconder una ruptura

Consideraciones

  • No rompe a nadie: comparé contra main y los 33 comandos publicados conservan sus flags, tipos y argumentos. --type de v2 accounts list, que la API ignoraba, queda deprecado: se acepta, avisa y no se envía.
  • Hay cambios que corrigen comportamiento: repetir un flag de lista ahora manda todos los valores (antes solo el último) y delete --json imprime {id, deleted}.
  • Arrays de objetos (items, lines, transfers) y campos en null siguen yendo por --from-json.
  • Quedan fuera, para otro PR: exit codes distintos por tipo de error, --dry-run, cursores de paginación (starting_after) y ejemplos en --help.

🤖 Generated with Claude Code

@FranciscaOtero FranciscaOtero added the agent:compose PR created by Compose AI agent label Oct 27, 2026
@FranciscaOtero FranciscaOtero self-assigned this Oct 27, 2026
@fin-hermes fin-hermes Bot added the size/XXL label Oct 27, 2026
@FranciscaOtero FranciscaOtero changed the title [ONB-4067] [Compose] Paridad con la API pública [ONB-4067] Paridad con la API pública Oct 27, 2026
FranciscaOtero and others added 5 commits October 30, 2026 17:02
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Con --json, handleError emite {error: {type, code, param, message}} en stderr. --from-json lanza UsageError en vez de salir directo, y trigger lee el JSON dentro de su try. Los errores de la API también incluyen param.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
El factory pasa a generar cualquier operación a partir de ResourceDef, y el registry declara todos los recursos, verbos, acciones y parámetros de los specs main-api y core-api.

- Verbo update, acciones genéricas (cancel, pay, voucher_url, submit, ...) con confirmación para las destructivas, recursos anidados con path params y subida de archivos con --file
- Commander parsea y valida los flags: integer, boolean (también sin valor), listas repetibles o separadas por coma, y map para --metadata key=value
- Los errores de uso y los de Commander salen como JSON con --json, con códigos estables
- --idempotency-key en create y en las acciones POST, aviso de modo live al confirmar y delete --json con {id, deleted}
- Alias en kebab-case y sugerencias ante comandos mal escritos
- --type de v2 accounts list queda deprecado: se acepta, no se envía y avisa

Co-Authored-By: Claude Opus 5.5 <[email protected]>
fintoc --json commands lista cada comando con sus argumentos, flags (tipo, parámetro de la API y si va en path, query o body), opciones y alias.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
fixtures/published-surface.json parte de la superficie de v0.4.0 y suma los comandos nuevos. El test falla si se quita un comando, flag u opción, cambia un tipo o los argumentos, un flag pasa a ser obligatorio o un comando empieza a pedir confirmación. UPDATE_CLI_SURFACE=1 solo agrega, así que no puede esconder una ruptura.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@FranciscaOtero
FranciscaOtero force-pushed the compose/paridad-api-publica-1bb9 branch from 8e7db45 to 2c17338 Compare October 30, 2026 20:04
FranciscaOtero and others added 4 commits October 30, 2026 17:27
…a mano

- logout, config set, open y doctor imprimen JSON con --json; doctor entrega cada chequeo con su estado
- login usa la misma confirmación que el resto (stderr, No por defecto, "Aborted.") y, con --api-key y --json, imprime el resultado en JSON
- Los errores de config set y login pasan por UsageError, así que también salen en JSON
- webhooks listen ya no se cae sin API key: el error pasa por handleError
- Los mensajes de JWS listan todos los comandos que firman

Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Los flags compartidos usan el mismo texto en todos los recursos, con reglas comunes para valores, notas por país, montos y fechas
- Mensajes de éxito con mayúscula y el ID del objeto, y confirmaciones que se leen bien (remove lines from invoice 'in_1')
- Los recursos que existen en v1 y v2 dicen a qué API pertenecen, y la ayuda usa Options, ID y sentence case en todos lados
- transfers return recibe el ID como argumento posicional, check_eligibility es una escritura y los path params faltantes quedan marcados
- Los flags obligatorios, incluidos los path params, fallan con el mismo mensaje y sus hints de uso
- Tests de estilo que fallan si una descripción se sale de la guía o si un flag compartido cambia de texto

Co-Authored-By: Claude Opus 5.5 <[email protected]>
login, config, doctor, open, trigger, webhooks y commands aparecen con kind "utility", sus argumentos y sus opciones, leídos del árbol de Commander.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…o mantener la compatibilidad

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@FranciscaOtero
FranciscaOtero force-pushed the compose/paridad-api-publica-1bb9 branch from 2c17338 to 8c7314d Compare October 30, 2026 20:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent:compose PR created by Compose AI agent risk:low size/XXL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant