Convenciones para contribuir
Agregar un recurso o un verbo
Cada recurso es un paquete en cmd/<recurso>/ con un archivo por verbo:
cmd/holder/
root.go # var Cmd = &cobra.Command{Use: "holder", Short, Long}; AddCommand(...) en init()
get.go # var getCmd, flags en init(), HolderGetResult, runHolderGet
list.go
Un verbo nuevo sigue el molde de los existentes:
var xxxCmdconUse,Short,LongyExample, todo en inglés.Examplees obligatorio en todo comando ejecutable: un ejemplo realista, con--tenant acme-banksi necesita tenant. El test decmd/docs_test.gofalla si falta.- Un tipo de resultado que implementa
output.Renderer(Human() string) y, por convención,MarshalJSON()devolviendo el objeto del SDK. Se imprime conoutput.Render(cmd, resultado). RunEque abre el cliente congrpc.NewSDK(cmd.Context())y, si el comando tiene alcance de tenant, arma el contexto congrpc.PrepareContextWithTenant.- Registrar el recurso nuevo en
cmd/root.goconrootCmd.AddCommand(...). make docsenoctopus-cli(omake cli-docsacá) regenera la referencia. No se edita a mano.
octopus-cli no está en go.work
El módulo no figura en el go.work del workspace, así que go falla si no se desactiva. El Makefile del CLI ya exporta GOWORK=off; si corrés go a mano, hacelo igual. Esta documentación no cambia eso: solo lo registra.
Tests: brecha conocida
Según el INVENTORY.md del workspace (2026-05), octopus-cli tiene 0 tests. Hoy hay uno solo, el del generador de documentación. Cerrar esa brecha es parte de la Fase 0 del roadmap: «CLI: Example en todos los comandos, generador de docs, tests».